C语言程序设计第四次作业——选择结构(2)

(一)改错题
输出三角形的面积和周长,输入三角形的三条边a、b、c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“These sides do not correspond to a valid triangle”。
输入输出样例1:
  Enter 3 sides of the triangle: 5 5 3
  area = 7.15; perimeter = 13.00
输入输出样例2:
  Enter 3 sides of the triangle: 1 4 1
  These sides do not correspond to a valid triangle
源程序(有错误的程序)

include <stdio.h>

include <math.h>

int main(void)
{
double a,b,c;
double area,perimeter,s;

printf("Enter 3 sides of the triangle: ");
scanf( "%lf%lf%lf",&a,&b,&c );

if( a + b > c || b + c > a || a + c > b)
s = ( a + b + c ) / 2;
area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c );
perimeter = a + b + c;
printf("area = %.2f; perimeter = %.2f\n",area,perimeter);

else
printf("These sides do not correspond to a valid triangle\n");

return 0;
}

对源程序进行编译,采用每次修改第一个错误并重新编译的方法,记录每个错误的错误信息、分析错误原因并给出正确的语句。
错误信息1:

错误原因:第13行的赋值语句中,分号前少加一个后括号。
改正方法:把第13行的赋值语句的分号前加一个后括号。
正确语句:area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ));
错误信息2:

错误原因:if-else语句中的执行语句没有加大括号。
改正方法:把if-else语句中的执行语句加上大括号。
正确语句:
{
s = ( a + b + c ) / 2;
area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ));
perimeter = a + b + c;
printf("area = %.2f; perimeter = %.2f\n",area,perimeter);
}
试运行源程序:
输入样例1,得到:

与预期结果相同。
输入样式2,得到:

与预期结果不同。
错误信息3:

错误原因:第11行的选择语句中,错把 && 写成了 || 。
改正方法:把第11行的选择语句的 && 改为 || 。
正确语句:if( a + b > c && b + c > a && a + c > b)
试运行源程序:
输入样例1,得到:

输入样式2,得到:

(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
(1)
三者本质的区别是 if-else语句更适合于对区间(范围)的判断,而switch语句更适合于对离散值的判断
(2)
判断65分到85分之间的学生有哪些适合用if-else或多个if语句,因为[65,85]是区间
而判断一个学生的班级是一班、二班还是三班适合用switch语句,因为一班、二班、三班是离散值
(3)
所有的switch语句都可以用if-else或多个if语句来替换(因为if-else语句只需对每个离散值分别做判断即可),而并不是所有的if-else或多个if语句都可以用switch语句来替换(因为区间里值的个数是无限的并且switch所接受的值只能是整型或枚举型,所以不能用case来一一列举)。
参考链接:https://zhidao.baidu.com/question/557831030.html
2.总结
(1)应熟练掌握并熟练运用switch语句,应注意 case 后要打空格。
(2)应熟练掌握并熟练运用字符型数据,其包括 putchar函数(字符输出函数)和 getcher函数(字符输入函数)等。
(三)实验总结
1.比较大小
(1)题目
本题要求将输入的任意3个整数从小到大输出。
(2)流程图

(3)源代码

(4)实验分析
问题:if..和if..else的区别错误。
原因:if...的几个语句都是并列的,所以这个题不能使用if...else 。
解决办法:三个都是用if语句。
2.高速公路超速处罚
(1)题目
按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
(2)流程图

(3)源代码

(4)实验分析
问题1:百分号的输入方式。
原因:输入了一个百分号,所以会出现结果不显示百分号。
解决办法:应该同时输入两个百分号的。
问题2:在if条件判断的时候出现错误。
原因:判断百分比的条件时,直接在if后直接计算带判断。
解决办法:应在使用if条件语句时,先进行百分比的计算,然后在判断。不容易出现逻辑上计算错误。
3.计算油费
(1)题目
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
(2)流程图

(3)源代码

(4)实验分析
问题:在判断char类型的写法上出现问题。
原因:char类型判断时要加上单引号,不能直接写字符类型。
解决办法:在if条件判断时用英文单引号括起来字符类型。
4.12-24小时制
(1)题目
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
(2)流程图

(3)源代码

(4)实验分析
问题1:一天只有24小时,在输入的时候,下面要进行判断的。
原因:在判断时判断的不够全面。
解决办法:再加一个判断等于24小时的条件。
问题2:输入多于60的问题。
原因:60分钟为一小时,多于六十,要前进一小时的。
解决办法:再加一个判断条件,判断是否分钟的输入大于60。


(四)博客互评
http://www.cnblogs.com/hbnydx/p/7779380.html
http://www.cnblogs.com/tengwenqing/p/7762729.html
http://www.cnblogs.com/windsky-1999/p/7765579.html

posted on 2017-11-05 16:49  菠萝的海  阅读(1351)  评论(0)    收藏  举报