(一)改错题
错误信息1:
错误原因:area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ); 后面丢了半个括号
改正方法:area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ));
错误信息2:
错误原因:if与else中的语句没有加括号
改正方法:在每一个条件前后加括号
错误信息3:
错误原因:三边判定有问题
改正方法:三角形两边之和大于第三边应该是并且的关系用&&连接而不是||
(二)学习总结
1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
答:多个if是所有的if都会进行判断if else if是只要有满足条件的,就不再对之后的else if进行判断。
比如
a = 2;
if(a==1) c=1;
if(a==2) c=2;
if(a%2==0) c=3;
最终结果c=3
a=2;
if(a==1) c=1;
else if(a==2) c=2;
else if(a%2==0) c=3;
最终结果c=2
else if和switch
比如
switch( a )
{
case 1:
case 2:
case 3:
case 4:
break;
}
这样就是 if if了,所有的1,2,3,4满足条件的都会执行一次
switch( a )
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
这样就是else if了,只要满足条件就跳出了
http://blog.csdn.net/yuxin1100/article/details/51683857
2.对其他你认为需要进行总结的内容进行总结。
答:在switch中,有些情况不需要每个case后都加break;字符型数据和整型数据是通用的,他们既可以用字符形式输出(“%c”),也可以用整数型(“%d”)。
(三)实验总结
1 成绩转换
(1)题目
本题要求编写程序将一个百分制成绩转换为五分制成绩。
(2)流程图
(3)源代码
# include <stdio.h>
int main()
{
int c;
scanf("%d", &c);
switch(c/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)实验分析
问题:switch语句总出问题
原因:在语句中case后忘加:
解决方法:加上;
(5)本题PTA提交列表
5.三角形判断
(1)题目:三角形判断
给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
(2)流程图
(3)源代码
#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;
}
(4)实验分析
问题:不清楚如何利用点坐标来算长度
原因:第一次接触这样的题不太明白
解决办法:问老师和助教,了解运算公式和步骤
(5)本题PTA提交列表
7.两个数的简单计算器
(1)题目:
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
(2)流程图
(3)源代码
# 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;
}
(4)实验分析
本题无特别困难地方,只要注意细节就好
(5)本题PTA提交列表
9.求一元二次方程的根
(1)
本题目要求一元二次方程的根,结果保留2位小数。
(2)流程图
(3)源代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
double d, del, ans1, ans2;
d = b * b - 4.0 * a * c;
if(a == b && a == c && a == 0)
printf("Zero Equation\n");
else if(a == b && a == 0 && c != 0)
printf("Not An Equation\n");
else if(d == 0)
{
ans1 = (-b) / (2.0*a);
printf("%.2f\n", ans1);
}
else if(a == 0)
printf("%.2f\n", (-c) / b);
else if(d > 0)
{
del = sqrt(d);
ans1 = (-b+del) / (2.0*a);
ans2 = (-b-del) / (2.0*a);
printf("%.2f\n%.2f\n", ans1, ans2);
}
else if(d < 0)
{
del = sqrt(-d);
if(b != 0)
ans1 = (-b) / (2.0*a);
else
ans1 = 0;
ans2 = del / (2.0*a);
printf("%.2f+%.2fi\n%.2f-%.2fi\n", ans1, ans2, ans1, ans2);
}
return 0;
}
(4)实验分析
问题:输出结果总是部分正确。
原因:没有考虑清楚纯虚根的情况。
解决办法:纯虚根的情况,即有虚根的时候,如果实部为0,则实部应该输出0.00.然后输出虚部,不能只输出虚部而没有实部的内容。
(5)本题PTA提交列表
(四)博客互评
(1)风力你在http://www.cnblogs.com/GX201701-/p/7765475.html
内容:你交作业很快,这个是蛮佩服的,下次记得源代码要和老师的格式一样就更好了
(2)Religious http://www.cnblogs.com/lyw7777777/p/7784774.html
内容:结构挺清晰的,要是改错题每个错误之间留一下空间,就更清晰了
(3)李攀¥http://www.cnblogs.com/lipan123/p/7778208.html
内容:你第二题忘了给链接了哎,最后一大题的源代码格式不太对哎,希望以后能更加完善呀。
老师,助教,辛苦了