内容正文:
专题五 C语言控制语句:循环
一:单选题
1: 以下程序的输出结果是( )
main( )
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if (b>=10) break;
if (b%5==1) { b+=5; continue; } }
printf("%d
",a); }
A.101 B.6 C.4 D.3
【答案】D
【解析】初始时 a = 1,b = 1。第一次迭代,b % 5 == 1 成立,b 变为6,执行 continue。
第二次迭代,a = 2,b 仍为6,不满足 b % 5 == 1,b 不变。第三次迭代前,a 增加到3,b 达到11(因为之前已经增加了5),满足 b >= 10,执行 break。循环结束,a 的最终值是3。
2: 以下程序的循环次数是( )
main()
{
int i=0;
while(i<10)
{
if(i<1) continue;
if(i==5) break;
i++;
}
}
A.死循环,不能确定次数 B.6
C.4 D.1
【答案】A
【解析】初始时 i = 0,进入循环。i < 1 成立,执行 continue,不执行 i++,直接进入下一次迭代。i 仍然是0,再次进入循环,继续执行 continue。这个状态会一直持续,因为 i 永远不会增加,导致一个无限循环。
3:以下程序的输出结果是( )
int x=23;
do{
printf("%2d",x - -);
}while(!x);
A.打印出321 B.打印出23 C.不打印任何内容 D.陷入死循环
【答案】B
【解析】初始时,变量 x 被赋值为23。进入 do-while 循环,这个循环至少执行一次。
printf("%2d", x--); 这行代码首先打印 x 的值为23。判断循环条件为假,打印值为23。
4:下面程序执行后输出sum的值是( )
void main(){
int i,sum;
for(i=0;i<6;i++)
sum+=i;
printf("%d
",sum);
}
A.15 B.14 C.0 D.不确定
【答案】D
【解析】由于原始代码中 sum 没有被初始化,实际上程序的行为是未定义的,输出结果可能是任何值。
5:以下程序的运行结果是 ( )
main( )
{ unsigned int num,k;
num=26;k=1;
do {
k*=num%10;
num/=10;
} while(num);
printf("%d
", k);
}
A.2 B.12 C.60 D.18
【答案】B
【解析】初始时 num = 26,k = 1。第一次循环:k = 1 * (26 % 10) = 1 * 6 = 6,num = 26 / 10 = 2。第二次循环:k = 6 * (2 % 10) = 6 * 2 = 12,num = 2 / 10 = 0(因为整数除法会向下取整)。循环条件 while(num) 不满足,num 为0,循环结束。循环结束后,k 的值是12。
6:下面程序的输出结果是 ( )
int k,j,s;
for(k=2;k<6;k++,k++)
{ s=1;
for(j=k;j<6;j++)
s+=j;}
printf("%d
",s);
A.1 B.9
C.11 D.10
【答案】D
【解析】第一次外循环:k = 2内循环:j 从2累加到5,s 的值变为 1 + 2 + 3 + 4 + 5 = 15
第二次外循环:k = 4(注意,由于 k++ 实际上只执行一次,所以这里 k 应该是3,但由于 k++, k++ 的写法,这里 k 实际上会增加两次,变为4)
内循环:j 从4累加到5,s 的值变为 1 + 4 + 5 = 10
第三次外循环:k = 6(k 再次增加两次,变为6,但由于循环条件 k < 6,循环结束)
由于内循环每次开始时 s 都被重置为1,所以只有最后一次内循环的结果是有效的,即 s = 10。
二:分析题
1.假设value是int类型,下面循环的输出是什么?
for ( value = 36; value > 0; value /= 2)
printf("%3d", value);
【答案】 36 18 9 4 2 1
2:下面的程序各打印什么内容?
a.
#include <stdio.h>
int main(void)
{
int i = 0;
while (++i < 4)
printf("Hi! ");
do
printf("Bye! ");
while (i++ < 8);
return 0;
}
【答案】Hi! Hi! Hi! Hi! Bye! Bye! Bye! Bye!
b.
#include <stdio.h>
int main(void)
{
int i;
char ch;
for (i = 0, ch = 'A'; i < 4; i++, ch += 2 * i)
printf("%c", ch);
return 0;
}
【答案】ACEH
3.下面的程序有点问题,请找出问题所在。
#include <stdio.h>
int main(void)
{ /* 第3行 */
int i, j, list(10); /* 第4行 */
for (i = 1, i <= 10, i++) /* 第6行 */
{ /* 第7行 */
list[i] = 2*i + 3; /* 第8行 */
for (j = 1, j > = i, j++) /* 第9行 */
printf(" %d", list[j]); /* 第10行 */
printf("
"); /* 第11行 */
} /* 第12行 */
【答案】
变量声明问题:
第4行中 int i, j, list(10); 这不是C语言中声明数组的正确方式。在C语言中,应该使用 int list[10]; 来声明一个包含10个整数的数组。
逗号运算符问题:
第6行的 for 循环条件 i = 1, i <= 10, i++ 使用了逗号运算符,但这不是正确的 for 循环语法。正确的语法应该是 for (初始化; 条件; 更新)。
内层 for 循环条件错误:
第9行的内层 for 循环条件 j >= i 应该使用 j < i 或者 j <= i,取决于循环的目的。如果目的是打印从 list[i] 到 list[1] 的所有元素,应该使用 j <= i。此外,内层 for 循环缺少初始化语句。
内层 for 循环语法错误:
第9行的内层 for 循环同样使用了逗号,并且缺少了初始化部分。正确的语法是 for (初始化; 条件; 更新)。
数组索引从1开始:
通常,数组索引从0开始,但这段代码中的数组 list 从 list[1] 开始赋值和打印,这在C语言中是合法的,但不是常规做法。
三:编程题
1:使用嵌套循环,按下面的格式打印字符:
$
$$
$$$
$$$$
$$$$$
【答案】
#include <stdio.h>
int main(void) {
int i, j;
int lines = 5; // 行数
// 外层循环控制行数
for (i = 1; i <= lines; i++) {
// 内层循环控制每行打印的字符数
for (j = 1; j <= i; j++) {
printf("$");
}
printf("
"); // 每行结束后换行
}
return 0;
}
2:鸡兔同笼有30个头,90只脚,求鸡兔各有多少?
【答案】#include <stdio.h>
int main() {
int totalHeads = 30; // 总头数
int totalFeet = 90; // 总脚数
// 设鸡的数量为x,兔子的数量为y
// 根据题目条件,我们可以列出两个方程:
// x + y = totalHeads
// 2x + 4y = totalFeet
// 我们可以从第一个方程解出 x = totalHeads - y
// 然后将这个表达式代入第二个方程解出 y
int rabbits = (totalFeet - 2 * totalHeads) / 2; // 解出兔子的数量
int chickens = totalHeads - rabbits; // 根据兔子的数量解出鸡的数量
printf("鸡的数量是: %d
", chickens);
printf("兔子的数量是: %d
", rabbits);
return 0;
}
3.编程求出3-100之间的所有素数
【答案】
#include <stdio.h>
#include <math.h>
int main() {
int i, j;
int isPrime;
for (i = 3; i <= 100; i += 2) { // 从3开始,以2为步长,这样可以只检查奇数
isPrime = 1; // 假设i是素数
for (j = 3; j <= sqrt(i); j += 2) { // 只需检查到sqrt(i),并且是奇数
if (i % j == 0) { // 如果j能整除i,则i不是素数
isPrime = 0;
break;
}
}
if (isPrime) { // 如果i是素数
printf("%d ", i);
}
}
printf("
");
return 0;
}
学科网(北京)股份有限公司
$$
专题五 C语言控制语句:循环
一:单选题
1: 以下程序的输出结果是( )
main( )
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if (b>=10) break;
if (b%5==1) { b+=5; continue; } }
printf("%d
",a); }
A.101 B.6 C.4 D.3
2: 以下程序的循环次数是( )
main()
{
int i=0;
while(i<10)
{
if(i<1) continue;
if(i==5) break;
i++;
}
}
A.死循环,不能确定次数 B.6
C.4 D.1
3:以下程序的输出结果是( )
int x=23;
do{
printf("%2d",x - -);
}while(!x);
A.打印出321 B.打印出23 C.不打印任何内容 D.陷入死循环
4:下面程序执行后输出sum的值是( )
void main(){
int i,sum;
for(i=0;i<6;i++)
sum+=i;
printf("%d
",sum);
}
A.15 B.14 C.0 D.不确定
5:以下程序的运行结果是 ( )
main( )
{ unsigned int num,k;
num=26;k=1;
do {
k*=num%10;
num/=10;
} while(num);
printf("%d
", k);
}
A.2 B.12 C.60 D.18
6:下面程序的输出结果是 ( )
int k,j,s;
for(k=2;k<6;k++,k++)
{ s=1;
for(j=k;j<6;j++)
s+=j;}
printf("%d
",s);
A.1 B.9
C.11 D.10
二:分析题
1.假设value是int类型,下面循环的输出是什么?
for ( value = 36; value > 0; value /= 2)
printf("%3d", value);
2:下面的程序各打印什么内容?
a.
#include <stdio.h>
int main(void)
{
int i = 0;
while (++i < 4)
printf("Hi! ");
do
printf("Bye! ");
while (i++ < 8);
return 0;
}
b.
#include <stdio.h>
int main(void)
{
int i;
char ch;
for (i = 0, ch = 'A'; i < 4; i++, ch += 2 * i)
printf("%c", ch);
return 0;
}
3.下面的程序有点问题,请找出问题所在。
#include <stdio.h>
int main(void)
{ /* 第3行 */
int i, j, list(10); /* 第4行 */
for (i = 1, i <= 10, i++) /* 第6行 */
{ /* 第7行 */
list[i] = 2*i + 3; /* 第8行 */
for (j = 1, j > = i, j++) /* 第9行 */
printf(" %d", list[j]); /* 第10行 */
printf("
"); /* 第11行 */
} /* 第12行 */
三:编程题
1:使用嵌套循环,按下面的格式打印字符:
$
$$
$$$
$$$$
$$$$$
2:鸡兔同笼有30个头,90只脚,求鸡兔各有多少?
3.编程求出3-100之间的所有素数
学科网(北京)股份有限公司
$$