高级语言程序设计课程第三次个人作业
高级语言程序设计课程第三次个人作业
这个作业属于哪个课程:福州大学 2026 高级语言程序设计
这个作业要求在哪里:高级语言程序设计课程第三次个人作业
学号:0102600222
姓名:陈键豪
运行环境:Embarcadero Dev-C++ 6.3,64 位 Release 模式。
一、第 4 章 4.8 编程练习
第 2 题:按不同字段宽度输出姓名
题目要求输入名字,并分别以双引号包围、20 字符右对齐、20 字符左对齐,以及比姓名宽 3 个字符的格式输出。
程序代码:

运行结果:

这里使用 %20s 实现右对齐,使用 %-20s 实现左对齐;scanf("%19s", name) 把最多 19 个字符写入长度为 20 的数组,为字符串结束符留出空间。
第 3 题:使用不同格式输出浮点数
题目要求读取一个浮点数,再分别用十进制小数形式和指数形式输出。
程序代码:

运行结果(输入 2.3):

本题用到了 %.1f、%.1e、%+.3f 和 %.3E。其中 + 表示正数也显示正号,e 和 E 控制指数部分的大小写。
第 4 题:把英寸换算为英尺
程序读取姓名和身高(英寸),再利用 1 英尺等于 12 英寸的换算关系输出英制身高。
程序代码:

运行结果(输入 126.5,姓名 mike):

除法使用浮点数后,小数部分不会像整数除法那样被直接丢弃。
第 6 题:姓名与字母数对齐
题目要求在同一行输出名和姓,并在下一行分别输出两个单词的字母数;第二组输出则把数字与姓名的开头对齐。
程序代码:

运行结果(输入 mike James):

* 让 printf 从参数中取得字段宽度,因此可以把数字与对应姓名的末端或开头对齐。
第 7 题:比较 float 与 double 的精度
程序代码:

运行结果:

当前环境下 FLT_DIG 为 6、DBL_DIG 为 15。超过有效位数后继续打印,会把浮点存储误差也显示出来。
第 8 题:油耗单位换算
程序代码:

运行结果(输入 12.5 英里、45.2 加仑):

程序先计算每加仑可行驶的英里数,再换算为每百公里消耗的燃油量。美制 MPG 数值越大越省油,而 L/100 km 数值越小越省油。
二、第 5 章 5.11 编程练习
第 1 题:把分钟换算为小时和分钟
程序使用 while 循环反复读取分钟数,直到输入值小于或等于 0。
程序代码:

运行结果:

整数除法 minutes / 60 得到完整小时数,取余 minutes % 60 得到剩余分钟数。
第 2 题:连续输出 11 个整数
程序先读取一个整数,再输出该数和紧随其后的 10 个整数。
程序代码:

运行结果:

for 循环的终止条件设置为 i < n + 11,因此 i 从 n 一直取到 n + 10。
第 3 题:把天数换算为周和天
程序代码:

运行结果(输入 18):

18 / 7 得到 2 周,18 % 7 得到剩余的 4 天。
第 4 题:厘米换算为英尺和英寸
程序代码:

运行结果:

先把厘米换算为英寸,再把总英寸数拆成完整英尺和剩余英寸;输入非正数时结束循环。
第 5 题:计算前 n 个正整数之和
程序代码:

运行结果(输入 50):

每次循环把当前的 count 加到 sum 中,再让 count 自增。输入 50 时结果为 1 + 2 + ... + 50 = 1275。
第 6 题:计算前 20 个整数的平方和
程序代码:

运行结果:

循环条件中的 count++ 会先参与比较,再完成自增;循环体内使用自增后的 count 计算平方,累加结果为 2870。
第 7 题:用自定义函数求立方
程序代码:

运行结果(输入 5.2):

cube(double n) 返回 n * n * n。5.2 的立方是 140.608,程序按 %lf 默认输出 6 位小数。
第 8 题:反复计算取模结果
程序代码:

运行结果:

题目要求第二个操作数保持不变,因此第二个数只在循环外读取一次;第一个操作数在循环内反复读取,输入非正数时退出。
第 9 题:华氏温度转换为摄氏温度和开尔文温度
程序代码:

运行结果(输入 56.5):

换算公式为 C = 5.0 / 9.0 × (F - 32.0),K = C + 273.16。循环条件使用 scanf(...) == 1,输入非数字时结束。
三、指定程序运行结果
1. 字符串长度与内存单元

输入 mike 后,strlen(name) 为 4,而 sizeof name 为 40,说明 strlen 统计有效字符数,sizeof 得到数组分配的总字节数。PRAISE 有 28 个可见字符,加上字符串结束符占用 29 个内存单元。
2. 棋盘小麦数量

每格的麦粒数从 1 开始不断翻倍,并累加到总产量。输出的指数形式便于观察 64 个方格带来的巨大增长。
3. 字符与整数、浮点数之间的转换

字符 'C' 的 ASCII 码是 67。执行 ch = ch + 1 后得到 'D',再参与整数和浮点数运算。把很大的浮点数赋给 char 会发生截断,得到的结果依赖具体实现。
4. 用函数按次数输出井号

pound(int n) 用 while (n-- > 0) 控制输出次数。分别传入整数、字符和强制转换后的浮点数,展示了实参到形参的类型转换。
四、运算符优先级演示
1. 常用运算符优先级表
程序代码:

运行结果:

表格按从高到低排列运算符,并注明同级运算的结合方向。相邻优先级之间用空行分隔,便于阅读。
2. 用表达式验证优先级和结合性
程序代码:

运行结果:

输出验证了以下规则:
- 乘除优先于加减,圆括号可以改变计算顺序。
- 后缀
a++先使用原值再自增,前缀++a先自增再参与运算。 - 关系运算低于算术运算,逻辑运算低于关系运算。
- 赋值运算从右向左执行,所以
x = y = ...先给y赋值,再把结果赋给x。
五、遇到的问题和解决方法
- 输入字符串可能越界:定义
char name[20]时,scanf("%19s", name)最多读取 19 个字符,为结束符\0留出位置。 - 字段宽度和对齐容易混淆:宽度前加负号表示左对齐,例如
%-20s;不加负号表示右对齐,例如%20s。 - 整数除法会丢失小数:厘米换算英尺、英寸以及浮点运算中,需要保证参与除法的操作数中至少有一个浮点数。
- 循环输入需要明确退出条件:有的程序输入 0 结束,有的程序需连续读取并判断输入是否成功。应根据题目要求选择
while条件。 - 浮点数的精度有限:
float和double都只能近似表示大多数小数。超过有效位数后继续输出,会显示出存储误差,因此比较浮点数时通常要使用误差范围。 - 截图命名不利于排版:Quicker 自动生成的名称只包含时间,没有题号。整理时按照“示例程序—第 4 章练习—第 5 章练习—运算符演示”的顺序重新配对,减少插入错误。
六、总结
这次作业把字符数组、格式化输入输出、循环、函数和运算符优先级串联起来。完成过程中,我体会到程序不仅需要能够运行,还要注意输入长度、类型转换、循环终止条件和输出精度。尤其是 sizeof 与 strlen 的区别、++ 前后缀的执行次序,以及浮点数精度问题,仅看语法容易混淆,通过实验观察结果更容易理解。
今后编写类似程序时,我会先明确输入和输出的数据范围,再选择合适的数据类型与循环结构;调试时也会把边界值、非法输入和特殊条件作为测试重点,使程序更加稳定。
说明:本文在排版与文字整理过程中使用了 AI 辅助,代码部分完全由本人手写。
浙公网安备 33010602011771号