《程序设计基础-C语言》(高教版第二版)期末复习卷(十)
|
2份
|
12页
|
68人阅读
|
0人下载
内容正文:
《程序设计基础- C语言》高等教育出版社
期末复习卷(八)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言指针的说法,正确的是( )
A. 指针变量可以直接存储数值
B. 指针变量的类型必须与指向的变量类型一致
C. 指针变量的大小与指向的变量类型有关
D. 空指针指向的是地址为0的内存单元,可直接访问
【答案】B
【解析】A中指针变量存储的是变量的地址,而非直接存储数值;C中指针变量大小仅与操作系统位数有关,与指向类型无关;D中空指针指向地址0的内存单元,该单元不可直接访问,否则会报错;B正确,指针类型需与指向变量类型一致,保证内存访问正确。
2、若int a=12, b=5;,则表达式a / b * 1.0的结果类型是( )
A. int B. float C. double D. 不确定
【答案】C
【解析】a/b执行整数除法结果为2,随后与1.0(double型)运算,int型会隐式转换为double型,最终结果为double型(2.0)。
3、下列标识符中,符合C语言命名规则的是( )
A. 123abc B. abc#123 C. _abc123 D. int_abc
【答案】C
【解析】合法标识符由字母、下划线、数字组成,首字符不能为数字,且不能是关键字。A以数字开头,B含特殊字符#,D中int是关键字,均不合法;C以下划线开头,后续跟字母和数字,符合规则。
4、执行语句int x=8; x += x % 3;后,x的值是( )
A. 8 B. 9 C. 10 D. 11
【答案】C
【解析】x%3结果为2,x += 2等价于x = 8 + 2 = 10。
5、以下函数中,用于从键盘读取单个字符的是( )
A. putchar() B. getchar() C. gets() D. fputs()
【答案】B
【解析】getchar()专门用于读取单个字符;putchar()是输出单个字符函数,gets()读取字符串,fputs()向文件写入字符串。故B正确。
6、定义int arr[][3] = {{1,2}, {3,4,5}, {6}};,则该二维数组的行数是( )
A. 2 B. 3 C. 4 D. 不确定
【答案】B
【解析】二维数组定义时,行下标可省略,编译器通过初始化的“行花括号”个数推算行数。该数组有3组行花括号,因此行数为3。
7、已知int x=5, y=3;,执行表达式x < y ? x++ : y++的结果是( )
A. 3 B. 4 C. 5 D. 6
【答案】A
【解析】x < y(5<3)为假,执行y++,y++是先使用后自减,因此表达式结果为y的原始值3,执行后y变为4。
8、执行以下代码,输出结果是( )
int i=0, j=0; for(i=1; i<=2; i++) { for(j=1; j<=i; j++) { printf("%d", j); } printf("
"); }
A. 1
12
B. 1
2
C. 12
12
D. 1
11
【答案】A
【解析】外层循环i=1时,内层循环j=1(输出1),换行;i=2时,内层循环j=1、j=2(输出12),换行。最终输出为1换行、12换行。
9、C语言中,字符串"
123"的长度(不含结束符)是( )
A. 3 B. 4 C. 5 D. 6
【答案】B
【解析】"
"是单个转义字符(换行符),后续跟1、2、3三个字符,共4个字符,因此字符串长度为4。
10、若int *p, arr[5] = {1,2,3,4,5}; p=arr;,则*(p+2)的值是( )
A. 2 B. 3 C. 4 D. arr[2]的地址
【答案】B
【解析】p指向数组arr的首元素(arr[0]),p+2表示偏移2个int型单元,指向arr[2],*(p+2)是对该地址的解引用,得到arr[2]的值3。
11、以下关于函数递归的说法,错误的是( )
A. 递归函数必须有明确的终止条件
B. 递归调用会产生函数调用栈
C. 递归函数的执行效率通常比循环低
D. 递归函数不能有参数传递
【答案】D
【解析】递归函数可以有参数传递,通过参数传递控制递归的终止和逻辑执行(如求阶乘的递归函数,参数为待求阶乘的整数);A、B、C均为正确说法,D错误。
12、执行以下代码,输出结果是( )
char str[] = "C Language"; printf("%d", strlen(str));
A. 10 B. 11 C. 12 D. 13
【答案】A
【解析】strlen函数统计字符串有效字符个数(不含结束符'\0')。"C Language"包含1个'C'、1个空格、8个字母,共10个有效字符,因此长度为10。
13、执行以下代码,sum的最终值是( )
int sum=0, i=0; do { sum += i; i++; } while(i<=3);
A. 3 B. 6 C. 10 D. 15
【答案】B
【解析】do-while循环执行4次:i=0时sum=0,i=1;i=1时sum=1,i=2;i=2时sum=3,i=3;i=3时sum=6,i=4,此时i>3循环结束。sum=0+1+2+3=6。
14、已知int a=7, b=2;,下列选项中结果为1的逻辑表达式是( )
A. a % b == 0
B. !(a > b)
C. (a / b) && 0
D. (a + b) || 0
【答案】D
【解析】A中7%2=1≠0,结果为0;B中a>b为真,!真为0;(a / b) && 0,C结果为0;D中(a+b)=9≠0,逻辑或运算只要有一个为真结果就为1,故D正确。
15、以下关于字符串处理函数的说法,正确的是( )
A. strcpy函数用于拼接两个字符串
B. strcat函数用于复制字符串
C. strlen函数返回字符串的字节数,含结束符
D. strcmp函数用于比较两个字符串的大小
【答案】D
【解析】A中strcpy是字符串复制函数,B中strcat是字符串拼接函数,C中strlen返回字符串有效字符个数(不含结束符);D正确,strcmp通过ASCII码值比较字符串大小,返回正数、0、负数分别表示前者大、相等、前者小。
16、以下关于switch语句的说法,正确的是( )
A. case后的值可以是变量
B. switch的表达式可以是实型
C. default语句必须放在所有case之后
D. case后的值必须是常量表达式
【答案】D
【解析】A中case后的值必须是常量,不能是变量;B中switch表达式只能是整型或字符型,不能是实型;C中default语句可放在case之前或之后(放在之前需加break,否则会穿透);D正确,case后必须是常量表达式。
17、要以只读方式打开二进制文件,应使用的fopen模式是( )
A. "r" B. "rb" C. "r+" D. "rb+"
【答案】B
【解析】二进制文件操作需加'b';"rb"是二进制只读模式;"r"是文本只读模式,"r+"是文本读写模式,"rb+"是二进制读写模式。故B正确。
18、执行以下代码,输出结果是( )
int x=3;
if(x>5) printf("%d", x);
else if(x>2) printf("%d", x+1);
else printf("%d", x-1);
A. 3 B. 4 C. 2 D. 无输出
【答案】B
【解析】x=3,x>5为假;x>2为真,执行printf("%d", x+1),输出4。
19、以下关于函数参数的说法,正确的是( )
A. 函数的形参在函数调用结束后仍占用内存
B. 函数的实参必须是变量
C. 函数的形参是局部变量
D. 函数调用时,实参和形参的个数可以不匹配
【答案】C
【解析】A中形参在函数调用结束后释放内存;B中实参可以是常量、变量或表达式;D中实参和形参个数必须匹配,否则编译错误;C正确,形参仅在函数内部有效,属于局部变量。
20、以下关于数组和指针的关系,错误的是( )
A. 数组名可以赋值给同类型的指针变量
B. 指针变量可以通过自增自减操作遍历数组
C. arr[i]等价于*(arr+i)
D. 数组名可以直接自增
【答案】D
【解析】数组名是指针常量,其值不可修改,因此不能直接自增(arr++会报错);A、B、C均为正确说法,D错误。
二、 填空题(本题共10小题,每题2分,共20分)
1. C语言中,多行注释的开始符号是__________,单行注释的作用范围是__________。
【答案】/* 从//开始到本行结束
2. 定义int a=25, b=4;,表达式(a + b) % (a - b)的结果是__________。
【答案】1
3. for循环的基本格式是:for(__________; __________; __________) { 循环体 }
【答案】初始化表达式 循环条件表达式 增量/减量表达式
4. 若指针变量p指向int型数组arr的首元素,则访问数组第3个元素(下标为2)的表达式是__________或__________。
【答案】arr[2] *(p+2)
5. 已知int m=6, n=9;,表达式m > n ? m-3 : n+2的结果是__________。
【答案】11
6. 执行以下代码,输出的字符个数是__________。
char str[] = "ab
c"; printf("%s", str);
【答案】4
7. 函数声明的作用是__________,其基本格式与函数定义的__________部分一致。
【答案】告知编译器函数的基本信息(返回值类型、函数名、参数类型) ; 函数头
8. 已知int x=3, y=5;,逻辑表达式(x==3) && !(y>4)的结果是__________。
【答案】0
9. 定义一个长度为5的字符数组,并用字符串"hello"初始化,语句是__________,该数组在内存中占用的字节数是__________。
【答案】char arr[5] = "hello";(或char arr[] = "hello";) ; 6(含结束符'\0')
10. 若要将指针变量p初始化为空指针,正确的语句是__________。
【答案】int *p = NULL;(或int *p = 0;)
三、 应用题(共20分)
编写一个C语言程序,实现以下功能(如图所示):
1. 定义一个一维整型数组,长度为10;
2. 通过键盘输入10个整型数据存入数组;
3. 编写函数查找数组中是否存在指定的目标值(目标值从键盘输入),若存在,返回其第一次出现的下标;若不存在,返回-1;
4. 输出数组中的所有元素,以及目标值的查找结果(存在则输出下标,不存在则提示“目标值不存在”)。
【答案】
#include <stdio.h>
// 查找目标值在数组中第一次出现的下标,不存在返回-1
int findTarget(int arr[], int len, int target) {
for(int i = 0; i < len; i++) {
if(arr[i] == target) { // 找到目标值,返回当前下标
return i;
}
}
return -1; // 遍历完数组未找到,返回-1
}
// 输出数组所有元素
void printArray(int arr[], int len) {
printf("数组元素:");
for(int i = 0; i < len; i++) {
printf("%d\t", arr[i]);
}
printf("
");
}
int main() {
int arr[10]; // 定义长度为10的整型数组
int len = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
int target, index;
// 从键盘输入10个整型数据
printf("请输入10个整型数据:
");
for(int i = 0; i < len; i++) {
scanf("%d", &arr[i]);
}
// 输入目标值
printf("请输入要查找的目标值:
");
scanf("%d", &target);
// 输出数组元素
printArray(arr, len);
// 调用查找函数
index = findTarget(arr, len, target);
// 输出查找结果
if(index != -1) {
printf("目标值%d存在,第一次出现的下标为:%d
", target, index);
} else {
printf("目标值%d不存在
", target);
}
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《程序设计基础- C语言》高等教育出版社
期末复习卷(八)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言指针的说法,正确的是( )
A. 指针变量可以直接存储数值
B. 指针变量的类型必须与指向的变量类型一致
C. 指针变量的大小与指向的变量类型有关
D. 空指针指向的是地址为0的内存单元,可直接访问
2、若int a=12, b=5;,则表达式a / b * 1.0的结果类型是( )
A. int B. float C. double D. 不确定
3、下列标识符中,符合C语言命名规则的是( )
A. 123abc B. abc#123 C. _abc123 D. int_abc
4、执行语句int x=8; x += x % 3;后,x的值是( )
A. 8 B. 9 C. 10 D. 11
5、以下函数中,用于从键盘读取单个字符的是( )
A. putchar() B. getchar() C. gets() D. fputs()
6、定义int arr[][3] = {{1,2}, {3,4,5}, {6}};,则该二维数组的行数是( )
A. 2 B. 3 C. 4 D. 不确定
7、已知int x=5, y=3;,执行表达式x < y ? x++ : y++的结果是( )
A. 3 B. 4 C. 5 D. 6
8、执行以下代码,输出结果是( )
int i=0, j=0; for(i=1; i<=2; i++) { for(j=1; j<=i; j++) { printf("%d", j); } printf("
"); }
A. 1
12
B. 1
2
C. 12
12
D. 1
11
9、C语言中,字符串"
123"的长度(不含结束符)是( )
A. 3 B. 4 C. 5 D. 6
10、若int *p, arr[5] = {1,2,3,4,5}; p=arr;,则*(p+2)的值是( )
A. 2 B. 3 C. 4 D. arr[2]的地址
11、以下关于函数递归的说法,错误的是( )
A. 递归函数必须有明确的终止条件
B. 递归调用会产生函数调用栈
C. 递归函数的执行效率通常比循环低
D. 递归函数不能有参数传递
12、执行以下代码,输出结果是( )
char str[] = "C Language"; printf("%d", strlen(str));
A. 10 B. 11 C. 12 D. 13
13、执行以下代码,sum的最终值是( )
int sum=0, i=0; do { sum += i; i++; } while(i<=3);
A. 3 B. 6 C. 10 D. 15
14、已知int a=7, b=2;,下列选项中结果为1的逻辑表达式是( )
A. a % b == 0
B. !(a > b)
C. (a / b) && 0
D. (a + b) || 0
15、以下关于字符串处理函数的说法,正确的是( )
A. strcpy函数用于拼接两个字符串
B. strcat函数用于复制字符串
C. strlen函数返回字符串的字节数,含结束符
D. strcmp函数用于比较两个字符串的大小
16、以下关于switch语句的说法,正确的是( )
A. case后的值可以是变量
B. switch的表达式可以是实型
C. default语句必须放在所有case之后
D. case后的值必须是常量表达式
17、要以只读方式打开二进制文件,应使用的fopen模式是( )
A. "r" B. "rb" C. "r+" D. "rb+"
18、执行以下代码,输出结果是( )
int x=3;
if(x>5) printf("%d", x);
else if(x>2) printf("%d", x+1);
else printf("%d", x-1);
A. 3 B. 4 C. 2 D. 无输出
19、以下关于函数参数的说法,正确的是( )
A. 函数的形参在函数调用结束后仍占用内存
B. 函数的实参必须是变量
C. 函数的形参是局部变量
D. 函数调用时,实参和形参的个数可以不匹配
20、以下关于数组和指针的关系,错误的是( )
A. 数组名可以赋值给同类型的指针变量
B. 指针变量可以通过自增自减操作遍历数组
C. arr[i]等价于*(arr+i)
D. 数组名可以直接自增
二、 填空题(本题共10小题,每题2分,共20分)
1. C语言中,多行注释的开始符号是__________,单行注释的作用范围是__________。
2. 定义int a=25, b=4;,表达式(a + b) % (a - b)的结果是__________。
3. for循环的基本格式是:for(__________; __________; __________) { 循环体 }
4. 若指针变量p指向int型数组arr的首元素,则访问数组第3个元素(下标为2)的表达式是__________或__________。
5. 已知int m=6, n=9;,表达式m > n ? m-3 : n+2的结果是__________。
6. 执行以下代码,输出的字符个数是__________。
char str[] = "ab
c"; printf("%s", str);
7. 函数声明的作用是__________,其基本格式与函数定义的__________部分一致。
8. 已知int x=3, y=5;,逻辑表达式(x==3) && !(y>4)的结果是__________。
9. 定义一个长度为5的字符数组,并用字符串"hello"初始化,语句是__________,该数组在内存中占用的字节数是__________。
10. 若要将指针变量p初始化为空指针,正确的语句是__________。
三、 应用题(共20分)
编写一个C语言程序,实现以下功能(如图所示):
1. 定义一个一维整型数组,长度为10;
2. 通过键盘输入10个整型数据存入数组;
3. 编写函数查找数组中是否存在指定的目标值(目标值从键盘输入),若存在,返回其第一次出现的下标;若不存在,返回-1;
4. 输出数组中的所有元素,以及目标值的查找结果(存在则输出下标,不存在则提示“目标值不存在”)。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$