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:
1242338-20171102100405216-1006534127.png
错误原因:少加了一个右括号
改正方法:在( s - c )后再加一个右括号
错误信息2:
1242338-20171102100525841-1928499553.png
错误原因:if后面的语句和else后面的语句没加大括号
改正方法:把if和else后面的语句分别用大括号括起来
错误信息3:1242338-20171102101117779-1406582236.png
输出内容错误
错误原因:if里面的判断之间应该用&&连接,||代表或者
改正方法:将||改为&&

(二)学习总结

1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
2.对其他你认为需要进行总结的内容进行总结。
答:if类型的语句的判断条件可以用来表示一个范围,而switch则是一个具体的数值。出现多个if语句的时候会对每一个条件都进行判断。最后的else会和最近的if配对。而if和else if的语句,一旦满足了其中的一个条件就会终止判断。
判断条件较多时可以使用if else if语句和switch语句,而两者的区别则是switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的
索引号与switch变量的值是相等的。从而,switch...case不用像if...else if那样遍历条件分支直到命中条件,而只需访问对应 索引号的表项从而到达定位分支的目的。
所以从效率上来说由于if...else if的遍历性,代码执行效率是不高的。
举例:例如选择结构二的第三道编程题,计算天数,需要进行多次判断。而因为知道具体的月份,所以用switch会更加简单。
1242338-20171104155312123-1778488299.png
而在选择结构一的第九题计算阶梯电价中,因为用户的用电量是随机的,所以用能够表示范围的if语句会更好一点
1242338-20171104155501498-1615265146.png

资料链接一  资料链接二
(三)实验总结
1.比较大小
(1)题目
本题要求将输入的任意3个整数从小到大输出。
(2)流程图
1242338-20171103101017326-1236384037.png
(3)源代码

#include<stdio.h>
int main()
{
int a,b,c,x,y,z;
scanf("%d%d%d",&a,&b,&c);
if(a>b && a>c)
{
    x = a;
    if(b>c)
    {
        y = b,z = c;
    }
    else
    {
        y = c;
        z = b;
    }
}
else if(b>a && b>c)
{
    x = b;
    if(a>c)
    {
        y = a;
        z = c;
    }
    else
    {
        y = c;
        z = a;
    }
}
else
{
    x = c;
    if(a>b)
    {
        y = a;
        z = b;
    }
    else
    {
        y = b;
        z = a;
    }
}
printf("%d->%d->%d",z,y,x);
return 0;


}

(4)实验分析
问题一:if语句错误
原因:&应该是两个而不是一个
解决办法:再加上一个&
问题二:答案输出错误
原因:有一个if后面的语句没加括号
解决办法:将在if后面的语句括起来
(5)本题PTA提交列表
1242338-20171103101748388-241925016.png
1242338-20171103101825326-1628807017.png

  1. 高速公路超速处罚
    (1)题目
    按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
    (2)流程图
    1242338-20171103103134451-528813121.png
    (3)源代码

     #include<stdio.h>
     int main()
     {
     int a,b;
     double c;
     scanf("%d%d",&a,&b);
     c = (a-b)*1.0/b;
     if(c<0.1)
     printf("OK");
     else if(c>=0.1 && c<0.5)
     printf("Exceed %0.0f%%. Ticket 200",c*100);
     else
     printf("Exceed %0.0f%%. License Revoked",c*100);
     return 0;
     }

(4)实验分析
问题一:不能正确输出百分数
原因:%lf后面应该加上两个百分号
解决办法:在%lf后面加两个百分号
(5)本题PTA提交列表
1242338-20171103103438591-416069426.png
3.计算油费
(1)题目
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
(2)流程图
1242338-20171103210541326-1623219408.png
(3)源代码

    #include<stdio.h>
    int main()
    {
int p;
double l,y;
char f;
scanf("%lf%d %c",&l,&p,&f);
switch(p)
{
        case 90:
    if(f == 'm')
    {
        y = l*6.95*0.95;
    }
    else
    {
        y = l*6.95*0.97;
    }

        break;
case 93:
    if(f == 'm')
    {
        y = l*7.44*0.95;
    }
    else
    {
        y = l*7.44*0.97;
    }
    break;
case 97:
    if(f == 'm')
    {
        y = l*7.93*0.95;
    }
    else
    {
        y =l*7.93*0.97;
    }
}
printf("%0.2f",y);
return 0;
    }

(4)实验分析
switch和if后面的语句要记得用括号括起来,并且后面不能加分号。其他语句后面都要分号。表示等于是两个等号,一个代表赋值
(5)本题PTA提交列表
1242338-20171104152846498-1414399733.png
4.12-24小时制
(1)题目
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
(2)流程图
1242338-20171104153000498-2076154653.png
(3)源代码

    #include<stdio.h>
    int main()
    {
    int h,m,h1,m1;
    scanf("%d:%d",&h,&m);
    if(h<12)
    {
        h1 = h;
        m1 = m;
    printf("%d:%d AM",h1,m1);
    }
        else if(h == 12)
    {
        h1 = h = 12;
    m1 = m;
    printf("%d:%d PM",h1,m1);
}
else if(h>12 && h <24)
{
    h1 = h-12;
    m1 = m;
    printf("%d:%d PM",h1,m1);
}
else
{
    h1 = 0;
    m1 = m;
    printf("%d:%d AM",h1,m1);
}

return 0;

}

(4)实验分析
要注意各个时间点的区分,if,else if后面的语句要用括号括起来,判断条件后面不加分号。输出要符合题目格式要求。注意区分中英文符号
5)本题PTA提交列表
1242338-20171104155726732-1325780311.png
(四)博客互评
刘长森
李仁正
潘久朋

转载于:https://www.cnblogs.com/moying456/p/7770919.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值