高级语言程序设计课程第三次个人作业
-
这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C
-
这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13284
-
学号:102400108
-
姓名:王馨怡
-
- [编写并运行书本第4章4.8编程练习题目中的第2题到第4题,第6题到第8题]
-
- [编写并运行书本第5章5.11编程练习题目中的第1题到第9题]
一、编写并运行书本第4章4.8编程练习题目中的第2题到第4题,第6题到第8题
4.8.2
题目:编写一个程序,提示用户输入名字,并执行以下操作:
a.打印名字,包括双引号:
b.在宽度为20的字段右端打印名字,包括双引号;
c.在宽度为20的字段左端打印名字,包括双引号;
d.在比姓名宽度宽3的字段中打印名字 (没说要打双引号)
问题与解决:
1、没有记住用什么函数可以计算字符串长度。-->在书本43页4.2.3中找到了学过的strlen()函数
2、输出不了字符串长度。-->经编译,得:忘记加上头文件<string.h>了,加上后问题解决
3、在问题d中,我不知道该如何输出指定宽度3+strlen(name)-->在书本82页4.4.6找到学过的的用法:如果转换说明是%d,那么参数列表中应包含*和d的对应的值。此方法同样适用于字段宽度。
4.8.3
题目:编写一个程序,读取一个浮点数,首先以小数点计数法打印,然后以指数计数法打印。用下面的格式进行输出:
a. The input is 21.3 or 2.1e+001.
b. The input is +21.290 or 2.129E+001
问题:无
解决:无
4.8.4
题目:编写一个程序,提示用户输入身高(单位:英寸)和姓名,然后以下面的格式显示用户刚才输入的信息:
Dabney, you are 6.208000 feet tall
使用 float 类型,并用/作为除号。如果你愿意,可以要求用户以厘米为单位输入身高,并以米为单位显示出来。
问题:输出结果是0.000000
解决:检查代码发现:占位符打成%d了,把他改成%f后,问题解决。
英尺的代码:
cm的代码:
4.8.6
题目:编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应名和姓的结尾对齐,如下所示:
Melissa Honeybee
7 8
接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,如下所示:
Melissa Honeybee
7 8
问题:本来是用空格打出右对齐的,然后发现名字一变就不对了
解决:与4.8.2相同,在书本82页4.4.6中提及*的用法,使用后问题解决。
4.8.7
题目:编写一个程序,将一个double类型的变量设置位1.0/3.0,一个float类型的变量设置为1.0/3.0。分别显示两次计算的结果各三次:一次显示小数点后面6位数字。一次显示小数点后面12位数字,一次显示小数点后面16位数字。程序中要搬float.h文件夹,并显示FIT-DIG和DBL-DIG的值。1.0/3.0的值与这些值一致嘛?
问题:无
解决:无
4.8.8
题目:编写一个程序,提示用户输入旅行的里程和消耗的汽油量。然后计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下来,使用一加仑大约3.785升,一英里约为1.609千米,把单位是英里/加仑的值转换为 升/100公里,并显示结果,显示小数点后面1位数字。注意,美国采用的方案测量消耗单位燃料的行程,而欧洲则采用单位距离消耗的燃料测量方案。使用#deifne创建符号常量或使用const限定符。
问题:无
解决:无
**二、编写并运行书本第5章5.11编程练习题目中的第1题到第9题**
5.11.1
题目:编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const变量。通过while循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。
问题:无
解决:无
5.11.2
题目:编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如:用户输入5,则打印5-15的所有整数,包括5和15).要求打印的各值之间用一个空格,制表符或换行符分开。
问题:出现死循环。本来写的是for(i;i<=i+1;i++).
解决:经编译,得:i的值一直在变,i永远小于i+10.所以我定义了一个新变量y=i;循环条件改为i<=y+1。问题解决。
5.11.3
题目:编写一个程序,提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面的格式显示结果:18 days are 2 weeks,4 day,通过while循环让用户重复输入天数,当用户输入一个非正值时(如0或-20),循环结束。
问题:无
解决:无
5.11.4
题目:编写一个程序,提示用户输入一个身高(单位:厘米),并分别以英尺和英寸为单位显示该值,允许有小数部分。程序应该能让用户重复输入身高,直到用户输入一个非正值。其输出示例如下:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters (<=0 to quit): 168.7
168.7 cm = 5 feet, 6.4 inches
Enter a height in centimeters (<=0 to quit): 0
bye
问题:输出的英尺有小数。
解决:思考,得:用int强制类型转化,可把小数截断,然后再用剩余的数算出英寸即可。
5.11.5
题目:修改程序addemup.c(程序清单5.13),你可以认为addemup.c是计算20天里赚多少钱的程序(假设第一天赚$1、第二天赚$2、第三天赚$3,以此类推)修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)
问题:无
解决:无
5.11.6
题目:修改编程练习5的程序,使其能计算整数的平方和(可以认为第一天赚$1、第二天赚$4、第三天赚$9,以此类推,这看起来还不错)。c没有平方函数,但是可以用n*n来表示n的平方。编写一个程序。提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
问题:无
解决:无
5.11.7
题目:。编写一个程序。提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
问题:一开始,我设计的函数返回值类型是int,导致最后结果为0.000000
解决:把int改为double,使其类型一一对应。问题解决
5.11.8
题目:编写一个程序,显示求模运算的结果。(求模即求余运算)把用户输入的第1个整数作为求模运算符的第2个运算对象,该数在运算过程中保持不变。用户后面输入的数是第1个运算对象。当用户输入一个非正值时,程序结束。其输出示例如下:
This program computes moduli.
Enter an integer to serve as the second operand: 256
Now enter the first operand: 438
438 % 256 is 182
Enter next number for first operand (<= 0 to quit): 1234567
1234567 % 256 is 135
Enter next number for first operand (<= 0 to quit): 0
Done
问题:不知道 % 该如何输出。
解决:在书本70页 4.4.1 中提到%用“%%”输出。问题解决。
5.11.9
题目:编写一个程序,要求用户输入一个华氏温度。程序应读取double 类型的值作为温度值,并把该值作为参数传递给一个用户自定义的函数Temperatures() 。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示3种温度。要使用不同的温标来表示这3个温度值。下面是华氏温度转摄氏温度的公式:
摄氏温度 = 5.0 / 9.0 * (华氏温度 - 32.0)
开氏温标常用于科学研究,0 表示绝对零,代表最低的温度。下面是摄氏温度转开氏温度的公式:
开氏温度 = 摄氏温度 + 273.16
Temperatures() 函数中用const 创建温度转换中使用的变量。在main() 函数中使用一个循环让用户重复输入温度,当用户输入q 或其他非数字时,循环结束。scanf() 函数返回读取数据的数量,所以如果读取数字则返回1 ,如果读取q 则不返回1 。可以使用==运算符将scanf() 的返回值和1 作比较,测试两值是否相等。
问题:有了5.11.7的教训,我把函数值的类型都一一对应了,输出无问题。
解决:有了5.11.7的教训,我把函数值的类型都一一对应了,输出无问题。
- 思考总结:
1、我发现我很多课本上学过的东西不会用或者忘记,我觉得我应该加强对课本的记忆,并且更多地去刷题,巩固记忆。(遗忘是一个大问题!)
2、在for或while循环中,定义的变量值会改变,可能造成一个死循环所以一定要记得引入另一个变量,或者定义一个常量。
3、强制类型转化用的很不灵活,需加强。
4、printf和scanf中*的用法也不熟练,需巩固书本知识,牢记例题