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;        
}

错误信息:

错误原因:函数表达式少一个括号
改正方法:在area语句后加上括号,改为 area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ));
错误信息:

错误原因:else找不到对应的if,导致混乱
改正方法:给if语句和else语句加上花括号
错误信息:

错误原因:if判断条件用||连接,三角形成立条件错误
改正方法:将||改为&&
(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
if else 语句是如果if条件为真,则执行if的语句,若为假,则执行else的语句,if else语句是有条件的执行其中一条与语句。
if....else if 语句是若if条件为真,则执行if的语句,若为假,则判断else if的条件:若else if条件为真,则执行else if的语句,若为假,则判断下一个else if,直至判断为真,执行该语句为止。if....else if是有条件的执行每一个分支里的语句。
switch 语句则是当switch后的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止;default 可用于在上面所有 case 都不为真时执行一个任务。但有时不用default,有时则根据具体情况,不用break。switch是有条件的执行一组语句中的一条语句。
if else if 适合于区间的判断,switch则适合于单个数据的判断。如pta的第一题,若用if else if语句,判断条件可直接写成 (n>=90) (n>=80 && n<90),而用switch则要进行转化。
资料链接地址:http://www.cnblogs.com/wankun/p/4989831.html
https://zhidao.baidu.com/question/332651860.html
2.对其他你认为需要进行总结的内容进行总结。
要时刻注意=与==的区别,千万不能使用错了;
有多个if else if 时,要注意配对问题,最好在写完 if 时敲上{},这样就不容易出错了。
(三)实验总结
1.比较大小
(1)题目
本题要求将输入的任意3个整数从小到大输出。
(2)流程图



(3)源代码

include <stdio.h>

int main(void)
{
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c);
if (a > b)
{
t = a;
a = b;
b = t;
}
if (a > c)
{
t = a;
a = c;
c = t;
}
if (b > c)
{
t = b;
b = c;
c = t;
}
printf("%d->%d->%d",a,b,c);

return 0;

}
(4)实验分析
本体没有问题
(5)本题PTA提交列表

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

(3)源代码

include <stdio.h>

int main(void)
{
int a,b;
double c;
scanf("%d %d",&a,&b);
c = (a - b) * 100.0 / b;
if (c >= 50)
{
printf("Exceed %.0f%%. License Revoked",c);
}
else if(c < 50 && c >= 10)
{
printf("Exceed %.0f%%. Ticket 200",c);
}
else
{
printf("OK");
}

return 0;

}
(4)实验分析
问题:输出时没有%
原因:输出语句错误
解决办法:用两个%来输出%
(5)本题PTA提交列表

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


(3)源代码

include <stdio.h>

include <stdlib.h>

int main(void)
{
int a,b;
char c;
double y;
scanf("%d%d %c",&a,&b,&c);
if (c == 'm')
{
switch(b)
{
case 90:y = a * 6.95 * 0.95;break;
case 93:y = a * 7.44 * 0.95;break;
case 97:y = a * 7.93 * 0.95;break;
}
printf("%.2f",y);
}
else if (c == 'e')
{
switch(b)
{
case 90:y = a * 6.95 * 0.97;break;
case 93:y = a * 7.44 * 0.97;break;
case 97:y = a * 7.93 * 0.97;break;
}
printf("%.2f",y);
}

return 0;

}
(4)实验分析
问题1:读题时完全不知道该咱办
原因:不理解题意
解决办法:在纸上写出数学表达式,有了思路
(5)本题PTA提交列表

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

(3)源代码

include <stdio.h>

include <stdlib.h>

int main(void)
{
int a,b;
char op;
scanf("%d %c%d",&a,&op,&b);
if (a >12 && a<24)
{
a = a - 12;
printf("%d%c%d PM",a,op,b);
}
else if (a12)
{
printf("%d%c%d PM",a,op,b);
}
else if(a
24)
{
printf("0%c%d AM",op,b);
}
else
{
printf("%d%c%d AM",a,op,b);
}

return 0;

}
(4)实验分析
问题1:落下了12 24 时的情况
原因:没有考虑全面
解决办法:将两者分离出来
问题2:24 时时输出不是0,而是24
原因:24算为凌晨0点
解决办法:直接输出0
(5)本题PTA提交列表

(四)博客互评
姚庆虎的博客链接:http://www.cnblogs.com/yaole10086/
陆毅的博客链接: http://home.cnblogs.com/u/LYFRRS/
徐振刚的博客链接:http://home.cnblogs.com/u/yiqiekaoziji/
以上就是本次我所评论的同学的博客,有很多我需要学习的地方。希望能与以上同学共同进步,学好C语言这门课程。

posted @ 2017-11-02 23:53  五灵玄同  阅读(651)  评论(2编辑  收藏  举报