Skip to content

《C语言程序设计》第一学期期末补考试卷A (精选05)

一、单项选择题(本大题共20题,每题2分,共40分)

(1) 以下不是 C 语言的特点的是 (B)。

A. C语言简洁、紧凑
B. 能够编制出功能复杂的程序
C. C语言可以直接对硬件进行操作
D. C语言移植性好

查看答案与解析

答案:B

解析: 能够编制出功能复杂的程序不是 C 语言特有的特点,几乎所有编程语言都可以编制复杂程序。C 语言的特点包括:简洁紧凑、可直接操作硬件、移植性好、效率高、功能强大等。


难度: ⭐
考点: #C语言特点

💡 学习锦囊

📖 相关公式与知识点:

  • C 语言主要特点:简洁高效、可移植、可直接访问硬件、丰富的数据类型和运算符。

思路分析

注意题目问的是"不是 C 语言特点"的选项。

🔄 举一反三
  1. C 语言相比其他高级语言的主要优势是什么?
    查看练习答案与解析

    答案:执行效率高,可直接操作内存和硬件。 解析:C 语言是中级语言,兼具高级语言的易用性和低级语言的高效性。

(2) 以下不正确的 C 语言标识符是 (D)。

A. ABC
B. abc
C. a_bc
D. ab.c

查看答案与解析

答案:D

解析: C 语言标识符只能由字母、数字和下划线组成,且不能以数字开头。D 选项包含小数点 .,不符合标识符命名规则。


难度: ⭐
考点: #标识符

💡 学习锦囊

📖 相关公式与知识点:

  • 标识符规则:字母/下划线开头,后续可为字母、数字、下划线。
  • 关键字不能作为标识符。

思路分析

标识符中不能包含特殊字符如 .@# 等。

🔄 举一反三
  1. 以下哪些是合法标识符?_abc, 123abc, int
    查看练习答案与解析

    答案_abc 合法;123abc 不合法(数字开头);int 不合法(关键字)。

(3) 一个 C 语言程序是由 (B)。

A. 一个主程序和若干子程序组成
B. 函数组成
C. 若干过程组成
D. 若干子程序组成

查看答案与解析

答案:B

解析: C 语言程序的基本组成单位是函数。一个 C 程序由一个 main 函数和若干其他函数组成。


难度: ⭐
考点: #程序结构

💡 学习锦囊

📖 相关公式与知识点:

  • C 程序 = 函数集合。
  • 必须有且只有一个 main 函数作为入口。

思路分析

C 语言没有"过程"或"子程序"的概念,统一称为函数。

🔄 举一反三
  1. C 程序中是否可以没有 main 函数?
    查看练习答案与解析

    答案:不可以 解析:main 函数是程序的唯一入口,必须有且只有一个。

(4) 一个算法应该具有"确定性"等5个特性,对另外4个特性的描述中错误的是 (B)。

A. 有零个或多个输入
B. 有零个或多个输出
C. 有穷性
D. 可行性

查看答案与解析

答案:B

解析: 算法的五个特性:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。算法必须有输出,否则没有意义。


难度: ⭐
考点: #算法特性

💡 学习锦囊

📖 相关公式与知识点:

  • 算法五大特性:有穷性、确定性、可行性、输入(0或多个)、输出(1或多个)。

思路分析

注意输出至少有一个,不能为零个。

🔄 举一反三
  1. 算法的时间复杂度衡量的是什么?
    查看练习答案与解析

    答案:算法执行时间随输入规模增长的趋势。 解析:时间复杂度用大 O 表示法,如 O(n)、O(n²)。

(5) 设变量 a 是整型,f 是实型,i 是双精度型,则表达式 10 + a + i * f 的值类型为 (C)。

A. int
B. float
C. double
D. 不确定

查看答案与解析

答案:C

解析: 表达式中 i 是 double 类型,f 是 float 类型。运算时 float 会提升为 double,最终结果类型为 double。


难度: ⭐⭐
考点: #类型转换

💡 学习锦囊

📖 相关公式与知识点:

  • 隐式类型转换方向:char → int → float → double。
  • 表达式结果类型取最高精度操作数的类型。

思路分析

混合运算时,低精度类型向高精度类型转换。

🔄 举一反三
  1. int a = 3; float b = 2.5;a + b 的类型是什么?
    查看练习答案与解析

    答案:float 解析:int 提升为 float,结果为 float。

(6) 在 C 语言中,char 型数据在内存中的存储形式是 (D)。

A. 补码
B. 反码
C. 原码
D. ASCII 码

查看答案与解析

答案:D

解析: char 型数据在内存中以 ASCII 码的形式存储。例如 'A' 存储为 65(十进制)。


难度: ⭐
考点: #字符存储

💡 学习锦囊

📖 相关公式与知识点:

  • char 占 1 字节(8 位)。
  • 有符号 char 范围:-128 ~ 127;无符号 char 范围:0 ~ 255。

思路分析

字符本质上是整数,可以参与算术运算。

🔄 举一反三
  1. char c = 'A'; printf("%c", c + 1); 输出什么?
    查看练习答案与解析

    答案:B 解析:'A' 的 ASCII 码为 65,加 1 后为 66,即 'B'。

(7) 有如下程序,输入数据:12345M678<CR> 后(<CR> 表示回车),x 的值是 (B)。

c
#include <stdio.h>
main()
{
    int x;
    float y;
    scanf("%3d%f", &x, &y);
}

A. 12345
B. 123
C. 45
D. 345

查看答案与解析

答案:B

解析:%3d 表示读取最多 3 位整数,所以 x = 123。后面的 "45M678" 中,"45" 被 %f 读取为 y 的值(45.0),"M" 不是数字,scanf 在此处停止。


难度: ⭐⭐
考点: #scanf格式控制

💡 学习锦囊

📖 相关公式与知识点:

  • %3d:读取最多 3 位宽度的整数。
  • %f 遇到非数字字符会停止读取。

思路分析

注意 scanf 的宽度限制和遇到非法字符时的行为。

🔄 举一反三
  1. 若输入 123456,x 和 y 的值分别是多少?
    查看练习答案与解析

    答案:x=123, y=456.0 解析:%3d 取 123,%f 取 456。

(8) 若有以下定义 int a, b; float x;,则正确的赋值语句是 (C)。

A. a = 1, b = 2
B. b++
C. a = b = 5
D. b = int(x)

查看答案与解析

答案:C

解析: A 是逗号表达式,不是赋值语句(缺少分号且整体不是语句)。B 是自增表达式,不是赋值语句。C 是连续赋值,合法。D 语法错误,应为 b = (int)x


难度: ⭐⭐
考点: #赋值语句

💡 学习锦囊

📖 相关公式与知识点:

  • 强制类型转换格式:(类型)表达式
  • 连续赋值:从右向左执行。

思路分析

区分表达式和语句,注意强制类型转换的语法。

🔄 举一反三
  1. float x = 3.14; int b = (int)x; 后 b 的值是多少?
    查看练习答案与解析

    答案:3 解析:强制类型转换截断小数部分,不进行四舍五入。

(9) 以下程序的执行结果是 (A)。

c
#include <stdio.h>
main()
{
    int i = 10, j = 10;
    printf("%d,%d\n", ++i, j--);
}

A. 11, 10
B. 9, 10
C. 11, 9
D. 10, 9

查看答案与解析

答案:A

解析:++i 先增后用,输出 11。j-- 先用后减,输出 10。


难度: ⭐
考点: #自增自减

💡 学习锦囊

📖 相关公式与知识点:

  • ++i:先自增,再参与运算。
  • i++:先参与运算,再自增。

思路分析

注意前缀和后缀的区别。

🔄 举一反三
  1. int a=5; printf("%d", a++ + ++a); 输出是多少?(注意:此为未定义行为)
    查看练习答案与解析

    答案:结果不确定(未定义行为) 解析:同一表达式中多次修改同一变量是未定义行为,应避免。

(10) 已知字母 A 的 ASCII 码是 65,以下程序的执行结果是 (D)。

c
#include <stdio.h>
main()
{
    char c1 = 'A', c2 = 'Y';
    printf("%d,%d\n", c1, c2);
}

A. A,Y
B. 65,65
C. 65,90
D. 65,89

查看答案与解析

答案:D

解析: 'Y' 的 ASCII 码 = 'A' + 24 = 65 + 24 = 89。%d 输出 ASCII 码值。


难度: ⭐
考点: #ASCII码

💡 学习锦囊

📖 相关公式与知识点:

  • 'A' = 65, 'Z' = 90, 'a' = 97, 'z' = 122。

思路分析

大写字母 'A'-'Z' 的 ASCII 码是连续的 65-90。

🔄 举一反三
  1. 小写字母 'a' 的 ASCII 码是多少?'a' 和 'A' 相差多少?
    查看练习答案与解析

    答案:'a'=97,相差 32 解析:大小写字母 ASCII 码差值为 32,'a' - 'A' = 32。

(11) 下列运算符中优先级最高的是 (C)。

A. <
B. +
C. %
D. !=

查看答案与解析

答案:C

解析: 算术运算符(+-*/%)优先级高于关系运算符(<><=>=)和等于运算符(==!=)。在算术运算符中,*/% 优先级高于 +-


难度: ⭐
考点: #运算符优先级

💡 学习锦囊

📖 相关公式与知识点:

  • 优先级从高到低:算术 > 关系 > 逻辑 > 赋值。

思路分析

记住常见运算符的优先级顺序。

🔄 举一反三
  1. 表达式 3 + 4 * 2 > 10 && 5 != 3 的值是多少?
    查看练习答案与解析

    答案:1(真) 解析3+8=11>10 为真,5!=3 为真,1&&1=1

(12) 设 x、y 和 z 是 int 型变量,且 x=3, y=4, z=5,则下面表达式中值为 0 的是 (D)。

A. x && y
B. x <= y
C. x || y + z && y - z
D. !(x < y) && !z && 1

查看答案与解析

答案:D

解析:

  • A:x && y = 3 && 4 = 1(真)
  • B:x <= y = 3 <= 4 = 1(真)
  • C:x || y + z && y - z = 3 || (9 && -1) = 3 || 1 = 1(真)
  • D:!(x < y) && !z && 1 = !(3<4) && !5 && 1 = 0 && 0 && 1 = 0(假)

D 选项值为 0,选 D。


难度: ⭐⭐
考点: #逻辑运算

💡 学习锦囊

📖 相关公式与知识点:

  • && 优先级高于 ||
  • ! 优先级最高。
  • && 运算:全真才真,一假即假。

思路分析

注意运算符优先级和短路求值。

🔄 举一反三
  1. int a=0, b=5; int c = a && b++; 后 b 的值是多少?
    查看练习答案与解析

    答案:5 解析:a=0 为假,短路求值,b++ 不执行,b 仍为 5。

(13) 判断 char 型变量 c1 是否为小写字母的正确表达式为 (D)。

A. 'a' <= c1 <= 'z'
B. (c1 >= a) && (c1 <= z)
C. ('a' >= c1) || ('z' <= c1)
D. (c1 >= 'a') && (c1 <= 'z')

查看答案与解析

答案:D

解析: A 语法错误(不能连续比较)。B 中 a 和 z 未加引号,是变量而非字符。C 逻辑错误。D 正确判断 c1 是否在 'a' 到 'z' 之间。


难度: ⭐
考点: #关系表达式

💡 学习锦囊

📖 相关公式与知识点:

  • 字符比较本质是比较 ASCII 码。
  • 字符常量必须用单引号括起来。

思路分析

注意字符常量的引号不能省略。

🔄 举一反三
  1. 判断变量 ch 是否为大写字母的表达式是什么?
    查看练习答案与解析

    答案(ch >= 'A') && (ch <= 'Z')解析:同理,判断数字字符:(ch >= '0') && (ch <= '9')

(14) 字符串 "a" 在内存中占据的字节个数为 (C)。

A. 0
B. 1
C. 2
D. 3

查看答案与解析

答案:C

解析: 字符串 "a" 包含字符 'a' 和结束符 '\0',共 2 个字节。


难度: ⭐
考点: #字符串存储

💡 学习锦囊

📖 相关公式与知识点:

  • C 字符串以 '\0' 结尾。
  • "a" 占 2 字节:'a' 和 '\0'。

思路分析

字符串长度(strlen)和占用空间(sizeof)的区别。

🔄 举一反三
  1. char s[10] = "abc";strlen(s)sizeof(s) 分别是多少?
    查看练习答案与解析

    答案:strlen=3, sizeof=10 解析:strlen 统计到 '\0' 前的字符数,sizeof 是整个数组的大小。

(15) 下面有关 for 循环的正确描述是 (D)。

A. for 循环只能用于循环次数已经确定的情况
B. for 循环是先执行循环体语句,后判定表达式
C. 在 for 循环中,不能用 break 语句跳出循环体
D. for 循环体语句中,可以包含多条语句,但要用花括号括起来

查看答案与解析

答案:D

解析: A 错误,for 循环也可用于次数不确定的情况。B 错误,for 先判定后执行。C 错误,可以用 break。D 正确,多条语句需用花括号组成复合语句。


难度: ⭐
考点: #for循环

💡 学习锦囊

📖 相关公式与知识点:

  • for 循环格式:for(初始化; 条件; 迭代) 语句
  • 循环体多条语句时必须用 {} 括起来。

思路分析

for 循环的三个表达式都可以省略,但分号不能省略。

🔄 举一反三
  1. for( ; ; ) 是什么含义?
    查看练习答案与解析

    答案:无限循环(死循环) 解析:三个表达式都省略,条件默认为真,等价于 while(1)

(16) 下面程序的运行结果是 (C)。

c
#include <stdio.h>
main()
{
    int num = 0;
    while (num <= 2)
    {
        num++;
        printf("%d ", num);
    }
}

A. 1
B. 1 2
C. 1 2 3
D. 1 2 3 4

查看答案与解析

答案:C

解析:

  • num=0:num++ 后 num=1,输出 1。1<=2,继续。
  • num=1:num++ 后 num=2,输出 2。2<=2,继续。
  • num=2:num++ 后 num=3,输出 3。3>2,结束。

输出:1 2 3


难度: ⭐
考点: #while循环

💡 学习锦囊

📖 相关公式与知识点:

  • while 先判断后执行。
  • 注意循环条件和循环体内对变量的修改。

思路分析

追踪 num 的值变化,注意判断条件和自增的时机。

🔄 举一反三
  1. 若将 num++ 放在 printf 之后,输出是什么?
    查看练习答案与解析

    答案:0 1 2 解析:先输出当前值再自增,循环条件判断的是自增前的值。

(17) 以下描述正确的是 (C)。

A. 由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B. do-while 循环由 do 开始,用 while 结束,在 while(表达式)后面不能写分号
C. 在 do-while 循环体中,一定要有能使 while 后面表达式的值变成零("假")的操作
D. do-while 循环中,根据情况可以省略 while

查看答案与解析

答案:C

解析: A 错误,循环体可以是复合语句。B 错误,while 后面必须有分号。C 正确,否则死循环。D 错误,while 不能省略。


难度: ⭐
考点: #do-while循环

💡 学习锦囊

📖 相关公式与知识点:

  • do-while 语法:do { 循环体 } while(条件);
  • 注意 while 后有分号。

思路分析

do-while 至少执行一次,注意避免死循环。

🔄 举一反三
  1. do-while 和 while 的主要区别是什么?
    查看练习答案与解析

    答案:do-while 先执行后判断,至少执行一次;while 先判断后执行,可能一次都不执行。

(18) 以下对一维整型数组 a 的正确说明是 (D)。

A. int a(10);
B. int n = 10, a[n];
C. int n; scanf("%d", &n); int a[n];
D. int a[10];

查看答案与解析

答案:D

解析: A 错误,数组用方括号 [] 而非圆括号 ()。B 和 C 错误,传统 C 语言中数组大小必须是常量表达式(C99 支持变长数组,但题目通常按传统 C 考虑)。D 正确。


难度: ⭐
考点: #数组定义

💡 学习锦囊

📖 相关公式与知识点:

  • 数组定义:类型 数组名[常量表达式];
  • C99 支持变长数组(VLA),但传统 C 不支持。

思路分析

注意数组定义的语法规则。

🔄 举一反三
  1. int a[] = {1, 2, 3}; 数组 a 的长度是多少?
    查看练习答案与解析

    答案:3 解析:初始化时省略长度,编译器根据初始化列表自动确定。

(19) 以下对二维数组 a 的正确说明是 (C)。

A. int a[3][];
B. float a(3,4);
C. double a[1][4];
D. float a(3)(4);

查看答案与解析

答案:C

解析: A 错误,二维数组可以省略第一维大小,但不能省略第二维。B 和 D 错误,数组用方括号。C 正确。


难度: ⭐
考点: #二维数组定义

💡 学习锦囊

📖 相关公式与知识点:

  • 二维数组定义:类型 数组名[行数][列数];
  • 初始化时可以省略行数,但不能省略列数。

思路分析

牢记二维数组定义的语法。

🔄 举一反三
  1. int a[][3] = { {1,2,3}, {4,5,6} }; 数组 a 有几行?
    查看练习答案与解析

    答案:2 行 解析:初始化列表有两组,编译器自动确定行数为 2。

(20) 若二维数组 a 有 m 列,则在 a[i][j] 前面的元素个数为 (B)。

A. j * m + i
B. i * m + j
C. i * m + j - 1
D. i * m + j + 1

查看答案与解析

答案:B

解析: 二维数组按行存储。a[i][j] 前面有 i 行完整的元素(每行 m 个),加上第 i 行的 j 个元素,共 i * m + j 个。


难度: ⭐⭐
考点: #二维数组存储

💡 学习锦囊

📖 相关公式与知识点:

  • 二维数组按行优先存储。
  • a[i][j] 的地址 = 基地址 + (i * m + j) * sizeof(元素类型)。

思路分析

理解二维数组在内存中的线性存储方式。

🔄 举一反三
  1. 若二维数组 a 有 n 列,a[i][j] 是数组中的第几个元素(从 0 开始计数)?
    查看练习答案与解析

    答案:第 i * n + j解析:前面有 i 行(每行 n 个)加上当前行的 j 个。

二、填空题(本大题共10空,每空2分,共20分)

(1) 结构化设计中的三种基本结构是 顺序结构选择结构循环结构

查看答案与解析

答案: 顺序结构、选择结构、循环结构

解析: 结构化程序设计的三种基本控制结构:顺序、选择(分支)、循环。


难度: ⭐
考点: #程序结构

💡 学习锦囊

📖 相关公式与知识点:

  • 任何程序都可以用这三种基本结构组合实现。

思路分析

这是程序设计的基础概念。

🔄 举一反三
  1. 三种基本结构各自的特点是什么?
    查看练习答案与解析

    答案:顺序结构——按书写顺序执行;选择结构——根据条件选择执行路径;循环结构——重复执行某段代码。

(2) 在 C 语言中的实型变量分为两种类型,它们是 float(单精度)double(双精度)

查看答案与解析

答案: float、double

解析: C 语言的实型(浮点型)包括 float(4字节)和 double(8字节)。


难度: ⭐
考点: #数据类型

💡 学习锦囊

📖 相关公式与知识点:

  • float:约 6-7 位有效数字。
  • double:约 15-16 位有效数字。

思路分析

注意 long double 在某些编译器中也存在。

🔄 举一反三
  1. float 和 double 各占几个字节?
    查看练习答案与解析

    答案:float 占 4 字节,double 占 8 字节。 解析:这是 C 标准的规定,不同编译器可能略有差异。

(3) 当 a=5, b=4, c=2 时,表达式 a > b != c 的值是 1

查看答案与解析

答案: 1

解析:a > b = 5 > 4 = 1(真)。1 != c = 1 != 2 = 1(真)。


难度: ⭐⭐
考点: #关系运算

💡 学习锦囊

📖 相关公式与知识点:

  • 关系运算符优先级:> < >= <= 高于 == !=
  • 关系表达式结果为 0(假)或 1(真)。

思路分析

注意运算符优先级,先算 a > b,再算 != c

🔄 举一反三
  1. 当 a=3, b=3, c=1 时,a == b > c 的值是多少?
    查看练习答案与解析

    答案:0 解析b > c = 3 > 1 = 1,a == 1 = 3 == 1 = 0。

(4) 下列程序运行后的输出结果是

c
#include <stdio.h>
main()
{
    int i, j;
    for (i = 4; i >= 1; i--)
    {
        printf("*");
        for (j = 1; j <= 4 - i; j++)
            printf("*");
        printf("\n");
    }
}

答案:

*
**
***
****
查看答案与解析

解析:

  • i=4:输出 1 个 *,内层循环 0 次,共 1 个 *。
  • i=3:输出 1 个 *,内层循环 1 次,共 2 个 *。
  • i=2:输出 1 个 *,内层循环 2 次,共 3 个 *。
  • i=1:输出 1 个 *,内层循环 3 次,共 4 个 *。

难度: ⭐⭐
考点: #嵌套循环

💡 学习锦囊

📖 相关公式与知识点:

  • 外层循环控制行数,内层循环控制每行输出个数。

思路分析

追踪内外层循环的执行次数。

🔄 举一反三
  1. 若外层循环改为 for(i=1; i<=4; i++),输出图形是什么?
    查看练习答案与解析

    答案:同样输出 1,2,3,4 个 * 的三角形。 解析:只要内层循环次数递增,图形形状不变。

(5) 若有定义:int a[3][4] = { {1,2}, {0}, {4,6,8,10} }; 则初始化后,a[1][2] 得到的初值是 0a[2][1] 得到的初值是 6

查看答案与解析

答案: a[1][2] = 0, a[2][1] = 6

解析: 部分初始化时,未显式初始化的元素自动为 0。

  • a[0] = {1, 2, 0, 0}
  • a[1] = {0, 0, 0, 0}
  • a[2] = {4, 6, 8, 10}

所以 a[1][2] = 0, a[2][1] = 6。


难度: ⭐⭐
考点: #数组初始化

💡 学习锦囊

📖 相关公式与知识点:

  • 部分初始化时,剩余元素自动置 0。
  • 二维数组可以按行初始化。

思路分析

理解部分初始化的规则。

🔄 举一反三
  1. int a[5] = {1, 2}; 则 a[3] 的值是多少?
    查看练习答案与解析

    答案:0 解析:部分初始化时,未指定的元素自动初始化为 0。

(6) 在 C 语言中,二维数组元素在内存中的存放顺序是 按行存放(行优先)

查看答案与解析

答案: 按行存放(行优先)

解析: C 语言中二维数组按行优先顺序存储,即先存完第一行,再存第二行,以此类推。


难度: ⭐
考点: #数组存储

💡 学习锦囊

📖 相关公式与知识点:

  • 行优先:a[0][0], a[0][1], ..., a[0][m-1], a[1][0], ...

思路分析

与列优先(Fortran)区分。

🔄 举一反三
  1. 三维数组 a[2][3][4] 在内存中如何排列?
    查看练习答案与解析

    答案:按页→行→列的顺序(最右边下标变化最快)。 解析:C 语言多维数组始终是行优先,最右维变化最快。

三、程序分析题(本大题共2题,每题10分,共20分)

描述程序功能并写出程序结果。

(1)

c
#include <stdio.h>
main()
{
    int a, s, n, count;
    a = 2; s = 0; n = 1; count = 1;
    while (count <= 7)
    {
        n = n * a;
        s = s + n;
        ++count;
    }
    printf("s=%d", s);
}
查看答案与解析

答案: s=254

解析: 程序计算等比数列 2^1 + 2^2 + ... + 2^7 的和。

  • n = 2, 4, 8, 16, 32, 64, 128
  • s = 2 + 4 + 8 + 16 + 32 + 64 + 128 = 254

难度: ⭐⭐
考点: #循环 #等比数列

💡 学习锦囊

📖 相关公式与知识点:

  • 等比数列求和公式:S = a1 * (q^n - 1) / (q - 1)。
  • 本题:S = 2 * (2^7 - 1) / (2 - 1) = 2 * 127 = 254。

思路分析

识别等比数列,可以用公式验证。

🔄 举一反三
  1. 若 count <= 10,s 的值是多少?
    查看练习答案与解析

    答案:2046 解析:2 + 4 + ... + 1024 = 2*(2^10-1) = 2046。

(2)

c
#include <stdio.h>
main()
{
    int a[3][3] = {1, 3, 5, 7, 9, 11, 13, 15, 17}, sum = 0, i, j;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            if (i == j)
                sum = sum + a[i][j];
    printf("sum=%d\n", sum);
}
查看答案与解析

答案: sum=27

解析: 程序求 3×3 矩阵主对角线元素之和。

  • a[0][0] = 1
  • a[1][1] = 9
  • a[2][2] = 17
  • sum = 1 + 9 + 17 = 27

难度: ⭐⭐
考点: #二维数组 #对角线求和

💡 学习锦囊

📖 相关公式与知识点:

  • 主对角线:i == j。
  • 副对角线:i + j == n - 1。

思路分析

理解二维数组对角线的索引规律。

🔄 举一反三
  1. 如何求副对角线元素之和?
    查看练习答案与解析

    答案if (i + j == 2) sum += a[i][j];解析:3×3 矩阵副对角线:a[0][2], a[1][1], a[2][0]。

四、编程题(本大题共1题,每题20分,共20分)

对 15 个数进行排序,按从小到大的顺序输出。

查看答案与解析

参考答案:

c
#include <stdio.h>

main()
{
    int a[15], i, j, t;
    
    /* 输入15个数 */
    printf("请输入15个整数:\n");
    for (i = 0; i < 15; i++)
        scanf("%d", &a[i]);
    
    /* 冒泡排序 */
    for (i = 0; i < 14; i++)
        for (j = 0; j < 14 - i; j++)
            if (a[j] > a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
    
    /* 输出 */
    printf("排序结果:\n");
    for (i = 0; i < 15; i++)
        printf("%d ", a[i]);
    printf("\n");
}

解析: 使用冒泡排序算法,通过相邻元素比较交换,将较大的元素逐步"冒泡"到后面。


难度: ⭐⭐
考点: #排序算法 #冒泡排序

💡 学习锦囊

📖 相关公式与知识点:

  • 冒泡排序:时间复杂度 O(n²),空间复杂度 O(1)。
  • 每轮将未排序部分的最大值移到正确位置。

思路分析

理解冒泡排序的两层循环:外层控制轮数,内层控制每轮比较次数。

易错点

  • 内层循环边界:j < n - 1 - i,避免越界和重复比较。
🔄 举一反三
  1. 如何用选择排序实现?
    查看练习答案与解析

    答案

    c
    for (i = 0; i < 14; i++)
    {
        min_idx = i;
        for (j = i + 1; j < 15; j++)
            if (a[j] < a[min_idx])
                min_idx = j;
        t = a[i]; a[i] = a[min_idx]; a[min_idx] = t;
    }

    解析:每轮找到最小元素,与当前位置交换。

你正在阅读的是会员专属文档,💕 限时特惠进行中
你尚未登录,目前新用户可获3天体验会员,去登录