(一)改错题
输出三角形的面积和周长,输入三角形的三条边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:
错误原因:语句缺少半个括号
改正方法:area一行语句后在加半个括号
错误信息2:
错误原因:if语句使用格式错误
改正方法:加大括号
错误信息3:
错误原因:三角形两边和大于第三边应是&&关系
改正方法:

(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。禁止大段复制,要自己对资料进行归纳总结,并给出你参考的资料链接。
语言中iF ElsE语句与switCh语句区别
switch语句,可读性更好,整体流程看起来清晰明确。 if语句适应性更强,可以处理更多的情况。 所有的switch语句都可以写成if的形式,比如 switch(a) { case b: break; case c: break; default: break; } 可以写作 if(a==b)//case b { } else if(...
if和switch的主要区别如下: 1)if的括号内的表达式可以分别是布尔类型的合法表达式、可以是所有大于0的正整数为true,反之为小于等于0的正整数为false、可以是常量、枚举;而switch括号内也符合前面if提到的外,就是当圆括号内为正整数只能是0或...
if () else () else () 括号内可加任意表达式 switch (class ){ case 1: case 2: default: } 这个东西可以连续对某个值进行判断,但是智能判断是否等于某个值,不能用任意表达式。 一般都用if else,不过有时也用switch,比如对一串不知道长度的..
(三)实验总结
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);
if(a>=90)
{
printf("A");
}
else if(a>=80)
{
printf("B");
}
else if(a>=70)
{
printf("C");
}
else if(a>=60)
{
printf("D");
}
else
{
printf("E");
}
return 0;
}
(4)实验分析
(5)本题PTA提交列表

2.三角形判断
(1)题目
给定平面上任意三个点的坐标,检验它们能否构成三角形。
(2)流程图

(3)源代码
include<stdio.h>
include<math.h>
int main()
{
double x1,y1,x2,y2,x3,y3;
double ab,ac,bc;
double length,area;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
ab=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2));
ac=sqrt((x1-x3)(x1-x3)+(y1-y3)(y1-y3));
bc=sqrt((x3-x2)(x3-x2)+(y3-y2)(y3-y2));
if(ab+ac>bc&&ab+bc>ac&&ac+bc>ab)
{
length=ab+ac+bc;
double p=(ab+bc+ac)/2;
area=sqrt(p(p-ab)(p-ac)*(p-bc));
printf("L = %.2f, A = %.2f\n",length,area);
}
else
{
printf("Impossible\n");
}
return 0;
}
(5)本题PTA提交列表

- 两个数的简单计算器
(1)题目
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围
(2)流程图
![]()
(3)源代码
include<stdio.h>
int main()
{
int a = 0,b = 0,c = 0,n = 0;
scanf("%d %c%d",&a,&b,&c);
switch(b)
{
case '+':
n = a + c;printf("%d",n);
break;
case '-':
n = a - c;printf("%d",n);
break;
case'*':
n = a * c;printf("%d",n);
break;
case '/':
n = a / c;printf("%d",n);
break;
case '%':
n = a % c;printf("%d",n);
break;
default:
printf("ERROR");
break;
}
return 0;
}
(5)本题PTA提交列表

4.求一元二次方程的根
(1)题目
本题目要求一元二次方程的根,结果保留2位小数。
(2)流程图

(3)源代码
include<stdio.h>
include<math.h>
int main(void)
{
double a,b,c,d,e,f;
scanf("%lf %lf %lf",&a,&b,&c);
if(a0&&b0)
{
if(c0)
{
printf("Zero Equation");
}
else
{
printf("Not An Equation");
}
}
else
{
d=bb-4ac;
if(d>0)
{
if(a!=0)
{
e=(-b+sqrt(d))/(2a);
f=(-b-sqrt(d))/(2*a);
printf("%.2f\n%.2f",e,f);
}
else
{
e=-c/b;
printf("%.2f",e);
}
}
else if(d0)
{
e=-b/(2a);
printf("%.2f",e);
}
else
{
e=-b/(2a);
f=sqrt(-d)/(2*a);
if(b==0)
{
printf("0.00+%.2fi\n0.00-%.2fi",f,f);
}
else
{
printf("%.2f+%.2fi\n%.2f-%.2fi",e,f,e,f);
}
}
}
return 0;
}
(5)本题PTA提交列表

(四)博客互评
http://www.cnblogs.com/xiaoqi1/p/7784570.html
http://www.cnblogs.com/ziluo/p/7780500.html
http://www.cnblogs.com/123ruike/p/7780510.html
