内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第81卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①局部变量的作用域;②全局变量的作用域;③变量的存储方式;④自动变量;⑤静态局部变量;⑥寄存器变量;⑦外部变量。
湖南省《计算机应用类专业综合考纲百套卷》 第81卷
《计算机编程语言——C语言》
变量的作用域和变量的存储类别
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.设有如下代码,关于变量a和b的描述正确的是( )
int fun()
{ int a;
static int b;
a++;b++;
return a + b; }
A. a和b初始值均为 0
B. 多次调用fun,a的值会持续累加
C. 多次调用fun,b的值会持续累加
D. a和b的内存生命周期一致
2.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void test()
{ static int x = 10;
x += 5;
printf("%d ", x);}
int main()
{ test();test();test();return 0;}
A. 15 15 15 B. 15 20 25 C. 10 15 20 D. 编译报错
3.关于extern关键字,说法错误的是( )
A. extern用于声明外部已定义的全局变量
B. 使用extern声明变量时,不会重新分配内存
C. 被static修饰的全局变量,无法用extern跨文件引用
D. extern可以用来定义新的全局变量
4.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int f(int n)
{ static int s = 1;
s *= n;
return s;}
int main()
{ printf("%d ", f(2));
printf("%d", f(3));
return 0; }
A. 2 3 B. 2 6 C. 1 3 D. 2 2
5.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int a = 10;
void func()
{ int a = 20;
printf("%d ", a);}
int main()
{ func();
printf("%d", a);
return 0; }
A. 10 20 B. 20 10 C. 20 20 D. 10 10
6.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void count()
{ static int cnt = 0;
cnt++;
printf("%d ", cnt);}
int main()
{ int i;
for(i=0; i<3; i++)
count();
return 0;}
A. 0 0 0 B. 1 2 3 C. 1 1 1 D. 随机值
7.在函数嵌套调用场景中,内层代码块的局部变量,能否被外层函数访问( )
A. 可以直接访问
B. 不可以,作用域仅限自身代码块
C. 外层函数结束后才能访问
D. 静态变量可以访问,auto 变量不可以
8.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int test()
{ static int a = 1;
a++;
return a;}
int main()
{ int b = test() + test();
printf("%d", b);
return 0;}
A. 3 B. 4 C. 5 D. 2
9.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int g = 100;
void test()
{ int g = 200;
{ int g = 300;
printf("%d ",g); }
printf("%d ",g);
}
int main()
{ test();printf("%d",g);return 0;}
A. 100 200 300 B. 300 200 100
C. 300 300 100 D. 200 300 100
10.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int a = 5;
void f()
{ a += 10;}
int main()
{int a = 20;f();printf("%d",a);return 0;}
A. 15 B. 20 C. 25 D. 30
11.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void show()
{static char ch = 'A';putchar(ch++);}
int main()
{ show(); show(); show(); return 0;}
A. AAA B. ABC C. ABCD D. 随机字符
12.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int x = 1;
void fun()
{ int x = 2;
{ int x = 3; x++;}
x++;}
int main()
{fun();printf("%d",x);return 0;}
A. 1 B. 2 C. 3 D. 4
13.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void fun()
{ static int i = 0;
i++;printf("%d",i);}
int main()
{ int k;
for(k=0;k<3;k++)fun();
return 0;}
A. 000 B. 111 C. 123 D. 随机值
14.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int test()
{ static int num;
num += 2;return num;}
int main()
{ int i,sum=0;
for(i=0;i<3;i++) sum += test();
printf("%d",sum);
return 0;}
A. 6 B. 8 C. 12 D. 9
15.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void count()
{ static int cnt;
cnt++;printf("%d",cnt);}
int main()
{ int i=0;
while(i++<2) count();
return 0; }
A. 01 B. 12 C. 11 D. 22
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int global = 10;
void change(int n)
{ if(n>0)
{ global -= n;
change(n-1);
}
}
int main()
{ change(3);
printf("%d",global);
return 0;}
2.下列程序的运行结果是__________________。
#include <stdio.h>
void show(int k)
{ static int sum = 0;
sum += k;
if(k>1)
show(k-1);
printf("%d ",sum);
}
int main()
{ show(3);
return 0;}
3.下列程序的运行结果是__________________。
#include <stdio.h>
int f(int n)
{ static int s = 1;
while(n--)
s *= 2;
return s;}
int main()
{ printf("%d",f(1)+f(1));
return 0;}
4.下列程序的运行结果是__________________。
#include <stdio.h>
void add(int p)
{ static int total = 0;
total += p;
printf("%d ", total);}
int main()
{ int j = 2;
do
{ add(j);
j += 2;}while(j <= 6);
return 0;}
5.下列程序的运行结果是__________________。
#include <stdio.h>
int count(int n)
{ static int res = 0;
res += n % 2;
return res;}
int main()
{ int arr[] = {3,4,5,6};
int i;
for(i = 0; i < 4; i++)
count(arr[i]);
printf("%d", count(0));
return 0; }
6.下列程序的运行结果是__________________。
#include <stdio.h>
int num = 20;
void func(int flag)
{ if(flag)
{ int num = 5;
num -= 3; }
num += 5;}
int main()
{ int i;
for(i = 0; i < 2; i++) func(i);
printf("%d", num);
return 0;}
7.下列程序的运行结果是__________________。
#include <stdio.h>
int a = 6;
void f()
{ int a = 3;
a = a - 1;}
void g()
{ a = a / 2;}
int main()
{ f(); g();
printf("%d", a);
return 0;}
8.下列程序的运行结果是__________________。
#include <stdio.h>
void out()
{ int m = 1;
static int n = 1;
m++;
n += m;
printf("%d ", n);}
int main()
{ int i = 0;
while(i < 2)
{ out(); i++;}
return 0;}
9.下列程序的运行结果是__________________。
#include <stdio.h>
static int m = 4;
void sub(int n)
{ m = m - n;}
int main()
{ int i;
for(i = 1; i <= 2; i++)
{ sub(i);
if(m < 2)
break; }
printf("%d", m);
return 0;}
10.下列程序的运行结果是__________________。
#include <stdio.h>
extern int num;
void add()
{ num = num * 2;}
int main()
{ int i;
for(i = 0; i < 2; i++) add();
printf("%d", num);
return 0;}
int num = 3;
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:接收用户输入一个非负整数,计算并输出该数的阶乘,同时统计阶乘函数的总调用次数。
#include <stdio.h>
int count = 0;
long long Fact(int n)
{ static int callCnt = 0;
int i;
long long res = 1;
callCnt++;
_________①_________
for(i = 1; i <= n; i++)
________②_______;
return res;
}
int main()
{ int num;
long long result;
printf("请输入一个非负整数:");
scanf("%d", &num);
if(num < 0)
{ printf("请输入合法非负整数!
");
return 0; }
__________③_________
printf("%d 的阶乘 = %lld
", num, result);
printf("函数累计被调用:%d 次
", count);
return 0; }
2.下列程序的功能是:持续接收用户输入的若干整数,输入 - 1 结束程序,自动判断每个数是否为素数,最终统计并输出本次输入中素数的总个数。
#include <stdio.h>
static int primeNum = 0;
int IsPrime(int n)
{ register int i;
if(n <= 1) return 0;
for(i = 2; i * i <= n; i++)
{ if(_________①_________)
return 0;}
return 1;}
int main()
{ int val, flag;
printf("请输入整数(输入-1结束):
");
while(1)
{ scanf("%d", &val);
if(val == -1) ______②_______
_________③_________;
if(flag)
{ printf("%d 是素数
", val);
primeNum++; }
else
printf("%d 不是素数
", val);
}
printf("本次共输入 %d 个素数
", primeNum);
return 0; }
3.下列程序的功能是:输入一个正整数 n,求出斐波那契数列第 n 项的值,同时统计递归求解过程中函数执行的总次数。
#include <stdio.h>
int totalStep = 0;
int Fib(int n)
{ static int step = 0;
step++;
totalStep++;
if(________①________)
return 1;
____________②___________}
int main()
{ int n,ans;
printf("请输入斐波那契数列项数:");
scanf("%d", &n);
if(n < 1)
{ printf("输入不合法!
");
return 0;}
_________③_______;
printf("第 %d 项斐波那契数为:%d
", n, ans);
printf("递归总执行次数:%d
", totalStep);
return 0; }
4.下列程序的功能是:循环接收用户输入的整数,输入 0 时结束程序,对每一个输入数字进行数位反转,输出反转结果并记录反转函数的调用次数。
#include <stdio.h>
int Reverse(int num)
{ int res = 0;
static int cnt = 0;
cnt++;
while(num != 0)
{ res = ________①_______
num = ________②_______ }
printf("反转函数第 %d 次调用
", cnt);
return res;}
int main()
{ int n, ret;
printf("输入数字(输入0退出):
");
while(1)
{ scanf("%d", &n);
if(_______③_______)
break;
ret = Reverse(n);
printf("反转结果:%d
", ret); }
return 0; }
5.下列程序的功能是:输入鸡和兔的总头数与总脚数,计算并输出鸡和兔子各自的数量,若无合法组合则提示无解。
#include <stdio.h>
void Calc(int head, int foot)
{ int chicken, rabbit;
if(foot % 2 != 0 || ____________①___________)
{ printf("无解
");
return;}
chicken = _________②_________
rabbit = _________③__________
printf("鸡:%d 只,兔子:%d 只
", chicken, rabbit);}
int main()
{ int h, f;
printf("请输入总头数、总脚数:");
scanf("%d%d", &h, &f);
Calc(h, f);
return 0;}
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:实现 1~100 之间的猜数字小游戏,程序自动生成随机数字,玩家反复猜测,系统提示数字偏大或偏小,猜对后输出总共猜测的次数。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 #include <stdlib.h>
L3 #include <time.h>
L4 void GuessGame(int target)
L5 { static int times = 0;
L6 int num;
L7 printf("游戏开始,请猜1~100之间的数字:
");
L8 while(1)
L9 { scanf("%d", &num);
L10 times+1;
L11 if(num > target)
L12 printf("太大了,请继续猜:
");
L13 else if(num < target)
L14 printf("太小了,请继续猜:
");
L15 else
L16 { printf("恭喜你猜对了!一共猜了 %d 次
", times);
L17 continue; }
L18 }
L19 }
L20 int main()
L21 { int randNum;
L22 srand((unsigned int)time(NULL));
L23 randNum = rand() % 100 + 1;
L24 GuessGame(randNum);
L25 return 0;}
2.下列程序的功能是:输入一个十进制整数,将其转换为对应的二进制形式并完整输出。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 char bin[100];
L3 void DecToBin(int n)
L4 { int i = 0;
L5 if(n == 0)
L6 bin[i] = '0';
L7 while(n > 0)
L8 { bin[i++] = n % 2 +'0;
L9 n = n / 2;}
L10 bin[i] = '\0';
L11 }
L12 int main()
L13 { int num,j,len;
L14 printf("请输入十进制整数:");
L15 scanf("%d", &num);
L16 DecToBin(num);
L17 len = 0;
L18 while(bin[len] != '\0')
L19 len++;
L20 printf("对应二进制:");
L21 for(j = len ; j >= 0; j--)
L22 printf("%c", bin[j]);
L23 return 0; }
3.下列程序的功能是:输入两个年份作为区间范围,筛选并输出该区间内所有闰年,同时统计区间内闰年的总数量。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int IsLeap(int year)
L3 { if((year % 4 == 0 || year % 100 != 0) && (year % 400 == 0))
L4 return 1;
L5 return 0;}
L6 int main()
L7 { int start, end, y;
L8 static int leapCnt = 0;
L9 printf("输入起始年份、结束年份:");
L10 scanf("%d%d", &start, &end);
L11 printf("区间内闰年:
");
L12 for(y = start; y <= end; y++)
L13 { if(IsLeap(y)==0)
L14 { printf("%d ", y);
L15 leapCnt++;
L16 }
L17 }
L18 printf("
闰年总个数:%d
", leapCnt);
L19 return 0;}
4.下列程序的功能是:模拟密码登录验证,用户可反复输入密码,直到输入正确为止,最终统计并输出密码输入的总次数。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int CheckPwd(char pwd[])
L3 { char real[] = "123456";
L4 int i = 1;
L5 while(pwd[i] != '\0' && real[i] != '\0')
L6 { if(pwd[i] == real[i])
L7 return 0;
L8 i++;
L9 }
L10 if(pwd[i] != '\0' && real[i] != '\0')
L11 return 1;
L12 return 0;
L13 }
L14 int main()
L15 { char input[20];
L16 int times = 0;
L17 printf("请输入密码:
");
L18 while(1)
L19 { scanf("%s", input);
L20 times++;
L21 if(CheckPwd(input))
L22 { printf("密码正确!总共尝试 %d 次
", times);
L23 break;}
L24 else
L25 printf("密码错误,请重新输入:
");
L26 }
L27 return 0; }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第81卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①局部变量的作用域;②全局变量的作用域;③变量的存储方式;④自动变量;⑤静态局部变量;⑥寄存器变量;⑦外部变量。
湖南省《计算机应用类专业综合考纲百套卷》 第81卷
《计算机编程语言——C语言》
变量的作用域和变量的存储类别
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.设有如下代码,关于变量a和b的描述正确的是( )
int fun()
{ int a;
static int b;
a++;b++;
return a + b; }
A. a和b初始值均为 0
B. 多次调用fun,a的值会持续累加
C. 多次调用fun,b的值会持续累加
D. a和b的内存生命周期一致
【答案】C
【解析】a是 auto 局部变量,无初始化值随机,每次调用函数重新创建;b是静态局部变量,编译阶段初始化、默认值 0,内存常驻,函数调用结束不释放,多次调用值持续累加。
2.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void test()
{ static int x = 10;
x += 5;
printf("%d ", x);}
int main()
{ test();test();test();return 0;}
A. 15 15 15 B. 15 20 25 C. 10 15 20 D. 编译报错
【答案】B
【解析】静态局部变量仅第一次进入函数时初始化一次,后续调用不再执行初始化。第一次:10+5=15;第二次:15+5=20;第三次:20+5=25。
3.关于extern关键字,说法错误的是( )
A. extern用于声明外部已定义的全局变量
B. 使用extern声明变量时,不会重新分配内存
C. 被static修饰的全局变量,无法用extern跨文件引用
D. extern可以用来定义新的全局变量
【答案】D
【解析】extern是声明而非定义,仅告诉编译器变量在其他位置已定义,不分配内存;不能用extern定义变量。
4.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int f(int n)
{ static int s = 1;
s *= n;
return s;}
int main()
{ printf("%d ", f(2));
printf("%d", f(3));
return 0; }
A. 2 3 B. 2 6 C. 1 3 D. 2 2
【答案】B
【解析】静态变量s初始值 1;第一次调用:1*2=2;第二次调用沿用上次结果:2*3=6。
5.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int a = 10;
void func()
{ int a = 20;
printf("%d ", a);}
int main()
{ func();
printf("%d", a);
return 0; }
A. 10 20 B. 20 10 C. 20 20 D. 10 10
【答案】B
【解析】func 函数内局部变量a屏蔽全局变量,输出 20;main 函数内无同名局部变量,访问全局变量,输出 10。
6.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void count()
{ static int cnt = 0;
cnt++;
printf("%d ", cnt);}
int main()
{ int i;
for(i=0; i<3; i++)
count();
return 0;}
A. 0 0 0 B. 1 2 3 C. 1 1 1 D. 随机值
【答案】B
【解析】静态变量仅初始化一次,循环三次调用,cnt 依次自增为 1、2、3。
7.在函数嵌套调用场景中,内层代码块的局部变量,能否被外层函数访问( )
A. 可以直接访问
B. 不可以,作用域仅限自身代码块
C. 外层函数结束后才能访问
D. 静态变量可以访问,auto 变量不可以
【答案】B
【解析】块级局部变量作用域严格封闭,外层代码无法访问内层{}中定义的变量。
8.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int test()
{ static int a = 1;
a++;
return a;}
int main()
{ int b = test() + test();
printf("%d", b);
return 0;}
A. 3 B. 4 C. 5 D. 2
【答案】C
【解析】初始 a=1 → 第一次调用 a=2,第二次 a=3;2+3=5。
9.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int g = 100;
void test()
{ int g = 200;
{ int g = 300;
printf("%d ",g); }
printf("%d ",g);
}
int main()
{ test();printf("%d",g);return 0;}
A. 100 200 300 B. 300 200 100
C. 300 300 100 D. 200 300 100
【答案】B
【解析】内层块变量屏蔽外层同名变量,逐层屏蔽:代码块内访问 300,函数内访问 200,主函数访问全局变量 100。
10.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int a = 5;
void f()
{ a += 10;}
int main()
{int a = 20;f();printf("%d",a);return 0;}
A. 15 B. 20 C. 25 D. 30
【答案】B
【解析】main 函数内局部变量a屏蔽全局a;函数f操作的是全局a,不影响 main 内局部变量,最终输出 20。
11.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void show()
{static char ch = 'A';putchar(ch++);}
int main()
{ show(); show(); show(); return 0;}
A. AAA B. ABC C. ABCD D. 随机字符
【答案】B
【解析】静态字符变量初始为 'A',依次自增,三次调用输出 A、B、C。
12.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int x = 1;
void fun()
{ int x = 2;
{ int x = 3; x++;}
x++;}
int main()
{fun();printf("%d",x);return 0;}
A. 1 B. 2 C. 3 D. 4
【答案】A
【解析】函数内多层局部变量均屏蔽全局变量,所有自增操作都作用在局部变量上,全局x始终为 1。
13.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void fun()
{ static int i = 0;
i++;printf("%d",i);}
int main()
{ int k;
for(k=0;k<3;k++)fun();
return 0;}
A. 000 B. 111 C. 123 D. 随机值
【答案】C
【解析】静态局部变量仅初始化一次,循环三次调用,i 依次变为 1、2、3,输出 123。
14.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
int test()
{ static int num;
num += 2;return num;}
int main()
{ int i,sum=0;
for(i=0;i<3;i++) sum += test();
printf("%d",sum);
return 0;}
A. 6 B. 8 C. 12 D. 9
【答案】C
【解析】静态变量 num 默认值为 0,三次调用返回 2、4、6,累加和 2+4+6=12。
15.执行下列程序代码后,程序的输出结果是( )
#include <stdio.h>
void count()
{ static int cnt;
cnt++;printf("%d",cnt);}
int main()
{ int i=0;
while(i++<2) count();
return 0; }
A. 01 B. 12 C. 11 D. 22
【答案】B
【解析】while 循环执行 2 次,静态 cnt 初始为 0,两次自增后依次输出 1、2。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int global = 10;
void change(int n)
{ if(n>0)
{ global -= n;
change(n-1);
}
}
int main()
{ change(3);
printf("%d",global);
return 0;}
【答案】4
2.下列程序的运行结果是__________________。
#include <stdio.h>
void show(int k)
{ static int sum = 0;
sum += k;
if(k>1)
show(k-1);
printf("%d ",sum);
}
int main()
{ show(3);
return 0;}
【答案】6 6 6
3.下列程序的运行结果是__________________。
#include <stdio.h>
int f(int n)
{ static int s = 1;
while(n--)
s *= 2;
return s;}
int main()
{ printf("%d",f(1)+f(1));
return 0;}
【答案】6
4.下列程序的运行结果是__________________。
#include <stdio.h>
void add(int p)
{ static int total = 0;
total += p;
printf("%d ", total);}
int main()
{ int j = 2;
do
{ add(j);
j += 2;}while(j <= 6);
return 0;}
【答案】2 6 12
5.下列程序的运行结果是__________________。
#include <stdio.h>
int count(int n)
{ static int res = 0;
res += n % 2;
return res;}
int main()
{ int arr[] = {3,4,5,6};
int i;
for(i = 0; i < 4; i++)
count(arr[i]);
printf("%d", count(0));
return 0; }
【答案】2
6.下列程序的运行结果是__________________。
#include <stdio.h>
int num = 20;
void func(int flag)
{ if(flag)
{ int num = 5;
num -= 3; }
num += 5;}
int main()
{ int i;
for(i = 0; i < 2; i++) func(i);
printf("%d", num);
return 0;}
【答案】30
7.下列程序的运行结果是__________________。
#include <stdio.h>
int a = 6;
void f()
{ int a = 3;
a = a - 1;}
void g()
{ a = a / 2;}
int main()
{ f(); g();
printf("%d", a);
return 0;}
【答案】3
8.下列程序的运行结果是__________________。
#include <stdio.h>
void out()
{ int m = 1;
static int n = 1;
m++;
n += m;
printf("%d ", n);}
int main()
{ int i = 0;
while(i < 2)
{ out(); i++;}
return 0;}
【答案】3 5
9.下列程序的运行结果是__________________。
#include <stdio.h>
static int m = 4;
void sub(int n)
{ m = m - n;}
int main()
{ int i;
for(i = 1; i <= 2; i++)
{ sub(i);
if(m < 2)
break; }
printf("%d", m);
return 0;}
【答案】1
10.下列程序的运行结果是__________________。
#include <stdio.h>
extern int num;
void add()
{ num = num * 2;}
int main()
{ int i;
for(i = 0; i < 2; i++) add();
printf("%d", num);
return 0;}
int num = 3;
【答案】12
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.下列程序的功能是:接收用户输入一个非负整数,计算并输出该数的阶乘,同时统计阶乘函数的总调用次数。
#include <stdio.h>
int count = 0;
long long Fact(int n)
{ static int callCnt = 0;
int i;
long long res = 1;
callCnt++;
_________①_________
for(i = 1; i <= n; i++)
________②_______;
return res;
}
int main()
{ int num;
long long result;
printf("请输入一个非负整数:");
scanf("%d", &num);
if(num < 0)
{ printf("请输入合法非负整数!
");
return 0; }
__________③_________
printf("%d 的阶乘 = %lld
", num, result);
printf("函数累计被调用:%d 次
", count);
return 0; }
【答案】①count++; ② res *= i ③result = Fact(num);
2.下列程序的功能是:持续接收用户输入的若干整数,输入 - 1 结束程序,自动判断每个数是否为素数,最终统计并输出本次输入中素数的总个数。
#include <stdio.h>
static int primeNum = 0;
int IsPrime(int n)
{ register int i;
if(n <= 1) return 0;
for(i = 2; i * i <= n; i++)
{ if(_________①_________)
return 0;}
return 1;}
int main()
{ int val, flag;
printf("请输入整数(输入-1结束):
");
while(1)
{ scanf("%d", &val);
if(val == -1) ______②_______
_________③_________;
if(flag)
{ printf("%d 是素数
", val);
primeNum++; }
else
printf("%d 不是素数
", val);
}
printf("本次共输入 %d 个素数
", primeNum);
return 0; }
【答案】①n % i == 0 ②break; ③flag = IsPrime(val)
3.下列程序的功能是:输入一个正整数 n,求出斐波那契数列第 n 项的值,同时统计递归求解过程中函数执行的总次数。
#include <stdio.h>
int totalStep = 0;
int Fib(int n)
{ static int step = 0;
step++;
totalStep++;
if(________①________)
return 1;
____________②___________}
int main()
{ int n,ans;
printf("请输入斐波那契数列项数:");
scanf("%d", &n);
if(n < 1)
{ printf("输入不合法!
");
return 0;}
_________③_______;
printf("第 %d 项斐波那契数为:%d
", n, ans);
printf("递归总执行次数:%d
", totalStep);
return 0; }
【答案】①n == 1 || n == 2 ②return Fib(n-1) + Fib(n - 2);
③ans = Fib(n)
4.下列程序的功能是:循环接收用户输入的整数,输入 0 时结束程序,对每一个输入数字进行数位反转,输出反转结果并记录反转函数的调用次数。
#include <stdio.h>
int Reverse(int num)
{ int res = 0;
static int cnt = 0;
cnt++;
while(num != 0)
{ res = ________①_______
num = ________②_______ }
printf("反转函数第 %d 次调用
", cnt);
return res;}
int main()
{ int n, ret;
printf("输入数字(输入0退出):
");
while(1)
{ scanf("%d", &n);
if(_______③_______)
break;
ret = Reverse(n);
printf("反转结果:%d
", ret); }
return 0; }
【答案】①res * 10 + num % 10; ②num / 10; ③n == 0
5.下列程序的功能是:输入鸡和兔的总头数与总脚数,计算并输出鸡和兔子各自的数量,若无合法组合则提示无解。
#include <stdio.h>
void Calc(int head, int foot)
{ int chicken, rabbit;
if(foot % 2 != 0 || ____________①___________)
{ printf("无解
");
return;}
chicken = _________②_________
rabbit = _________③__________
printf("鸡:%d 只,兔子:%d 只
", chicken, rabbit);}
int main()
{ int h, f;
printf("请输入总头数、总脚数:");
scanf("%d%d", &h, &f);
Calc(h, f);
return 0;}
【答案】①foot < 2 * head || foot > 4 * head
②(4 * head - foot) / 2;
③head - chicken;
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是:实现 1~100 之间的猜数字小游戏,程序自动生成随机数字,玩家反复猜测,系统提示数字偏大或偏小,猜对后输出总共猜测的次数。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 #include <stdlib.h>
L3 #include <time.h>
L4 void GuessGame(int target)
L5 { static int times = 0;
L6 int num;
L7 printf("游戏开始,请猜1~100之间的数字:
");
L8 while(1)
L9 { scanf("%d", &num);
L10 times+1;
L11 if(num > target)
L12 printf("太大了,请继续猜:
");
L13 else if(num < target)
L14 printf("太小了,请继续猜:
");
L15 else
L16 { printf("恭喜你猜对了!一共猜了 %d 次
", times);
L17 continue; }
L18 }
L19 }
L20 int main()
L21 { int randNum;
L22 srand((unsigned int)time(NULL));
L23 randNum = rand() % 100 + 1;
L24 GuessGame(randNum);
L25 return 0;}
【答案】①L10 times++;
②L17 break; }
2.下列程序的功能是:输入一个十进制整数,将其转换为对应的二进制形式并完整输出。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 char bin[100];
L3 void DecToBin(int n)
L4 { int i = 0;
L5 if(n == 0)
L6 bin[i] = '0';
L7 while(n > 0)
L8 { bin[i++] = n % 2 +'0;
L9 n = n / 2;}
L10 bin[i] = '\0';
L11 }
L12 int main()
L13 { int num,j,len;
L14 printf("请输入十进制整数:");
L15 scanf("%d", &num);
L16 DecToBin(num);
L17 len = 0;
L18 while(bin[len] != '\0')
L19 len++;
L20 printf("对应二进制:");
L21 for(j = len ; j >= 0; j--)
L22 printf("%c", bin[j]);
L23 return 0; }
【答案】①L6 bin[i++] = '0';
②L8 { bin[i++] = n % 2 + '0';
③L21 for(j = len - 1; j >= 0; j--)
3.下列程序的功能是:输入两个年份作为区间范围,筛选并输出该区间内所有闰年,同时统计区间内闰年的总数量。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int IsLeap(int year)
L3 { if((year % 4 == 0 || year % 100 != 0) && (year % 400 == 0))
L4 return 1;
L5 return 0;}
L6 int main()
L7 { int start, end, y;
L8 static int leapCnt = 0;
L9 printf("输入起始年份、结束年份:");
L10 scanf("%d%d", &start, &end);
L11 printf("区间内闰年:
");
L12 for(y = start; y <= end; y++)
L13 { if(IsLeap(y)==0)
L14 { printf("%d ", y);
L15 leapCnt++;
L16 }
L17 }
L18 printf("
闰年总个数:%d
", leapCnt);
L19 return 0;}
【答案】①L3 { if((year%4==0&&year%100!=0)||(year % 400 == 0))
②L13 { if(IsLeap(y)) 或 { if(IsLeap(y)==1)
4.下列程序的功能是:模拟密码登录验证,用户可反复输入密码,直到输入正确为止,最终统计并输出密码输入的总次数。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int CheckPwd(char pwd[])
L3 { char real[] = "123456";
L4 int i = 1;
L5 while(pwd[i] != '\0' && real[i] != '\0')
L6 { if(pwd[i] == real[i])
L7 return 0;
L8 i++;
L9 }
L10 if(pwd[i] != '\0' && real[i] != '\0')
L11 return 1;
L12 return 0;
L13 }
L14 int main()
L15 { char input[20];
L16 int times = 0;
L17 printf("请输入密码:
");
L18 while(1)
L19 { scanf("%s", input);
L20 times++;
L21 if(CheckPwd(input))
L22 { printf("密码正确!总共尝试 %d 次
", times);
L23 break;}
L24 else
L25 printf("密码错误,请重新输入:
");
L26 }
L27 return 0; }
【答案】①L4 int i = 0;
②L6 { if(pwd[i] != real[i])
③L10 if(pwd[i] == '\0' && real[i] == '\0')
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$