内容正文:
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(二)解析版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 以下选项中,是合法的C语言标识符的是( )
A. 2a B. case C. _abc D. a+b
答案:C
解析:C语言标识符只能由字母、数字和下划线组成,且不能以数字开头。A以数字开头,B是关键字,D含有加号,均不合法。
2. C语言源程序的基本单位是( )
A. 过程 B. 函数 C. 子程序 D. 标识符
答案:B
解析:C语言源程序由函数组成,函数是C程序的基本单位。
3. 以下程序的输出结果为( )
#include<stdio.h>
main( )
{int a=0,b=0;
a=10; /*给a赋值x/
b=10; /*给b赋值*/
printf(“a+b=%d
”,a+b); /*输出计算结果*/
A.a+b=0 B. a+b=20 C. a+b=10 D. a+b=9
答案:C
解析:b=10被注释掉了,所以只实现了a=10;b的值依旧为0。
4.若有int year;,则以下选项能使表达式year % 4 == 0 && year % 100 != 0 || year % 400 == 0的值为真的是( )
A. 2023 B.2024 C. 2025 D. 2026
答案:B
解析:能被4整除不能被100整除,或是能被400整除。
5. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int x=10, y=3;
printf("%d", y=x/y);
}
A. 0 B. 1 C. 3 D. 不确定的值
答案:C
解析:x/y为10/3,整数除法结果为3,赋值给y,所以输出3。
6. 以下程序段的输出结果是( )
int a=2, b=3, c=4;
a = b = c;
printf("%d %d %d", a, b, c);
A. 4 4 4 B. 3 4 4 C. 2 3 4 D. 4 3 2
答案:A
解析:赋值运算符从右向左结合,先将c赋值给b,再将b的值赋值给a,所以a、b、c都等于4。
7. 设int a=5, b=6, c=7, d=8, m=2, n=2; 执行(m=a>b)&&(n=c>d)后n的值为( )
A. 0 B. 1 C. 2 D. 3
答案:C
解析:由于a>b为假(5>6为假),所以m=0,且&&短路,后面的n=c>d不执行,故n保持原值2。
8. 以下关于switch语句的叙述中,正确的是( )
A. case后可以是常量或变量表达式
B. 必须包含default分支
C. break语句可有可无
D. case后的常量表达式值必须互不相同
答案:D
解析:case后必须是整型常量表达式,不能是变量;default分支可以省略;break语句用于跳出switch,若无则会继续执行下一个case。
9. 以下程序段的循环次数是( )
for(int i=0, j=5; i=j; i++, j--)
printf("%d", i);
A. 0 B. 5 C. 无限循环 D. 语法错误
答案:B
解析:循环条件i=j,即将j赋值给i,然后判断i是否为0(非0则继续)。初始i=0,j=5,第一次判断i=j=5(非0),执行循环,然后i=1,j=4;第二次i=4(非0),执行,i=2,j=3;第三次i=3(非0),执行,i=3,j=2;第四次i=2(非0),执行,i=4,j=1;第五次i=1(非0),执行,i=5,j=0;第六次i=0,循环结束。所以循环5次。
10. 以下能正确定义一维数组的语句是( )
A. int n=5, a[n]; B. int a(5);
C. #define N 5 int a[N]; D. int a[];
答案:C
解析:定义数组时长度必须是常量或常量表达式,A中n是变量,B语法错误,D未指定长度且未初始化。
11. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int a[3][3]={{1,2},{3,4},{5,6}}, i, j, s=0;
for(i=1; i<3; i++)
for(j=0; j<=i; j++)
s+=a[i][j];
printf("%d", s);
}
A. 18 B. 19 C. 20 D. 21
答案:A
解析:数组a初始化后为:{{1,2,0},{3,4,0},{5,6,0}}。循环i从1到2,j从0到i。
i=1: j=0 -> s+=a[1][0]=3, s=3; j=1 -> s+=a[1][1]=4, s=7。
i=2: j=0 -> s+=a[2][0]=5, s=12; j=1 -> s+=a[2][1]=6, s=18; j=2 -> a[2][2]=0, 但j<=i,所以j=2也执行,s+=0,s=18。
最终s=18。
12. 以下关于数组初始化的描述中,错误的是( )
A. char s1[]="abc";与 char s2[]={'a','b','c'};等价
B. char s3[10]="abc"; 数组后7个元素为'\0'
C. int a[5]={1,2,3,4,5}; 可以写成 int a[]={1,2,3,4,5};
D. int b[3]={0}; 表示所有元素初始化为0
答案:A
解析:s1字符串末尾自动加'\0',所以s1有4个元素,而s2只有3个元素,两者不等价。
13. 若用数组名作为函数调用的实参,传递给形参的是( )
A.数组的首地址 B. 数组第一个元素的值
C.数组中全部元素的值 D. 数组元素的个数
答案:A
解析:数组名作为实参传递的是数组的首地址。
14. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int x) {
x=20;
}
main() {
int x=10;
fun(x);
printf("%d", x);
}
A. 10 B. 20 C. 不确定 D. 编译错误
答案:A
解析:函数fun是值传递,不会改变main函数中x的值。
15. 在C语言中,形参的缺省存储类别是( )
A. auto B. register C. static D. extern
答案:A
解析:形参缺省存储类别是auto,但通常省略。因此,答案应为A。
16. 以下程序的输出结果是( )
#include <stdio.h>
int f(int a) {
static int b=3;
b+=a;
return b;
}
main() {
int a=2;
printf("%d ", f(a));
printf("%d", f(a));
}
A. 5 5 B. 5 7 C. 5 10 D. 3 5
答案:B
解析:第一次调用f(2),b初值为3,b+=a后b=5,返回5。第二次调用f(2),b是静态局部变量,保持上次的值5,b+=a后b=7,返回7。
17. 宏定义 #define MUL(x,y) x*y 在使用MUL(1+2,3+4)时展开为( )
A. 1+2*3+4 B. (1+2)*(3+4) C. 21 D. 11
答案:A
解析:宏替换是直接替换,MUL(1+2,3+4)替换为1+2*3+4,即1+6+4=11。
18.以下程序的输出结果是( )
main( )
{int i,s=0;
for(i=1;i<10;i++)
if(!(i%2)&&!(i%3))
s+=i;
printf(“%d
”,s);
}
A. 45 B. 6 C. 5 D. 10
答案:B
解析:求1~9之间能被2、3同时整除的数的和
19. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int i, sum=0;
for(i=1; i<=10; i++) {
if(i%3==0) break;
sum+=i;
}
printf("%d", sum);
}
A. 3 B. 6 C. 10 D. 55
答案:A
解析:循环累加sum,当i=1,2时,i%3不为0,sum累加1和2,得到3。当i=3时,i%3==0,执行break,跳出循环,所以sum=3。
20. 若变量已正确定义,要求程序段计算5!,不能完成此操作的是( )
A. for(i=1,p=1; i<=5; i++) p*=i;
B. for(i=1; i<=5; i++) { p=1; p*=i; }
C. i=1; p=1; while(i<=5) { p*=i; i++; }
D. i=1; p=1; do { p*=i; i++; } while(i<=5);
答案:B
解析:B选项每次循环p都被重新赋值为1,所以最终p=5,而不是5!。
21. 以下数组定义中,错误的是( )
A. int x[][3]={{1,2,3},{4,5,6}}; B.int x[2][3]={1,2,3,4,5,6};
C. int x[][3]={1,2,3,4,5,6}; D. int x[2][]={1,2,3,4,5,6};
答案:D
解析:二维数组定义时,第二维长度不能省略。
22. 以下程序段的输出结果是( )
char s[]="ABCD", *p=s;
printf("%c", *(p+1));
A.A B. B C. C D. D
答案:B
解析:p指向字符串首字符,*(p+1)是第二个字符'B'。
23. 以下说法正确的是( )
A. 实参和对应的形参共同占用一存储单元
B. 形参是虚拟的,不占存储单元
C. 只有当实参和形参同名时才共占存储单元
D. 形参和实参的类型必须一致
答案:D
解析:实参和形参类型必须一致,否则会发生类型转换或错误。A、B、C均错误,因为形参是局部变量,独立存储单元。
24. 以下程序段的输出结果是( )
char a[7]="abcde";
char b[4]="ABC";
strcpy(a,b);
printf("%c",a[3]);
A. 空格 B.‘\0 ’ C. e D. f
答案:B
解析:strcpy(a,b)的作用是要把数组b中的内容复制到数组a中。
25. 以下程序的功能是( )
#include <stdio.h>
main() {
int a[10], i, max;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
max=a[0];
for(i=1; i<10; i++)
if(a[i]>max) max=a[i];
printf("%d", max);
}
A. 求数组a中所有元素的和 B. 求数组a中所有元素的平均值
C. 求数组a中最大值 D. 求数组a中最小值
答案:C
解析:程序先输入10个数,然后找出最大值并输出。
2、 简答题(每题5分,共15分)
1. 阅读程序,写出输出结果
#include <stdio.h>
main() {
int i, j;
for(i=1; i<=4; i++) {
for(j=1; j<=i; j++)
printf("*");
printf("
");
}
}
答案:输出:
*
**
解析:外层循环控制行数,内层循环控制每行输出的星号个数,第i行输出i个星号。
2. 阅读程序,写出输出结果
#include <stdio.h>
void swap(int x, int y) {
int t;
t=x; x=y; y=t;
}
main() {
int a=3, b=5;
swap(a, b);
printf("a=%d, b=%d", a, b);
}
答案:输出:a=3, b=5
解析:函数swap是值传递,交换的是形参x和y的值,不影响实参a和b。
3. 阅读程序,写出输出结果
#include <stdio.h>
main() {
int a[5]={1,2,3,4,5}, *p, *q;
p=a;
q=&a[4];
printf("%d ", *p++);
printf("%d ", (*p)++);
printf("%d ", *p);
printf("%d ", *q);
}
答案:输出:1 2 3 5
解析:p指向数组a的首元素,q指向a[4]。
*p++:先取*p即a[0]=1,然后p指向a[1]。
(*p)++:取*p即a[1]=2,输出2,然后a[1]自增变为3。
*p:此时p指向a[1],值为3。
*q:输出a[4]=5。
所以输出:1 2 3 5。
三、案例分析题(共3小题,每题5分,共15分)
1. 以下程序的功能是:输入10个整数,求它们的平均值(保留两位小数)
#include <stdio.h>
main() {
int i, a[10];
float sum=0, avg;
for(i=0; i<10; i++)
scanf("%d", __①____);
for(i=0; i<10; i++)
sum = sum + __②____;
avg = sum / 10;
printf("average=%.2f
", avg);
}
答案:
①:&a[i]
②:a[i]
解析:输入10个整数,累加求和,然后求平均值并保留两位小数。
2. 2. 以下程序的功能是:判断一个数是否为素数
#include <stdio.h>
#include <math.h>
main() {
int n, i, flag=1;
scanf("%d", &n);
if(n<=1) flag=0;
else {
for(i=2; i<= ③ ; i++)
if(n%i==0) {
flag=0;
____④__;
}
}
if(flag) printf("%d是素数", n);
else printf("%d不是素数", n);
}
答案:③:sqrt(n) 或 n-1 (教材中常用n-1,但用sqrt(n)效率更高)
④:break
解析:判断素数只需检查2到sqrt(n)之间的数,如果n能被i整除,则不是素数,标记flag=0并跳出循环。
3. 以下程序的功能是:用选择法对10个整数从小到大排序
#include <stdio.h>
main() {
int a[10], i, j, min, t;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
for(i=0; i<9; i++) {
min=i;
for(j=i+1; j<10; j++)
if(__⑤____) min=j;
if(min!=i) {
t=a[i];
⑥
a[min] = t;
}
}
for(i=0; i<10; i++)
printf("%d ", a[i]);
}
答案:
⑤:a[j] < a[min]
⑥:a[i]=a[min];
解析:选择排序,每次选择未排序部分的最小元素,与当前位置交换。min记录最小元素的下标,所以比较a[j]与a[min],如果a[j]更小,则更新min。交换时,用临时变量t交换a[i]和a[min]。
四、编程题(共2小题,每题10分,共20分)
1. 编写程序,输入一个不多于5位的正整数,要求:
(1) 求它是几位数
(2) 按逆序输出各位数字,例如原数为123,输出321
答案:
参考代码:
#include <stdio.h>
main() {
int n, digit=0, reversed=0;
scanf("%d", &n);
int temp=n;
while(temp) {
reversed = reversed*10 + temp%10;
temp /= 10;
digit++;
}
printf("位数:%d
", digit);
printf("逆序:%d
", reversed);
}
2. 编写函数,统计一个字符串中字母、数字、空格和其他字符的个数。在主函数中输入字符串并输出统计结果。
答案:参考代码:
#include <stdio.h>
void countChars(char str[]) {
int letter=0, digit=0, space=0, other=0;
for(int i=0; str[i]!='\0'; i++)
{
if(str[i]>=’a’&&str[i]<=’z’||tr[i]>=’A’&&str[i]<=’Z’) letter++;
else if(tr[i]>=’0’&&str[i]<=’9’) digit++;
else if(str[i]==‘ ’) space++;
else other++;
}
printf("字母:%d
数字:%d
空格:%d
其他:%d
",letter,digit,space,other);}
main() {
char str[100];
printf("请输入字符串:");
gets(str);
countChars(str);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(二)原卷版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 以下选项中,是合法的C语言标识符的是( )
A. 2a B. case C. _abc D. a+b
2. C语言源程序的基本单位是( )
A. 过程 B. 函数 C. 子程序 D. 标识符
3. 以下程序的输出结果为( )
#include<stdio.h>
main( )
{int a=0,b=0;
a=10; /*给a赋值x/
b=10; /*给b赋值*/
printf(“a+b=%d
”,a+b); /*输出计算结果*/
A.a+b=0 B. a+b=20 C. a+b=10 D. a+b=9
4.若有int year;,则以下选项能使表达式year % 4 == 0 && year % 100 != 0 || year % 400 == 0的值为真的是( )
A. 2023 B.2024 C. 2025 D. 2026
5. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int x=10, y=3;
printf("%d", y=x/y);
}
A. 0 B. 1 C. 3 D. 不确定的值
6. 以下程序段的输出结果是( )
int a=2, b=3, c=4;
a = b = c;
printf("%d %d %d", a, b, c);
A. 4 4 4 B. 3 4 4 C. 2 3 4 D. 4 3 2
7. 设int a=5, b=6, c=7, d=8, m=2, n=2; 执行(m=a>b)&&(n=c>d)后n的值为( )
A. 0 B. 1 C. 2 D. 3
8. 以下关于switch语句的叙述中,正确的是( )
A. case后可以是常量或变量表达式
B. 必须包含default分支
C. break语句可有可无
D. case后的常量表达式值必须互不相同
9. 以下程序段的循环次数是( )
for(int i=0, j=5; i=j; i++, j--)
printf("%d", i);
A. 0 B. 5 C. 无限循环 D. 语法错误
10. 以下能正确定义一维数组的语句是( )
A. int n=5, a[n]; B. int a(5);
C. #define N 5 int a[N]; D. int a[];
11. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int a[3][3]={{1,2},{3,4},{5,6}}, i, j, s=0;
for(i=1; i<3; i++)
for(j=0; j<=i; j++)
s+=a[i][j];
printf("%d", s);
}
A. 18 B. 19 C. 20 D. 21
12. 以下关于数组初始化的描述中,错误的是( )
A. char s1[]="abc";与 char s2[]={'a','b','c'};等价
B. char s3[10]="abc"; 数组后7个元素为'\0'
C. int a[5]={1,2,3,4,5}; 可以写成 int a[]={1,2,3,4,5};
D. int b[3]={0}; 表示所有元素初始化为0
13. 若用数组名作为函数调用的实参,传递给形参的是( )
A.数组的首地址 B. 数组第一个元素的值
C.数组中全部元素的值 D. 数组元素的个数
14. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int x) {
x=20;
}
main() {
int x=10;
fun(x);
printf("%d", x);
}
A. 10 B. 20 C. 不确定 D. 编译错误
15. 在C语言中,形参的缺省存储类别是( )
A. auto B. register C. static D. extern
16. 以下程序的输出结果是( )
#include <stdio.h>
int f(int a) {
static int b=3;
b+=a;
return b;
}
main() {
int a=2;
printf("%d ", f(a));
printf("%d", f(a));
}
A. 5 5 B. 5 7 C. 5 10 D. 3 5
17. 宏定义 #define MUL(x,y) x*y 在使用MUL(1+2,3+4)时展开为( )
A. 1+2*3+4 B. (1+2)*(3+4) C. 21 D. 11
18.以下程序的输出结果是( )
main( )
{int i,s=0;
for(i=1;i<10;i++)
if(!(i%2)&&!(i%3))
s+=i;
printf(“%d
”,s);
}
A. 45 B. 6 C. 5 D. 10
19. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int i, sum=0;
for(i=1; i<=10; i++) {
if(i%3==0) break;
sum+=i;
}
printf("%d", sum);
}
A. 3 B. 6 C. 10 D. 55
20. 若变量已正确定义,要求程序段计算5!,不能完成此操作的是( )
A. for(i=1,p=1; i<=5; i++) p*=i;
B. for(i=1; i<=5; i++) { p=1; p*=i; }
C. i=1; p=1; while(i<=5) { p*=i; i++; }
D. i=1; p=1; do { p*=i; i++; } while(i<=5);
21. 以下数组定义中,错误的是( )
A. int x[][3]={{1,2,3},{4,5,6}}; B.int x[2][3]={1,2,3,4,5,6};
C. int x[][3]={1,2,3,4,5,6}; D. int x[2][]={1,2,3,4,5,6};
22. 以下程序段的输出结果是( )
char s[]="ABCD", *p=s;
printf("%c", *(p+1));
A.A B. B C. C D. D
23. 以下说法正确的是( )
A. 实参和对应的形参共同占用一存储单元
B. 形参是虚拟的,不占存储单元
C. 只有当实参和形参同名时才共占存储单元
D. 形参和实参的类型必须一致
24. 以下程序段的输出结果是( )
char a[7]="abcde";
char b[4]="ABC";
strcpy(a,b);
printf("%c",a[3]);
A. 空格 B.‘\0 ’ C. e D. f
25. 以下程序的功能是( )
#include <stdio.h>
main() {
int a[10], i, max;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
max=a[0];
for(i=1; i<10; i++)
if(a[i]>max) max=a[i];
printf("%d", max);
}
A. 求数组a中所有元素的和 B. 求数组a中所有元素的平均值
C. 求数组a中最大值 D. 求数组a中最小值
2、 简答题(每题5分,共15分)
1. 阅读程序,写出输出结果
#include <stdio.h>
main() {
int i, j;
for(i=1; i<=4; i++) {
for(j=1; j<=i; j++)
printf("*");
printf("
");
}
}
2. 阅读程序,写出输出结果
#include <stdio.h>
void swap(int x, int y) {
int t;
t=x; x=y; y=t;
}
main() {
int a=3, b=5;
swap(a, b);
printf("a=%d, b=%d", a, b);
}
3. 阅读程序,写出输出结果
#include <stdio.h>
main() {
int a[5]={1,2,3,4,5}, *p, *q;
p=a;
q=&a[4];
printf("%d ", *p++);
printf("%d ", (*p)++);
printf("%d ", *p);
printf("%d ", *q);
}
三、案例分析题(共3小题,每题5分,共15分)
1. 以下程序的功能是:输入10个整数,求它们的平均值(保留两位小数)
#include <stdio.h>
main() {
int i, a[10];
float sum=0, avg;
for(i=0; i<10; i++)
scanf("%d", __①____);
for(i=0; i<10; i++)
sum = sum + __②____;
avg = sum / 10;
printf("average=%.2f
", avg);
}
2. 以下程序的功能是:判断一个数是否为素数
#include <stdio.h>
#include <math.h>
main() {
int n, i, flag=1;
scanf("%d", &n);
if(n<=1) flag=0;
else {
for(i=2; i<= ③ ; i++)
if(n%i==0) {
flag=0;
____④__;
}
}
if(flag) printf("%d是素数", n);
else printf("%d不是素数", n);
}
3. 以下程序的功能是:用选择法对10个整数从小到大排序
#include <stdio.h>
main() {
int a[10], i, j, min, t;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
for(i=0; i<9; i++) {
min=i;
for(j=i+1; j<10; j++)
if(__⑤____) min=j;
if(min!=i) {
t=a[i];
⑥
a[min] = t;
}
}
for(i=0; i<10; i++)
printf("%d ", a[i]);
}
四、编程题(共2小题,每题10分,共20分)
1. 编写程序,输入一个不多于5位的正整数,要求:
(1) 求它是几位数
(2) 按逆序输出各位数字,例如原数为123,输出321
2. 编写函数,统计一个字符串中字母、数字、空格和其他字符的个数。在主函数中输入字符串并输出统计结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$