C语言练习及答案.docx
《C语言练习及答案.docx》由会员分享,可在线阅读,更多相关《C语言练习及答案.docx(13页珍藏版)》请在冰豆网上搜索。
![C语言练习及答案.docx](https://file1.bdocx.com/fileroot1/2022-12/14/a75e12f3-34da-43c5-9cb8-04d5676d7bf6/a75e12f3-34da-43c5-9cb8-04d5676d7bf61.gif)
C语言练习及答案
一、填空题(每空2分,30分)
1.表达式的运算对象可以是常数、变量和。
2.表达“若|a|<4,则输出a,否则输出:
error!
”的if语句是:
________。
3.假设有说明intm=2,n=3,k=4;则执行语句“k=++m||++n;”后,变量m、n、k的值分别是______、_______、______。
4.以下程序段中的内层循环语句执行次循环。
inti,j;
for(i=6;i;i--)
for(j=0;j<6;j++){……}
5.{a=4;c+=a-b;d-=c/a;}在语法上被认为是条语句。
6.已知:
chara;intb;floatc;doubled;则执行语句c=a+b+c+d;后,变量c的类型是________。
7.已知:
inti,a;则执行语句“i=(a=2*3,a*5),a+6;”后,变量i的值是________,变量a的值为________。
8.以下程序段的输出结果是________。
floatx=5.16849;
printf(“%f\n”,(int)(x*100+0.5)/(float)100);
9.若已知a=10,b=20,则表达式!
(a
10.若已经定义x和y都是double类型,则表达式“x=1,y=x/2+10/4”的值是________。
11.假定int型变量占用两个字节,若有定义:
intx[][3]={1,0,2,4,3,8,10};,则数组x的最后一个元素的下标方式引用为________。
12.若有变量说明和语句为char*c=”program”;c[4]=’\0’;printf(“%s”,c);则输出结果是________。
二、选择题(每题2分,40分)
1.面向过程的程序设计语言是()。
A、机器语言B、汇编语言C、高级语言D、第四代语言
2.下面为正确的标识符的是()
A.p_saB.u+3C.2aD.static
3.下列常数中不能作C语言中的常量的是()
A.0xA5B.2.5e+3C."a"D.068
4.设已定义a1,a2,a3,a4为整型变量,为了将整数100赋给a1和a3,将整数200赋给a2和a4,则对应以下语句的正确输入方法是()。
scanf(“%d%d”,&a1,&a2);
scanf(“%d,%d”,&a3,&a4);
A.100200↙B.100□200↙C.100,200↙D.100□200↙
100200↙100□200↙100,200↙100,200↙
5.if语句的条件只能用:
()
A.只能用数值表达式B.只能用关系表达式
C.只能用逻辑表达式D.可以是任何表达式
6.如果inta=1,b=2,c=3;printf("result=%d\n",a>b?
b:
c);的输出结果是()
A.result=1B.result=2C.result=3D.result=0
7.以下b++语句执行的次数是:
()
b=1;while(b==5)b++;
A.5B.6C.0D.4
8.要判断char型变量m是否是小写字母,可以使用下列表达式()
A.a<=m&&m<=zB.a<=m<=z
C.'a'<=m&&m<='z'D."z<"=m&&m<="z"
9.C语言程序有且仅有一个()。
A、主函数B、库函数C、输入输出函数D、自定义函数
10.已知inti;doublem;正确的表达式是()
A、(intm)%iB、int(m)%iC、int(m%i)D、(int)m%i
11.下面的for语句()。
for(x=0,y=10;(x<4)&&(y>0);x++,y--);
A.是无限循环B.循环次数不定C.循环执行4次D.循环执行3次
12.若有:
do{i=100-i;}while(!
i);则while中的!
i可用()代替。
A.i!
=0B.i!
=1C.i==0D.以上均不对
13.已知:
charS[20]=“TurboCprogram”,*ps=s;则不能引用字母b的表达式是()
A.ps+3B.S[3]C.ps[2]D.ps+3,*ps
14.putchar()函数的参数以下说法正确的是()。
A.任何数据类型B.整型C.字符型D.字符型或整型
15.以下正确的数组定义语句是()。
A.inta[2][3]={{1,2},{3,4},{5,6}};B.inta[][3]={1,2,3,4,5,6};
C.inta[2][]={1,2,3,4,5,6};D.inta[2][]={{1,2},{3,4}};
16.已知:
inta,*p=&a;则下列函数调用错误的是()
A.scanf(“%d”,a);B.scanf(“%d”,p);
C.printf(“%d”,a);D.printf(“%d”,*p);
17.inta[]={1,3,5,7,9},*p=a,i;数组元素地址的正确表示()
A、&(a+1)B、a++C、&pD、&p[i]
18.以下一维数组a的正确定义是()。
A.inta(10);B.intn=10,a[n];
C.intn=10;inta[n];D.#definen10…inta[n];
19.以下关于C语言中数组的描述正确的是()。
A.定义时整型常量表达式与引用时的数组元素的下标表达式是完全相同的概念。
B.对于整型一维数组只能逐个引用数组元素,不能一次引用整个数组
C.对于字符一维数组只能逐个引用数组元素,不能一次引用整个数组
D.数组元素的下标一律从1开始
20.已知:
inti=0,j=1,*p=&i,*q=&j;错误的语句是()。
A.i=*&j;B.p=&*&i;C.j=*p++;D.i=*&q;
三、程序分析题(每小题5分,共30分)
1、以下程序的输出结果是。
main()
{floata=8,b;
if(a<0)b=0;
elseif(a<5&&!
a)b=1/(a+2);
elseif(a<10)b=1/a;
elseb=10;
printf(“%f\n”,b);}
2、下面程序的输出结果是。
main()
{inti,j,sum=0;
for(i=0;i<2;i++)
{sum++;
for(j=0;j<=2;j++)
{if(j%2)continue;
sum++;}
sum++;}
printf(“sum=%d\n”,sum);}
3、下面程序的输出结果是。
main()
{inta[]={10,20,30,40,50,60};
inti,sum=0;
for(i=1;i<3;i++)
sum=sum+a[i];
printf(“sum=%d\n”,sum);
}
4、下面程序的输出结果是。
intx=100;
f()
{intx=200;
x=x+100;}
ff()
{x=x+100;printf(“x=%d”,x);}
main()
{intx=10;
f();
ff();}
5、下面程序的输出结果是。
main()
{inta,k=2,m=4;
int*pk=&k,*pm=&m;
a=*pk+*pm;
printf(“a=%d”,a);
}
6、下面程序的输出结果是。
main()
{inti,k1=1,k2=1,k,sum=2;
for(i=1;i<6;i++)
{k=k1+k2;
sum=sum+k;
k1=k2;
k2=k;
}
printf(“%d\n”,sum);
}
参考答案
一、填空题(每空2分,共30分)
1.函数调用
2.if(a<4&&a>-4)printf(a);elseprintf(“error”);
3.331
4.36
5.一条
6.float
7.306
8.5.170000
9.0
10.2.5
11.x[2][2]
12.prog
二、选择题(每题2分,共40分)
1C2A3D4D5D
6C7C8C9A10D
11C12C13A14D15B
16A17D18D19B20D
三、程序分析题(每题5分,共30分)
1.0.125000
2.sum=8
3.sum=50
4.x=200
5.a=6
6.33
一、填空题(每空2分,30分)
1.if(!
j)a=3;语句中的!
j可以改写为,使其功能不变。
2.以下while循环执行的次数是
i=0;while(i=21)i=i+1;
3.已知intx=1,y=2,z;则执行语句z=x>y?
++x:
++y;后x、y、z的值分别是、________、__________。
4.空语句的形式是。
5.下列程序段的输出是。
inti=1,k=20,j=7;
if(i+j)k=(i=j)?
(i=1):
(i=i+j);
printf("k=%d",k);
6.已知:
charw;intx;floaty;doublez;则表达式w*x+z-y结果的类型是________。
7.已知:
intx;则使用逗号运算的表达式“(x=4*5,x*5),x+25”的结果为________,表达式执行后变量x的值为________。
8.以下程序段的输出结果是________。
floatx=5.16849;
printf(“%f\n”,(int)(x*1000+0.5)/(float)1000);
9.若已知a=10,b=20,则表达式!
a
10.若已经定义x和y都是double类型,则表达式“x=1,y=x+3/2”的值是________。
11.假定int型变量占用两个字节,若有定义:
intx[10]={0,2,4};,则数组x在内存中所占字节数为________。
12.若有变量说明和语句为charc[]=”GuiLin”,*p=c+3;printf(“%s”,p);则输出结果是________。
二、选择题(每题2分,40分)
1.一个C语言组成的基本单位是()。
A.主程序B.子程序C.函数D.过程
2.下面不是合法标识符的是()。
A、_sumB、6signC、Type_fD、num
3.下列常数中不能作为C的常量的是()
A、0xB4B、3.00e3C、087D、6.9e+2
4.下面的程序是()
main()
{intx=3,y=0,z=0;
if(x==y+z)printf("****");
elseprintf("####"); }
A、有语法错误不能过通过编译
B、输出****
C、可能通过编译,但是不能通过连接,因而不能运行
D、输出####
5.下列说法中正确的是:
()。
A.continue的功能是跳过该语句后面的循环语句,结束循环
B.break即可以出现在循环语句中,还可以出现在switch语句中
C.for语句不能代替所有的do-while和while语句
D.采用while循环时,循环语句至少要执行一次。
6.要判断char型变量m是否是数字字符,可以使用下列表达式()
A.0<=m&&m<=9B.0<=m<=9
C.'0'<=m&&m<='9'D."0"<=m&&m<="9"
7.运行如下程序片段之后的c的值是()
inta=1,b=2,c=10;if(a=b)c/=3;elsec/=4;
A2B.3.3C3D.2.5
8.若intx=10,y=20;则为了输出x=10,y=20正确的输出语句是()。
A.printf(“x=%d”,x,“y=%d”,y);B.printf(“x=%d,y=%d”,x,y);
C.printf(“x=%dy=%d”,x,y);D.printf(“x=%D,y=%D”,x,y);
9.C语言调用一个函数时,实参变量和形参变量之间的数据传递方向是()
A.地址传递B.值传递C.实参传递给形参D.形参传递给实参
10.执行语句for(i=0;i<10;i++);后,i的值是:
()
A.10B.9C.11D.不定
11.若a,b,x,y均为实型变量,正确的switch语句是:
()
A.switchxB.switch(a/b)
{case11:
y=a;break;{case10:
case6.5:
y=a*b+x;break;
case10:
y=a-b;break;case5:
case6:
y=a+b;
default:
x=a+b;}
}
C.switch(a*b);D.switch(x+y)
{case3:
{case10:
case5:
a=x;
case1:
y=a+b;break;case11:
a=a-b;break;
case0:
y=b-a;break;}
}
12.下列循环语句中有语法错误的是()。
A.while(x=y)5;B.while(0);
C.do2;while(x==a);D.doy++while(y==10);
13.求取满足式12+22+32+…+n2≤200的n,正确的语句是()。
A.for(i=1,sum=0;(sum=sum+i*i)<=200;n=i++)
B.for(i=1,sum=0;(sum=sum+i*i)<=200;n=++i)
C.for(i=1,sum=0;(sum=sum+++i*i)<=200;n=i)
D.for(i=1,sum=0;(sum=sum+i*i++)<=200;n=i)
14.以下程序的输出结果是()。
main()
{intk,a[3][3]={1,2,3,4,5,6,7,8,9};
for(k=0;k<3;k++)printf(“%d,”,a[k][2-k]);
}
A.3,5,7B.3,6,9C.1,4,7D.1,5,9
15.能正确为字符数组输入“Howareyou”字符串的是()。
A.charstr[20];scanf(“%s”,&str);
B.charstr[20];scanf(“%s”,str);
C.charstr[20];scanf(“%s”,&str[0]);
D.charstr[20];gets(str);
16.运行下列程序时在键盘上输入字符串“abc”后,屏幕输出为()。
#include
f1(charstr[])
{gets(str);}
main()
{chara[10]="TurboC";
f1(a);
printf("%s\n",a);
}
A.abcB.abcboCC.TurboCD.boC
17.C语言程序中,main()函数的特征是()
A.可以嵌套定义其他函数B.所有的main()函数都没有形式参数
C.最先执行的函数D.具有前述三个特征的函数
18.以下定义语句中,错误的是()
A.inta[]={1,2};B.chara[3]={“12”};
C.chars[10]="text";D.intn=5,a[n];
19.以下关于C语言中数组的描述正确的是()。
A.数组的大小是固定的,但可以有不同的类型的数组元素
B.数组的大小是固定的,所有数组元素的类型必须相同
C.数组的大小是可变的,但所有数组元素的类型必须相同
D.数组的大小是可变的,可以有不同的类型的数组元素
20.已知:
char*p,*q;选择正确的语句()。
A.p*=3;B.p/=qC.p+=3;D.p+=q;
三、程序分析题(每小题5分,共30分)
1、一下程序的输出结果是。
main()
{inta=0,b=1,c=0,d=20;
if(a)d=d-10;
elseif(!
b)
if(!
c)d=15;
elsed=25;
printf(“d=%d\n”,d);
}
2、下面程序的输出结果是。
main()
{inti;
for(i=1;i<=7;i++)
{if(i%2)printf(“+”);
elsecontinue;
printf(“*”);
}
printf(“!
\n”);
}
3、下面程序的输出结果是。
main()
{charstr[]=”abcdef”;
inti=0;
while(str[i]!
=’\0’)i++;
printf(“i=%d\n”,i);
}
4、下面程序的输出结果是。
intswap(x,y)
intx,y;
{
inttemp;
temp=x;x=y;y=temp;
}
main()
{intx=10,y=20;
swap(x,y);
printf(“x=%d,y=%d\n”,x,y);
}
5、下面程序的输出结果是。
main()
{inti=0;
char*str=“abcdefghijklmnopq”;
while(*str++!
=’e’);
printf(“%c\n”,*str);
}
6、下面程序的输出结果是。
main()
{inti,j,t,p,x[4]={30,10,70,90};
for(i=0;i<3;i++)
{p=i;
for(j=i+1;j<4;j++)
if(x[p]>x[j])p=j;
if(p!
=i)
{t=x[p];
x[p]=x[i];
x[i]=t;
}
}
printf(“%d\n”,x[1]);
}
参考答案
一、填空题(每空2分,共30分)
1.j==0
2.无穷次
3.133
4.;
5.k=1
6.double
7.4520
8.5.169000
9.1
10.2.0
11.20
12.Lin
二、选择题(每题2分,共40分)
1C2B3C4D5B
6C7C8B9C10A
11D12D13A14A15D
16A17D18D19B20C
三、程序分析题(每题5分,共30分)
1.d=20
2.+*+*+*+*!
3.i=6
4.x=10,y=20
5.f
6.30