零基础学习c语言---函数
(一)函数的概念在我们平时学习数学时会经常用到函数一次函数二次函数反函数……而在c语言中也引入了函数的概念。(二)库函数在c语言中的函数一般分为库函数和自定义函数。库函数在我们之前的学习中就已经学习了一部分。比如printfscanf都是常见的库函数而库函数在c语言中是现成的只要学会了就可以直接用比如printf输出数据scanf输入数据而它们的使用必须在相应的头文件里进行输入输出必须报含头文件#include stdio.hsqrt()函数也就是计算平方根它则必须报含头文件#includemath.h(三)自定义函数除了库函数外c语言中还有自定义函数它的形式如下ret_type fun_name() { } //ret_type是函数返回类型 //fun_name是函数名 //()里的放形式参数 //{}里放的是函数体它不像库函数一样我们学会了就可以直接使用它是需要我们给它规定它要完成的任务。注意⚠️:我们在使用函数时要将函数的参数部分交代清楚1:参数个数。2:每个参数的类型是什么。3:形参的名字。比如我们想要完成一个加法运算那么我们就可以写一个加法函数Add()如下代码#include stdio.h int Add(int x,int y)//x,y是形式参数 { int z0; zxy; return z; } int main() { int a0; int b0; scanf(%d %d,a,b); int rAdd(a,b); //a,b是实际参数 printf(%d\n,r); return 0; }在上述代码中加法函数括号里的是形式参数而在主函数里的加法函数括号中的是实际参数。实际参数和形式参数虽然有联系但是它们是各自独立的在上述代码中当我们调用了加法函数Add()时里面的形式参数才会向内存申请空间如果没有调用加法函数那么Add函数的参数xy就不会向内存申请空间就不是真实存在(四)return语句在函数的设计中会经常出现return语句。这里是使用return语句的几个注意事项⚠️1:return后面可以是数值像上方Add函数return后面也可以直接是表达式比如下方Add函数#include stdio.h int Add(int x,int y)//x,y是形式参数 { return xy; } int main() { int a0; int b0; scanf(%d %d,a,b); int rAdd(a,b); //a,b是实际参数 printf(%d\n,r); return 0; }2:return后面也可以什么都没有适合函数返回值类型是void的情况比如下方代码#include stdio.h void print_num(int x,int y)//无需返回值类型是void,直接打印x,y { x2; y5; printf(%d %d,x,y); } int main() { int a0; int b0; print_num(a,b); return 0; {3:return语句执行后函数就会彻底返回后面的代码不执行比如下方代码#include stdio.h void test_return() { printf(函数开始执行\n); return; printf(return后的代码不会执行\n);//这一行代码不会执行 } int main() { test_return(); return 0; }(五)数组作函数参数在使用函数时我们除了用普通的数据作为参数外在日后的学习种肯定还会使用到数组作为函数参数。在使用数组作为函数参数时我们需要将数组以及数组的个数作为参数传递给函数比如下方函数#include stdio.h void print_arr(int arr[],int sz) { int i0; for(i0;isz;i) { printf(%d\n,arr[i]);//打印出数组里的每个元素 } } int main() { int arr[]{0,1,2,3,4}; int szsiof(arr)/sizeof(arr[0]));//计算数组元素的个数 print_arr(arr,sz);//实际参数传入数组arr和数组元素个数 return 0; }(六)函数之间的相互调用我们不仅能在主函数里调用我们设置的自定义函数我也可以在我们设置的函数里再次调用我们设置的新函数比如我们想写一个代码要求出某年某月有多少天首先我们可以设置一个函数在里面存入每个月有多少天但是因为有闰年的存在我们可以利用前面的知识在再设置一个判断是否为闰年的函数再在第一个函数里调用判断是否为闰年的函数如果是那么就要在2月份的天数上多加一天。具体代码实现如下#include stdio.h int is_leap_year(int year) { if (year % 4 0 year % 100 ! 0 || year % 400 0) { return 1; } else return 0; } month_of_days(int year,int month) { int days[] { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int day days[month]; if (is_leap_year(year) month 2)//调用了判断是否为闰年的函数 day 1; return day; } int main() { int year 0; int month 0; scanf(%d %d, year, month); int dmonth_of_days(year,month); printf(%d, d); return 0; }(七)printf函数的返回值这里我们补充一个printf返回值printf函数返回的是打印再屏幕上字符的个数如下代码printf(%d,printf(%d,printf(%d,33)); //33是两个字符所以返回2 //2是一个字符所以返回1 //最终结果是3321最终在屏幕上打印的是什么呢 没错是3321(八)函数的声明和定义在我们上述代码的使用中函数都是直接放在主函数前面的但如果我们将函数放在主函数后面的话如下代码#include stdio.h int main() { int a0; int b0; scanf(%d %d,a,b); int rAdd(a,b); //在前面没有发现Add函数 printf(%d\n,r); return 0; } int Add(int x,int y) { int z0; zxy; return z; }会出现错误因为在调用函数时程序从前往后运行当我们要使用这个函数时程序发现前面并没有出现这个函数所以会出现错误想要纠正这个错误也很简单不必将整个函数放在前面只需要在主函数前声明一下要用的这个函数就可以可以修正成如下形式#include stdio.h int Add(int x,int y); int main() { int a0; int b0; scanf(%d %d,a,b); int rAdd(a,b); //在前面没有发现Add函数 printf(%d\n,r); return 0; } int Add(int x,int y) { int z0; zxy; return z; }