c++運(yùn)算的流程控制(2016.5.21)_第1頁(yè)
c++運(yùn)算的流程控制(2016.5.21)_第2頁(yè)
c++運(yùn)算的流程控制(2016.5.21)_第3頁(yè)
c++運(yùn)算的流程控制(2016.5.21)_第4頁(yè)
c++運(yùn)算的流程控制(2016.5.21)_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、0西安交通大學(xué)西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心http:/http:/2013.92013.9第3章 運(yùn)算的流程控制C+程序設(shè)計(jì)教程程序設(shè)計(jì)教程西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心內(nèi)容提要程序的執(zhí)行順序程序的執(zhí)行順序循環(huán)循環(huán)分支分支1西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心3.1 程序的執(zhí)行順序 C+C+程序從程序從mainmain函數(shù)開(kāi)始,按順序逐行執(zhí)行每一條語(yǔ)函數(shù)開(kāi)始,按順序逐行執(zhí)行每一條語(yǔ)句。句。 程序的執(zhí)行是有順序的程序的執(zhí)行是有順序的 從上到下,如果不是循環(huán),執(zhí)行過(guò)的不會(huì)反復(fù)從上到下,如果不是循環(huán),執(zhí)行過(guò)的不會(huì)反復(fù)! 兩類(lèi)語(yǔ)

2、句可以控制方向兩類(lèi)語(yǔ)句可以控制方向 循環(huán),可以有條件地重復(fù)執(zhí)行某些語(yǔ)句循環(huán),可以有條件地重復(fù)執(zhí)行某些語(yǔ)句 分支,可以有選擇地跨過(guò)某些語(yǔ)句分支,可以有選擇地跨過(guò)某些語(yǔ)句2西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心3.2 多次加工循環(huán)程序設(shè)計(jì) 3.2.1 3.2.1 已知次數(shù)的循環(huán)已知次數(shù)的循環(huán)for (=; ;) 例如例如int i=0,n=10,sum=0;for(i=0;in;i+) sum=sum+i; /結(jié)果結(jié)果? 分程序,局部變量分程序,局部變量3西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 forfor語(yǔ)句更一般的形式為:語(yǔ)句更一般的形式為:for(

3、;)表達(dá)式可以省略(不推薦)表達(dá)式可以省略(不推薦)for(;)(;)4西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【例【例3-13-1】計(jì)算兩個(gè)】計(jì)算兩個(gè)n n維向量的夾角。設(shè)維向量的夾角。設(shè) 是兩是兩個(gè)個(gè)n n維向量,計(jì)算它們的夾角。要求程序循環(huán)提示用維向量,計(jì)算它們的夾角。要求程序循環(huán)提示用戶(hù)輸入向量并進(jìn)行計(jì)算。戶(hù)輸入向量并進(jìn)行計(jì)算。 【問(wèn)題分析問(wèn)題分析】5西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【算法】計(jì)算向量的夾角。設(shè)向量用數(shù)組【算法】計(jì)算向量的夾角。設(shè)向量用數(shù)組aNbNaNbN表示。表示。輸入兩個(gè)向量;輸入兩個(gè)向量;計(jì)算計(jì)算a,b的內(nèi)積的內(nèi)積

4、innerproduct: innerproduct=0 對(duì)對(duì)i=0,.,n-1 計(jì)算計(jì)算innerproduct= innerproduct+ai*bi計(jì)算計(jì)算a,b的模的模modea,modeb;計(jì)算計(jì)算cosinetheta=innerproduct/modea/modeb計(jì)算計(jì)算theta=arccosin(cosinetheta)輸出輸出theta轉(zhuǎn)轉(zhuǎn)6西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的頭文件包含需要的頭文件#include /求數(shù)學(xué)需要的頭文件求數(shù)學(xué)需要的頭文件using namespace std; /名字空間名字

5、空間int main()/主函數(shù)主函數(shù) const int N=100;/定義常量定義常量,表示數(shù)組能容納的最大元素?cái)?shù)表示數(shù)組能容納的最大元素?cái)?shù)const double PAI=3.1415926;/定義常量,表示圓周率定義常量,表示圓周率 double aN,bN;/定義數(shù)組,存放兩個(gè)向量定義數(shù)組,存放兩個(gè)向量double modea,modeb;/定義變量,分別表示兩個(gè)向量的模定義變量,分別表示兩個(gè)向量的模double innerproduct,cosinetheta,theta;/定義變量,分別表定義變量,分別表示內(nèi)積、余弦,夾角示內(nèi)積、余弦,夾角int n,i; /n表示向量的實(shí)際維數(shù)

6、,表示向量的實(shí)際維數(shù),i是循環(huán)變量是循環(huán)變量7西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心for(;)/循環(huán),不斷接受用戶(hù)輸入并計(jì)算向量的夾角循環(huán),不斷接受用戶(hù)輸入并計(jì)算向量的夾角cout0):;/提示提示cinn;/輸入向量的實(shí)際維數(shù)輸入向量的實(shí)際維數(shù)cout請(qǐng)輸入向量請(qǐng)輸入向量a:;/提示提示for(i=0;iai;cout請(qǐng)輸入向量請(qǐng)輸入向量b:;for(i=0;ibi;8西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心innerproduct=0;/變量賦初始值,開(kāi)始為變量賦初始值,開(kāi)始為0modea=0;modeb=0;for(i=0;in;i+)/逐步求

7、和,加逐步求和,加n次次innerproduct= innerproduct+ai*bi;/內(nèi)積內(nèi)積modea=modea+ai*ai;/向量向量a的模的平方的模的平方modeb=modeb+bi*bi;/向量向量b的模的平方的模的平方modea=sqrt(modea);/開(kāi)方,得開(kāi)方,得a的模的模modeb=sqrt(modeb);/開(kāi)方,得開(kāi)方,得b的模的模cosinetheta=innerproduct/modea/modeb;/夾角余弦?jiàn)A角余弦theta=acos(cosinetheta); /夾角弧度夾角弧度theta=theta/PAI*180;/夾角度夾角度cout它們的夾角為它

8、們的夾角為:thetaendl;/顯示顯示/會(huì)進(jìn)入下一循環(huán)會(huì)進(jìn)入下一循環(huán)return 0; 9西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【思路擴(kuò)展思路擴(kuò)展】 程序中最外面的循環(huán)是死循環(huán),雖然實(shí)現(xiàn)了題目要求的程序中最外面的循環(huán)是死循環(huán),雖然實(shí)現(xiàn)了題目要求的功能,但不能算好程序。請(qǐng)思考,能否使用功能,但不能算好程序。請(qǐng)思考,能否使用for循環(huán),實(shí)循環(huán),實(shí)現(xiàn)當(dāng)用戶(hù)輸入的維數(shù)是現(xiàn)當(dāng)用戶(hù)輸入的維數(shù)是0或負(fù)數(shù)時(shí)退出循環(huán),結(jié)束程序?或負(fù)數(shù)時(shí)退出循環(huán),結(jié)束程序?10西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心3.2.2 依據(jù)條件進(jìn)行循環(huán) 1.1.當(dāng)型循環(huán)當(dāng)型循環(huán)while(

9、) 2.2.直到型循環(huán)直到型循環(huán)do while();11西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【例【例3-23-2】計(jì)算】計(jì)算e e的近似值。數(shù)學(xué)上,證明的近似值。數(shù)學(xué)上,證明 的極限是存在的,記為的極限是存在的,記為e e。對(duì)函數(shù)。對(duì)函數(shù)e ex x作泰勒展開(kāi),當(dāng)作泰勒展開(kāi),當(dāng)x=1x=1時(shí)時(shí)編程計(jì)算編程計(jì)算e e的近似值,當(dāng)最后一項(xiàng)小于的近似值,當(dāng)最后一項(xiàng)小于1010-16-16時(shí)停止計(jì)算時(shí)停止計(jì)算。輸出保留到小數(shù)點(diǎn)后。輸出保留到小數(shù)點(diǎn)后1616位。位。12,.)3 , 2 , 1( ,n11annn.!1.! 31! 21! 111en西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)

10、中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【問(wèn)題分析問(wèn)題分析】 階乘如何計(jì)算?階乘如何計(jì)算? 通項(xiàng)如何計(jì)算?通項(xiàng)如何計(jì)算? 如何求和?如何求和? 如何保留小數(shù)點(diǎn)后如何保留小數(shù)點(diǎn)后16位?位?13西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【算法】【算法】用用e表示表示“e”的近似值,的近似值,u表示通項(xiàng),表示通項(xiàng),n表示項(xiàng)的序號(hào)表示項(xiàng)的序號(hào),初始時(shí):,初始時(shí): e=1,u=1,n=1計(jì)算新通項(xiàng)計(jì)算新通項(xiàng)u=u/n; 加到近似解加到近似解e中:中:e=e+u; 構(gòu)造下一項(xiàng)的分母構(gòu)造下一項(xiàng)的分母n:n=n+1;若若e=1.0e-16,轉(zhuǎn)。(滿(mǎn)足某條件時(shí)轉(zhuǎn)到前面某步,轉(zhuǎn)。(滿(mǎn)足某條件時(shí)轉(zhuǎn)

11、到前面某步,就是循環(huán))就是循環(huán)) 輸出輸出e。14西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的頭文件包含需要的頭文件using namespace std; /名字空間名字空間int main()/主函數(shù)主函數(shù) double e,u,n;/定義變量,表示定義變量,表示e,通項(xiàng),通項(xiàng)分母通項(xiàng),通項(xiàng)分母e=1;/e的初始值的初始值u=1;/通項(xiàng)初始值通項(xiàng)初始值n=1;/通項(xiàng)分母初始值通項(xiàng)分母初始值cout.setf(ios:fixed); /定點(diǎn)顯示定點(diǎn)顯示cout.precision(20);/精度精度,與上句結(jié)合與上句結(jié)合,小數(shù)點(diǎn)后的數(shù)位

12、小數(shù)點(diǎn)后的數(shù)位15西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心dou=u/n;/構(gòu)造新通項(xiàng)構(gòu)造新通項(xiàng)e=e+u;/加到近似值中加到近似值中n+;/新通項(xiàng)的分母新通項(xiàng)的分母coute1.0E-15);/不滿(mǎn)足精度時(shí)循環(huán)不滿(mǎn)足精度時(shí)循環(huán)return 0;【思考題思考題】上述循環(huán)可以用上述循環(huán)可以用while,forwhile,for嗎?如何用?嗎?如何用?16西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心3.3 不同情況分別處理分支 3.3.1 3.3.1 特殊情況特殊處理(單路分支)特殊情況特殊處理(單路分支)if () 17條件條件語(yǔ)句塊語(yǔ)句塊truefalse西

13、安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【例【例3-33-3】用戶(hù)輸入一個(gè)四個(gè)字母的英文單詞,如果】用戶(hù)輸入一個(gè)四個(gè)字母的英文單詞,如果其中的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母,然后輸出該單詞其中的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母,然后輸出該單詞。 【算法】【算法】輸入輸入4個(gè)字母的單詞;個(gè)字母的單詞;對(duì)每一個(gè)字母對(duì)每一個(gè)字母c 如果如果 c=97 c=c-32;輸出單詞。輸出單詞。18西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的頭文件包含需要的頭文件using namespace std;/名字空間名字空間int main()/主函數(shù)主函

14、數(shù) char word20; /定義字符數(shù)組存放字符。定義字符數(shù)組存放字符。int i;cinword;/輸入單詞輸入單詞i=0;19西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心while(wordi!=0)if (wordi97)/判斷字符是否在判斷字符是否在97,122之間之間wordi=wordi-32; /如果是,則轉(zhuǎn)大寫(xiě)如果是,則轉(zhuǎn)大寫(xiě)i+;coutword0? 0? 西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 二路分支二路分支if () else 23條件條件if塊塊truefalseelse塊塊西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)

15、實(shí)驗(yàn)中心【算法】輸入輸入a,b,c;如果如果a=0, 如果如果b=0, 輸出輸出“輸入的系數(shù)不構(gòu)成方程輸入的系數(shù)不構(gòu)成方程”; 否則(即否則(即b0) 計(jì)算單根計(jì)算單根x=-c/b 輸出單根輸出單根x 24西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心否則(即否則(即a0) 計(jì)算計(jì)算delta=b*b-4*a*c 如果如果 delta0 delta=sqrt(delta) 輸出輸出x1=(-b+delta)/2a和和x2=(-b-delta)/2a 否則否則 delta=sqrt(-delta) 輸出輸出f復(fù)根復(fù)根: x1=-b/2a+j*delta/2a; x2=-b/2a-j

16、*delta/2a(注意注意j是虛數(shù)單位是虛數(shù)單位) 結(jié)束結(jié)束25西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的頭文件包含需要的頭文件#include /求根函數(shù)求根函數(shù)sqrt需要的頭文件需要的頭文件using namespace std; /名字空間名字空間int main()/主函數(shù)主函數(shù) double a,b,c;/定義變量保存系數(shù)定義變量保存系數(shù)double delta;/表示根的判別式表示根的判別式double x,x1,x2;/表示根表示根coutabc;/輸入一元二次方程的系數(shù)輸入一元二次方程的系數(shù)26西安交通大學(xué)計(jì)算機(jī)教學(xué)

17、實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心if(a=0)/二次項(xiàng)系數(shù)等于二次項(xiàng)系數(shù)等于0if(b=0)/一次項(xiàng)系數(shù)也等于一次項(xiàng)系數(shù)也等于0,不是方程,不是方程cout輸入的系數(shù)不構(gòu)成方程輸入的系數(shù)不構(gòu)成方程endl;else/二次項(xiàng)系數(shù)等于二次項(xiàng)系數(shù)等于0,一次項(xiàng)系數(shù)不為,一次項(xiàng)系數(shù)不為0,一次方程,一次方程x=-c/b;/計(jì)算單根計(jì)算單根cout實(shí)際為一元一次方程,根為實(shí)際為一元一次方程,根為x=0)/判別式大于等于判別式大于等于0,有實(shí)根,有實(shí)根delta=sqrt(delta);/判別式開(kāi)方判別式開(kāi)方x1=(-b+delta)/2.0/a;/根根1x2=(-b-delta)/2.0/a;/根

18、根2cout方程有實(shí)根,它們是方程有實(shí)根,它們是:endl;/顯示根顯示根coutx1=x1, x2=x2endl;/ 28西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心else/判別式小于判別式小于0,有復(fù)根,有復(fù)根delta=sqrt(-delta);/判別式變號(hào)開(kāi)方判別式變號(hào)開(kāi)方x1=-b/2.0/a;/實(shí)部實(shí)部x2=delta/2.0/a;/虛部虛部cout方程有復(fù)根,它們是方程有復(fù)根,它們是:endl;/coutx1=x1+jx2, x2=x1-jx2endl;/打印復(fù)根打印復(fù)根return 0;29西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 【程序測(cè)

19、試】【程序測(cè)試】要檢驗(yàn)程序的正確性,還應(yīng)設(shè)計(jì)哪些測(cè)試用例?要檢驗(yàn)程序的正確性,還應(yīng)設(shè)計(jì)哪些測(cè)試用例?30西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心3.3.3 多種情況分類(lèi)處理(多重分支switch)有一批考試成績(jī)數(shù)據(jù)保存在文件有一批考試成績(jī)數(shù)據(jù)保存在文件score.txt中,每行的格式中,每行的格式是:編號(hào)、姓名和成績(jī),各項(xiàng)之間用空格隔開(kāi),每個(gè)人是:編號(hào)、姓名和成績(jī),各項(xiàng)之間用空格隔開(kāi),每個(gè)人是一行。請(qǐng)編程統(tǒng)計(jì)是一行。請(qǐng)編程統(tǒng)計(jì)90-100、80-89、70-79、60-69及不及及不及格的人數(shù),統(tǒng)計(jì)平均成績(jī)。文件的內(nèi)容如下所示:格的人數(shù),統(tǒng)計(jì)平均成績(jī)。文件的內(nèi)容如下所示:9

20、070201 陳壓蕾陳壓蕾759070202 李云李云459070203 李琴靜李琴靜459070204 陸蘭春陸蘭春689070205 胡燕貞胡燕貞75. 這個(gè)問(wèn)題的求解有兩個(gè)關(guān)鍵,一是讀取文件中的數(shù)據(jù);二這個(gè)問(wèn)題的求解有兩個(gè)關(guān)鍵,一是讀取文件中的數(shù)據(jù);二是統(tǒng)計(jì)是統(tǒng)計(jì)31西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 1.1.文件的讀取文件的讀取在程序文件開(kāi)頭包含頭文件在程序文件開(kāi)頭包含頭文件在程序中使用下列各式定義文件對(duì)象(相當(dāng)于變量):在程序中使用下列各式定義文件對(duì)象(相當(dāng)于變量):ifstream ; /例如:例如:ifstream in;打開(kāi)文件,格式:打開(kāi)文件,格式:

21、.open(); /例如:例如:in.open(“score.txt”);讀取文件的內(nèi)容。讀取文件的內(nèi)容。 變量變量; /例如:例如:innumber;關(guān)閉文件。關(guān)閉文件。 .close();32西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 讀取文件時(shí),系統(tǒng)中有一個(gè)隱形的讀取文件時(shí),系統(tǒng)中有一個(gè)隱形的“指針指針”,打開(kāi),打開(kāi)文件后,指針指向文件內(nèi)容的開(kāi)頭,每讀取一個(gè)數(shù)文件后,指針指向文件內(nèi)容的開(kāi)頭,每讀取一個(gè)數(shù)據(jù),指針就向后移動(dòng)一個(gè)數(shù)據(jù)單位,指向剛讀數(shù)據(jù)據(jù),指針就向后移動(dòng)一個(gè)數(shù)據(jù)單位,指向剛讀數(shù)據(jù)的下一個(gè)字符。例如:的下一個(gè)字符。例如:number,namenumber,nam

22、e為字符數(shù)組,為字符數(shù)組,scorescore為雙精度變量,則為雙精度變量,則innumber;/讀取第讀取第1行的學(xué)號(hào)行的學(xué)號(hào)inname; /讀取第讀取第1行的姓名行的姓名inscore;/讀取第讀取第1行的分?jǐn)?shù)。行的分?jǐn)?shù)。 如果將上述三行再重復(fù)一次,讀取的就是第如果將上述三行再重復(fù)一次,讀取的就是第2 2行的數(shù)行的數(shù)據(jù)。如果用循環(huán),就可以逐步讀取若干行數(shù)據(jù)。據(jù)。如果用循環(huán),就可以逐步讀取若干行數(shù)據(jù)。33西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 C+C+還提供一個(gè)函數(shù)還提供一個(gè)函數(shù)eof()eof()來(lái)測(cè)試是否到達(dá)文件末尾來(lái)測(cè)試是否到達(dá)文件末尾,如果是函數(shù)結(jié)果為,如果是

23、函數(shù)結(jié)果為truetrue,否則為,否則為falsefalse。可以依此。可以依此作為是否繼續(xù)讀取的條件,使用格式如下:作為是否繼續(xù)讀取的條件,使用格式如下:.eof() 例如:例如:in.eof()in.eof(),它一般不單獨(dú)作為語(yǔ)句,常作為,它一般不單獨(dú)作為語(yǔ)句,常作為ifif、whilewhile語(yǔ)句的條件。語(yǔ)句的條件。34西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心2.分段成績(jī)的統(tǒng)計(jì) scorescore表示成績(jī),表示成績(jī),gradei,i=0-4gradei,i=0-4表示表示90,80,.,90,80,.,各各段成績(jī)的人數(shù)段成績(jī)的人數(shù), ,初始均為初始均為0 0i

24、f (score=90) grade0+; else if(score=80) grade1+; else if (score=70) grade2+; else if( score=60) grade3+; else grade4+; 35switch(score/10) case 100:case 9: grade0+;break;case 8: grade1+;break;case 7: grade2+;break;case 6: grade3+;break;default: grade4+;西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心2.分段成績(jī)的統(tǒng)計(jì)switch()c

25、ase : case : .case : default: 36西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【算法】number表示學(xué)號(hào),表示學(xué)號(hào),name表示姓名,表示姓名,score表示成績(jī),表示成績(jī),sum表示總成績(jī),表示總成績(jī),average表示平均成績(jī),表示平均成績(jī),count表示人數(shù)。開(kāi)表示人數(shù)。開(kāi)始始sum=0,count=0。c9,c8,c7,c6,c5分別表示五個(gè)成績(jī)段的人分別表示五個(gè)成績(jī)段的人數(shù),開(kāi)始時(shí)它們均為數(shù),開(kāi)始時(shí)它們均為0。打開(kāi)文件。打開(kāi)文件。如果是文件結(jié)束,轉(zhuǎn);否則執(zhí)行下一步。如果是文件結(jié)束,轉(zhuǎn);否則執(zhí)行下一步。讀取學(xué)號(hào)、姓名和成績(jī)至讀取學(xué)號(hào)、姓名

26、和成績(jī)至number、name和和scoresum=sum+score,count=count+1。37西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心計(jì)算計(jì)算score/10按結(jié)果各成績(jī)段人數(shù)變量加按結(jié)果各成績(jī)段人數(shù)變量加1: 10,9c9+ 8c8+ 7c7+ 6c6+ 其他其他c5+轉(zhuǎn)。轉(zhuǎn)。 關(guān)閉文件,關(guān)閉文件,average=sum/count。 打印打印c9,c8,c7,c6,c5及及average。38西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的頭文件包含需要的頭文件#include /文件操作需要的頭文件文件操作

27、需要的頭文件#include /求數(shù)學(xué)需要的頭文件求數(shù)學(xué)需要的頭文件using namespace std; /名字空間名字空間int main()char number10,name10;/字符數(shù)組存放學(xué)號(hào)、姓名字符數(shù)組存放學(xué)號(hào)、姓名double score,sum,average;/表示成績(jī)、總成績(jī)、平均成績(jī)表示成績(jī)、總成績(jī)、平均成績(jī)int count;/人數(shù)人數(shù)int c9=0,c8=0,c7=0,c6=0,c5=0;/各成績(jī)段人數(shù)各成績(jī)段人數(shù)count=0; /人數(shù)初始值人數(shù)初始值0sum=0;/總成績(jī)初始值總成績(jī)初始值039西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心

28、ifstream in;/定義文件操作對(duì)象定義文件操作對(duì)象in.open(score.txt); /打開(kāi)文件打開(kāi)文件while(!in.eof()/未到文件末尾循環(huán)未到文件末尾循環(huán)innumbernamescore;/讀學(xué)號(hào)、姓名、成績(jī)(一行讀學(xué)號(hào)、姓名、成績(jī)(一行數(shù)據(jù))數(shù)據(jù))sum=sum+score;/加到總成績(jī)中加到總成績(jī)中count+;/人數(shù)加人數(shù)加140西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心switch(int)score/10)/按成績(jī)的十位百位分情況處理按成績(jī)的十位百位分情況處理 case 10: /百分百分 case 9:/十位十位9,九十分段,九十分段c

29、9+;/九十分段人數(shù)加九十分段人數(shù)加1break;/中斷中斷switch case 8:/十位十位8,八十分段,八十分段c8+; break; case 7:/十位十位7,七十分段,七十分段c7+; break; case 6:/十位十位6,六十分段,六十分段c6+; break; default: /其他,不及格段其他,不及格段c5+; break; /這個(gè)這個(gè)break可以沒(méi)有可以沒(méi)有 /end of while41西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心in.close();/關(guān)閉文件關(guān)閉文件average=sum/count; /計(jì)算平均成績(jī)計(jì)算平均成績(jī)cout總?cè)?/p>

30、數(shù)總?cè)藬?shù)t90-100t80-89t70-79t60-69t不及格不及格t平均成平均成績(jī)績(jī)endl;/顯示提示信息顯示提示信息coutcounttc9tc8tc7tc6tc5taverageend 轉(zhuǎn)。轉(zhuǎn)。 m=i,sum=0 如果如果m=0,轉(zhuǎn)轉(zhuǎn)。 d=m%10, sum=sum+dn, m=m/10 轉(zhuǎn)轉(zhuǎn) 如果如果sum=i,顯示顯示i。 i=i+1,轉(zhuǎn),轉(zhuǎn) 結(jié)束結(jié)束。46西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的頭文件包含需要的頭文件#include /數(shù)學(xué)函數(shù)需要的頭文件數(shù)學(xué)函數(shù)需要的頭文件using namespace std

31、; /名字空間名字空間int main() int n;/表示數(shù)的位數(shù)表示數(shù)的位數(shù) int start,end;/表示表示n位數(shù)的起始值和終止值位數(shù)的起始值和終止值 int m;/待分解各位的數(shù),即待判斷的數(shù)待分解各位的數(shù),即待判斷的數(shù) int digit;/某個(gè)數(shù)位的值某個(gè)數(shù)位的值 int sum;/各位數(shù)的各位數(shù)的n次方的和次方的和,檢驗(yàn)開(kāi)始前要賦檢驗(yàn)開(kāi)始前要賦0 int i; /循環(huán)變量,待檢驗(yàn)的數(shù)循環(huán)變量,待檢驗(yàn)的數(shù)47西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 coutn;/輸入位數(shù)輸入位數(shù) while(n0) /大于大于0時(shí)計(jì)算時(shí)計(jì)算 start=pow(10,n

32、-1);/n位數(shù)的起始值位數(shù)的起始值 end=pow(10,n)-1;/n位數(shù)的終止值位數(shù)的終止值 coutn位自?xún)鐢?shù)位自?xún)鐢?shù):;/輸出說(shuō)明信息輸出說(shuō)明信息48西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 for(i=start;i=end;i+)/從從“起始值起始值”到到“終止值終止值”逐個(gè)檢驗(yàn)逐個(gè)檢驗(yàn) m=i;/ sum=0;/各位數(shù)的各位數(shù)的n次方和,檢驗(yàn)前賦次方和,檢驗(yàn)前賦0 while(m!=0)/m不為不為0時(shí)檢驗(yàn),時(shí)檢驗(yàn), digit=m%10;/取最低位數(shù)字,取最低位數(shù)字, sum=sum+pow(digit,n);/n次方,再求和次方,再求和 m=m/10;/

33、去掉個(gè)位去掉個(gè)位 49西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心if(sum=i)/為為true時(shí),表示是自?xún)鐢?shù)時(shí),表示是自?xún)鐢?shù) couti ;/顯示該數(shù)顯示該數(shù) /end of for coutendl;/換行換行 coutn;/再輸入一個(gè)再輸入一個(gè)n表示位數(shù)表示位數(shù) /end of while循環(huán)循環(huán) coutendl; return 0; /end of program50西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心3.4.2 向量、矩陣的運(yùn)算 【例【例3-73-7】用消元法解線(xiàn)性方程組。設(shè)線(xiàn)性方程組】用消元法解線(xiàn)性方程組。設(shè)線(xiàn)性方程組Ax=bAx=b的

34、系數(shù)矩陣的系數(shù)矩陣A A的對(duì)角元均不為的對(duì)角元均不為0 0,且方程組有唯,且方程組有唯一解,編程解線(xiàn)性方程組。要求系數(shù)矩陣和右端向一解,編程解線(xiàn)性方程組。要求系數(shù)矩陣和右端向量由用戶(hù)輸入。量由用戶(hù)輸入。 【問(wèn)題分析問(wèn)題分析】 設(shè)線(xiàn)性設(shè)線(xiàn)性Ax=b的系數(shù)和右端向量如下所示的系數(shù)和右端向量如下所示51nnnnnnnnbbbxxxaaaaaaaaa2121212222111211.西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 akk0 (k=1,.,n)。那么第。那么第1次消元,消去次消元,消去a21的方法是將第的方法是將第1個(gè)方程乘以個(gè)方程乘以-a21/a11加到第加到第2個(gè)方程上

35、個(gè)方程上 那么消去那么消去ai1的方法是將第的方法是將第1個(gè)方程乘以個(gè)方程乘以-ai1/a11加到第加到第i個(gè)方個(gè)方程上(程上(i=2,.,n)。)。 對(duì)第對(duì)第k次消元,消去次消元,消去aik的方法是將第的方法是將第k個(gè)方程乘以個(gè)方程乘以-aik/akk加加到第到第i個(gè)方程上(個(gè)方程上(k=1,2,.,n-1, i=k+1,.,n)。)。52nnnnnnbbbxxxaaaaaa212122211211.00.0.西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 回代回代xn=bn/ann531, 1, 111/nnnnnnnaxabx1,.,1,/1niaxabxiinijjiji

36、i西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【算法】輸入線(xiàn)性方程組的元數(shù),按行輸入系數(shù)矩陣,輸入右端輸入線(xiàn)性方程組的元數(shù),按行輸入系數(shù)矩陣,輸入右端向量。向量。二二消元消元 對(duì)對(duì)k=1,2,.,n-1 /n-1次消元次消元 i從從k+1,到,到n /消消k以下各行以下各行54個(gè)分量)(右端向量的第個(gè)方程的系數(shù))(第i/,.,kj ,/kkkkkjjkkikiiijiiaabbbinaaaaa回代回代: xn=bn/ann 對(duì)對(duì)i=n-1,.,1iinijjijiiaxabx/1西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心【源程序】#include /包含需要的

37、頭文件包含需要的頭文件#include /求數(shù)學(xué)需要的頭文件求數(shù)學(xué)需要的頭文件using namespace std; /名字空間名字空間int main()double a2020,b20,x20;/分別表示系數(shù)矩陣、右端向量分別表示系數(shù)矩陣、右端向量和解向量和解向量int n=0;/將表示實(shí)際的元數(shù)將表示實(shí)際的元數(shù)int i,j,k;/循環(huán)變量循環(huán)變量cout請(qǐng)輸入線(xiàn)性方程組的元數(shù)請(qǐng)輸入線(xiàn)性方程組的元數(shù):n;/輸入元數(shù)輸入元數(shù)55西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心while(n0)/元數(shù)小于等于元數(shù)小于等于0結(jié)束(大于結(jié)束(大于0才繼續(xù))才繼續(xù))for(i=0;i

38、n;i+)/輸入第輸入第i行,共行,共n行行cout請(qǐng)輸入第請(qǐng)輸入第i行行:;/提示提示for(j=0;jaij; /輸入輸入i行行j列元素(從列元素(從0開(kāi)始)開(kāi)始) /end of forcout請(qǐng)輸入右端向量請(qǐng)輸入右端向量:;/提示信息提示信息for(i=0;ibi;/輸入第輸入第i個(gè)元素(個(gè)元素(0到到n-1) /end of for 56西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心/消元消元for(k=0;kn-1;k+)/第第k次消元,共次消元,共n-1次次for(i=k+1;in;i+)/消第消第i行(從行(從i+1到到n-1)double tmp=-aik/ak

39、k;/計(jì)算第計(jì)算第k行要乘的數(shù)值行要乘的數(shù)值for(j=k;j=0;i-)/逐步解逐步解x(i),i=n-2,n-3,.,0for(j=i+1;jn;j+)/將將x已知的項(xiàng)移到等號(hào)右并計(jì)算值已知的項(xiàng)移到等號(hào)右并計(jì)算值bi=bi-aij*xj;/b(i)減一個(gè)已知減一個(gè)已知x(j)的項(xiàng)的項(xiàng)xi=bi/aii;/解未知量解未知量x(i)58西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心/輸出輸出cout解向量為解向量為:; /輸出提示信息輸出提示信息for(i=0;in;i+)/輸出輸出n個(gè)解元素個(gè)解元素coutxi ;/輸出第輸出第i個(gè)元素(個(gè)元素(i=0,.,n-1)coutendl;/換行換行cout請(qǐng)輸入線(xiàn)性方程組的元數(shù)(輸入小于等于請(qǐng)輸入線(xiàn)性方程組的元數(shù)(輸入小于等于0的數(shù)的數(shù)結(jié)束)結(jié)束):n;/再次提示輸入另一個(gè)線(xiàn)性方程組的元數(shù)再次提示輸入另一個(gè)線(xiàn)性方程組的元數(shù)/while循環(huán)循環(huán)return 0;5

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論