高级语言程序设计课程第二次个人作业
高级语言程序设计课程第二次个人作业
- 这个作业属于哪个课程: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的浮点数精度相关问题,巩固了定点数、浮点数储存相关部分的知识
- 学习了不同字长的系统或编译器中,相同的数据类型的所占的存储空间不一样长这个知识点,收获颇丰