《程序设计基础-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; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

《程序设计基础-C语言》(高教版第二版)期末复习卷(九)-第1页
1
《程序设计基础-C语言》(高教版第二版)期末复习卷(九)-第2页
2

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。