内容正文:
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(九)解析版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 下列关于C语言程序开发过程的描述中,正确的是( )
A. 编写源程序 → 编译 → 连接 → 运行
B. 编写源程序 → 连接 → 编译 → 运行
C. 编译 → 编写源程序 → 连接 → 运行
D. 编写源程序 → 运行 → 编译 → 连接
答案:A
解析:运行C程序的完整步骤:编写源程序 → 编译 → 连接 → 运行。
2. 智能手环监测用户睡眠时,需要存储深度睡眠时长(精确到毫秒),最适合的数据类型是( )
A. int B. float C. double D. char
答案:C
解析:double类型精度更高,适合存储需要精确到毫秒的时间数据。
3. 以下关于常量和变量的描述中,错误的是( )
A. 在程序运行过程中,变量的值可以改变
B. 使用const关键字定义的常量在程序运行期间不能改变
C. #define定义的符号常量有类型检查
D. 常量在定义时必须初始化
答案:C
解析:#define定义的符号常量没有类型检查,const定义的常量有类型检查。
4. 以下赋值语句中,正确的是( )
A. x + y = 10; B. 3 = x;
C. int x = 10, y = x * 2; D.int x = y = z = 0;
答案:C
解析:不能给常量和表达式赋值,A、B不对;变量要先定义后使用,D选项不对。
5. 设计一个简单的体温登记程序,要求输入姓名和体温,以下输入语句正确的是( )
A. scanf("%s %f", name, &temperature);
B. scanf("%s %d", name, temperature);
C. scanf("%c %f", name, &temperature);
D. scanf("%s %f", &name, &temperature);
答案:A
解析:姓名需要用字符串(%s)输入,浮点数需要&取地址符
6. 某电商平台对一单商品进行最终金额结算。已知该商品原价为 price 元,平台满减优惠为 discount 元,运费为 shipping 元。此外,该订单满足一项运费减免条件,即:如果商品优惠后的价格不低于 50 元,则免运费,否则需支付运费。
以下哪个选项能够正确且简洁地表示该订单的最终支付金额( )
A. price - discount + shipping
B. price - discount - shipping
C. (price - discount >= 50) ? (price - discount) : (price - discount + shipping)
D. price - (discount + shipping)
答案:C
解析:题目中运费是否收取取决于优惠后的价格是否达到 50 元,这属于条件判断。
7. 判断健康码状态:体温temperature正常(<37.3)且行程码status为0(安全)才能进入,则表达式为( )
A. temperature < 37.3 && status == 0 B. temperature < 37.3 || status == 0
C. temperature < 37.3 && status = 0 D. temperature < 37.3 || status = 0
答案:A
解析:体温正常和行程码为0 需要同时满足,所以需要用&&。
8. 共享单车计费规则:前30分钟1.5元,之后每15分钟0.5元。设骑行时间t(分钟),费用cost计算代码段正确的是( )
A. if(t <= 30) cost = 1.5;
else cost = 1.5 + 0.5 * t / 15;
B. if(t <= 30) cost = 1.5;
else cost = 1.5 + 0.5 * (t - 30 / 15);
C. if(t < 30) cost = 1.5;
else cost = 0.5 * ((t - 30) / 15);
D. if(t <= 30) cost = 1.5;
else cost = 1.5 + 0.5 * ((t - 30) / 15);
答案:D
解析:收费分为两段,小于30分钟,和大于30分钟的情况,所以用if语句。之后的每15分钟0.5元,所以要扣除前30分钟的时间。
9. 根据学生成绩等级计算成绩点:A-4.0, B-3.0, C-2.0, D-1.0, F-0.0,正确的是( )
A. switch(grade) {
case 'A': gpa = 4.0; break;
case 'B': gpa = 3.0; break;
case 'C': gpa = 2.0; break;
case 'D': gpa = 1.0; break;
default: gpa = 0.0;
}
B. switch(grade) {
case "A": gpa = 4.0;
case "B": gpa = 3.0;
case "C": gpa = 2.0;
case "D": gpa = 1.0;
default: gpa = 0.0;
}
C. switch(grade) {
case A: gpa = 4.0; break;
case B: gpa = 3.0; break;
case C: gpa = 2.0; break;
case D: gpa = 1.0; break;
default: gpa = 0.0;
}
D. switch(grade) {
case 'A': gpa = 4.0;
case 'B': gpa = 3.0;
case 'C': gpa = 2.0;
case 'D': gpa = 1.0;
default: gpa = 0.0;
}
答案:A
解析:switch语句要求:case标号后的表达式是整型数(包括字符型)或是整型常量表达式。不能使用变量作为case标号,每个case常量表达式的值必须互不相同。所以B、C选项不对。D选项中没有加break,不符合题意。
10.智能家居系统监测室内温度,当温度超过30度时持续报警,代码正确的是( )
A. while(temperature > 30) {
printf("温度过高!
");
temperature--; // 假设温度会下降
}
B. while(temperature > 30); {
printf("温度过高!
");
}
C. while(temperature > 30)
printf("温度过高!
");
D. while(temperature < 30) {
printf("温度过高!
");
}
答案:C
解析:A选项不能实现持续报警,B选项表达式后边不能有“;”,D选项的表达式是温度低于30度时报警。
11.线上考试系统要求至少完成一道题才能交卷,对此编程代码正确的是( )
A. do {
printf("请完成至少一道题
");
finished = check_finished();
} while(finished == 0);
B. do
printf("请完成至少一道题
");
finished = check_finished();
while(finished == 0);
C. while(finished == 0) do {
printf("请完成至少一道题
");
finished = check_finished();
}
D. do {
printf("请完成至少一道题
");
finished = check_finished();
} while(finished = 0);
答案:D
解析:B选项中do...while循环的格式不对,没有加{};B选项的格式不对,while(finished==0)应在右‘}’后边;D选项表达式应为关系表达式finished==0。
12. 以下程序为统计一周7天的步数总和,代码正确的是( )
A. for(i = 0; i <= 7; i++) {
total += steps[i];
}
B. for(i = 1; i < 7; i++) {
total += steps[i];
}
C. for(i = 0; i < 7; i++) {
total += steps[i];
}
D. for(i = 1; i <= 7; i++) {
total -= steps[i];
}
答案:C
解析:数组下标从0开始,i<7正好遍历7个元素,所以C选项是正确的。D选项中total -= steps[i];不对。
13. 在有序数组中查找某个值,找到后立即退出循环,正确的是( )
A. for(i = 0; i < n; i++) {
if(arr[i] == target) continue;
}
B. for(i = 0; i < n; i++) {
if(arr[i] == target) break;
}
C. for(i = 0; i < n; i++) {
if(arr[i] == target) return;
}
D. for(i = 0; i < n; i++) {
if(arr[i] == target) exit(0);
}
答案:B
解析:在C语言中结束循环的语句是break语句。
14. 下面程序功能为统计数组中正数的个数,遇到负数跳过,正确的是( )
A. for(i = 0; i < n; i++) {
if(arr[i] <= 0) break;
count++;
}
B. for(i = 0; i < n; i++) {
if(arr[i] <= 0) continue;
count++;
}
C. for(i = 0; i < n; i++) {
if(arr[i] <= 0) return;
count++;
}
D. for(i = 0; i < n; i++) {
if(arr[i] > 0) continue;
count++;
}
答案:B
解析:continue跳过当前循环的剩余部分,继续下一次循环
15. 设j为int型变量,则下面for循环语句的执行结果是( )。
for (j = 10; j > 3; j --)
{if (j % 3)j--;
--j; --j;
printf ("%d ", j);
}
A.6 3 B.7 4 C.6 2 D.7 3
答案:B
解析:第一轮循环(初始 j=10):条件 j > 3成立,进入循环体。if (j % 3):10 % 3 = 1(真),执行j--,此时j = 9。执行--j,j = 8。执行--j,j = 7。输出j:7。循环体结束,执行for的j--,j = 6。第二轮循环(当前 j=6):条件j > 3成立,进入循环体。if (j % 3):6 % 3 = 0(假),不执行 j--,j仍为 6。执行 --j,j = 5。执行 --j,j = 4。输出 j:4。循环体结束,执行 for 的 j--,j = 3。第三轮循环(当前 j=3):条件 j > 3 不成立,循环结束。最终输出:7 4
16. 以下关于一维数组的描述中,正确的是( )
A. int arr[]; 是合法的数组声明 B. int arr[5] = {1,2,3,4,5,6}; 是合法的初始化
C. 数组下标从1开始 D. 数组名代表数组的首地址
答案:D
解析:数组下标从0开始,定义数组时不进行初始话时需要指明数组的长度,数组初始化的赋值个数不能超过数组长度。
17.定义一个3行4列的二维数组以下正确的是( )
A. int scores[3][4]; B. int scores[3,4];
C. int scores[4][3]; D. int scores(3)(4);
答案:A
解析:B、C格式不对,C选项是4行3列。
18. 要存储身份证号码(18位数字加1位校验码),以下定义正确的是( )
A. char id[18]; B. char id[19];
C. char id[20]; D. char id[] = "身份证号码";
答案:B
解析:身份证号属于字符串,字符串存储时需要考虑’\0’,题干中要求加1位校验码,所以数组定义至少为20。
19.对以下程序,正确的说法是( )
#include<stdio.h>
sub (char x,char y)
{int z;
z=x%y;
return z;
}
main()
{ int g=5,h=3,k;
k=sub(g,h);
printf("%d
",k); }
A. 实参与其对应的形参类型不一致,程序不能运行
B. 被调函数缺少数据类型说明,程序不能运行
C. 主函数中缺少对被调函数的说明语句,程序不能运行
D. 程序中没有错误,可以正常运行
答案:D
解析:程序定义了一个返回类型默认为int的函数sub,形参为char类型,主函数调用时传递int类型的实参,会进行隐式类型转换。函数定义在main之前,无需额外声明。
20. 请阅读程序:
#include <stdio.h>
f(int b[], int n)
{ int i, r=1;
for(i=0; i<=n; i++)
r=r*b[i];
return r;
}
main()
{int x,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%d
",x);
}
上面程序的输出结果是( )
A. 720 B. 120 C. 24 D. 6
答案:B
解析:调用f(a,3)计算a[0]到a[3]的乘积,即2*3*4*5 = 120,并将结果赋值给x,最后输出x的值。输出结果:120。
21. 若函数调用时用数组名作为函数参数,以下叙述中,不正确的是( )
A. 实参与其对应的形参共占用同一段存储空间
B. 实参将其地址传递给形参,结果等同于实现了参数之间的双向值传递
C. 实参与其对应的形参分别占用不同的存储空间
D. 在调用函数中必须说明数组的大小,但在被调函数中可以使用不定尺寸数组
答案:C
解析:A正确。数组名作为参数时传递的是数组首地址,形参通过该地址访问实参数组,二者共享同一段存储空间。B正确。传递地址使得被调函数能修改实参数组的内容,实现了类似双向传递的效果。C 错误。实参数组与形参(指针)共享数组存储空间,并不是“分别占用不同的存储空间”。D 正确。主调函数中定义数组需指定大小,而被调函数的形参数组可以不指定大小。
22.以下叙述中,不正确的是( )
A. 使用static float a定义的外部变量存放在内存中的静态存储区
B. 使用float b定义的外部变量存放在内存中的动态存储区
C. 使用static float c定义的内部变量存放在内存中的静态存储区
D. 使用float d定义的内部变量存放在内存中的动态存储区
答案:B
解析:在C语言中,变量的存储类别决定了其存储位置:
外部变量(即全局变量) 总是存储在静态存储区,无论是否用 static 修饰。static 修饰全局变量时,仅改变其作用域,不改变存储位置。
23.以下程序的输出结果是( )
#include <stdio.h>
int a,b;
void fun()
{ a=100;b=200;}
main()
{int a=5,b=7;
fun();
printf("%d %d
",a,b);
}
A. 100200 B. 57 C. 200100 D. 75
答案:B
解析:main函数中定义了局部变量a=5和b=7。调用fun()函数,该函数将全局变量a和b分别修改为 100 和 200。但main函数中打印的是局部变量a和b,它们的值并未被fun()改变。
24. 设有以下说明语句:
struct stu
{ int a;
float b;
} stutype;
则下面的叙述不正确的是( )。
A.struct 是结构体类型的关键字 B.struct stu 是用户定义的结构体类型
C.stutype 是用户定义的结构体类型名 D.a和b都是结构体成员名
答案:C
解析:stutype 是用户定义的结构体变量名。
25. 以下关于指针的描述,正确的是( )
A. 指针变量存储的是变量的值 B. int *p; *p = 10; 是安全的
C. 指针的类型必须与所指变量的类型一致 D. 指针可以指向任意内存地址而不受限制
答案:C
解析:A错误。指针变量存储的是内存地址,而不是变量的值。B错误。指针 p未初始化,其值是未知的(野指针)。直接对 *p 赋值会导致未定义行为,可能引发程序崩溃。C正确。C语言要求指针类型与其指向的数据类型一致。D错误。指针只能指向程序有权访问的内存地址。随意指向系统保护区域或非法地址会导致访问违规。
二、简答题(共3小题,每题5分,共15分)
1. 阅读以下程序,写出运行结果(智能家居温度控制系统):
#include <stdio.h>
main() {
int temperature[] = {25, 26, 28, 30, 29, 27, 26};
int i, count = 0;
float sum = 0;
for(i = 0; i < 7; i++) {
sum += temperature[i];
if(temperature[i] > 28) {
printf("第%d天温度过高: %d℃
", i+1, temperature[i]);
count++;
}
}
printf("平均温度: %.1f℃
", sum/7);
printf("超过28℃的天数: %d
", count);
}
答案:
第4天温度过高: 30℃
第5天温度过高: 29℃
平均温度: 27.3℃
超过28℃的天数: 2
2. 下列程序执行后的输出结果是( )。
#include<stdio.h>
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3)
{i+=2;func2(i);}
}
void func2(int i)
{
printf("%c",st[i]);
if(i<3)
{
i+=2;func1(i);
}
}
main()
{ int i=0;
func1(i);
printf("
");
}
答案:hlo
3. 阅读下面程序,写出运行结果。
#include<stdio.h>
int sub (int *a,int n,int k);
main()
{ int x=0;
sub(&x,8,1);
printf("%d
",x);
}
sub(int *a,int n,int k)
{ if(k<=n)
sub(a,n/2,2*k);
*a+=k;
}
答案:7
三、案例分析题(共3小题,每题5分,共15分)
1. 以下程序功能:根据重量和距离计算快递费用。100公里以内10元,500公里以内每公里加收0.5元,500公里以上每公里加收0.8元。首重5公斤按距离收取快递费用,续重每公斤加收1.2元。请找出程序中的错误并改正。
#include <stdio.h>
#define BASE_PRICE 10.0
#define RATE 0.5
float calculate_fee(float weight, int distance);
main() {
float weight;
int distance;
float fee;
printf("请输入包裹重量(kg): ");
scanf("%f", weight);
printf("请输入距离(km): ");
scanf("%d", &distance);
fee = calculate_fee(weight, distance);
printf("快递费用: %.2f元
", fee);
}
float calculate_fee(float w, int d)
{
float fee;
if (d < 100) {
fee = BASE_PRICE;
}
else if (d >= 100 && d < 500) {
fee = BASE_PRICE + (d - 100) * RATE;
}
else {
fee = BASE_PRICE + 400 * RATE + (d - 500) *0.5 * 0.8;
}
if (w > 5) {
fee = fee+(w-5)* 1.2;
}
return w;
}
答案:
①scanf("%f", weight);应改为scanf("%f", &weight);
②fee = BASE_PRICE + 400 * RATE + (d - 500) *0.5 * 0.8;应改为fee = BASE_PRICE + 400 * RATE + (d - 500) * 0.8;
③return w;应改为return fee;
2. 以下程序功能:根据骑行时间计算共享单车的骑行费用。前30分钟收费1.5元,30分钟以上每15分钟(不到15分钟的按15分钟计算)收费1元。请将程序补充完整。
#include <stdio.h>
main() {
int minutes;
float cost = 0;
printf("请输入骑行时间(分钟): ");
scanf("%d", &minutes);
if (minutes <= 30) {
cost = 1.5;
}
else {
int extra_units = ① ;
cost = ② ;
}
printf("骑行%d分钟,费用为: %.2f元
", minutes, cost);
}
答案:① (minutes - 30 + 14) / 15 ②1.5+extra_units*1
3. 程序功能:从键盘上输入两个正整数x,y,求它们的最大公约数。请将程序补充完整。
例如:如果从键盘上输入24,36,
程序的输出应为:max is : 12.
#include <stdio.h>
main()
{ int x,y,t,i;
printf("Please enter two numbers:");
scanf("%d%d",&x,&y);
if(x<y)
{t = x; ① ; y= t;}
t = x%y;
while(t)
{ x = y;
y=t;
t = x%y;
}
printf("max is :%d
", ② );
}
答案: ①x=y ②y
四、综合应用题(共2小题,每题10分,共20分)
1.编写一个程序,根据用户的体温和行程码状态判断是否可以进入公共场所。
要求:
① 输入体温(浮点数)和行程码状态(0表示安全,1表示有风险)
② 判断规则:体温<37.3且行程码状态为0,可以进入;否则不能进入
③ 输出相应的提示信息
答案:
参考程序:
#include <stdio.h>
int main() {
float temperature;
int travel_code;
printf("请输入体温(℃): ");
scanf("%f", &temperature);
printf("请输入行程码状态(0-安全, 1-有风险): ");
scanf("%d", &travel_code);
if(temperature < 37.3 && travel_code == 0) {
printf("体温正常,行程码安全,可以进入!
");
} else {
printf("抱歉,不能进入。原因:
");
if(temperature >= 37.3) {
printf("- 体温异常(%.1f℃≥37.3℃)
", temperature);
}
if(travel_code != 0) {
printf("- 行程码有风险
");
}
}
}
2. 中国有句俗语叫“三天打鱼两天晒网”。张三从2025年1月1日起开始“三天打鱼两天晒网”,问张三在以后的某一天中是“打鱼”还是“晒网”。
参考程序:
#include <stdio.h>
int isLeapYear(int year);
int daysInMonth(int year, int month);
int calculateDays(int year, int month, int day);
void checkActivity(int totalDays);
main() {
int year, month, day;
printf("请输入日期(年 月 日,用空格分隔):");
scanf("%d %d %d", &year, &month, &day);
// 计算从2025年1月1日到输入日期的天数
int totalDays = calculateDays(year, month, day);
// 检查日期是否有效(应为2025年1月1日或之后)
if (totalDays < 0) {
printf("请输入2025年1月1日或之后的日期!
");
return 1;
}
checkActivity(totalDays);
}
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取某年某月的天数
int daysInMonth(int year, int month) {
int days;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
days = isLeapYear(year) ? 29 : 28;
break;
default:
days = 0; // 无效月份
}
return days;
}
// 计算从2025年1月1日到指定日期的总天数
int calculateDays(int year, int month, int day) {
int totalDays = 0;
int i;
// 检查日期有效性
if (year < 2025) {
return -1; // 日期在2025年之前
}
if (year == 2025 && month == 1 && day == 1) {
return 0; // 正好是2025年1月1日
}
// 检查日期是否合法
if (month < 1 || month > 12 || day < 1 || day > daysInMonth(year, month)) {
return -1; // 无效日期
}
// 计算整年的天数
for (i = 2025; i < year; i++) {
totalDays += isLeapYear(i) ? 366 : 365;
}
// 计算当年的天数(从1月1日到指定日期的前一天)
for (i = 1; i < month; i++) {
totalDays += daysInMonth(year, i);
}
// 加上当月的天数(减去1,因为我们是从2025年1月1日开始算的)
totalDays += day - 1;
return totalDays;
}
// 根据总天数判断是打鱼还是晒网
void checkActivity(int totalDays) {
// 计算在周期中的位置(5天一个周期)
int position = totalDays % 5;
// 判断:前3天打鱼,后2天晒网
if (position < 3) {
printf("这一天是:打鱼
");
} else {
printf("这一天是:晒网
");
}
printf("从2025年1月1日开始,已经过了 %d 天
", totalDays);
printf("在5天周期中的第 %d 天(0表示第一天)
", position + 1);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(九)原卷版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 下列关于C语言程序开发过程的描述中,正确的是( )
A. 编写源程序 → 编译 → 连接 → 运行
B. 编写源程序 → 连接 → 编译 → 运行
C. 编译 → 编写源程序 → 连接 → 运行
D. 编写源程序 → 运行 → 编译 → 连接
2. 智能手环监测用户睡眠时,需要存储深度睡眠时长(精确到毫秒),最适合的数据类型是( )
A. int B. float C. double D. char
3. 以下关于常量和变量的描述中,错误的是( )
A. 在程序运行过程中,变量的值可以改变
B. 使用const关键字定义的常量在程序运行期间不能改变
C. #define定义的符号常量有类型检查
D. 常量在定义时必须初始化
4. 以下赋值语句中,正确的是( )
A. x + y = 10; B. 3 = x;
C. int x = 10, y = x * 2; D.int x = y = z = 0;
5. 设计一个简单的体温登记程序,要求输入姓名和体温,以下输入语句正确的是( )
A. scanf("%s %f", name, &temperature);
B. scanf("%s %d", name, temperature);
C. scanf("%c %f", name, &temperature);
D. scanf("%s %f", &name, &temperature);
6. 某电商平台对一单商品进行最终金额结算。已知该商品原价为 price 元,平台满减优惠为 discount 元,运费为 shipping 元。此外,该订单满足一项运费减免条件,即:如果商品优惠后的价格不低于 50 元,则免运费,否则需支付运费。
以下哪个选项能够正确且简洁地表示该订单的最终支付金额( )
A. price - discount + shipping
B. price - discount - shipping
C. (price - discount >= 50) ? (price - discount) : (price - discount + shipping)
D. price - (discount + shipping)
7. 判断健康码状态:体温temperature正常(<37.3)且行程码status为0(安全)才能进入,则表达式为( )
A. temperature < 37.3 && status == 0 B. temperature < 37.3 || status == 0
C. temperature < 37.3 && status = 0 D. temperature < 37.3 || status = 0
8. 共享单车计费规则:前30分钟1.5元,之后每15分钟0.5元。设骑行时间t(分钟),费用cost计算代码段正确的是( )
A. if(t <= 30) cost = 1.5;
else cost = 1.5 + 0.5 * t / 15;
B. if(t <= 30) cost = 1.5;
else cost = 1.5 + 0.5 * (t - 30 / 15);
C. if(t < 30) cost = 1.5;
else cost = 0.5 * ((t - 30) / 15);
D. if(t <= 30) cost = 1.5;
else cost = 1.5 + 0.5 * ((t - 30) / 15);
9. 根据学生成绩等级计算成绩点:A-4.0, B-3.0, C-2.0, D-1.0, F-0.0,正确的是( )
A. switch(grade) {
case 'A': gpa = 4.0; break;
case 'B': gpa = 3.0; break;
case 'C': gpa = 2.0; break;
case 'D': gpa = 1.0; break;
default: gpa = 0.0;
}
B. switch(grade) {
case "A": gpa = 4.0;
case "B": gpa = 3.0;
case "C": gpa = 2.0;
case "D": gpa = 1.0;
default: gpa = 0.0;
}
C. switch(grade) {
case A: gpa = 4.0; break;
case B: gpa = 3.0; break;
case C: gpa = 2.0; break;
case D: gpa = 1.0; break;
default: gpa = 0.0;
}
D. switch(grade) {
case 'A': gpa = 4.0;
case 'B': gpa = 3.0;
case 'C': gpa = 2.0;
case 'D': gpa = 1.0;
default: gpa = 0.0;
}
10.智能家居系统监测室内温度,当温度超过30度时持续报警,代码正确的是( )
A. while(temperature > 30) {
printf("温度过高!
");
temperature--; // 假设温度会下降
}
B. while(temperature > 30); {
printf("温度过高!
");
}
C. while(temperature > 30)
printf("温度过高!
");
D. while(temperature < 30) {
printf("温度过高!
");
}
11.线上考试系统要求至少完成一道题才能交卷,对此编程代码正确的是( )
A. do {
printf("请完成至少一道题
");
finished = check_finished();
} while(finished == 0);
B. do
printf("请完成至少一道题
");
finished = check_finished();
while(finished == 0);
C. while(finished == 0) do {
printf("请完成至少一道题
");
finished = check_finished();
}
D. do {
printf("请完成至少一道题
");
finished = check_finished();
} while(finished = 0);
12. 以下程序为统计一周7天的步数总和,代码正确的是( )
A. for(i = 0; i <= 7; i++) {
total += steps[i];
}
B. for(i = 1; i < 7; i++) {
total += steps[i];
}
C. for(i = 0; i < 7; i++) {
total += steps[i];
}
D. for(i = 1; i <= 7; i++) {
total -= steps[i];
}
13. 在有序数组中查找某个值,找到后立即退出循环,正确的是( )
A. for(i = 0; i < n; i++) {
if(arr[i] == target) continue;
}
B. for(i = 0; i < n; i++) {
if(arr[i] == target) break;
}
C. for(i = 0; i < n; i++) {
if(arr[i] == target) return;
}
D. for(i = 0; i < n; i++) {
if(arr[i] == target) exit(0);
}
14. 下面程序功能为统计数组中正数的个数,遇到负数跳过,正确的是( )
A. for(i = 0; i < n; i++) {
if(arr[i] <= 0) break;
count++;
}
B. for(i = 0; i < n; i++) {
if(arr[i] <= 0) continue;
count++;
}
C. for(i = 0; i < n; i++) {
if(arr[i] <= 0) return;
count++;
}
D. for(i = 0; i < n; i++) {
if(arr[i] > 0) continue;
count++;
}
15. 设j为int型变量,则下面for循环语句的执行结果是( )。
for (j = 10; j > 3; j --)
{if (j % 3)j--;
--j; --j;
printf ("%d ", j);
}
A.6 3 B.7 4 C.6 2 D.7 3
16. 以下关于一维数组的描述中,正确的是( )
A. int arr[]; 是合法的数组声明 B. int arr[5] = {1,2,3,4,5,6}; 是合法的初始化
C. 数组下标从1开始 D. 数组名代表数组的首地址
17.定义一个3行4列的二维数组以下正确的是( )
A. int scores[3][4]; B. int scores[3,4];
C. int scores[4][3]; D. int scores(3)(4);
18. 要存储身份证号码(18位数字加1位校验码),以下定义正确的是( )
A. char id[18]; B. char id[19];
C. char id[20]; D. char id[] = "身份证号码";
19.对以下程序,正确的说法是( )
#include<stdio.h>
sub (char x,char y)
{int z;
z=x%y;
return z;
}
main()
{ int g=5,h=3,k;
k=sub(g,h);
printf("%d
",k); }
A. 实参与其对应的形参类型不一致,程序不能运行
B. 被调函数缺少数据类型说明,程序不能运行
C. 主函数中缺少对被调函数的说明语句,程序不能运行
D. 程序中没有错误,可以正常运行
20. 请阅读程序:
#include <stdio.h>
f(int b[], int n)
{ int i, r=1;
for(i=0; i<=n; i++)
r=r*b[i];
return r;
}
main()
{int x,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%d
",x);
}
上面程序的输出结果是( )
A. 720 B. 120 C. 24 D. 6
21. 若函数调用时用数组名作为函数参数,以下叙述中,不正确的是( )
A. 实参与其对应的形参共占用同一段存储空间
B. 实参将其地址传递给形参,结果等同于实现了参数之间的双向值传递
C. 实参与其对应的形参分别占用不同的存储空间
D. 在调用函数中必须说明数组的大小,但在被调函数中可以使用不定尺寸数组
22.以下叙述中,不正确的是( )
A. 使用static float a定义的外部变量存放在内存中的静态存储区
B. 使用float b定义的外部变量存放在内存中的动态存储区
C. 使用static float c定义的内部变量存放在内存中的静态存储区
D. 使用float d定义的内部变量存放在内存中的动态存储区
23.以下程序的输出结果是( )
#include <stdio.h>
int a,b;
void fun()
{ a=100;b=200;}
main()
{int a=5,b=7;
fun();
printf("%d %d
",a,b);
}
A. 100200 B. 57 C. 200100 D. 75
24. 设有以下说明语句:
struct stu
{ int a;
float b;
} stutype;
则下面的叙述不正确的是( )。
A.struct 是结构体类型的关键字 B.struct stu 是用户定义的结构体类型
C.stutype 是用户定义的结构体类型名 D.a和b都是结构体成员名
25. 以下关于指针的描述,正确的是( )
A. 指针变量存储的是变量的值 B. int *p; *p = 10; 是安全的
C. 指针的类型必须与所指变量的类型一致 D. 指针可以指向任意内存地址而不受限制
二、简答题(共3小题,每题5分,共15分)
1. 阅读以下程序,写出运行结果(智能家居温度控制系统):
#include <stdio.h>
main() {
int temperature[] = {25, 26, 28, 30, 29, 27, 26};
int i, count = 0;
float sum = 0;
for(i = 0; i < 7; i++) {
sum += temperature[i];
if(temperature[i] > 28) {
printf("第%d天温度过高: %d℃
", i+1, temperature[i]);
count++;
}
}
printf("平均温度: %.1f℃
", sum/7);
printf("超过28℃的天数: %d
", count);
}
2. 下列程序执行后的输出结果是( )。
#include<stdio.h>
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3)
{i+=2;func2(i);}
}
void func2(int i)
{
printf("%c",st[i]);
if(i<3)
{
i+=2;func1(i);
}
}
main()
{ int i=0;
func1(i);
printf("
");
}
3. 阅读下面程序,写出运行结果。
#include<stdio.h>
int sub (int *a,int n,int k);
main()
{ int x=0;
sub(&x,8,1);
printf("%d
",x);
}
sub(int *a,int n,int k)
{ if(k<=n)
sub(a,n/2,2*k);
*a+=k;
}
三、案例分析题(共3小题,每题5分,共15分)
1. 以下程序功能:根据重量和距离计算快递费用。100公里以内10元,500公里以内每公里加收0.5元,500公里以上每公里加收0.8元。首重5公斤按距离收取快递费用,续重每公斤加收1.2元。请找出程序中的错误并改正。
#include <stdio.h>
#define BASE_PRICE 10.0
#define RATE 0.5
float calculate_fee(float weight, int distance);
main() {
float weight;
int distance;
float fee;
printf("请输入包裹重量(kg): ");
scanf("%f", weight);
printf("请输入距离(km): ");
scanf("%d", &distance);
fee = calculate_fee(weight, distance);
printf("快递费用: %.2f元
", fee);
}
float calculate_fee(float w, int d)
{
float fee;
if (d < 100) {
fee = BASE_PRICE;
}
else if (d >= 100 && d < 500) {
fee = BASE_PRICE + (d - 100) * RATE;
}
else {
fee = BASE_PRICE + 400 * RATE + (d - 500) *0.5 * 0.8;
}
if (w > 5) {
fee = fee+(w-5)* 1.2;
}
return w;
}
2. 以下程序功能:根据骑行时间计算共享单车的骑行费用。前30分钟收费1.5元,30分钟以上每15分钟(不到15分钟的按15分钟计算)收费1元。请将程序补充完整。
#include <stdio.h>
main() {
int minutes;
float cost = 0;
printf("请输入骑行时间(分钟): ");
scanf("%d", &minutes);
if (minutes <= 30) {
cost = 1.5;
}
else {
int extra_units = ① ;
cost = ② ;
}
printf("骑行%d分钟,费用为: %.2f元
", minutes, cost);
}
3. 程序功能:从键盘上输入两个正整数x,y,求它们的最大公约数。请将程序补充完整。
例如:如果从键盘上输入24,36,
程序的输出应为:max is : 12.
#include <stdio.h>
main()
{ int x,y,t,i;
printf("Please enter two numbers:");
scanf("%d%d",&x,&y);
if(x<y)
{t = x; ① ; y= t;}
t = x%y;
while(t)
{ x = y;
y=t;
t = x%y;
}
printf("max is :%d
", ② );
}
四、综合应用题(共2小题,每题10分,共20分)
1.编写一个程序,根据用户的体温和行程码状态判断是否可以进入公共场所。
要求:
① 输入体温(浮点数)和行程码状态(0表示安全,1表示有风险)
② 判断规则:体温<37.3且行程码状态为0,可以进入;否则不能进入
③ 输出相应的提示信息
2. 中国有句俗语叫“三天打鱼两天晒网”。张三从2025年1月1日起开始“三天打鱼两天晒网”,问张三在以后的某一天中是“打鱼”还是“晒网”。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$