来自网络,联系侵删
904 字
2 分钟
考试套题-第九套
C 语言考试套题 - 第九套
本套题包含填空题、改错题、程序设计题三个部分,涵盖结构体输出、倍数求积、条件求和等核心考点。
一、填空题:输出结构体学生信息
题目说明
程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数 fun 的功能是输出这位学生的信息。
解题思路
- 定义结构体类型
STU,包含:num:学号(int)name:姓名(字符数组)sex:性别(char)birthday:嵌套的日期结构体(含 year、month、day)score[3]:三门课成绩(float 数组)
- 函数
show接收一个STU参数,按格式输出各字段 - 主函数定义并初始化结构体变量
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 整除的自然数之和。
解题思路
- 初始化累加变量
s = 0 - 遍历 0 到 100 的所有自然数
- 对每个数
i,判断是否同时满足i % 5 == 0且i % 7 == 0 - 满足条件则累加到
s - 输出
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(最小公倍数)整除
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐












