高级语言程序设计课程第二次个人作业
高级语言程序设计课程第二次个人作业
- 这个作业属于哪个课程:2024高级语言程序设计
- 这个作业要求在哪里:高级语言程序设计课程第二次个人作业
- 学号:032201218
- 姓名:陈彦哲
一、编写并运行书本第3章3.11 编程练习题目中的第1题~第8题
3.11.1
题目:通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点数上溢和浮点数下溢的情况。
#include <stdio.h> // 引入这两个头文件以通过预先定义好的变量 // 导出整数和浮点数的最大值 #include <limits.h> #include <float.h> int main() { // 原始最值 printf("int:\nmax:%d,min:%d\n", INT_MAX, INT_MIN); printf("float:\nmax:%e,min:%e\n", FLT_MAX, FLT_MIN); printf("double:\nmax:%e,min:%e\n\n", DBL_MAX, DBL_MIN); // 上溢和下溢 printf("int:\nmax:%d,min:%d\n", INT_MAX + 1, INT_MIN - 1); printf("float:\nmax:%e,min:%e\n", FLT_MAX * 1000, FLT_MIN / 1000); printf("double:\nmax:%e,min:%e\n", DBL_MAX * 1000, DBL_MIN / 1000); return 0; }
思路:
- 对于整数,利用limit.h头文件直接获取整数的最值,并进行简单加一减一处理使之越界;
- 浮点数同理,不过使之越界的处理更改为了乘除一些10的倍数,使浮点数的尾数部分溢出(应该无法造成指数部分和符号位的损失,这不太确定),从而损失精度
问题:无
解决:无
3.11.2
题目:编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符。
#include <stdio.h> int main() { printf("Please input an ASCII number:\n"); int a; scanf("%d",&a); printf("%c",a); return 0; }
思路:按题意理解即可
问题:无
解决:无
3.11.3
题目:编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted,
"By the Great Pumpkin, what was that!"
#include <stdio.h> int main() { // 发出警报 printf("\a"); printf("Startled by the sudden sound, Sally shouted, \n\"By the Great Pumpkin, what was that!\""); return 0; }
思路:按题意理解即可
问题:忘记了警报的转义符
解决:上网查找资料最终解决
3.11.4
题目:编写一个程序,读取一个浮点数,先打印成小数点形式,再打印成指数形式。然后,如果系统支持,再打印成p记数法(即十六进制记数法)。按以下格式输出(实际显示的指数位数因系统而异):
Enter a floating-point value: 64.25\n
fixed-point notation: 64.250000\n
exponential notation: 6.425000e+01\n
p notation: 0x1.01p+6
#include <stdio.h> int main() { double a; printf("Enter a floating-point value: "); scanf("%lf",&a); printf("fixed-point notation: %.6f\n",a); printf("notation: %e\n",a); // 十六进制占位符 printf("p notation: %a\n",a); return 0; }
思路:按题意理解即可
问题:无
解决:无
3.11.5
题目:一年大约有3.156×10000000 秒。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数。
#include <stdio.h> int main() { double Secnum = 3.156e7; printf("Please input your age: "); int age; scanf("%d", &age); printf("The number of seconds corresponding to your age is: %lf\n", age * Secnum); return 0; }
思路:按题意理解即可
问题:无
解决:无
3.11.6
题目:1个水分子的质量约为3.0×10 −23 克。1夸脱水大约是950克。编写一个程序,提示用户输入水的夸脱数,并显示水分子的数量
#include <stdio.h> int main() { double h2oNum = 3.0e-23; printf("Please enter the quarter number of the water: "); int q; scanf("%d", &q); printf("The number of water molecules is:%e\n", q * 950 / h2oNum); return 0; }
思路:按题意理解即可
问题:无
解决:无
3.11.7
题目:1英寸相当于2.54厘米。编写一个程序,提示用户输入身高(/英寸),然后以厘米为单位显示身高。
#include <stdio.h> int main() { const double a = 2.54; double inch; printf("Please enter your height: "); scanf("%lf", &inch); printf("The cm of your height is:%lf\n", inch * a); return 0; }
思路:按题意理解即可
问题:无
解决:无
3.11.8
题目:在美国的体积测量系统中,1品脱等于2杯,1杯等于8盎司,1盎司等于2大汤勺,1大汤勺等于3茶勺。编写一个程序,提示用户输入杯数,并以品脱、盎司、汤勺、茶勺为单位显示等价容量。思考对于该程序,为何使用浮点类型比整数类型更合适?
#include <stdio.h> int main() { double cup, ounce, tablespoon; printf("Please enter the number of cups: "); scanf("%lf", &cup); printf("In pints:%lf\n", cup / 2); ounce = cup * 8; printf("In ounces:%lf\n", ounce); tablespoon = ounce * 2; printf("In tablespoons:%lf\n", tablespoon); printf("In teaspoons:%lf\n", tablespoon * 3); return 0; }
思路:按题意理解即可
思考:
- 因为整数在进行除法运算的过程中可能会损失精度,例如int在进行计算的时候会得到10/3=3这样的错误答案
- 浮点数的话就没有这样的问题,虽然浮点数在某些复杂情况下也会损失精度,但是这道题显然没有那么大的运算量,所以浮点数是合适的
问题:无
解决:无
二、将书本中给的程序清单3.1~3.10的示例程结果输出(无需代码,截图程序输出结果)
3.1
问题:无
解决办法:无
3.2
问题:无
解决:无
3.3
问题:无
解决:无
3.4
问题:无
解决:无
3.5
问题:无
解决:无
3.6
问题:无
解决:无
3.7
问题:无
解决:无
3.8
问题:
long的size是4byte
解决:
- 查询资料过后发现是DevC++的问题,换成VSCode之后答案就对了。
- 原理是VScode是64位的,DevC++是32位,长整型数据在不同字长的系统里的储存空间是不一样大的
3.9
问题:无
解决:无
3.10
问题:无
解决:无
三、总结思考:
- 复习了C的格式化输入输出,加强了对输入输出的理解
- 复习了\a转义符的作用,顺带复习了其它转义符的作用
- 复习了C的浮点数精度相关问题,巩固了定点数、浮点数储存相关部分的知识
- 学习了不同字长的系统或编译器中,相同的数据类型的所占的存储空间不一样长这个知识点,收获颇丰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」