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处理wave文件
#本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活 ...
- WIN7 局域网共享打印机每次电脑重启后必须登录密码重新连接问题修复
第一步,WIN+R(或者开始->附件->运行)输入gpedit或gpedit.msc 进入 第二步:把这几个拒绝的Guest给删除掉,也可以只删除""拒绝从王洛访问这台 ...
- python利用递归函数输出嵌套列表的每个元素
1.先用 for 循环取. for item in l: if isinstance(item ,list): for newitem in item: print(newitem) else: pr ...
- JAVA中的Log4j
Log4j的简介: 使用异常处理机制==>异常 使用debug调试(必须掌握) System.out.Print(); 001.控制台行数有限制 002.影响性能 ...
- hadoop2.6.0实践:000 虚拟机配置
- hadoop2.6.0实践:A02 问题处理 util.NativeCodeLoader: Unable to load native-hadoop library for your platform
############################################################# hadoop "util.NativeCodeLoader: Un ...
- Spring知识点回顾(06)Profile 和 条件注解 @Conditional
1.设定环境中的active profiles 如:DispatcherServerlet的init-param spring.profiles.active=production spring.pr ...
- redis入门(06)各种类型的操作命令
Redis 字符串命令下表列出了常用的 redis 字符串命令:序号 命令及描述1 SET key value 设置指定 key 的值2 GET key 获取指定 key 的值.3 GETRANGE ...
- 阿里云API网关(4)快速入门(开放 API)
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- Eclipse中JavaSwing图形插件安装
1.在百度中搜索WindowBuilder,找到http://www.eclipse.org/windowbuilder/ 2.点击Download调转到页面: 因为我的eclipse版本是 3.点击 ...