引言
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它在编程语言中具有举足轻重的地位。
此文为【C语言必知必会】子系列第五篇,基于进行C语言循环结构的选择题专项练习,结合专题优质题目,带领读者从0开始,深度掌握知识点。
在【C语言你还没卷起来?】系列中,我们学习了顺序结构、选择结构、循环结构等,同时也通过专项练习进行了知识点的巩固和手敲代码的锻炼。
在子系列中,我们将基于PTA教学平台,向C语言学习者提供更优质的题目与更巧妙、精髓的解题思想与方法。
PTA是一个程序设计类实验辅助教学平台,由千名老师共同建设,里面包含了上万道高质量题目,用户量达百万。
在本讲中,将深入讲解循环结构的选择题,在思想上引领读者,带领读者在理论结合实际的基础上更好地学习、吸收、掌握C语言。
接下来,开始我们的循环结构选择题专篇练习。
下列程序段执行后s
的值为( )。
int i=5, s=0;
while(i--)
if (i%2) continue;
else s+=i;
A.15
B.10
C.9
D.6
解题详析:
i
的初始值为 5,s
的初始值为 0。
进入循环,并执行条件判断:i--
将 i
递减为 4,然后判断 i%2
是否为真(非零)。
因为 4%2
的结果为 0,不满足条件,所以执行 else
语句块内的操作。
在 else
语句块中,将 i
的值加到 s
上:s += i
,此时 s
的值变为 4。
按这样的流程走下去 最终s为6
选D
设有程序段
int m=20; while (m=0) m=m++;
则下面描述中正确的是( )。
A.while
循环执行 10 次
B.循环是无限循环
C.循环体语句一次也不执行
D.循环体语句执行一次
解题详析:
1.初始化变量:m
的初始值为 20。
2.进入循环,并执行条件判断:m = 0
是一个赋值表达式,将 m
的值设为 0,并返回赋值操作的结果(即 0)。
3.因为赋值表达式的结果为 0,作为条件判断时被解释为假,所以循环条件不满足。
4.循环体内的语句不会执行。
5.循环结束。
故选C
下面的这个循环的循环次数是( )。
for(int i=0,j=10; i=j=10; i++,j--)
A.语法错误,不能执行
B.无限次
C.10
D.1
解题详析:
int i=0,j=10;相当于被注释
程序无限次执行,答案为B
C语言中while和do-while循环的主要区别是()。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
解题详析:
主要区别:do-while的循环体至少无条件执行一次
故选A
执行以下循环语句时,下列说法正确的是()。
x = -1;
do {
x = x * x;
} while (x == 0);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无限次
D.系统将提示有语法错误
解题详析:
较简单,选A
运行以下程序后,如果从键盘上输入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;
}
解题详析:
较简单的循环判断,选C
下列程序段的输出结果是()。
int main(void)
{
for(int i = 1; i < 6; i ++) {
if( i % 2 != 0) {
printf("#");
continue;
}
printf("*");
}
printf("\n");
return 0;
}
解题详析:
较为简单,判断i%2是否等于0,执行对应的操作。遇到continue则开始下一个循环
下列程序段执行后s值为__。
int i=5, s=0;
while(--i!=0){
if (i%2==1)
continue;
s+=i;
}
A.15
B.9
C.6
D.4
解题详析:
较为简单,4+2=6,选C
要求通过 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);
解题详析:
较为简单,选C
下列程序段中,非死循环的是( )。
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( ; ; )
解题详析:
B,C,D均为死循环,故选A
下面程序段执行后的输出结果是( )。
char a[] = "language", *p;
p = a;
while ( *p != 'u' )
{
printf( "%c", *p - 32 ); p++;
}
A.LANGUAGE
B.language
C.LANG
D.langUAGE
解题详析:
lang-32=LANG
答案选C
当执行以下程序段时,以下答案正确的是?
x=-1;
do {
x=x*x;
} while(!x);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无限次
D.系统将提示有语法错误
解题详析:
do执行一次后x变为1,!1表示假,不执行循环体,故选A
若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是?
for (i=5;i;i--)
for (j=0;j<4;j++)
{......} //内循环体
A.25
B.20
C.24
D.30
解题详析:
循环语句 for (i=5;i;i--)
中,i 的初始值是 5。该循环的条件是 i 不为 0,当 i 不为 0 时,循环会一直执行下去。每次执行完循环体后,i 会递减 1(即 i--
),直到 i 的值为 0,循环终止。
对于每个 i 的值,内循环体都会执行 4 次。
所以总执行次数为 5 * 4 = 20。
故选B
以下程序的功能是:按顺序读入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);
解题详析:
在给定的程序中,每个学生的成绩都会依次读入并累加到 sum
变量中。然而,计算平均分的语句 ave = sum/4.0;
在内层循环外部(第一个循环体的末尾)执行,这意味着在每个学生输入完成绩后,都会计算前面所有学生的平均分。
故选C
阅读下面程序,从给出的4个选项中选出程序的运行结果。
#include
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
解题详析:
3+5+7+9+11+13+15=63
答案选B
当执行以下程序段时
x=-1;
do {
x=x*x;
} while(!x);
A.系统将提示有语法错误
B.循环体将执行一次
C.循环体将执行无限次
D.循环体将执行两次
解题详析:
较为简单,执行一次,选B
有以下程序
int k=5;
while(--k)
printf("%d", k-=3);
程序执行后的输出结果是( )。
A.1
B.2
C.4
D.死循环
解题详析:
k=2的时候,–k变为1,执行printf语句,3-2=1
选A
请问下面哪个选项与程序段中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)
解题详析:
较为简单,选A
假设变量 x 数据类型为 int,且初始值为2,则执行下面代码段后
while(x–);
printf(“%d\n”,x);
程序的输出结果是:( )
A.2
1
0
B.-1
C.1
0
D.死循环
解题详析:
首先,x
的初始值为 2。在 while
循环中,条件表达式 x--
会首先将 x 的值(2)用于表达式计算,然后再将 x 自减 1。因此,循环体会执行一次,此时 x 的值为 1。
接着,循环条件判断表达式 x--
的结果为 1,由于结果为非零,因此继续执行循环体。在循环体中,再次执行 x--
表达式,x 的值变为 0。
然后,循环条件判断表达式 x--
的结果为 0,即为假,因此循环终止。
最后,执行 printf("%d\n",x);
语句,输出 x 的值,即 -1。
故选B
以下程序段运行后,输出结果是:
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
解题详析:
较为简单,答案选A
若j为整型变量,则以下结构中,循环体语句执行的次数是( )。
for(j=2; j<=10; j+=2)
printf(“%d”, j);
A.0
B.2
C.5
D.10
解题详析:
2、4、6、8、10
执行五次,答案选C
假设变量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;
解题详析:
for(b = 1; b <= c; b++) s = s + 1; 等价于s+c
故选B
如下程序的执行结果是
#include
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
解题详析:
for中条件无限制,死循环,选C
下列程序段的功能是
#include
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中的偶数之和
解题详析:
较为简单,答案选D
以下程序段若要使输出值为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
解题详析:
要使s为2,则执行两次循环,两次循环后a变为-3,所以n=-3
选B
以下程序段的输出结果是
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");
}
A.
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3
B.
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2 * 2 = 4 2 * 3 = 6
3 * 3 = 9
C.
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
D.
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
解题详析:
较为简单,选B
从键盘输入的整数中,找出最小值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
解题详析:
只有当输入的整数不等于 0 时,循环才会继续执行。当输入的整数为 0 时,循环结束。
因此答案选C
请读程序:
#include
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
解题详析:
在给定的程序中,使用 for
循环从 1 到 50 遍历变量 i
。在循环体内,将当前值赋给变量 x
。
然后,使用一系列嵌套的 if
条件语句对变量 x
进行多个条件判断。只有满足以下三个条件的整数才会输出:
x%2 == 0
);x%3 == 0
);x%7 == 0
)。根据题目给定的条件,只有一个数符合以上三个条件,即 42。因此,程序的输出结果是 42。
所以,答案是 C. 42。
以下程序段的输出结果是:
#include
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+2+3+4=10
答案选A
以下代码用于计算输入的正整数n的各位数字之和。请选择合适的循环结构填入选择题的空白处。
#include
int main() {
int n, sum = 0;
printf("请输入一个正整数n:");
scanf("%d", &n);
// 选择题开始
______ (n > 0) {
sum += n % 10;
n /= 10;
}
// 选择题结束
printf("各位数字之和为:%d\n", sum);
return 0;
}
A. for
B. while
C. do-while
D. 无法确定
该题较简单,选A。
此文为 【C语言你还没卷起来?】子系列之第五篇 ,通过以题代练的形式带领读者掌握C语言的循环结构,带领读者从0开始,深度掌握知识点。
以题代练对于C语言的学习是十分重要的,专栏将持续提供优质C语言编程题与理论课的学习,带领读者全方位掌握C语言,读者可订阅专栏持续跟进。