《程序设计基础-C语言》(高教版第二版)期末复习卷(四)
|
2份
|
11页
|
101人阅读
|
0人下载
内容正文:
《程序设计基础-C语言》高等教育出版社
期末复习卷(四)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言预处理阶段的描述,正确的是( )
A. 会执行程序中的赋值语句
B. 会将宏定义常量替换为对应值
C. 会检查数组下标是否越界
D. 会分配变量内存
2、若int a=12, b=5;,则表达式a / b * 2.0的结果类型是( )
A. int B. float C. double D. 不确定
3、下列标识符中,符合C语言命名规则且可作为合法变量名的是( )
A. _123_num B. 123_num C. num-123 D. double
4、执行语句int x=3; x *= x + 2;后,x的值是( )
A. 9 B. 15 C. 6 D. 3
5、用于向屏幕输出单个字符的标准输出函数是( )
A. getchar() B. putchar() C. scanf() D. strlen()
6、以下数组初始化方式中,能将数组所有元素初始化为0的是( )
A. int arr[5] = {0};
B. int arr[5] = {};
C. int arr[] = {1,0,1,0,1};
D. int arr[5] = {1,2,3};
7、已知int a=4, b=6;,执行表达式a > b ? ++a : --b的结果是( )
A. 3 B. 5 C. 4 D. 6
8、执行以下代码,输出结果是( )
int i=2;
do
{
printf("%d", i++);
} while(i<5);
A. 234 B. 345 C. 23 D. 34
9、C语言中,字符串"abc\0def"的实际长度不含结束符是( )
A. 3 B. 6 C. 7 D. 4
10、二维数组int arr[2][4] = {{1,2}, {3}};,则arr[1][2]的值是( )
A. 3 B. 0 C. 2 D. 不确定
11、若int x=10, *p=&x;,则以下表达式中值为10的是( )
A. &x+1 B. &*p C. p D. *p+0
12、执行以下代码,输出结果是( )
char str[] = "hello\0world";
printf("%s", str);
A. hello B. helloworld C. hello world D. world
13、执行以下代码,sum的最终值是( )
int sum=0, i=1;
for(;i<=5;i++)
{
if(i%2!=0) sum+=i;
}
A. 9 B. 15 C. 6 D. 10
14、已知int a=5, b=5, k=0;,下列选项中能使k的值变为1的是( )
A. if(a==b) k++; B. if(a>b) k++; C. if(a<b) k++; D. if(a!=b) k++;
15、若要将字符串"hello"存入字符数组,以下错误的定义是( )
A. char str[5] = "hello";
B. char str[] = "hello";
C. char str[6] = {'h','e','l','l','o','\0'};
D. char str[6] = "hello";
16、以下关于break语句的说法,正确的是( )
A. 只能用于循环语句中 B. 可以用于switch语句和循环语句中
C. 可以用于任何语句中 D. 用于终止整个程序的执行
17、要以追加方式打开文本文件,若文件不存在则创建,应使用的fopen模式是( )
A. "a" B. "r+" C. "w+" D. "ab"
18、执行以下代码,输出结果是( )
for(int i=1; i<=5; i++) {
if(i==3) break;
printf("%d", i);
}
A. 12 B. 123 C. 12345 D. 1245
19、二维数组int arr[3][3] = {{1}, {2,3}, {4,5,6}};,则arr[2][2]的值是( )
A. 5 B. 6 C. 3 D. 0
20、以下关于函数参数传递的说法,错误的是( )
A. 值传递时,形参是实参的拷贝
B. 地址传递时,形参和实参指向同一内存空间
C. 数组作为参数传递时,本质是地址传递
D. 值传递时,形参的修改会影响实参
二、 填空题(本题共10小题,每题2分,共20分)
1. C语言中,单行注释的符号是__________,多行注释的结束符号是__________。
2. 定义int a=7, b=4;,表达式a % b的结果是__________。
3. switch语句中,__________语句用于结束当前case分支的执行,防止case穿透。
4. 定义一个能存储10个float类型数据的数组,正确的语句是__________。
5. 已知int x=3, y=8;,表达式x < y ? x+2 : y-3的结果是__________。
6. 执行以下代码,最终sum的值是__________。
int sum=0, i=2;
while(i<=6)
{ sum+=i; i+=2; }
7. 递归函数中,__________是避免程序陷入无限递归的必要条件。
8. 已知int m=5, n=12;,逻辑表达式(m>3) || (n<10)的结果是__________。
9. C语言中,字符串的结束标志是__________,其ASCII码值为__________。
10. 定义一个2行5列的整型二维数组,并初始化所有元素为1,语句是__________。
三、 判断题(本题共10小题,每题2分,共20分)
1. C语言程序中,#include "stdio.h"和#include <stdio.h>的作用完全相同,没有区别。( )
2. C语言中,标识符区分大小写,因此“Name”和“name”是两个不同的变量。( )
3. 表达式a = 3 + 5的结果是8,因此该表达式可以作为if语句的条件。( )
4. 二维数组arr[3][4]的元素在内存中按列优先顺序存储。( )
5. while循环的循环体可能一次都不执行,而do-while循环的循环体至少执行一次。( )
6. 数组名代表数组首元素的地址,因此可以对数组名进行自增运算(如arr++)。( )
7. 逻辑或运算“||”遵循短路规则,即左侧操作数为真时,右侧操作数不再计算。( )
8. 用fopen打开文件后,若程序异常终止,系统会自动关闭文件,因此无需手动调用fclose。( )
9. 递归函数的实现效率一定比循环低,因此应尽量避免使用递归。( )
10. 二维数组int arr[2][3] = {{1,2}, {3}};,则arr[1][1]的值是0。( )
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《程序设计基础-C语言》高等教育出版社
期末复习卷(四)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言预处理阶段的描述,正确的是( )
A. 会执行程序中的赋值语句
B. 会将宏定义常量替换为对应值
C. 会检查数组下标是否越界
D. 会分配变量内存
【答案】B
【解析】预处理阶段的核心工作包括宏替换、文件包含等,不执行代码、不检查语法错误、不分配内存;A、C、D均为运行或编译阶段的操作。
2、若int a=12, b=5;,则表达式a / b * 2.0的结果类型是( )
A. int B. float C. double D. 不确定
【答案】C
【解析】C语言中不同类型运算会发生隐式转换,int与double运算结果为double;a/b结果为int型2,再与2.0(double型)运算,最终结果为double型。
3、下列标识符中,符合C语言命名规则且可作为合法变量名的是( )
A. _123_num B. 123_num C. num-123 D. double
【答案】A
【解析】合法标识符由字母、下划线、数字组成,首字符不能为数字,且不能是关键字。B以数字开头,C含减号(特殊字符),D是关键字,均不合法。
4、执行语句int x=3; x *= x + 2;后,x的值是( )
A. 9 B. 15 C. 6 D. 3
【答案】B
【解析】复合赋值运算符优先级低于算术运算符,x *= x + 2等价于x = x * (x + 2),即3*(3+2)=15。
5、用于向屏幕输出单个字符的标准输出函数是( )
A. getchar() B. putchar() C. scanf() D. strlen()
【答案】B
【解析】putchar()专门用于输出单个字符;getchar()是输入字符函数,scanf()是通用输入函数,strlen()是求字符串长度函数。
6、以下数组初始化方式中,能将数组所有元素初始化为0的是( )
A. int arr[5] = {0};
B. int arr[5] = {};
C. int arr[] = {1,0,1,0,1};
D. int arr[5] = {1,2,3};
【答案】A
【解析】A中仅指定第一个元素为0,其余未显式初始化元素默认值为0;B在标准C中不合法(不能空初始化列表);C元素值为1、0、1、0、1;D后两个元素为0,非全部。
7、已知int a=4, b=6;,执行表达式a > b ? ++a : --b的结果是( )
A. 3 B. 5 C. 4 D. 6
【答案】B
【解析】三目运算符优先级高于赋值,a > b(4>6)为假,执行后半部分--b,--b是先减后用,b初始值为6,自减后变为5,故表达式结果为5。
8、执行以下代码,输出结果是( )
int i=2;
do
{
printf("%d", i++);
} while(i<5);
A. 234 B. 345 C. 23 D. 34
【答案】A
【解析】do-while循环至少执行一次,i初始2,第一次输出2后i变为3;第二次输出3后i变为4;第三次输出4后i变为5,不满足i<5,循环结束,输出234。
9、C语言中,字符串"abc\0def"的实际长度不含结束符是( )
A. 3 B. 6 C. 7 D. 4
【答案】A
【解析】字符串以'\0'为结束标志,strlen()等函数遇'\0'停止计数,"abc"后为'\0',故实际长度为3。
10、二维数组int arr[2][4] = {{1,2}, {3}};,则arr[1][2]的值是( )
A. 3 B. 0 C. 2 D. 不确定
【答案】B
【解析】二维数组未显式初始化的元素默认值为0,arr[1]行仅初始化第一个元素为3,arr[1][2]未初始化,故值为0。
11、若int x=10, *p=&x;,则以下表达式中值为10的是( )
A. &x+1 B. &*p C. p D. *p+0
【答案】D
【解析】A中&x取x的地址,*解引用地址,结果为&x的下一个地址;B结果为p的地址(即&x);C是指针变量p的值(&x);D中*p为10,10+0结果仍为10。D符合要求。
12、执行以下代码,输出结果是( )
char str[] = "hello\0world";
printf("%s", str);
A. hello B. helloworld C. hello world D. world
【答案】A
【解析】printf输出字符串时遇'\0'停止,str中"hello"后为'\0',故仅输出hello。
13、执行以下代码,sum的最终值是( )
int sum=0, i=1;
for(;i<=5;i++)
{
if(i%2!=0) sum+=i;
}
A. 9 B. 15 C. 6 D. 10
【答案】A
【解析】for循环初始化表达式省略,i从1开始,i<=5时循环;i为1、3、5时(奇数)执行sum+=i,sum=1+3+5=9。
14、已知int a=5, b=5, k=0;,下列选项中能使k的值变为1的是( )
A. if(a==b) k++; B. if(a>b) k++; C. if(a<b) k++; D. if(a!=b) k++;
【答案】A
【解析】A中a==b(5==5)为真,执行k++,k变为1;B、C、D条件均为假,k保持0。
15、若要将字符串"hello"存入字符数组,以下错误的定义是( )
A. char str[5] = "hello";
B. char str[] = "hello";
C. char str[6] = {'h','e','l','l','o','\0'};
D. char str[6] = "hello";
【答案】A
【解析】"hello"包含5个字符和1个结束符'\0',共需6个字节空间。A中数组长度为5,无法存放结束符,会导致数组越界,错误;B数组长度自动适配为6,正确;C、D均为合法初始化方式。
16、以下关于break语句的说法,正确的是( )
A. 只能用于循环语句中 B. 可以用于switch语句和循环语句中
C. 可以用于任何语句中 D. 用于终止整个程序的执行
【答案】B
【解析】break语句的作用是终止当前所在的循环或switch语句,并非只能用于循环,也不能终止整个程序(终止程序用exit())。
17、要以追加方式打开文本文件,若文件不存在则创建,应使用的fopen模式是( )
A. "a" B. "r+" C. "w+" D. "ab"
【答案】A
【解析】"a"是文本追加模式,文件不存在则创建;"r+"是读写模式,文件不存在则打开失败;"w+"是读写模式,会覆盖原有内容;"ab"是二进制追加模式。
18、执行以下代码,输出结果是( )
for(int i=1; i<=5; i++) {
if(i==3) break;
printf("%d", i);
}
A. 12 B. 123 C. 12345 D. 1245
【答案】A
【解析】i=3时执行break语句,直接终止for循环,不再继续执行后续循环,故仅输出1、2。
19、二维数组int arr[3][3] = {{1}, {2,3}, {4,5,6}};,则arr[2][2]的值是( )
A. 5 B. 6 C. 3 D. 0
【答案】B
【解析】二维数组按行存储,arr[2]行初始化值为4、5、6,arr[2][2]是第三行第三列元素,值为6。
20、以下关于函数参数传递的说法,错误的是( )
A. 值传递时,形参是实参的拷贝
B. 地址传递时,形参和实参指向同一内存空间
C. 数组作为参数传递时,本质是地址传递
D. 值传递时,形参的修改会影响实参
【答案】D
【解析】值传递时,形参和实参是独立的内存空间,形参的修改不会影响实参;A、B、C均为正确说法。
二、 填空题(本题共10小题,每题2分,共20分)
1. C语言中,单行注释的符号是__________,多行注释的结束符号是__________。
【答案】// */
2. 定义int a=7, b=4;,表达式a % b的结果是__________。
【答案】3
3. switch语句中,__________语句用于结束当前case分支的执行,防止case穿透。
【答案】break
4. 定义一个能存储10个float类型数据的数组,正确的语句是__________。
【答案】float arr[10];
5. 已知int x=3, y=8;,表达式x < y ? x+2 : y-3的结果是__________。
【答案】5
6. 执行以下代码,最终sum的值是__________。
int sum=0, i=2;
while(i<=6)
{ sum+=i; i+=2; }
【答案】12
7. 递归函数中,__________是避免程序陷入无限递归的必要条件。
【答案】递归终止条件(或边界条件)
8. 已知int m=5, n=12;,逻辑表达式(m>3) || (n<10)的结果是__________。
【答案】1(真)
9. C语言中,字符串的结束标志是__________,其ASCII码值为__________。
【答案】'\0' 0
10. 定义一个2行5列的整型二维数组,并初始化所有元素为1,语句是__________。
【答案】int arr[2][5] = {{1,1,1,1,1}, {1,1,1,1,1}};
三、 判断题(本题共10小题,每题2分,共20分)
1. C语言程序中,#include "stdio.h"和#include <stdio.h>的作用完全相同,没有区别。( )
【答案】错误。解析:两者区别在于头文件查找路径,#include <stdio.h>先从系统标准库路径查找,#include "stdio.h"先从当前工程目录查找,再查找系统路径。
2. C语言中,标识符区分大小写,因此“Name”和“name”是两个不同的变量。( )
【答案】正确。解析:C语言对标识符的大小写敏感,不同大小写组合视为不同的标识符。
3. 表达式a = 3 + 5的结果是8,因此该表达式可以作为if语句的条件。( )
【答案】正确。解析:if语句的条件可以是任意表达式,非0值视为真,0视为假;a=3+5表达式结果为8(非0),可作为条件。
4. 二维数组arr[3][4]的元素在内存中按列优先顺序存储。( )
【答案】错误。解析:C语言中二维数组元素默认按行优先顺序存储,即先存储第一行所有元素,再存储第二行,以此类推。
5. while循环的循环体可能一次都不执行,而do-while循环的循环体至少执行一次。( )
【答案】正确。解析:while循环先判断条件,条件为假则不执行循环体;do-while循环先执行循环体,再判断条件,故至少执行一次。
6. 数组名代表数组首元素的地址,因此可以对数组名进行自增运算(如arr++)。( )
【答案】错误。解析:数组名是地址常量,常量的值不能被修改,自增运算(++)会修改操作数的值,因此不能对数组名执行arr++。
7. 逻辑或运算“||”遵循短路规则,即左侧操作数为真时,右侧操作数不再计算。( )
【答案】正确。解析:逻辑或运算中,只要左侧为真,整体结果就为真,无需计算右侧,此为短路规则,可提高程序效率。
8. 用fopen打开文件后,若程序异常终止,系统会自动关闭文件,因此无需手动调用fclose。( )
【答案】错误。解析:程序异常终止时,系统不一定能正常关闭文件,可能导致缓冲区数据丢失,因此必须手动调用fclose关闭文件。
9. 递归函数的实现效率一定比循环低,因此应尽量避免使用递归。( )
【答案】错误。解析:递归并非绝对效率低,对于某些问题(如树的遍历、阶乘),递归实现简洁且效率与循环相当;仅当递归层数过多时,才会因栈开销导致效率下降。
10. 二维数组int arr[2][3] = {{1,2}, {3}};,则arr[1][1]的值是0。( )
【答案】正确。解析:arr[1]行仅初始化第一个元素为3,arr[1][1]未显式初始化,默认值为0。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$