《C语言程序设计》综合练习题与答案.docx
《《C语言程序设计》综合练习题与答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》综合练习题与答案.docx(27页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》综合练习题与答案
《C语言程序设计》综合练习题与答案
一、简要问答下列问题
1.什么是源程序?
2.C语言源程序的编译过程是怎样的?
3.简述C语言的特点
4.C/C++程序都是由函数组成的,其中最主要的、不可缺少的函数是哪一个?
举例说明该函数的结构。
5.函数的返回值是通过什么语句来实现的,它的格式是什么?
6.在编写C程序时,为什么要把库函数的头文件包含到用户源程序中?
如何把用户的头文件包含到用户源程序?
7.在计算机中,存储的数据为什么要分成多种不同的数据类型?
8.什么是常量?
什么是变量?
9.C语言的五种基本数据类型有哪些?
它们的关键字和所占的字节数分别是什么?
10.判断标识符是否合法的三条规则是什么?
11.什么是C语言的关键字?
关键字对标示符有何影响?
12.全局变量和局部变量有什么区别?
13.什么是空语句,什么是语句块?
14.结构化程序设计的三种基本结构是什么?
15.三种循环语句各有什么特点?
16.什么叫多重循环结构?
17.Continue语句与break语句有什么区别?
18.字符与字符串有什么区别?
‘b’与“b”相同吗?
19.什么是数组?
一维数组的定义形式是怎样的?
20.字符串的结束标记是什么?
21.什么是按位操作?
C语言对按位操作有哪些要求?
22.什么是指针?
指针的两个操作符表示什么意义?
23.指针和数组有什么关系?
24.指针有那几种算术运算?
说明指针变量的算术运算与一般变量的算术运算有何区别?
25.函数是由哪三部分组成的?
函数定义的一般形式是什么?
26.函数原型是什么情况下使用?
有什么作用?
27.形参和实参有什么关系,函数的两种调用方式是什么?
28.什么是函数的递归调用?
29.什么是函数指针?
说明定义函数指针的一般形式。
30.什么是内部函数?
什么是外部函数?
31.C语言的四种用户定义数据类型是什么?
32.C系统提供的三种主要预处理功能是什么?
33.什么是文件包含?
34.什么是文件?
什么是流?
二、写出下列程序段的输出结果
(1)inta,b,c=1;
for(a=0;a<3;a++)
for(b=0;b<=3;b++)
c=c+1;
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
(2)inti=1;
do{
if(i%10){
i=i+1;
continue;
}
printf(“%5d”,i);
i++;
}While(i<=50);
(3)intx=2;
there:
x=x+1;
if(x<6)gotothere;
printf("x=%d",x);
printf("Endofprogram.");
(4)intx=1,y=1;
while(y<6)
{
x=x*y;
y=y+1;
}
printf("x=%d\n",x);
(5)inti,j,x[2][2];
for(i=0;i<2;i++){
for(j=0;j<2;j++){
x[i][j]=i十j;
printf("x[%d][%d]=%d",i,j,x[i][j]);
}
printf("\n");
}
(6)inta[5]={5,4,3,2,1},i=0,x=0;
whi1e(i<5)
{
x=a[i]十x;
i++;
}
printf("x=%d\n",x);
}
(7)main()
{
intx=10,y=20;
printf("result=%d\n",abc(x,y));
return0;
}
abc(inta,intb)
{
intc;
if(b)
{c=a/b+a;
returnc;}
e1se
return0;
}
(8)main()
{
intx=10;
inti;
for(i=0;i<3;i++)
printf(“%d”,fun(x));
return0;
}
fun(intx)
{
staticintZ=3;
Z=Z+x;
returnZ;
}
(9)main()
{
inta,b;
a=50;b=90;
printf("%d\n",(a,b));
return0;
}
(10)main()
{
inta[10]={19,23,44,17,37,28,49,36},*P;
P=a;
printf("%d\n",(P+=3)[3]);
return0;
}
(11)main()
{
inti=3,j=2;
char*a="DCBA";
printf("%c%c\n",a[i],a[j])";
return0;
}
(12)#include
fun(intx)
{
intk;
if(x==0||x==1)return(3);
k=x-fun(x-2);
returnk;
}
main()
{
printf("%d\n",fun(9));
return0;
}
(13)#include
voidmyFunc();
voidrnain()
{
intX=5;
cout<<"\nInmainXis:
"<myFunc();
cout<<"\nBackinmain,Xis:
"<}
voidmyFunc()
{
intX=8;
cout<<"\nInmyFunc,localX:
"<{
cout<<"\nInblockinmyFunc,Xis:
"<intX=9;
cout<<"\nVerylocal,X:
”<}
cout<<"\nOutofblock,inmyFunc,Xis:
"<}
(14)#include
f(inta[])
{
inti=0;
while(a[i]<=10)
{
printf("%d",a[i]);
i++;
}
}
main()
{
inta[]={1,5,10,9,11,7};
f(a+1);
}
(15)#include
swap(int*p1,int*p2)
{
intp;
p=*p1;*p1=*p2;*p2=p;
}
main()
{
inta=5,b=7,*ptr1,*ptr2;
prt1=&a;ptr2=&b;
swap(ptr1,ptr2)
printf("*ptr1=%d,*ptr2=%d\n",*ptr1,*ptr2);
printf("*ptr1=%d,*ptr2=%d\n",a,b);
}
(16)#include
voidmain(void)
{
intx,y=-2,z=0;
if((z=y)<0)x=4;
elseif(y==0)x=5;
elsex=6;
printf("\t%d\t%d\n",x,z);
if(z=(y==0))
x=5;
x=4;
printf("\t%d\t%d\n",x,z);
if(x=z=y)x=4;
printf("\t%d\t%d\n",x,z);
}
(17)#include
intfac(intn)
{
staticintf=1;
f=f*n;
return(f);
}
main()
{
inti;
for(i=1;i<=5;i++)
printf("%d!
=%d\n",i,fac(i));
return;
}
(18)#include
intfac(intn)
{
intf=1;
f=f*n;
return(f);
}
main()
{
inti;
for(i=1;i<=5;i++)
printf("%d!
=%d\n",i,fac(i));
return;
}
三、单项选择题
1.一个C程序的执行是从_______。
(A)本程序的main函数开始,到main函数结束
(B)本程序的第一个函数开始,到本程序文件的最后一个函数结束
(C)本程序的main函数开始,到本程序文件的最后一个函数结束
(D)本程序文件的第一个函数开始,到本程序main函数结束
2.一个C语言程序是由__________。
(A)一个主程序和若干个子程序组成
(B)函数组成
(C)若干个过程组成
(D)若干个子程序组成
3.下面选项中,均是不合法的用户标示法的选项是________。
(A)AP_0do
(B)floatla0_A
(C)b-agotoint
(D)_123tempINT
4.以下叙述正确的是_________。
(A)在C程序中,每行中只能写一条语句
(B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整数
(C)在C程序中,如论是整数还是实数,都能被准确无误地表示
(D)在C程序中,%是只能用于整数运算的运算符
5.以下C程序的正确的运行结果是___________。
(注:
表示空格)
main()
{
longy=-43456;
printf("y=%-8ld\n",y);
printf("y=%-08ld\n",y);
printf("y=%08ld\n",y);
printf("y=%+8ld\n",y);
}
(A)y=
-43456(B)y=-43456
y=-
43456y=-43456
y=-0043456y=-0043456
y=-43456y=+
-43456
(C)y=-43456(D)y=
-43456
y=-43456y=-0043456
y=-0043456y=00043456
y=
-43456y=+43456
6.设x,y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是___。
(A)'x'&&'y'(B)x<=y
(C)x||y+z&&y-z(D)!
((xz||1)
7.以下运算符中优先级最低的是_______。
(A),(B)&&(C)+(D)!
=
8.以下if语句语法正确的是_______。
(A)if(x>0)
printf("%f",x)
elseprintf("%f",-x);
(B)if(x>0)
{x=x+y;printf("%f",x);}
elseprintf("%f",-x);
(C)if(x>0)
{x=x+y;printf("%f",x);};
elseprintf("%f",-x);
(D)if(x>0)
{x=x+y;printf("%f",x)};
elseprintf("%f",-x);
9.以下程序段_____________。
x=-1;
do
{x=x*x;}
while(!
x);
(A)是死循环
(B)循环执行二次
(C)循环执行一次
(D)有语法错误
10.执行语句for(i=1;i++<4;);变量的值是________。
(A)3(B)4(C)5(D)不确定
11.对以下说明语句的正确理解是_________。
inta[10]={6,7,8,9,10};
(A)将5个初值一次赋给a[1]至a[5]
(B)将5个初值一次赋给a[0]至a[4]
(C)将5个初值一次赋给a[6]至a[10]
(D)因为数组长度与初值的个数不相同,所以语句不正确
12.下面程序段的运行结果是____________。
chara[]={'a','b','\0','c','\0'}
printf("%s",c);}
(A)'a''b'(B)ab(C)ab
c(D)abc
13.在C语言中,以下正确的说法是______
(A)实参和与其对应的形参各占独立的存储单元
(B)实参和与其对应的形参占用同一个存储单元
(C)只有当实参和与其对应的形参同名时才占用同一个存储单元
(D)形参是虚拟的,不占用存储单元
14.用数组名作为函数调用的实参,传递给形参的是_____。
(A)数组的首地址
(B)数组第一个元素的值
(C)数组中全部元素的值
(D)数组元素的个数
15.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为____。
(A)自动(auto)(B)静态(static)
(C)外部(extern)(D)寄存器(register)
16.以下叙述中正确的是_________。
(A)在程序的一行上可以出现多个有效的预处理命令行
(B)使用带参的宏时,参数的类型应与宏定义时一致
(C)宏替换不占用运行时间,只占编译时间
(D)以下定义中CR是称为“宏名”的标示符
#defineCR045
17.若有以下宏定义:
#defineN2
#definY(n)((N+1)*N)
则执行语句z=2*(N+Y(5));后的结果是_________。
(A)语句有错误(B)z=34
(C)z=70(D)z无定值
18.下面程序应能对两个整型变量的值进行交换。
以下正确的说法是______。
main()
{
inta=10,b=20;
printf("
(1)a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("
(2)a=%d,b=%d\n",a,b);
}
swap(intp,intq)
{
intt;
t=p;p=q;q=t;
}
(A)该程序完全正确
(B)该程序有错,只要将语句swap(&a,&b);中的参数该为a,b即可
(C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
(D)以上说法都不正确
19.若有定义inta=5;下面对
(1)和
(2)两个语句的正确解释是____。
(1)int*p=&a;
(2)*p=a;
(A)语句
(1)和
(2)中的*p含义相同,都表示给指针变量p赋值。
(B)
(1)和
(2)语句的执行结果,都是把变量a的地址值赋给指针变量p
(C)语句
(1)在对p进行说明的同时进行初始化,使p指向a
语句
(2)将变量a的值赋给指针变量p
(D)语句
(1)在对p进行说明的同时进行初始化,使p指向a
语句
(2)将变量a的值赋给*p
20.若已定义chars[10];则在下面表达式中不表示s[1]的地址的是___。
(A)s+1(B)s++(C)&s[0]+1(D)&s[1]
21.编译执行下列程序,结果是:
____________。
#inclucle
main()
{
inti=6;y=4;z=2;
printf("%d\n",i/y%z);
return0;
}
(A)显示出错信息,不能执行。
(B)0(C)1(D)2
22.以下程序的输出结果是:
______。
#inclucle
main()
{
intx=10,y=10;
printf("%d%d\n",x--,--y);
retum0;
}
(A)1010(B)99
(C)910(D)109
23.以下程序的输出结果为:
______。
#inclucle
main()
{
intx=023;
printf("%d\n",--x);
return0;
}
(A)18(B)22
(C)23(D)19
24.不能进行++和--运算的数据类型是:
______。
(A)指针(B)double
(C)int(D)long
25.下列字符序列中,不可用作C语言标识符的是:
______
(A)$4568:
’(B)sum
(C)STUD_name(D)basic_12
26.设X的值为3,则表达式(X++)+(X++)+(X++)的值是______。
(A)10(B)6
(C)12(D)9
27.设a=12,b=12345,执行语句printf("%4d,%4d",a,b)的输出结果为:
______
(A)12,123(B)12,12345
(C)12,1234(D)12,123456
28.以下程序的输出结果是:
______。
main()
{
inti=1,sum=0;
while(i<10)
sum=sum+1;
i++;
printf("i=%d,sum=%d",i,sum);
return0;
}
(A)i=10,sum=9(B)i=9,sum=9
(C)i=2,sum=1(D)运行出现错误
29.以下程序的的输出结果为:
______。
#inclucle
main()
{
inta,b,c,x,y,z;
a=10;b=2;
c=!
(a%b);x=!
(a/b);
y=(a=0);
z=(a=0);
printf("c=%d,x=%d,y=%d,z=%d\n",c,x,y,z);
return0;
}
(A)c=0,x=1,y=l,z=0(B)c=5,x=0,y=l,z=0
(C)c=1,x=0,y=0,z=1(D)c=10,x=2,y=0,z=1
30.执行下列程序段后,xy的值是:
______。
int*pt,xy;
xy=270;
pt=&xy;
xy=*pt+30;
(A)270(B)240
(C)330(D)300
31.用scanf("%d,%d,&a,&b)输人数据时,下面输入法正确的是:
________
(A)123,4(B)1234
(C)123;4(D)123:
4
32.以下程序的输出结果是:
_______。
point(char*pt);
main()
{
charb[4]={'a','c','s','f'},*pt=b;
point(pt);
printf("%c\n",*pt);
return0;
}
point(char*P)
{
P+=3;
}
(A)s(B)c
(C)f(D)a
33.标有/**/的语句的执行次数是:
________。
inty,i;
for(i=0;i<20;i++)
{
if(i%2==0)
continue;
y=y+i;/**/
}
(A)20(B)19
(C)10(D)9
34.以下程序的输出结果是:
_________。
#inclucle
sub(x,y,z)
intx,y,*z;
{
*z=y-x;
}
main()
{
inta,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%d,%d,%d\n",a,b,c);
return0;
}
(A)-5,-12,-17(B)-5,-3,-2
(C)-5,-12,-7(D)-5,-2,-7
35.以下程序的输出结果为:
______。
main()
{
charcl='a',c2='b',c3='c';
printf("a%cb%c\tc%c\n",c1,c2,c3);
return0;
}
(A)abcabcabc(B)aabbcc
(C)abc(D)aaaabb
36.经过以下语句定义后,表达式z+=x>y?
++x:
++y的值是:
______。
intx=1,y=2,z=3;
(A)2(B)3
(C)6(D)5
37.在下列各m的值中,能使m%3==2&&m%5==3&&m%7==2为真的是:
_____
(A)8(B)23
(C)17(D)6
38.下列语句执行后的结果是:
______。
y=5;P=&y;x=*P++;
(A)x=5,y=5(B)x=5,y=6
(C)x=6,y=5(D)x=6,y=6
39.以下程序的输出结果是:
______。
#inclucle
inta[]={1,3,5,7};
main()
{
intn;
int*P=a;
for(n=0;n<4;n++)a[n]=*P++;
printf("%d\n",a[3]);
return0;
}
(A)l(B)3
(C)5(D)7
40.以下程序的输出结果是:
___