本文结合PTA专项练习带领读者掌握循环结构,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
选择题1
下列程序段执行后s
的值为( )。
int i=5, s=0; while(i--) if (i%2) continue; else s+=i;
A.15
B.10
C.9
D.6
选择题2
下列程序段执行后s
值为__。
int i=5, s=0; while(i--) if (i%2) continue; else s+=i;
A.15
B.10
C.9
D.6
选择题3
设有程序段
int m=20; while (m=0) m=m++;
则下面描述中正确的是( )。
A.while
循环执行 10 次
B.循环是无限循环
C.循环体语句一次也不执行
D.循环体语句执行一次
选择题4
下面的这个循环的循环次数是( )。
for(int i=0,j=10; i=j=10; i++,j--)
A.语法错误,不能执行
B.无限次
C.10
D.1
选择题5
C语言中while和do-while循环的主要区别是()。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
选择题6
执行以下循环语句时,下列说法正确的是()。
x = -1; do { x = x * x; } while (x == 0);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无限次
D.系统将提示有语法错误
选择题7
运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为()。
int main(void) { int m, n; printf("Enter m,n;"); scanf("%d%d", &m,&n); while (m != n) { while (m > n) m = m - n; while (n > m) n = n - m; } printf("m=%d\n",m); return 0; }
A.m=3
B.m=2
C.m=1
D.m=0
选择题8
下列程序段的输出结果是()。
int main(void) { for(int i = 1; i < 6; i ++) { if( i % 2 != 0) { printf("#"); continue; } printf("*"); } printf("\n"); return 0; }
A.#*#*#
B.#####
C.*****
D.*#*#*
选择题9
下列程序段执行后s值为__。
int i=5, s=0; while(--i!=0){ if (i%2==1) continue; s+=i; }
A.15
B.9
C.6
D.4
选择题10
要求通过 while 循环不断输出字符,当读入字母 N 时结束循环。若变量已正确定义,下列程序段正确的是( )。
A.
while ((ch = getchar()) == 'N') printf("%c", ch);
B.
while (ch = getchar() == 'N') printf("%c", ch);
C.
while ( (ch = getchar( )) != 'N') printf("%c", ch);
D.
while (ch = getchar() != 'N') printf("%c", ch);
选择题11
下列程序段中,非死循环的是( )。
A.
int i=100; while(1) { i=i%100+1; if(i>=100) break; }
B.
int k=0; do{ ++k; }while(k>=0);
C.
int s=10; while(s) s++;
D.
for( ; ; )
选择题12
下面程序段执行后的输出结果是( )。
char a[] = "language", *p; p = a; while ( *p != 'u' ) { printf( "%c", *p - 32 ); p++; }
A.LANGUAGE
B.language
C.LANG
D.langUAGE
选择题13
当执行以下程序段时,以下答案正确的是?
x=-1; do { x=x*x; } while(!x);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无限次
D.系统将提示有语法错误
选择题14
若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是?
for (i=5;i;i--) for (j=0;j<4;j++) {......} //内循环体
A.25
B.20
C.24
D.30
选择题15
以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算每位学生的平均分并输出,但运行后结果不正确,调试中发现有一条语句出现的位置不正确。这条语句是:
int main(void) { int n,k; float score, sum, ave; sum=0.0; for(n=1; n<=10; n++) { for(k=1; k<=4; k++) { scanf("%f",&score); sum+=score; } ave=sum/4.0; printf("NO%d:%f\n",n,ave); } return 0; }
A.sum=0.0;
B.sum+=score;
C.ave=sum/4.0;
D.printf(“NO%d:%f\n”,n,ave);
选择题16
阅读下面程序,从给出的4个选项中选出程序的运行结果。
#include <stdio.h> int main() { int k = 1, m = 0; do{ k += 2; m += k; if (m > 50) break; } while (1); printf ("sum=%d\n", m); return 0; }
A.m=48
B.sum=63
C.sum=48
D.m=63
选择题17
当执行以下程序段时
x=-1; do { x=x*x; } while(!x);
A.系统将提示有语法错误
B.循环体将执行一次
C.循环体将执行无限次
D.循环体将执行两次
选择题18
有以下程序
int k=5; while(--k) printf("%d", k-=3);
程序执行后的输出结果是( )。
A.1
B.2
C.4
D.死循环
选择题19
请问下面哪个选项与程序段中while(x)含义一样?
int x,sum=0; scanf("%d",&x); while(x) sum+=x;
A.while(x!=0)
B.while(x>0)
C.while(x<>0)
D.while(x==0)
选择题20
假设变量 x 数据类型为 int,且初始值为2,则执行下面代码段后
while(x–);
printf(“%d\n”,x);
程序的输出结果是:( )
A.
2
1
0
B.-1
C.1
0
D.死循环
选择题21
以下程序段运行后,输出结果是:
int x = 5; while (x > 0) { printf("%d ", x); x /= 2; } printf("%d ", x);
A.5 2 1 0
B.5 2 1
C.5 2.5 1.25 0.625
D.5 2.5 1 0
选择题22
若j为整型变量,则以下结构中,循环体语句执行的次数是( )。
for(j=2; j<=10; j+=2) printf(“%d”, j);
A.0
B.2
C.5
D.10
选择题23
假设变量s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0),则与以下程序段功能等价的赋值语句是()。
s = a; for(b = 1; b <= c; b++) s = s + 1;
A.s = a + b;
B.s = a + c;
C.s = s + c;
D.s = b + c;
选择题24
如下程序的执行结果是
#include <stdio.h> int main (void) { int i, sum = 0; for ( i = 1; i <= 3; sum ++ ) sum += i ; printf ("%d\n", sum); return 0; }
A.6
B.3
C.死循环
D.0
选择题25
下列程序段的功能是
#include <stdio.h> int main (void) { int i, s = 0; for (i = 1; i < 10; i += 2) s += i + 1; printf("%d\n", s); return 0; }
A.自然数1~9的累加和
B.自然数1~10的累加和
C.自然数1~9中的奇数之和
D.自然数1~10中的偶数之和
选择题26
以下程序段若要使输出值为2,则应该从键盘给n输入的值是
int s = 0, a = 1, n; scanf("%d", &n); do { s += 1; a = a - 2; } while (a != n); printf("%d\n", s);
A.-1
B.-3
C.-5
D.0
选择题27
以下程序段的输出结果是
int i, j; for (i = 1; i < 4; i++) { for (j = i; j < 4; j++) printf("%d * %d = %d ", i, j, i * j); printf("\n"); }
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2 * 2 = 4 2 * 3 = 6
3 * 3 = 9
选择题28
从键盘输入的整数中,找出最小值min,输入0时结束。请在 1 处填写正确语句。
#include"stdio.h" main() { int min=0,a; do{ scanf("%d",&a); if(min>a)min=a; }while(__1__); printf("%d",min); }
A.a==0
B.a>0&&a<0
C.a !=0
D.a=0
选择题29
请读程序:
#include<stdio.h> int main() { int x,i; for(i=1;i<=50;i++) { x=i; if(x%2==0) if(x%3==0) if(x%7==0) printf("%d",i); } return 0; }
则上面程序的输出结果是:
A.28
B.27
C.42
D.41
选择题30
以下程序段的输出结果是:
#include<stdio.h> int main() { int num = 0, s = 0; while(num <= 3){ num ++; s += num; } printf("%d",s); return 0; }
A.10
B.6
C.3
D.1
填空题1
一群猴子摘了一堆香蕉,它们决定每天吃剩余香蕉的一半,其他留到第二天再吃,可每次吃完后,总有个贪心的小猴会偷偷再吃掉一根香蕉,猴子们每天都按照这种方式吃着香蕉,到第十天时,大家发现只剩下最后一根香蕉了,请问猴子们一共摘了多少根香蕉?
程序写在这里。下面的空分值是3分。 例如: #include <stdio.h> int main() { int x=1,i; for(i=1;i<=9;i++) x=(x+1)*2; printf("%d",x); return 0; }
填空题2
计算并输出一个非零整数序列(序列非空)中偶数的平均值。所有输入数据用空格隔开,用0结束输入。输出数据保留2位小数。
#include <stdio.h> int main() { int number; int sum,n; double average; n = 0; sum = 0; scanf("%d",&number); while(number!=0){ if(number%2 == 0){ sum += number; n ++; } scanf("%d",&number); } average=sum/n; printf("%.2lf\n",average); return 0; }
填空题3
求100-999之间的水仙花数之和(水仙花数 是指一个三位数的各位数字的立方和是这个数本身,如:153=13+53+3^3)。。
#include <stdio.h> int main() { int d1,d2,d3; int n; int sum; sum = 0; for(d1=1;d1<=9;d1++){ for(d2=0;d2<=9;d2++){ for(d3=0;d3<=9;d3++){ n = d1*100 + d2*10 + d3; if(n==d1*d1*d1+d2*d2*d2+d3*d3*d3){ sum += n; } } } } printf("%d\n",sum); return 0; }
填空题4
计算1+3+5+7+ …… +N的值,N为奇数,且 1<=N<=10001。
#include <stdio.h> int main() { int N; int sum; int step; int number; scanf("%d",&N); sum=0; step = 2; for(number = 1;number<=N; number+=step ) { sum += number; } printf("%d\n",sum); return 0; }
填空题5
输入一个考试成绩的序列,以-1为结束标记。成绩均为整数,且在0到100之间。序列长度在1到1000之间。计算并输出最高、最低和平均成绩。
输入举例:
10 20 30 40 50 -1
输出举例:
50 10 30.00
#include <stdio.h> int main() { int score; //分数 int n; //已经输入的数据的数目 int maxx,minn; double average; maxx = 0;//假设最高分为0 minn = 100;//假设最低分为100 average = 0;//假设平均分为0 n=0; scanf("%d",&score); while(score != -1){ if(score>maxx){ maxx = score; } if(score<minn){ minn = score; } average =average+score; n++; scanf("%d",&score); } printf("%d %d %.2lf\n", maxx,minn,average); return 0; }
填空题6
输入正整数n,计算s = 1/1! + 1/2! + 1/3! + ……+ 1/n!的值。
#include <stdio.h> int main( void) { int j, k, n; double f, s; scanf("%d", &n); s=0.0; for (k=1; k<=n; k++){ f=1.0; for(j=1; j<=k; j++) f*=j; s=s+1.0/f; } printf("sum=%f\n", s); return 0; }