C语言第四次作业

(一)改错题:
错误信息:

错误原因:sqrt后括号不全,输出格式错误
改错方法:补加括号
错误信息:

错误原因:if格式和else错误
改错方式:if语句和else语句没有加大{},在if后加{},并将
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");加入{}中。
错误信息:

错误原因:逻辑运算错误
改错方式:将if( a + b > c || b + c > a || a + c > b)中判断条件应该是同时满足将||全部改成&&,如if( a + b > c && b + c > a && a + c > b) 。
改正后源程序:

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;        
}

(二)学习总结:
对if和else if还有switch和区别:
首先和if和else if的区别是执行与分开执行,当if和if连接时,执行了一个if判断语句后,不会影响下一个if的执行,每一个if都是独立的,不影响下一个if的输出吗,例如:else if 和if只能输出一个,满足if或满足else if时输出一个就退出输出,而switch的区别是生成一个选择跳出表,case就是跳出单元语句,if和else if可以简单归为一类,属于判断输出语句,而switch和if、else if有过程上的差别,if和else if属于判断循环输出类型,这样虽然节约程序空间,但不足之处也十分明显,就是大大的降低运算效率,要进行许多不必要的运算,而switch是生成一个跳转单元格,并用case来选择跳转数据进行输出,switch的优点很明显就是运算速度快效率高,不足就是大量的case也很占程序空间,而且switch的录入也较if和else if繁琐,switch是将空间转化为速度,而if和else if更为简洁,适用范围广。
参考:
http://blog.csdn.net/niu0niu0/article/details/45365813
http://blog.csdn.net/kehui123/article/details/5298337
(三)实验总结:
(1)题目:
7-1 成绩转换(10 分)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图:

(3)源代码:

include<stdio.h>

int main(void)
{
int grade,b,c;
scanf("%d",&grade);
switch(grade/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)实验分析:将源代码用raptor转换时switch的结构就可以用一个个选择结构代替。
(1)题目:
7-5 三角形判断(10 分)
给定平面上任意三个点的坐标(x1,y1)、(x​2,y2)、(x​3,y3),检验它们能否构成三角形。
(2)流程图:

(3)源代码:

include<stdio.h>

include<math.h>

int main(void)
{
double a,b,c,L,x1,x2,x3,y1,y2,y3,A,s;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
a=sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
b=sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c=sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1));
if(a+c>b&&a+b>c&&b+c>a)
{
L = a + b + c;
s = (a + b + c)/2;
A = sqrt(s * (s - a) * (s - b) * (s - c));
printf("L = %.2f, A = %.2f",L,A);
}
else
{
printf("Impossible");
}
return 0;
}
(4)实验分析:用lf的格式可以输入没有限制
(1)题目:
7-7 两个数的简单计算器(10 分)
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
(2)流程图:

(3)源代码:

include <stdio.h>

include <stdlib.h>

int main()
{
int a,b,result;
char op;
scanf("%d %c%d",&a,&op,&b);
switch(op)
{
case '+':result = a + b;break;
case '-':result = a - b;break;
case '*':result = a * b;break;
case '/':result = a / b;break;
case '%':result = a % b;break;
default :printf("ERROR");
exit(0);
}
printf("%d",result);
return 0;
}
(4)实验分析:raptor中‘’来对符号进行判断,省略char过程
(1)题目:
7-9 求一元二次方程的根(10 分)
本题目要求一元二次方程的根,结果保留2位小数。
(2)流程图:

(3)源代码:

include<stdio.h>

include<math.h>

int main(void)
{
double a,b,c,n,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
n = b * b - 4 * a * c;
if(a == 0 && b == 0 && c == 0)
{
printf("Zero Equation");
}
if(a == 0 && b == 0 && c != 0)
{
printf("Not An Equation");
}
if(n > 0 && a != 0)
{
x1 = (-b + sqrt(n)) / (2 * a);
x2 = (-b - sqrt(n)) / (2 * a);
printf("%.2f\n%.2f",x1,x2);
}
else if(n == 0 && a !=0)
{
x1 = -b / (2 * a);
printf("%.2f",x1);
}
else if(n < 0 && a != 0 && b != 0)
{
b = -b / ( a * 2);
n = fabs(n);
x1 = sqrt(n) / (a * 2);
printf("%.2f+%.2fi\n",b,x1);
printf("%.2f-%.2fi\n",b,x1);
}
else if(a == 0 && b != 0)
{
x1 = -c / b;
printf("%.2f",x1);
}
else if(n < 0 && b == 0 && a !=0)
{
n = fabs(n);
x1 = sqrt(n) / 2;
printf("0.00+%.2fi\n",x1);
printf("0.00-%.2fi",x1);
}
return 0;
}
(4)实验分析:真的是一个很麻烦的流程图!!
(5)本题PTA提交列表:

(四)博客互评:
李晓晓:
http://www.cnblogs.com/Reloaded/p/7753789.html
郭展旭:
http://www.cnblogs.com/1234569ss/p/7754274.html
许天笑:
http://www.cnblogs.com/snxtx/p/7763856.html
感谢老师,助教的悉心指教...谢谢同学们多多指导,共同进步。

posted on 2017-11-04 21:31  笑眼  阅读(500)  评论(3编辑  收藏  举报