高级语言程序设计第三次个人作业
这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C
这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13284
学号:102400104
姓名:林青妍
4.8 2
题目:
编写一个程序,提示用户输入名字,并执行以下操作:
a.打印名字,包括双引号;
b.在宽度为20的字段右端打印名字,包括双引号;
c.在宽度为20的字段左端打印名字,包括双引号;
d.再比姓名宽度宽3的字段中打印名字。
问题:
这道题和上次作业的一道题类似,我觉得考察点在于输出引号,我刚开始写这道题目是又忘记了该如何修饰双引号,还输错了修饰的形式
解决:
我又去查看了上次那道题的写法,并且复习了如何去修饰双引号,应该在双引号前加上,我要再次加深的一下印象,在引号前面加\!在引号前面加\!在引号前面加!
4.8 3
题目:
3. 编写一个程序,读取一个浮点数,首先以小数点记数法打印,然后以指数记数法打印。用下面的格式进行输出(系统不同,指数记数法显示的位数可能不同):
a. The input is 21.3 or 2.1e+001.
b. The input is +21.290 or 2.129E+001•
问题:
这道题中我使用的double,但我总是很容易忘记在scanf中double应该用%lf去表示,我经常会忘记成%f
解决:
我重新去复习了一遍课本p80 scanf()的使用
4.8 4
题目:
编写一个程序,提示用户输入身高(单位:英寸)和姓名,然后以下面的格式显示用户刚输入的信
Dabney, you are 6.208 feet tall
使用float类型,并用/作为除号。如果你愿意,可以要求用户以厘米为单位输入身高,并以米为单位显示出来。
问题:
在这道题中我一开始很不理解为什么/可以用作除法,因为我在学习中忽略的很重要的前提,/取整适用于数据是整型时,而当数据是浮点数是/就代表除法的应用
解决:
一开始我实在没办法理解,就去询问了同学和上网搜索了一些资料,才知道原来数据类型不一样,/代表的也不一样
4.8 6
题目:
编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应名和姓的结尾对齐,如下所示:
Melissa Honeybee
7 8
接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,如下所示:
Melissa Honeybee
7 8
问题:
这道题我卡了特别久,因为我一直不理解怎么可以让这两行对齐,我就感觉特别奇怪,怎么可以指定一个宽度呢,我就很疑惑,感觉我没办法用一个未知数或者待输入的数的宽度去限制字母数输出的宽度
解决:
解决不了问题,感觉自己有缺漏的知识点,我就又去把课本第四单元的例题又看了一遍,在p82看到了我要寻找的知识点,是printf()的修饰符,可以用作变宽输出字段%d,这个*就可以代表我想限制的指定宽度,还有strlen这个函数的复习
4.8 7
题目:
编写一个程序,将一个 double类型的变量设置为1.0/3.0,一个 float 类型的变量设置为1.0/3.0。
分别显示两次计算的结果各3次:一次显示小数点后面6位数字;一次显示小数点后面12位数字;
一次显示小数点后面16位数字。程序中要包含 f1oat.h 头文件,并显示 ELT_DIG和 DBL_DIG的值。
1.0/3.0的值与这些值一致吗?
问题:这道题使用两种不同精度的浮点数类型输出结果,可以看出不同的精度输出的结果会有差别,不会完全一样,在这道题中我其实遇到了很陌生的符号,FLT_DIG和DBL_DIG
解决:
我又去翻书复习了,在p67了解到这是明示常量,DBL_DIG表示double的有效位数能完全保证的是15位,FLT_DIG能代表是float能保证位数是6位
4.8 8
题目:
编写一个程序,提示用户输入旅行的里程和消耗的汔油量。然后计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下来,使用1加仑大约3.785升,1英里大约为1.609千米,把单位是英里/加仑的值转换为升/100公里(欧洲通用的燃料消耗表示法),并显示结果,显示小数点后面1位数字。注意,美国采用的方案测量清耗单位燃料的行程〈值越大越好),而欧洲则采用单位距离消耗的燃料测量方案(值越低越好)。使用#derine 创建符号常量或使用 const 限定符创建变量来表示两个转换系数。
问题:
这道题我觉得程序不是特别难写,关键在于要认真读题,把四个数之间的关系整理清楚
解决:
我认为最后一步用1/c取倒数是一种可行的做法
5.11 1
题目:
编写一个程序,把用分钟表示的时间转換成用小时和分钟表示的时间。使用#define 或 const 创建一个表示60 的符号常量或 const 变量。通过 while 循环让用户重复输入值,直到用户输入小于或等于,0的值才停止循环。
问题:
这是我第一个独立思考完成的while循环程序,一开始我陷入死循环,只能输出0
解决:
后来我仔细一看,发现自己忘记在while循环最后一步中重新输入scanf()去输入一个新的min让循环继续,我修改之后,程序就可以正常运行了
5.11 2
题目:
编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如,用户输入5,则打印5~15的所有整数,包括5和15)。要求打印的各值之间用一个空格、制表符或换行符分开。
问题:
这道题我的思路很顺畅,没什么问题
5.11 3
题目:
编写一个程序,提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面的格式显示结果:
18 days are 2 weeks, 4 days.
通过 while循环让用户重复输入天数,当用户输入一个非正值时(如◎或-20),循环结束。
问题:
有过5.11 1那道题的经验,我这道题的思考也很顺畅,我感觉整体思路上和第一题的区别不大
5.11 4
题目:
编写一个程序,提示用户输入一个身商(单位:厘米),并分别以厘米和英尺、英寸为单位显示该值,允许有小数部分。程序应该能让用户重复输入身高,直到用户输入一个非正值。其输出示例如下:
Enter a height in centimeters: 182
182.0
feet, 11.7 inches
Enter
a height in
centimeters
(<=0
168.7
to quit):168.7
5 feet, 6.4 inches
in centimeters (<=0 to
quit) : 0
问题:
一开始我做这道题时编译一直出现int和double不可以转换的错误提醒,我就有点搞不清到底该如何去转换数据类型了
解决:
课本中有一个强制类型转换运算符,但其实我并不是特别了解,感觉阅读之后也没有明白该在什么时候去使用,所以呢我又多尝试了几次,直接用int m=a/30.48去解决那个问题,程序可以正常运行
5.11 5
题目:
修改程序 addemup.c(程序清单 5.13),你可以认为 addemup.c是计算20天里赚多少钱的程序(假设第1天赚$I、第2天赚$2、第3天赚$3,以此类推)。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)。
问题:
这道题很好修改,只需要多使用一个变量和scanf()输入就可以解决了
5.11 6
题目:
修改编程练习5的程序,使其能计算整数的平方和(可以认为第1天赚$1、第2天赚$4、第3天赚$9,以此类推,这看起来很不错)。C没有平方函数,但是可以用nn 来表示n的平方。
问题:
这道题也很好修改,只需要在while循环中使count变成countcount就可以了
5.11 7
题目:
编写一个程序,提示用户输入一个 double 类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
问题:
这是我遇到的第一个需要自己编写函数的程序,所以一开始我对知识点还是有点不清晰的
解决:
所以我翻书复习了两个知识点,一个是不带参数的函数,一个是带参数的自定义的函数,很显然这道题是需要参数的自定义函数,于是我就仿造例题5.15解决了这个问题,自定义函数确实非常方便
5.11 8
题目:
编写一个程序,提示用户输入一个 double 类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
编写一个程序,显示求模运算的结果。把用户输入的第1个整数作求模运算符的第2个运算对象,该数在运算过程中保持不变。用户后面输入的数是第A个运算对象。当用户输入一个非正值时,程序结束。其输出示例如下:
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 is135
Enter next number for first operand (<= 0 to quit): 0
Done
问题:
这道题我一开始无法在printf中直接输出%,一直尝试输出都是乱码
解决:
我去寻求了同学的帮助,才明白应该双写%变成%%就可以解决这个问题
5.11 9
题目:
编写一个程序,要求用户输入一个华氏温度。程序应读取 double 类型的值作为温度值,并把该值作为参数传递给一个用户自定义的函数 Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示3种温度。要使用不同的温标来表示这3个温度值。下面是华氏温度转摄氏温度的公式:
摄氏温度 =5.019.0*(华氏温度-32.0)
开氏温标常用于科学研究,0表示绝对零,代表最低的温度。下面是摄氏温度转开氏温度的公式:
开氏温度=摄氏温度+273.16
Temperatures()函数中用 const 创建温度转换中使用的变量。在 main()函数中使用一个循环让用户重复输入温度,当用户输入q或其他非数字时,循环结束。scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果读取q则不返回1。可以使用一运算符将 scanf()的返回值和1作比较,测试两值是否相等。
问题:
这道题我一直不懂题目的最后两行的意思,我不明白什么是scanf()的返回值,我在第五章没有找到对应的知识点
解决:
那我在六章找到了对应的知识点,==了解到这是判断输出的值逻辑值是否为1,让循环继续,了解之后,我就能很顺畅的编写完这个程序了
——————————————————————————————————————————————————————————————————————
反思:
1.我发现自己有很多c语言的知识点小细节总是忽略,需要加强理论知识的了解;
2.关于while的使用我还需要多多练习,不能忘记在循环中加入一个能让循环继续或者停止的限制,不能让循环变成死循环;
3,在这次作业中我多次遇到两种类型数据不能转换的错误警告,我想我需要去把强制类型转换运算符的知识点多了解一下。