第四次作业
改错
输出三角形的面积和周长,输入三角形的三条边a、b、c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“These sides do not correspond to a valid triangle”。
错误信息:![](http://images2017.cnblogs.com/blog/1242824/201711/1242824-20171104072359435-1108755844.png)
错误原因:sqrt后面少个括号,if后面没有大括号
改正方法:area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ));并在if下面语句加大括号
错误信息:
错误原因:if条件错误
改正方法:把条件中的或改为并且
总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
if是几个if语句并列在一起,系统把每个if语句都执行一遍,执行得通的就输出进入下一环节。因为每个句子都需要执行,所以显得效率底下。不过当不大明白各条件间的逻辑关系时,可以用if语句并列将就一下,毕竟每个语句的条件间不需要什么逻辑关系。
if else是利用逻辑关系让系统明白应该做什么,特点在于如果输入的值满足当前条件,那么根据逻辑限制,下面的条件不会再和此条件有交集,系统默认不再执行下面的。也就是早满足早输出,晚满足晚输出,相对于if来说,较早满足条件的值输出会快一些,但几个条件间要有强烈的逻辑关系。
switch case是建立一列索引即case后面的值,根据从switch输入的值,直接把值导向相同的索引那里,然后执行。所以不管输入什么值,都是执行一次就可以输出,效率自然会比前两个高一些。但可惜的是case后面只能跟固定值而不能跟范围,所以使用范围就小很多。例如判断某个月的天数时就可以用case因为索引是一到十二月这十二个数,但要是根据身高体重测试是不是完美身材的话就不行,因为三个限制条件都是范围。
参考帖子
2.
switch case可以用于计算某个值以前所有值的和。例如以前做的根据年月日算当天是当年里第几天的题就是这样。把case1到12倒序列出,能做到输10就算出从10加到1,输6就算从6加到1。
实验总结
比较大小
1.本题要求将输入的任意3个整数从小到大输出。
2.
3.代码
#include<stdio.h>
int main()
{
int a,b,c,x;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{x=a;a=b;b=x;}
if(b>c)
{x=b;b=c;c=x;}
if(a>b)
{x=a;a=b;b=x;}
printf("%d->%d->%d",a,b,c);
return 0;
}
4.问题1:b>c时答案错误
原因:a>b时ab交换然后b>c时bc交换,此时a里存b的值,b里存c的值,如果b>c旳话仍然错误
解决办法:后面加个a>b时ab交换
5.
高速公路超速惩罚
1.按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
2.
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 %.0f%%. Ticket 200",c*100);}
else
{printf("Exceed %.0f%%. License Revoked",c*100);}
return 0;
}
4.问题:运行错误
原因:又忘填地址符了
解决办法:补上地址符
5.
计算油费
1.现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
2.
#include<stdio.h>
int main()
{
int a,b;
char c;
double m,n;
scanf("%d%d %c",&a,&b,&c);
n=(c=='m'?0.05:0.03);
switch(b)
{
case 90:
{
m=6.95*a*(1-n);
break;
}
case 93:
{
m=7.44*a*(1-n);
break;
}
case 97:
{
m=7.93*a*(1-n);
break;
}
}
printf("%.2f",m);
return 0;
}
4.没有问题
5.
24-12小时制
1.编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
2.
#include<stdio.h>
int main()
{
int a,b;
char c;
scanf("%d:%d",&a,&b);
c=(a>=12&&a<24?'P':'A');
if(a>12&&a<24)
{
a=a-12;
printf("%d:%d %cM",a,b,c);
}
else if(a==24)
{
a=0;
printf("%d:%d %cM",a,b,c);
}
else
{
printf("%d:%d %cM",a,b,c);
}
return 0;
}
4.问题1:半夜零点时显示24点
原因:少设了一个赋值
解决办法:单另一种情况,24点时a=0
5.
博客互评
各种总结写得都很用心,不仅举例子每个都举了,而且参考了不止一个资料,做得比我用心得多,很值得学习。美中不足的一点就是标题没有凸显大小粗细。