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

| 2份
| 11页
| 57人阅读
| 0人下载

内容正文:

《程序设计基础- C语言》高等教育出版社 期末复习卷(六) 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题3分,共60分) 1、以下关于C语言预处理指令的说法,错误的是( ) A. 预处理指令以#开头 B. 预处理指令在编译阶段执行 C. #define定义的宏无类型检查 D. #include用于引入头文件 2、若float x=3.6, y=2.4;,则表达式(int)x + y的结果类型是( ) A. int B. float C. double D. 无法确定 3、下列标识符中,可作为C语言合法函数名的是( ) A. 3func B. func_3 C. func-3 D. return 4、执行语句int a=4; a += a * 2;后,a的值是( ) A. 12 B. 8 C. 16 D. 24 5、以下函数中,用于从键盘读取单个字符的是( ) A. putchar() B. gets() C. getchar() D. scanf() 6、定义int arr[6] = {1,2,3};,则数组元素arr[4]的值是( ) A. 3 B. 0 C. 随机值 D. 未定义 7、已知int m=3, n=5;,执行表达式m < n ? m++ : n--的结果是( ) A. 3 B. 4 C. 5 D. 4 8、执行以下代码,输出结果是( ) int i=1; for(i=1; i<=4; i++) { if(i==2) continue; printf("%d", i); } A. 134 B. 1234 C. 14 D. 234 9、C语言中,字符串"ab c"的长度不含结束符是( ) A. 3 B. 4 C. 5 D. 6 10、二维数组int arr[3][3] = {{1}, {2,3}, {4,5,6}};,则arr[1][1]的值是( ) A. 2 B. 3 C. 0 D. 5 11、若int a=8, *p=&a;,则以下表达式中值为8的是( ) A. &p B. *p C. p D. *&p 12、执行以下代码,输出结果是( ) char str[] = "China\0Beijing"; printf("%s", str); A. China B. ChinaBeijing C. China Beijing D. Beijing 13、执行以下代码,sum的最终值是( ) int sum=0, i=1; do { sum += i; i += 3; } while(i<=10); A. 12 B. 16 C. 18 D. 22 14、已知int x=5, y=5;,下列选项中能使y的值变为6的是( ) A. if(x==y) y++; B. if(x>y) y++; C. if(x<y) y++; D. if(x!=y) y++; 15、以下关于字符数组初始化的说法,正确的是( ) A. char str[5] = "hello"; 合法 B. char str[] = {'h','e','l','l','o'}; 是字符串 C. char str[6] = "hello"; 合法 D. char str[5] = {'h','e','l'}; 长度为3 16、以下关于switch语句的说法,正确的是( ) A. case后必须跟常量表达式 B. case后的值可以重复 C. default语句必须放在最后 D. switch的表达式可以是字符串类型 17、要以只读方式打开文本文件,若文件不存在则打开失败,应使用的fopen模式是( ) A. "r" B. "w" C. "a" D. "r+" 18、执行以下代码,输出结果是( ) int i=0, j=0; while(i<2) { i++; while(j<3) { printf("*"); j++; } } A. *** B. ****** C. ** D. 无输出 19、以下关于二维数组的说法,错误的是( ) A. 二维数组在内存中按行优先存储 B. 二维数组的行下标可以省略 C. 二维数组的列下标不能省略 D. 定义int arr[][3] = {{1}, {2,3}}; 合法 20、以下关于函数的说法,正确的是( ) A. 函数可以没有返回值 B. 函数必须有参数 C. 函数定义可以嵌套 D. 函数声明必须在函数调用之后 二、 填空题(本题共10小题,每题2分,共20分) 1. C语言中,多行注释的开始符号是__________,单行注释的作用范围是__________。 2. 定义int a=15, b=4;,表达式a / b + a % b的结果是__________。 3. for循环的三个表达式分别是初始化表达式、__________和__________。 4. 定义一个指向int类型变量的指针变量p,正确的语句是__________。 5. 已知int x=7, y=2;,表达式x > y ? x%y : x+y的结果是__________。 6. 执行以下代码,最终i的值是__________。 int i=5; while(i>2) { i--; if(i==3) break; } 7. 函数调用时,实参向形参传递数据的方式有值传递和__________两种。 8. 已知int a=2, b=6;,逻辑表达式(a>5) && (b<10)的结果是__________。 9. 用字符数组存储字符串"student",数组长度至少为__________,因为需要存储__________。 10. 定义一个3行4列的整型二维数组,初始化所有元素为0,最简语句是__________。 三、 判断题(本题共10小题,每题2分,共20分) 1. C语言程序必须经过预处理、编译、汇编、链接四个阶段才能生成可执行文件。( ) 2. 标识符"_abc"和"ABC"是同一个标识符,因为C语言不区分大小写。( ) 3. 表达式3 + 5 * 2的结果是13,因为算术运算符遵循从左到右的运算顺序。( ) 4. 数组arr[10]的下标范围是1~10,因此arr[0]是非法引用。( ) 5. do-while循环的循环体至少执行一次,因此循环条件可以省略。( ) 6. 指针变量p指向变量a,则*p等价于a,&*p等价于&a。( ) 7. 逻辑或运算"||"中,若左侧操作数为假,右侧操作数才会被计算。( ) 8. 用fscanf函数从文件读取数据时,必须确保文件已成功打开,否则会导致程序错误。( ) 9. 函数的返回值类型必须与函数定义时的类型一致,否则会出现编译错误。( ) 10. 二维数组int arr[2][3] = {{1,2}, {3,4,5,6}}; 初始化时,多余的元素会被自动舍弃,因此是合法的。( ) 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 《程序设计基础- C语言》高等教育出版社 期末复习卷(六) 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 单项选择题(本题共20小题,每题3分,共60分) 1、以下关于C语言预处理指令的说法,错误的是( ) A. 预处理指令以#开头 B. 预处理指令在编译阶段执行 C. #define定义的宏无类型检查 D. #include用于引入头文件 【答案】B 【解析】预处理指令在预处理阶段执行,而非编译阶段;预处理的核心工作是宏替换、文件包含等,编译阶段才进行语法分析和代码生成,故B错误。 2、若float x=3.6, y=2.4;,则表达式(int)x + y的结果类型是( ) A. int B. float C. double D. 无法确定 【答案】B 【解析】(int)x将float型3.6转换为int型3,再与float型y(2.4)运算, C语言中int与float运算时,int会隐式转换为float,最终结果为float型。 3、下列标识符中,可作为C语言合法函数名的是( ) A. 3func B. func_3 C. func-3 D. return 【答案】B 【解析】合法标识符由字母、下划线、数字组成,首字符不能为数字,且不能是关键字。 A以数字开头,C含特殊字符减号,D是关键字,均不合法;B符合命名规则。 4、执行语句int a=4; a += a * 2;后,a的值是( ) A. 12 B. 8 C. 16 D. 24 【答案】A 【解析】复合赋值运算符优先级低于算术运算符,a += a * 2等价于a = a + (a * 2),即4 + (4*2)=12。 5、以下函数中,用于从键盘读取单个字符的是( ) A. putchar() B. gets() C. getchar() D. scanf() 【答案】C 【解析】getchar()专门用于读取单个字符;putchar()是输出字符函数,gets()用于读取字符串(已淘汰),scanf()是通用输入函数,可读取多种类型数据,故C正确。 6、定义int arr[6] = {1,2,3};,则数组元素arr[4]的值是( ) A. 3 B. 0 C. 随机值 D. 未定义 【答案】B 【解析】数组初始化时,未显式赋值的元素默认值为0。arr[6]仅初始化前3个元素为1、2、3,arr[4]属于未显式初始化元素,值为0。 7、已知int m=3, n=5;,执行表达式m < n ? m++ : n--的结果是( ) A. 3 B. 4 C. 5 D. 4 【答案】A 【解析】三目运算符优先级高于赋值,m < n(3<5)为真,执行m++,m++是先使用后自增,故表达式结果为m的原始值3,执行后m变为4。 8、执行以下代码,输出结果是( ) int i=1; for(i=1; i<=4; i++) { if(i==2) continue; printf("%d", i); } A. 134 B. 1234 C. 14 D. 234 【答案】A 【解析】for循环中i从1到4,当i==2时执行continue,跳过本次循环的printf语句;其余情况下(i=1、3、4)正常输出,故输出134。 9、C语言中,字符串"ab c"的长度不含结束符是( ) A. 3 B. 4 C. 5 D. 6 【答案】B 【解析】字符串长度统计可见字符和转义字符的个数," "是单个转义字符(换行符),故"ab c"包含a、b、 、c共4个字符,长度为4。 10、二维数组int arr[3][3] = {{1}, {2,3}, {4,5,6}};,则arr[1][1]的值是( ) A. 2 B. 3 C. 0 D. 5 【答案】B 【解析】二维数组按行存储,arr[1]行初始化值为2、3,未显式初始化的arr[1][2]为0;arr[1][1]是第二行第二列元素,值为3。 11、若int a=8, *p=&a;,则以下表达式中值为8的是( ) A. &p B. *p C. p D. *&p 【答案】B 【解析】p是指向a的指针,存储a的地址;*p是对指针p的解引用,得到a的值8;&p是指针p自身的地址,p是a的地址,*&p等价于p,故 B正确。 12、执行以下代码,输出结果是( ) char str[] = "China\0Beijing"; printf("%s", str); A. China B. ChinaBeijing C. China Beijing D. Beijing 【答案】A 【解析】printf输出字符串时,遇'\0'停止输出。str中"China"后紧跟'\0',因此仅输出China。 13、执行以下代码,sum的最终值是( ) int sum=0, i=1; do { sum += i; i += 3; } while(i<=10); A. 12 B. 16 C. 18 D. 22 【答案】D 【解析】循环执行4次,i分别为1、4、7、10,sum=1+4+7+10=22。 14、已知int x=5, y=5;,下列选项中能使y的值变为6的是( ) A. if(x==y) y++; B. if(x>y) y++; C. if(x<y) y++; D. if(x!=y) y++; 【答案】A 【解析】A中x==y(5==5)为真,执行y++,y从5变为6;B、C、D条件均为假,y保持不变,故 A正确。 15、以下关于字符数组初始化的说法,正确的是( ) A. char str[5] = "hello"; 合法 B. char str[] = {'h','e','l','l','o'}; 是字符串 C. char str[6] = "hello"; 合法 D. char str[5] = {'h','e','l'}; 长度为3 【答案】C 【解析】A中"hello"含5个字符+1个结束符,需6个字节,str[5]空间不足,非法;B中未添加结束符'\0',仅为字符数组,非字符串;C中str[6]可容纳"hello"及结束符,合法;D中数组长度为5,未初始化元素为0,故C正确。 16、以下关于switch语句的说法,正确的是( ) A. case后必须跟常量表达式 B. case后的值可以重复 C. default语句必须放在最后 D. switch的表达式可以是字符串类型 【答案】A 【解析】switch语句的case后必须是常量表达式(如字面量、宏定义);case后的值不能重复,否则编译错误;default语句可放在任意位置;switch表达式只能是整型或字符型,不能是字符串,故A正确。 17、要以只读方式打开文本文件,若文件不存在则打开失败,应使用的fopen模式是( ) A. "r" B. "w" C. "a" D. "r+" 【答案】A 【解析】"r"是文本只读模式,文件不存在则打开失败;"w"是写入模式,文件不存在则创建;"a"是追加模式;"r+"是读写模式,故A正确。 18、执行以下代码,输出结果是( ) int i=0, j=0; while(i<2) { i++; while(j<3) { printf("*"); j++; } } A. *** B. ****** C. ** D. 无输出 【答案】A 【解析】外层循环i从0到1:i=0时,i++变为1,内层循环j从0到2,输出3个*,j变为3;i=1时,i++变为2,内层循环j=3不满足j<3,不执行,故总输出***。 19、以下关于二维数组的说法,错误的是( ) A. 二维数组在内存中按行优先存储 B. 二维数组的行下标可以省略 C. 二维数组的列下标不能省略 D. 定义int arr[][3] = {{1}, {2,3}}; 合法 【答案】B 【解析】二维数组定义时,列下标不能省略,行下标可省略(编译器根据初始化元素推算行数);A、C、D均为正确说法,B错误。 20、以下关于函数的说法,正确的是( ) A. 函数可以没有返回值 B. 函数必须有参数 C. 函数定义可以嵌套 D. 函数声明必须在函数调用之后 【答案】A 【解析】void类型函数没有返回值,A正确;函数可以无参数(空参函数),B错误 C语言不允许函数嵌套定义,C错误;函数声明需在调用之前,否则编译器无法识别,D错误。 二、 填空题(本题共10小题,每题2分,共20分) 1. C语言中,多行注释的开始符号是__________,单行注释的作用范围是__________。 【答案】/* 从//开始到本行结束 2. 定义int a=15, b=4;,表达式a / b + a % b的结果是__________。 【答案】6 3. for循环的三个表达式分别是初始化表达式、__________和__________。 【答案】条件表达式 增量/减量表达式 4. 定义一个指向int类型变量的指针变量p,正确的语句是__________。 【答案】int *p; 5. 已知int x=7, y=2;,表达式x > y ? x%y : x+y的结果是__________。 【答案】1 6. 执行以下代码,最终i的值是__________。 int i=5; while(i>2) { i--; if(i==3) break; } 【答案】3 7. 函数调用时,实参向形参传递数据的方式有值传递和__________两种。 【答案】地址传递(或引用传递,C语言本质为地址传递) 8. 已知int a=2, b=6;,逻辑表达式(a>5) && (b<10)的结果是__________。 【答案】0(假) 9. 用字符数组存储字符串"student",数组长度至少为__________,因为需要存储__________。 【答案】8 7个字符和1个结束符'\0' 10. 定义一个3行4列的整型二维数组,初始化所有元素为0,最简语句是__________。 【答案】int arr[3][4] = {0}; 三、 判断题(本题共10小题,每题2分,共20分) 1. C语言程序必须经过预处理、编译、汇编、链接四个阶段才能生成可执行文件。( ) 【答案】正确。解析:C语言程序的执行流程需经过预处理(处理#指令)、编译(生成汇编代码)、汇编(生成目标代码)、链接(生成可执行文件)四个阶段。 2. 标识符"_abc"和"ABC"是同一个标识符,因为C语言不区分大小写。( ) 【答案】错误。解析:C语言标识符区分大小写,"_abc"和"ABC"的字符组成和大小写均不同,是两个不同的标识符。 3. 表达式3 + 5 * 2的结果是13,因为算术运算符遵循从左到右的运算顺序。( ) 【答案】错误。解析:算术运算符中乘法优先级高于加法,表达式3+5*2应先算5*2=10,再算3+10=13,并非因为从左到右的顺序。 4. 数组arr[10]的下标范围是1~10,因此arr[0]是非法引用。( ) 【答案】错误。解析:C语言数组下标从0开始,arr[10]的下标范围是0~9,arr[0]是第一个元素的合法引用,arr[10]才是非法引用。 5. do-while循环的循环体至少执行一次,因此循环条件可以省略。( ) 【答案】错误。解析:do-while循环的循环条件不能省略,必须写在while后的括号中;其循环体至少执行一次是因为先执行循环体再判断条件,而非条件可省略。 6. 指针变量p指向变量a,则*p等价于a,&*p等价于&a。( ) 【答案】正确。解析:*p是对指针p的解引用,得到指向变量a的值,等价于a;&*p是取*p的地址,即a的地址,等价于&a。 7. 逻辑或运算"||"中,若左侧操作数为假,右侧操作数才会被计算。( ) 【答案】正确。解析:逻辑或遵循短路规则,左侧为真时整体结果为真,无需计算右侧;左侧为假时,需计算右侧才能确定整体结果。 8. 用fscanf函数从文件读取数据时,必须确保文件已成功打开,否则会导致程序错误。( ) 【答案】正确。解析:文件操作前需判断fopen的返回值,确认文件成功打开后再进行读写操作;若文件未打开就调用fscanf,会出现非法内存访问,导致程序异常。 9. 函数的返回值类型必须与函数定义时的类型一致,否则会出现编译错误。( ) 【答案】错误。解析:若函数返回值类型与定义时的类型不一致,编译器会进行隐式类型转换,不会直接出现编译错误,但可能导致返回值异常,不建议这样使用。 10. 二维数组int arr[2][3] = {{1,2}, {3,4,5,6}}; 初始化时,多余的元素会被自动舍弃,因此是合法的。( ) 【答案】错误。解析:二维数组的每行初始化元素个数不能超过列数,arr[2][3]的第二行列数为3,初始化元素{3,4,5,6}有4个元素,超出列数,属于非法初始化,编译会报错。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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

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