C语言程序设计第四次作业--选择结构(2)
(一)改错题
输出三角形的面积和周长,输入三角形的三条边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)的更多相关文章
- C语言程序设计第四次作业——选择结构(2)
Deadline: 2017-11-5 22:00 一.学习要点 掌握switch语句 掌握字符常量.字符串常量和字符变量 掌握字符型数据的输入输出 二.实验内容 完成PTA中选择结构(2)的所有题目 ...
- C语言程序设计第四次作业-选择结构
(一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...
- C语言程序设计第四次作业——选择结构(二)
(一)改错题 错误信息: 错误原因:第13行sqrt数学函数缺少")",导致编译器无法将括号正确配对 改正方法:补齐缺少的")" 错误信息: 错误原因:if语句 ...
- C语言程序设计第三次作业--选择结构(1)
Deadline: 2017-10-29 22:00 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...
- c语言程序设计第四次作业——顺序结构
(一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...
- C语言程序设计第三次作业——选择结构(1)
一.改错题 1.题目计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源程序(有错误的程序): #include <stdio.h> int main ...
- C语言程序设计第三次作业——选择结构(一)
(一)改错题 错误信息: 错误原因:y=1/x后没加分号 改正方法:在其后加上分号 错误信息: 错误原因:if语句后接了:,使else语句找不到对应的if 改正方法:删掉if后的分号 错误信息: 错误 ...
- C语言程序设计第三次作业 —— 选择结构(1)
(一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. (错误一) 错误原因及改正:第九行语句结尾缺少半角分号,添加分号即可改正 (错误二) 错误原因及改 ...
- C语言程序设计第六次作业——循环结构(2)
C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...
随机推荐
- Python模块configparser(操作配置文件ini)
configparser模块提供对ini文件的增删改查方法. ini文件的数据格式: [name1] attribute1=value1 attribute2=value2 [name2] attri ...
- CSS基础:块级元素与盒模型
简介 在 HTML4.01 中,元素通常可以分为块级元素( “Block-level element” ) 和内联元素 ( "Inline-level element" ) 两大类 ...
- [phpvia/via] PHP多进程服务器模型中的惊群
[ 概述 ] 典型的多进程服务器模型是这样的,主进程绑定ip,监听port,fork几个子进程,子进程安装信号处理器,随后轮询资源描述符检查是否可读可写: 子进程的轮询又涉及到 IO复用,accept ...
- Python学习之条件判断和循环
#coding= utf-8 # 条件判断和循环 # 如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做 age1 = 20 if age1 >= 18: prin ...
- python基础——生成器表达式
生成器表达式 1 生成器表达式定义 生成器表达式并不真正的创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目"产生"(yield)出来.生成器表达式使用 ...
- SourceTree 01 - git 客户端介绍
SourceTree - git客户端介绍 SourceTree系列第1篇 --->> SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/g ...
- uvalive 5834 Genghis Khan The Conqueror
题意: 给出一个图,边是有向的,现在给出一些边的变化的信息(权值大于原本的),问经过这些变换后,MST总权值的期望,假设每次变换的概率是相等的. 思路: 每次变换的概率相等,那么就是求算术平均. 首先 ...
- Python系列之 - 描述符
描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议 __get__():调用一个属性时,触 ...
- [持续开源]基于nodejs+ligerui的一款mongodb web 端查询工具(MongoStudio)
这是我2015年入猫酷写的一款内部工具,目的是为了开发人员可以查询数据库数据以调查线上bug,数据不仅限业务数据及日志数据,其目的是为了避免开发人员直接链接生产环境数据库,以免误操作影响生产. 当时是 ...
- 关于ECMAScript 2016, 2017, 和2018中新增功能(摘抄)
ECMAScript 2016 1. Array.prototype.includes includes是数组上的简单实例方法,并有助于轻松查找某个项是否在Array中(包括NaN不像indexOf) ...