以下是一套适用于C语言课程的期末测试题目,涵盖基本语法、数组、指针、函数、结构体等核心知识点,适合学生复习或教师出题参考。题目难度适中,注重基础与应用结合,帮助学生巩固所学知识。
一、选择题(每题2分,共10分)
1. 在C语言中,以下哪个是合法的变量名?
A. `int`
B. `3sum`
C. `_name`
D. `sum+1`
答案:C
2. 下列哪个语句可以正确输出字符 'A'?
A. `printf("%d", 'A');`
B. `printf("%c", 'A');`
C. `printf("%s", 'A');`
D. `printf("%f", 'A');`
答案:B
3. 若有定义 `int a = 5, b = 2;`,则表达式 `a / b` 的结果是?
A. 2.5
B. 2
C. 3
D. 0
答案:B
4. 以下关于数组的描述中,错误的是?
A. 数组的下标从0开始
B. 数组元素在内存中是连续存储的
C. 数组名是一个常量指针
D. 可以通过数组名直接修改数组元素的值
答案:D
5. 以下哪项是函数参数传递方式?
A. 值传递
B. 地址传递
C. 引用传递
D. 以上都是
答案:D
二、填空题(每空2分,共10分)
1. 在C语言中,`scanf` 函数用于________输入数据。
答案:格式化
2. 表达式 `!(x > 5 && y < 10)` 等价于 ________。
答案:x <= 5 || y >= 10
3. `char str[] = "Hello";` 中,`str[5]` 的值是 ________。
答案:'\0'
4. 使用 `sizeof(int)` 可以得到 ________ 字节的大小。
答案:4(通常情况下)
5. 指针变量存储的是 ________。
答案:地址
三、判断题(每题2分,共10分)
1. `for(;;)` 是一个死循环。 ( )
答案:对
2. `char c = 'A';` 是正确的赋值语句。 ( )
答案:对
3. 结构体中的成员只能是基本数据类型。 ( )
答案:错
4. `++i` 和 `i++` 的结果一样,只是执行顺序不同。 ( )
答案:对
5. 在C语言中,字符串必须以 '\0' 结尾。 ( )
答案:对
四、简答题(每题5分,共10分)
1. 简述C语言中`malloc()`和`free()`的作用。
答:`malloc()`用于在堆区动态分配内存空间,`free()`用于释放已分配的内存,防止内存泄漏。
2. 什么是函数的递归调用?请举一个简单的例子。
答:函数递归调用是指函数在执行过程中直接或间接地调用自身。例如:计算阶乘的函数 `factorial(n)`,当 n > 0 时,`factorial(n) = n factorial(n-1)`。
五、编程题(每题10分,共20分)
1. 编写一个程序,输入一个整数n,计算并输出1到n之间所有奇数的和。
示例输入:7
示例输出:16
参考代码:
```c
include
int main() {
int n, sum = 0;
printf("请输入一个整数n:");
scanf("%d", &n);
for (int i = 1; i <= n; i += 2) {
sum += i;
}
printf("1到%d之间所有奇数的和为:%d\n", n, sum);
return 0;
}
```
2. 编写一个函数,实现两个整数的交换。要求使用指针参数。
示例输入:a=5, b=10
输出:a=10, b=5
参考代码:
```c
include
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 5, b = 10;
printf("交换前:a=%d, b=%d\n", a, b);
swap(&a, &b);
printf("交换后:a=%d, b=%d\n", a, b);
return 0;
}
```
六、综合题(10分)
编写一个程序,定义一个结构体`Student`,包含姓名(字符串)、年龄(整型)、成绩(浮点型),然后定义一个结构体数组,输入3个学生的相关信息,并输出成绩最高的学生信息。
参考代码:
```c
include
include
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student students[3];
float max_score = 0;
int index = 0;
for (int i = 0; i < 3; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", students[i].name);
printf("请输入年龄:");
scanf("%d", &students[i].age);
printf("请输入成绩:");
scanf("%f", &students[i].score);
if (students[i].score > max_score) {
max_score = students[i].score;
index = i;
}
}
printf("成绩最高的学生信息:\n");
printf("姓名:%s\n", students[index].name);
printf("年龄:%d\n", students[index].age);
printf("成绩:%f\n", students[index].score);
return 0;
}
```
总结:
本套试题涵盖了C语言的基础知识与实际应用,适合用于期末复习或考试练习。建议学生在做题过程中多动手实践,理解语法背后的工作原理,提升编程能力。