本文结合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;
}