(一)改错题

输出三角形的面积和周长,输入三角形的三条边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. angular2 学习笔记 ( 第3方插件 jQuery and ckeditor )

    refer : https://forums.meteor.com/t/importing-ckeditor-using-npm/28919/2   (ckeditor) https://github ...

  2. linux ubunt 安装软件的前期准备——更新源的更换

    如果是高手,请翻到页面最下方,更换更新源的总结,直接操作即可 可能会优点啰嗦,但是认真看,一定能解决问题~~希望对大家有帮助~ 最近在熟悉linux环境,自己安装了一个ubuntu虚拟机. 很多朋友问 ...

  3. oracle获取表字段属性

    select b.COMMENTS,a.COLUMN_NAME,a.DATA_TYPE,a.DATA_LENGTH, a.DATA_PRECISION,a.DATA_SCALE,a.NULLABLE, ...

  4. 用js来实现那些数据结构(数组篇03)

    终于,这是有关于数组的最后一篇,下一篇会真真切切给大家带来数据结构在js中的实现方式.那么这篇文章还是得啰嗦一下数组的相关知识,因为数组真的太重要了!不要怀疑数组在JS中的重要性与实用性.这篇文章分为 ...

  5. Java基础语法<十> Jar文件

    1 JAR文件            java归档文件,压缩的            jdk/bin jar工具制作jar文件              jar程序选项 1.1清单文件         ...

  6. Redis常用命令总结

    在Redis中一共有五种数据类型. 一.String 类型操作 //添加 set key value //查询 get key //删除 del key //拼接 append key value(返 ...

  7. POJ-2965 The Pilots Brothers' refrigerator---思维题

    题目链接: https://vjudge.net/problem/POJ-2965 题目大意: 一个冰箱上有4*4共16个开关,改变任意一个开关的状态(即开变成关,关变成开)时,此开关的同一行.同一列 ...

  8. linux实现文件的去重【转】

    (1)两个文件的交集,并集 1. 取出两个文件的并集(重复的行只保留一份) cat file1 file2 | sort | uniq > file3 2. 取出两个文件的交集(只留下同时存在于 ...

  9. Java 内部类的意义及应用

    众所周知,我们的 C++ 程序语言是多继承制的,而多继承明显的好处就是,相对而言只需要写较少的代码即可完成一个类的定义,因为我们可以通过继承其它类来获取别人的实现. 但是,它也有一个致命性的缺陷,容易 ...

  10. [LeetCode] Range Addition II 范围相加之二

    Given an m * n matrix M initialized with all 0's and several update operations. Operations are repre ...