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:
错误原因:
第13行分号前少了括号
改正方法:
在分号前加括号
错误信息2:
错误原因:
else没有与之匹配的if
改正方法:
把if和else之间的语句用大括号括起来
错误信息3:
错误原因:
输入1 4 1的与答案不符
改正方法:
把if条件中的两个||换为&&
(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
(一)多个if语句,if else if语句和switch case语句都属于流程控制语句。
当需要一个条件时用if语句比较方便.当判断多个条件时,用if...else if...语句或者switch语句更好。
(二)if...else if在任何一个环节满足条件的时候就将会终止判断,只处理一个满足条件的情况。当然要处理多个条件时,多个if语句和if...else if就不好用了,因为要想满足一个条件,就必须把前面的所有条件全部执行找到符合条件在执行,很繁琐。所以就用switch,switch语句后面表达式的结果等于case的数就去直接执行。
(三)if...else if和switch可以相互替换,但不是绝对的替换,switch语句中case语句执行完了后面普遍加break,如果不加break就一直执行下去,而if...else if不行
(四)多个if语句需要全部执行完
(五)我的链接地址:http://www.cnblogs.com/wankun/p/4989831.
if(条件1){
echo "语句";
}else if(条件2){
echo "语句";
}
else{
echo "语句";
}
需要逐层判断;
而switch case 语句为:
对表达式进行计算后直接寻找正确的case。
2.对其他你认为需要进行总结的内容进行总结。
switch语句根据情况判定是否加在case语句执行完后加上break.记住表达式中字符的的表达方式.解决输入字符空格的问题,在输入时%c前加一个空格。读走多余的回车符:
include <stdio.h>
int main()
{
char ch1, ch2;
ch1 = getchar(); printf("ch1=%c\n", ch1); getchar();
ch2 = getchar(); printf("ch2=%c\n", ch2); return 0;
}
(三)实验总结
7-1 成绩转换
(1)题目
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
switch(a/10)
{ case 10:
case 9:
printf("A");break;
case 8:
printf("B");break;
case 7:
printf("C");break;
case 6:
printf("D");break;
default:
printf("E") ;
}
return 0;
}
(4)实验分析
无问题
(5)本题PTA提交列表
7-5 三角形判断
(1)题目
给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
检验它们能否构成三角形。
(2)流程图
(3)源代码
include<stdio.h>
include<math.h>
int main()
{
double a,b,c,d,e,f,x,y,z,s,l,m;
scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f);
x = sqrt((a-c)*(a-c)+(b-d)*(b-d));
y = sqrt((a-e)*(a-e)+(b-f)*(b-f));
z = sqrt((e-c)*(e-c)+(f-d)*(f-d));
if(x+y>z && x+z>y && z+y>x)
{
l = x + y + z;
s = (x+y+z)/2;
m = sqrt(s*(s-x)*(s-y)*(s-z));
printf("L = %0.2f, A = %0.2f",l,m);
}
else
{
printf("Impossible");
}
return 0;
}
(4)实验分析
问题一:没有把三条边规定为double类型
原因:没看清题
改正方法:把int x,y,z换为double x,y,z
(5)本题PTA提交列表
7-7 两个数的简单计算器
(1)题目
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int a,b,c;
char op;
scanf("%d %c %d",&a,&op,&b);
if(op == '+')
{
c=a+b;
printf("%d",c);
}
else if(op == '-')
{
c=a-b;
printf("%d",c);
}
else if(op == '')
{
c=ab;
printf("%d",c);
}
else if(op == '/')
{
c=a/b;
printf("%d",c);
}
else if(op == '%')
{
c=a%b;
printf("%d",c);
}
else
{
printf("ERROR");
}
return 0;
}
(4)实验分析
没问题
(5)本题PTA提交列表
7-9 求一元二次方程的根
(1)题目
本题目要求一元二次方程的根,结果保留2位小数。
(2)流程图
(3)源代码
include<stdio.h>
include<math.h>
int main()
{
double a,b,c,x,y,q,w,e;
scanf("%lf%lf%lf",&a,&b,&c);
if(a0&&b!=0)
{
y=(0-c)/b;
printf("%.2f",y);
}
else
{
x=((0-b)+sqrt(bb-4ac))/(2a);
y=((0-b)-sqrt(bb-4ac))/(2a);
if(a0&&b0&&c0)
{
printf("Zero Equation");
}
else if(a0&&b0)
{
printf("Not An Equation");
}
else if(bb-4ac==0)
{
printf("%.2f",x);
}
else if(bb-4ac<0)
{
q=(0-b)/(2a);
w=sqrt(4ac-bb)/(2*a);
printf("%.2f+%.2fi\n",q,w);
printf("%.2f-%.2fi\n",q,w);
}
else if(x!=y)
{
if(x<y)
{e=x;x=y;y=e;}
else
printf("%.2f\n%.2f",x,y);
}
return 0;
}
}
(4)实验分析
没问题
(5)本题PTA提交列表
(四)博客互评
对李攀的评价:学习总结中多个if语句与if..else if、switch的区别没给出。也没有给出相应的链接,不过if...else if与switch的区别区分的很好,还给出了例子、扩展。7-1的流程图有点迷。最后也没见到给其他同学的评论只给了链接。李攀的博客地址:http://www.cnblogs.com/lipan123/p/7778208.html
对吉炎臣的评价:字有点小,流程图看不清别的还行。博客地址:http://www.cnblogs.com/yahaha/p/7784798.html
对任佳鹏的评价:刚看学习总结时有点迷,把题要求写出来再做答很好。实验总结应该在没个题做完后给出pta的图,别的可以吧。博客地址:http://www.cnblogs.com/rjp123/p/7701862.html