1、上海戏剧学院《C语言》2025-2026学年期末试卷 一、单项选择题(本大题共10小题,每小题5分,共50分。在每小题给出的四个选项中,只有一项是符合题目要求的) 1. 下列关于C语言数据类型的说法,错误的是( ) A. 整型变量可以存储整数 B. 字符型变量可以存储单个字符 C. 实型变量可以存储实数 D. 数组是C语言中的一种基本数据类型 2. 下列关于C语言运算符的说法,正确的是( ) A. 自增运算符“++”只能用于变量 B. 关系运算符“==”用于判断两个值是否相等 C. 逻辑运算符“&&”表示逻辑与 D. 赋值运算符“=”用于将一个值赋给变量 3. 下列
2、关于C语言函数的说法,错误的是( ) A. 函数可以没有参数 B. 函数可以返回多个值 C. 函数必须定义在主函数中 D. 函数可以调用其他函数 4. 下列关于C语言指针的说法,正确的是( ) A. 指针是C语言中的一种基本数据类型 B. 指针可以存储任意类型的值 C. 指针变量可以指向任意内存地址 D. 指针不能用于函数参数传递 5. 下列关于C语言结构体的说法,正确的是( ) A. 结构体是C语言中的一种基本数据类型 B. 结构体可以包含任意类型的数据成员 C. 结构体变量可以存储多个数据成员 D. 结构体不能用于函数参数传递 6. 下列关于C语言文件的
3、说法,正确的是( ) A. 文件是C语言中的一种基本数据类型 B. 文件可以存储任意类型的数据 C. 文件可以用于存储程序代码 D. 文件不能用于存储结构体数据 7. 下列关于C语言动态内存分配的说法,正确的是( ) A. 动态内存分配只能使用malloc函数 B. 动态内存分配可以释放任意大小的内存 C. 动态内存分配可以释放已经分配的内存 D. 动态内存分配不能用于存储结构体数据 8. 下列关于C语言字符串的说法,正确的是( ) A. 字符串是C语言中的一种基本数据类型 B. 字符串可以存储任意长度的字符序列 C. 字符串可以包含空格和特殊字符 D. 字符
4、串不能用于函数参数传递 9. 下列关于C语言排序算法的说法,正确的是( ) A. 冒泡排序是一种稳定的排序算法 B. 快速排序是一种不稳定的排序算法 C. 选择排序是一种不稳定的排序算法 D. 插入排序是一种稳定的排序算法 10. 下列关于C语言文件操作的说法,正确的是( ) A. 打开文件可以使用fopen函数 B. 关闭文件可以使用fclose函数 C. 读取文件可以使用fscanf函数 D. 写入文件可以使用fprintf函数 二、多项选择题(本大题共5小题,每小题5分,共25分) 1. 下列关于C语言数据类型的说法,正确的是( ) A. 整型变量可以存储
5、整数 B. 字符型变量可以存储单个字符 C. 实型变量可以存储实数 D. 数组是C语言中的一种基本数据类型 2. 下列关于C语言运算符的说法,正确的是( ) A. 自增运算符“++”只能用于变量 B. 关系运算符“==”用于判断两个值是否相等 C. 逻辑运算符“&&”表示逻辑与 D. 赋值运算符“=”用于将一个值赋给变量 3. 下列关于C语言函数的说法,正确的是( ) A. 函数可以没有参数 B. 函数可以返回多个值 C. 函数必须定义在主函数中 D. 函数可以调用其他函数 4. 下列关于C语言指针的说法,正确的是( ) A. 指针是C语言中的一种基本数据类
6、型 B. 指针可以存储任意类型的值 C. 指针变量可以指向任意内存地址 D. 指针不能用于函数参数传递 5. 下列关于C语言结构体的说法,正确的是( ) A. 结构体是C语言中的一种基本数据类型 B. 结构体可以包含任意类型的数据成员 C. 结构体变量可以存储多个数据成员 D. 结构体不能用于函数参数传递 三、填空题(本大题共5小题,每小题5分,共25分) 1. C语言中,整型变量占用的内存空间是______个字节。 2. C语言中,字符型变量占用的内存空间是______个字节。 3. C语言中,实型变量占用的内存空间是______个字节。 4. C语言中,指针变量
7、占用的内存空间是______个字节。 5. C语言中,结构体变量占用的内存空间是______个字节。 四、(题目自定义)(本大题共4小题,共20分) 材料一: 假设有一个学生结构体,包含学号、姓名、年龄和成绩四个成员变量。 struct Student { int id; char name[50]; int age; float score; }; 1. 请编写一个函数,用于初始化学生结构体变量,并返回指向该结构体的指针。 2. 请编写一个函数,用于打印学生结构体变量的信息。 3. 请编写一个函数,用于计算学生结构体的平均成绩。 4. 请编写一个函数,用于比较两个
8、学生结构体的成绩,并返回比较结果。
材料二:
#include
9、 if (stu == NULL) { return NULL; } stu->id = id; strcpy(stu->name, name); stu->age = age; stu->score = score; return stu; } // 打印学生结构体变量的信息 void printStudent(const struct Student* stu) { if (stu == NULL) { return; } printf("学号:%d\n", stu->id); printf("姓名:%s\n", stu->name); printf("
10、年龄:%d\n", stu->age); printf("成绩:%f\n", stu->score); } // 计算学生结构体的平均成绩 float calculateAverageScore(const struct Student* stu) { if (stu == NULL) { return 0.0; } return stu->score; } // 比较两个学生结构体的成绩,并返回比较结果 int compareScore(const struct Student* stu1, const struct Student* stu2) { if (stu1
11、 == NULL || stu2 == NULL) {
return 0;
}
if (stu1->score > stu2->score) {
return 1;
} else if (stu1->score < stu2->score) {
return -1;
} else {
return 0;
}
}
五、(题目自定义)(本大题共4小题,共20分)
材料一:
#include
12、core; }; // 初始化学生结构体变量 struct Student* initStudent(int id, const char* name, int age, float score) { struct Student* stu = (struct Student*)malloc(sizeof(struct Student)); if (stu == NULL) { return NULL; } stu->id = id; strcpy(stu->name, name); stu->age = age; stu->score = score; return
13、stu; } // 打印学生结构体变量的信息 void printStudent(const struct Student* stu) { if (stu == NULL) { return; } printf("学号:%d\n", stu->id); printf("姓名:%s\n", stu->name); printf("年龄:%d\n", stu->age); printf("成绩:%f\n", stu->score); } // 计算学生结构体的平均成绩 float calculateAverageScore(const struct Student* st
14、u) { if (stu == NULL) { return 0.0; } return stu->score; } // 比较两个学生结构体的成绩,并返回比较结果 int compareScore(const struct Student* stu1, const struct Student* stu2) { if (stu1 == NULL || stu2 == NULL) { return 0; } if (stu1->score > stu2->score) { return 1; } else if (stu1->score < stu2->score) { return -1; } else { return 0; } } 1. 请编写一个函数,用于释放学生结构体变量占用的内存空间。 2. 请编写一个函数,用于比较两个学生结构体的年龄,并返回比较结果。 3. 请编写一个函数,用于比较两个学生结构体的姓名,并返回比较结果。 4. 请编写一个函数,用于将学生结构体数组按照成绩从高到低进行排序。






