内容正文:
《编程语言基础——C语言》(高教版第5版)
期末复习卷(一)解析版
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一、单项选择题(本题共20小题,每小题2分,共40分)
1、C语言程序的执行,总是起始于( )
A. 程序中的第一条可执行语句 B. main函数
C. 程序中的第一个函数 D. 包含文件中的第一个函数
2、下列哪个不是C语言的基本数据类型( )
A. int B. char C. double D. string
3、设有定义 int a = 5, b = 2;,则表达式 a / b 的值是( )
A. 2.5 B. 2 C. 3 D. 2.0
4、在printf函数中,用于输出int型数据的格式符是( )
A. %c B. %f C. %d D. %s
5、能正确表示“x大于5且小于10”的C语言表达式是( )
A. 5 < x < 10 B. x > 5 && x < 10 C. x > 5 || x < 10 D. x > 5 and x < 10
6、关于switch语句,下列说法正确的是( )
A. 每个case后必须有break
B. switch中必须包含default分支
C. case后面的表达式可以是变量
D. case后面的表达式必须是常量表达式
7、do-while循环与while循环的主要区别是( )
A. do-while循环体至少执行一次
B. while循环体至少执行一次
C. do-while先判断后执行
D. 两者没有区别
8、关于break语句,下列说法正确的是( )
A. 只能用于循环语句中 B. 只能用于switch语句中
C. 可以用于循环和switch语句中 D. 可以用于任何地方
9、下列一维数组定义正确的是( )
A. int a[5] = {0}; B. int n = 5; int a[n]; C. int a[]; D. int a(5);
10、在C语言中,字符串的结束标志是( )
A. '\0' B. '
' C. '0' D. EOF
11、函数strcat()的作用是( )
A. 复制字符串 B. 比较字符串 C. 连接两个字符串 D. 求字符串长度
12、若函数定义时类型为int,而函数体中无return语句,则函数返回值( )
A. 0 B. 不确定 C. 编译错误 D. 无返回值
13、关于静态局部变量,下列说法正确的是( )
A. 存储在静态存储区,生命周期为整个程序运行期间
B. 每次调用函数时重新初始化
C. 默认初始化为随机值
D. 只能在定义它的函数外部访问
14、当数组名作为函数参数时,传递给函数的是( )
A. 数组第一个元素的值 B. 数组的首地址
C. 数组的全部元素 D. 数组的长度
15、定义结构体类型必须使用的关键字是( )
A. struct B. union C. enum D. typedef
16、若有定义 struct student {int num; char name[20];} stu1;,则正确引用成员num的语句是( )
A. stu1->num B. stu1.num C. (*stu1).num D. &stu1.num
17、若有定义 int a = 5, *p = &a;,则表达式 *p 的值是( )
A. 变量a的地址 B. 变量a的值 C. 指针p的地址 D. 无意义
18、若有定义 int a[5], *p = a;,执行 p++; 后,p指向( )
A. 数组第一个元素 B. 数组第二个元素
C. 数组最后一个元素 D. 不确定的位置
19、递归函数必须具有的特点是( )
A. 循环语句 B. 静态变量 C. 终止条件 D. 返回值类型为int
20、执行 int i = 3, j; j = i++; 后,j和i的值分别是( )
A. j=3, i=4 B. j=4, i=4 C. j=3, i=3 D. j=4, i=3
二、多选题(本题共5小题,每小题3分,共15分)
1、下列运算符中,结合性为从右至左的有( )
A. 赋值运算符 = B. 后缀自增 ++ C. 逻辑非运算符 ! D. 乘法运算符 *
2、关于if-else if-else结构,下列说法正确的有( )
A. 可以有多个else if子句 B. else子句可以单独存在
C. 条件表达式按顺序依次判断 D. 最多只能有一个else if子句
3、关于C语言数组,下列叙述正确的有( )
A. 数组下标从0开始 B. 数组名代表数组的首地址,是地址常量
C. 数组越界访问会导致编译错误 D. 字符数组可以用来存放字符串
4、关于C语言函数,下列叙述正确的有( )
A. 函数可以没有返回值 B. 函数可以没有参数
C. 函数名代表函数的入口地址 D. 函数原型中可以省略参数名
5、关于结构体指针,下列叙述正确的有( )
A. 可以使用“->”运算符访问结构体成员
B. (*p).成员 与 p->成员 等价
C. 结构体指针可以指向同类型的结构体变量
D. 结构体指针必须通过动态内存分配(如malloc)获得
三、判断题(本题共10小题,每小题1分,共10分)
1、C语言中,main函数是程序的入口,但可以出现在程序中的任意位置。( )
2、在C语言中,所有变量必须先定义后使用。 ( )
3、若有定义int a=5,b=2,则表达式 a/b 的运算结果是2.5。( )
4、switch语句中,case后面的表达式必须是整型常量或常量表达式。( )
5、do-while循环的循环体至少执行一次。( )
6、若有定义 int a[5]={0};,则数组元素 a[5] 的值为0。( )
7、字符串 "Hello" 在内存中占用6个字节。( )
8、函数内部定义的静态局部变量在函数调用结束后其值不会丢失。( )
9、 当定义一个结构体变量时,系统分配给它的内存是结构体中第一个成员所需的内存量。( )
10、 指针变量存放的是指针所指向的变量的地址。( )
四、填空题(共10小题,每小题1分,共10分)
1、C语言程序的基本组成单位是( )。
2、若有 int a = 3, b = 4;,则条件表达式 a > b ? a : b 的值是( )。
3、定义符号常量PI为3.14159的宏定义是( )
4、在C语言中,数组名作为函数参数时,传递的是数组的( )。
5、用来接收从键盘上输入的字符的函数是( )。
6、执行以下程序段后,输出结果是( )。
int i, s = 0;
for (i = 1; i <= 5; i++) s += i;
printf("%d", s);
7、若定义一个名为s且初值为”123”的字符数组,则定义语句为( )。
8、定义结构体类型的关键字是 ( )。
9、若有 int x = 10, *p = &x;,则 *p 的值是( )。
10. 当函数不需要返回值时,应将函数类型定义为( )。
五、简答题(本题共3题,每题5分,共15分)
1. 简述C语言的特点。
2. 简述标示符的命名原则。
3. 什么是关系运算,关系运算符有哪些?
六、编程题(本题共1小题,每小题10分,共10分)
编写函数isPalindrome()判断从键盘输入的字符串是否是回文字符串。并在主函数中输出判断结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《编程语言基础——C语言》(高教版第5版)
期末复习卷(一)解析版
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一、单项选择题(本题共20小题,每小题2分,共40分)
1、C语言程序的执行,总是起始于( )
A. 程序中的第一条可执行语句 B. main函数
C. 程序中的第一个函数 D. 包含文件中的第一个函数
【答案】 B
【解析】 C程序的执行总是从main函数开始执行。
2、下列哪个不是C语言的基本数据类型( )
A. int B. char C. double D. string
【答案】 D
【解析】 C语言的基本数据类型包括整型(int)、字符型(char)、浮点型(float、double)等,string是字符串类型,在C语言中通过字符数组实现,不是基本数据类型。
3、设有定义 int a = 5, b = 2;,则表达式 a / b 的值是( )
A. 2.5 B. 2 C. 3 D. 2.0
【答案】 B
【解析】 两个整数相除,结果为整数,舍弃小数部分,所以5/2的结果为2。
4、在printf函数中,用于输出int型数据的格式符是( )
A. %c B. %f C. %d D. %s
【答案】 C
【解析】 %d是整型数据的格式说明符,%c用于字符,%f用于浮点数,%s用于字符串。
5、能正确表示“x大于5且小于10”的C语言表达式是( )
A. 5 < x < 10 B. x > 5 && x < 10 C. x > 5 || x < 10 D. x > 5 and x < 10
【答案】 B
【解析】 逻辑与运算(&&)表示同时成立,B选项符合题意。A选项在C语言中会从左到右计算,结果不符合数学含义。D选项中and不是C语言的运算符。
6、关于switch语句,下列说法正确的是( )
A. 每个case后必须有break
B. switch中必须包含default分支
C. case后面的表达式可以是变量
D. case后面的表达式必须是常量表达式
【答案】 D
【解析】 switch中case后面必须是整型常量或常量表达式,不能是变量。break和default都是可选的。
7、do-while循环与while循环的主要区别是( )
A. do-while循环体至少执行一次
B. while循环体至少执行一次
C. do-while先判断后执行
D. 两者没有区别
【答案】 A
【解析】 do-while循环先执行一次循环体,再判断条件,因此至少执行一次;while循环先判断条件,可能一次都不执行。
8、关于break语句,下列说法正确的是( )
A. 只能用于循环语句中 B. 只能用于switch语句中
C. 可以用于循环和switch语句中 D. 可以用于任何地方
【答案】 C
【解析】 break语句可用于循环体(for、while、do-while)和switch语句中,用于跳出当前循环或switch结构。
9、下列一维数组定义正确的是( )
A. int a[5] = {0}; B. int n = 5; int a[n]; C. int a[]; D. int a(5);
【答案】 A
【解析】 A定义了长度为5的数组并初始化。B在标准C(C89)中不允许用变量定义数组长度。C未指定长度且未初始化,错误。D使用了圆括号,不符合数组定义语法。
10、在C语言中,字符串的结束标志是( )
A. '\0' B. '
' C. '0' D. EOF
【答案】 A
【解析】 字符串在内存中以'\0'作为结束符,该字符的ASCII码为0。
11、函数strcat()的作用是( )
A. 复制字符串 B. 比较字符串 C. 连接两个字符串 D. 求字符串长度
【答案】 C
【解析】 strcat(s1, s2)将字符串s2连接到s1的末尾,覆盖s1的'\0'并添加新的'\0'。
12、若函数定义时类型为int,而函数体中无return语句,则函数返回值( )
A. 0 B. 不确定 C. 编译错误 D. 无返回值
【答案】 B
【解析】 如果函数声明返回int但未提供return语句,函数会返回一个不确定的值。
13、关于静态局部变量,下列说法正确的是( )
A. 存储在静态存储区,生命周期为整个程序运行期间
B. 每次调用函数时重新初始化
C. 默认初始化为随机值
D. 只能在定义它的函数外部访问
【答案】 A
【解析】 静态局部变量用static修饰,在静态存储区分配内存,只初始化一次,函数调用结束后其值保持不变,作用域仍限于函数内部。
14、当数组名作为函数参数时,传递给函数的是( )
A. 数组第一个元素的值 B. 数组的首地址
C. 数组的全部元素 D. 数组的长度
【答案】 B
【解析】 数组名代表数组首地址,作为函数实参时传递的是地址,属于传址调用。
15、定义结构体类型必须使用的关键字是( )
A. struct B. union C. enum D. typedef
【答案】 A
【解析】 struct是定义结构体类型的关键字,union定义共用体,enum定义枚举,typedef用于给类型起别名。
16、若有定义 struct student {int num; char name[20];} stu1;,则正确引用成员num的语句是( )
A. stu1->num B. stu1.num C. (*stu1).num D. &stu1.num
【答案】 B
【解析】 stu1是结构体变量,使用点运算符(.)访问成员。->用于结构体指针,C选项(*stu1).num写法错误(stu1不是指针)。
17、若有定义 int a = 5, *p = &a;,则表达式 *p 的值是( )
A. 变量a的地址 B. 变量a的值 C. 指针p的地址 D. 无意义
【答案】 B
【解析】 p是指向a的指针,*p表示取p所指向的变量的内容,即a的值5。
18、若有定义 int a[5], *p = a;,执行 p++; 后,p指向( )
A. 数组第一个元素 B. 数组第二个元素
C. 数组最后一个元素 D. 不确定的位置
【答案】 B
【解析】 p初始指向a[0],p++使指针指向下一个同类型元素,即a[1]。
19、递归函数必须具有的特点是( )
A. 循环语句 B. 静态变量 C. 终止条件 D. 返回值类型为int
【答案】 C
【解析】 递归函数通过调用自身解决问题,必须有一个明确的递归结束条件(基线条件),否则会导致无限递归。
20、执行 int i = 3, j; j = i++; 后,j和i的值分别是( )
A. j=3, i=4 B. j=4, i=4 C. j=3, i=3 D. j=4, i=3
【答案】 A
【解析】 i++是后置自增,先使用i的值赋给j,然后i自增1,所以j=3,i=4。
二、多选题(本题共5小题,每小题3分,共15分)
1、下列运算符中,结合性为从右至左的有( )
A. 赋值运算符 = B. 后缀自增 ++ C. 逻辑非运算符 ! D. 乘法运算符 *
【答案】 AC
【解析】 赋值运算符和单目运算符(如逻辑非)的结合性为从右向左;后缀自增和乘法运算符的结合性从左向右。
2、关于if-else if-else结构,下列说法正确的有( )
A. 可以有多个else if子句 B. else子句可以单独存在
C. 条件表达式按顺序依次判断 D. 最多只能有一个else if子句
【答案】 AC
【解析】 if-else if-else可以包含多个else if,按顺序判断条件,一旦满足某个条件就执行对应分支并结束。else必须与if配对,不能单独存在。
3、关于C语言数组,下列叙述正确的有( )
A. 数组下标从0开始 B. 数组名代表数组的首地址,是地址常量
C. 数组越界访问会导致编译错误 D. 字符数组可以用来存放字符串
【答案】 ABD
【解析】 数组越界访问不会在编译时报错,但可能导致运行时错误,故C错误。其他正确。
4、关于C语言函数,下列叙述正确的有( )
A. 函数可以没有返回值 B. 函数可以没有参数
C. 函数名代表函数的入口地址 D. 函数原型中可以省略参数名
【答案】 ABCD
【解析】 void类型函数无返回值;无参函数合法;函数名作为地址使用(如函数指针);函数原型声明时只写参数类型是允许的。故全选。
5、关于结构体指针,下列叙述正确的有( )
A. 可以使用“->”运算符访问结构体成员
B. (*p).成员 与 p->成员 等价
C. 结构体指针可以指向同类型的结构体变量
D. 结构体指针必须通过动态内存分配(如malloc)获得
【答案】 ABC
【解析】 结构体指针也可以指向已定义的结构体变量的地址(如 &stu),不一定需要动态分配,故D错误。
三、判断题(本题共10小题,每小题1分,共10分)
1、C语言中,main函数是程序的入口,但可以出现在程序中的任意位置。( )
【答案】 √
【解析】 main函数位置没有强制规定,只要程序中有一个main函数即可。
2、在C语言中,所有变量必须先定义后使用。 ( )
【答案】 √
【解析】 这是C语言的基本语法规则。
3、若有定义int a=5,b=2,则表达式 a/b 的运算结果是2.5。( )
【答案】 ×
【解析】 整数除法结果为整数2,小数部分被截断。
4、switch语句中,case后面的表达式必须是整型常量或常量表达式。( )
【答案】√
【解析】 case后不能是变量,必须是常量。
5、do-while循环的循环体至少执行一次。( )
【答案】√
【解析】 先执行后判断,所以至少一次。
6、若有定义 int a[5]={0};,则数组元素 a[5] 的值为0。( )
【答案】 ×
【解析】 数组下标范围是0~4,a[5]越界访问,不合法。
7、字符串 "Hello" 在内存中占用6个字节。( )
【答案】√
【解析】 包含5个字符和末尾的'\0',共6字节。
8、函数内部定义的静态局部变量在函数调用结束后其值不会丢失。( )
【答案】 √
【解析】 静态局部变量生命周期为整个程序,值保持。
9、 当定义一个结构体变量时,系统分配给它的内存是结构体中第一个成员所需的内存量( )
【答案】 ✕
【解析】 结构体变量所占内存空间的大小等于各成员所需内存量的总和。
10、 指针变量存放的是指针所指向的变量的地址。( )
【答案】 √
【解析】 指针变量的本质就是存储内存地址。
四、填空题(共10小题,每小题1分,共10分)
1、C语言程序的基本组成单位是( )。
【答案】函数。
【解析】C程序是由若干个函数构成的。
2、若有 int a = 3, b = 4;,则条件表达式 a > b ? a : b 的值是( )。
【答案】4
【解析】条件表达式要先计算表达式1:a>b的值为0,所以再计算表达式3:b的值为4。
3、定义符号常量PI为3.14159的宏定义是( )
【答案】#define PI 3.14159
【解析】宏定义的格式:#define 标示符 字符串。
4、在C语言中,数组名作为函数参数时,传递的是数组的( )。
【答案】首地址
【解析】数组名作为函数参数时,传递的是数组的首地址。
5、用来接收从键盘上输入的字符的函数是( )。
【答案】getchar()
【解析】函数getchar()的功能是接收从键盘上输入的字符。
6、执行以下程序段后,输出结果是( )。
int i, s = 0;
for (i = 1; i <= 5; i++) s += i;
printf("%d", s);
【答案】15
【解析】s=1+2+3+4+5=15。
7、若定义一个名为s且初值为”123”的字符数组,则定义语句为( )。
【答案】char s[]={“123”};/char s[]={‘1’,’2’,’3’,’\0’};
【解析】字符数组的定义格式:类型说明符 数组名 [常量表达式]。
8、定义结构体类型的关键字是 ( )。
【答案】struct
【解析】定义结构体类型的关键字为struct。
9、若有 int x = 10, *p = &x;,则 *p 的值是( )。
【答案】10
【解析】p为指针变量,指向变量x,*p的值为变量x的值为10。
10. 当函数不需要返回值时,应将函数类型定义为( )。
【答案】void
【解析】若函数不需要返回计算结果,即不需要返回值,函数类型定义为void型,函数中不必使用return语句。
五、简答题(本题共3题,每题5分,共15分)
1. 简述C语言的特点。
【答案】
(1)简洁紧凑、灵活方便。
(2)运算符丰富。
(3)数据类型丰富。
(4)C语言是结构化语言。
(5)语法限制较少,程序设计自由度较大。
(6)C语言允许直接访问物理地址,可以直接对硬件进行操作。
(7)C语言程序生成代码质量高,程序执行效率高。
(8)C语言适用范围广、可移植性好。
2. 简述标示符的命名原则。
【答案】标示符只能由字母、数字和下划线组成,且第1个字符必须为字母或下划线,不允许使用数字。不能使用关键字。
3. 什么是关系运算,关系运算符有哪些?
【答案】关系运算符就是对两个数据按他们值的大小进行比较的运算。判断它们是否符合给定条件:若符合,则结果为1(即为真);否则结果为0(即为假)。C语言提供了6种关系运算符。
运算符
含义
<
小于
<=
小于或等于
>
大于
>=
大于或等于
==
等于
!=
不等于
六、编程题(本题共1小题,每小题10分,共10分)
编写函数isPalindrome()判断从键盘输入的字符串是否是回文字符串。并在主函数中输出判断结果。
【答案】
#include <stdio.h>
#include <string.h>
int isPalindrome(char str[]);
main() {
char str[100]; // 存储输入的字符串
printf("请输入一个字符串:");
gets(str);
if (isPalindrome(str)) {
printf("\"%s\" 是回文字符串
", str);
} else {
printf("\"%s\" 不是回文字符串
", str);
}
}
int isPalindrome(char str[]) {
int len = strlen(str);
int i, j;
// 从两端向中间逐个字符比较
for (i = 0, j = len - 1; i < j; i++, j--) {
if (str[i] != str[j]) {
return 0; // 发现不同字符,不是回文
}
}
return 1; // 所有对应字符都相等,是回文
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$