C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx

上传人:b****2 文档编号:23185923 上传时间:2023-05-15 格式:DOCX 页数:24 大小:23.41KB
下载 相关 举报
C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx_第1页
第1页 / 共24页
C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx_第2页
第2页 / 共24页
C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx_第3页
第3页 / 共24页
C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx_第4页
第4页 / 共24页
C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx

《C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx(24页珍藏版)》请在冰豆网上搜索。

C语言程序设计教程 清华大学出版社 陈明主编 第4章答案.docx

C语言程序设计教程清华大学出版社陈明主编第4章答案

第4章习题解答

一、选择题

1.在C语言中,函数返回值的类型最终取决于

A)函数定义时的函数首部所说明的函数类型B)return语句中表达式值的类型

C)调用函数时主调函数所传递的实参类型D)函数定义时形参的类型

解析:

函数返回值类型最终取决于定义函数时所定义的函数类型。

答案:

A

2.设函数Fun()的定义形式为:

voidFun(charch,floatx){}

则以下对函数Fun()的调用语句中,正确的是。

A)Fun("abc",3.0);B)t=Fun('D',16.5);

C)Fun('65',2.8);D)Fun(32,32);

解析:

选项A中"abc"是字符串,与形参不匹配:

由于Fun函数的返回值类型为void,所以选项B中进行了赋值操作是不正确的;在选项C中,'65'是不合法的字符形式,单引号中应该是单个字符。

只有选项D才是合法的函数调用形式。

答案:

D

3.有以下程序:

/*文件路径名:

ex4_1_3\main.c*/

#include/*标准输入/输出头文件*/

intf1(intx,inty){returnx>y?

x:

y;}

intf2(intx,inty){returnx>y?

y:

x;}

intmain(void)/*主函数main()*/

{

inta=4,b=3,c=5,d=2,e,f,g;/*定义变量*/

e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));/*调用函数*/

g=a+b+c+d-e-f;/*算术运算*/

printf("%d,%d,%d\n",e,f,g);/*输出e,f,g*/

return0;/*返回值0,返回操作系统*/

}

程序运行后的输出结果是。

A)4,3,7B)3,4,7C)5,2,7D)2,5,7

解析:

函数f1用于求两个数中的最大数,而函数f2用于求两个数中的最小数。

因此有:

e=f2(f1(a,b),f1(c,d))=f2(f1(4,3),f1(5,2))=f2(4,5)=4;

f=f1(f2(a,b),f2(c,d))=f1(f2(4,3),f2(5,2))=f1(3,2)=3;

g=a+b+c+d-e-f=4+3+5+2-4-3=7。

答案:

A

4.若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是。

A)函数的实参和其对应的形参共占同一存储单元

B)形参只是形式上的存在,不会占用具体存储单元

C)同名的实参和形参占同一存储单元

D)函数的形参和实参分别占用不同的存储单元

解析:

在C语言中,函数的形参和实参是分别占用不同的存储单元的,因此,选项D是正确的。

答案:

D

5.有以下程序:

/*文件路径名:

e4_1_5\main.c*/

#include/*标准输入/输出头文件*/

inta=1;/*全局变量*/

intf(intc)/*定义函数*/

{

staticinta=2;/*静态变量*/

c++;/*c自加1*/

return(a++)+c;/*返回函数值*/

}

intmain(void)/*主函数main()*/

{

inti,k=0;/*定义变量*/

for(i=0;i<2;i++)

{inta=3;k+=f(a);}/*循环调用f()函数*/

k+=a;/*将全局变量a的值加到k*/

printf("%d\n",k);/*输出k*/

return0;/*返回值0,返回操作系统*/

}

程序的运行结果是。

A)14B)15C)16D)17

解析:

题中“staticinta=2”定义了一个static局部变量,编译程序为其生成永久存储单元,在调用函数f()时,值一直都保存着,在主函数中,for循环进行两次,第一次循环得f(3)=2+3+1=6,从而k+=f(3)=6,第二次循环由于static局部变量a变成了3,从而f(3)=3+3+1=7,故k+=f(3)=13,最后执行k+=a时,此时a的值为全局变量,其值为1,所以k的值为14,选项A是正确的。

答案:

A

6.有以下程序:

/*文件路径名:

e4_1_6\main.c*/

#include/*标准输入/输出头文件*/

inta=4;/*全局变量*/

intf(intn)/*定义函数*/

{

intt=0;/*局部变量*/

staticinta=5;/*静态变量*/

if(n%2){inta=6;t+=a++;}

else{inta=7;t+=a++;}

returnt+a++;/*返回函数值*/

}

intmain(void)/*主函数main()*/

{

ints=a,i;/*定义变量*/

for(i=0;i<2;i++)s+=f(i);/*循环调用f()函数*/

printf("%d\n",s);/*输出s*/

return0;/*返回值0,返回操作系统*/

}

程序运行后的输出结果是。

A)24B)28C)32D)36

解析:

main()函数在开始时,s=a=4,其中的a为全局变量。

第1次循环时,i=0,f(i)=f(0),将0传递给形参n,首先执行if语句中的条件“n%2”;条件为假,则执行else下的复合语句“{inta=7;t+=a++;}”,可知t=0+7=7,使用return返回t=7+(a++)=7+5=12,a运算完后自增1,变为6,这里的a为函数f()内,复合语句之外的a,返回主函数后s=4+12=16。

第2次循环时,当i=1时,f(i)=f

(1),将1传递给形参n,首先执行if语句中的条件“n%2”;条件为真,则执行if下的得合语句“{inta=6;t+=a++;}”,可知t=0+6=6,使用return返回t=6+(a++)=6+6=12,这里的a为函数f()内,复合语句之外的a,返回主函数后s=16+12=28。

答案:

B

7.有以下程序:

/*文件路径名:

e4_1_7\main.c*/

#include/*标准输入/输出头文件*/

Fun(intx,inty)

{

staticintm=0,i=2;/*静态变量*/

i+=m+1;m=i+x+y;/*对静态变量作赋值运算*/

returnm;/*返回函数值*/

}

intmain(void)/*主函数main()*/

{

intj=1,m=1,k;/*定义变量*/

k=Fun(j,m);/*调用函数Fun()*/

printf("%d,",k);/*输出k*/

k=Fun(j,m);/*调用函数Fun()*/

printf("%d\n",k);/*输出k*/

return0;/*返回值0,返回操作系统*/

}

执行后的输出结果是。

A)5,5B)5,11C)11,11D)11,5

解析:

在第1次调用Fun()函数时,x=1,y=1,函数Fun()的静态变量i=2+0+1=3,m=3+1+1=5,返回m=5。

在第2次调用Fun()函数时,x=1,y=1,函数Fun()的静态变量i=3+5+1=9,m=9+1+1=11,返回m=11。

答案:

B

8.在一个C源程序文件中所定义的全局变量,其作用域为。

A)所在文件的全部范围B)所在程序的全部范围

C)所在函数的全部范围D)由具体定义位置和extern说明来决定范围

解析:

全局变量的作用域不但从具体定义位置开始,直到文件结束为止,而且还可用extern声明来扩大作用域围,所以此选项D正确。

答案:

D

9.在C语言中,函数的隐含存储类别是。

A)autoB)staticC)externD)无存储类别

解析:

C语言规定,函数的隐含存储类别为外部类型,即extern类型,允许其他文件中的函数调用。

答案:

C

10.有以下程序:

/*文件路径名:

ex4_1_10\main.c*/

#include/*标准输入/输出头文件*/

intFun(intx)

{

if(x==0||x==1)return3;/*递归结束*/

elsereturnx-Fun(x-2);/*递归调用*/

}

intmain(void)/*主函数main()*/

{

printf("%d\n",Fun(7));/*输了Fun(7)*/

return0;/*返回值0,返回操作系统*/

}

执行后的输出结果是。

A)7B)3C)2D)0

解析:

x=7,通过递归调用Fun()函数后得到Fun(7)=7-Fun(5)=7-(5-Fun(3))=2+3-Fun

(1)=2。

答案:

C

*11.下面选项中不属于面向对象程序设计特征的是。

A)继承性B)多态性C)类比性D)封装性

解析:

面向对象技术有三个重要特性:

封装性、继承性和多态性;而类比性不属于面向对象的特征。

答案:

C

12.对于一个正常运行的C程序,以下叙述中正确的是。

A)程序的执行总是从main函数开始,在main函数结束

B)程序的执行总是从程序的第一个函数开始,在main函数结束

C)程序的执行总是从main函数开始,在程序的最后一个函数中结束

D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束

解析:

C程序的执行总是从main函数开始,完成对其他函数的调用后返回到main函数,最后由main函数结束整个程序。

一个C源程序有且公有一个main函数。

答案:

A

二、填空题

1.以下程序中,函数Fun()的功能是计算x2-2x+6,主函数中将调用Fun()函数计算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

请填空。

/*文件路径名:

e4_2_1\main.c*/

#include/*标准输入/输出头文件*/

#include/*数学函数首部文件*/

doubleFun(doublex){returnx*x-2*x+6;}

intmain(void)/*主函数main()*/

{

doublex,y1,y2;/*定义变量*/

printf("输入x:

");/*输入提示*/

scanf("%lf",&x);/*输入x*/

y1=Fun(【1】);/*调用函数Fun()*/

y2=Fun(【2】);/*调用函数Fun()*/

printf("y1=%lf,y2=%lf\n",y1,y2);/*输出y1,y2*/

return0;/*返回值0,返回操作系统*/

}

解析:

函数的一般调用形式为:

函数名(实在参数表),在调用时将实参的值赋给形参,实参可以是常量、变量或表达式。

答案:

【1】x+8【2】sin(x)

2.有以下程序:

/*文件路径名:

e4_2_2\main.c*/

#include/*标准输入/输出头文件*/

intsub(intn){returnn/10+n%10;}

intmain(void)/*主函数main()*/

{

intx,y;/*定义变量*/

scanf("%d",&x);/*输入x*/

y=sub(sub(sub(x)));/*调用函数*/

printf("%d\n",y);/*输出y*/

return0;/*返回值0,返回操作系统*/

}

若运行时输入:

1234<回车>,程序的输出结果是。

解析:

1234作为实参传递给形参n,sub(x)值为1234/10+1234%10=123+4=127,sub(sub(x)=sub(127)=127%10+127%10=12+7=19,sub(sub(sub(x)))=sub(19)=9/10+19%10=10,所以将输出10。

答案:

10

3.以下程序运行后的输出结果是。

/*文件路径名:

e4_2_3\main.c*/

#include/*标准输入/输出头文件*/

voidswap(intx,inty)

{

intt=x;x=y;y=t;/*交换x,y*/

printf("%d%d",x,y);/*输出x,y*/

}

intmain(void)/*主函数main()*/

{

inta=3,b=4;/*定义变量*/

swap(a,b);/*调用函数*/

printf("%d%d\n",a,b);/*输出a,b*/

return0;/*返回值0,返回操作系统*/

}

解析:

C函数的参数传递都是传值的,因此swap(a,b)调用将a和b的值3和4传递给swap的形参x和y,x和y通过t交换值,printf输出x和y结果是“43“。

swap函数调用结束后,a和b的值并没有交换,printf输出a和b结果是“34”。

答案:

4334

4.以下程序运行后的输出结果是。

/*文件路径名:

e4_1\main.c*/

#include/*标准输入/输出头文件*/

Fun(inta)

{

intb=0;/*局部变量*/

staticintc=3;/*静态变量*/

b++;c++;/*b,c自加1*/

returna+b+c;/*返回函数值*/

}

intmain(void)/*主函数main(void)*/

{

inti,a=5;/*定义变量*/

for(i=0;i<3;i++)

printf("%d%d",i,Fun(a));/*输出i,Fun(a)*/

printf("\n");/*换行*/

return0;/*返回值0,返回操作系统*/

}

解析:

第1次调用Fun()函数时,a=5,“b++;c++;”执行后,b=1,c=4,返回5+1+4=10;

第2次调用Fun()函数时,a=5,“b++;c++;”执行后,b=1,c=5,返回5+1+5=11;

第3次调用Fun()函数时,a=5,“b++;c++;”执行后,b=1,c=6,返回5+1+6=12。

答案:

010111212

5.以下程序运行后的输出结果是。

/*文件路径名:

ex4_2_5\main.c*/

#include/*标准输入/输出头文件*/

intf(inta[],intn)

{

if(n>=1)returnf(a,n-1)+a[n-1];/*递归调用*/

elsereturn0;/*递归结束*/

}

intmain(void)/*主函数main()*/

{

inta[]={1,2,3,4,5},s;/*定义数组与变量*/

s=f(a,5);/*调用函数f()*/

printf("%d\n",s);/*输出s*/

return0;/*返回值0,返回操作系统*/

}

解析:

通过递归调用f函数实现了数组各元素之和,即a[0]+a[1]+a[2]+a[3]+a[4]=15。

答案:

15

*6.在面向对象方法中,类的实例称为。

解析:

将属性、操作相似的对象归为类,类是具有共同属性、共同方法的对象的集合。

所以,类是对象的抽象,而一个对象则是其对应类的一个实例。

答案:

对象

三、编程题

1.编写一个函数,其功能是判断输入的三个边是否能组成三角形,要求编写测试程序。

参考程序:

/*文件路径名:

ex4_3_1\main.c*/

#include/*包含库函数printf()所需要的信息*/

#include/*包含库函数system()所需要的信息*/

intIsTriangle(floata,floatb,floatc)/*a,b,c能组成三角形,返回1,否则返回0*/

{

if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a)

{/*能组成三角形*/

return1;/*返回1*/

}

else

{/*不能组成三角形*/

return0;/*返回0*/

}

}

intmain(void)/*主函数main()*/

{

floata,b,c;/*定义变量*/

printf("输入三边长:

");/*输入提示*/

scanf("%f%f%f",&a,&b,&c);/*输入a,b,c*/

if(IsTriangle(a,b,c))

{/*能组成三错角形*/

printf("%f,%f,%f能组成三角形\n",a,b,c);

}

else

{/*不能组成三错角形*/

printf("%f,%f,%f不能组成三角形\n",a,b,c);

}

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

2.编写一个函数,其功能是输入n个数,返回这些数的最大值,要求编写测试程序。

参考程序:

/*文件路径名:

ex4_3_2\main.c*/

#include/*包含库函数printf()所需要的信息*/

#include/*包含库函数system()所需要的信息*/

intMax(intn)/*求输入的n个数的最大值*/

{

intm,i,tem;/*定义变量*/

printf("输入%d个数:

",n);/*输入提示*/

scanf("%d",&m);/*先假设输入的第1个数就是最大值*/

for(i=1;i

{/*依次输入其它各数,比较求最大值*/

scanf("%d",&tem);/*输入输入其它各数*/

if(tem>m)m=tem;/*比较求最大值*/

}

returnm;/*返回最大值*/

}

intmain(void)/*主函数main()*/

{

intn,m;/*定义变量*/

printf("输入个数n:

:

");/*输入提示*/

scanf("%d",&n);/*输入n*/

m=Max(n);/*求输入的n个数的最大值*/

printf("输入的%d个数的最大值为%d\n",n,m);/*输出结果*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

3.编写一个函数,其功能是输入n个数,返回这些数的最小值,要求编写测试程序。

参考程序:

/*文件路径名:

ex4_3_3\main.c*/

#include/*包含库函数printf()所需要的信息*/

#include/*包含库函数system()所需要的信息*/

intMin(intn)/*求输入的n个数的最小值*/

{

intm,i,tem;/*定义变量*/

printf("输入%d个数:

",n);/*输入提示*/

scanf("%d",&m);/*先假设输入的第1个数就是最小值*/

for(i=1;i

{/*依次输入其它各数,比较求最小值*/

scanf("%d",&tem);/*输入输入其它各数*/

if(tem

}

returnm;/*返回最大值*/

}

intmain(void)/*主函数main()*/

{

intn,m;/*定义变量*/

printf("输入个数n:

:

");/*输入提示*/

scanf("%d",&n);/*输入n*/

m=Min(n);/*求输入的n个数的最小值*/

printf("输入的%d个数的最小值为%d\n",n,m);/*输出结果*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

re

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1