C语言程序设计第三次作业

一:改错题:
1、计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
(错误1)
源程序:

错误信息:

错误原因:"y = 1 / x"后没有加";"
改正方法:在"y = 1 / x"后加上“;”

(错误2)
错误信息:

错误原因:if后面多加了“;”,导致else语句没有与之配对的if
改正方法:去掉if后面的“;”
(错误3)
错误信息:

错误原因:else后面不能跟条件,除了"x=10"之外就是"x!=10",直接用else 即可。
改正方法;删去else后面的条件。
(错误4)
错误信息:

错误原因:引号外没有加","未把格式输出串与输出表列分开
改正方法:加上“,”
(错误5)
错误信息:

错误原因:在第七行的if语句中,所给比较条件“x == 10”被写成“x = 10”,缺少一个“=”导致条件运算符变为赋值运算符
改正方法:加上“=”
(错误6)
错误信息:

错误原因:通过检查发现,y 为 double类型,应该以 1.0的形式计算。
改正方法:将“y=1/x”改为“y=1.0/x”
(错误7)
错误信息:

错误原因:引号里多了一个等号,并且后面缺少取地址符“&”
改正方法:去掉引号,加上取地址符。
(错误8)
错误信息:

错误原因及改正方法:与输入格式不符,去掉\n
(错误9)
错误信息:

错误原因:反复检查发现,第十五行等号后面的是%.lf,而不是%.1f
改正方法:把%.lf改成%.f
正确程序:

二、学习总结

1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
所给的代码段"if(a)if(b) x=x+1;else y=y+1"应表示在满足a和b的条件下x=x+1,否则执行"else"后的语句,为"且"的条件。根据if else语句的配对原则,else应与第二个if配对,所以为了运算时不出现错误应该在每个if或else下加上{ }。

改正后如图:

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
不能,因为对于所给格式,系统进行运算按照从左到右的顺序进行,同时在系统内部进行判断而不是表示区间,所以输出值只能是0或1,根据先后顺序,先判断-10
正确表达:

3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
程序(1)

结果:

原因:程序定义的为整形变量,123是正确形式而a则属于非法字符,遇到非法字符,则认为输入结束。

scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?

程序(2)

输入程序123 45输出结果为

输入123a结果为

原因分析:
因为scanf()函数的返回值是程序成功读入数据的个数,在第一次输入123 45时分别给a,b都赋值了,所以读入数据的个数为2,那么n的值也就是2.而在第二次输入123a时,因为a,b都为int类型而a是字符型,所以系统默认为非法类型,直接停止。也就是说只有a被赋上了123 b却没有值所以只是成功读入数据为1,那么n的值也就是1了,所以才出现了以上结果。

修改程序(1),当输入非法数据时,输出“Input error!".样例如下

修改后的程序:

4.对其他你认为需要进行总结的内容进行总结。
注意细节对C语言来说是非常重要的一点,有时一个符号就让你的程序无法运行,在这里比较常见的就是scanf里取地址符&,很多人容易把它忽略。还有就是if else语句的熟练应用。

(三)(实验总结)

1、计算分段函数

流程图:

源代码:

测试数据及运行结果:

实验分析

注意输入与输出均可为小数,所以应设成double类型。

2、算术入门之加减乘除
对于输入的两个整数,按照要求输出其和差积商。

流程图:

源代码:

测试数据及运行结果

实验分析

求商时注意小数的输出,正确运用if else语句。

3、输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
​s(s−a)(s−b)(s−c)

​​ ,其中s=(a+b+c)/2。

流程图:

源代码:

测试数据及运行结果

实验分析

本题使用了sqrt函数,所以头文件应加上<math.h>

4、出租车计价

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元

流程图:

源代码:

测试数据及运行结果

输入输出有小数,注意格式。

(四)(PTA提交列表)

posted @ 2017-10-27 22:27  不知^o^  阅读(663)  评论(0编辑  收藏  举报