C语言基础练习题(含答案) 下载本文

·36·

while((c=getchar())!='?')putchar(++c);

}

15.对以下程序:

当输入65 14时,其运行结果是【 1 】。 当输入14 63时,其运行结果是【 2 】。 当输入25 125时,其运行结果时【 3 】。 #include main() {int m,n;

scanf(\while(m!=n)

{ while(m>n)m-=n; while(n>m)n-=m; }

printf(\} 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(\

} }

18.鸡问题:100元钱买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,

求100元钱能买公鸡、母鸡、小鸡各多少只? #include main()

{int cocks,hens,chicks; cocks=0;

·37·

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(\【1】; }

【2】; } }

19.爱因斯坦的阶梯问题:设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2

阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好到阶梯顶。问共有多少阶梯。 main()

{int ladders=7;

while(【 1 】)ladders+=14; printf(\}

20.下列程序计算平均成绩并统计90分及以上人数。

main() {int n,m;

float grade,average; average=n=m=【1】; while(【2】)

{ scanf(\if(grade<0)break; n++;

average+=grade; if(grade<90)【3】; m++; }

if(n)printf(\}

21.下列程序计算Fibonacci数列:1,1,2,3,5,8,13……的前40项。

main()

{int I;long f1,f2; 【1】;

for(I=0;I<20;I++)

{ printf(\if(I%2)printf(\f1+=f2; 【2】; }

·38·

}

22.下列程序判断一个数是否为素数。

#include #include main() {int I,k,m;

scanf(\k=sqrt(【1】); for(I=2;I<=k;I++) if(m%I==0)【2】;

if(【3】)printf(\else printf(\}

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(\ } }

24.从键盘上输入两个整数m和n,求其最大公约数。

main()

{int a,b,num1,num2,temp;

scanf(\if(【1】)

{ temp=num1; num1=num2; num2=temp; }

a=num1;b=num2; while(b!=0) { temp=【2】; a=b; b=temp; }

printf(\}

·39·

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

·40·

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.答案:0num2 【2】a%b

3】continue 3】I>=k+1 3】m==n 【【【