(一)改錯題
輸出三角形的面積和周長,輸入三角形的三條邊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提交列表
(四)博客互評