- 算法競賽寶典(第一部):語言及算法入門
- 張新華
- 840字
- 2021-03-19 19:27:44
順序結構
順序結構如同自然語言中的文章一樣,按照事件的發展順序,依次自上而下書寫需要的程序語句,并以語句出現的順序來執行。
【例題描述】 魔法石檢驗
魔法的能量是從魔法石中提取的,如圖2.1所示。每一塊魔法石的價值由一個三位整數表示,其中百位數表示等級,十位數表示類別,個位數表示純凈度。現已知一個魔法石的三位數表示,試分別輸出該魔法石的等級、類別、純凈度。
圖2.1
題目本質是分解一個三位整數,而取余運算可以得到數據的各個位數。因此對實際分解過程進行模擬,即不斷取余,依次得到數據的各個位數。例如分解數據398,采用的方案為:
(1)取其個位:398%10=8
(2)取其十位:398/10%10=9
(3)取其百位:398/100=3
參考程序如下所示:
1 //魔法石檢驗
2 #include <iostream>
3 using namespace std;
4
5 int main()
6 {
7 int num; //先定義變量
8 int hundred,ten,indiv;
9 cout<<"請輸入一個三位數";
10 cin>>num; //輸入一個三位數
11 hundred=num/100; //分解百位數
12 ten=num/10%10; //分解十位數
13 indiv=num%10; //分解個位數
14 cout<<"百位數為"<<hundred<<endl; //輸出
15 cout<<"十位數為"<<ten<<endl;
16 cout<<"個位數為"<<indiv<<endl;
17 system("pause");
18 return 0;
19 }
【例題描述】 小數的四舍五入
魔法世界用于魔法石能量檢驗的儀器可以精確到小數點后7位,但一般使用時只需對小數點后第三位四舍五入就可以了,現輸入一個實數,實現小數點后第三位的四舍五入,例如輸入1.235,輸出1.24。
設輸入的實數為x,假設要操作的數據x=2.3567,如果希望保留兩位小數從第三位實現四舍五入,那么執行x=(int)(x*100+0.5),即2.3567×100+0.5來實現第三位的進位。
要想保留兩位小數,則取整以后進行整除,即x/=100。
參考代碼如下所示:
1 //小數的四舍五入
2 #include <iostream>
3 #include <iomanip>
4 using namespace std;
5
6 int main()
7 {
8 double x;
9 cout<<"請輸入一個雙精度數";
10 cin>>x;
11 x=(int)(x*100+0.5);
12 x/=100;
13 cout<<setprecision(2)<<fixed<<x<<endl;
14 system("pause");
15 return 0;
16 }
【上機實踐】 求三角形面積
如圖2.2所示,三角形魔法陣是魔法師公認的最強大的陣形之一,因為三角形有著穩固、堅定、耐壓的特點。現輸入三角形的三邊長,求三角形面積(假設輸入的a、b、c能構成三角形)。
圖2.2
已知三角形三條邊的長度a、b、c,求三角形面積S,可以使用海倫公式,海倫公式是這樣的:
設
,則
。
求一個數的平方根可以使用sqrt函數,例如sqrt(16)的結果是4。使用sqrt函數需在程序開頭寫#include <math.h>,即包含數學頭文件。
核心偽代碼為:
1 注意要包含數學頭文件 2 定義浮點數a,b,c,p,area 3 輸入a、b、c的值 4 計算p的值 5 計算面積值area 6 輸出面積值area
注意,計算p的值不能這樣寫:p=1/2*(a+b+c),而應該寫成p=1.0/2*(a+b+c),或者p=(a+b+c)/2。為什么要用1.0而不是1呢,這是因為如果是1/2,系統將會視之為兩個整型數據相除,得到的值也是一個整型數,即1/2的結果舍棄小數部分后結果為0,而0乘以任何數也為0。
這種錯誤一般都非常隱蔽,在編程中要特別小心。
【上機實踐】 求一元二次方程的根
含有一個未知數,且未知數的最高次數是2的整式方程叫作一元二次方程,其一般形式為ax2+bx+c=0(a≠0)。如圖2.3所示,魔法學院圖書館珍藏著據說是上古時代古巴比倫人的《泥板文書》的魔法古籍中,就記載有求解一元二次方程根的解法。現已知一元二次方程ax2+bx+c=0,其中a、b、c由鍵盤輸入,試求出方程的根。為了簡便起見,假設輸入的a、b、c三個值后b2-4ac≥0。例如當程序運行時輸入165,輸出結果為x1=-1 x2=-5。
圖2.3
此題可以使用求一元二次方程式的求根公式
,
即
設
則x1=p+q,x2=p-q
核心偽代碼為:
1 定義a,b,c,disc,p,q 2 輸入a,b,c的值 3 計算b*b-4*a*c值給disc 4 計算p的值 5 計算q的值 6 輸出x1、x2的值