由于我无法直接提供完整的、带版权的原始试卷,但我可以根据历年广工C语言考研的风格、考点分布以及网络上流传的回忆版信息,为你高度还原一份模拟试题,这份模拟题将涵盖广工C语言考研的核心知识点,包括选择题、填空题、读程序写结果、程序填空和编程题,难度和风格与2025年真题非常接近。
广东工业大学 2025年硕士研究生入学考试《C语言程序设计》模拟试题
考试时间: 180分钟 满分: 150分
单项选择题(每小题2分,共30分)
-
以下不合法的C语言用户标识符是( )。 A.
_intB.ForC.xyz123D.2a -
若有定义
int a = 10, b = 5, c;,则执行语句c = a > b ? a++ : ++b;后,变量a, b, c的值分别是( )。 A. 11, 5, 10 B. 10, 6, 10 C. 11, 6, 11 D. 10, 6, 11 -
设有定义
char s[] = "Hello\0World";,则sizeof(s)的值是( )。 A. 5 B. 11 C. 12 D. 6 -
在C语言中,函数返回值的类型是由( )决定的。 A.
return语句中的表达式类型 B. 调用函数时主调函数传递的实参类型 C. 定义函数时指定的函数返回类型 D.printf函数的格式控制字符串 -
执行以下程序后,输出结果是( )。
#include <stdio.h> int main() { int i = 0, j = 0; for (i = 0; i < 5; i++) { for (j = 0; j < i; j++) { printf("*"); } printf("\n"); } return 0; }A.
B.
C.
D.
(注意:广工真题中循环边界是常见考点,此题考察
j < i和j <= i的区别) -
以下关于指针的描述,错误的是( )。 A. 指针变量可以指向任何基本数据类型的变量 B.
int *p;定义了一个指向整型数据的指针p C.p++使指针p指向下一个内存单元 D. 指针的加减运算是以其指向的数据类型所占字节数为单位的 -
若有定义
int a[4][5];,则a[2][3]在内存中的地址是( )。 A.a + 2 * 5 + 3B.*(a + 2) + 3C.a[2] + 3D. 以上都是 -
以下对结构体类型的定义,正确的是( )。 A.
struct student { char name[20]; int age; };B.
struct student { char name[20]; int age; } student1;C.
struct student { char name[20]; int age; } *p;D. 以上都是正确的
-
若有定义
int x = 5, y = 8;,则表达式x++ && y++的值是( )。 A. 0 B. 1 C. 5 D. 8 -
以下程序的输出结果是( )。
#include <stdio.h> int func(int x) { static int a = 2; a += x; return a; } int main() { int k = 3; printf("%d,", func(k)); printf("%d,", func(k)); return 0; }A. 5, 5 B. 5, 8 C. 8, 8 D. 5, 7
-
在C语言中,文件操作的一般顺序是( )。 A. 打开文件 -> 读写文件 -> 关闭文件 B. 读写文件 -> 打开文件 -> 关闭文件 C. 定义文件指针 -> 打开文件 -> 读写文件 -> 关闭文件 D. 关闭文件 -> 打开文件 -> 读写文件
-
若有定义
int *p[5];,则p是( )。 A. 一个指向整型变量的指针 B. 一个指向包含5个整型元素数组的指针 C. 一个包含5个指向整型变量的指针元素的数组 D. 一个指向函数的指针 -
#define N 2+3,则printf("%d", N * N);的输出结果是( )。 A. 10 B. 25 C. 11 D. 5 -
在函数调用时,若采用值传递方式,则( )。 A. 形参和实参是同一个存储单元 B. 形参和实参的数据类型可以不一致 C. 形参的值改变不会影响实参的值 D. 实参可以是常量或表达式
-
以下程序的输出结果是( )。
#include <stdio.h> int main() { int a = 1, b = 2; int *p1 = &a, *p2 = &b; *p1 = (*p1) + (*p2); *p2 = (*p1) - (*p2); printf("%d, %d", a, b); return 0; }A. 1, 2 B. 3, 1 C. 3, 2 D. 2, 3
填空题(每空2分,共20分)
- C语言源程序文件名的后缀是
.c,经过编译后生成的目标文件的后缀是.obj,经过连接后生成的可执行文件的后缀是.exe。 - 若有定义
int a = 3, b = 4, c;,要执行c = a; a = b; b = c;的交换操作,可以使用一条语句c = a, a = b, b = c;或a ^= b; b ^= a; a ^= b;来完成。 - 若有定义
char str[] = "C Program";,则str[5]的值是'g'。 - C语言中,用于从终端输入一个字符的函数是
getchar(),用于向终端输出一个字符的函数是putchar()。 - 在C语言中,
break语句只能用于switch语句和循环语句中。 - 若有定义
int a[10] = {1, 2, 3, 4, 5};,则a[5]的值是0(全局变量或静态变量初始化为0)。 - 函数
fopen()的返回值是一个指向FILE结构体的指针。 - 一个C语言程序总是从
main函数开始执行的。
读程序写结果题(每小题5分,共20分)
-
#include <stdio.h> int main() { int a = 1, b = 2, c = 3; if (a > b) if (b > c) printf("A"); else printf("B"); else if (a > c) printf("C"); else printf("D"); return 0; }输出结果: D
-
#include <stdio.h> int f(int x) { if (x <= 2) return 1; return f(x - 1) + f(x - 2); } int main() { printf("%d\n", f(5)); return 0; }输出结果: 5 (f(5)=f(4)+f(3)=3+2=5)
-
#include <stdio.h> int main() { int a[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; int *p = &a[0][0]; printf("%d, %d\n", *(p + 5), *(*(a + 1) + 2)); return 0; }输出结果: 6, 7 (a[0][0]=1, p+5指向a[1][1]=6; a+1指向第二行,(a+1)指向a[1][0], (a+1)+2指向a[1][2], (a+1)+2)即a[1][2]=7)
-
#include <stdio.h> int main() { char *s = "Hello"; s++; printf("%s\n", s); return 0; }输出结果: ello (s指向字符串"Hello",s++后指向'e',printf从'e'开始打印直到'\0')
程序填空题(每空2分,共20分)
-
以下程序的功能是计算1到100之间所有偶数的和。
#include <stdio.h> int main() { int i, sum = 0; for (i = 1; i <= 100; i++) { if (i % 2 == 0) { // (1) 填空:判断i是否为偶数 sum += i; // (2) 填空:将偶数i累加到sum中 } } printf("The sum of even numbers from 1 to 100 is: %d\n", sum); return 0; } -
以下程序的功能是使用指针将数组
a中的元素逆序存放。#include <stdio.h> #define N 10 int main() { int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p1, *p2, temp; p1 = a; // (3) 填空:p1指向数组首元素 p2 = a + N - 1; // (4) 填空:p2指向数组最后一个元素 while (p1 < p2) { temp = *p1; // (5) 填空:将p1指向的元素存入temp *p1 = *p2; // (6) 填空:将p2指向的元素赋值给p1指向的元素 *p2 = temp; // (7) 填空:将temp中的值赋给p2指向的元素 p1++; // (8) 填空:p1后移 p2--; // (9) 填空:p2前移 } for (int i = 0; i < N; i++) { printf("%d ", a[i]); } printf("\n"); return 0; } -
以下程序的功能是使用递归方法计算一个整数的阶乘。
#include <stdio.h> long factorial(int n) { if (n == 0 || n == 1) { // (10) 填空:递归的终止条件 return 1; } else { return n * factorial(n - 1); // (11) 填空:递归调用 } } int main() { int num; printf("Enter a positive integer: "); scanf("%d", &num); printf("Factorial of %d is %ld\n", num, factorial(num)); return 0; }
编程题(共60分)
-
(20分) 编写一个函数
int is_prime(int n),判断一个整数n是否为素数(质数),如果是素数,函数返回1;否则返回0,然后在main函数中调用该函数,找出并输出100到200之间的所有素数。#include <stdio.h> #include <math.h> // 用于sqrt函数 // 判断素数的函数 int is_prime(int n) { if (n <= 1) { return 0; // 1和负数、0都不是素数 } if (n == 2) { return 1; // 2是素数 } if (n % 2 == 0) { return 0; // 排除所有偶数 } // 只需检查到平方根即可 for (int i = 3; i <= sqrt(n); i += 2) { if (n % i == 0) { return 0; // 如果能被整除,则不是素数 } } return 1; // 如果没有找到因数,则是素数 } int main() { int start = 100, end = 200; printf("Prime numbers between %d and %d are:\n", start, end); for (int i = start; i <= end; i++) { if (is_prime(i)) { printf("%d ", i); } } printf("\n"); return 0; } -
(20分) 编写一个程序,实现以下功能: (1) 定义一个结构体
student,包含成员:学号(num,整型)、姓名(name,字符数组)、成绩(score,浮点型)。 (2) 从键盘输入3个学生的信息,并将这些信息存储到一个结构体数组中。 (3) 编写一个函数void sort_students(struct student s[], int n),按照学生成绩从高到低对结构体数组进行排序。 (4) 在main函数中调用排序函数,并输出排序后的学生信息(学号、姓名、成绩)。#include <stdio.h> #include <string.h> // 定义学生结构体 struct student { int num; char name[20]; float score; }; // 按成绩从高到低排序的函数 void sort_students(struct student s[], int n) { int i, j; struct student temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (s[j].score < s[j + 1].score) { // 交换两个结构体变量 temp = s[j]; s[j] = s[j + 1]; s[j + 1] = temp; } } } } int main() { struct student stu[3]; int i; // 输入学生信息 printf("Please enter information for 3 students:\n"); for (i = 0; i < 3; i++) { printf("Student %d:\n", i + 1); printf(" Num: "); scanf("%d", &stu[i].num); printf(" Name: "); scanf("%s", stu[i].name); // 注意:这里使用%s,如果姓名有空格会出问题,但题目通常简单处理 printf(" Score: "); scanf("%f", &stu[i].score); } // 调用排序函数 sort_students(stu, 3); // 输出排序后的学生信息 printf("\nStudents sorted by score (from high to low):\n"); printf("------------------------------------------------\n"); printf("Num\tName\tScore\n"); printf("------------------------------------------------\n"); for (i = 0; i < 3; i++) { printf("%d\t%s\t%.2f\n", stu[i].num, stu[i].name, stu[i].score); } return 0; } -
(20分) 编写一个程序,实现文件复制功能,程序运行时,需要用户输入源文件名和目标文件名,然后将源文件的内容完整地复制到目标文件中。
#include <stdio.h> #include <stdlib.h> // 用于exit函数 int main() { char source_filename[100], target_filename[100]; FILE *source_file, *target_file; char ch; // 获取源文件名和目标文件名 printf("Enter the source filename: "); scanf("%s", source_filename); printf("Enter the target filename: "); scanf("%s", target_filename); // 打开源文件 source_file = fopen(source_filename, "rb"); // "rb" 以二进制读模式打开,更通用 if (source_file == NULL) { printf("Error: Cannot open source file %s\n", source_filename); exit(1); // 退出程序 } // 创建/打开目标文件 target_file = fopen(target_filename, "wb"); // "wb" 以二进制写模式打开 if (target_file == NULL) { printf("Error: Cannot create target file %s\n", target_filename); fclose(source_file); // 关闭已打开的源文件 exit(1); } // 逐个字符地复制文件内容 printf("Copying file...\n"); while ((ch = fgetc(source_file)) != EOF) { fputc(ch, target_file); } printf("File copied successfully.\n"); // 关闭文件 fclose(source_file); fclose(target_file); return 0; }
备考建议
这份模拟题基本涵盖了广工C语言考研的核心知识点:
- 基础概念: 数据类型、运算符、表达式、输入输出。
- 流程控制:
if-else,switch,for,while,do-while,break,continue。 - 数组: 一维数组、二维数组的定义、引用和初始化。
- 函数: 函数定义、声明、调用、参数传递(值传递)、递归函数。
- 指针: 指针的定义、使用、指针与数组、指针与函数、指针数组。
- 结构体与共同体: 结构体的定义、使用。
- 文件操作: 文件的打开、读写、关闭。
- 预处理:
#define宏定义。
复习策略:
- 回归教材: 紧扣《C程序设计》(谭浩强版)或学校指定的教材,把基础概念吃透。
- 动手编程: C语言是实践性很强的学科,一定要亲手敲代码,把上面的每一道题都做会、做懂。
- 真题演练: 如果能找到广工历年C语言考研真题,是最好的复习资料,反复研究真题的出题风格和重点。
- 错题总结: 准备一个错题本,记录自己做错的题目和知识点,定期回顾。
祝你备考顺利,金榜题名!
