高级语言程序设计课程第三次个人作业
这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C
这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13284
学号:102400124
姓名:邱语堂
编写并运行书本第4章4.8编程练习题目中的第2题-第4题,第6题-第8题。
4.8.2
遇到的问题有如何输出双引号,以及如何输出字符串宽度加3的宽度,通过上网查询了解到""可以输出双引号,printf("% * s",n,name)可以输出占用n个字节的字符串,将n=strlen(name)+3即可。
4.8.3
4.8.4
4.8.6
分别采用printf(%s,a,a)和printf(%-s,a,a)的方式,输出占用a位字节且右对齐和左对齐的a
4.8.7
FLT_DIG返回float类型变量的精度位数,DBL_DIG返回double类型变量的精度位数
4.8.8
编写并运行书本第5章5.11编程练习题目中的第1题~第9题。
5.11.1
在循环外先让用户输入一次数据,再进行循环,可以保证当用户输入小于或等于0的值后立刻结束循环,不会将0代入循环体内,输出多余的内容后再结束循环。
5.11.2
设置一个变量limit来控制循环次数,当数字达到limit后停止循环。
5.11.3
5.11.4
将feet直接改为int类型变量,height和inches使用double类型变量可以避免数据计算时的错误
并且%无法对浮点数取余,所以采用inches=(height-feet * 30.48)/2.54的写法计算剩余的厘米数换算成英尺的数值。
5.11.5形同5.11.2,只是改变循环判断条件和输出内容
5.11.6形同5.11.5更改循环体内公式
5.11.7使用void函数并且不需要返回值,scanf函数写在函数内进行赋值,如果写在主函数内则自定义函数无法读取变量赋的值。
5.11.8查询后了解使用%%可以直接输出%
5.11.9花费时间最长的一题,编程过程中出现了很多问题
1、scanf函数读取问题
开始的思路是设置一个变量n=scanf("%lf",&huashi)判断条件写成while( n == 1 )的形式,发现会导致死循环。
改为while(scanf("%lf",&huashi)==1)既可以实现重复读取数据,又能作为判断条件。
2、Temperatures函数返回值问题
最开始采用return huashi,sheshi的写法让函数返回计算后的变量再输出,发现程序报错,后采用两个函数Temperatures1和Temperatures2两个函数分别去计算摄氏度和开氏度后再返回,但依旧无法正确输出摄氏度和开氏度。
最后放弃return 变量的写法,直接把三句printf语句放入Temperatures函数中进行输出,发现可以运行,但运行结果正确性有问题。
3、Temperatures函数中的变量读取问题
一开始三条printf语句写在while的循环体内而不是Temperatures函数内,遇到的问题是在scanf对huashi变量进行赋值以后,无论输入什么值,输出结果里只有华氏度是正确的,摄氏度和开尔文都是一个固定值-17.78和255.38,通过计算发现此时huashi=0。
说明Temperatures函数没有正确读取huashi,而直接默认huashi=0代入计算。
将Temperatures()改为Temperatures(huashi)后可以正确读取数据。
如果要写成Temperatures()的形式,那scanf函数也必须写在自定义的函数内为变量进行赋值,写在主函数内会导致函数无法正确使用变量。
4、在正确运行后发现将Temperatures拆分成量个函数分别计算摄氏度和开氏温度也是可行的,但是重复代码过多,没有必要,最后还可以将变量优化至一个,代码较为简洁。
总结:
1、输出双引号:"+输出的内容+" 输出百分号:%%
2、printf("% * s",m,name)表示以字符串形式输出name,并且占用m个字节。
这个写法和printf("%ms",name)的区别在于:当name长度大于m时,前者会只打印m个字节,而后者会忽略宽度限制,全部打印。
3、void函数没有返回值;scanf函数的返回值是读取数据的数量;printf函数的返回值是打印的字符数。
4、如果在自定义函数中写成function()的形式,那scanf函数也必须写在自定义的函数内为变量进行赋值,写在自定义函数外会导致函数无法正确使用变量。或者改为function(变量名)让自定义函数读取变量。