C语言基础练习题(含答案)(3)

更新时间:2023-09-04 12:06:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第三章 循环结构
3.1 选择题
1. 以下程序的输出结果是( )。
main()
{ int n=4;
while (n--)
printf(〞%d〞,--n);
}
A.20 B.31 C.321 D.210
2. 以下程序的输出结果是( )。
main()
{int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);
}
A.10192 B.9876 C.10990    D.101091
3. 当执行以下程序段时。
x=-1;
do
{x=x*x;}
while (!x);
A.循环体将执行一次       B.循环体将执行两次
C.循环体将执行无数多次     D.系统将提示有语法错误
4. 执行以下程序后输出的结果是( )。
main()
{ int y=10;
do{y--;}while(--y);
printf("%d\n",y--);}
A.-1     B.1     C.8     D.0
5. 下面程序的输出结果是( )。
main()
{ int x=3,y=6,a=0;
while (x++!=(y-=1))
{a+=1;
if (y<x) break;
}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}
A.x=4,y=4,a=1 B.x=5,y=5,a=1
C.x=5,y=4,a=3 D.x=5,y=4,a=1
6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是 ( )。
for (i=5;i;i--)
for (j=0;j<4;j++)
{…}
A.20 B.24 C.25 D.30
7. 请读程序:
#include<stdio.h>
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
上面程序的输出结果是( )。
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2
8.若有以下程序段,w和k都是整型变量
w=k;
LB: if(w==0) goto LE;
w--;
printf(〞*〞);
goto LB;
LE:
则不能与上面程序段等价的循环语句是( )。
A. for(w=k;w!=0;w--)
print(〞*〞);
B. w=k;
while(w--!=0)
printf(〞*〞);
w++;
C. w=k;
do {w--;printf(〞*〞);}
while (w!=0);
D.for (w=k;w;--w) printf(〞*〞);
9. 下面程序的输出是( )。
main()
{
char *s=〞12134211〞;
int k,v1=0,v2=0,v3=0,v4=0;
for (k=0;s[k];k++)
switch(s[k])
{
default:v4++;
case 1:v1++;
case 2:v2++;
csse 3:v3++;
}
printf(〞v1=%d,v2=%d,v3=%d,v4=%d\n〞,v1,v2,v3,v4);
}
A.v1=4,v2=2,v3=1,v4=1     B.v1=4,v2=9,v3=3,v4=1
C.v1=5,v2=8,v3=6,v4=1     D.v1=8,v2=8,v3=8,v4=8
10. 有以下程序
#include〞stdio.h〞
int abc(int u,int v );
main()
{
int c,a=24,b=16;
c=abc(a,b);
printf(〞%d\n〞,c);
}
int abc (int u,int v)
{
int w;
while (v)
{w=u%v; u=v; v=w;}
return u;
}
输出结果是( )。
A.6 B.7 C
.8 D.9
11.在下列选项中,没有构成死循环的程序段是( )。
A.int i=100;
while (1)
{
i=i%100+1;
if(i>100) break;
}
B. for ( ; ;);
C.int k

=1000;
do {++k;}while (k>=10000);
D.int s=36;
while (s) ;
--s;
12.若输入B,以下程序的运行结果为( )。
main()
{char grade;scanf("%c",&grade);
switch(grade)
{case'A':printf(">=85.");
case'B':
case'C':printf(">=60.");
case'D':printf("<60.");
default:printf("error.");
}
}
A.>=85. B.>=60. C.>=60.<60.error. D.error.
13.列程序运行的情况是( )。
main()
{ int i=1,sum=0;
while(i<10)sum=sum+1;i++;
printf("i=%d,sum=%d",i,sum);
}
A.i=10,sum=9 B.i=9,sum=9 C.i=2,sum=1 D.运行出现错误
14.有以下语句:
i=1;
for(;i<=100;i++) sum+=i;
与以上语句序列不等价的有( )。
A. for(i=1; ;i++) {sum+=i;if(i==100)break;}
B. for(i=1;i<=100;){sum+=i;i++;}
C. i=1;for(;i<=100;)sum+=i;
D. i=1;for(; ;){sum+=i;if(i==100)break;i++;}
15.下面程序的运行结果为( )。
main()
{ int n;
for(n=1;n<=10;n++)
{ if(n%3==0)continue;
printf("%d",n);
}
}
A.12457810 B.369 C.12 D.12345678910
16.下面程序的运行结果是( )。
main()
{int x,y,z;
x=0;y=z=-1;
x+=-z---y;
printf("x=%d\n",x);
}
A.x=4 B.x=0 C.x=2 D.x=3
17.标有/**/的语句的执行次数是( )。
int y,i;
for(i=0;i<20;i++)
{if(i%2==0)continue;
y+=i;/**/
}
A.20 B.19 C.10 D.9
18.在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式。
A.只能用逻辑表达式 B.只能用关系表达式
C.只能用逻辑表达式或关系表达式 D.可用任意表达式
19.在以下给出的表达式中,与do-while(E)语句中的(E)不等价的表达式是( )。
A.(!E==0) B.(E>0||E<0) C.(E==0) D.(E!=0)
20.假定所有变量均已正确定义,下列程序段运行后x的值为( )。
k1=1;k2=2; k3=3; x=15; if(!k1)x--;else if(k2) if(k3)x=4;else x=3;
A.14 B.4 C.15 D.3
21.执行下面语句的输出为( )。
int i=-1;
if(i<=0)printf(“* * * *\n”);
else printf(“% % % % \n”);
A.* * * * B.% % % % C.% % % % c D.有错,执行不正确
22.下列程序的输出是( )。
#include<stdio.h>
main()
{ int i;char c;
for(i=0;i<=5;i++)
{c=getchar();putchar(c);
}
}
程序执行时从第一列开始输入以下数据,<CR>代表换行符。
u<CR>
w<CR>
xsta<CR>
A.uwxsta B.u C.u D.u
w w w
x xs xsta
23.下列程序的输出为( )。
#include"stdio.h"
main()
{ int i,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j-0;j<=3;j++)
{if(j%2)continue;x++; }
x++;
}
printf("x=%d\n
",x);
}
A.x=4 B.x=8 C.x=6 D.x=12
24.下列程序的输出为( )。
#include<stdio.h>
main()
{int i,j,k=0,m=0

;
for(i=0;i<2;i++)
{ for(j=0;j<3;j++)k++;k-=j;}
m=i+j;
printf("k=%d,m=%d\n",k,m);
}
A.k=0,m=3 B.k=0,m=5 C.k=1,m=3 D.k=1,m=5
25.在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为( )。
A.0 B.1 C.true D.非0
26. 在C语言中,为了结束由do-while语句构成的循环,while后一对圆括号中表达式的值应为( )。
A.0 B.1 C.true D.非0
27.下列程序的输出为( )。
#include<stdio.h>
main()
{ int k=0;char c='A';
do
{switch(c++)
{ case'A':k++;break;
case'B':k--;
case'C':k+=2;break;
case'D':k=k%2;continue;
case'E':k=k*10;break;
default:k=k/3;
}
k++;
}
while(c<'G');
printf("%d\n",k);
}
A.k=3 B.k=4 C.k=2 D.k=0
28.C语言的if语句嵌套时,if与else的配对关系是( )。
A. 每个else总是与它上面的最近的if配对
B. 每个else总是与最外的if配对
C. 每个else与if的配对是任意的
D. 每个else总是与它上面的if配对
29.下列程序的输出为( )。
#include<stdio.h>
main()
{int i=0,j=0,a=6;
if((++i>0)||(++j>0))a++;
printf("i=%d,j=%d,a=%d\n",i,j,a);
}
A.i=0,j=0,a=6 B.i=1,j=1,a=7 C.i=1,j=0,a=7 D.i=0,j=1,a=7
30.下列程序段的输出结果为( )。
main()
{int x=3;
do
{ printf("%3d",x-=2);}
while(!(--x));}
A.1 B.3 0 C.1 -2 D.死循环
3.2 填空题:
1. 当输入19,2,21时下列程序运行的结果是_________。
main()
{int a,b,c,max;
printf("please scan three number a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<b)max=b;
if(max<c)max=c;
printf("max is:%d",max);
}
2. 若输入字母C,程序输出结果为【1】;若输入字符*,程序将【2】。
#include<stdio.h>
main()
{char c1,c2;
c1=getchar();
while(c1<97||c1>122)c1=getchar();
c2=c1-32;
printf("%c,%c\n",c1,c2);
}
3. 以下程序运行的结果为________。
main()
{ int a,b,c,x,y,z;
a=10;b=2;
c=!(a%b);x=!(a/b);
y=(a<b)&&(b>=0);
z=(a<b)||(b>=0);
printf("%d,%d,%d,%d\n",c,x,y,z);
}
4. 若输入4,程序运行结果为【 1 】,若输入-4,运行结果为【 2 】,若输入10,运行结果为【 3 】.
main()
{ int x,y;
scanf("%d",&x);
if(x<1)
{ y=x;
printf("x=%d,y=x=%d\n",x,y);
}
else if(x<10)
{ y=2*x-1;
printf("x=%d,y=2*x-1=%d\n",x,y);
}
else
{ y=3*x-11;
printf("x=%d,y=3*x-11=%d\n",x,y);
}
}
5.以下程序运行的结果________。
main()
{int i=1,sum=0;
loop:if(i<=10)
{sum+=i;
i++;
goto loop;
}
printf("sum=%d\n",sum);
}
6.以下程序运行的结果________。
main()
{ int x=2,y,z;
x*=3+1;
printf("%d,",x++);
x+=y=z=5;
printf("%d,",x);
x=y==z;
printf("%d\n",x);

}
7.以下程序运行的结果________。
#include<stdio.h>
#include<math.h>
main()
{int i,k,m,n=0;
for(m=1;m<=10;m+=2)
{ if(n%10==0)printf

("\n");
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>k)
{printf("%2d",m);
n++;
}
}
}
8.如果输入‘1’,‘2’,‘3’,‘4’,程序运行输出的是________。
#include<stdio.h>
main()
{char c;
int i,k;
k=0;
for(i=0;i<4;i++)
{while(1)
{ c=getchar();if(c>='0'&&c<='9')break;}
k=k*10+c-'0';
}
printf("k=%d\n",k);
}
9.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为________。
#include <stdio.h>
main()
{int v1=0,v2=0;
char ch;
while ((ch=getchar())!='#')
switch(ch)
{case 'a':
case 'h':
default: v1++;
case '0':v2++;
}
printf("%d,%d\n",v1,v2);
}
10.程序运行结果是_________。
#include<stdio.h>
main()
{int i;
for(i=1;i+1;i++)
{ if(i>4){printf("%d\t",i++);break;}
printf("%d\t",i++);
}
}
11. 以下程序运行的结果是_________。
#include<stdio.h>
main()
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=20)break;
if(b%3==1)
{ b+=3;
continue;
}
b-=5;
}
printf("%d\n",a);
}
12.以下程序运行的结果是________。
main()
{int i=1;
while(i<10)
if(++i%3!=1)continue;
else printf("%d",i);
}
13.程序运行的结果是________。
main()
{int n=0;
while(n++<=1)
printf("%d\t",n);
printf("%d\n",n);
}
14.此程序运行时,输入qwert?程序的运行结果是_________。
#include<stdio.h>
main()
{char c;
while((c=getchar())!='?')putchar(++c);
}
15.对以下程序:
当输入65 14时,其运行结果是【 1 】。
当输入14 63时,其运行结果是【 2 】。
当输入25 125时,其运行结果时【 3 】。
#include<stdio.h>
main()
{int m,n;
scanf("%d%d",&m,&n);
while(m!=n)
{ while(m>n)m-=n;
while(n>m)n-=m;
}
printf("m=%d\n",m);
}
16.在执行以下程序时,为了使输出结果为t=4,则给a和b输入的值应满足的条件是_______。
main()
{int s,t,a,b;
scanf(〞%d,%d〞,&a,&b);
s=1; t=1;
if(a>0) s=s+1;
if(a>b) t=s+t;
else if (a==b) t=5;
else t=2*s;
printf(〞t=%d\n〞,t);
}
17.求出1000以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括1,不包括数本身),则称该数为“完全数”。如:6的因子是1,2,3而6=1+2+3,则6是个“完数”)。
main()
{int i,a,m;
for(i=1;i<1000;i++)
{for(m=0,a=1;a<=i/2;a++)
if(!(i%a)) 【1 】;
if【2】)printf("%4d",i);
}
}
18.鸡问题:100元钱买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,求100元钱能买公鸡、母鸡、小鸡各多少只?
#include<stdio.h>
main()
{int cocks,hens,chicks;
cocks=0;
while(cocks<=19)
{ hens=0;
while(hens<=33)
{ chicks=100.0-cocks-hens;
if(5.0*cocks+3.0*hens+chicks/3.0=
=100.0)
printf("%d,%d,%d\n",cocks,hens,chicks);
【1】;
}
【2】;
}
}
19.爱因斯坦的阶梯问题:设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,

最后余5阶;只有每步跨7阶时,正好到阶梯顶。问共有多少阶梯。
main()
{int ladders=7;
while(【 1 】)ladders+=14;
printf("%d\n",ladders);
}
20.下列程序计算平均成绩并统计90分及以上人数。
main()
{int n,m;
float grade,average;
average=n=m=【1】;
while(【2】)
{ scanf("%f",&grade);
if(grade<0)break;
n++;
average+=grade;
if(grade<90)【3】;
m++;
}
if(n)printf("%.2f%d\n",average/n,m);
}
21.下列程序计算Fibonacci数列:1,1,2,3,5,8,13……的前40项。
main()
{int I;long f1,f2;
【1】;
for(I=0;I<20;I++)
{ printf("%12ld%12ld",f1,f2);
if(I%2)printf("\n");
f1+=f2;
【2】;
}
}
22.下列程序判断一个数是否为素数。
#include<stdio.h>
#include<math.h>
main()
{int I,k,m;
scanf("%d",&m);
k=sqrt(【1】);
for(I=2;I<=k;I++)
if(m%I==0)【2】;
if(【3】)printf("%dyes\n",m);
else printf("%dno\n",m);
}
23. 求100~499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。
main()
{int I,j,k,m,n;
for(I=1;【1】;I++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{【2】;
n=I*I*I+j*j*j+k*k*k;
if(【3】)
printf("%d",m);
}
}
24.从键盘上输入两个整数m和n,求其最大公约数。
main()
{int a,b,num1,num2,temp;
scanf("%d,%d",&num1,&num2);
if(【1】)
{ temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)
{ temp=【2】;
a=b;
b=temp;
}
printf("%d,%d",a,num1*num2/a);
}
3.3 答案及部分解题分析
一.选择题答案
1.A 2.D 3.A 4.D 5.D 6.A
7.A 8.C 9.D 10.C 11.C 12.C
13.D 14C 15.A 16.C 17.C 18.D
19.C 20.B 21.A 22.C 23.B 24.B
25.A 26.A 27.B 28.A 29.C 30.C
1. 答案:A
解析:此题中判断while后面的条件时,先使用n的值再n--,而打印时打印的是n减1
后的值。所以第一次循环,n=4,执行完后n=2,打印出2;第二次循环,n=2, 经过n—和—n,n变成了0,打印出0;第三次循环时while后面的条件不成立(n=0),所以循环结束。故输出为20。
2. 答案:D
解析:第一次循环时打印的x和y的值都是10,然后x通过x—后变成9,因此第二次循环时x=9, 而“y=++i”执行完后,y变成1,所以第二次循环时打印的x和y的值是9和1 ,然后x—变成8; 第三次循环时,x>8条件不成立,循环结束。故D为正确答案。
3. 答案:A
解析:对于一个不为0的数,!x即为0,故对于x
=-1,while后条件不成立,但是do循环体是先执行的,故等判断条件时,循环体已执行了一次。
4. 答案:D
解析:此题是一个do-while循环,当y值为1时,while后的条件--y变成0,从而循环结束,这时打印出0,然后y--变成-1。故D为正确答案。
5. 答案:D

析:此题中循环进行了1次,但判断了2次,第一次x加1变成4,y减1变成5,a加1变成1;第2次while后面的条件不成立,因为!=的左边先使用x的值4来判断,右边表达式的值为4,即y由5变成4,判断结束后4变成5,循环结束。故D为正确答案。
6. 答案:A
解析:此题中外层for要进行5次,内层for循环要进行4次,所以共进行4*5=20次循环。
二.填空题答案
1.答案:21
2.答案:【1】c C 【2】等待继续输入,直到输入小写字母。
3.答案:1,0,0,1
4.答案:【1】x=4,y=2*x-1=7 【2】x=-4,y=x=-4 【3】x=10,y=3*x-11=19
5.答案:55
6.答案:8,14,1
7.答案:1 3 5 7
8.答案:1234
9.答案:5,5
10.答案:1 3 5
11.答案:8
12.答案:4 7 10
13.答案:1 2 3
14.答案:rxfsu
15.答案:【1】m=1 【2】m=7 【3】m=25
16.答案:0<a<b
17.答案:【1】m=m+a 【2】m==i
18.答案:【1】hens++ 【2】cocks++
19.答案:【1】ladders/3!=2||ladders/5!=4||ladders/6!=5
20.答案:【1】0 【2】1 【3】continue
21.答案:【1】f1=1;f2=1 【2】f2+=f1
22.答案:【1
】m 【2】break 【3】I>=k+1
23.答案:【1】I<=4 【2】m=I*1000+j*100+k*10 【3】m==n
24.答案:【1】num1>num2 【2】a%b

本文来源:https://www.bwwdw.com/article/207i.html

Top