C语言程序设计第四次作业

C语言程序设计第四次作业——选择结构(2)

(一)改错题

(1)输出三角形的面积和周长,输入三角形的三条边a、b、c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“These sides do not correspond to a valid triangle”。

  • 源程序:
  • 错误信息1:
  • 错误原因:在对area的计算中最后丢了与第一个括号并列的另一个括号。
  • 改正方法:在分号之前加入一个")".
  • 错误信息2:
  • 错误原因:if的执行语句超过一条时,必须要加上{}。
  • 改正方法:在if的执行语句前后加入{}。
  • 错误信息3:在进行运行时,输入任意不能组成三角形的三条边的值,发现出现如下结果;
  • 错误原因:经研究发现,if语句的附加内容中未将条件关系设置为“且”,即为程序语言中的"&&",而是使用了“或”关系,使得程序无法输出不为三角形的情况。

(二)学习总结

1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。

  • 经查阅资料和自己总结,我认为这三种语句的区别有以下几点。
  • 1.当只需要判断一个条件时,用if语句更加简便。
  • 2.但在条件非常多时,if... else if的编程效率更高一些,因为if...else if在任何一个环节满足条件的时候就将会终止判断,只处理一个满足条件的情况;而对于多个if语句,
    将会对每一个判断条件进行判断,自然而然会导致程序的执行效率降低.
  • 3.对于switch...case语句,也可以用于复杂条件的编写,但在效率方面要高于if...else if语句,因为if...else if语句在你输入值时,会遍历所有条件,而switch...case语句会自动检索到所符合的条件,然后自动结束相比来说用switch...更便捷。
  • 引用的资料:[博客园](http://www.cnblogs.com/bluesky365/p/5631517.html)
  • 三种情况的格式样例。
  • 1.if
if(比较表达式1) {
     语句体1;
  }
  else {
    语句体n+1;
  }
  • 2.if...else if
if(比较表达式1) {
     语句体1;
  }else if(比较表达式2) {
     语句体2;
  }else if(比较表达式3) {
     语句体3;
  }
     ...
  else {
    语句体n+1;
  }
  • 3.switch
switch(表达式) {
          case 值1:
      语句体1;
      break;
      case 值2:
      语句体2;
      break;
      ...
        default:
      语句体n+1;
      break;
             }

2.对其他你认为需要进行总结的内容进行总结。

  • 1.在这一阶段的学习中,我们学习了if...else if;swtich...case语句,并进行了多种编程的尝试,得出了许多有意义的结果,如在进行大小比较的问题研究中,引入了中间变量t,使得程序变得更加简洁明了。
  • 2.强制double:在有些变量最初未设置整形实型时,可在语句前加(double)进行强制定义,这样可以保持编程的流畅度,并且输出正确结果。
  • 3.if后括号内语句的相关问题:在赋值时用一个等号,在判断是否为此值时,应用两个等号,否则程序会认为是赋值。
  • 4.关于数学函数:这一阶段主要学习了绝对值函数(fabs(x));平方根函数(sqrt(x));幂函数(pow(x,n);指数函数(exp(x))。
  • 5.运算符的优先级:!>算术运算符>关系运算符>&&和||>赋值运算符。

(三)实验总结

1.题目:本题要求将输入的任意3个整数从小到大输出。

2.流程图

3.源程序

#include <stdio.h>

int main()
{
	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.实验分析

  • 错误信息:第一次做时未使用“t”这一中间值,导致变成无法编程。
  • 错误原因:自己知识储备不足,没有深刻理解到中间量这一非常实用的量。
  • 改正方法:在if语句中输入中间量“t”这一中间量,将三个部分中的最小值输出,最终得出正确结果

提交列表:

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

2.流程图

3.源程序

#include <stdio.h>
int main()
{
	int a,b;
	double x;
	scanf("%d %d",&a,&b);
	x=(double)(a-b)/b*100.00;
	
	if(x >= 10 && x < 50)
	{
		printf("Exceed %.0f%%. Ticket 200",x);
	}
	if(x >= 50)
	{
		printf("Exceed %.0f%%. License Revoked",x);
	}
	if(x < 10)
	{
		printf("OK");
	}
	return 0;
}

4.实验分析

  • 错误信息:在输入999999,333两数时出现以下结果
  • 错误原因:if语句后的限制条件中,使用的是“||”,而不是“&&”,前者表示或,而后者表示的是且的关系,按题意的说法应是用且的关系。
  • 改正方法:将if后的的语句中的||改为&&,再次输入以上信息,得到以下结果
  • 结果正确。

提交列表:

1.题目:现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

2 流程图。

3 源程序。

    /#include <stdio.h>
    int main()

    {
	    int a,b;
	    scanf("%d:%d",&a,&b);
	    if(a>=12)
	    {
	    if(a==12)
	    {
	        printf("%d:%d PM",a,b);
	    }
	     else
	    {
	    	a=a-12;
		    printf("%d:%d PM",a,b);
	     }
	
    }
	    else
	    {
	    printf("%d:%d AM",a,b);
	    }
	
	    return 0;
    } 

4.实验分析。

  • 错误信息1:输入预设数字,结果如下。
  • 错误原因:经检查,发现括号内内容并不是判断,而是直接赋值,这样的话限制条件就发生了变化,并不能得出正确结果
  • 改正方法:将原括号内的“=”语句换为“==”,这样就表示判断而不是赋值。
  • 改正后输出:
  • 符合期望。

提交列表:

1.题目:编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

2.流程图

3源程序

    #include <stdio.h>
    int main()

    {
	    int a,b;
	    scanf("%d:%d",&a,&b);
	    if(a>=12)
	    {
	    if(a==12)
	    {
	        printf("%d:%d PM",a,b);
	    }
	     else
	    {
	    	a=a-12;
		    printf("%d:%d PM",a,b);
	     }
	
    }
	    else
	    {
	    printf("%d:%d AM",a,b);
	    }
	
	    return 0;
    } 
    ```
### 4.实验分析
* 错误信息1:在输入十二点时未能输出正确结果。
* 错误原因:忽略了十二点的存在,将其并入了上午时间。
* 改正方法:在程序中附加一条判断中午十二点的语句。
#### 提交列表:![](http://images2017.cnblogs.com/blog/1242130/201711/1242130-20171103152724154-507665086.png)
## (四)博客互评。

* 1.许天笑:整体内容良好,总结的比较到位;只是在实验分析中建议插入一些运行后的输出结果之类的,现在这样略显简略。希望能共同进步。
* 地址:(http://www.cnblogs.com/snxtx/p/7763856.html)
* 2.姚庆虎:总结的很是详尽,只是在源程序处是不是出了点问题?include字体似乎有点过大,建议使用前面后边加入“```”的方法来输入程序。希望共同进步。
* 地址:(http://www.cnblogs.com/yaole10086/p/7778593.html)
* 3.王映丹:内容简洁,只是实验分析有些简单,希望你能更详尽的描述出现的错误及解决办法,这样能帮助你更好的了解这道题的来龙去脉。希望共同进步。
* 地址:(http://www.cnblogs.com/windsky-1999/p/7765579.html)

posted on 2017-11-04 22:04  吉炎臣  阅读(651)  评论(3编辑  收藏  举报

导航