跳到主要内容

2024-2025学年上学期第二次月考

2024-2025学年上学期第二次月考——邬海琴(仅答案)​

一、单选题​

  1. (题目暂缺)

    答案:

    D

    C 语言中函数不能嵌套定义,一个函数中可以调用另一个函数,但不能定义另一个函数。


  2. (题目暂缺)

    答案:

    A

    sizeof() 是一个运算符,计算的是变量或类型所占用的内存字节数,计算字符串的长度时,包含末尾的 '\0'。strlen() 是一个函数,计算的是字符串长度,不包含字符串末尾的 '\0'。


  3. (题目暂缺)

    答案:

    B

    C 语言中,二维数组作为函数参数必须指明数组第二维(列)的大小,第一维(行)可以不指定。


  4. (题目暂缺)

    答案:

    B

    在 C 语言中,数组名是一个常量指针,它指向数组的第一个元素。一旦数组被定义,数组名所代表的这个指针就不能被重新赋值。


  5. (题目暂缺)

    答案:

    C

    p 是指向结构体的指针,结构体指针在访问结构体中的成员变量 x 时可以使用 p->x 或 (*p).x,通过结构体变量访问其成员变量用 .。


  6. (题目暂缺)

    答案:

    C

    n 被 static 关键字修饰,因此在程序的整个生命周期内都存在,在多次函数调用时,只在第一次调用时初始化。Test(23) 调用后,n 的值为 4。Test(28) 调用后,n 的值为 7。


  7. (题目暂缺)

    答案:

    A

    a = 5,b = 2,b & a 的值为 5(101),右移一位后值为 2(010)。


  8. (题目暂缺)

    答案:

    D


  9. (题目暂缺)

    答案:

    D

    动态分配内存的数据没有变量名。


  10. (题目暂缺)

    答案:

    D

    A. scanf("%s", &str); 不可以读入制表符 \t。

    B. gets() 遇到回车符('\n')结束读入。

    C. getchar() 函数没有参数。


二、填空题​

  1. (题目暂缺)

    答案:

    // 和 /* */


  2. (题目暂缺)

    答案:

    100 200 301 300

    *p1 = 100,*p2 = 100,*p3 = 300。printf("%d %d %d %d", *p1++, *++p2, *p3, (*p3)++) 语句从后往前运算。(*p3)++ 为后 ++,所以输出值为 300,指向的内存空间值被更改为 301。*p3 的值为 301。*++p2 先对 p2++,此时 p2 指向 data 数组的第二个元素,值为 200,所以输出为 200。*p1++ 先输出后 ++,因此输出值为 100。


  3. (题目暂缺)

    答案:

    0

    && 为逻辑与运算符,(a = 50) && (b = 0) 操作值为 0,不会进行后续的 && (c = 100) 操作。


  4. (题目暂缺)

    答案:

    144

    递归运算是将程序压入栈(先进后出的数据结构)。fun(81) 先入栈,调用 f(11)。f(11) 入栈,调用 f(1)。f(1) 入栈,调用 f(0)。f(0) 入栈,因为 n 不符合条件,函数结束。f(0) 出栈,继续执行调用 f(0) 的 f(1),输出 1。f(1) 出栈,执行 f(11) 的后续语句,输出 4,函数结束,f(11) 出栈。执行 f(81) 后续语句,输出 4,f(81) 出栈。程序调用结束。


  5. (题目暂缺)

    答案:

    *(a + 3)


三、编程题​

  1. (题目暂缺)

    答案:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    // 定义结构体来存储书籍信息
    typedef struct Book {
    int score;
    char author[100];
    char title[100];
    } Book;

    int compare(const void *a, const void *b) {
    Book *bookA = (Book *)a;
    Book *bookB = (Book *)b;

    // 先按照评分从高到低排序
    if (bookA->score > bookB->score) {
    return -1;
    } else if (bookA->score < bookB->score) {
    return 1;
    } else {
    // 评分相同,按照作者名字典序排序
    int authorCmp = strcmp(bookA->author, bookB->author);
    if (authorCmp != 0) {
    return authorCmp;
    } else {
    // 作者名相同,按照书名字典序排序
    return strcmp(bookA->title, bookB->title);
    }
    }
    }

    int main() {
    int n;
    scanf("%d", &n);

    Book books[n];
    for (int i = 0; i < n; i++) {
    scanf("%d %s %s", &books[i].score, books[i].author, books[i].title);
    }

    qsort(books, n, sizeof(Book), compare);

    for (int i = 0; i < n; i++) {
    printf("%d %s %s\n", books[i].score, books[i].author, books[i].title);
    }

    return 0;
    }

  2. (题目暂缺)

    答案:
    #include <stdio.h>

    int main() {
    int nums[7] = {1, 2, 3, 4, 5, 6, 7};
    int k;
    scanf("%d", &k);
    k %= 7;
    int newNums[7];

    // 将 nums 数组中从索引为(n - k)的元素开始,依次放入 newNums 数组的开头
    for (int i = 0; i < k; i++) {
    newNums[i] = nums[7 - k + i];
    }

    // 将 nums 数组中从索引为 0 到(n - k - 1)的元素,依次放入 newNums 数组中剩余的位置
    for (int i = 0; i < 7 - k; i++) {
    newNums[k + i] = nums[i];
    }

    // 输出轮转后的数组
    for (int i = 0; i < 7; i++) {
    printf("%d ", newNums[i]);
    }

    return 0;
    }