C語言程序設計第三次作業——選擇結構(1)


(一)改錯題

計算f(x)的值:輸入實數x,計算並輸出下列分段函數f(x)的值,輸出時保留1位小數。

輸入輸出樣例1:
  Enterr x: 10.0
  f(10.0) = 0.1
輸入輸出樣例2:
  Enter x: 234
  f(234.0) = 234.0
源程序(有錯誤的程序)
#include <stdio.h>
int main(void)
{
double x,y;
printf("Enter x: \n");
scanf("=%f", x);
if(x = 10);
{
y = 1 / x
}
else (x != 10)
{
y = x;
}
printf("f(%.2f) = %.lf\n" x y);
return 0;
}
錯誤信息1:
錯誤原因1:x后面沒有加;
改正方法1:x后面加上;
錯誤信息2:
錯誤原因2:if后邊加了符號;
改正方法2:去掉;
錯誤信息3:
錯誤原因3:沒有加逗號隔開
改正方法3:在“后加上, x后加上,
錯誤信息4:
錯誤原因4:else后邊加了條件
改正方法4:去掉條件

(二)學習總結

1.if(a)if(b) x=x+1;else y=y+1; 的確切含義是什么?這個else應該和哪個if配對?如何明確表達這種配對方法?將該段代碼按照規范化的格式進行書寫。
答:①如果滿足a並且滿足b,x=x+1,否則,y=y+1。 ②與最后一個if配對。 ③加大括號。
if(a&&b)
{
x=x+1;
}
else
{
y=y+1;
}
2.C語言的表達式 (-10< x <10)能夠表達x在區間(-10,10)嗎?為什么?如果不能,正確的表達式應該怎么寫?
答:不能,格式錯誤,-10<x&&x<10。
3.C語言中輸入數據時,如果遇到非法字符,則認為輸入結束。運行程序(1),輸入123a,看看輸出結果是什么?你能解釋是為什么嗎?,
程序(1)
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
結果:a = 123,b = 1;
原因:b隨機分配了一個值。
scanf()函數的返回值是成功讀入數據的個數,如果沒有讀取任何數據,則返回0。運行程序(2),分別輸入123 45和123a,看看輸出結果是什么?為什么?
程序(2)
#include <stdio.h>
int main()
{
int a, b,n;
n = scanf("%d %d", &a, &b);
printf("n = %d\n", n);
return 0;
}
輸入123 45 結果:n = 2,成功讀取到兩個數據 123 ,45,所以n=2
輸入123a 結果:n = 1,成功讀取到1個數據123,所以n=1
修改程序:
#include <stdio.h>
int main()
{
int a,b,n;
scanf("%d %d", &a, &b);
n = scanf("%d %d", &a, &b);
if(n==2)
{
printf("a = %d, b = %d", a, b);
}
else
{
printf("Input error!");
}

     return 0;
}

4對其他你認為需要進行總結的內容進行總結。
scanf()函數的返回值是成功讀入數據的個數,如果沒有讀取任何數據,則返回0,n = scanf("%d %d", &a, &b),我覺得拓展知識很重要啊。。。了解到了新的scanf用處!

(三)實驗總結

本次實驗總結,學號末位數是單數的同學完成選擇結構(1)中的3、5、7、9題,學號末位數是雙數的同學完成選擇結構(1)中的2、4、6、8題。
格式如下:
1.(1)題目
計算分段函數
(2)流程圖

(3)源代碼
# include <stdio.h>
# include <math.h>
int main(void)
{
double x,result;
scanf("%lf",&x);
if(x>=0)
{
result=sqrt(x);

    }
    else
    {
	    result=(x+1)*(x+1)+2*x+1/x;
    }
    printf("f(%.2f) = %.2f",x,result);

    return 0;
 } 

(4)測試數據及運行結果

(5)實驗分析
沒有問題
2.(2)題目
算術入門之加減乘除
對於輸入的兩個整數,按照要求輸出其和差積商
(2)流程圖

(3)源代碼
# include <stdio.h>
int main(void)
{
int a,b,c,d,e;
double f;
scanf("%d %d",&a,&b);
c=a+b;
d=a-b;
e=a*b;
printf("%d + %d = %d\n",a,b,c);
printf("%d - %d = %d\n",a,b,d);
printf("%d * %d = %d\n",a,b,e);
if(a%b==0)
{
f=a/b;
printf("%d / %d = %.f\n",a,b,f);
}
else
{
f=(double)a/b;
printf("%d / %d = %.2f\n",a,b,f);
}

    return 0;
} 

(4)測試數據及運行結果

(5)實驗分析
沒有問題
3.(1)題目
輸出三角形面積和周長(10 分)
本題要求編寫程序,根據輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。注意:在一個三角形中, 任意兩邊之和大於第三邊。
(2)流程圖

(3)源代碼
# include <stdio.h>
# include <math.h>
int main(void)
{
int a,b,c;
double area,perimeter,s;
scanf("%d %d %d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
s=(double)(a+b+c)/2;
area=sqrt(s(s-a)(s-b)*(s-c));
perimeter=a+b+c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else
{
printf("These sides do not correspond to a valid triangle");
}

    return 0;		
 }

(4)測試數據及運行結果

(5)實驗分析
沒有問題
5.(1)題目
本題要求根據某城市普通出租車收費標准編寫程序進行車費計算。具體標准如下:
起步里程為3公里,起步費10元;
超起步里程后10公里內,每公里2元;
超過10公里以上的部分加收50%的回空補貼費,即每公里3元;
營運過程中,因路阻及乘客要求臨時停車的,按每5分鍾2元計收(不足5分鍾則不收費)。
(2)流程圖

(3)源代碼
# include <stdio.h>
int main(void)
{
int h;
double n, money;
scanf("%lf %d",&n,&h);
if(n<=3)
{
money=10;
}
else if(3<n&&n<=10)
{
money=10+(n-3)2;
}
else
{
money=10+(10-3)
2+(n-10)3;
}
money=money+h/5
2;
printf("%.0f",money);

    return 0;
       
} 

(4)測試數據及運行結果

(5)實驗分析
沒有問題
(四)PTA提交列表
PTA中完成選擇結構(1)習題集的提交列表截圖。注意:截圖必須顯示題目集名稱和用戶名


免責聲明!

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



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