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

(一)改错题

输出三角形的面积和周长,输入三角形的三条边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:

错误原因:计算area时,分号前面少了“)”
改正方法:在分号前面加上“)”

错误信息2:

错误原因:if后面没有加“{}”,导致else找不到与它配对的if
改正方法:将if和else之间的语句用“{}”括起来

错误信息3:样例2的运行结果不正确

错误原因:错用了“||”
改正方法:将“||”改成“&&”

(二)学习总结

1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
多个if语句会对每个判断条件进行判断,而if...else if... 语句则在任何一个环节满足条件的时候终止判断,只处理一个满足条件的情况,所以使用if...else if... 语句相对于使用多个if语句可以减少程序的判断次数,提高效率。
例如:选择结构2的第2题和选择结构2第4题


而使用switch语句的效率会更高于if...else if... 语句,由于switch语句会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。所以,switch只需访问对应索引号的表项从而到达定位分支的目的。
例如:选择结构2第7题

链接:https://www.baidu.com/link?url=8aJl6jrrpvlgqCF4LsAE_0GtlAR4xFWKEB1fOrf7qdTws6ArX9iNiCaJJ1yw9ffIdBHCDJpmg3hJBteFQd31na&wd
2.对其他你认为需要进行总结的内容进行总结。
(1)在if和else后面一定要加“{}”及时只有一条语句
(2)字符型变量用来存放字符常量,只能放一个字符,一个字符变量在内存中占一个字节
(3)char与int数据见可进行算术运算
(4)字符型数据和整型数据是通用的
(5)在输入输出函数中,字符型数据的格式控制使用%c表示,用来输入输出一个字符
(三)实验总结
1.比较大小
(1)题目:本题要求将输入的任意3个整数从小到大输出。
(2)流程图

(3)源代码

(4)实验分析:
问题1:没有定义未知数t
解决办法:定义一个未知数t
问题2:将数值调换时,错将顺序写成t = a;b = t;a = b;
改正方法:将顺序改成t = a;a = b;b = t;
(5)提交列表

2.高速公路超速惩罚
(1)题目:本题要求将输入的任意3个整数从小到大输出。
(2)流程图

(3)源代码

(4)实验分析:
问题1:将a,b,c定义成int类型
原因:没有认真读题
改正方法:将a,b,c定义成double类型
问题2:

原因:混淆了“&&”和“||”的意义,错将“||”理解成“且”的关系
改正方法:将“||”改成“&&”
(5)提交列表


3.计算邮费
(1)题目:现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
(2)流程图

(3)源代码

(4)实验分析:
问题1:运行结果不正确

原因:输入字符型变量时,将“%c”写成了“%d”
原因:将“%d”改成“%c”
问题2:

原因:没有在每条case语句后面加上break
改正方法:在每条case语句后面加上break
(5)提交列表

4.12-24小时制
(1))题目:编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
(2)流程图

(3)源代码

(4)实验分析:
问题1:

原因:没有考虑零点的情况
改正方法:

问题2:在改正问题1的过程中,将“||”错写成“&&”
原因:将“&&”错误理解成了“或”的关系
改正方法:将“&&”改成“||”
(5)提交列表

(四)博客互评

http://www.cnblogs.com/windsky-1999/

http://www.cnblogs.com/yjy751522356/

http://www.cnblogs.com/HBQ521/

posted on 2017-11-04 14:48  田彩  阅读(771)  评论(2编辑  收藏  举报

导航