C语言程序设计第三次作业——选择结构(1)
(一)改错题
将源程序进行编译,发现有错误信息:
错误信息1
错误原因:scanf语句中没有用“&”
改正方法:在x前加上“&”
错误信息2
错误原因:第七行if语句后面多加了;
改正方法:去掉;
错误信息3
错误原因:第九行语句后面没有;
改正方法:在句尾加上;
错误信息4
错误原因:第11行else语句后面不应该加条件
改正方法:去掉else语句后的条件
错误信息5
错误原因:第15行printf语句里的引号后面和x y之间均未加“,”
改正方法:在引号和x y间均加上,
编译成功但运行结果有误
错误信息6
错误原因:输入格式不对,因为scanf语句中加了换行语句“\n”
改正方法:去掉“\n”
错误信息7
错误原因:第15行语句中的%.2f和%.lf表达有误
改正方法:将%.2f和%.lf均改为%.1f
错误信息8
错误原因:第7 行if语句中一个=是赋值两个=才表示等于
改正方法:将=改成==,同时将scanf语句中的=%f改成%lf
编译及运行结果
改正后的程序
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1;的确切含义是先判断是否符合a和b条件,若果符合则执行x=x+1语句 ,若果不符则执行y=y+1语句。该语句的else应与第二个if配对。若要明确表达这种语句要在语句后面加“{ }”,而且else只与离它最近的未配对的一个if配对。代码段为
2.c语言表达:表达式(-10< x <10)不能表达x在区间(-10,10)内,因为c语言中逻辑运算符的运算都是从左往右的,且运算结果为真得1 为假得0,所以任意输入一个数,先和左边的-10比较结果不是1就是0,然后都比10小,所以无论输入谁都可以。所以此表达不成立。正确的表达式为
3.不能表达
运行程序一,输入123a得到如下结果
因为输入的a并没有被定义,所以系统认为是非法字符,输入停止,非法字符后面的被自动舍弃。修改程序,定义一个字符型变量,程序如图
再次运行,结果为
4.关于scanf:
运行程序二,分别输入123 45和123a,结果如下
原因如下:
因为scanf()函数的返回值是成功读入数据的个数,此程序中,定义a,b均为整型变量,所以输入123,45,均为整型数据,均合法,所以返回值为2,而输入123,a,a为非法字符,所以只有123被赋值了,所以返回值为1,也是正确的。
修改程序(1)
运行结果如下
4.内容总结
通过这一块的学习,我想强调一些细节性的问题。例如,要正确区分“==”和“=”的含义并能正确运用,还有就是老师一再强调的细节问题,千万要注意那些标点!标点!标点!(重要的事情说三遍)再有就是不要想当然的把数学性思维运用到这里面。平时写编程什么的要注意总结错误,养成良好习惯。
(三)实验总结
(1)题目:计算分段函数[2]
(2)流程图:
(3)源代码
(4)测试数据及运行结果
(5)实验分析
问题:
原因:编写中用到了函数符但是开始时没有标注
解决方法:在开始标注上#include<math.h>
(1)题目:算术入门之加减乘除
(2)流程图:
(3)源代码
(4)测试数据及运行结果
(5)实验分析
问题:输入8/6的输出结果不对
原因:虽然一开始标注了个g为double类型但是执行时没有标注,应该强制转换一下
解决方法:在a/b处强制转换一下
(1)题目:输出三角形面积和周长
(2)流程图:
(3)源代码
(4)测试数据及运行结果
(5)实验分析
问题:这道题没多大问题,要真说问题可能就是数学公式没学好吧。
解决方法:问了同学一下普通三角形的面积公式
4
(1)题目:出租车计价
(2)流程图:
(3)源代码
(4)测试数据及运行结果
(5)实验分析
问题:计算结果总是不对
原因:这道题看似逻辑很复杂,但理清之后其实还可以,但是在表述方面出现了点问题,没有注意阶级运算法则
解决方法:询问同学后,一起发现问题并改正了
(四)PTA提交列表