110一、单选题1.for语句中的表达式可以部分或全部省略,但两个C不可省略。但当三个表达式均省略后,因缺少条件判断,循环会无限制地执行下去,形成死循环。A)0B)1C);D),2.程序段如下intk=-20;while(k=0)k=k+1;则以下说法中正确的是C。A)while循环执行20次B)循环是无限循环C)循环体语句一次也不执行D)循环体语句执行一次3.程序段如下intk=0;while(k++=2);printf(%d\n,k);则执行结果是D。A)2B)3C)4D)无结果4.在C语言的循环语句for,while,do-while中,用于直接中断循环的语句是C。A)swichB)continueC)breakD)if5.循环语句中的for语句,其一般形式如下:for(表达式1;表达式2;表达式3)语句其中表示循环条件的是B。A)表达式1B)表达式2C)表达式3D)语句6.以下能正确计算1×2×3×…×10的程序段是C。A)do{i=1;s=1;s=s*i;i++;}while(i=10);B)do{i=1;s=0;s=s*i;i++;}while(i=10);C)i=1;s=1;do{s=s*i;i++;}while(i=10);D)i=1;s=0;do{s=s*i;i++;}while(i=10);7.不是无限循环的语句为A。A)for(y=0,x=1;x++y;x=i++)i=x;B)for(;;x++=i);C)while(1){x++;}D)for(i=10;;i--)sum+=i;8.有以下程序段intn=0,p;do{scanf(“%d”,&p);n++;}while(p!=12345&&n3);此处do—while循环的结束条件是D。A)p的值不等于12345并且n的值小于3B)p的值等于12345并且n的值大于等于3C)p的值不等于12345或者n的值小于3D)p的值等于12345或者n的值大于等于39.下面不能连续输出k个星号的循环语句是C。A)for(w=k:w!=0;w--)printf(*);111B)w=k;while(w--!=0)printf(*);w++;C)w=k;do{w--;printf(*);}while(w!=0);D)for(w=k;w;--w)printf(*);10.以下循环的执行次数是C。inti,j;for(i=0,j=1;i=j+1;i+=2,j--)printf(%d\n,i);}A)3B)2C)1D)0二、写程序运行结果1.#includestdio.hvoidmain(){intn=0;while(n++=1)printf(%d,,n);printf(%d\n,n);}答案:1,2,32.#includestdio.hvoidmain(){inti=10,j=0;do{j=j+i;i--;}while(i2);printf(%d\n,j);}答案:523.#includestdio.hvoidmain(){ints=0,k;for(k=5;k=0;k--){switch(k){case1:case5:s++;break;case3:case4:break;112case0:case2:s+=2;break;}}printf(s=%d\n,s);}答案:s=64.#includestdio.hvoidmain(){inty=2,a=1;while(y--!=-1)do{a*=y;a++;}while(y--);printf(%d,%d\n,a,y);}答案:1,-25.#includestdio.hvoidmain(){inta=10,y=0;do{a+=2;y+=a;if(y50)break;}while(a=14);printf(a=%dy=%d\n,a,y);}答案:a=16y=606.#includestdio.hvoidmain(){intx,i;for(i=1,x=1;i=50;i++){if(x=10)break;if(x%2==1){x+=5;continue;}113x-=3;}printf(%d\n,i);}答案:6三、程序填空1.下面程序接受键盘上的输入,直到按↙键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。#includestdio.hvoidmain(){charcx,front='\0';while((【1】)!='\n'){if(cx!='')putchar(cx);if(cx=='')if(【2】)putchar(cx);front=【3】;}}答案:(1)cx=getchar()(2)front!=‘’(3)cx2.一个数如果恰好等于它的因子之和(除自身外),则称该数为“完全数”,例如:6=1+2+3,6就是完全数。下面程序的功能是输出1~1000的自然数中所有的“完全数”。#includestdio.hvoidmain(){intm,n,s;for(m=2;m1000;m++){【1】;for(n=1;n=m/2;n++)if(【2】)s+=n;if(【3】)printf(%d\n,m);}}答案:(1)s=0114(2)m%n==0(3)m==s3.下面程序的功能是从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。#includestdio.hvoidmain(){inti,j,k;printf(\nredwhiteblack\n);for(i=0;i=3;i++)for(【1】;j=5;j++){k=8-i-j;if(【2】)printf(%5d%5d%5d\n,i,j,k);}}答案:(1)j=1(2)k=64.一个球从100m高度自由落下,每次落地后反跳到原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。#includestdio.hvoidmain(){floats=100,h=【1】;intn;for(【2】;n=10;n++){s=s+2*h;h=【3】;}printf(%f\n,s);printf(%f\n,h);}答案:(1)50(2)n=2(3)h/25.求S=a+aa+aaa+…+aa……a之值。其中a是一位数字,a、n由键盘输入。例如:a=2,n=5时,S=2+22+222+2222+22222。#includestdio.hvoidmain(){inta,n,i=1,s=0,t=0;scanf(%d%d,&a,&n);t=【1】;for(i=1;【2】;i++)n个115{s=s+t;t=【3】+a;}printf(%d\n,s);}答案:(1)a(2)i=n(3)t*10四、程序改错1.下面程序的功能是把输入的整数(最多不超过5位)按输入顺序的反方向输出。例如,输入数据是3524,要求输出结果是4253。#includestdio.hvoidmain(){intn,k;/*****错误语句*****/scanf(%d,&n);while(n!=0){k=k*10+n/10;/*****错误语句*****/n=n/10;}printf(%d\n,k);}答案:(1)intn,k=0;(2)k=k*10+n%10;2.下面程序的功能是打印100以内所有个位数为6且能被3整除的数。#includestdio.hvoidmain(){inti,j;for(i=0;i100;i++)/*****错误语句*****/{j=i*10+6;if(j%3==0)continue;/*****错误语句*****/printf(%4d,j);}}答案:(1)for(i=0;i10;i++)(2)j%3!=03.编写程序,利用公式e=1+1/1!+1/2!+1/3!+....+1/n!求出e的近似值,其中n的值由用户输入(用于控制精确度)。#includestdio.hvoidmain(){inti,n;doublek=0,t=1;/*****错误语句*****/116scanf(%lf,&n);for(i=1;i=n;i++){t=t*i;k=k+t;/*****错误语句*****/}printf(%f\n,k);}答案:(1)doublek=1,t=1;(2)k=k+1/t;4.输入m和k,输出大于或等于整数m且紧靠m的k个素数。#includestdio.hvoidmain(){intm,k,i;scanf(%d%d,&m,&k);while(k!=0){i=1;/*****错误语句*****/while(m%i!=0&&i=m/2)i++;if(im/2){k++;/*****错误语句*****/printf(%4d,m);}m++;}}答案:(1)i=2;(2)k--;5.下面程序的功能是:用“梯形法”求522dxx的近似值。#includestdio.hvoidmain(){inti,n;floata,b,s=0,h,s1;scanf(%d,&n);h=(5-2)/n;/*****错误语句*****/a=2.0;for(i=1;i=n;i++){b=a+h;s1=(a*a+b*b)*h/2;s=s+s1;a=b+h;/*****错误语句*****/}printf(%f\n,s);}117答案:(1)h=(float)(5-2)/n;(2)a=a+h;五、编写程序1.编一程序,将2000年到3000年中的所有闰年年份输出并统计出闰年的总年数,要求每10个闰年放在一行输出。#includestdio.hvoidmain(){intyear,k=0;for(year=2000;year=3000;year++){if((year%4==0&&year%100!=0)||year%400==0){k++;printf(%6d,year);if(k%10==0)printf(\n);}}printf(\nrunniandezongnianshushi%d,k);}2.若有如下公式:试根据上述公式编程计算π的近似值(精确到10-6)。#includestdio.h#includemath.hvoidmain(){floatpi,a,b;inti=1;a=0;b=1;while(b=0.000001){b=1/(float)(i*i);a+=b;i++;}pi=sqrt(6*a);printf(%f\n,pi);}3.用0~9之间不同的3个数构成一个3位数,统计输出共有多少种方法?118#includestdio.hvoidmain(){inti=0,j=0,k=0,n=0;for(i=1;i10;i++){for(j=0;j10;j++){if(i==j)continue;for(k=0;k10;k++){if(i==k||j==k)continue;n++;}}}printf(%d,n);}4.找出1~99之间的全部同构数。同构数是这样一组数:它们出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。#includestdio.hvoidmain(){inti,j,k;k=10;for(i=1;i100;i++){if(i==10)k=100;j=i*i;if(j%k==i)printf(%d\t,i);}}5.猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了个。第2天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个。到第10天再想吃时,只剩下一个桃子了。问第1天共摘多少个桃子?。#includestdio.hvoidmain(){intday,x;119x=1;for(day=1;day=9;day++)x=(x+1)*2;printf(diyitianhouzizha