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

源程序(有錯誤的程序)

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;        
}

對源程序進行編譯:

錯誤原因:
area=語句最后缺一個小括號。
改正方法:
在area=語句最后加上小括號。

錯誤原因:
if語句缺大括號
改正方法:
if后幾條語句加上大括號

驗證樣例1

驗證樣例2

明顯出現錯誤,與樣例2不符
錯誤原因:
構成三角形的條件編寫錯誤
改正方法:
條件語句改為“( a + b > c && b + c > a && a + c > b)”

結果與樣例2相符,改錯完成。
(二)學習總結

1.在編程解決問題的過程中,我們會用到多個if語句,if...else if... 語句以及switch語句,查閱資料,總結一下這三種情況的區別何在,並分別舉例加以說明。

if語句,if else if語句和switch case語句都屬於流程控制語句。當判斷條件比較少時應用if會比其他兩個要方便,當條件比較多時應該用另外兩種。當使用多個if語句時會對每個語句都進行判斷;對於if.....else if語句的使用會在滿足一個條件后終止判斷,只處理一個滿足條件的語句。在多個判斷條件的情況下,使用if...else if語句相對於使用多個if語句而言,可以減少程序的判斷次數,提高效率。在進行多個條件判斷時還可以使用switch...case,有時候還會比if...else if更加好用,例如判斷那年中某月的天數,應用switch...case。 所有的switch語句都可以用if-else語句來替換(因為if-else語句只需對每個離散值分別做判斷即可),而並不是所有的if-else語句都可以用switch語句來替換(因為區間里值的個數是無限的並且switch所接受的值只能是整型或枚舉型,所以不能用case來一一列舉)。switch...case與if...else if的根本區別在於,switch...case會生成一個跳轉表來指示實際的case分支的地址,而這個跳 轉表的索引號與switch變量的值是相等的。從而,switch...case不用像if...else if那樣遍歷條件分支直到命中條件,而只需訪問對應 索引號的表項從而到達定位分支的目的。
http://www.cnblogs.com/wankun/p/4989831.html
2.對其他你認為需要進行總結的內容進行總結。
該章節學習了switch...case語句,在用switch語句時,總是忘記加break。

(三)實驗總結

本次實驗總結,學號末位數是單數的同學完成選擇結構(2)中的1、5、7、9題,學號末位數是雙數的同學完成選擇結構(2)中的2、4、6、8題。
格式如下:
1
(1)題目
7-2 比較大小(10 分)
本題要求將輸入的任意3個整數從小到大輸出。
(2)流程圖

(3)源代碼

include<stdio.h>

int main()
{
int x,y,z,temp;
scanf("%d %d %d",&x,&y,&z);
if(x>y)
{ temp=x;
x=y;
y=temp;

}
if(x>z)
{
temp=z;
z=x;
x=temp;

}
if(y>z)
{
temp=y;
y=z;
z=temp;

}
printf("%d->%d->%d",x,y,z);

return 0;
}
(4)實驗分析
問題:再做流程圖時總是無法輸出結果
原因:總忘記數字前后加+和‘“”
解決辦法:記得加上+“”
(5)本題PTA提交列表

2
(1)題目
7-4 高速公路超速處罰(10 分)
按照規定,在高速公路上行使的機動車,超出本車道限速的10%則處200元罰款;若超出50%,就要吊銷駕駛證。請編寫程序根據車速和限速自動判別對該機動車的處理。
(2)流程圖

(3)源代碼

include<stdio.h>

int main()
{
int a,b;
double z;
scanf("%d %d",&a,&b);
z=(double)(a-b)/(double)b*100;
if(z<10&&a>b)
{
printf("OK");
}
if(z>=10&&z<50)
{
printf("Exceed %0.f%%. Ticket 200",z);
}
if(z>=50)
{

printf("Exceed %0.f%%. License Revoked",z);
}
return 0;
}
(4)實驗分析

問題:在小於百分之十時應該輸出OK,但是由於沒有加引號,找不到結果沒有辦法輸出。
解決辦法:
在OK輸出框內加上引號。
(5)本題PTA提交列表

3
(1)題目
7-6 計算油費(10 分)
現在90號汽油6.95元/升、93號汽油7.44元/升、97號汽油7.93元/升。為吸引顧客,某自動加油站推出了“自助服務”和“協助服務”兩個服務等級,分別可得到5%和3%的折扣。
本題要求編寫程序,根據輸入顧客的加油量a,汽油品種b(90、93或97)和服務類型c(m - 自助,e - 協助),計算並輸出應付款。
(2)流程圖

(3)源代碼

include<stdio.h>

int main(void)
{
int a,b,c;
double m;
scanf("%d%d %c",&a,&b,&c);
switch(b)
{
case 90:
m = 6.95 * a;
break;
case 93:
m = 7.44 * a;
break;
default:
m = 7.93 * a;
break;
}
if(c == 'm')
{
m = m * 0.95;
}
else
{
m = m * 0.97;
}
printf("%.2f",m);
return 0;
}
(4)實驗分析
問題:無
(5)本題PTA提交列表

4
(1)題目
7-8 12-24小時制(10 分)
編寫一個程序,要求用戶輸入24小時制的時間,然后顯示12小時制的時間。
(2)流程圖

(3)源代碼

include<stdio.h>

int main(void)
{
int a,b;
char c;
scanf("%d%c%d",&a,&c,&b);
if(a>12)
{
a=a-12;
printf("%d:%d PM",a,b);
}
else if(a12)
{
printf("%d:%d PM",a,b);
}
else
{
printf("%d:%d AM",a,b);
}
return 0;
}
(4)實驗分析
問題:if語句中a
12寫成了a=12
解決辦法:等於號相對大於小於不同,需寫成==
(5)本題PTA提交列表

(四)博客互評
郭zx同學:http://www.cnblogs.com/1234569ss/p/7754274.html
不知o同學:http://www.cnblogs.com/panjiupeng/p/7777538.html
慕容紫落同學:http://www.cnblogs.com/ziluo/p/7780500.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM