C语言程序设计第四次作业

时间:2021-11-30 19:21:58

(一)改错题

输出三角形的面积和周长,输入三角形的三条边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:
C语言程序设计第四次作业
错误原因:少一个右括号。
改正方法:在( s - c )后再加一个右括号。
错误信息2:
C语言程序设计第四次作业
C语言程序设计第四次作业
C语言程序设计第四次作业
错误原因:if后面的语句和else后面的语句没加大括号
改正方法:把if和else后面的语句分别用大括号括起来
错误信息3:样例2输出错误
C语言程序设计第四次作业
错误原因:if里面的判断之间应该用&&连接,||代表或者。
改正方法:将||改为&&
C语言程序设计第四次作业

(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
2.对其他你认为需要进行总结的内容进行总结。
答:1.只需要判断一个条件的时候,使用if语句比较好,但是当判断条件很多的时候,使用多个if语句就不是最好的选择了。
if...else if在任何一个环节满足条件的时候就将会终止判断,只处理一个满足条件的情况。当判断条件较多的情况下,使用switch case语句。
switch判断固定值的时候用,而if建议判断区间或范围的时候用,一般用switch能做的,用if都能做,但是反过来则不行。
举例:
C语言程序设计第四次作业
当条件较少时用if语句很容易,但是条件多就不是很简单了,过程就会很复杂。
C语言程序设计第四次作业
使用if...else if... 语句其实跟if语句差不多,只是省略了些条件,是过程简化,不再看起来那么复杂。
C语言程序设计第四次作业
C语言程序设计第四次作业
这两个比较可看出switch语句能把if...else if... 语句比较复杂的简化,进一步是=使过程清楚易懂,运行起来也更加迅速。

(三)实验总结
1.成绩转换
(1)题目:
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图:
C语言程序设计第四次作业
(3)源程序:

# include <stdio.h>
int main()
{
int score,a;
scanf("%d",&score);
a = score / 10;
switch(a)
{ case 10 : printf("A");break;
case 9 : printf("A");break;
case 8 : printf("B");break;
case 7 : printf("C");break;
case 6 : printf("D");break;
default : printf("E");break; }
return 0;
}

(4)实验分析
想不到case后面应该用什么,没有老师提醒想不到case(score/10)。
要多练习,才能想的到简单的方法。
(5)本题PTA提交列表
C语言程序设计第四次作业
5.三角形判断
(1)题目:给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
(2)流程图:
C语言程序设计第四次作业
(3)源程序:

#include<stdio.h>
#include<math.h>
int main()
{
double x1,y1,x2,y2,x3,y3,a,b,c,s,L,A;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
a=sqrt(pow(x1-x2,2)+pow(y2-y1,2));
b=sqrt(pow(x2-x3,2)+pow(y2-y3,2));
c=sqrt(pow(x1-x3,2)+pow(y3-y1,2));
if(a+b>c&&a+c>b&&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)实验分析:
问题1:在定义某些量时,定义错了他们的类型把double型的定义成了int型,导致错误。
解决办法:判断准确量的类型。
问题2:if语句中的某些符号使用错误,跟之前的混淆。
解决办法:牢记&&和||的用法。
(5)本题PTA提交列表
C语言程序设计第四次作业
7简单的计算器
(1)题目:本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
(2)流程图:
C语言程序设计第四次作业
(3)源程序:

#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,c;
char d;
scanf("%d %c%d",&a,&d,&b);
switch(d)
{
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
c = a / b;
break;
case '%':
c = a % b;
break;
default :
printf("ERROR");
exit(0);
}
printf("%d",c);
return 0;
}

(4)实验分析:
“%c”输入时,空格会对输入造成影响。
解决办法:在前面加上空格。
C语言程序设计第四次作业
(5)本题PTA提交列表
C语言程序设计第四次作业
9.求一元二次方程的根
(1)题目
本题目要求一元二次方程的根,结果保留2位小数。
(2)流程图:
C语言程序设计第四次作业
(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(a==0&&b!=0)
{
y=(0-c)/b;
printf("%.2f",y);
}
else
{
x=((0-b)+sqrt(b*b-4*a*c))/(2*a);
y=((0-b)-sqrt(b*b-4*a*c))/(2*a);
if(a==0&&b==0&&c==0)
{
printf("Zero Equation");
}
else if(a==0&&b==0)
{
printf("Not An Equation");
}
else if(b*b-4*a*c==0)
{
printf("%.2f",x);
}
else if(b*b-4*a*c<0)
{
q=(0-b)/(2*a);
w=sqrt(4*a*c-b*b)/(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)实验分析:
刚开始看这个题时,有点思路,但是写起程序来,真是麻烦,错误百出。
问题1:结果不完全正确。
原因:没有考虑纯虚根。
最后老师提醒:纯虚根的情况,即有虚根的时候,如果实部为0,则实部应该输出0.00.然后输出虚部,不能只输出虚部而没有实部的内容。
(5)本题PTA提交列表:
C语言程序设计第四次作业

(四)博客互评:
C语言程序设计第四次作业——选择结构(2) - 李仁正 - 博客园
http://www.cnblogs.com/lrxlrz/p/7763680.html
C语言程序设计第四次作业 - 范马桶 - 博客园
http://www.cnblogs.com/he111923/p/7772093.html
C语言程序设计第四次作业-选择结构 - WH吴晗 - 博客园
http://www.cnblogs.com/moying456/p/7770919.html