- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
;C程序的模块化结构;一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。
函数间的调用关系:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
;函数概述;函数的分类
从用户的观点分为:C编译系统提供的标准库函数和用户自定义函数;
从函数间数据传送的关系分为:有参函数、无参函数、有返回值函数、无返回值函数;
从函数的调用分为:内部函数和外部函数。
;函数的定义;函数定义的一般形式;函数定义的一般形式举例:;函数定义的一般形式说明:;floatsum(floatx,floaty)
{intz;
z=x+y;
returnz;
};floatsum(floatx,floaty)
{……
};floatsum(floatx,floaty)
{intz;
z=x+y;
returnz;
};形式参数和实际参数
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。
实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
若形参与实参类型不一致,自动按形参类型转换———函数调用转换。
;例编写自定义函数计算:;#includestdio.h
intmax(inta,intb);//函数的原型声明
voidmain()
{
inta,b,c;
scanf(%d%d,a,b);
c=max(a,b);//函数调用(a、b为实参)
printf(thebiggestnumberis:%d\n,c);
}
intmax(inta,intb)//函数定义(a、b为形参)
{
return(ab?a:b);
};说明:
实参与形参的个数相等、类型相同、顺序一致,呈一一对应的关系。
实参的求值顺序不确定,与所用系统有关。
实参应有确定的值。;函数调用的方式
函数语句:(函数调用的一般形式加上分号即构成函数语句)
函数表达式
函数参数;函数调用的一般形式;例:说出下列程序的运行结果;函数的返回值:当被调用函数在完成一定的功能后,可以将处理的结果返回到调用函数。
;对于不需要提供返回值的函数可以???接用void作为函数类型定义,以表明此函数返回值为”无类型”或”空类型”。
voidpsch()
{printf(WuhanUniversity\n);}
main()
{psch();};对被调用函数的说明;
#includestdio.h
voidmain()
{floatadd(floatx,floaty);
/*对被调用函数add的声明*/
floata,b,c;
scanf("%f,%f",&a,&b);
c=add(a,b);
printf("sumis%f\n“,c);
}
floatadd(floatx,floaty)/*函数首部*/
{floatz;/*函数体*/
z=x+y;
return(z);
};例判定素数。;函数参数的传递方式;;2、地址传递方式;例:将任意两个字符串连接成一个字符串(数组名作为函数参数实现地址传递方式);str1;数组元素做函数实参,遵循”值传送”特性,此时形参为变量。
数组名可做实参和形参,传送的是整个数组。
在用数组名做函数参数时,实参和形参都应该用数组(或指针变量)。;有一个一维数组score,内放10个学生成绩,求平均成绩。
#includestdio.h
voidmain()
{floataverage(floatarray[10]);
/*函数声明*/
floatscore[10],aver;
inti;
printf(″input10scores:\n″);
for(i=0;i10;i++)
scanf(″%f″
文档评论(0)