C语言考试题.docx
《C语言考试题.docx》由会员分享,可在线阅读,更多相关《C语言考试题.docx(14页珍藏版)》请在冰豆网上搜索。
![C语言考试题.docx](https://file1.bdocx.com/fileroot1/2023-1/27/fb750565-a24d-4f87-9a47-d1f7e8a6f5d6/fb750565-a24d-4f87-9a47-d1f7e8a6f5d61.gif)
C语言考试题
循环控制试题
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。
)
6.1对表达式for(表达式1;;表达式3)可理解为
A)for(表达式1;0;表达式3)
B)for(表达式1;1;表达式3)
C)for(表达式1;表达式1;表达式3)
D)for(表达式1;表达式3;表达式3)
6.2在下列选项中,没有构成死循环的是
A)inti=100;
while
(1)
{i=i+1;
if(i>100)break;
}
B)for(;;);
C)intk=10000;
do{k++;}while(k>10000);
D)ints=36;
while(s)--s;
6.3下面有关for循环的正确描述是
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判断表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
6.4若inti,j;,则for(i=j=0;i<10&&j<8;i++,j+=3)控制的循环体执行的次数是
A)9
B)8
C)3
D)2
6.5阅读下列程序段,则程序的输出结果是
#include"stdio.h"
main()
{inta=10,b=10,k;
for(k=0;a>8;b=++k)
printf("%d,%d,",a--,--b);
printf("\n");}
A)10,10,10,0,
B)10,9,9,0,
C)10,10,9,1,
D)9,9,9,1,
6.6有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。
下面程序是求这堆零件总数,请选择填空。
#include
main()
{inti;
for(i=100;i<200;i++)
if((i-2)%4==0)
if(!
((i-3)%7))
if(_______)
printf("%d",i);
}
A)i%9=5
B)i%9!
=5
C)(i-5)%9!
=0
D)(i-5)%9==0
6.7下列程序的输出结果是
#include"stdio.h"
main()
{inti,a=0,b=0;
for(i=1;i<10;i++)
{if(i%2==0)
{a++;
continue;}
b++;}
printf("a=%d,b=%d",a,b);}
A)a=4,b=4
B)a=4,b=5
C)a=5,b=4
D)a=5,b=5
6.8阅读下列程序,则执行结果是
#include"stdio.h"
main()
{inta=0,b=0,c=0,i;
for(i=0;i<4;i++)
switch(i)
{case0:
a=i++;
case1:
b=i++;
case2:
c=i++;
case3:
i++;}
printf("%d,%d,%d,%d\n",a,b,c,i);}
A)0,1,3,4
B)1,2,3,4
C)0,1,2,5
D)0,2,3,4
6.9阅读下列程序,程序的输出结果是
#include"stdio.h"
main()
{
intm,n;
floatk;
for(m=6;m>2;m--)
{k=0;
for(n=m;n>1;n--)
k=k+m*n;
}
printf("%f\n",k);
}
A)5.000000
B)15.000000
C)25.000000
D)35.000000
6.10下面程序的运行结果是(代码有错误)
#include"stdio.h"
main()
{intj,i,k=0;
for(j=50;j<=60;j++)
{if(!
(k_))printf("\n");
for(i=2;iif(!
(j%i))break;
if(i>=j-1)
{printf("%d",j);
k++;}
}
}
A)5359
B)5953
C)3595
D)9535
6.11已知
intt=0;
while(t=1)
{...}
则以下叙述正确的是
A)循环控制表达式的值为0
B)循环控制表达式的值为1
C)循环控制表达式不合法
D)以上说法都不对
6.12设有以下程序段
intx=0,s=0;
while(!
x!
=0)s+=++x;
printf("%d",s);
则
A)运行程序段后输出0
B)运行程序段后输出1
C)程序段中的控制表达式是非法的
D)程序段执行无限次
6.13下列程序的输出结果是
#include"stdio.h"
main()
{inti=6;
while(i--)
printf("%d",--i);
printf("\n");}
A)531
B)420
C)654321
D)死循环
6.14对下Ⅰ,Ⅱ两个语句描述正确的是
Ⅰ.while
(1)Ⅱ.for(;;)
A)都是无限循环
B)Ⅰ是无限循环,Ⅱ错误
C)Ⅰ循环一次,Ⅱ错误
D)以上答案都错
6.15以下程序段的描述,正确的是
x=-1;
do
{x=x*x;}
while(!
x);
A)是死循环
B)循环执行两次
C)循环执行一次
D)有语法错误
6.16若有如下语句
intx=3;
do{printf("%d\n",x-=2);}while(!
(--x));
则上面程序段
A)输出的是1
B)输出的是1和-2
C)输出的是3和0
D)是死循环
6.17下面程序的运行结果是
#include
main()
{inta=1,b=10;
do
{b-=a;a++;}while(b--<0);
printf("a=%d,b=%d\n",a,b);
}
A)a=3,b=11B)a=2,b=8C)a=1,b=-1D)a=4,b=9
6.18若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是#include
main()
{charc;
intv0=1,v1=0,v2=0;
do{switch(c=getchar())
{case′a′:
case′A′:
case′e′:
case′E′:
case′i′:
case′I′:
case′o′:
case′O′:
case′u′:
case′U′:
v1+=1;
default:
v0+=1;v2+=1;}
}while(c!
=′\n′);
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);}
A)v0=7,v1=4,v2=7
B)v0=8,v1=4,v2=8
C)v0=11,v1=4,v2=11
D)v0=13,v1=4,v2=12
6.20C语言中while和do-while循环的主要区别是
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比do-while的循环控制条件更严格
C)do-while允许从外部转到循环体内
D)do-while的循环体不能是复合语句
6.21下列说法中错误的是
A)只能在循环体内使用break语句
B)在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环
C)在while和do…while循环中,continue语句并没有使整个循环终止
D)continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环判断
二、填空题(请将每一个空的正确答案写在答题卡相应序号后。
)
6.22设i,j,k均为int型变量,则执行完下面的for语句后,k的值为【1】。
10
for(i=0,j=10;i<=j;i++,j--)k=i+j;
6.23下列程序的功能是输入一个整数,判断是否是素数,若为素数输出1,否则输出0,请填空。
(x%2!
=0)
main()
{inti,x,y=1;
scanf("%d",&x);
for(i=2;i<=x/2;i++)
if【2】{y=0;break;}
printf("%d\n",y);
}
6.24以下程序的输出结果是【3】。
8,5,3
main()
{inty=9;
for(;y>0;y--)
if(y%3==0)
{printf("%d",--y);continue;}
}
6.25阅读下面程序段,则执行后的输出结果为【4】。
2,7,12
#include"stdio.h"
main()
{inta=1;
for(;a<=15;)
if(++a%5!
=2)continue;
elseprintf("%d",a);
printf("\n");}
6.26阅读下面语句,则执行后的输出结果为【5】(代码有错误)
#include"stdio.h"
main()
{chara,b;
for(a=′0′,b=′9′;aprintf("%c%c",a,b);
printf("\n");}
6.27阅读下面程序,则执行后程序的结果为【6】15,16
#include"stdio.h"
main()
{inta=0,b=0;
while(a<15)a++;
while(b++<15);
printf("%d,%d\n",a,b);}
三、编程题
(来自于经典C语言编程100例)
【程序1】
题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去
掉不满足条件的排列。
#include"stdio.h"
main()
{
inti,j,k;
for(i=1;i<5;i++)//三层循环嵌套,
for(j=1;j<5;j++)
for(k=1;k<5;k++)
if(i!
=j&&i!
=k&&j!
=k)//三个位上的数都不重复则输出
printf("%d%d%d\t",i,j,k);
return0;
}
【程序4】题目:
输入某年某月某日,判断这一天是这一年的第几天?
程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
#include"stdio.h"
main()
{
intday,month,year,sum;
do//判断用户的输入是否有误
{
printf("请输入年月日");
scanf("%d%d%d",&year,&month,&day);
if(month<1||month>12)
printf("输入的月份有误,请重新输入!
\n");
if(year<=0)
printf("输入的年份有误,请重新输入!
\n");
if(day<0||day>31)
printf("输入的日期有误,请重新输入!
\n");
}while(year<=0||month<1||month>12||day<0||day>31);
switch(month)//计算各月份的天数
{
case1:
sum=0;break;
case2:
sum=31;break;
case3:
sum=59;break;
case4:
sum=90;break;
case5:
sum=120;break;
case6:
sum=151;break;
case7:
sum=181;break;
case8:
sum=212;break;
case9:
sum=243;break;
case10:
sum=273;break;
case11:
sum=304;break;
case12:
sum=334;break;
default:
printf("dataerror");break;
}
sum=sum+day;//加上某天
if(year%400==0||(year%4==0&&year%100!
=0))//判断是不是闰年
if(month>2)//如果是闰年则判断月份是否大于2
sum++;
printf("%d年%d月%d日是那一年的第%d天!
\n",year,month,day,sum);
}
【程序5】
题目:
输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
#include
intmain()
{
intx,y,z,temp;
printf("请输入三个数:
");
scanf("%d%d%d",&x,&y,&z);
if(x>y)//如果x>y,把x和y对调
{
temp=x;
x=y;
y=temp;
}
if(x>z)//如果x>z,把x和z对调,始终保持x最小
{
temp=x;
x=z;
z=temp;
}
if(y>z)//如果y>z,把y和z对调,
{
temp=x;
x=z;
z=temp;
}
printf("%d<%d<%d\n",x,y,z);
}
【程序8】题目:
输出9*9口诀。
程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
#include
intmain()
{
for(inti=1;i<=9;i++)
{
for(intj=1;j<=i;j++)
printf("%dx%d=%d\t",j,i,i*j);
printf("\n");
}
}
【程序12】
题目:
判断101-200之间有多少个素数,并输出所有素数。
程序分析:
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
#include
#include
intmain()
{
printf("101-200之间的素数有:
");
for(inti=101;i<=200;i++)
{
ints=(int)sqrt(i);
for(intj=2;j<=s;j++)
{
if(i%2==0)
break;
if(j==s)
printf("%d\t",i);
}
}
printf("\n");
return0;
}
【程序20】
题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
第10次落地时,共经过多少米?
第10次反弹多高?
#include
main()
{
floats=100.0,h=s/2;
intn;
for(n=2;n<=10;n++)
{
s=s+2*h;//共进过的米数
h=h/2;//反弹的高度
}
printf("第十次落地时经过的米数%f\n",s);
printf("第十次反弹的高度为:
%f\n",h);
}