内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第91卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①while循环;②do……while循环;③for循环;④多重循环、break和continue语句。
湖南省《计算机应用类专业综合考纲百套卷》 第91卷
《计算机编程语言——C语言》
循环结构程序设计
专题训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.执行以下程序段的输出结果是( )
int sum = 0,a;
for(a=1;a<=4;a++)
{ if(a == 2) continue;
sum += a;}
printf("%d",sum);
A. 6 B. 10 C. 8 D. 7
2.下列选项中,存在死循环的代码段是( )
A. int i=0; while(i<10) i++;
B. int i=0; while(i<10); i++;
C. int i=0; do{i++;}while(i<10);
D. int i=0; for(i=0;i<10;i++) break;
3.执行以下程序段的输出结果是( )
int x = 0;
do{ x++;
if(x % 2 == 0) continue;
printf("%d",x);
}while(x < 5);
A. 135 B. 24 C. 12345 D. 13
4.执行以下程序段,循环执行次数为( )
int count = 0,i;
for(i=5;i<15;i+=4) count++;
printf("%d",count);
A. 2 B. 3 C. 4 D. 5
5.执行以下程序段的输出结果是( )
int sum = 0,i,j;
for(i=1;i<=2;i++)
{ for(j=1;j<=3;j++)
{ if(i == j) continue;
sum += i; }
}
printf("%d",sum);
A. 6 B. 8 C. 9 D. 10
6.以下选项中,循环一次都不会执行的是( )
A. int a=5; while(a>10) a--;
B. int a=5; do{a--;}while(a>10);
C. int i; for(i=0;i<5;i++);
D. int i=0; while(1){if(i>10)break;}
7.执行以下程序段的输出结果是( )
int n = 1;
while(n < 6)
{ n++;
if(n % 2 == 1) continue;
printf("%d",n); }
A. 246 B. 24 C. 135 D. 35
8.执行以下程序段的输出结果是( )
int res = 0,i;
for(i=2;i<=5;i++)
{ if(i == 3) break;
res += i; }
printf("%d",res);
A. 2 B. 7 C. 14 D. 9
9.执行以下程序段的输出结果是( )
int i,j,cnt=0;
for(i=1,j=8;i<j;i++,j--) cnt++;
printf("%d",cnt);
A. 3 B. 4 C. 5 D. 8
10.执行以下程序段的输出结果是( )
int total = 0,m,n;
for(m=1;m<=4;m++)
{ for(n=1;n<=m;n++)
{ if(m+n == 5) break;
total += m;}
}
printf("%d",total);
A. 1 B. 4 C. 6 D. 8
11.执行以下程序段的输出结果是( )
int i,j,sum=0;
for(i=1;i<=3;i++)
{ for(j=1;j<=3;j++)
{ if(i + j == 4) break;
sum += i * j; }
}
printf("%d",sum);
A.5 B.7 C.8 D.10
12.执行以下程序段的输出结果是( )
int m = 0,n;
while(m > 0) m++;
printf("A:%d ",m);
n = 0;
do{ n++;
}while(n < 0);
printf("B:%d",n);
A.A:0 B:1 B.A:1 B:0 C.A:0 B:0 D.A:1 B:1
13.执行以下程序段的输出结果是( )
int p = 0;
while(p < 8)
{ p++;
if(p % 3 == 0) continue;
if(p == 7) break;
printf("%d",p); }
A.1245 B.12457 C.124 D.12345
14.执行以下程序段的输出结果是( )
int m,n,total=0;
for(m=1;m<=3;m++)
{ for(n=3;n>=1;n--)
{ if(m == n) continue;
total += m + n;} }
printf("%d",total);
A.24 B.28 C.30 D.32
15.执行以下程序段的输出结果是( )
int i,j,sum=0;
for(i=1;i<=4;i++)
{ for(j=2;j<=4;j++)
{ if(i + j > 6) break;
sum += j; } }
printf("%d",sum);
A.14 B.28 C.20 D.25
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, s = 0;
for(; s < 20; ) {
s += ++i; }
printf("%d", i);
return 0;}
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main()
{ int s = 0, i = 1;
while(i <= 6)
{ if(i % 3 != 0) s = s - i;
else s = s + i;
i++; }
printf("%d", s);
return 0;}
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int n=7, i, sum;
if (n < 2)
{ printf("数字过小,无计算数据!
");
return 0; }
sum = 0;
printf("运算表达式:");
for (i = 2; i <= n; i++)
{ if (i % 2 == 1)
{ sum += i;
printf("+%d ", i); }
else
{ sum -= i;
printf("-%d ", i); }
}
printf("
2~%d交替运算总和:%d
", n, sum);
return 0; }
4.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, s = 0;
while (i++ < 3) {
switch (i) {
case 1: s += i; break;
case 2: continue;
case 3: s += i;
}
}
printf("%d", s);
return 0; }
5.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int i, sum;
sum = 0;
i = -4;
while (i < 5)
{
++i;
if ((i % 2 == 0) && (i != 0))
continue;
if (i == 4)
break;
sum = sum + i * 2;
}
printf("sum=%d,i=%d", sum, i);
return 0; }
6.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ int i, sum;
sum = 0;
i = 1;
while (i <= 6)
{
switch (i % 3)
{
case 0: i = i + 2; continue;
case 1: sum = sum + i * 2; break;
case 2: sum = sum - i; break;
}
i = i + 1;
}
printf("sum=%d,i=%d", sum, i);
return 0; }
7.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int i, j, s;
s = 0;
for (i = 2; i < 5; i++)
{
for (j = 4; j > i; j--)
{
if (i * j > 8)
continue;
s = s + i * 2;
}
}
printf("s=%d", s);
return 0; }
8.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, j, s = 0;
for (; i < 3; i++) {
for (j = 0; j < 2; j++) {
switch (i + j) {
case 1: continue;
case 2: break;
}
s += i + j;
}
}
printf("%d", s);
return 0; }
9.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, j = 0, s = 0;
while (i++ < 2) {
j = i;
while (j-- > 0) s += j;
}
printf("%d", s);
return 0;
}
10.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ int i, sum;
sum = 0;
i = -5;
while (i < 6)
{
++i;
if ((i % 2 == 0) && i != 0)
continue;
if (i == 5)
break;
sum += i * 3;
}
printf("sum=%d,i=%d", sum, i);
return 0; }
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.水仙花数定义:一个 n 位正整数,各位数字 n 次方之和等于自身。下列程序的功能是:输入任意正整数,判断并输出是否为水仙花数;输入小于 1 直接提示非法。
#include <stdio.h>
int main(void)
{ int num, temp, digit, len, sum, i, power;
printf("请输入一个正整数:");
scanf("%d", &num);
if (num < 1)
{ printf("输入数字非法
");
return 0; }
_________①________
len = 0;
while (temp > 0)
{ len++;
_________②________ }
temp = num;
sum = 0;
while (temp > 0)
{ digit = temp % 10;
power = 1;
for (i = 1; i <= len; i++)
{ __________③_________ }
sum += power;
temp /= 10;
}
if (sum == num)
printf("%d 是%d位水仙花数
", num, len);
else
printf("%d 不是水仙花数
", num);
return 0; }
2.质因数分解:输入大于 1 整数,循环从小到大寻找所有质因数,逐层整除拆分,按格式输出分解式;输入≤1 提示错误。
#include <stdio.h>
int main(void)
{
int num, i;
printf("输入大于1的整数:");
scanf("%d", &num);
if (num <= 1)
{
printf("数字非法
");
return 0;
}
printf("%d = ", num);
for (i = 2; _______①_______; i++)
{
while (_______②________)
{
printf("%d", i);
_________③_________
if (num > 1)
printf(" * ");
}
}
printf("
");
return 0;
}
3.多位数反转:输入任意整数(支持正负),循环拆分每一位反转生成新数字,输出原数与反转后的数字;输入 0 直接输出 0。
#include <stdio.h>
int main(void)
{
int num, temp, rev, flag;
printf("输入任意整数:");
scanf("%d", &num);
rev = 0;
flag = 1;
temp = num;
if (temp < 0)
{
flag = -1;
_________①________
}
while (temp > 0)
{
rev = __________②_________
temp /= 10;
}
_________③_________
printf("原数字:%d,反转数字:%d
", num, rev);
return 0;
}
4.百钱百鸡:公鸡 5 元 1 只,母鸡 3 元 1 只,小鸡 1 元 3 只。输入总钱数与总只数,双层 for 循环枚举所有组合,输出全部合法购买方案;无合法方案提示无解。
#include <stdio.h>
int main(void)
{
int money, total, gong, mu, xiao, exist;
printf("输入总钱数、总鸡只数:");
scanf("%d%d", &money, &total);
exist = 0;
for (gong = 0; gong * 5 <= money; gong++)
{
for (mu = 0; _________①________; mu++)
{
xiao = ________②_________
if (___________③__________)
{
printf("公鸡%d只,母鸡%d只,小鸡%d只
", gong, mu, xiao);
exist = 1;
}
}
}
if (!exist)
printf("无满足条件的购买方案
");
return 0;
}
5.下列程序的功能是:输入两个正整数,求最大公约数和最小公倍数,同时输出两个结果;输入含负数报错。
#include <stdio.h>
int main(void)
{
int a, b, m, n, r, gcd, lcm;
printf("输入两个正整数:");
scanf("%d%d", &a, &b);
if (a <= 0 || b <= 0)
{
printf("数字必须为正数
");
return 0;
}
m = a;
_______①_______
while (n != 0)
{
________②________
m = n;
n = r;
}
gcd = m;
lcm = _________③________
printf("最大公约数:%d,最小公倍数:%d
", gcd, lcm);
return 0;
}
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.自守数:数字平方后末尾几位数等于自身,如 5、6、25、76。输入上限 N,循环判断每个数字平方后末尾是否匹配自身,输出全部自守数。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int main(void)
L3 {
L4 int n, i, pow, tmp, bit, self;
L5 printf("输入数字上限N:");
L6 scanf("%d", &n);
L7 if(n < 1)
L8 {
L9 printf("无自守数
");
L10 return 0;
L11 }
L12 printf("1~%d内自守数:", n);
L13 for(i = 1; i <= n; i++)
L14 {
L15 pow = i * i;
L16 tmp = i;
L17 bit = 1;
L18 while(tmp > 0)
L19 {
L20 bit *= 10;
L21 tmp %= 10;
L22 }
L23 if(pow / bit == i)
L24 printf("%d ", i);
L25 }
L26 printf("
");
L27 return 0;
L28 }
2.数字拆分重组:输入任意非 0 正整数,通过多层循环分别提取最高位、最低位数字,去掉首尾后拼接中间数位,重新组合成「末位 + 中间数字 + 首位」的新数字并输出;例如输入 1234,交换首尾得到 4231。输入小于 1 提示非法。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int main(void)
L3 { int num, temp, high, low, mid, len, div, i,newNum;
L4 printf("请输入一个正整数:");
L5 scanf("%d", &num);
L6 if (num < 1)
L7 { printf("输入数字非法!
");
L8 return 0; }
L9 temp = num;
L10 low = temp % 10;
L11 len = 0;
L12 while (temp > 0)
L13 { len++;
L14 temp /= 10;
L15 }
L16 div = 1;
L17 for (i = 1; i < len; i++)
L18 div *= 10;
L19 high = num / div;
L20 mid = (num / div) / 10;
L21 newNum = low * div + mid + high;
L22 printf("原数字:%d
交换首尾后的新数字:%d
", num, newNum);
L23 return 0; }
3.下列程序的功能是:输入层数 k,双层嵌套循环打印空心倒菱形,分为上半递减空心三角、下半递增空心三角。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main(void)
L3 { int k, i, j;
L4 printf("输入菱形层数(≥3):");
L5 scanf("%d", &k);
L6 if(k <= 2)
L7 { printf("层数过小,无法打印
");
L8 return 0;
L9 }
L10 for(i = 1; i <= k; i++)
L11 {
L12 for(j = 1; j <= k - i; j++)
L13 printf(" ");
L14 for(j = 1; j <= 2*i - 1; j++)
L15 {
L16 if(j == 1 || j == 2*i - 1)
L17 printf("*");
L18 else
L19 printf(" ");
L20 }
L21 printf("
");
L22 }
L23 for(i = k ; i >= 1; i--)
L24 {
L25 for(j = 1; j <= k - i; j++)
L26 printf(" ");
L27 for(j = 1; j <= i - 1; j++)
L28 {
L29 if(j == 1 && j == 2*i)
L30 printf("*");
L31 else
L32 printf(" ");
L33 }
L34 printf("
");
L35 }
L36 return 0; }
4.快乐数规则:将数字每一位拆分,求各位平方之和,重复迭代,最终得到 1 为快乐数;若进入 4→16→37 循环永不等于 1 则不是快乐数。输入正整数,循环迭代计算,输出迭代过程并判定结果;输入≤0 非法。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main(void)
L3 {
L4 int num, temp, digit, sum;
L5 printf("请输入正整数:");
L6 scanf("%d", &num);
L7 if(num <= 0)
L8 { printf("输入数字非法
");
L9 return 0; }
L10 temp = num;
L11 printf("迭代过程:");
L12 while(1)
L13 { printf("%d ", temp);
L14 if(temp == 1)
L15 { printf("
%d 是快乐数
", num);
L16 continue; }
L17 if(temp == 4)
L18 { printf("
%d 不是快乐数
", num);
L19 break; }
L20 sum = 0;
L21 while(temp > 0)
L22 { digit = temp / 10;
L23 sum = digit * digit;
L24 temp /= 10;
L25 }
L26 temp = sum;
L27 }
L28 return 0; }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第91卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①while循环;②do……while循环;③for循环;④多重循环、break和continue语句。
湖南省《计算机应用类专业综合考纲百套卷》 第91卷
《计算机编程语言——C语言》
循环结构程序设计
专题训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.执行以下程序段的输出结果是( )
int sum = 0,a;
for(a=1;a<=4;a++)
{ if(a == 2) continue;
sum += a;}
printf("%d",sum);
A. 6 B. 10 C. 8 D. 7
【答案】C
【解析】a=2 触发 continue 跳过累加,仅 1+3+4=8。
2.下列选项中,存在死循环的代码段是( )
A. int i=0; while(i<10) i++;
B. int i=0; while(i<10); i++;
C. int i=0; do{i++;}while(i<10);
D. int i=0; for(i=0;i<10;i++) break;
【答案】B
【解析】while 后紧跟分号,代表空循环体,i++ 永远无法执行,i 恒为 0,无限循环。
3.执行以下程序段的输出结果是( )
int x = 0;
do{ x++;
if(x % 2 == 0) continue;
printf("%d",x);
}while(x < 5);
A. 135 B. 24 C. 12345 D. 13
【答案】A
【解析】程序执行过程如下:
x=0 → do 内 x++ 变 1,1%2≠0,不执行 continue,输出 1。
x=1 → x++ 变 2,2%2==0,执行 continue(跳过 printf),无输出。
x=2 → x++ 变 3,3%2≠0,输出 3。
x=3 → x++ 变 4,4%2==0,continue,无输出。
x=4 → x++ 变 5,5%2≠0,输出 5。
x=5 → while(5<5) 为假,循环结束。 输出结果为 135,对应选项 A。
4.执行以下程序段,循环执行次数为( )
int count = 0,i;
for(i=5;i<15;i+=4) count++;
printf("%d",count);
A. 2 B. 3 C. 4 D. 5
【答案】B
【解析】i=5、9、13 满足条件,共 3 次;i=17 退出循环。
5.执行以下程序段的输出结果是( )
int sum = 0,i,j;
for(i=1;i<=2;i++)
{ for(j=1;j<=3;j++)
{ if(i == j) continue;
sum += i; }
}
printf("%d",sum);
A. 6 B. 8 C. 9 D. 10
【答案】A
【解析】i=1:j=2、3 累加 1+1;i=2:j=1、3 累加 2+2;总和 1+1+2+2=6。
6.以下选项中,循环一次都不会执行的是( )
A. int a=5; while(a>10) a--;
B. int a=5; do{a--;}while(a>10);
C. int i; for(i=0;i<5;i++);
D. int i=0; while(1){if(i>10)break;}
【答案】A
【解析】while 先判断,初始 5>10 为假,循环执行 0 次;do-while 最少执行 1 次。
7.执行以下程序段的输出结果是( )
int n = 1;
while(n < 6)
{ n++;
if(n % 2 == 1) continue;
printf("%d",n); }
A. 246 B. 24 C. 135 D. 35
【答案】A
【解析】n=2、4、6 为偶数打印;n=6 时打印后 n<6 不成立,循环结束。
8.执行以下程序段的输出结果是( )
int res = 0,i;
for(i=2;i<=5;i++)
{ if(i == 3) break;
res += i; }
printf("%d",res);
A. 2 B. 7 C. 14 D. 9
【答案】A
【解析】i=2 累加,i=3 触发 break 直接退出,res=2。
9.执行以下程序段的输出结果是( )
int i,j,cnt=0;
for(i=1,j=8;i<j;i++,j--) cnt++;
printf("%d",cnt);
A. 3 B. 4 C. 5 D. 8
【答案】B
【解析】(1,8)、(2,7)、(3,6)、(4,5) 共 4 轮;i=5,j=4 条件不成立。
10.执行以下程序段的输出结果是( )
int total = 0,m,n;
for(m=1;m<=4;m++)
{ for(n=1;n<=m;n++)
{ if(m+n == 5) break;
total += m;}
}
printf("%d",total);
A. 1 B. 4 C. 6 D. 8
【答案】D
【解析】外层循环 m 从 1 到 4:
m=1:内层 n 从 1 到 1
n=1:m+n=2≠5,total +=1 → total=1
m=2:内层 n 从 1 到 2
n=1:m+n=3≠5,total +=2 → total=3
n=2:m+n=4≠5,total +=2 → total=5
m=3:内层 n 从 1 到 3
n=1:m+n=4≠5,total +=3 → total=8
n=2:m+n=5,break 跳出内层循环(不再执行 n=3 及之后的内层循环)
m=4:内层 n 从 1 到 4
n=1:m+n=5,break 跳出内层循环最终 total = 8,对应选项 D。
11.执行以下程序段的输出结果是( )
int i,j,sum=0;
for(i=1;i<=3;i++)
{ for(j=1;j<=3;j++)
{ if(i + j == 4) break;
sum += i * j; }
}
printf("%d",sum);
A.5 B.7 C.8 D.10
【答案】A
【解析】循环遇 i+j==4即中断内层:i=1累加到 3,i=2累加到 5,i=3直接跳出,总和为 5,选 A。
12.执行以下程序段的输出结果是( )
int m = 0,n;
while(m > 0) m++;
printf("A:%d ",m);
n = 0;
do{ n++;
}while(n < 0);
printf("B:%d",n);
A.A:0 B:1 B.A:1 B:0 C.A:0 B:0 D.A:1 B:1
【答案】A
【解析】while(m>0)条件不成立,m 不变仍为 0,输出 A:0;do...while先执行 n++ 使 n=1,再判断 n<0为假结束,输出 B:1,对应 A。
13.执行以下程序段的输出结果是( )
int p = 0;
while(p < 8)
{ p++;
if(p % 3 == 0) continue;
if(p == 7) break;
printf("%d",p); }
A.1245 B.12457 C.124 D.12345
【答案】A
【解析】p=1,2 打印;p=3 continue;p=4,5 打印;p=6 continue;p=7 触发 break 终止,输出 1245。
14.执行以下程序段的输出结果是( )
int m,n,total=0;
for(m=1;m<=3;m++)
{ for(n=3;n>=1;n--)
{ if(m == n) continue;
total += m + n;} }
printf("%d",total);
A.24 B.28 C.30 D.32
【答案】A
【解析】剔除 m==n,所有组合相加:(1+3)+(1+2)+(2+3)+(2+1)+(3+2)
+(3+1)=4+3+5+3+5+4=24,答案 A。
15.执行以下程序段的输出结果是( )
int i,j,sum=0;
for(i=1;i<=4;i++)
{ for(j=2;j<=4;j++)
{ if(i + j > 6) break;
sum += j; } }
printf("%d",sum);
A.14 B.28 C.20 D.25
【答案】D
【解析】i+j>6时break内层循环:i=1累加2+3+4=9,i=2累加2+3+4=18,i=3累加 2+3=20 后 j=4 跳出,i=4仅累加2得22后j=3 跳出,总和25,选 D。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, s = 0;
for(; s < 20; ) {
s += ++i; }
printf("%d", i);
return 0;}
【答案】6
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main()
{ int s = 0, i = 1;
while(i <= 6)
{ if(i % 3 != 0) s = s - i;
else s = s + i;
i++; }
printf("%d", s);
return 0;}
【答案】-3
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int n=7, i, sum;
if (n < 2)
{ printf("数字过小,无计算数据!
");
return 0; }
sum = 0;
printf("运算表达式:");
for (i = 2; i <= n; i++)
{ if (i % 2 == 1)
{ sum += i;
printf("+%d ", i); }
else
{ sum -= i;
printf("-%d ", i); }
}
printf("
2~%d交替运算总和:%d
", n, sum);
return 0; }
【答案】
运算表达式:-2 +3 -4 +5 -6 +7
2~7交替运算总和:3
4.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, s = 0;
while (i++ < 3) {
switch (i) {
case 1: s += i; break;
case 2: continue;
case 3: s += i;
}
}
printf("%d", s);
return 0; }
【答案】4
5.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int i, sum;
sum = 0;
i = -4;
while (i < 5)
{
++i;
if ((i % 2 == 0) && (i != 0))
continue;
if (i == 4)
break;
sum = sum + i * 2;
}
printf("sum=%d,i=%d", sum, i);
return 0; }
【答案】sum=10,i=5
6.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ int i, sum;
sum = 0;
i = 1;
while (i <= 6)
{
switch (i % 3)
{
case 0: i = i + 2; continue;
case 1: sum = sum + i * 2; break;
case 2: sum = sum - i; break;
}
i = i + 1;
}
printf("sum=%d,i=%d", sum, i);
return 0; }
【答案】sum=-5,i=8
7.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int i, j, s;
s = 0;
for (i = 2; i < 5; i++)
{
for (j = 4; j > i; j--)
{
if (i * j > 8)
continue;
s = s + i * 2;
}
}
printf("s=%d", s);
return 0; }
【答案】s=8
8.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, j, s = 0;
for (; i < 3; i++) {
for (j = 0; j < 2; j++) {
switch (i + j) {
case 1: continue;
case 2: break;
}
s += i + j;
}
}
printf("%d", s);
return 0; }
【答案】7
9.下列程序的运行结果是__________________。
#include <stdio.h>
int main() {
int i = 0, j = 0, s = 0;
while (i++ < 2) {
j = i;
while (j-- > 0) s += j;
}
printf("%d", s);
return 0;
}
【答案】1
10.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ int i, sum;
sum = 0;
i = -5;
while (i < 6)
{
++i;
if ((i % 2 == 0) && i != 0)
continue;
if (i == 5)
break;
sum += i * 3;
}
printf("sum=%d,i=%d", sum, i);
return 0; }
【答案】sum=0,i=5
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.水仙花数定义:一个 n 位正整数,各位数字 n 次方之和等于自身。下列程序的功能是:输入任意正整数,判断并输出是否为水仙花数;输入小于 1 直接提示非法。
#include <stdio.h>
int main(void)
{ int num, temp, digit, len, sum, i, power;
printf("请输入一个正整数:");
scanf("%d", &num);
if (num < 1)
{ printf("输入数字非法
");
return 0; }
_________①________
len = 0;
while (temp > 0)
{ len++;
_________②________ }
temp = num;
sum = 0;
while (temp > 0)
{ digit = temp % 10;
power = 1;
for (i = 1; i <= len; i++)
{ __________③_________ }
sum += power;
temp /= 10;
}
if (sum == num)
printf("%d 是%d位水仙花数
", num, len);
else
printf("%d 不是水仙花数
", num);
return 0; }
【答案】①temp = num; ②temp /= 10; ③power *= digit;
2.质因数分解:输入大于 1 整数,循环从小到大寻找所有质因数,逐层整除拆分,按格式输出分解式;输入≤1 提示错误。
#include <stdio.h>
int main(void)
{
int num, i;
printf("输入大于1的整数:");
scanf("%d", &num);
if (num <= 1)
{
printf("数字非法
");
return 0;
}
printf("%d = ", num);
for (i = 2; _______①_______; i++)
{
while (_______②________)
{
printf("%d", i);
_________③_________
if (num > 1)
printf(" * ");
}
}
printf("
");
return 0;
}
【答案】①num > 1 或 num >= 2 ②num % i == 0
③num /= i; 或 num=num/i;
3.多位数反转:输入任意整数(支持正负),循环拆分每一位反转生成新数字,输出原数与反转后的数字;输入 0 直接输出 0。
#include <stdio.h>
int main(void)
{
int num, temp, rev, flag;
printf("输入任意整数:");
scanf("%d", &num);
rev = 0;
flag = 1;
temp = num;
if (temp < 0)
{
flag = -1;
_________①________
}
while (temp > 0)
{
rev = __________②_________
temp /= 10;
}
_________③_________
printf("原数字:%d,反转数字:%d
", num, rev);
return 0;
}
【答案】①temp = -temp; ②rev * 10 + temp % 10;
③rev = rev * flag;
4.百钱百鸡:公鸡 5 元 1 只,母鸡 3 元 1 只,小鸡 1 元 3 只。输入总钱数与总只数,双层 for 循环枚举所有组合,输出全部合法购买方案;无合法方案提示无解。
#include <stdio.h>
int main(void)
{
int money, total, gong, mu, xiao, exist;
printf("输入总钱数、总鸡只数:");
scanf("%d%d", &money, &total);
exist = 0;
for (gong = 0; gong * 5 <= money; gong++)
{
for (mu = 0; _________①________; mu++)
{
xiao = ________②_________
if (___________③__________)
{
printf("公鸡%d只,母鸡%d只,小鸡%d只
", gong, mu, xiao);
exist = 1;
}
}
}
if (!exist)
printf("无满足条件的购买方案
");
return 0;
}
【答案】①gong * 5 + mu * 3 <= money ②total - gong - mu;
③xiao >= 0 && xiao % 3 == 0 && 5*gong + 3*mu + xiao/3 == money
5.下列程序的功能是:输入两个正整数,求最大公约数和最小公倍数,同时输出两个结果;输入含负数报错。
#include <stdio.h>
int main(void)
{
int a, b, m, n, r, gcd, lcm;
printf("输入两个正整数:");
scanf("%d%d", &a, &b);
if (a <= 0 || b <= 0)
{
printf("数字必须为正数
");
return 0;
}
m = a;
_______①_______
while (n != 0)
{
________②________
m = n;
n = r;
}
gcd = m;
lcm = _________③________
printf("最大公约数:%d,最小公倍数:%d
", gcd, lcm);
return 0;
}
【答案】①n = b; ② r = m % n; ③a * b / gcd;
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.自守数:数字平方后末尾几位数等于自身,如 5、6、25、76。输入上限 N,循环判断每个数字平方后末尾是否匹配自身,输出全部自守数。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int main(void)
L3 {
L4 int n, i, pow, tmp, bit, self;
L5 printf("输入数字上限N:");
L6 scanf("%d", &n);
L7 if(n < 1)
L8 {
L9 printf("无自守数
");
L10 return 0;
L11 }
L12 printf("1~%d内自守数:", n);
L13 for(i = 1; i <= n; i++)
L14 {
L15 pow = i * i;
L16 tmp = i;
L17 bit = 1;
L18 while(tmp > 0)
L19 {
L20 bit *= 10;
L21 tmp %= 10;
L22 }
L23 if(pow / bit == i)
L24 printf("%d ", i);
L25 }
L26 printf("
");
L27 return 0;
L28 }
【答案】①L21 tmp /= 10;
②L23 if(pow % bit == i)
2.数字拆分重组:输入任意非 0 正整数,通过多层循环分别提取最高位、最低位数字,去掉首尾后拼接中间数位,重新组合成「末位 + 中间数字 + 首位」的新数字并输出;例如输入 1234,交换首尾得到 4231。输入小于 1 提示非法。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int main(void)
L3 { int num, temp, high, low, mid, len, div, i,newNum;
L4 printf("请输入一个正整数:");
L5 scanf("%d", &num);
L6 if (num < 1)
L7 { printf("输入数字非法!
");
L8 return 0; }
L9 temp = num;
L10 low = temp % 10;
L11 len = 0;
L12 while (temp > 0)
L13 { len++;
L14 temp /= 10;
L15 }
L16 div = 1;
L17 for (i = 1; i < len; i++)
L18 div *= 10;
L19 high = num / div;
L20 mid = (num / div) / 10;
L21 newNum = low * div + mid + high;
L22 printf("原数字:%d
交换首尾后的新数字:%d
", num, newNum);
L23 return 0; }
【答案】①L20 mid = (num % div) / 10;
②L21 newNum = low * div + mid * 10 + high;
3.下列程序的功能是:输入层数 k,双层嵌套循环打印空心倒菱形,分为上半递减空心三角、下半递增空心三角。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main(void)
L3 { int k, i, j;
L4 printf("输入菱形层数(≥3):");
L5 scanf("%d", &k);
L6 if(k <= 2)
L7 { printf("层数过小,无法打印
");
L8 return 0;
L9 }
L10 for(i = 1; i <= k; i++)
L11 {
L12 for(j = 1; j <= k - i; j++)
L13 printf(" ");
L14 for(j = 1; j <= 2*i - 1; j++)
L15 {
L16 if(j == 1 || j == 2*i - 1)
L17 printf("*");
L18 else
L19 printf(" ");
L20 }
L21 printf("
");
L22 }
L23 for(i = k ; i >= 1; i--)
L24 {
L25 for(j = 1; j <= k - i; j++)
L26 printf(" ");
L27 for(j = 1; j <= i - 1; j++)
L28 {
L29 if(j == 1 && j == 2*i)
L30 printf("*");
L31 else
L32 printf(" ");
L33 }
L34 printf("
");
L35 }
L36 return 0; }
【答案】①L23 for(i = k - 1; i >= 1; i--)
②L27 for(j = 1; j <= 2*i - 1; j++)
③L29 if(j == 1 || j == 2*i - 1)
4.快乐数规则:将数字每一位拆分,求各位平方之和,重复迭代,最终得到 1 为快乐数;若进入 4→16→37 循环永不等于 1 则不是快乐数。输入正整数,循环迭代计算,输出迭代过程并判定结果;输入≤0 非法。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main(void)
L3 {
L4 int num, temp, digit, sum;
L5 printf("请输入正整数:");
L6 scanf("%d", &num);
L7 if(num <= 0)
L8 { printf("输入数字非法
");
L9 return 0; }
L10 temp = num;
L11 printf("迭代过程:");
L12 while(1)
L13 { printf("%d ", temp);
L14 if(temp == 1)
L15 { printf("
%d 是快乐数
", num);
L16 continue; }
L17 if(temp == 4)
L18 { printf("
%d 不是快乐数
", num);
L19 break; }
L20 sum = 0;
L21 while(temp > 0)
L22 { digit = temp / 10;
L23 sum = digit * digit;
L24 temp /= 10;
L25 }
L26 temp = sum;
L27 }
L28 return 0; }
【答案】①L16 break; }
②L22 { digit = temp % 10;
③L23 sum += digit * digit;
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$