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=a
b;
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(a
0&&b0&&c0)
{
printf("Zero Equation");
}
else if(a0&&b0)
{
printf("Not An Equation");
}
else if(bb-4ac==0)
{
printf("%.2f",x);
}
else if(b
b-4ac<0)
{
q=(0-b)/(2a);
w=sqrt(4
ac-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

posted on 2017-11-05 10:54  计科二班何强  阅读(1209)  评论(1编辑  收藏  举报