(一)改错题

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

1、错误信息:





错误原因:

sqrt后面的括号必须是成对出现的,不可单个出现。

改正方法:

在13行后面最后的分号前面加一个括号,和前面sqrt后面的一个括号配成对。

2、错误信息:





错误原因:

else没有与之配对的if。

改正方法:

前面的if下面的内容没有用大括号括起来并且最好把else下面的内容也加上一个大括号,看起来有整体感清晰明了。

3、错误信息:



错误原因:

编译没错后,开始输入进行运行的测验,发现再输入1 4 1这个组不成三角形的三个边长是输出的不是These sides do not correspond to a valid triangle,经检验发现在编译的语句中if后面的条件错了。

改正方法:

应该把if后面括号里面的“||”都改成“&&”。





最后输出正确结果。

改正后正确的代码

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

(二)学习总结

1、if else和 if与switch的区别

if ...else和if ...else if的区别在于else后面不能再加条件的限制,但是else if后面可以继续加条件。switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化,所以在多路分支时用switch比if..else、if结构要效率高。并且if else、 if是先判断switch是后判断的,如果判断的种类较少可以使用if语句如果比较复杂情况相对较多大多数使用switch语句。

switch针对单一变量或者语句,if可以包裹变量及其以外的,if范围大,但是写出来不如switch简明。switch()的所有case都是针对同一个表达式的,而if...else可以随意怎么设置条件。看你的需要去用。IF/ELSE可以处理复杂的逻辑关系,用switch/case处理的都可以用IF/ELSE处理,但是switch/case有局限性,说个例子给你听

关于个人所得税的征收

超过800低于1600部分 收1%

超过1600低于5000部分 收2%

超过5000低于20000部分 收3%

超过20000低于100000部分 收4%

乍一看这题好像是switch/case比较省事,但是再实际过程中会发现每个CASE之间数字的跨度不一样,到后面会越来越大,无法用简单办法处理。这样用IF/ELSE就十分方便了

当然能用switch/case的话可以减少不少代码的输入。

这三个分别来举例子说明一下。if else 大多会用于条件和条件之间有联系的。

#include <stdio.h>
int main(void){
int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\n",a);
else
printf("max=%d\n",b);
return 0;
}

if 语句大多运行在条件和条件之间并无太大关系的写完一条语句的限制接着写另一个限制。

#include <stdio.h>
int main(void){
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
max=a;
if (max<b) max=b;
printf("max=%d",max);
return 0;
}

switch语句限制性比较大,但是方便简单。

#include<stdio.h>
int main()
{
int n,x;
printf("What's the result?\n");
scanf("%d",&n);
x=n/10;
switch(x)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
break;
}
}

借鉴网址:http://wenwen.sogou.com/z/q659544857.htm

http://wenwen.sogou.com/z/q741234908.htm

http://wenwen.sogou.com/z/q658989739.htm

https://zhidao.baidu.com/question/151766890

2、对其他方面的总结

在本章中,我们主要学习的是选择结构,switch case和if else语句的使用和字符语句的常量变量以及语句的输入输出的各种形式,还有ASCII码的简单介绍。ASCII码和字母数字等等的简单转化。同时也讲到了char在电脑里的储存方式,在使用char语句是还引入了一个新的输入与输出的方式。getchar()和putchar的使用。随机函数rand()在C语言的使用。或者给出他一定的限制该人如何在1到100里面的随机产生数字的使用。但是在使用随机变量时一定要在开头加上一个#include<stdlib.h>才可以进行,在最后我们还提到了在产生随机数字时如果不改变它的种子是一样的产生的随机数字也都是一样的。所以又讲了一个新的变量那就是时间,在我们的身边不能随人们的意愿改变而改变的就是时间时间是无时无刻不再变化的所以引入了#include<time.h> srand(time(NULL));的使用,让随机变量一次次都不一样的出现。]

(三)实验总结

1、题目

7-2 比较大小

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、实验分析

问题:

使用raptor时输不出结果。

原因:

raptor中输入输出需要用引号括主,循环语句中不需要。

解决办法:

在输出语句是加上英文半角双引号。

问题:

提交到pta上不对。

原因:

最后输出格式不对,没有复制粘贴老师的格式。

解决办法:

改正自己的格式即可。

5、本题提交列表

1、题目

7-4 高速公路超速处罚

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、实验分析

问题:



原因:

在小于百分之十时应该输出OK,但是没有加引号,导致找不到结果没有办法输出,错误提醒。

解决办法:

在OK输出框内加上引号。

5、本体提交列表

1、题目

7-6 计算油费

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*67.44*0.97;
printf("%.2f",yuan);
}
if(b == 97)
{
yuan = a*7.93*0.97;
printf("%.2f",yuan);
}
}
return 0 ;
}



4、实验总结

问题:



找不到结果。

原因:

判断不出来m e。

解决办法:

把c=m 改成c="+m+"即可。

5、本题pta提交列表



1、题目

7-8 12-24小时制

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、实验总结

问题:



原因:

不知道再输入时间是那个冒号该如何处理。

解决办法:

小时冒号分钟分开处理

5、本题pta上提交列表



(四)博客互评

http://www.cnblogs.com/he111923/p/7772093.html

http://www.cnblogs.com/windsky-1999/p/7765579.html

http://www.cnblogs.com/lrxlrz/p/7763680.html

C语言程序设计第四次作业--选择结构(2)的更多相关文章

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

    Deadline: 2017-11-5 22:00 一.学习要点 掌握switch语句 掌握字符常量.字符串常量和字符变量 掌握字符型数据的输入输出 二.实验内容 完成PTA中选择结构(2)的所有题目 ...

  2. C语言程序设计第四次作业-选择结构

    (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...

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

    (一)改错题 错误信息: 错误原因:第13行sqrt数学函数缺少")",导致编译器无法将括号正确配对 改正方法:补齐缺少的")" 错误信息: 错误原因:if语句 ...

  4. C语言程序设计第三次作业--选择结构(1)

    Deadline: 2017-10-29 22:00 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...

  5. c语言程序设计第四次作业——顺序结构

    (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...

  6. C语言程序设计第三次作业——选择结构(1)

    一.改错题 1.题目计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源程序(有错误的程序): #include <stdio.h> int main ...

  7. C语言程序设计第三次作业——选择结构(一)

    (一)改错题 错误信息: 错误原因:y=1/x后没加分号 改正方法:在其后加上分号 错误信息: 错误原因:if语句后接了:,使else语句找不到对应的if 改正方法:删掉if后的分号 错误信息: 错误 ...

  8. C语言程序设计第三次作业 —— 选择结构(1)

    (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. (错误一) 错误原因及改正:第九行语句结尾缺少半角分号,添加分号即可改正 (错误二) 错误原因及改 ...

  9. C语言程序设计第六次作业——循环结构(2)

    C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...

随机推荐

  1. JAVA_SE基础——25.面向对象练习

    黑马程序员入学blog ... 昨晚我写了篇面向对象的内存分析,今天我们来做个小练习.. 需求: 使用java描述一个车与修车厂两个事物, 车具备的公共属性:轮子数. 名字. 颜色 ,还 具备跑的功能 ...

  2. javascript单例模式及开发实践

    定义: 保证一个对象(类)仅有一个实例,并提供一个访问它的全局访问点: 实现原理: 利用闭包来保持对一个局部变量的引用,这个变量保存着首次创建的唯一的实例; 主要用于: 全局缓存.登录浮窗等只需要唯一 ...

  3. awk sed tr替换换行符为逗号,并合并为一行

    在群里看到的.记录以备用.  sed 帮助命令:http://man.linuxde.net/sed 文件里有如下行,我想将每行的回车符替换为逗号,并将所有行合并到一行,用awk或sed怎么写啊TOP ...

  4. 如何用UPA优化性能?先读懂这份报告!

    一.概述 打开一份UPA报告时,最先看到的就是概述页面,这也是我们推荐用户第一时间关注的页面.概述页面一开始会列出测试的基本信息,并根据腾讯游戏的性能标准,给出本次测试的结果(通过,不通过和警告): ...

  5. Python内置函数(22)——list

    英文文档: class list([iterable]) Rather than being a function, list is actually a mutable sequence type, ...

  6. javasciprt性能优化

    本文主要是在我读<高性能Javascript>之后,想要记录下一些有用的优化方案,并且就我本身的一些经验,来大家一起分享下, Javascript的加载与执行 大家都知道,浏览器在解析DO ...

  7. React-Native(六):React Native完整的demo项目

    该项目在http://www.lcode.org/study-react-native-opensource-two/上发现 更有意思的发现这个网站https://juejin.im/是采用vue.j ...

  8. UVA-10037 Bridge---过河问题进阶版(贪心)

    题目链接: https://vjudge.net/problem/UVA-10037 题目大意: N个人夜里过河,总共只有一盏灯,每次最多过两个人,然后需要有人将灯送回 才能继续过人,每个人过桥都需要 ...

  9. 02、NetCore2.0优化之Nuget包

    02.NetCore2.0优化之Nuget包 在NetCore2.0中的包是如何管理的?如何存储的?微软做了哪些优化工作? -------------------------------------- ...

  10. Java进阶篇(二)——抽象类、内部类

    之前在类和对象中我们说到了类的普通特性,本篇将介绍类的一些高级特性. 一.抽象类 抽象类:抽象类是只声明方法的存在而不去具体实现它的类.抽象类不能被实例化,也就是不能创建其对象.使用abstract关 ...