目录
学习目标:
学习内容:
2.1有参函数定义的一般形式
2.2形式参数和实际参数
2.3函数的返回值
2.4函数的调用
学习产出:
3.1、用冒泡或者插入法实现对字符串排序
2、用函数实现打印指定范围内所有的素数
3、编写函数实现求最大公约数gcd和最小公倍数lcm
学习总结:
理解和掌握函数的概念与使用。函数是程序中完成特定任务的代码块,它可以接收输入参数并返回结果。通过函数的使用,提高代码的复用性、模块化和可读性
定义有参函数的一般形式为:
类型标识符 函数名(形式参数表列)
{
声明部分
语句部分
}
无参函数相当于有参函数的特殊形式,这里不另做说明。
在为函数命名时,可以使用驼峰命名法。第一个单词的首字母小写,后续每个单词的首字母大写。这种命名方式使得标识符看起来像骆驼的峰背一样,有高有低,因此得名“驼峰命名法”。例如,
myFirstName
和
myLastName
都是采用了驼峰命名法。
形式参数是在函数定义时声明的变量,而实际参数是在调用函数时传递的具体值。形式参数用于在函数内部表示这些值,而实际参数则是具体的数据。
关于形参与实参的说明:
(1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单
元。只有在发生函数调用时,函数ax中的形参才被分配内存单元。在调用结束后,形
参所占的内存单元也被释放。
(2)实参可以是常量、变量或表达式,即实参可以是左值也是可以右值或者是隐式转换后和形参类型匹配 但要求它们有确定的值。在调用时将实参的值赋给形参。
(3)在被定义的函数中,必须指定形参的类型
(4)实参与形参的类型应相同或赋值兼容。字符型与整型可以互相通用。
(5)在C语言中,实参向形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。
通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。
(1)函数的返回值是通过函数中的return语句获得的。return语句将被调用函数中的一个确定值带回主调函数中去。如果需要从被调用函数带回一个函数值(供主调函数使用),被调用函数中必须包含return语句。如果不需要从被调用函数带回函数值可以不要return语句。一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。
(2)在定义函数时指定函数值的类型。在C语言中,凡不加类型说明的函数,自动按整型处理。对数值型数据,可以自动进行类型转换。有时,可以利用这一特点进行类型转换,如在函数中进行实型运算,希望返回的是整型量,可让系统自动完成类型转换。但这种做法往往使程序不清晰,可读性降低,容易弄错,而且并不是所有的类型都能互相转换的(如实数与字符类型数据之间)。因此建议不要采用这种方法,而应做到使函数类型与return返回值的类型一致。
(3)对于不带回值的函数,应当用“void”定义函数为“无类型”(或称“空类型”)。
函数名(实参表列);
调用时注意实参和形参的个数相等类型匹配。实参可以是左值也是可以右值或者是隐式转换后和形参类型匹配
1 #include
2 #include
3 int main(void)
4 {
5 char s[][100] = {"Hello","World","China","America","Mao","Pao"};
6 int rows = sizeof(s) / sizeof(s[0]);
7 int i = 0;
8 int j = 0;
9 for(j = rows - 1;j > 0;--j)
10 {
11 for(i = 0 ; i < j;++i)
12 {
13 if(strcmp(s[i],s[i + 1]) > 0)
14 {
15 char room[100];
16 strcpy(room , s[i]);
17 strcpy(s[i], s[ i + 1]);
18 strcpy(s[i + 1], room);
19 }
20 }
21 }
22
23 for(i = 0;i < rows;++i)
24 {
25 puts(s[i]);
26 }
27 }
输出结果:
1 #include
2 int isSu(int i)
3 {
4 int j;
if(a > 0 && b > 0)
{
5 for ( j = 2;j < i; ++j )
6 {
7 if(i % j == 0)
8 {
9 return 0;
10 }
11 else
12 {
13 return 1;
14 }
15 }
}
16 return -1;
17 }
18 void printfisSu(int begin, int end)
19 {
20 int i;
21 for(i = begin; i <= end;++i)
22 {
23 if(isSu(i) == 1)
24 {
25 printf("%d ",i);
26 }
27 if(isSu(i) == -1)
28 {
29 printf("error\n");
30 return ;
31 }
32 }
33 printf("\n");
34 }
35 int main(void)
36 {
37 int a = 0;
38 int b = 0;
39 printf("请输入第一个数:");
40 scanf("%d",&a);
41 printf("请输入第二个数:");
42 scanf("%d",&b);
43 printfisSu(a,b);
44 return 0;
45 }
输出结果:
1 #include
2 int max(int a,int b)
3 {
4 return a > b ? a : b;
5 }
6
7 int gcd(int a,int b)
8 {
9 int i;
10 if(a > 0 && b >0)
11 {
12 for(i = max(a,b);i > 0;--i)
13 {
14 if(a % i == 0 && b % i == 0)
15 {
16 return i;
17 }
18 }
19 }
20 return -1;
21 }
22
23 int lcm(int a,int b)
24 {
25 int i;
26 if(a > 0 && b >0)
27 {
28 for(i = max(a,b);;++i)
29 {
30 if(i % a == 0 && i % b == 0)
31 {
32 return i;
33 }
34 }
35 }
36 return -1;
37 }
38
39 void printfError(int a)
40 {
41 if(a > 0)
42 {
43 printf("%d\n",a);
44 }
45 else
46 {
47 printf("error\n");
48 }
49 }
50 int main(void)
51 {
52 int a = 0;
53 int b = 0;
54 printf("请输入第一个数:");
55 scanf("%d",&a);
56 printf("请输入第二个数:");
57 scanf("%d",&b);
58 printfError(gcd(a,b));
59 printfError(lcm(a,b));
60 return 0;
61 }
输出结果:
函数的定义:函数是一段具有特定功能的代码块,它可以接收输入参数并返回结果。函数的使用提高了代码的复用性、模块化和可读性。
函数的形式参数和实际参数:形式参数用于在函数内部表示这些值,而实际参数则是具体的数据。
函数的返回值:函数可以有返回值,这个返回值要符合函数的数据类型。通过return语句可以将函数的结果返回给调用者。
函数的调用:要使用函数,必须对其进行调用。调用时需要提供与形式参数匹配的实际参数,然后执行函数体中的代码。