C语言复习题 c程序设计教程 有答案.docx
《C语言复习题 c程序设计教程 有答案.docx》由会员分享,可在线阅读,更多相关《C语言复习题 c程序设计教程 有答案.docx(20页珍藏版)》请在冰豆网上搜索。
![C语言复习题 c程序设计教程 有答案.docx](https://file1.bdocx.com/fileroot1/2022-11/23/55dec303-521f-4fd1-baba-08d9a099fad2/55dec303-521f-4fd1-baba-08d9a099fad21.gif)
C语言复习题c程序设计教程有答案
一、填空题(每小题2分,共16分)
1.在C语言中,输入操作是由库函数scanf完成的,输出函数是由库函数printf完成的。
2.执行下列语句后,a的值是-264inta=12;a+=a-=a*a;
3.C语言中的每条基本语句以 ; 作为结束符,每条复合语句以 } 作为结束符。
4.下面的程序段中循环体的执行次数是3。
a=10;b=0;do{b+=2;a-=2+b;}while(a>=0);
5.假定a为一个整型数组名,则元素a[4]的字节地址为 a+16 。
6.已知inta[2][3]={3,2,1};则表达式“a[0][0]/a[0][1]/a[0][2]”的值是1。
7.调用函数有返回值时,应在函数的返回值类型之前增加关键字return。
如果一个函数无返回值,定义它时函数类型应是void。
8.设inta=1,b=2.c=3,d;执行d=!
(a十b十c)后,d的结果是0
9.若用数组名作为函数调用时的实参,则实际上传递给形参的是数组首元素的地址。
10.设x为int型变量,请写出一个关系表达式 (x%3==0)&&(x%7==0) ,用以判断x同时为3和7的倍数时,关系表达式的值为真。
11.表达式(int)((double)(5/2)+2.5)的值是4
12.若变量x、y已定义为int类型且x的值为99,y的值为9,请将输出语句printf("x/y=%d",x/y);补充完整,使其输出的计算结果形式为:
x/y=11
13.数组与函数参数联系密切,当用数组元素作函数参数时,这时属于值传递;当数组名作参数时,这时属于地址传递,对形参的改变可影响到实参。
14.算术表达式5x+8xy/8-xy对应的C表达式为__5*x+8*x*y/8-x*y___________________________
15.逗号表达式(x=4*5,x*5),x+25的值为___45______
16.inti=1,j=2;则表达式++i+j的值为____4_____
17.用关系表达式或逻辑表达式表示条件:
年份Year能被4整除,但不能被100整除或者能被400整除____(year%4==0&&year%100!
=0)||year%400==0___
18.一个c程序有且仅有一个main()函数。
19.C程序的基本单位是函数。
20.C语言中的标识符只能由三种字符组成,它们是字母,数字和下划线。
21.若有定义:
intb=7;floata=2.5,c=4.7;则下面表达式的值为5.500000。
a+(int)(b/3*(int)(a+c)/2)%4
22.若有定义:
inta=2,b=3;floatx=3.5,y=2.5;则下面表达式的值为3.500000。
(float)(a+b)/2+(int)x%(int)y
23.设inta=1,b=2,c,d,e;执行c=(一a十十)十(十十b)
d=(b一一)+(十十a)一a;
e=(a/(十十b))一(b/(一一a));
后,变量a、b、c、d、e的结果分别是【2】【3】【2】【3】【0】
24.假设变量x,为整形变量,则执行下面语句后x的直为-14.
x=7;x+=x-=x+x;
25.以下程序的执行结果是c=k。
#include
main()
{charc='A'+10;
printf("c='%c\n",c);}
二、选择题(每题2分,共30分)
(1)若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是(D).
A)scanf(“%d%d1x,%1e”,&x,&y,&z);
B)scanf(“%2d*%d%1f”,&x,&y,&z);
C)scanf(“%x%*d%o”,&x,&Y);
D)scanf(“%x%o%6.2f”,&x,&y,&z);
(2)以下关于C语言的叙述中正确的是(B)
A)C语言中的注释不可以夹在变量名或关键字的中间
B)C语言中的变量可以在使用之前的任何位置进行定义
C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致
D)C语言的数值常量中夹带空格不影响常量值的正确表示
(3)以下C语言用户标识符中,不合法的是(D)
A)_1
B)AaBc
C)a_b
D)a-b
(4)若有定义:
doublea=22;inti=0,k=18;,则不符合C语言规定的赋值语句是(C)
A)a=a++,i++;
B)i=(a+k)<=(i+k);C)i=a%11;
D)i=!
a;
(5)有以下程序
#include
main()
{chara,b,c,d;
scanf(“%c%c”,&a,&b);
c=getchar();d=getchar();
printf(“%c%c%c%c\n”,a,b,c,d);}
当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:
回车也是一个字符)(C)
1234
则输出结果是
A)1234
B)12
C)123
D)1234
(6)若a是数值类型,则逻辑表达式(a==1)||(a!
=1)的值是(A)
A)1
B)0
C)2
D)不知道a的值,不能确定
(7)以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是(B)
A)switch(a)
{case:
a=b;break;
default:
a++;}
B)switch(a==1)
{case0:
a=b;break;
case1:
a++;}
C)switch(a)
{default:
a++;break;
case1:
a=b;}
D)switch(a==1)
{case1:
a=b;break;
case0:
a++;}
(8)有如下嵌套的if语句
if(a
if(a elsek=c;
else
if(b elsek=c;
以下选项中与上述if语句等价的语句是(C)
A)k=(a<b)?
a:
b;k=(b<c)?
b:
c;
B)k=(a<b)?
((b<c)?
a:
b):
((b>c)?
b:
c);
C)k=(a<b)?
((a<c)?
a:
c):
((b<c)?
b:
c);
D)k=(a<b)?
a:
b;k=(a<c)?
a:
c;
(9)有以下程序
#include<stdio.h>
main()
{ini,j,m=1;
for(i=1;i<3;i++)
{for(j=3;j>O;j--)
{if(i*j)>3)break;
m=i*j;}}
printf("m=%d\n",m);}
程序运行后的输出结果是(A)
A)m=6
B)m=2
C)m=4
D)m=5
(10)一个c程序的执行是从(A).
A.main()函数开始,直到main()函数结束
B.第一个函数开始,直到最后一个函数结束
C.第一个语句开始,直到最后一个语句结束
D.main()函数开始,直到最后一个函数结束
(11)有以下程序,其中k的初值为八进制数
#include
main()
{intk=011;
printf("%d\n",k++); }
程序运行后的输出结果是(D)
A)12
B)11
C)10
D)9
(12)一个C语言程序是由(B)。
A)一个主程序和若干子程序组成
B)函数组成
C)若干过程组成
D)若干子程序组成
(13)以下关于return语句的叙述中正确的是(B)
A)一个自定义函数中必须有一条return语句
B)一个自定义函数中可以根据不同情况设置多条return语句
C)定义成void类型的函数中可以有带返回值的return语句
D)没有return语句的自定义函数在执行结束时不能返回到调用处
(14)下列选项中,能正确定义数组的语句是D
A)intnum[0..2008]; B)intnum[];
C)intN=2008;
intnum[N]; D)#defineN2008intnum[N];
(15)设charch;以下正确的赋值语句是(B).
A.ch='123';B.ch=\xff';
C.ch='\08’;D.ch="\”;
(16)若有代数式3ae/bc,则不正确的C语言表达式是(C)
A)a/b/c*e*3B)3*a*e/b/c
C)3*a*e/b*cD)a*e/c/b*3
(17)设有定义doublea[10],*s=a;,以下能够代表数组元素a[3]的是B
A)(*s)[3]B)*(s+3)C)*s[3]D)*s+3
(18)以下正确的叙述是(D).
A)在C程序中,每行中只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,无论是正数还是实数,都能被准确无误的表示
D)在C程序中,%是只能用于正数运算的运算符
(19)】在C语言中,要求运算数必须是整形的运算符是(D).
A)/B)++C)!
=D)%
(20)设intn=3;则n十十的结果是(B),n的结果是(C)。
A)2B)3C)4D)5
(21)设有定义:
intx=2;,以下表达式中,值不为6的是(D)
A)x*=x+1B)x++,2*xC)x*=(1+x)D)2*x,x+=2
(22)若有以下定义
intx[10],*pt=x;
则对x数组元素的正确应用是(B)
A)*&x[10]B)*(x+3)C)*(pt+10)D)pt+3
(23)设有说明:
charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为(D)。
A)floatB)charC)itnD)double.
(24)已有定义intx;floaty;且执行scanf(“%3d%3f”,&x,&y);语句时从第一列开始输入数据12345︼678<回车>,则x的值为(B),y的值为(B)。
(注:
︼表示空格)
【1】A)12345B)123C)45D)345
【2】A)无定植B)45.000000C)678.000000D)123.000000
(25)已有如定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是(D)。
(注:
表示回车)
inta1,a2;charc1,c2;
scanf(“%d%d”,&a1,&a2);
scanf(“%c%c”,&c1,%c2);
A)1020ABB)10︼20AB
C)10︼︼20︼︼ABD)10︼20AB
(26)根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为(A).
main()
{charch1,ch2,ch3;
输入语句
printf(“%c%c%c”,&ch1,&ch2,&ch3);}
输入形式:
ABC
输出形式:
AB
scanf(“%c%c%c”,&ch1,&ch2,&ch3);
scanf(“%c,%c,%c”,&ch1,&ch2,&ch3);
scabf(“%c%c%c”,&ch1,&ch2.&ch3);
scanf(“%c%c”,&ch1,&ch2,&ch3);
(27)设X,Y均为FLOAT变量,则以下不合法的赋值语句是(B)
A)++x;B)y=(x%2)/10;C)x*=y+8;D)x=y=10;
(28)】有如下程序,对应正确的数据输入是(A)。
#include
main()
{floata,b;
scanf("%f%f",&a,&b);
printf("a=%f,b=%f\n",a,b);}
A.2.045.56
B.2.01,5.67
C.A=2.04,B=5.67
D.2.045.67
(29)巳知字母A的ASCII码是65,以下程序的执行结果是(D)。
#include
main()
{charc1='A',C2='Y';
printf("%d,%d\n",c1,c2);
A.A,YB.65,65C.65,90D.65,89
(30)以下程序的执行结果是(B).
#include
{inti=010,j=10;
printf("%d,%d\n",++i,j--);}
A.11,10B.9,10C.010,9D.10,9
(31)为了避免嵌套的if-else语句的二义性,c语言规定else总是与(C)组成配对关系。
A)缩排位置相同的if
B)在其之前末配对的if
C)在其之前未配对的最近的if
D)同一行上的if
(32)当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是(B).
if(a
if(celse
if(aif(belsex=3;
elsex=6;
elsex=7;
A)1B)2C)3D)6
(33)以下程序的执行结果是(A)。
#include
main()
{
intsum,pad;
sum=pad=5;
pad=sum++;
pad++;
++pad;
printf("%d\n",pad);}
A.7B.6C.5D.4
(34)若运行时给变量X输入12,以下程序运行结果是(A).
main()
{intx,y;
scanf(“%d”,&x);
y=x>12?
x+10:
x-12;
Printf(“%d\n”,y);}
A)0B)22C)12D)10
(35)以下程序的运行结果是(D).
main()
{intk=4,a=3,b=2,c=1;
printf(“\n%d\n”,kk:
c
c:
a);}
A)4B)3C)2D)1
(36)若w,x,y,z,m均为int型变量,则执行下面语句后的m值是(A).
w=1;x=2;y=3;z=4;
m=(ww:
x;
m=(mm:
y;
m=(mm:
z;
A)1B)2C)3D)4
(37)对于for(表达式1;;表达式3)可理解为(A)
A)for(表达式1;1;表达式3)
B)for(表达式1:
1;表达式3)
C)for(表达式1;表达式1;表达式3)
D)for(表达式1;表达式3;表达式3)
(38)C语言中while和do-while循环的主要区别是(A).
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比的循环控制条件严格
C)do-while允许从外部转到循环体内
D)do-while的循环体不能是复合语句
(39)以下程序的输出结果是(C)。
#include
main()
{intnum=0;
while(num<=2)
{num++;
pringtf("%d\n",num);}}
A.1B.1C.1D.1
222
33
4
(40)在C语言中,引用数组元素时,其数组下标的数据类型允许是(C)
A)整型常量B)整型表达式C)整型常量或整型表达式D)任何类型的表达式
(41)以下对一维整形数组a的正确说明是(D)。
A)inta(10);B)intn=10,a[n];
C)intn;D)#defineSIZE10
scanf(“%d”,&n);inta[SIZE];
inta[n];
(42)若有说明:
inta[10];则对a数组元素的正确引用是(D)。
A)a[10]B)a[3.5]C)a(5)D)a[10-10]
(43)以下对二维整形数组a进行正确初始化的语句是(B)。
A)inta[2][]={{1,01},{5,2,3}};
B)inta[][3]={{1,2,3},{4,5,6}};
C)inta[2][3]={{1,2,3},{4,5},{6}};
D)inta[][3]={{1,0,1},{},{1,1}};
(44)以下正确的说法是(A).
A)如果在一个函数中的复合语句中定义了一个变量,则该变量只在该复合语句中有效
B)在该函数中有效
C)在本程序范围内均有效
D)非法变量
(45)以下不正确的说法为(D).
A)在不同的函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效
(46)以下程序的正确运行结果是(A).
#include
main()
{intk=4,m=1,p;
p=func(k,m);printf(“%d,”,p);
p=func(k,m);printf(“%d\n”,p);}
func(inta,intb)
{staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);}
A)8,17
B)8,16
C)8,20
D)8,8
(47)变量的指针,其含义是指该变量的(B)。
A)值B)地址
C)名D)一个标志
(48)若有说明:
int*p,m=5,n;以下正确的程序段是(D)。
A)p=&n;B)p=&n;
scanf(“%d”,&p);scanf(“%d”,*p);
C)scanf(“%d”,&n);D)p=&n;
*p=n;*p=m
(49)选择出合法的if语句(设intx,a,b,c;)(A).
A)if(a=b)x十十;
B)if(a=<b)x十+;
C)if(a<>b)x十十;
D)if(a=>b)x十十;
(50)逻辑运算符两侧运算对象的数据类型(D).
A)能是0或1
B)只能是0或非0正数
C)只能是整型或字符型数据
D)可以是任何类型的数据
三、读、填程序(每题5分,共30分)
1.有以下程序
#include
main()
{charc1,c2;
scanf(“&c”,&c1);
while(c1<65||c1>90)
scanf(“&c”,&c1);
c2=c1+32;
printf(“&c,&c\n”,c1,c2);}
程序运行输入65回车后,能否输出结果、结束运行(请回答能或不能)能
2.下列程序运行后的输出结果是【
*
***
*****
*******
*****
***
*】。
#include
main()
{inti,j,k;
for(i=1;i<=4;i++)
{for(j=1;j<=20-3*i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("%3s","*");
printf("\n");}
for(i=3;i>0;i--)
{for(j=1;j<=20-3*i;j++)
printf("");
for(K=1;k<=2*i-1;k++)
printf("%3s","*");
printf("\n");}}
3.以下程序可求出所有的水仙花数。
(提示:
所谓水仙花数是指一个三位正整数,其各位数字之和的立方之和等于该正整数。
例如:
407=4×4×4+0×0×0+7×7×7。
故407是一个水仙花数。
)请填空。
main()
{intx,y,z,a[8],m,i=0;
printf(“Thespecialnumbersare(inthearrangeof1000):
\n”);
for(m=100;m<1000;m++)
{x=m/100;
y=m/10-x*10;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{a[i]=m;i++;}
}
for(x=0;x
printf(“%6d”,a[x])}
4.请将以下程序中的函数声明语句补充完整
#include
intmax(inta,intb);
main()
{intx,y,(*p)();
p=max;
printf(“&d\n”,&x,&y);}
Intmax(inta,intb)
{return(a>b/a:
b);}
5.以下程序的输出结果为【123.456000,︼︼︼︼︼︼︼123.457,123.4560,8765.456700,︼︼︼︼︼︼8765.457,8765.4567,8765.4567】.
#include
main()
{floata=123.456;doubleb=8765.4567;
printf(“
(1)%f\n”a);
printf(“
(2)%14.3f\n”,a);
printf(“(3)%6.4f\n”,b);
printf(“(4)%1f\n”,b);
printf(“(5)%14.3f\n”,b);
printf(“(6)%8.4f\n”,b);
printf(“(7)%.4f\n”,b);
6.以下函数按每行8个输出数组中的数据
voidfun(int*w,intn)
{inti;
for(i=0;i{________if(i%8==0)printf(“\n”);_________
printf(“%d”,w);}
printf(“\n”);};
7.用数组方法处理Fibonacci数列问题,要求按每行5个输出数组中的20个数据,完成填空。
#include
voidmain()
{inti;
intf[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{if(i