第三部分 循环结构 ·36·
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】; }
第三部分 循环结构 ·37·
}
22.下列程序判断一个数是否为素数。
#include
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(\}
第三部分 循环结构 ·38·
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
第三部分 循环结构 ·39·
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 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 第四章 数组 4.1 选择题 1. 以下关于数组的描述正确的是( )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是( )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf(\ int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是( )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是( )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 第三部分 循环结构 ·40· 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存 中所占字节数是( )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是( ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。 #include main() { int a[10],i=0; while(i<10) scanf(\ ┇ } A. a+(i++) B. &a[i+1] C. a+i D. &a[++i] 9. 执行下面的程序段后,变量k中的值为( )。 int k=3, s[2]; s[0]=k; k=s[1]*10; A. 不定值 B. 33 C. 30 D. 10 10. 以下程序的输出结果是( ) main() { int i, a[10]; for(i=9;i>=0;i--) a[i]=10-i; printf(\} A. 258 B. 741 C. 852 D. 369 11. 以下程序运行后,输出结果是( )。 main() { int n[5]={0,0,0},i,k=2; for(i=0;i A. 不确定的值 B. 2 C. 1 D. 0 12. 以下程序运行后,输出结果是( )。 main() { int y=18,i=0,j,a[8]; do { a[i]=y%2; i++; y=y/2;