2024-2025学年上学期第二次月考
2024-2025学年上学期第二次月考——邬海琴(仅答案)
一、单选题
-
(题目暂缺)
答案:
D
C 语言中函数不能嵌套定义,一个函数中可以调用另一个函数,但不能定义另一个函数。
-
(题目暂缺)
答案:
A
sizeof()是一个运算符,计算的是变量或类型所占用的内存字节数,计算字符串的长度时,包含末尾的'\0'。strlen()是一个函数,计算的是字符串长度,不包含字符串末尾的'\0'。
-
(题目暂缺)
答案:
B
C 语言中,二维数组作为函数参数必须指明数组第二维(列)的大小,第一维(行)可以不指定。
-
(题目暂缺)
答案:
B
在 C 语言中,数组名是一个常量指针,它指向数组的第一个元素。一旦数组被定义,数组名所代表的这个指针就不能被重新赋值。
-
(题目暂缺)
答案:
C
p是指向结构体的指针,结构体指针在访问结构体中的成员变量x时可以使用p->x或(*p).x,通过结构体变量访问其成员变量用.。
-
(题目暂缺)
答案:
C
n被static关键字修饰,因此在程序的整个生命周期内都存在,在多次函数调用时,只在第一次调用时初始化。Test(23)调用后,n的值为 4。Test(28)调用后,n的值为 7。
-
(题目暂缺)
答案:
A
a = 5,b = 2,b & a的值为 5(101),右移一位后值为 2(010)。
-
(题目暂缺)
答案:
D
-
(题目暂缺)
答案:
D
动态分配内存的数据没有变量名。
-
(题目暂缺)
答案:
D
A.
scanf("%s", &str);不可以读入制表符\t。B.
gets()遇到回车符('\n')结束读入。C.
getchar()函数没有参数。
二、填空题
-
(题目暂缺)
答案:
//和/* */
-
(题目暂缺)
答案:
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。
-
(题目暂缺)
答案:
0
&&为逻辑与运算符,(a = 50) && (b = 0)操作值为 0,不会进行后续的&& (c = 100)操作。
-
(题目暂缺)
答案:
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)出栈。程序调用结束。
-
(题目暂缺)
答案:
*(a + 3)
三、编程题
-
(题目暂缺)
答案:
#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;}
-
(题目暂缺)
答案:
#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;}