广工 2025 c语言

99ANYc3cd6
预计阅读时长 37 分钟
位置: 首页 C语言 正文

由于我无法直接提供完整的、带版权的原始试卷,但我可以根据历年广工C语言考研的风格、考点分布以及网络上流传的回忆版信息,为你高度还原一份模拟试题,这份模拟题将涵盖广工C语言考研的核心知识点,包括选择题、填空题、读程序写结果、程序填空和编程题,难度和风格与2025年真题非常接近。


广东工业大学 2025年硕士研究生入学考试《C语言程序设计》模拟试题

考试时间: 180分钟 满分: 150分

单项选择题(每小题2分,共30分)

  1. 以下不合法的C语言用户标识符是( )。 A. _int B. For C. xyz123 D. 2a

  2. 若有定义 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

  3. 设有定义 char s[] = "Hello\0World";,则 sizeof(s) 的值是( )。 A. 5 B. 11 C. 12 D. 6

  4. 在C语言中,函数返回值的类型是由( )决定的。 A. return 语句中的表达式类型 B. 调用函数时主调函数传递的实参类型 C. 定义函数时指定的函数返回类型 D. printf 函数的格式控制字符串

  5. 执行以下程序后,输出结果是( )。

    #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 < ij <= i的区别)

  6. 以下关于指针的描述,错误的是( )。 A. 指针变量可以指向任何基本数据类型的变量 B. int *p; 定义了一个指向整型数据的指针p C. p++ 使指针p指向下一个内存单元 D. 指针的加减运算是以其指向的数据类型所占字节数为单位的

  7. 若有定义 int a[4][5];,则 a[2][3] 在内存中的地址是( )。 A. a + 2 * 5 + 3 B. *(a + 2) + 3 C. a[2] + 3 D. 以上都是

  8. 以下对结构体类型的定义,正确的是( )。 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. 以上都是正确的

  9. 若有定义 int x = 5, y = 8;,则表达式 x++ && y++ 的值是( )。 A. 0 B. 1 C. 5 D. 8

  10. 以下程序的输出结果是( )。

    #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

  11. 在C语言中,文件操作的一般顺序是( )。 A. 打开文件 -> 读写文件 -> 关闭文件 B. 读写文件 -> 打开文件 -> 关闭文件 C. 定义文件指针 -> 打开文件 -> 读写文件 -> 关闭文件 D. 关闭文件 -> 打开文件 -> 读写文件

  12. 若有定义 int *p[5];,则p是( )。 A. 一个指向整型变量的指针 B. 一个指向包含5个整型元素数组的指针 C. 一个包含5个指向整型变量的指针元素的数组 D. 一个指向函数的指针

  13. #define N 2+3,则 printf("%d", N * N); 的输出结果是( )。 A. 10 B. 25 C. 11 D. 5

  14. 在函数调用时,若采用值传递方式,则( )。 A. 形参和实参是同一个存储单元 B. 形参和实参的数据类型可以不一致 C. 形参的值改变不会影响实参的值 D. 实参可以是常量或表达式

  15. 以下程序的输出结果是( )。

    #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分)

  1. C语言源程序文件名的后缀是 .c,经过编译后生成的目标文件的后缀是 .obj,经过连接后生成的可执行文件的后缀是 .exe
  2. 若有定义 int a = 3, b = 4, c;,要执行 c = a; a = b; b = c; 的交换操作,可以使用一条语句 c = a, a = b, b = c;a ^= b; b ^= a; a ^= b; 来完成。
  3. 若有定义 char str[] = "C Program";,则 str[5] 的值是 'g'
  4. C语言中,用于从终端输入一个字符的函数是 getchar(),用于向终端输出一个字符的函数是 putchar()
  5. 在C语言中,break 语句只能用于 switch 语句和 循环 语句中。
  6. 若有定义 int a[10] = {1, 2, 3, 4, 5};,则 a[5] 的值是 0(全局变量或静态变量初始化为0)。
  7. 函数 fopen() 的返回值是一个指向 FILE 结构体的指针。
  8. 一个C语言程序总是从 main 函数开始执行的。

读程序写结果题(每小题5分,共20分)

  1.  #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

  2.  #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)

  3.  #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)

  4.  #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. 以下程序的功能是计算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;
    }
  2. 以下程序的功能是使用指针将数组 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;
    }
  3. 以下程序的功能是使用递归方法计算一个整数的阶乘。

    #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分)

  1. (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;
    }
  2. (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;
    }
  3. (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 宏定义。

复习策略:

  1. 回归教材: 紧扣《C程序设计》(谭浩强版)或学校指定的教材,把基础概念吃透。
  2. 动手编程: C语言是实践性很强的学科,一定要亲手敲代码,把上面的每一道题都做会、做懂。
  3. 真题演练: 如果能找到广工历年C语言考研真题,是最好的复习资料,反复研究真题的出题风格和重点。
  4. 错题总结: 准备一个错题本,记录自己做错的题目和知识点,定期回顾。

祝你备考顺利,金榜题名!

-- 展开阅读全文 --
头像
C语言如何高效转为汇编语言?
« 上一篇 今天
dede网站地图调用
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]