C语言程序设计谭浩强(第四版)期末复习重点(6)

2019-03-10 12:05

同,分析其处理方法。

解题思路:如果函数返回值的类型与指定的函数类型不同,按照赋值规则处理。

#include int main()

{ int max(float x,float y); float a,b; int c; scanf(\ c=max(a,b);

printf(\ return 0; }

int max(float x,float y)

{ float z; z=x>y?x:y; return( z ) ; }

7.4对被调用函数的声明和函数原型 在一个函数中调用另一个函数需要具备如下条件:

(1) 被调用函数必须是已经定义的函数(是库函数或用户自己定义的函数) (2) 如果使用库函数,应该在本文件开头加相应的#include指令

(3) 如果使用自己定义的函数,而该函数的位置在调用它的函数后面,应该声明 例7.4 输入两个实数,用一个函数求出它们之和。

解题思路:用add函数实现。首先要定义add函数,它为float型,它应有两个参数,也应为float型。特

别要注意的是:要对add函数进行声明。

#include int main()

{ float add(float x, float y);

float a,b,c;

printf(\ scanf(\ c=add(a,b); printf(\ return 0; }

float add(float x,float y)

{ float z; z=x+y;

return(z); }

函数原型的一般形式有两种:

如 float add(float x, float y); float add(float, float);

原型说明可以放在文件的开头,这时所有函数都可以使用此函数

7.5 函数的嵌套调用 C语言的函数定义是互相平行、独立的,即函数不能嵌套定义,但可以嵌套调用函数,即调用一个函数的过程中,又可以调用另一个函数。

main函数 a函数 b函数 ① ② ③ ④ 调用a函数 调用b函数 ⑤ ⑨ ⑦

⑧ ⑥ 结束

例7.5 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。 解题思路:main中调用max4函数,找4个数中最大者 max4中再调用max2,找两个数中的大者

max4中多次调用max2,可找4个数中的大者,然后把它作为函数值返回main函数 main函数中输出结果 主函数

#include int main()

{ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(“4 interger numbers:\

scanf(\ max=max4(a,b,c,d);

printf(\ return 0; }

max4函数 max2函数

int max4(int a,int b,int c,int d) int max2(int a,int b) { int max2(int a,int b); { if(a>=b)

int m; return a; m=max2(a,b); else

m=max2(m,c); return b; m=max2(m,d); } return(m); }

int max2(int a,int b) { return(a>b?a:b); }

7.6 函数的递归调用 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。 C语言的特点之一就在于允许函数的递归调用。

例7.6 有5个学生坐在一起。问第5个学生多少岁?他说比第4个学生大2岁;问第4个学生岁数,他说比第3个学生大2岁;问第3个学生,又说比第2个学生大2岁;问第2个学生,说比第1个学生大2岁;最后问第1个学生,他说是10岁。请问第5个学生多大? #include int main()

{ int age(int n);

printf(\ return 0; }

int age(int n)

{ int c; if(n==1) c=10;

else c=age(n-1)+2; return(c); }

例7.7 用递归方法求n!。

解题思路:求n!可以用递推方法:即从1开始,乘2,再乘3……一直乘到n。

递推法的特点是从一个已知的事实(如1!=1)出发,按一定规律推出下一个事实(如2!=1!*2),

再从这个新的已知的事实出发,再向下推出一个新的事实(3!=3*2!)。n!=n*(n-1)!。

求n!也可以用递归方法,即5!等于4!×5,而4!=3!×4…,1!=1 可用下面的递归公式表示:

#include int fac(int n) int main() {

{int fac(int n); int f; int n; int y; if(n<0)

printf(\ printf(\ scanf(\ else if(n==0 | | n==1) y=fac(n); f=1;

printf(\ else f=fac(n-1)*n; return 0; return(f); } }

例7.8 Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动一盘子的步骤。

#include int main()

{ void hanoi(int n,char one,char two,char three); int m;

printf(“the number of diskes:\ scanf(\

printf(\ hanoi(m,'A','B','C'); }

void hanoi(int n,char one,char two,char three) { void move(char x,char y); if(n==1)

move(one,three); else

{ hanoi(n-1,one,three,two); move(one,three);

hanoi(n-1,two,one,three); } }

void move(char x,char y) {

(n?0,1)?n!?1n!???n?(n?1)(n?1) printf(\ }

7.7.1数组元素作函数实参 例7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。

#include int main()

{ int max(int x,int y); int max(int x,int y) int a[10],m,n,i; { return(x>y?x:y); } printf(“10 integer numbers:\\n\ for(i=0;i<10;i++)

scanf(\

printf(\

for(i=1,m=a[0],n=0;i<10;i++) { if (max(m,a[i])>m) { m=max(m,a[i]); n=i; } }

printf(“largest number is %d\\n\ printf(“%dth number.\\n“,n+1); }

7.7.2数组名作函数参数 除了可以用数组元素作为函数参数外,还可以用数组名作函数参数(包括实参和形参)。用数组元素作实参时,向形参变量传递的是数组元素的值;用数组名作函数实参时,向形参传递的是数组首元素的地址。 例7.10 有一个一维数组score,内放10个学生成绩,求平均成绩。 #include int main()

{ float average(float array[10]); float score[10],aver; int i; printf(\ for(i=0;i<10;i++)

scanf(\ printf(\

aver=average(score); printf(\ return 0; }

float average(float array[10]) { int i;

float aver,sum=array[0]; for(i=1;i<10;i++)

sum=sum+array[i]; aver=sum/10; return(aver);


C语言程序设计谭浩强(第四版)期末复习重点(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:贯彻落实全区纪检监察工作会议情况汇报

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: