习题5.docx
- 文档编号:11646390
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:21
- 大小:39.74KB
习题5.docx
《习题5.docx》由会员分享,可在线阅读,更多相关《习题5.docx(21页珍藏版)》请在冰豆网上搜索。
习题5
习题5和参考解答
1)选择题
(1)在下列关于C函数定义的叙述中,正确的是()。
A.函数可以嵌套定义,但不可以嵌套调用
B.函数不可以嵌套定义,但可以嵌套调用
C.函数不可以嵌套定义,也不可以嵌套调用
D.函数可以嵌套定义,也可以嵌套调用
【答案】B
【解析】C语言规定:
函数不可以嵌套定义,但可以嵌套调用。
(2)以下描述错误的是()。
A.调用函数时,实参可以是表达式
B.调用函数时,实参与形参可以共用内存单元
C.调用函数时,将为形参分配内存单元
D.调用函数时,实参与形参的类型应该一致
【答案】B
【解析】调用函数时实参与形参各自占用独立的内存单元。
(3)以下说法正确的是()。
A.对于用户自定义函数,在使用之前必须加以说明
B.说明函数必须指明其参数类型和返回类型
C.函数可以返回一个值,也可以什么值也不返回
D.空函数不完成任何操作,所以在程序设计中没有用处
【答案】C
【解析】在主函数之前定义的函数不必声明;传统函数说明不说明参数类型。
(4)函数调用不可以()。
A.出现在执行语句中B.出现在一个表达式中
C.作为一个函数的实参D.作为一个函数的形参
【答案】D
【解析】函数的形参只能是变量。
(5)函数调用语句“func((exp1,exp2),(exp3,exp4,exp5));”包含的实参个数为()。
A.1B.2C.4D.5
【答案】B
【解析】本题主要考查对于函数形参的理解。
(6)将一个函数声明为static后,该函数将()。
A.既可以被同一源文件中的函数调用,也可以被其他源文件中的函数调用
B.只能被同一源文件中的函数调用,不能被其他源文件中的函数调用
C.只能被其他源文件中的函数调用,不能被同一源文件中的函数调用
D.既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用
【答案】B
【解析】静态函数只能被同一编译单元(源文件)中的函数调用。
(7)以下叙述中错误的是()。
A.在不同函数中可以使用相同名称的变量
B.函数中的形参是局部变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数的复合语句中定义的变量在本函数范围内有效
【答案】D
【解析】在一个函数内的复合语句中定义的变量只在本复合语句范围内有效。
(8)以下叙述中正确的是()。
A.全局变量的作用域一定比局部变量的作用域范围大
B.静态类别变量的生存期贯穿于整个程序的运行期间
C,函数的形参都属于全局变量
D.未在定义语句中赋初值的auto变量和static变量都将是随机值
【答案】B
【解析】静态类别变量的生存期贯穿于整个程序的运行期间,即使退出对应的函数后,该类型的变量也没有释放存储空间,下次调用该函数时仍有效。
(9)以下说法正确的是()。
A.定义函数时,形参的类型说明可以放在函数体内
B.return之后不能紧跟表达式
C.若函数类型与返回值类型不一致,则以函数类型为准
D.若形参与实参类型不一致,则以实参类型为准
【答案】C
【解析】函数类型决定最终返回值的类型。
(10)以下描述正确的是()。
A.调用函数时的实参只能是有确定值的变量
B.return语句的括号中可以是变量、常量或有确定值的表达式
C.函数调用时实参和形参间的参数传递方式不都是值传递
D.实参和形参若类型不匹配,则编译时将报错
【答案】B
【解析】函数调用时实参与形参间的参数传递方式只有值传递,而且实参可以是变量,也可以是常量或表达式,实参类型和形参不匹配时,编译时不会报错,而是在执行时报错。
(11)凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。
A.自动(auto)B.静态(static)
C.外部(extern)D.寄存器(register)
【答案】A
【解析】对于未加特殊说明的局部变量,其存储类别为自动型。
(12)递归函数f(n)=f(n-1)+n(n>1)的递归体是()。
A.f
(1)=0B.f(0)=1
C.f(n)=f(n-1)+nD.f(n)=n
【答案】C
【解析】递归函数的两个要素为递归体和递归出口,这里主要考查递归体。
(13)下列程序的输出结果是()。
#include
fun(inta,intb,intc)
{
c=a*b;
}
intmain()
{
intc;
fun(2,3,c);
printf("%d\n",c);
return0;
}
A.0B.1C.6D.无法确定
【答案】D
【解析】函数之间的参数传递方式为单向值传递,因为变量c在定义时没有初始化,所以函数调用结束后c的值仍无法确定。
(14)下列程序的输出结果是()。
#include
intx=1;
func(intx)
{
x=3;
}
intmain()
{
func(x);
printf("%d\n",x);
return0;
}
A.3B.1C.0D.无法确定
【答案】B
【解析】局部变量的作用域为其所在的函数,并且当局部变量与全局变量同名时,局部变量将屏蔽全局变量。
(15)下列程序的输出结果是()。
#include
floatfun(intx,inty)
{
return(x+y);
}
voidmain()
{
inta=2,b=5,c=8;
printf(“%3.0f\n”,fun((int)fun(a+c,b),a-c));
}
A.编译出错B.9C.21D.9.0
【答案】B
【解析】该题主要考查函数调用作为函数实参的情况。
2)填空题
(1)下列程序的执行结果是。
#include
voidfunc(inta,intb,intc)
{
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
}
voidmain()
{
inti=2;
func(i,i++,i--);
}
【答案】a=2,b=1,c=2
(2)下列程序的运行结果是。
#include
invert(int*s,inti,intj)
{
intt;
if(i { invert(s,i+1,j-1); t=*(s+i);*(s+i)=*(s+j);*(s+j)=t; } } voidmain() { inta[6]={10,6,23,-90,0,3},i; invert(a,0,5); for(i=0;i<6;i++) printf(“%d,”,a[i]); printf(“\n”); } 【答案】3,0,-90,23,6,10 (3)下列程序的输出结果是。 #include intfac_sum(intn) { staticintf=1,t=1,s=0; inti; if(n>t) for(i=t+1;i<=n;i++) f=f*i; else { f=1; for(i=1;i<=n;i++) f=f*i; } t=n;s=s+f; return(s); } voidmain() { inta[]={3,5,2},i,sum; for(i=0;i<3;i++) sum=fac_sum(a[i]); printf(“sum=%d\n”,sum); } 【答案】sum=128 (4)下列程序的输出结果是。 #include voidss(char*s,chart) { while(*s) { if(*s==t) *s=t-‘a’+’A’; s++; } } voidmain() { charstr1[100]=”abcddfefdbd”,c=’d’; ss(str1,c); printf(“%s\n”,str1); } 【答案】abcDDfefDbD (5)函数voidfun(float*sn,intn)的功能是: 根据以下公式计算S,计算结果通过形参指针sn传回。 要求n通过形参传入,n≥0。 请填空。 S=1- + - +… voidfun(float*sn,intn) { floats=0.0,w,f=-1.0; inti=0; for(i=0;i<=n;i++) { f=*f; w=f/(2*i+1); s+=w; } =s; } 【答案】-1*sn (6)下列程序的运行结果是。 #include #include char*ss(char*s) { returns+strlen(s)/2; } voidmain() { char*p,*str=”abcdefgh”; p=ss(str); printf(“%s\n”,p); } 【答案】efgh (7)下列程序的运行结果是。 #include intn=1; func() { staticintx=4; inty=10; x=x+2; n=n+10; y=y+n; printf(“FUNC: x=%2dy=%2dn=%2d\n”,x,y,n); } voidmain() { staticintx=5; inty;y=n; printf(“MAIN: x=%2dy=%2dn=%2d\n”,x,y,n); func(); printf(“MAIN: x=%2dy=%2dn=%2d\n”,x,y,n); func(); } 【答案】MAIN: x=5y=1n=1 FUNC: x=6y=21n=11 MAIN: x=5y=1n=11 FUNC: x=8y=31n=21 (8)函数gongyu()的作用是求整数num1和num2的最大公约数,并返回该值,请填空。 gongyu(intnum1,intnum2) { inttemp,a,b; if(num1num2) { temp=num1; num1=num2; num2=temp; } a=num1;b=num2; while() { ;a=b;b=temp; } return(a); } 【答案】 =0temp=a%b (9)函数pi()的功能是: 根据以下公式,返回满足精度(0.0005)要求的π值,请填空。 =1+ + + + +… #include #include #include doublepi(doubleeps) { doubles,t; intn; for(;t>eps;n++) { s+=t; t=n*t/(2*n+1); } return(); } voidmain() { doublex; printf(“\nPleaseinputaprecision: ”); scnaf(“%lf”,&x); printf(“\neps=%lf,π=%lf”,x,pi(x)); } 【答案】n=1,s=0.0,t=1.02.0*s (10)若输入整数10,则下列程序的运行结果是。 #include sub(inta) { intc; c=a%2; returnc; } voidmain() { inta,e[10],c,i=0; printf(“输入一个整数\n”); scanf(“%d”,&a); while(a! =0) { c=sub(a); a=a/2; e[i]=c; i++; } for(;i>0;i--) printf(“%d”,e[i-1]); } 【答案】1010 3)编程题 (1)编写程序,调用函数求一个圆柱体的表面积和体积。 【参考源程序】 #include voidfun(intr,inth) { floatarea; area=2*3.14*r*h; vol=3.14*r*r*h; printf("area=%.2f,vol=%.2f",area,vol); } intmain() { intr,h; scanf("%d%d",&r,&h); fun(r,h); return0; } (2)编写一个函数,输出一个整数的全部素数因子。 例如,m=120时,因子为2,3,5。 【参考源程序】 #include intfun(intn) { intflag=1,i; for(i=2;i if(n%i==0) flag=0; returnflag; } intmain() { intm,i; scanf("%d",&m); for(i=2;i if(m%i==0) if(fun(i)) printf("%d",i); return0; } (3)编写程序,调用函数使输入的一个字符串反序存放并输出。 【参考源程序】 #include #include voidfun(chars[]) { inti=0,n; chart; n=strlen(s)-1; while(i<=n) { t=s[i];s[i]=s[n];s[n]=t; i++;n--; } } intmain() { chars[20]; gets(s); fun(s); puts(s); return0; } (4)编写一个函数,输入一个十六进制数,输出相应的十进制数。 【参考源程序】 #include intfun(chars[]) { inti=0,n,m=0; if(s[i]>='a') n=s[i]-'a'+10; else n=s[i]-'0'; while(s[++i]! ='\0') { if(s[i]>='a') m=s[i]-'a'+10; else m=s[i]-'0'; n=n*16+m; } returnn; } voidmain() { chars[6]; intn; gets(s); n=fun(s); printf("%d\n",n); } (5)编写程序完成以下功能: 在主函数中通过键盘输入10个互不相同的整数并存入一维数组中,调用函数找出数组中的最大值,并从数组中删除该值,最后在主函数中输出删除后的数组。 【参考源程序】 #include voidfun(inta[10]) { inti,j=0,max=a[0]; for(i=1;i<10;i++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)