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

   错误信息:![](http://images2017.cnblogs.com/blog/1242368/201711/1242368-20171105173518138-858591439.png)

  错误原因:后边少了一个与前边对应的)
  改正方法:在后边加上)
  错误信息:

  错误原因:if 下边四行少{}
  改正方法:加上{} 如:

   错误信息:![](http://images2017.cnblogs.com/blog/1242368/201711/1242368-20171105174439013-477542276.png)
   错误原因:||用得不对
   改正原因:||改成&&

(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
答:(1)两者本质的区别是 if-else语句更适合于对区间(范围)的判断,而switch语句更适合于对离散值的判断
( 2) 示例
判断65分到85分之间的学生有哪些适合用if-else语句,因为[65,85]是区间
而判断一个学生的班级是一班、二班还是三班适合用switch语句,因为一班、二班、三班是离散值
(3) 扩展
所有的switch语句都可以用if-else语句来替换(因为if-else语句只需对每个离散值分别做判断即可),而并不是所有的if-else语句都可以用switch语句来替换(因为区间里值的个数是无限的并且switch所接受的值只能是整型或枚举型,所以不能用case来一一列举)。https://zhidao.baidu.com/question/332651860.html

2.对其他你认为需要进行总结的内容进行总结。
答:在c语言中如果想将一个字符串存放到变量中,必须使用字符数组,就是用一个字符型数组存放一个字符串,用char来注释。switch语句一定记得跳出有break,不然会输出错误。

(三)实验总结。
2
(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提交列表

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

(3)源代码

include<stdio.h>

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

return 0;

}
(4)实验分析
问题1:c=这个语句输出错误,不符合题意
原因:输入c为double类型,而a b为int类型,所以在c=这个语句种错误了(实验课的问题)
(5)本题PTA提交列表

6
(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()
{
int a,b;
double result;
char c;
scanf("%d %d %c",&a,&b,&c);
if(c == 'm')
{
if(b == 90)
{
result = (double)a6.950.95;
printf("%.2f",result);
exit(0);
}
else if(b == 93)
{
result = (double)a7.440.95;
printf("%.2f",result);
exit(0);
}
else if(b == 97)
{
result = (double)a7.930.95;
printf("%.2f",result);
exit(0);
}
}
else if(c == 'e')
{
if(b == 90)
{
result = (double)a6.950.97;
printf("%.2f",result);
exit(0);
}
else if(b == 93)
{
result = (double)a7.440.97;
printf("%.2f",result);
exit(0);
}
else if(b == 97)
{
result = (double)a7.930.97;
printf(".2f",result);
exit(0);
}

}
return 0;

}
(4)实验分析
问题1:case语句编译错误
原因:在case语句后没有空格,没有单引号
解决办法:在case后面加空格和单引号
(5)本题PTA提交列表

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

(3)源代码

include<stdio.h>

include<stdlib.h>

int main()
{
int a,b,c;
scanf("%d:%d",&a,&b);
if(a<12)
{
printf("%d:%d AM",a,b);
exit(0);
}
else if(a>12 && a<24)
{
c=a-12;
printf("%d:%d PM",c,b);
exit (0);
}
else if(a == 24)
{
c=0;
printf("%d:%d AM",c,b);
exit (0);
}
else if(a == 12)
{
printf("%d:%d PM",a,b);
}
return 0;
}
(4)实验分析
问题1:0点被认为是第二天的时间,没有考虑
原因:把0点直接归入了12点
解决办法:在if语句中加入了a==0这个条件。
(5)本题PTA提交列表

(四)博客互评
1.李仁正
http://www.cnblogs.com/lrxlrz/p/7763680.html
2.刘傲
http://www.cnblogs.com/zuogehuairen/p/7787579.html
3.冯亚杰
http://www.cnblogs.com/1702-fengyajie/p/7787381.html

posted @ 2017-11-05 20:09  计科02刘骥飞  阅读(247)  评论(0编辑  收藏  举报