C语言第四次作业
(一)改错题
输出三角形的面积和周长,输入三角形的三条边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
源程序(有错误的程序)
对源程序进行编译,采用每次修改第一个错误并重新编译的方法,记录每个错误的错误信息、分析错误原因并给出正确的语句。
1.错误信息:
错误原因:最后没有用括号扩住
改正方法:用括号收尾,使语句完整
2错误信息:
错误原因:if和else后都没有大括号使语句不完整
改正方法:都加上大括号
3错误信息:
错误原因:||是或 ,if括号后的条件都要满足就应该用&&与
改正方法:把if后的||改为&&
(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
2.对其他你认为需要进行总结的内容进行总结。
1.if和else语句多用于判断2种情况的问题,if和else if是用来判断两种和两种以上情况的问题,而switch case也是用来判断两种和两种以上情况的问题与if else if不同是switch更加便捷
http://www.cnblogs.com/wankun/p/4989831.html
2.运用if else语句镶嵌是注意括号要完整,判断条件之间的关系避免&&||的混淆乱用,计算时设计到小数要用double转型,要给全变量。
(三)实验总结
一题目:
7-1 成绩转换(10 分)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
流程图:
源代码:
include <stdio.h>
int main()
{
int score;
scanf("%d",&score);
switch(score/10)
{
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");
}
return 0;
}
(4)实验分析:主要是分不清switch后面应不应该加:
(5)本题PTA提交列表
五题目:
7-5 三角形判断(10 分)
给定平面上任意三个点的坐标(x
1
,y
1
)、(x
2
,y
2
)、(x
3
,y
3
),检验它们能否构成三角形。
输入格式:
输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标x
1
、y
1
、x
2
、y
2
、x
3
、y
3
。
输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。
流程图:
源代码:
include<stdio.h>
include<math.h>
int main(void)
{
double x1 = 0.0,y1 = 0.0,x2 = 0.0,y2 = 0.0,x3 = 0.0,y3 = 0.0,a = 0.0,b = 0.0,c = 0.0,L = 0.0,A = 0.0,M = 0.0;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
a = pow((pow(x1 - x2,2)+pow(y1 - y2,2)),0.5);
b = pow((pow(x1 - x3,2)+pow(y1 - y3,2)),0.5);
c = pow((pow(x3 - x2,2)+pow(y3 - y2,2)),0.5);
if(a + b > c && a + c > b && b + c > a)
{
L = a + b + c;
M = L / 2.0;
A = pow(M * (M - a) * (M - b) * (M - c),0.5);
printf("L = %.2f, A = %.2f",L,A);
}
else
{
printf("Impossible");
}
return 0;
}
实验分析:主要是忘记math.h,和初始化赋值问题。
本题PTA提交列表
七题目:7-7 两个数的简单计算器(10 分)
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
流程图:
源代码:
include <stdio.h>
include <stdlib.h>
int main()
{
int a,b,c;
char op;
scanf("%d %c %d",&a,&op,&b);
switch(op)
{
case '+':c = a+b;printf("%d",c);break;
case '-':c = a-b;printf("%d",c);break;
case '*':c = a*b;printf("%d",c);break;
case '/':c = a/b;printf("%d",c);break;
case '%':c = a%b;printf("%d",c);break;
default :printf("ERROR");
}
return 0;
}
实验分析:无
本题PTA提交列表
九题目:
7-9 求一元二次方程的根(10 分)
本题目要求一元二次方程的根,结果保留2位小数。
输入格式:
输入在一行中给出3个浮点系数a、b、c,中间用空格分开。
输出格式:
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。
流程图:
源代码:
include <stdio.h>
include <math.h>
int main()
{
double a,b,c,d,e,f,g,x,x1,x2,y1,y2;
scanf("%lf %lf %lf", &a,&b,&c);
d = (b*b)-(4*a*c);
if(d > 0)
{
e = sqrt(d);
f = (-b)/(2*a);
g = e/(2*a);
x1 = f+g;
x2 = f-g;
if(x1 > x2)
{
printf("%.2f\n%.2f",x1,x2);
}
else
{
printf("%.2f\n%.2f",x2,x1);
}
}
if(d < 0)
{
d = (4*a*c)-(b*b);
e = sqrt(d);
x1 = (-b)/(2*a);
x2 = (-b)/(2*a);
g = e/(2*a);
y1 = g;
y2 = -g;
printf("%.2f+%.2fi\n%.2f%.2fi",x1,y1,x2,y2);
}
if(d == 0)
{
x = (-b)/(2*a);
printf("%.2f",x);
}
if(a == 0 && b == 0 && c == 0)
{
printf("Zero Equation");
}
if(a == 0 && b == 0 && c != 0)
{
printf("Not An Equation");
}
return 0;
}
实验分析:根本搞不懂实虚根的问题,最后还是混乱中
本题PTA提交列表
(四)博客互评