mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
904 字
2 分钟
考试套题-第九套
2026-06-15

C 语言考试套题 - 第九套#

本套题包含填空题、改错题、程序设计题三个部分,涵盖结构体输出、倍数求积、条件求和等核心考点。


一、填空题:输出结构体学生信息#

题目说明#

程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数 fun 的功能是输出这位学生的信息。

解题思路#

  1. 定义结构体类型 STU,包含:
    • num:学号(int)
    • name:姓名(字符数组)
    • sex:性别(char)
    • birthday:嵌套的日期结构体(含 year、month、day)
    • score[3]:三门课成绩(float 数组)
  2. 函数 show 接收一个 STU 参数,按格式输出各字段
  3. 主函数定义并初始化结构体变量 std,调用 show(std) 输出

完整代码#

#include <stdio.h>
/* 定义学生结构体类型 */
typedef struct
{
int num;
char name[9];
char sex;
/* 嵌套结构体:生日日期 */
struct { int year, month, day; } birthday;
float score[3];
} STU;
/* 填空1:函数声明,参数为STU类型(值传递) */
void show(STU tt)
{
int i;
/* 输出学号、姓名、性别、生日 */
printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex,
tt.birthday.year, tt.birthday.month, tt.birthday.day);
/* 填空2:循环输出三门课成绩 */
for (i = 0; i < 3; i++)
printf("%5.1f", tt.score[i]);
printf("\n");
}
main()
{
/* 定义并初始化结构体变量 */
STU std = { 1, "Zhanghua", 'M', 1961, 10, 8, 76.5, 78.0, 82.0 };
printf("\nA student data:\n");
/* 填空3:调用show函数输出学生信息 */
show(std);
}

关键考点#

  • typedef 定义结构体别名typedef struct {...} STU; 之后可直接用 STU 声明变量
  • 嵌套结构体:结构体内部再定义结构体(birthday),访问时用 tt.birthday.year 层级引用
  • 结构体变量的初始化:按成员定义顺序依次赋值
  • 结构体作为函数参数:值传递方式,函数内获得结构体的副本
  • 格式化输出%-8s 左对齐、%5.1f 限定宽度和小数位

二、改错题:求倍数之积#

题目说明#

功能:编写函数 fun 求 20 以内所有 5 的倍数之积。

错误分析与修正#

该程序有三处 FOUND 标记:

错误 1:累乘初值错误

  • 原错误写法:int s = 0, i;
  • 修正写法:int s = 1, i;
  • 错误原因:求”积”时累乘变量应初始化为 1(乘法单位元),若初始化为 0,则任何数乘 0 都为 0,结果永远是 0。

错误 2:判断倍数的条件错误

  • 原错误写法:if (i % m != 0)if (i / m == 0)
  • 修正写法:if (i % m == 0)
  • 错误原因:判断 i 是否为 m 的倍数,应检查 i 能否被 m 整除,即余数为 0。写成 != 0 会取到所有非倍数,逻辑完全相反。

错误 3:运算方式错误(求和而非求积)

  • 原错误写法:s += i;
  • 修正写法:s *= i;
  • 错误原因:题目要求求”积”而非”和”,必须用乘法累乘 s *= i

完整代码#

#include <stdio.h>
#define N 20
int fun(int m)
{
/* 修正1:累乘初值应为1,不能用0 */
int s = 1, i;
for (i = 1; i < N; i++)
/* 修正2:判断i是否为m的倍数,用i%m==0 */
if (i % m == 0)
/* 修正3:求积用乘法s*=i,不能用加法 */
s *= i;
return s;
}
main()
{
int sum;
sum = fun(5);
printf("%d以内所有%d的倍数之积为: %d\n", N, 5, sum);
}

关键考点#

  • 累乘与累加的区别:累乘初值为 1,累加初值为 0
  • 倍数判断i % m == 0 是判断整除的标准写法
  • 运算符选择:求积用 *=,求和用 +=
  • 宏定义常量#define N 20 便于统一修改范围

三、程序设计题:条件求和#

题目说明#

编程求 100 以内所有能同时被 5 和 7 整除的自然数之和。

解题思路#

  1. 初始化累加变量 s = 0
  2. 遍历 0 到 100 的所有自然数
  3. 对每个数 i,判断是否同时满足 i % 5 == 0i % 7 == 0
  4. 满足条件则累加到 s
  5. 输出 s

说明:能同时被 5 和 7 整除的数,就是 5 和 7 的最小公倍数 35 的倍数。100 以内这样的数有 0、35、70,和为 105。

完整代码#

#include "stdio.h"
main()
{
int i, s = 0;
/**********Program**********/
/* 遍历0到100的所有自然数 */
for (i = 0; i <= 100; i++)
{
/* 同时被5和7整除的条件 */
if (i % 5 == 0 && i % 7 == 0)
{
s += i;
}
}
/********** End **********/
printf("%d", s);
}

关键考点#

  • 逻辑与运算符 &&:两个条件必须同时成立
  • 整除判断i % 5 == 0 表示 i 能被 5 整除
  • 累加求和模式s += i 将满足条件的数累加
  • 循环范围i <= 100 包含 100,注意边界是否取等
  • 最小公倍数思想:同时被 5 和 7 整除等价于被 35(最小公倍数)整除
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

考试套题-第九套
https://blog.radarweb.top/posts/c/考试套题-第九套/
作者
Sherry
发布于
2026-06-15
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录