《程序设计基础-C语言》(高教版第二版)期末复习卷(九)
|
2份
|
12页
|
60人阅读
|
0人下载
内容正文:
《程序设计基础- C语言》高等教育出版社
期末复习卷(八)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言的说法,正确的是( )
A. C语言是面向对象的程序设计语言
B. C语言程序的扩展名通常为.exe
C. C语言程序必须经过编译链接才能执行
D. C语言不支持指针操作
2、若float a=6.5, b=2;,则表达式a / b的结果类型是( )
A. int B. float C. double D. 不确定
3、下列标识符中,不能作为C语言合法变量名的是( )
A. abc_123 B. _123abc C. 123_abc D. ABC123
4、执行语句int x=5; x -= x / 2;后,x的值是( )
A. 2 B. 3 C. 5 D. 0
5、以下函数中,用于读取字符串的是( )
A. getchar() B. puts() C. fgets() D. putchar()
6、定义int arr[5] = {1,2};,则数组元素arr[3]的值是( )
A. 0 B. 2 C. 随机值 D. 未定义
7、已知int m=7, n=5;,执行表达式m < n ? --m : --n的结果是( )
A. 6 B. 4 C. 7 D. 5
8、执行以下代码,输出结果是( )
int i=0;
for(i=2; i>0; i--)
{
printf("%d", i);
}
A. 21 B. 12 C. 210 D. 无输出
9、C语言中,字符串"a\\b"的长度不含结束符是( )
A. 2 B. 3 C. 4 D. 5
10、二维数组int arr[2][3] = {{1,2}, {3}};,则arr[1][2]的值是( )
A. 3 B. 0 C. 2 D. 随机值
11、若int *p, a=8; p=&a;,则以下表达式中,值为a的地址的是( )
A. *p B. p C. &*p D.a
12、执行以下代码,输出结果是( )
char str[] = "Hello World";
printf("%s", str+6);
A. Hello B. World C. Hello World D. 乱码
13、执行以下代码,sum的最终值是( )
int sum=0; for(int i=1; i<=4; i++) { if(i%2!=0) sum += i; }
A. 4 B. 5 C. 6 D. 10
14、已知int x=6, y=6;,下列选项中能使y的值变为5的是( )
A. if(x==y) y--; B. if(x>y) y--; C. if(x<y) y--; D. if(x!=y) y--;
15、以下关于字符数组的说法,错误的是( )
A. 字符数组可以存储字符串
B. 字符数组的长度可以通过strlen函数获取
C. 字符数组的长度必须大于字符串的长度
D. 字符数组初始化时可以省略大括号
16、以下关于if-else语句的说法,正确的是( )
A. if语句必须搭配else语句使用
B. else语句可以单独使用
C. 多个else语句可以并列使用
D. else语句与最近的未配对的if语句配对
17、要以读写方式打开二进制文件,若文件不存在则创建,应使用的fopen模式是( )
A. "r+" B. "w+" C. "rb+" D. "wb+"
18、执行以下代码,输出结果是( )
int i=0, j=0;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{ if(j==1) continue;
printf("%d%d", i, j);
} }
A. 0010 B. 00011011 C. 0011 D. 无输出
19、以下关于函数返回值的说法,错误的是( )
A. 函数的返回值类型由函数定义时的类型决定
B. 函数可以返回一个指针
C. 函数的返回值只能是基本数据类型
D. void类型函数没有返回值
20、以下关于数组和指针的关系,正确的是( )
A. 数组名就是一个指针常量
B. 指针只能指向单个变量,不能指向数组
C. 数组可以通过指针遍历,指针不能通过数组下标访问
D. 数组和指针完全等价
二、 判断题(本题共10小题,每题2分,共20分)
1. C语言程序可以没有注释,注释仅用于提高代码可读性。( )
2. 标识符可以使用关键字,但不能使用保留字。( )
3. 表达式a + b * c的运算顺序是先算a + b,再算乘以c。( )
4. 数组的长度在定义后可以通过赋值语句修改。( )
5. do-while循环的循环体至少执行一次,while循环的循环体可能一次都不执行。( )
6. 指针变量可以指向任意类型的变量,无需考虑类型匹配。( )
7. 逻辑或运算"||"的运算结果为真时,仅需其中一个操作数为真。( )
8. 关闭文件时,若文件未正常关闭,已写入的数据会全部丢失。( )
9. 函数可以调用自身,这种调用方式称为递归调用。( )
10. 二维数组在内存中按列优先存储,即先存储第一列元素,再存储第二列元素。( )
三、 应用题(共20分)
编写一个C语言程序,实现以下功能(如图所示):
1. 定义一个一维数组,存储10个整型数据;
2. 通过键盘输入10个数据存入数组;
3. 编写函数将数组元素按从小到大的顺序排序(冒泡排序法);
4. 输出排序前和排序后的数组元素。。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《程序设计基础- C语言》高等教育出版社
期末复习卷(八)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言的说法,正确的是( )
A. C语言是面向对象的程序设计语言
B. C语言程序的扩展名通常为.exe
C. C语言程序必须经过编译链接才能执行
D. C语言不支持指针操作
【答案】C
【解析】A中C语言是面向过程的程序设计语言;B中C语言源文件扩展名通常为.c,.exe是可执行文件扩展名;D中指针是C语言的核心特性,支持指针操作;C正确,C语言程序需编译链接生成可执行文件后才能执行。
2、若float a=6.5, b=2;,则表达式a / b的结果类型是( )
A. int B. float C. double D. 不确定
【答案】B
【解析】float型与int型运算时,int型会隐式转换为float型,因此a / b的结果为float型(6.5 / 2 = 3.25)。
3、下列标识符中,不能作为C语言合法变量名的是( )
A. abc_123 B. _123abc C. 123_abc D. ABC123
【答案】C
【解析】C语言标识符首字符不能为数字,C选项以1开头,不符合命名规则;A、B、D均符合规则。
4、执行语句int x=5; x -= x / 2;后,x的值是( )
A. 2 B. 3 C. 5 D. 0
【答案】B
【解析】x / 2执行整数除法,结果为2;x -= 2等价于x = 5 - 2 = 3。
5、以下函数中,用于读取字符串的是( )
A. getchar() B. puts() C. fgets() D. putchar()
【答案】C
【解析】fgets()用于读取字符串,可指定读取长度,安全性高于gets();getchar()读取单个字符,puts()输出字符串,putchar()输出单个字符。故C正确。
6、定义int arr[5] = {1,2};,则数组元素arr[3]的值是( )
A. 0 B. 2 C. 随机值 D. 未定义
【答案】A
【解析】数组初始化时,未显式赋值的元素默认值为0。arr[5]仅初始化前2个元素为1、2,arr[3]属于未显式初始化元素,值为0。
7、已知int m=7, n=5;,执行表达式m < n ? --m : --n的结果是( )
A. 6 B. 4 C. 7 D. 5
【答案】B
【解析】m < n(7<5)为假,执行--n,--n是先自减后使用,n从5变为4,故表达式结果为4。
8、执行以下代码,输出结果是( )
int i=0;
for(i=2; i>0; i--)
{
printf("%d", i);
}
A. 21 B. 12 C. 210 D. 无输出
【答案】A
【解析】for循环初始化i=2,条件i>0:i=2时输出2,i=1;i=1时输出1,i=0,此时i>0不成立,循环结束。故输出21。
9、C语言中,字符串"a\\b"的长度不含结束符是( )
A. 2 B. 3 C. 4 D. 5
【答案】B
【解析】,解析:"\\"是转义字符,代表单个反斜杠,因此"a\\b"包含a、\、b三个字符,长度为3。
10、二维数组int arr[2][3] = {{1,2}, {3}};,则arr[1][2]的值是( )
A. 3 B. 0 C. 2 D. 随机值
【答案】B
【解析】二维数组未显式初始化的元素默认值为0。arr[1]行(第二行)初始化了1个元素3,arr[1][1]和arr[1][2]均未显式初始化,值为0。
11、若int *p, a=8; p=&a;,则以下表达式中,值为a的地址的是( )
A. *p B. p C. &*p D.a
【答案】B
【解析】p存储a的地址,*p是a的值,*&a是a的值,a是变量值,故B正确。
12、执行以下代码,输出结果是( )
char str[] = "Hello World";
printf("%s", str+6);
A. Hello B. World C. Hello World D. 乱码
【答案】B
【解析】str是数组首地址,str+6表示偏移6个字节后的地址(即'W'的地址),printf从该地址开始输出,直到遇到'\0',故输出World。
13、执行以下代码,sum的最终值是( )
int sum=0; for(int i=1; i<=4; i++) { if(i%2!=0) sum += i; }
A. 4 B. 5 C. 6 D. 10
【答案】C
【解析】for循环i从1到4,仅当i为奇数(1、3)时执行sum += i,sum=1+3=6。
14、已知int x=6, y=6;,下列选项中能使y的值变为5的是( )
A. if(x==y) y--; B. if(x>y) y--; C. if(x<y) y--; D. if(x!=y) y--;
【答案】A
【解析】A中x==y(6==6)为真,执行y--,y从6变为5;B、C、D条件均为假,y保持不变,故A正确。
15、以下关于字符数组的说法,错误的是( )
A. 字符数组可以存储字符串
B. 字符数组的长度可以通过strlen函数获取
C. 字符数组的长度必须大于字符串的长度
D. 字符数组初始化时可以省略大括号
【答案】B
【解析】strlen函数获取的是字符串的长度(不含结束符'\0'),而非字符数组的长度;字符数组的长度需通过sizeof函数获取。A、C、D均为正确说法,B错误。
16、以下关于if-else语句的说法,正确的是( )
A. if语句必须搭配else语句使用
B. else语句可以单独使用
C. 多个else语句可以并列使用
D. else语句与最近的未配对的if语句配对
【答案】D
【解析】A中if语句可单独使用,无需搭配else;B中else不能单独使用,必须与if配对;C中多个else不能并列,需嵌套使用;D正确,else遵循“就近匹配”原则。
17、要以读写方式打开二进制文件,若文件不存在则创建,应使用的fopen模式是( )
A. "r+" B. "w+" C. "rb+" D. "wb+"
【答案】D
【解析】二进制文件操作需在模式后加'b';"wb+"是二进制读写模式,文件不存在则创建,存在则清空;"rb+"是二进制读写模式,文件不存在则失败;"r+"、"w+"是文本模式。故D正确。
18、执行以下代码,输出结果是( )
int i=0, j=0;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{ if(j==1) continue;
printf("%d%d", i, j);
} }
A. 0010 B. 00011011 C. 0011 D. 无输出
【答案】A
【解析】外层循环i=0时,内层循环j=0(输出00)、j=1(执行continue,跳过输出);i=1时,内层循环j=0(输出10)、j=1(跳过输出)。故总输出0010。
19、以下关于函数返回值的说法,错误的是( )
A. 函数的返回值类型由函数定义时的类型决定
B. 函数可以返回一个指针
C. 函数的返回值只能是基本数据类型
D. void类型函数没有返回值
【答案】C
【解析】函数的返回值可以是基本数据类型,也可以是构造数据类型(如数组、结构体)或指针类型;A、B、D均为正确说法,C错误。
20、以下关于数组和指针的关系,正确的是( )
A. 数组名就是一个指针常量
B. 指针只能指向单个变量,不能指向数组
C. 数组可以通过指针遍历,指针不能通过数组下标访问
D. 数组和指针完全等价
【答案】A
【解析】数组名代表数组首元素的地址,是指针常量;B中指针可以指向数组(如int *p=arr;);C中指针可通过数组下标访问(如p[0]等价于*p);D中数组和指针不完全等价(数组名是常量,指针是变量)。故A正确。
二、 判断题(本题共10小题,每题2分,共20分)
1. C语言程序可以没有注释,注释仅用于提高代码可读性。( )
【答案】正确。解析:注释是对代码的说明,不参与程序编译和执行,程序可以没有注释。
2. 标识符可以使用关键字,但不能使用保留字。( )
【答案】错误。解析:标识符既不能使用关键字,也不能使用保留字(保留字是预留的关键字,未来可能成为关键字)。
3. 表达式a + b * c的运算顺序是先算a + b,再算乘以c。( )
【答案】错误。解析:乘法优先级高于加法,应先算b * c,再算a加上其结果。
4. 数组的长度在定义后可以通过赋值语句修改。( )
【答案】错误。解析:C语言数组的长度在定义时确定,是固定值,不能通过赋值语句修改。
5. do-while循环的循环体至少执行一次,while循环的循环体可能一次都不执行。( )
【答案】正确。解析:do-while循环先执行循环体再判断条件,因此至少执行一次;while循环先判断条件,条件为假时循环体一次都不执行。
6. 指针变量可以指向任意类型的变量,无需考虑类型匹配。( )
【答案】错误。解析:指针变量的类型必须与它指向的变量类型一致,否则会导致内存访问错误。
7. 逻辑或运算"||"的运算结果为真时,仅需其中一个操作数为真。( )
【答案】正确。解析:逻辑或运算的规则是“一真则真,全假则假”,只要有一个操作数为真,结果就为真。
8. 关闭文件时,若文件未正常关闭,已写入的数据会全部丢失。( )
【答案】错误。解析:文件操作有缓冲区,未关闭文件时,部分数据可能仍在缓冲区;若未正常关闭,缓冲区数据可能丢失,但已写入磁盘的数据不会丢失。
9. 函数可以调用自身,这种调用方式称为递归调用。( )
【答案】正确。解析:递归调用的定义就是函数调用自身。
10. 二维数组在内存中按列优先存储,即先存储第一列元素,再存储第二列元素。( )
【答案】错误。解析:C语言中二维数组在内存中按行优先存储,即先存储第一行所有元素,再存储第二行所有元素。
三、 应用题(共20分)
编写一个C语言程序,实现以下功能(如图所示):
1. 定义一个一维数组,存储10个整型数据;
2. 通过键盘输入10个数据存入数组;
3. 编写函数将数组元素按从小到大的顺序排序(冒泡排序法);
4. 输出排序前和排序后的数组元素。。
【答案】
#include <stdio.h>
// 冒泡排序函数:按从小到大排序,形参接收数组首地址和长度
void bubbleSort(int arr[], int len) {
int i, j, temp;
// 外层循环控制排序轮数,共需len-1轮
for(i = 0; i < len - 1; i++) {
// 内层循环控制每轮比较次数,每轮后最大元素已沉底,比较次数递减
for(j = 0; j < len - 1 - i; j++) {
// 相邻元素比较,逆序则交换
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
// 输出数组元素函数
void printArr(int arr[], int len) {
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]); // 计算数组长度
// 从键盘输入10个整型数据
printf("请输入10个整型数据:
");
for(int i = 0; i < len; i++) {
scanf("%d", &arr[i]);
}
// 输出排序前的数组
printf("排序前的数组:");
printArr(arr, len);
// 调用冒泡排序函数
bubbleSort(arr, len);
// 输出排序后的数组
printf("排序后的数组:");
printArr(arr, len);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$