求个网站没封的2021,办公室装修公司哪里好,做网站的叫什么职位,wordpress4.7源码下载前言#xff1a;如果把所有的程序代码都写在一个主函数(main函数)中#xff0c;就会使主函数变得庞杂、头绪不清#xff0c;使阅读和维护程序变得困难。此外#xff0c;有时程序中要多次实现某一功能#xff0c;如果重新编写实现此功能就会使得程序冗长、不精炼。 #x…前言如果把所有的程序代码都写在一个主函数(main函数)中就会使主函数变得庞杂、头绪不清使阅读和维护程序变得困难。此外有时程序中要多次实现某一功能如果重新编写实现此功能就会使得程序冗长、不精炼。 博主CSDN主页:卫卫卫的个人主页 专栏分类:C程序设计谭浩强版本 代码仓库:卫卫周大胖的学习日记 关注博主和博主一起学习!一起努力 目录 怎样定义函数为什么要定义函数 调用函数函数调用的形式函数调用时的数据传递函数调用的过程函数的返回值 习题练习 怎样定义函数
为什么要定义函数 C语言要求在程序中所用到的所有函数必须“先定义后使用”。例如max函数去求两个数的较大者必须事先先按规范对它进行定义指定它的名字、函数返回值类型、函数实现的功能以及参数的个数与类型将这些信息通知编译系统。这样在程序执行max时编译系统就会按照定义时所指定的功能执行。如果事先不定义编译系统怎么能知道max是什么、要实现什么功能。 定义函数应包括以下几个内容
指定函数的名字以便以后按名调用指定函数的类型即函数的返回值类型指定函数的参数的名字和类型以便在调用函数时向它们传递数据。对无参函数不需要这项。指定函数应当完成什么操作也就是函数是做什么的即函数的功能。这是最重要的是在函数体中解决的。
定义函数的方法
定义无参函数 注函数名后面括号内的void表示空,即函数没有参数。 函数体内包括声明部分和语句部分。 定义有参函数 类型名 函数名() { 函数体 } 函数体包括声明部分和语句部分 或 类型名 函数名void { 函数体 }
以下定义的max函数是有参函数
int max(int x,int y)
{int z; //声明部分z x y? x:y;return z;类型名 函数名(形式参数列表) { 函数体 } 函数体包含声明部分和语句部分 定义空函数
void dummy() //类型名:void函数名:dummy
{}调用函数
函数调用的形式
函数调用一般形式为: 函数名(实参列表)
函数调用语句 把函数调用单数作为一个语句。例如:
void print()
{printf(***********\n);
}
int main()
{print();//此时函数不带回任何值return 0;
}
函数表达式 函数调用出现在另一个表达式中例如cmax(a,b); max(a,b) 是一次函数调用它是赋值表达式的一部分。这时函数带回一个确定的值以参加运算。例如
c max(a,b);//将a和b中的较大值赋给c值3.函数参数 函数调用作为另一个函数调用时的实参。例如
m max(a,max(b,c));//将b,c中的较大值与a比较在将他们的最大值赋值给m函数调用时的数据传递
1.形式参数和实际参数 在调用有参函数时主调函数和被调用函数之间有数据传递关系。从前面已知在定义函数时函数名后面括号中的变量名称为形式参数(简称形参)或虚拟参数。在主函数中调用一个函数时函数名后面括号中的参数称为实际参数(简称实参)。实际参数可以是常量、变量或表达式。 2. 实际参数和形参间的数据传递 在调用函数的过程中系统会把实参的值传递给被调用函数的形参。或者说形参从实参得到了一个值。该值在函数调用期间有效可以参加该函数的运算。 例题输入两个整数要求输出其中值较大者。要求用函数来找到大数。
int Max(int x, int y)
{return x y ? x : y;
}
int main()
{int a 0;int b 0;scanf(%d %d, a, b);int ret Max(a, b);printf(max %d\n, ret);return 0;
}运行结果 函数调用的过程
在定义函数中指定的形参在未出现函数调用时它们并不占内存中的存储单元。在发生函数调用时函数max的形参才被临时分配内存单元。可以通俗的理解成形参是对实参的一份临时拷贝。将实参的值传递给对应的形参。在执行max函数期间由于形参已经有值就可以利用形参进行有关的运算。通过return语句将函数值带回主调函数。且应当注意返回值的类型与函数类型一致。如果函数不需要返回值则不需要return语句。这时函数的类型定义为void类型。调用结束形参单元被释放。注意实参单元仍保留并维持原值没有改变。
函数的返回值
通常希望通过函数调用使用主调函数能得到一个确定的值这就是函数值(函数的返回值)。
函数的返回值是通过函数中的return语句获得的。函数值的类型。既然函数有返回值这个值当然应属于某一个确定的类型应当在定义函数时指定函数值的类型。在定义函数时指定的函数类型一般应该和return语句中的表达式一致。 习题练习
例题1写两个函数分别求两个整数的最大公约数和最小公倍数用主函数调用这两个函数并输出结果。
int common_divisor(int x, int y)
{int max x y ? x : y;int min x y ? x : y;while (min){if (x % min 0 y % min 0)//将它们两个数的较小的数往下除{return min;}min--;}
}
int common_multiple(int x, int y)
{int n 1;while (n * x % y ! 0)//最小公倍数一定是他们两个的倍数{n;}return n * x;
}
int main()
{int num1 0;int num2 0;scanf_s(%d %d, num1, num2);int divisor common_divisor(num1, num2);//最大公约数int multiple common_multiple(num1, num2);//最小公倍数printf(divisor %d multiple %d\n, divisor,multiple);return 0;
}运行结果 例题2写一个判素数的函数在主函数输入一个整数输出是否为素数的信息。
void prime_number(int x)//素数只有1和它本身能被整除
{int flag 0;int i 0;if (x 1)//如果该数是1就直接返回素数{printf(是素数\n);}else if (x 0)//是0就返回不是{printf(不是素数\n);}else{for (i 2; i x; i)//从2开始到它本身看是否有能被整除的数{if (x % i 0){flag 1;break;}}if (flag){printf(不是素数\n);}else{printf(是素数\n);}}
}
int main()
{int n 0;scanf_s(%d, n);prime_number(n);return 0;
}运行结果: 例题3写一个函数使输入的一个字符串按反序存放在主函数中输入和输出字符串。
void reverse_arr(char* str, int len)//逆序字符串
{char* left str;//保存左边的地址char* right str len - 1;//保存右边的地址while (left right)//两两进行交换{char tmp *left;*left *right;*right tmp;left;right--;}
}
int main()
{char arr[100] { 0 };gets(arr);printf(initial:%s\n, arr);int len strlen(arr);reverse_arr(arr,len);int i 0;printf(reverse:%s\n, arr);return 0;
}运行结果 结语今天的内容就到这里吧谢谢各位的观看如果有讲的不好的地方也请各位多多指出作者每一条评论都会读的谢谢各位。 祝各位接下来好运连连