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

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

错误信息(1):

错误原因:在area这条式子最后的分号前少一个)。
改正方法:在分号前加)。如图

进行编译后发现
错误信息(2):

错误原因:if后没有加大括号,导致没有if与else匹配。
改正方法:在if语句后加上{}。如图:

两次改正后编译无错误,之后运行发现错误。
错误信息(3):

错误原因:

条件错误,三条边都应该满足两边之和大于第三边,所以不是或的关系,而是且的关系。
改正方法:把if后的||换成&&,如图

经过三次改正,输出了正确结果。如图。

(二)学习总结

  1. 参考的资料链接:http://www.cnblogs.com/wankun/p/4989831.html
    总结三种情况的区别:
    (1)在判断条件有一个时用if语句,当判断条件很多个时通常用if...else语句 或 switch语句。
    (2)if...else if在满足条件的时候就将会终止判断而switch...case只需访问对应 索引号的表项从而到达定位分支的目的。
    (3)switch...case语句比if...else if...语句的代码执行效率高。
    举例:


2.个人总结:
(1)if~else配对原则:缺省{}时,else总是和它上面离他最近的为配对的if配对。
(2)c语言中,只有一个分号“;”也是一条语句,称为空语句,程序执行时不产生任何动作。
(3)字符型数据:用单引号括起来的单个普通字符或转义字符
(4)switch语句中,case和后面常量之间应该有空格。case后的常量表达式不能一个区间表示或出现关系运算符。缺省break语句,顺序执行下一个case。每个case后面“常量表达式”的值,必须各不相同。
(5)条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。

(三)实验总结
1.比较大小
(1)题目:
本题要求将输入的任意3个整数从小到大输出。输入在一行中给出3个整数,其间以空格分隔。在一行中将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)实验分析:
问题一:

原因 :



if...else if...后大括号里的语句中因为用了逗号造成了答案错误。
解决办法:
把逗号换成分号。
(5)本题PTA提交列表:

2.高速公路超速处罚
(1)题目:输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
(2)流程图:

(3)源代码

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

 return 0;
}

(4)实验分析:
问题一 :

错误原因:前面没有# include <math.h>
改正方法:在# include<stdio.h>下面加上#include <math.h>

     问题二    :


错误原因:代码中定义了整型常量,而题中的常量应该定义double类型。
改正方法:把int常量定义成double常量。
(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<math.h>
int main(void)
{
 int a,b;
 char c;
 double yuan;
 scanf("%d%d %c",&a,&b,&c); 
 if(c == 'm')
 {
	 if(b == 90)
	 {
		 yuan = a*6.95*0.95;
		 printf("%.2f",yuan);
	 }
	 if(b == 93)
	 {
		 yuan = a*7.44*0.95;
		 printf("%.2f",yuan);
	 }
	 if(b == 97)
	 {
		 yuan = a*7.93*0.95;
		 printf("%.2f",yuan);
	 }
 }           
 if(c == 'e')
 {
	 if(b == 90)
	 {
		 yuan = a*6.95*0.97;
		 printf("%.2f",yuan);
	 }
	 if(b == 93)
	 {
		 yuan = a*7.44*0.97;
		 printf("%.2f",yuan);
	 }
	 if(b == 97)
	 {
		 yuan = a*7.93*0.97;
		 printf("%.2f",yuan);
	 }
 }
	 return 0 ;
}

(4)实验分析:
问题一:

原因:

c定义的是字符类型,输入时应该是%c,而不是%d。
改正方法:

把%d改成%c
问题二:

原因:


m和e没有加单引号。
改正方法:


m和e要加上单引号。
(5)本题PTA提交列表:

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

(3)源代码:

#include <stdio.h>
int main (void)
{
 int hour,minute,a; 
 char op;
 scanf("%d%c%d",&hour,&op,&minute);
 if(hour<12)
 {
      printf("%d%c%d AM",hour,op,minute);
  } 
  else if (hour==12)
  {
 	 printf("%d%c%d PM",hour,op,minute);
  }
  else if (hour>12)
  {
 	 a=hour%12;
 	 printf("%d%c%d PM",a,op,minute);
  }
  return 0 ;
}

(4)实验分析:
冒号应该定义的是 char op。输入时用%c。当hour>12时输出要用小时数与12的余数。
(5)本题PTA提交列表:

(四)博客互评:
(1)http://www.cnblogs.com/luyu0322-/p/7765830.html
(2)http://www.cnblogs.com/yiqiekaoziji/p/7772484.html
(3)http://www.cnblogs.com/karry-5201314/p/7779360.html

posted @ 2017-11-04 23:35  氧气wq  阅读(737)  评论(3编辑  收藏  举报