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

| 2份
| 12页
| 52人阅读
| 0人下载

内容正文:

《程序设计基础- C语言》高等教育出版社 期末复习卷(八) 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题3分,共60分) 1、以下关于C语言程序编译过程的说法,正确的是( ) A. 编译阶段将源文件转换为目标文件 B. 预处理阶段进行语法检查 C. 汇编阶段执行宏替换 D. 链接阶段将源文件转换为汇编文件 【答案】A 【解析】C语言编译流程中,预处理阶段处理#指令(宏替换、文件包含等),无语法检查;编译阶段将预处理后的源文件转换为汇编文件;汇编阶段将汇编文件转换为目标文件;链接阶段将目标文件与库文件结合生成可执行文件。故A正确。 2、若int a=5, b=2;,则表达式(float)(a/b)的结果是( ) A. 2.0 B. 2.5 C. 2 D. 3.0 【答案】A 【解析】a和b均为int型,a/b执行整数除法,结果为2;随后将2强制转换为float型2.0,而非先转换再除法。若要得到2.5,需先将其中一个操作数转换为float,如(float)a/b。 3、下列标识符中,符合C语言命名规则的是( ) A. _3a B. a-3 C. 3a_ D. float 【答案】A 【解析】合法标识符由字母、下划线、数字组成,首字符不能为数字,且不能是关键字。B含特殊字符减号,C以数字开头,D是关键字,均不合法;A以下划线开头,后续跟数字和字母,符合规则。 4、执行语句int x=3; x *= x + 1;后,x的值是( ) A. 12 B. 9 C. 6 D. 16 【答案】A 【解析】复合赋值运算符优先级低于算术运算符,x *= x + 1等价于x = x * (x + 1),即3 * (3+1)=12。 5、以下函数中,用于向屏幕输出单个字符的是( ) A. getchar() B. puts() C. putchar() D. printf() 【答案】C 【解析】putchar()专门用于输出单个字符;getchar()是输入单个字符函数,puts()用于输出字符串,printf()是通用输出函数,可输出多种类型数据(需指定格式符)。故C正确。 6、定义int arr[] = {1,2,3,4,5};,则数组arr的长度是( ) A. 4 B. 5 C. 6 D. 不确定 【答案】B 【解析】数组初始化时,若未指定长度,编译器会根据初始化元素个数自动推算长度。arr初始化了5个元素,因此长度为5。 7、已知int x=4, y=6;,执行表达式x > y ? ++x : --y的结果是( ) A. 3 B. 4 C. 5 D. 6 【答案】C 【解析】x > y(4>6)为假,执行--y,--y是先自减后使用,y从6变为5,故表达式结果为5。 8、执行以下代码,输出结果是( ) int i=0; for(; i<3; i++) { printf("%d", i); } A. 012 B. 123 C. 01 D. 无输出 【答案】A 【解析】for循环的初始化表达式可省略,此时i需在循环外提前初始化。循环条件i<3,i从0到2,依次输出0、1、2,故结果为012。 9、C语言中,字符串"\tabc"的长度不含结束符是( ) A. 3 B. 4 C. 5 D. 6 【答案】B 【解析】字符串长度统计可见字符和转义字符的个数,"\t"是单个转义字符(制表符),后续跟a、b、c三个字符,共4个字符,长度为4。 10、二维数组int arr[3][4] = {{1}, {2,3}, {4,5,6}};,则arr[3][1]的值是( ) A. 6 B. 2 C. 5 D. 随机值 【答案】D 【解析】arr[3][4] = {{1}, {2,3}, {4,5,6}}表示有3行4列,行索引范围0~2,列索引范围0~3.要访问arr[3][1],行索引为3,超过行索引范围,属于越界访问,故为随机值。 11、若int a=10, *p=&a;,则以下表达式中,值为10的是( ) A. p B. &a C. *p D. &p 【答案】C 【解析】p是指向a的指针,存储a的地址;*p是对指针p的解引用,得到a的值10;&a是a的地址,&p是指针p自身的地址,故C正确。 12、执行以下代码,输出结果是( ) char str[6] = {'C','h','i','n','a'}; printf("%s", str); A. China B. China乱码 C. 无输出 D. 编译错误 【答案】B 【解析】字符数组初始化时未添加结束符'\0',printf输出字符串时会一直读取直到遇到'\0',因此输出"China"后会跟随乱码。 13、执行以下代码,s的最终值是( ) int s=0, k=1; while(k<=5) { s += k; k += 2; } A. 9 B. 15 C. 6 D. 3 【答案】A 【解析】while循环执行3次:k=1时s=1,k=3;k=3时s=4,k=5;k=5时s=9,k=7,此时k>5循环结束。故s=1+3+5=9。 14、已知int m=3, n=8;,下列选项中条件为假的是( ) A. m + n > 10 B. m != n C. m % n == 3 D. m > n 【答案】D 【解析】A中m+n=11>10为真;B中3≠8为真;C中3%8=3为真;D中3>8为假,故D正确。 15、以下关于字符串的说法,正确的是( ) A. 字符串必须用单引号括起来 B. 字符串的结束标志是空格 C. 空字符串的长度为0 D. 字符数组一定是字符串 【答案】C 【解析】A中字符串需用双引号括起来,单引号用于单个字符;B中字符串结束标志是'\0',非空格;D中字符数组若未以'\0'结尾,则不是字符串;C中空字符串("")仅含结束符'\0',长度为0,正确。 16、以下关于switch语句的说法,错误的是( ) A. switch的表达式可以是字符型 B. case后的值必须唯一 C. default语句可以省略 D. 每个case后必须有break语句 【答案】D 【解析】switch语句中,case后可无break语句,此时会发生“穿透”现象(执行当前case后继续执行后续case);A、B、C均为正确说法,D错误。 17、要以追加方式打开文本文件,若文件不存在则创建,应使用的fopen模式是( ) A. "r" B. "w" C. "a" D. "r+" 【答案】C 【解析】"a"是文本追加模式,数据写入文件末尾,文件不存在则创建;"r"是只读模式(文件不存在则失败),"w"是写入模式(清空原有内容),"r+"是读写模式,故C正确。 18、执行以下代码,输出结果是( ) int i=1; do { if(i==3) break; printf("%d", i); i++; } while(i<=5); A. 12 B. 123 C. 12345 D. 无输出 【答案】A 【解析】do-while循环先执行循环体:i=1时输出1,i=2;i=2时输出2,i=3;i=3时执行break,跳出循环,不再判断条件。故输出12。 19、以下关于函数参数传递的说法,正确的是( ) A. 值传递时,实参的值会被形参修改 B. 地址传递时,实参的地址会被形参修改 C. 值传递时,形参是实参的副本 D. 地址传递时,形参不能修改实参指向的内容 【答案】C 【解析】值传递时,形参是实参的副本,形参的修改不影响实参;地址传递时,形参存储实参的地址,可通过解引用修改实参指向的内容,但不会修改实参自身的地址。故C正确。 20、以下关于递归函数的说法,正确的是( ) A. 递归函数无需终止条件 B. 递归函数调用会占用栈空间 C. 递归函数的效率一定比循环高 D. 递归函数不能调用其他函数 【答案】B 【解析】递归函数必须有终止条件,否则会发生无限递归(栈溢出);递归调用时,每次调用都会在栈中开辟空间存储函数信息,会占用栈空间;递归效率通常低于循环(频繁入栈出栈);递归函数可调用其他函数。故B正确。 二、 填空题(本题共10小题,每题2分,共20分) 1. C语言中,键盘输入的单词是__________。 【答案】scanf 2. 定义int x=22, y=4;,表达式x % y + (x / y)的结果是__________。 【答案】7 3. do-while循环的基本格式是:do { 循环体 } while(__________); 【答案】循环条件 4. 若指针变量p指向int型变量a,则获取a的值的表达式是__________,获取a的地址的表达式是__________。 【答案】*p &a(或p) 5. 已知int a=9, b=3;,表达式a < b ? a+b : a-b的结果是__________。 【答案】6 6. 执行以下代码,输出的星号个数是__________。 int i=0; while(i<3) { printf("*"); i++; } 【答案】3 7. 函数定义的基本组成部分包括返回值类型、__________、参数列表和__________。 【答案】函数名 函数体 8. 已知int x=5, y=2;,逻辑表达式(x>3) || (y<1)的结果是__________。 【答案】1(真) 9. 存储字符串"test"需要的字节数是__________,其中结束符的ASCII码值是__________。 【答案】5 0 10. 定义一个2行3列的整型二维数组,初始化第一行元素为1、2、3,第二行元素为4、5、6,语句是__________。 【答案】int arr[2][3] = {{1,2,3}, {4,5,6}}; 三、 应用题(共20分) 编写一个C语言程序,实现以下功能(如图所示): 1. 从键盘输入一个字符串(长度不超过20); 2. 编写函数统计字符串中大写字母、小写字母和数字的个数; 3. 输出原字符串以及统计得到的大写字母、小写字母和数字的个数。 【答案】 #include <stdio.h> #include <string.h> // 统计字符串中大写字母、小写字母、数字的个数,通过指针返回结果 void countChar(char str[], int *upper, int *lower, int *digit) { *upper = 0; // 大写字母个数初始化为0 *lower = 0; // 小写字母个数初始化为0 *digit = 0; // 数字个数初始化为0 int len = strlen(str); // 获取字符串长度 for(int i=0; i<len; i++) { if(str[i] >= 'A' && str[i] <= 'Z') { (*upper)++; } else if(str[i] >= 'a' && str[i] <= 'z') { (*lower)++; } else if(str[i] >= '0' && str[i] <= '9') { (*digit)++; } } } int main() { char str[21]; // 定义字符数组,预留结束符位置 int upper, lower, digit; // 输入字符串 printf("请输入一个字符串(长度不超过20): "); gets(str); // 读取字符串(注:实际开发中建议用fgets,避免缓冲区溢出) // 调用函数统计 countChar(str, &upper, &lower, &digit); // 输出结果 printf("原字符串:%s ", str); printf("大写字母个数:%d ", upper); printf("小写字母个数:%d ", lower); printf("数字个数:%d ", digit); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 《程序设计基础- C语言》高等教育出版社 期末复习卷(八) 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题3分,共60分) 1、以下关于C语言程序编译过程的说法,正确的是( ) A. 编译阶段将源文件转换为目标文件 B. 预处理阶段进行语法检查 C. 汇编阶段执行宏替换 D. 链接阶段将源文件转换为汇编文件 2、若int a=5, b=2;,则表达式(float)(a/b)的结果是( ) A. 2.0 B. 2.5 C. 2 D. 3.0 3、下列标识符中,符合C语言命名规则的是( ) A. _3a B. a-3 C. 3a_ D. float 4、执行语句int x=3; x *= x + 1;后,x的值是( ) A. 12 B. 9 C. 6 D. 16 5、以下函数中,用于向屏幕输出单个字符的是( ) A. getchar() B. puts() C. putchar() D. printf() 6、定义int arr[] = {1,2,3,4,5};,则数组arr的长度是( ) A. 4 B. 5 C. 6 D. 不确定 7、已知int x=4, y=6;,执行表达式x > y ? ++x : --y的结果是( ) A. 3 B. 4 C. 5 D. 6 8、执行以下代码,输出结果是( ) int i=0; for(; i<3; i++) { printf("%d", i); } A. 012 B. 123 C. 01 D. 无输出 9、C语言中,字符串"\tabc"的长度不含结束符是( ) A. 3 B. 4 C. 5 D. 6 10、二维数组int arr[3][4] = {{1}, {2,3}, {4,5,6}};,则arr[3][1]的值是( ) A. 6 B. 2 C. 5 D. 随机值 11、若int a=10, *p=&a;,则以下表达式中,值为10的是( ) A. p B. &a C. *p D. &p 12、执行以下代码,输出结果是( ) char str[6] = {'C','h','i','n','a'}; printf("%s", str); A. China B. China乱码 C. 无输出 D. 编译错误 13、执行以下代码,s的最终值是( ) int s=0, k=1; while(k<=5) { s += k; k += 2; } A. 9 B. 15 C. 6 D. 3 14、已知int m=3, n=8;,下列选项中条件为假的是( ) A. m + n > 10 B. m != n C. m % n == 3 D. m > n 15、以下关于字符串的说法,正确的是( ) A. 字符串必须用单引号括起来 B. 字符串的结束标志是空格 C. 空字符串的长度为0 D. 字符数组一定是字符串 16、以下关于switch语句的说法,错误的是( ) A. switch的表达式可以是字符型 B. case后的值必须唯一 C. default语句可以省略 D. 每个case后必须有break语句 17、要以追加方式打开文本文件,若文件不存在则创建,应使用的fopen模式是( ) A. "r" B. "w" C. "a" D. "r+" 18、执行以下代码,输出结果是( ) int i=1; do { if(i==3) break; printf("%d", i); i++; } while(i<=5); A. 12 B. 123 C. 12345 D. 无输出 19、以下关于函数参数传递的说法,正确的是( ) A. 值传递时,实参的值会被形参修改 B. 地址传递时,实参的地址会被形参修改 C. 值传递时,形参是实参的副本 D. 地址传递时,形参不能修改实参指向的内容 20、以下关于递归函数的说法,正确的是( ) A. 递归函数无需终止条件 B. 递归函数调用会占用栈空间 C. 递归函数的效率一定比循环高 D. 递归函数不能调用其他函数 二、 填空题(本题共10小题,每题2分,共20分) 1. C语言中,键盘输入的单词是__________。 2. 定义int x=22, y=4;,表达式x % y + (x / y)的结果是__________。 3. do-while循环的基本格式是:do { 循环体 } while(__________); 4. 若指针变量p指向int型变量a,则获取a的值的表达式是__________,获取a的地址的表达式是__________。 5. 已知int a=9, b=3;,表达式a < b ? a+b : a-b的结果是__________。 6. 执行以下代码,输出的星号个数是__________。 int i=0; while(i<3) { printf("*"); i++; } 7. 函数定义的基本组成部分包括返回值类型、__________、参数列表和__________。 8. 已知int x=5, y=2;,逻辑表达式(x>3) || (y<1)的结果是__________。 9. 存储字符串"test"需要的字节数是__________,其中结束符的ASCII码值是__________。 10. 定义一个2行3列的整型二维数组,初始化第一行元素为1、2、3,第二行元素为4、5、6,语句是__________。 三、 应用题(共20分) 编写一个C语言程序,实现以下功能(如图所示): 1. 从键盘输入一个字符串(长度不超过20); 2. 编写函数统计字符串中大写字母、小写字母和数字的个数; 3. 输出原字符串以及统计得到的大写字母、小写字母和数字的个数。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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

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