《程序设计基础-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个元素,超出列数,属于非法初始化,编译会报错。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$