第四次作业

改错

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

博客互评


各种总结写得都很用心,不仅举例子每个都举了,而且参考了不止一个资料,做得比我用心得多,很值得学习。美中不足的一点就是标题没有凸显大小粗细。

posted @ 2017-11-04 18:21  哔莉莉莉莉  阅读(668)  评论(2编辑  收藏  举报