跳到主要内容

2024-2025学年上学期期中

2024-2025学年上学期期中试卷——邬海琴(含答案)​

说明​

  • 也作为第一次月考。

一、单选题(20 分,每题 2 分)​

  1. 下面关于 C 语言的描述,不正确的是( )。

    A. C 语言是面向过程的高级程序设计语言

    B. C 语言程序从源文件到可执行文件,中间只需要一个编译的过程

    C. C 语言是编译型语言

    D. 和机器语言相比,C 语言可移植性更强

    答案:

    B

    C 语言程序从源文件到可执行文件,中间需要预处理、编译、汇编和链接四个阶段。


  2. 下列合法的变量名为( )。

    A. _register

    B. 0violent

    C. test-01s

    D. main

    答案:

    A、D

    考点:标识符命名规则

    B. 变量名不可以以数字开头。

    C. 变量名中不可以存在 - 等特殊字符。

    提示

    原题标注为单选题,但 _register 和 main 均为合法变量名,参考答案汇总也写为 A/D。


  3. 设 int a = 5, b = 4, c = 3, d = 2, m = 1, n = 0;,则执行 (m = a < b) && (n = c < d) 语句后,m 和 n 的值分别为( )。

    A. 0 0

    B. 2 0

    C. 0 2

    D. 2 2

    答案:

    A

    考点:关系运算符和 + 逻辑运算符

    a < b 结果为 false,因此 m 的值为 0。c < d 结果为 false,因此 n 的值为 0。


  4. 下列 C 语言的语句没有语法错误的是( )。

    A. int a = 3++;

    B. printf("%d"), a);

    C. #include <stdio>

    D. int a, b, c = 1;

    答案:

    D

    A. int a = 3++;:常量不可以进行 ++ 运算。

    B. printf("%d"), a);:多了一个 )。

    C. #include <stdio>:没有 stdio 库,只有 stdio.h。


  5. 下列值为 3 的是( )。

    A. 21 % 5

    B. (float)11 / 3

    C. 11 / 3

    D. (int)(11.0 / 3 + 0.5)

    答案:

    C

    考点:算数运算符 + 强制类型转换取整规则

    A. 21 % 5 运算结果为 1。

    B. (float)11 / 3 运算结果为 3.0。

    D. (int)(11.0 / 3 + 0.5):11.0 / 3 结果为 3.66,加 0.5 后为 4.16,强制转换为 int 类型后值为 4。


  6. 下列叙述错误的是( )。

    A. 一个 C 程序可以引入多个头文件

    B. 一个 C 程序只能有一个主函数

    C. C 程序在书写时,有严格的缩进要求,否则不能编译通过

    D. C 程序的主函数必须用 main 作为函数名

    答案:

    C

    C 程序在书写时,没有严格的缩进要求。


  7. 假定 x = 3.45 为 double 类型,则执行 printf("%d", (int)x) 的结果为( )。

    A. 3.4

    B. 4

    C. 3

    D. 3.5

    答案:

    C

    考点:强制类型转换取整规则

    3.45 强制类型转换为 int 后,值为 3,因此输出结果为 3。


  8. 表达式 (c < 12 && c >= 6) && !(c % 3) 的值存在为真时,变量 c 可能的值为( )。

    A. 3

    B. 0

    C. 7

    D. 6

    答案:

    D

    考点:算数运算符 + 关系运算符和 + 逻辑运算符

    当 c = 6 时,(c < 12 && c >= 6) 为真。c % 3 = 0,!0 = 1,因此 !(c % 3) 为真,(c < 12 && c >= 6) && !(c % 3) 为真。


  9. 下面程序段的输出是什么( )。

    int k = 6 % 5 ? 6 - 2 : 6 - 1;
    switch (k)
    {
    case 4:
    k++;
    case 8:
    k--;
    default:
    k = 0;
    break;
    }
    printf("%d", k);

    A. 7

    B. 8

    C. 4

    D. 0

    答案:

    D

    考点:三元运算符和 + switch case

    6 % 5 为 1,因此 k = 6 - 2 = 4。因为 case 语句后没有 break,因此会一直执行直到遇到 break,所以 k 的值为 0。


  10. 输出单精度浮点数,保留 3 位小数,占位符使用正确的是( )。

    A. %3f

    B. %.3f

    C. &3f

    D. &.3f

    答案:

    B

    考点:占位符使用

    原参考答案对 A 的解释为:“%3f 表示输出至少为 3 位浮点数,长度不足 3 位用 0 补全。”

    提示

    原参考答案对 %3f 的解释有误:3 表示最小字段宽度,宽度不足时默认以空格补齐;%f 默认输出 6 位小数。保留 3 位小数应使用 %.3f。


二、填空题(10 分,每题 2 分)​

  1. 若有定义:char w; int x; float y; double z;,则表达式 x * w - z + y 值的数据类型是 ‾\underline{\qquad}。

    答案:

    double

    考点:多类型数据参与算数运算,结果向高精度数据类型对齐


  2. 字符串 "\\nacb\n" 的长度为 ‾\underline{\qquad}。

    答案:

    6(内存中占 7 字节)

    一共有 6 个字符,分别是 '\\'、'n'、'a'、'c'、'b' 和 '\n'。字符串长度为 6(对应 strlen(),不包括字符串结束符 '\0'),内存中占 7 字节(对应 sizeof(),包含字符串结束符 '\0')。


  3. do-while 循环语句和 while 循环语句至少执行一次循环体的是 ‾\underline{\qquad}。

    答案:

    do-while

    详解:略。


  4. 下面程序的输出结果为 ‾\underline{\qquad}。

    #include <stdio.h>

    int main(void)
    {
    int i = 5;
    printf("%d", 1 ^ 3 * (i + 5) % 7);
    return 0;
    }
    答案:

    3

    考点:算数运算符 + 位运算符 + 优先级

    1 ^ 3 * (i + 5) % 7。当 i = 5 时,先计算括号内的 i + 5 = 10,原式变为 1 ^ 3 * 10 % 7。由于异或的优先级低于 * 和 %,因此先计算 3 * 10 % 7 = 2,原式变为 1 ^ 2。1 的补码为 0001,2 的补码为 0010,进行异或之后为 0011。补码 0011 的原码为 0011 = 3,因此结果为 3。


  5. 下面程序的输出结果为 ‾\underline{\qquad}。

    #include <stdio.h>
    #define F(x) 5+x

    int main(void)
    {
    int x = 5;
    printf("%d", F(x) * 2);
    return 0;
    }
    答案:

    15

    考点:宏定义

    define 为原式替换,因此 F(x) * 2 = 5 + x * 2 = 15。


三、编程题(70 分,每题 35 分)​

  1. 输入两个整数 a, b,判断 a 的三次方与 b 的平方是否相等,若相等输出字符串 "equal",否则输出两者间较小的数。

    输入描述:两个整数 a, b,−100000<a,b<100000-100000 < a,b < 100000。

    输出描述:一个字符串或者一个整数。

    写一段完整的 C 语言程序,注意语法和输出格式。

    输入样例:4 8

    输出样例:equal

    答案:

    注意给定的输入范围为 −100000<a,b<100000-100000 < a,b < 100000,如果使用 int 会超出 int 的最大存储范围(使用 %d 扣 5 分)。

    #include <stdio.h>

    int main()
    {
    long long int a, b;
    scanf("%lld %lld", &a, &b);
    long long int c = a * a * a;
    long long int d = b * b;
    if (c == d)
    {
    printf("equal");
    }
    else if (c > d)
    {
    printf("%lld", d);
    }
    else
    {
    printf("%lld", c);
    }
    return 0;
    }

  2. 输入一个数字 N,输出一行由 N 个数字 N 组成的数字。

    输入描述:一个数字 N,0≤N≤90 \le N \le 9。

    输出描述:一行数字。

    写一段完整的 C 语言程序,注意语法和输出格式。

    输入样例:6

    输出样例:666666

    答案:
    #include <stdio.h>

    int main()
    {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
    printf("%d", n);
    }
    return 0;
    }