内容正文:
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。
本专辑第13卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】:
(七)do……while循环
湖南省普通高等学校对口招生考试 计算机应用类
《C语言程序设计》考点双析卷 第13卷
do……while循环 老师讲解卷
时间:45分钟 总分:100分
班级_______ 姓名_______ 学号_______ 成绩_______
一、单项选择题(本大题共20小题,每题3分,共60分)
1.以下程序的运行结果是 ( )
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
2.以下程序的输出结果是( )
int x=23;
do{
printf("%2d",x - -);
}while(!x);
A.打印出321 B.打印出23 C.不打印任何内容 D.陷入死循环
3.在 do - while 循环中使用 continue 语句时,需要注意( )
A.不能使用 continue 语句
B.必须手动更新循环变量,否则可能导致无限循环
C.continue 语句会终止整个 do - while 循环
D.continue 语句只能在 do - while 循环的开头使用
4.以下 do - while 循环代码,若输入 -5,输出结果是( )
int num;
scanf("%d", &num);
do {
num++;
printf("%d ", num);
} while (num < 0);
A.-4 -3 -2 -1 0 B.-5 -4 -3 -2 -1 C.-4 D.无输出
5.当执行以下程序段时( )
x=-1;
do ( x=x*x; }while( !x);
A.循环体将执行一次 B.循环体将执行两次
C.循环体将执行无限次 D.系统将提示有语法错误
6.下面哪个循环语句可以在循环开始前先执行一次循环体?( )
A.while循环 B.for循环 C.do-while循环 D.continue语句
7.已知x = -5,执行下面程序段后y的值为( )
y = 3;
if(x >= 0)
y = x > 0 ? 1 : 0;
else
y = -2;
int x=-3;
do {
x=x*x;
} while (!x);
A.-1 B.1 C.-2 D.0
8.以下程序的输出结果是( )
#include <stdio.h>
int main() {
int a=4, b=11;
do {
b-=a;
++a;
}while(- -b<0);
printf("a=%d,b=%d
", a, b);
}
A.a=5,b=11 B.a=2,b=11 C.a=5,b=7 D.a=2,b=9
9.若有定义语句int k=-3,j=4;,则以下循环体的执行次数是( )
do {
j += ++k;
}
while (!k == 0);
A.0次 B.1次 C.2次 D.3次
10.以下代码段的输出结果是( )
int i = 1;
do {
printf("%d ", i);
i *= 2;
} while (i < 10);
A.1 2 4 8 B.1 2 4 8 16 C.1 D.无输出
11.以下代码的输出结果是( )
int i = 0;
do {
printf("%d ", i);
i++;
} while (i < 3);
A.0 1 2 B.0 1 2 3 C.1 2 3 D.无输出
12.以下关于 while、do…while、for 循环语句的说法,正确的是( )
A.while 循环至少会执行一次循环体
B.do…while 循环的条件判断在循环体执行之后
C.for 循环不能用于不确定次数的循环
D.do…while 循环和 while 循环功能完全相同
13.以下代码的功能是( )
int num, sum = 0;
do {
scanf("%d", &num);
sum += num;
} while (num != 0);
printf("%d", sum);
A.累加所有输入的数 B.累加正数直到输入0
C.累加非零数 D.累加输入的第一个数
14.以下代码的输出结果是( )
int i = 0;
while (i < 2) {
int j = 0;
do {
printf("%d %d
", i, j);
j++;
} while (j < 2);
i++;
}
A.0 0
0 1
1 0
1 1
B.0 0
1 0
0 1
1 1
C.0 0
0 1
D.0 0
1 1
15.以下代码段的循环次数是( )
int i=10;
do { i--; } while(i>5);
A.无限循环 B.7次 C.6次 D.5次
16.以下代码的输出是( )
int i=0, sum=1;
do { sum += i++; } while(i<5);
printf("%d", sum);
A.11 B.10 C.15 D.6
17.以下代码的输出是( )
int i=3;
do {
printf("%d", i--);
} while(i>0);
A.321 B.3210 C.32 D.3
18.以下代码的输出结果是( )
int i = 1;
do {
printf("%d", i);
i *= 2;
} while(i < 5);
A.1 B.12 C.124 D.1248
19.C 语言中 while 和 do-while 循环的主要区别是( )
A.do-while 的循环体至少无条件执行一次
B.while 的循环控制条件比 do-while 的循环控制条件严格
C.do-while 允许从外部转到循环体内
D.do-while 的循环体不能是复合语句
20.在C语言中,while 循环和 do-while 循环的主要区别在于( )
A.while 循环的循环体可能一次都不执行
B.do-while 循环的循环体至少执行一次
C.while 循环的条件判断在循环体执行之前
D.do-while 循环的条件判断在循环体执行之后
二、程序设计题(本大题共4小题,每题10分,共40分)
21.输入若干个字符,以‘*’作为结束符。
22.输入一个整数,判断其是否为回文数。(首尾对应相同的整数,比如12321,1221,121,13431,即左边第一位等于右边第一位,左边第二位等于右边第二位,……)
23.编写一个程序,使用 do - while 循环判断一个整数是否是回文数(正读和反读都一样的数)。
24.编写一个程序,使用 do - while 循环计算用户输入的一系列正数的乘积,当输入负数时停止输入。
试卷第6页,共6页
试卷第5页,共6页
学科网(北京)股份有限公司
$
编写说明: 湖南省普通高等学校对口招生考试-计算机应用类《C语言程序设计》考点双析卷专辑,依据省教育厅《湖南省普通高等学校对口招生考试基本要求和考试大纲》编写。“考点双析卷”即围绕一个考点,一份是老师的讲解卷一份是学生的练习卷,助力师生构建 “讲练结合”的学习闭环,特别适用于湖南省普通高等学校对口招生考试第一轮高考复习教学。
本专辑第13卷精准对标湖南省考纲,考试内容及范围【C语言程序设计知识】:
(七)do……while循环
湖南省普通高等学校对口招生考试 计算机应用类
《C语言程序设计》考点双析卷 第13卷
do……while循环 老师讲解卷
时间:45分钟 总分:100分
班级_______ 姓名_______ 学号_______ 成绩_______
一、单项选择题(本大题共20小题,每题3分,共60分)
1.以下程序的运行结果是 ( )
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。
2.以下程序的输出结果是( )
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。
3.在 do - while 循环中使用 continue 语句时,需要注意( )
A.不能使用 continue 语句
B.必须手动更新循环变量,否则可能导致无限循环
C.continue 语句会终止整个 do - while 循环
D.continue 语句只能在 do - while 循环的开头使用
【答案】B
【详解】在do-while循环中使用continue语句时,程序会跳过本次循环剩余的代码,直接进入下一次循环的条件判断。但需注意:循环变量的更新通常写在循环体内,如果continue跳过了更新语句,可能导致循环变量不变,从而引发无限循环。因此,使用continue时必须确保循环变量能被正确更新。即必须手动更新循环变量,否则可能导致无限循环。
4.以下 do - while 循环代码,若输入 -5,输出结果是( )
int num;
scanf("%d", &num);
do {
num++;
printf("%d ", num);
} while (num < 0);
A.-4 -3 -2 -1 0 B.-5 -4 -3 -2 -1 C.-4 D.无输出
【答案】A
5.当执行以下程序段时( )
x=-1;
do ( x=x*x; }while( !x);
A.循环体将执行一次 B.循环体将执行两次
C.循环体将执行无限次 D.系统将提示有语法错误
【答案】A
【详解】do……while循环会在判断前先执行以此循环体,之后进行判断 x=x*x ,则x的值是1为真,!x为假,循环结束。
6.下面哪个循环语句可以在循环开始前先执行一次循环体?( )
A.while循环 B.for循环 C.do-while循环 D.continue语句
【答案】C
【详解】do-while循环会先执行一次循环体,然后再判断条件是否满足。
7.已知x = -5,执行下面程序段后y的值为( )
y = 3;
if(x >= 0)
y = x > 0 ? 1 : 0;
else
y = -2;
int x=-3;
do {
x=x*x;
} while (!x);
A.-1 B.1 C.-2 D.0
【答案】C
【详解】y = 3; 初始化y为3。if(x >= 0) 检查x是否大于或等于0,因为x = -5,所以不满足条件,跳过if块。
执行else块,y = -2; 将y设置为-2。int x=-3; 这行代码在逻辑上是多余的,因为它声明了一个新的局部变量x,但这个新的x没有在后续代码中使用。do { x=x*x; } while (!x); 进入do-while循环,由于x已经是-5,所以循环体执行一次,x变为25,但这个改变不影响y的值。循环条件!x(x不等于0)为真,因为x现在是25,所以循环体只执行一次。
由于y的值在else块中被设置为-2,并且在之后的代码中没有对y的值进行修改,所以最终y的值是-2。
8.以下程序的输出结果是( )
#include <stdio.h>
int main() {
int a=4, b=11;
do {
b-=a;
++a;
}while(- -b<0);
printf("a=%d,b=%d
", a, b);
}
A.a=5,b=11 B.a=2,b=11 C.a=5,b=7 D.a=2,b=9
【答案】C
【详解】do-while循环只会执行一次,因为循环条件while(--b < 0)中的--b是一个后缀递减运算符,它会先读取b的值,然后b减1。由于b的初始值为11,即使减去a(初始值为4)后变为7,b的值仍然是正数,所以条件--b < 0为假,循环不会继续执行。在循环中:b -= a; 执行后,b的值变为 11 - 4 = 7。++a; 执行后,a的值变为 4 + 1 = 5。循环结束后,printf将打印出a和b的值,即a=5,b=7。
9.若有定义语句int k=-3,j=4;,则以下循环体的执行次数是( )
do {
j += ++k;
}
while (!k == 0);
A.0次 B.1次 C.2次 D.3次
【答案】D
【详解】k的初始值为-3,j的初始值为4。do...while循环至少执行一次。在循环体中,++k是前缀递增,所以k先加1再与j相加。while (!k == 0);条件中的!k首先检查k是否为0,由于k是非零的,!k为真(1),然后与0进行比较,1 == 0为假,所以循环继续。循环会一直执行,直到k变为0。由于k每次循环增加1,从-3开始,循环会在k变为0之前执行3次。
10.以下代码段的输出结果是( )
int i = 1;
do {
printf("%d ", i);
i *= 2;
} while (i < 10);
A.1 2 4 8 B.1 2 4 8 16 C.1 D.无输出
【答案】A
11.以下代码的输出结果是( )
int i = 0;
do {
printf("%d ", i);
i++;
} while (i < 3);
A.0 1 2 B.0 1 2 3 C.1 2 3 D.无输出
【答案】A
12.以下关于 while、do…while、for 循环语句的说法,正确的是( )
A.while 循环至少会执行一次循环体
B.do…while 循环的条件判断在循环体执行之后
C.for 循环不能用于不确定次数的循环
D.do…while 循环和 while 循环功能完全相同
【答案】B
13.以下代码的功能是( )
int num, sum = 0;
do {
scanf("%d", &num);
sum += num;
} while (num != 0);
printf("%d", sum);
A.累加所有输入的数 B.累加正数直到输入0
C.累加非零数 D.累加输入的第一个数
【答案】C
14.以下代码的输出结果是( )
int i = 0;
while (i < 2) {
int j = 0;
do {
printf("%d %d
", i, j);
j++;
} while (j < 2);
i++;
}
A.0 0
0 1
1 0
1 1
B.0 0
1 0
0 1
1 1
C.0 0
0 1
D.0 0
1 1
【答案】A
15.以下代码段的循环次数是( )
int i=10;
do { i--; } while(i>5);
A.无限循环 B.7次 C.6次 D.5次
【答案】D
16.以下代码的输出是( )
int i=0, sum=1;
do { sum += i++; } while(i<5);
printf("%d", sum);
A.11 B.10 C.15 D.6
【答案】A
17.以下代码的输出是( )
int i=3;
do {
printf("%d", i--);
} while(i>0);
A.321 B.3210 C.32 D.3
【答案】A
18.以下代码的输出结果是( )
int i = 1;
do {
printf("%d", i);
i *= 2;
} while(i < 5);
A.1 B.12 C.124 D.1248
【答案】B
19.C 语言中 while 和 do-while 循环的主要区别是( )
A.do-while 的循环体至少无条件执行一次
B.while 的循环控制条件比 do-while 的循环控制条件严格
C.do-while 允许从外部转到循环体内
D.do-while 的循环体不能是复合语句
【答案】A
【详解】do-while 循环的循环体至少无条件执行一次,然后才检查循环条件。while 和 do-while 的循环控制条件严格程度相同,都是基于布尔表达式的结果来决定是否继续执行循环。在C语言中,无论是 while 还是 do-while 循环,通常不允许从外部代码块直接跳转到循环体内。do-while 的循环体可以是复合语句(由 {} 包围的代码块),与 while 循环一样。
20.在C语言中,while 循环和 do-while 循环的主要区别在于( )
A.while 循环的循环体可能一次都不执行
B.do-while 循环的循环体至少执行一次
C.while 循环的条件判断在循环体执行之前
D.do-while 循环的条件判断在循环体执行之后
【答案】B
【详解】while 循环首先检查条件,如果条件为假,则循环体一次也不执行。而 do-while 循环至少执行一次循环体,之后才检查条件。
二、程序设计题(本大题共4小题,每题10分,共40分)
21.输入若干个字符,以‘*’作为结束符。
【答案】#include<stdio.h>
main()
{
char ch;
printf("输入若干个字符:");
ch=getchar();
do
{
putchar(ch);
ch=getchar();
}
while(ch!='*');
getchar();
}
【详解】getchar()可输入多个字符,但每次接收一个字符,依次判断直到接收到“*”。
22.输入一个整数,判断其是否为回文数。(首尾对应相同的整数,比如12321,1221,121,13431,即左边第一位等于右边第一位,左边第二位等于右边第二位,……)
【答案】#include<stdio.h>
int main(void)
{
int x,num,t,n;
scanf("%d",&x);
num=0;
n=x;
do
{
num=num*10+x%10;
x/=10;
}while(x>0);
if(n==num)
printf("Yes
");
else
printf("No
");
return 0;
}
【详解】将整数x逆转,逆转的方法就是利用求余%和除/的思想。
23.编写一个程序,使用 do - while 循环判断一个整数是否是回文数(正读和反读都一样的数)。
【答案】#include <stdio.h>
int main() {
int num, originalNum, reversedNum = 0;
printf("请输入一个整数: ");
scanf("%d", &num);
originalNum = num;
do {
reversedNum = reversedNum * 10 + num % 10;
num /= 10;
} while (num != 0);
if (originalNum == reversedNum) {
printf("%d 是回文数。
", originalNum);
} else {
printf("%d 不是回文数。
", originalNum);
}
return 0;
}
24.编写一个程序,使用 do - while 循环计算用户输入的一系列正数的乘积,当输入负数时停止输入。
【答案】#include <stdio.h>
int main() {
int num;
long long product = 1;
do {
printf("请输入一个正数(输入负数停止): ");
scanf("%d", &num);
if (num > 0) {
product *= num; }
} while (num >= 0);
printf("输入的正数的乘积是: %lld
", product);
return 0; }
【分析】本题考查的是用do-while循环计算正数乘积计算程序
【详解】用do-while循环保证至少输入一次,且保证当输入的数为正数时,保持计算,当输入的数为负数时(即满足条件num>=0时)控制终止,退出循环。
product*=num来计算正数乘积
【点睛】product:long long类型,用于累积乘积,避免大数溢出
试卷第6页,共6页
试卷第5页,共6页
学科网(北京)股份有限公司
$