全国计算机等级考试二级教程-C语言程序设计_第7章_函数

时间:2023-03-08 21:19:24

函数执行,从右到左执行

 #define _CRT_SECURE_NO_WARNINGS

 #include<stdio.h>
#include<string.h> main()
{
int num = ; printf("%d,%d\n", num, ++num);//函数执行,从右到左执行 system("pause");
}

输出结果:

101,101
请按任意键继续. . .

函数

 #include <stdio.h>
void max(int i, int j) //max是函数的名字,i和j是形式参数,简称形参,void表示函数没有返回值
{
if (i > j)
printf("%d\n", i);
else
printf("%d\n", j);
} main()
{
int a, b, c, d, e, f;
a = , b = , c = , d = , e = -, f = ; max(a, b);
max(c, d);
max(e, f);
}

为什么需要函数?

避免了重复性操作。

有利于程序的模块化。

什么叫函数?

逻辑上:能够完成特定功能的独立的代码单元。

物理上:能够接收数据(当然也可以不接收数据),能够对接收的数据进行处理,能够将数据处理的结果返回(当然也可以不返回任何值)。

总结:函数是个工具,它是为了解决大量类似问题而设计的。函数可以当做一个黑匣子。

如何定义函数?

函数的返回值,函数的名字(函数的形参列表)

{

函数的执行体

}

1 函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法

2 return 表达式; 的含义

1) 终止被调函数,向主调函数返回表达式的值

2) 如果表达式为空,则只终止函数,不向主调函数返回任何值

3) break 是用来终止循环和 switch 的。return 是用来终止函数的。

 void f()
{
return; //return只用来终止函数,不向被调函数返回任何值
} int f()
{
return ; //第一,终止函数。第二,向主调函数返回10
}

3 函数返回值的类型也称为函数的类型,因为如果函数名前的返回值类型和函数执行体中的 return 表达式; 中表达式的类型不同的话,则最终函数返回值的类型以函数名前的返回值类型为准

 #include <stdio.h>

 int f()
{
return 10.5; //因为函数的返回值类型是int,所以最终f返回的是10而不是10.5
} main()
{
int i = ;
double x = 6.6; x = f();
printf("%f\n", x);
}

输出格式:

10.000000
请按任意键继续. . .

函数的分类:

有参函数 和 无参函数

有返回值函数 和 无返回值函数

库函数 和 用户自定函数

值传递函数 和 地址传递函数

普通函数 和 主函数(main 函数)

1 一个程序必须有且只有一个主函数

2 主函数可以调用普通函数,普通函数不能调用主函数

3 普通函数可以相互调用

4 主函数是程序的入口,也是程序的出口

7.1 编写函数 isprime(int a),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0。

 #include <stdio.h>
int isprime(int); /*isprime函数的说明语句*/
main()
{
int x;
printf("Enter a integer number:");
scanf("%d", &x); /*从键盘输入一个整数*/
if (isprime(x))
printf("%d is prime\n", x); /*当函数返回1时,输出“是素数”*/
else
printf("%d is not prime\n", x); /*当函数返回0时,输出“不是素数”*/
} int isprime(int a) /*定义isprime函数*/
{
int i;
for (i = ;i <= a / ;i++)
{
if (a%i == )
return ; /*a一旦能被某个数整除,即不是素数,返回0*/
}
return ; /*a不能被2到a/2之间任何一个数整除,返回1*/
}

7.2 编写函数,验证任意偶数为两个素数之和,并输出这两个素数。

若将验证的数放在变量x中,可依次从x中减去i,i从2变化到 x/2 。步骤如下:

(1) i 初值为2

(2) 判断 i 是否是素数,若是,执行步骤(3);若不是,执行步骤(5)

(3) 判断 x - i 是否是素数,若是,执行步骤(4);若不是,执行步骤(5)

(4) 输出结果,返回调用函数

(5) 使i增1

(6) 重复执行步骤(2),直到 i>x/2

 #include <stdio.h>
int isprime(int); /*isprime函数的说明语句*/
void even(int); /*even函数的说明语句*/
main()
{
int a;
printf("Enter a even number:");
scanf("%d", &a);
if (a % == )
{
even(a);
}
else printf("The %d is not even number\n", a);
} void even(int x) /*定义even函数*/
{
int i;
for (i = ;i <= x;i++)
{
if (isprime(i))
if (isprime(x - i))
{
printf("%d=%d+%d\n", x, i, x - i);
return;
}
}
} int isprime(int a) /*定义isprime函数*/
{
int i;
for (i = ;i <= a / ;i++)
{
if (a%i == )
return ; /*a一旦能被某个数整除,即不是素数,返回0*/
}
return ; /*a不能被2到a/2之间任何一个数整除,返回1*/
}

7.3 编写函数 sum(int n) 用以求 ∑f(x) ,和数作为函数值返回。这里 f(x)=x^(2)+1

 #include <stdio.h>
int sum(int); /*sum函数的说明语句*/
int f(int); /*f函数的说明语句*/
main()
{
int a, b;
printf("Enter a integer number:"); /*输入一个整数*/
scanf("%d", &a);
b = sum(a); /*调用sum函数求f(x)的累加和*/
printf("a=%d sum=%d", a, b);
} int sum(int n) /*定义sum函数*/
{
int x, s = ;
for (x = ;x <= n;x++)
{
s += f(x);
}
return s; /*返回累加和*/
} int f(int x) /*定义f(x)函数*/
{
return x*x + ;
}

7.4 编写函数 myupper(ch),把ch中的小写字母转换成大写字母作为函数值返回,其他字符不变。主函数中不断输入字符,用字符@结束输入,同时不断输出结果。

按要求 myupper 函数的返回值类型应当是 char 类型。程序如下:

 #include <stdio.h>
#include <ctype.h>
char myupper(char ch)
{
if (ch >= 'a'&&ch <= 'z')
ch = ch - ;
return ch;
} main()
{
char c;
while ((c = getchar()) != '@')
{
c = myupper(c);
putchar(c);
}
}

7.5 编写函数统计输入字符的个数,用@字符结束输入。在主函数中调用此函数,输出统计结果。

 #include <stdio.h>
long countch(); /*countch函数说明语句*/
main()
{
long n;
n = countch();
printf("n=%ld\n", n);
} long countch()
{
long cn;
for (cn = ;getchar() != '@';cn++);
return cn;
}

7.6 编写函数,根据整型形参n的值,计算如下公式的值:

1-1/2+1/3-1/4+1/5-1/6+1/7-...+ ((-1)^(n+1)) /n

 #include <stdio.h>
double fun(int);
main()
{
int n;
double a;
scanf("%d", &n);
a = fun(n);
printf("%f", a);
} double fun(int n)
{
int k, s = ;
double add = ;
for (k = ;k <= n;k++)
{
add = add + 1.0*s / k;
s = -s;
}
return add;
}

7.7 编写函数,根据整型形参m的值,计算如下公式的值:

t=1-1/(2*2)-1/(3*3)-...-1/(m*m)

 #include <stdio.h>
double fun(int);
main()
{
int m;
double a;
scanf("%d", &m);
a = fun(m);
printf("%f", a);
} double fun(int m)
{
int k, j = ;
double add = , t;
for (k = ;k <= m;k++)
{
t = 1.0 *j / (k*k);
add = add + t;
j = -;
}
return add;
}