C语言程序设计教程第四章练习题解析1.docx
- 文档编号:26519647
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:46
- 大小:25.91KB
C语言程序设计教程第四章练习题解析1.docx
《C语言程序设计教程第四章练习题解析1.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程第四章练习题解析1.docx(46页珍藏版)》请在冰豆网上搜索。
C语言程序设计教程第四章练习题解析1
单选题
1、关于C语言中的函数,下列描述正确的是()
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和函数的嵌套均不可以嵌套
D.函数的定义和函数的调用均不可以嵌套
答案:
B
解析:
函数的定义不可以嵌套,但函数的调用可以嵌套
2、定义一个函数:
exce((v1,v2),(v3,v4,v5),v6);在该函数调用时,实参的个数为()个
答案:
A
解析:
(v1,v2),(v3,v4,v5)和v6一共三个实参
3、关于C语言中print()函数与scanf()函数,下列描述中正确的是()
()函数可以向任何地方输出数据
()只向控制台输出数据
()只能输入英文字母和数字
()函数可以识别输入的空格
答案:
B
解析:
printf()是向控制台输出的函数
4、在C语言中,内部函数需要添加的关键字是()
答案:
B
解析:
在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态函数)。
5、当调用时,会调用内部函数
A.当调用时,会调用内部函数
B.当调用时,会调用外部函数
C.当调用时,会调用两次,先调用内部函数再调用外部函数
D.都不调用,会报错
答案:
A
解析:
当内部函数与外部函数重名时,会优先调用内部函数
6、在C语言中,声明外部函数需要添加的关键字是()
答案:
A
解析:
声明外部函数的方式是在函数的返回值类型前面添加extern关键字
7、关于C语言中的局部变量,下列描述中错误的是()
A.局部变量就是在函数内部声明的变量
B.局部变量只在函数内部有效
C.局部变量只有当它所在的函数被调用时才会被使用
D.局部变量一旦被调用,其生存周期持续到程序结束
答案:
D
解析:
当函数调用结束时局部变量就会失去作用
8、关于C语言中的全局变量,下列描述中正确的是()
A.全局变量的作用域一定比局部变量的作用域范围大
B.静态类别变量的生存周期贯穿于整个程序的运行期间
C.函数的形参都属于全局变量
D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值
答案:
B
解析:
选项1不对:
如果程序中只有一个主函数,则在整个程序运行中,局部变量都在起作用;
选项3不对:
除了C++的引用类型参数,所有函数的形参都是局部变量;
选项4不对:
static变量定义时就存储地全局区,初始化为0;
9、当全局变量与局部变量重名时,那么在调用时()
A.局部变量会被屏蔽
B.全局变量会被屏蔽
C.都不会调用,系统会报错
D.会调用两次,先调用局部变量,再调用全局变量
答案:
B
解析:
当局部变量与全局变量重名时,全局变量会被屏蔽。
10、在C语言中,关于变量的作用域,下列描述中错误的是()
A.局部变量只在整个函数的运行周期中有效
B.全局变量的作用域为整个程序的运行周期
C.当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量
D.全局变量会覆盖掉所有与它重名的局部变量
答案:
D
解析:
当全局变量与局部变量重名时,全局变量会被屏蔽掉
11、在C语言中,如果在一个函数的复合语句中定义了一个变量,则该变量()
A.只在该复合语句中有效,在该复合语句外无效
B.在该函数中任何位置都有效
C.在本程序的原文件范围内均有效
D.此定义方法错误,其变量为非法变量
答案:
D
解析:
1、2与3错:
函数复合语句中定义的变量在该复合语句中引用;但如果函数含有该变量,则在函数中可以引用该变量
4对:
在C++中在复合语句中定义变量为合法,但在C语言中是非法的
12、C语言程序的基本单位是()。
A.程序行
B.语句
C.函数
D.字符
答案:
C
解析:
函数是C语言程序的基本单位
13、C语言中决定函数返回值的类型的是()。
语句中的表达式类型
B.调用函数的主调函数类型
C.调用函数时临时
D.定义函数时所指定的函数类型
答案:
D
解析:
函数的返回值取决于定义函数时指定的返回值类型
14、若有函数调用语句:
fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是()。
答案:
A
解析:
a+b返回一个值,(x,y)返回一个值,fun(n+k,d,(a,b))返回一个值。
15、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()。
x,y,z;
("%d%d%d",&x,&y,&z);
("%d%d%d",x,y,z);
("%d%d%d",&x,&y,&z);
答案:
B
解析:
读取键盘输入的数据要用scanf()函数,scanf()中的参数要传入变量的地址
16、若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予,b赋予,c赋予,不正确的输入形式是()。
2233
;22;33
答案:
B
解析:
用scanf()读取从键盘输入的数据时,中间不能加逗号,要用空格隔开
17、若有定义:
intx,y;chara,b,c;并有以下输入数据(此处\u代表空格):
1\u2\uA\uB\uC,那么能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是()。
("x=%dy=%d",&x,&y);a=getchar();b=getchar();c=getchar();
("%d%d",&x,&y);a=getchar();b=getchar();c=getchar();
("%d%d%c%c%c,&x,&y,&a,&b,&c);
("%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);
答案:
D
解析:
空格也会作为一个字符赋给字符变量。
18、对嵌套子程序调用说法正确的是()。
A.外层子程序可以调用所有的内层子程序
B.内层子程序只可以调用包含本身的外层子程序,不可以隔层调用
C.外分程序必须能完全套住内分程序
D.以上说法均不正确
答案:
C
19、C语言中函数能否嵌套调用和递归调用()
A.二者均不可
B.前者可,后者不可
C.前者不可,后者可
D.二者均可
答案:
D
解析:
两者调用都可以
20、C语言规定,程序中各函数之间()。
A.既允许直接递归调用也允许间接递归调用
B.不允许直接递归调用也不允许间接递归调用
C.允许直接递归调用不允许间接递归调用
D.不允许直接递归调用允许间接递归调用
答案:
A
解析:
各程序间既可以直接调用也可以间接调用。
21、有如下程序:
longfib(intn)
{
if(n>2)
returnfib(n-1)+fib(n-2);
else
return2;
}
voidmain()
{
printf("%d\n",fib(3));
}
该程序的输出结果是()。
答案:
B
解析:
向fib()函数传入3时,返回fib
(1)+fib
(2)的值;向fib()函数传入1和2时,都返回2,所以fib(3)返回2+2=4。
22、以下程序的输出结果是()。
longfun(intn)
{
longs;
if(n==1||n==2)
s=2;
else
s=n-fun(n-1);
returns;
}
voidmain()
{
printf("%ld\n",fun(3));
}
答案:
A
解析:
fun()函数传入3时,返回3-fun
(2);fun()函数传入2时,返回2。
所以fun(3)返回3-2=1。
23、在C语言中,函数的隐含存储类别是()。
D.无存储类别
答案:
C
解析:
为简化编程,C语言中允许在定义外部函数时省略关键字extern。
24、以下叙述中不正确的是()。
A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是局部变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
答案:
D
解析:
函数内的复合语句中定义的变量仅仅在该复合语句中有效。
25、以下程序运行后,输出结果是()。
intfunc(inta,intb)
{
staticintm=0,i=2;
i+=m+1;
m=i+a+b;
returnm;
}
voidmain()
{
intk=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%d\n",p);
}
15
16
17
8
答案:
C
解析:
函数体内的静态局部变量不随函数的调用结束而销毁,而是一直存在。
26、以下程序的输出结果是()。
intd=1;
intfun(intp)
{
staticintd=5;
d+=p;
printf("%d",d);
returnd;
}
voidmain()
{
inta=3;
printf("%d\n",fun(a+fun(d)));
}
99
69
1515
615
答案:
C
解析:
首先调用fun(d),将全局变量d=1带入,此时fun()函数内的静态局部变量d的值是1,d+=p后d的值是6,输出d的值,返回d的值;
然后调用fun(a+6),将局部变量a=3带入,此时fun()函数内的静态局部变量d的值是6,d+=p后d赋值15,输出d的值,返回d的值。
27、在C语言中,若需一变量只在本文件中所有函数使用,则该变量的存储类别是()。
答案:
D
解析:
static修饰全局变量时,表示该变量仅在本文件中可使用。
28、下列程序的输出结果是()。
intb=2;
intfunc(int*a)
{
b+=*a;
returnb;
}
voidmain()
{
inta=2,res=2;
res+=func(&a);
printf("%d\n",res);
}
答案:
B
解析:
func()函数中,对全局变量b自增a的值,func()函数返回4;res+=4,res赋值为6。
29、请读程序:
voidmain()
{
inta=1,b=2,c=3;
++a;
c+=++b;
{
intb=4,c;
c=b*3;
a+=c;
printf("first:
%d,%d,%d\n",a,b,c);
a+=c;
printf("Second:
%d,%d,%d\n",a,b,c);
}
printf("third:
%d,%d,%d\n",a,b,c);
}
该程序的输出是()
:
12,4,12Second:
26,4,12third:
4,3,6
:
14,4,12Second:
26,12,12third:
26,3,4
:
14,4,12Second:
26,4,12third:
26,3,6
:
14,4,12Second:
26,6,12third:
26,4,6
答案:
C
解析:
程序运行到第6行时,a=2,b=3,c=6;程序运行到第10行时,a=14,局部变量b=4,c=12;程序运行到第13行时,a=26,局部变量b=4,c=12;程序运行到第15行时,a=26,b=3,c=6。
30、以下程序运行后,输出结果是()。
intd=1;
intfun(intp)
{
intd=5;
d+=p++;
printf("%d",d);
}
intmain()
{
inta=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
答案:
A
解析:
fun()函数调用时代入局部变量a的值,fun()函数体内局部变量d自增3,输出d的值,即8,fun()函数返回8,此时全局变量d的值不变。
d+=a++后,全局变量d自增3,此时全局变量d的值是4,输出全局变量d的值。
31、以下程序的输出结果是()。
inta,b;
voidfun()
{
a=100;b=200;
}
voidmain()
{
inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
答案:
B
解析:
fun()函数改变的是全局变量的值,printf()函数输出的是局部变量的值,fun()函数不会改变局部变量a、b的值。
多选题
1、在调用外部函数时,下列描述中正确的是()(多选)
A.只要有函数名,就能调用外部函数
B.调用外部函数要包含外部函数所在的头文件
C.外部函数与调用者定义在同一个源文件下
D.在声明外部函数时,外部函数与原函数定义的返回值类型、函数名称和参数列表必须一致
答案:
B,D
解析:
外部函数调用时要包含其所在的头文件,当调用者声明了外部函数的原型,也可以不用包含头文件
判断题
1、局部变量就是在函数内部声明的变量。
答案:
true
解析:
局部变量就是在函数内部声明的变量。
2、局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。
答案:
true
解析:
局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。
3、局部变量就是在函数内部声明的变量,它只在本函数内有效。
答案:
true
解析:
局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是说,只能在本函数内使用它。
4、局部变量只有当它所在的函数被调用时才会被使用,当函数调用结束时局部变量还会一直存在。
答案:
false
解析:
局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。
简答题
1、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
voidfunc(inta,intb)
{
printf("%d",a+b);
}
voidmain()
{
func(3,2);
printf("\n");
}
答案:
5
解析:
fun()是一个实现两个数相加的函数,在主函数中调用并传入值,得到两个数的和
2、请阅读下面的程序,在空白处填写正确的代码,将函数的结果返回给调用者。
intfunc(inta,intb)
{
intsum=0;
sum=a+b;
;
}
voidmain()
{
intsum=0;
=func(3,2);
printf("两个数相加的结果为%d",sum);
}
答案:
returnsum;
sum;
解析:
returnsum;return将函数结果返回
sum;主函数中sum接收函数返回的值
3、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
voidmain()
{
intnum=100;
printf(“%d,%o,%x\n”,num,num,num);
}
答案:
10014464
解析:
printf()函数将十进制数100分别以十进制,八进制,十六进制形式输出。
4、请阅读下面的程序,当用户从键盘输入helloworld时,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
voidmain()
{
charstr[256];
scanf(“%s”,str);
printf(“%s\n”,str);
}
答案:
hello
解析:
输入helloworld时,中间的空格对scanf()函数来说是终止符,后面的内容无法读取。
5、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
用户从键盘输入两个整型数据,将两个数据相加输出。
voidmain()
{
inta,b;
;
printf(“%d\n”,);
}
答案:
scanf(“%d%d”,&a,&b);
a+b;
解析:
键盘输入数据,用scanf()函数;
输入两个数据的和a+b;
6、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
intfunc2(inta,intb)
{
intc;
c=a*b%3;
returnc;
}
intfunc1(inta,intb)
{
intc;
a+=a;
b+=b;
c=func2(a,b);
returnc*c;
}
voidmain()
{
intx=11,y=19;
printf("thefinalresultis:
%d\n",func1(x,y));
}
答案:
4
解析:
x=11,y=19传入func1()函数,在func1()函数中经过运算变为22,38,然后传入给func2()函数,返回运算结果2,func1()函数收到返回值2以后再经过运算返回给主调用函数结果为4。
7、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
voidfunc2(inta,intb)
{
a=a+10;
b=a+10;
}
voidfunc(inta,intb)
{
a=func2();
b=func2();
}
voidmain()
{
intx=1,y=10;
func1(x,y);
printf("x=%d,y=%d\n”,x,y);
}
答案:
x=1,y=10;
解析:
将实参传递给形参,只是复制了一份给x,y的值,参数在被调用函数内部改变,不影响其在调用函数中的值。
8、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
用户从键盘输入四个数,比较得出四个数中的最大值并输出。
intmax2(inta,intb)
{
if(a>b){
returna;
}
else
{
returnb;
}
}
intmax4(inta,intb,intc,intd)
{
intres;
res=max2(a,b);
res=;
res=max2(res,d);
;
}
voidmain()
{
inta,b,c,d,max;
printf("请输入四个整数:
");
;
max=max4(a,b,c,d);
printf("max=%d\n",max);
}
答案:
max2(res,c);
returnres;
scanf(“%d%d%d%d”,&a,&b,&c,&d);
解析:
在max4()函数中,res=max2(a,b)返回的是a,b中的最大值,这个最大值再与c进行比较,所以res=max2(res,c),返回的较大的值再与d作比较,再将比较得出的较大的值返回给主调用函数,这个较大的值就是四个数中的最大值。
9、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
intadd(intn)
{
if(n==1)
return1;
else
returnn+add(n-1);
}
voidmain()
{
intn=5;
intsum=add(5);
printf(“结果为:
%d\n”,sum);
}
答案:
15
解析:
add()函数进行递归调用,传入的参数5,会一直递减相加直到递减至1。
10、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
voidfun(intn)
{
if(n>0)
{
printf("%d\t",n);
fun(--n);
}
}
voidmain()
{
inta=5;
fun(a);
}
答案:
54321
解析:
fun()函数递归调用,每打印一次就自减再调用一次自己。
11、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
用递归方法求出n!
。
intfac(intn)
{
intt;
if()
return1;
else
{
t=;
returnt;
}
}
voidmain()
{
intm,y;
printf("Enterm:
\n");
scanf("%d",&m);
if(m<0)
printf("InputdataError!
\n");
else
{
y=fac(m);
printf("\n%d!
=%d\n",m,y);
}
}
答案:
(n==1)||(n==0)
n*fac(n-1)
解析:
实现n的阶乘,当n=0或者n=1时,阶乘没有意义,当n>1时,实现阶乘,则为n*fun(n-1);
12、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
intx=5;
staticvoidcude()
{
x=x*x*x;
}
voidmain()
{
cude();
printf("x=%d\n",x);
}
答案:
125
解析:
全局变量x,当调用cude()内部函数时,并没有传入参数,没有复制,所以x值的变化直接改变了x本身的值
13、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
文件
intfunc(inta,intb)
{
returna+b;
}
文件
staticintfunc(inta,intb)
{
returna–b;
}
voidmain()
{
intx=5,y=2;
printf(“%d\n”,func(5,2));
}
答案:
3
解析:
当内部函数与外部函数重名时,会优先调用内部函数
14、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
源文件
intfunc(inta,intb)
{
returna+b;
}
源文件
externintfunc(inta,intb);
voidmain()
{
intx=5,y=2;
printf(“%d\n”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 教程 第四 练习题 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)