《程序设计基础-C语言》(高教版第二版)期末复习卷(七)
|
2份
|
12页
|
53人阅读
|
0人下载
内容正文:
《程序设计基础- C语言》高等教育出版社
期末复习卷(七)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言的说法,错误的是( )
A. C语言是结构化程序设计语言
B. C语言可直接操作硬件
C. C语言程序必须包含main函数
D. C语言的关键字区分大小写
2、若int a=9, b=2;,则表达式a / (float)b的结果类型是( )
A. int B. float C. double D. 不确定
3、下列标识符中,不符合C语言命名规则的是( )
A. int_3 B. 3_int C. int3 D. _int3
4、执行语句int x=6; x = x - x * 2;后,x的值是( )
A. -6 B. 6 C. 0 D. -12
5、以下函数中,不能用于输出字符串的是( )
A. printf() B. puts() C. putchar() D. fprintf()
6、以下数组初始化方式中,错误的是( )
A. int arr[] = {1,2,3,4};
B. int arr[4] = {1,2,3,4,5};
C. int arr[4] = {1,2};
D. int arr[] = {1,2,3,4,5};
7、已知int p=4, q=6;,执行表达式p > q ? --p : ++q的结果是( )
A. 4 B. 3 C. 7 D. 6
8、执行以下代码,输出结果是( )
int i=3;
do
{
printf("%d", i--);
} while(i>0);
A. 321 B. 210 C. 32 D. 3
9、C语言中,字符串"a\0b"在内存中占用的字节数是( )
A. 2 B. 3 C. 4 D. 5
10、二维数组int arr[2][4] = {{1,2,3}, {4}};,则arr[0][3]的值是( )
A. 3 B. 4 C. 0 D. 随机值
11、若int *ptr, val=10; ptr=&val;,则以下表达式中错误的是( )
A. *ptr = 20; B. ptr = 20; C. val = *ptr; D. *ptr = val;
12、执行以下代码,输出结果是( )
char str[] = "Hello"; printf("%d", strlen(str));
A. 5 B. 6 C. 4 D. 不确定
13、执行以下代码,total的最终值是( )
int total=0;
for(int k=1; k<=5; k++)
{
if(k%2==0) total += k;
}
A. 6 B. 9 C. 15 D. 21
14、已知int m=7, n=3;,下列选项中条件为真的是( )
A. m + n < 10 B. m - n == 4 C. m % n == 0 D. m < n
15、以下关于字符串的说法,错误的是( )
A. 字符串以'\0'为结束标志
B. 字符串必须用双引号括起来
C. 空字符串的长度为0
D. 字符数组一定是字符串
16、以下关于if语句的说法,错误的是( )
A. if语句的条件表达式可以是任意表达式
B. if语句的循环体可以是多条语句
C. 多个if语句可以并列使用
D. if语句的条件表达式只能是关系表达式
17、要以写入方式打开文本文件,若文件存在则清空内容,不存在则创建,应使用的fopen模式是( )
A. "w" B. "r" C. "a" D. "w+"
18、执行以下代码,输出结果是( )
for(int a=1; a<=3; a++)
{
for(int b=1; b<=a; b++)
{
printf("*");
}
printf("
");
}
A. *** B. *
**
***
C. ***
**
* D. *
**
19、以下关于函数参数的说法,正确的是( )
A. 函数参数个数必须与调用时的实参个数一致
B. 函数参数不能是数组
C. 函数参数可以是指针
D. 函数参数必须是变量
20、以下关于递归函数的说法,错误的是( )
A. 递归函数必须调用自身
B. 递归函数必须有终止条件
C. 递归函数的效率一定比循环高
D. 递归函数调用会占用栈空间
二、 填空题(本题共10小题,每题2分,共20分)
1. C语言程序的基本单位是__________,程序的执行入口是__________函数。
2. 定义int x=17, y=5;,表达式x % y + x / y的结果是__________。
3. 循环语句包括while循环、do-while循环和__________循环三种。
4. 若指针变量p指向数组arr的首元素,则arr[2]等价于__________(用指针表示)。
5. 已知int a=5, b=9;,表达式a < b ? a*3 : b/3的结果是__________。
6. 执行以下代码,输出的星号个数是__________。
for(int i=0; i<2; i++)
{
for(int j=0; j<3; j++)
{
printf("*");
} }
7. 函数声明的作用是__________,以便编译器在函数调用时进行检查。
8. 已知int x=3, y=7;,逻辑表达式!(x<y) || (y>5)的结果是__________。
9. 字符串"123"的结束标志是__________,其ASCII码值为__________。
10. 定义一个能存储5个int类型数据的数组,并初始化前3个元素为1、2、3,语句是__________。
三、 应用题(共20分)
编写一个C语言程序,实现以下功能(如图所示):
1. 从键盘输入10个整型数据,存入一维数组;
2. 编写函数找出数组中的最大值和最小值;
3. 统计数组中偶数的个数;
4. 输出原始数组、最大值、最小值以及偶数的个数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《程序设计基础- C语言》高等教育出版社
期末复习卷(七)
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题3分,共60分)
1、以下关于C语言的说法,错误的是( )
A. C语言是结构化程序设计语言
B. C语言可直接操作硬件
C. C语言程序必须包含main函数
D. C语言的关键字区分大小写
【答案】D
【解析】C语言的关键字不区分大小写(如int和INT等价),但标识符区分大小写;A、B、C均为正确说法,D错误。
2、若int a=9, b=2;,则表达式a / (float)b的结果类型是( )
A. int B. float C. double D. 不确定
【答案】B
【解析】(float)b将int型b转换为float型,a(int型)与float型运算时,int会隐式转换为float,最终结果为float型。
3、下列标识符中,不符合C语言命名规则的是( )
A. int_3 B. 3_int C. int3 D. _int3
【答案】B
【解析】C语言标识符首字符不能为数字,B选项以3开头,不符合命名规则;A、C、D均符合规则。
4、执行语句int x=6; x = x - x * 2;后,x的值是( )
A. -6 B. 6 C. 0 D. -12
【答案】A
【解析】算术运算符优先级高于赋值运算符,先算x*2=12,再算x - 12=6-12=-6,最后赋值给x,故x的值为-6。
5、以下函数中,不能用于输出字符串的是( )
A. printf() B. puts() C. putchar() D. fprintf()
【答案】C
【解析】putchar()仅用于输出单个字符;printf()(%s格式符)、puts()、fprintf()(文件输出,%s格式符)均可输出字符串,故C正确。
6、以下数组初始化方式中,错误的是( )
A. int arr[] = {1,2,3,4};
B. int arr[4] = {1,2,3,4,5};
C. int arr[4] = {1,2};
D. int arr[] = {1,2,3,4,5};
【答案】B
【解析】B中数组长度为4,初始化元素有5个,超出数组容量,属于非法初始化;A、C、D均合法。
7、已知int p=4, q=6;,执行表达式p > q ? --p : ++q的结果是( )
A. 4 B. 3 C. 7 D. 6
【答案】C
【解析】p > q(4>6)为假,执行++q,++q是先自增后使用,q从6变为7,故表达式结果为7。
8、执行以下代码,输出结果是( )
int i=3;
do
{
printf("%d", i--);
} while(i>0);
A. 321 B. 210 C. 32 D. 3
【答案】A
【解析】do-while循环先执行循环体再判断条件:i=3时输出3,i变为2;i=2时输出2,i变为1;i=1时输出1,i变为0,不满足i>0,循环结束,输出321。
9、C语言中,字符串"a\0b"在内存中占用的字节数是( )
A. 2 B. 3 C. 4 D. 5
【答案】B
【解析】字符串存储时包含结束符'\0',"a\0b"包含a、\0、b三个字符,故占用3个字节(\0是单个转义字符,占1个字节)。
10、二维数组int arr[2][4] = {{1,2,3}, {4}};,则arr[0][3]的值是( )
A. 3 B. 4 C. 0 D. 随机值
【答案】C
【解析】二维数组未显式初始化的元素默认值为0,arr[0]行仅初始化前3个元素为1、2、3,arr[0][3]未初始化,值为0。
11、若int *ptr, val=10; ptr=&val;,则以下表达式中错误的是( )
A. *ptr = 20; B. ptr = 20; C. val = *ptr; D. *ptr = val;
【答案】B
【解析】ptr是指针变量,存储的是地址,不能直接赋值为整型常量20(类型不匹配);A、C、D均为合法操作,故B错误。
12、执行以下代码,输出结果是( )
char str[] = "Hello"; printf("%d", strlen(str));
A. 5 B. 6 C. 4 D. 不确定
【答案】A
【解析】strlen()函数用于计算字符串长度,不包含结束符'\0',"Hello"有5个字符,故strlen(str)结果为5。
13、执行以下代码,total的最终值是( )
int total=0;
for(int k=1; k<=5; k++)
{
if(k%2==0) total += k;
}
A. 6 B. 9 C. 15 D. 21
【答案】A
【解析】for循环k从1到5,仅当k为偶数(2、4)时执行total += k,total=2+4=6。
14、已知int m=7, n=3;,下列选项中条件为真的是( )
A. m + n < 10 B. m - n == 4 C. m % n == 0 D. m < n
【答案】B
【解析】A中m+n=10,10<10为假;B中m-n=4,条件为真;C中m%n=1≠0,为假;D中m=7>n=3,为假,故B正确。
15、以下关于字符串的说法,错误的是( )
A. 字符串以'\0'为结束标志
B. 字符串必须用双引号括起来
C. 空字符串的长度为0
D. 字符数组一定是字符串
【答案】D
【解析】字符数组若未以'\0'结尾,则仅为字符的集合,不是字符串;A、B、C均为正确说法,D错误。
16、以下关于if语句的说法,错误的是( )
A. if语句的条件表达式可以是任意表达式
B. if语句的循环体可以是多条语句
C. 多个if语句可以并列使用
D. if语句的条件表达式只能是关系表达式
【答案】D
【解析】if语句的条件表达式可以是任意表达式(算术、关系、逻辑等),非0为真,0为假;D错误,A、B、C正确。
17、要以写入方式打开文本文件,若文件存在则清空内容,不存在则创建,应使用的fopen模式是( )
A. "w" B. "r" C. "a" D. "w+"
【答案】A
【解析】"w"是文本写入模式,文件存在则清空内容,不存在则创建;"r"是只读模式;"a"是追加模式;"w+"是读写模式,故A正确。
18、执行以下代码,输出结果是( )
for(int a=1; a<=3; a++)
{
for(int b=1; b<=a; b++)
{
printf("*");
}
printf("
");
}
A. *** B. *
**
***
C. ***
**
* D. *
**
【答案】B
【解析】外层循环a=1时,内层循环b=1,输出1个*,换行;a=2时,内层循环b=1、2,输出2个*,换行;a=3时,内层循环b=1、2、3,输出3个*,换行,故输出格式为*换行**换行***换行。
19、以下关于函数参数的说法,正确的是( )
A. 函数参数个数必须与调用时的实参个数一致
B. 函数参数不能是数组
C. 函数参数可以是指针
D. 函数参数必须是变量
【答案】C
【解析】A中函数参数个数与实参个数可不一致(可变参数函数除外),但不建议;B中函数参数可以是数组(本质为指针);C中函数参数可以是指针,正确;D中函数参数可以是常量、表达式等,并非必须是变量。
20、以下关于递归函数的说法,错误的是( )
A. 递归函数必须调用自身
B. 递归函数必须有终止条件
C. 递归函数的效率一定比循环高
D. 递归函数调用会占用栈空间
【答案】C
【解析】递归函数调用时会频繁入栈出栈,占用额外栈空间,对于多层递归,效率通常比循环低;A、B、D均为正确说法,C错误。
二、 填空题(本题共10小题,每题2分,共20分)
1. C语言程序的基本单位是__________,程序的执行入口是__________函数。
【答案】函数 main
2. 定义int x=17, y=5;,表达式x % y + x / y的结果是__________。
【答案】5
3. 循环语句包括while循环、do-while循环和__________循环三种。
【答案】for
4. 若指针变量p指向数组arr的首元素,则arr[2]等价于__________(用指针表示)。
【答案】*(p+2)
5. 已知int a=5, b=9;,表达式a < b ? a*3 : b/3的结果是__________。
【答案】15
6. 执行以下代码,输出的星号个数是__________。
for(int i=0; i<2; i++)
{
for(int j=0; j<3; j++)
{
printf("*");
} }
【答案】6
7. 函数声明的作用是__________,以便编译器在函数调用时进行检查。
【答案】告知编译器函数的返回值类型、函数名和参数类型
8. 已知int x=3, y=7;,逻辑表达式!(x<y) || (y>5)的结果是__________。
【答案】1(真)(!(3<7)=0,y>5=1,0||1=1)
9. 字符串"123"的结束标志是__________,其ASCII码值为__________。
【答案】'\0' 0
10. 定义一个能存储5个int类型数据的数组,并初始化前3个元素为1、2、3,语句是__________。
【答案】int arr[5] = {1,2,3};
三、 应用题(共20分)
编写一个C语言程序,实现以下功能(如图所示):
1. 从键盘输入10个整型数据,存入一维数组;
2. 编写函数找出数组中的最大值和最小值;
3. 统计数组中偶数的个数;
4. 输出原始数组、最大值、最小值以及偶数的个数。
【答案】
#include <stdio.h>
// 找出数组最大值和最小值,通过指针返回结果,统计偶数个数并返回
int findMaxMin(int arr[], int len, int *max, int *min) {
*max = arr[0];
*min = arr[0];
int evenCount = 0;
for(int i=0; i<len; i++) {
// 更新最大值
if(arr[i] > *max) {
*max = arr[i];
}
// 更新最小值
if(arr[i] < *min) {
*min = arr[i];
}
// 统计偶数
if(arr[i] % 2 == 0) {
evenCount++;
}
}
return evenCount;
}
int main() {
int arr[10];
int max, min, evenCount;
int length = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
// 输入10个整型数据
printf("请输入10个整型数据:
");
for(int i=0; i<length; i++) {
scanf("%d", &arr[i]);
}
// 调用函数获取最大值、最小值和偶数个数
evenCount = findMaxMin(arr, length, &max, &min);
// 输出原始数组
printf("输入的原始数组为:
");
for(int i=0; i<length; i++) {
printf("%d\t", arr[i]);
}
printf("
");
// 输出统计结果
printf("数组中的最大值:%d
", max);
printf("数组中的最小值:%d
", min);
printf("数组中偶数的个数:%d
", evenCount);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$