版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
計算機程序設(shè)計顧剛計算機教學(xué)實驗中心授課提綱運算流程控制的概念三種根本控制結(jié)構(gòu)假設(shè)干程序?qū)嵗刂平Y(jié)構(gòu)算法是求解問題的一系列操作步驟C++源程序由假設(shè)干函數(shù)構(gòu)成函數(shù)是由語句構(gòu)成,能完成獨立功能的子程序運算的流程控制指程序執(zhí)行流程的控制程序設(shè)計的核心問題如何用C++的語句和函數(shù)來實現(xiàn)算法換句話說如何組織C++程序的結(jié)構(gòu)設(shè)計最正確的控制結(jié)構(gòu)〔執(zhí)行流程〕速度快空間省閱讀理解容易模塊的概念模塊指完成一個特定功能的語句序列一個模塊可以是一條語句、假設(shè)干條語句、一個函數(shù)模塊的根本特征是其僅有一個入口和一個出口即執(zhí)行模塊,只能從該模塊的入口處開始執(zhí)行,執(zhí)行完該模塊的功能后,從模塊的出口轉(zhuǎn)而執(zhí)行其他模塊程序模塊授課提綱控制結(jié)構(gòu)的概念三種根本控制結(jié)構(gòu)假設(shè)干程序?qū)嵗N根本控制結(jié)構(gòu)三種控制結(jié)構(gòu)是什么?三種根本控制結(jié)構(gòu):順序、選擇、循環(huán)任何算法都可以由三種根本控制結(jié)構(gòu)組合實現(xiàn)換句話說用三種根本程序結(jié)構(gòu)可以實現(xiàn)任何復(fù)雜的算法順序結(jié)構(gòu)所謂順序結(jié)構(gòu)是指位置處在前面的操作或模塊執(zhí)行完畢才能執(zhí)行緊跟其后面的操作或模塊。順序結(jié)構(gòu)執(zhí)行流程圖示如下:操作1操作2模塊1模塊2模塊化三角形三條邊長求其面積#include<iostream>usingnamespacestd;int
main(){doublea,b,c,s,area;cout<<"pleaseinputa,b,c=?";cin>>a>>b>>c;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<“area=”<<area;return0;}//語句先后次序不能顛倒:變量定義→輸入變量值→計算公式→輸出結(jié)果值
選擇結(jié)構(gòu)所謂選擇結(jié)構(gòu)是指根據(jù)設(shè)定的條件來選擇確定將要執(zhí)行的語句或模塊,這些語句或模塊位置都處在條件的后面。選擇結(jié)構(gòu)又分三種形式:一路分支二路分支多路分支一路分支一路分支執(zhí)行流程為當條件成立執(zhí)行模塊1,當條件不成立執(zhí)行模塊1后面的模塊。一路分支結(jié)構(gòu)圖示如下:成立不成立條件模塊1成立不成立條件模塊1新模塊語句格式:if(條件表達式)語句;或if(條件表達式){語句序列;}三角形面積程序改進#include<iostream>usingnamespacestd;int
main(){doublea,b,c,s,area;cout<<"pleaseinputa,b,c=?";cin>>a>>b>>c;if(a+b>c&&b+c>a&&c+a>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<“三角形面積=”<<area;}return0;}//選擇語句只用一條語句,節(jié)省空間的寫法條件?成立不成立語句序列二路分支二路分支執(zhí)行流程為當條件成立執(zhí)行模塊1,當條件不成立執(zhí)行模塊2。兩路分支結(jié)構(gòu)圖示如下:成立不成立條件模塊1模塊2成立不成立條件模塊1模塊2語句格式:if(條件)
{語句序列}
else{語句序列}三角形面積程序再改進#include<iostream>usingnamespacestd;int
main(){doublea,b,c,s,area;cout<<"pleaseinputa,b,c=?";cin>>a>>b>>c;if(a+b>c&&b+c>a&&c+a>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<“area=”<<area;}elsecout<<“三條邊不能構(gòu)成三角形!\n”;return0;}條件語句序列1成立不成立語句序列2兩路分支例題求解一元二次方程的根輸入一元二次方程的a,b,c三個系數(shù),解一元二次方程:ax2+bx+c=0;輸出兩個根〔含復(fù)根〕【問題分析】a=0?b=0?Δ>0?Δ=0Δ<0?二元一次方程求解算法輸入a,b,c;如果a=0,如果b=0,輸出“輸入的系數(shù)不構(gòu)成方程”;否那么〔即b≠0〕計算單根x=-c/b輸出單根x否那么〔即a≠0〕計算delta=b*b-4*a*c如果delta>=0delta=sqrt(delta)輸出x1=(-b+delta)/2a和x2=(-b-delta)/2a否那么delta=sqrt(-delta)輸出f復(fù)根:x1=-b/2a+j*delta/2a;x2=-b/2a-j*delta/2a(注意j是虛數(shù)單位)結(jié)束#include<iostream> //包含需要的頭文件#include<cmath>//求根函數(shù)sqrt需要的頭文件usingnamespacestd; //名字空間intmain() //主函數(shù){ doublea,b,c;//定義變量保存系數(shù) doubledelta;//表示根的判別式 doublex,x1,x2;//表示根 cout<<"請輸入一元二次方程的三個系數(shù)a,b,c:";//顯示提示信息 cin>>a>>b>>c;//輸入一元二次方程的系數(shù) if(a==0)//二次項系數(shù)a等于0的情況 { if(b==0)//一次項系數(shù)也等于0,不是方程 { cout<<"輸入的系數(shù)不構(gòu)成方程"<<endl; } else//二次項系數(shù)等于0,一次項系數(shù)不為0,一元一次方程 { x=-c/b;//計算單根 cout<<"實際為一元一次方程,根為"<<x<<endl;//輸出 } } else//二次項系數(shù)a不為0的情況 { delta=b*b-4.0*a*c;//計算判別式的值 if(delta>=0)//判別式大于等于0,有實根 { delta=sqrt(delta);//判別式開方 x1=(-b+delta)/2.0/a;//根1 x2=(-b-delta)/2.0/a;//根2 cout<<"方程有實根,它們是:"<<endl;//顯示根 cout<<"x1="<<x1<<",x2="<<x2<<endl;// } else//判別式小于0,有復(fù)根 { delta=sqrt(-delta);//判別式變號開方 x1=-b/2.0/a;//實部 x2=delta/2.0/a;//虛部 cout<<"方程有復(fù)根,它們是:"<<endl;// cout<<"x1="<<x1<<"+j"<<x2<<",x2="<<x1<<"-j"<<x2<<endl;//打印復(fù)根 } } return0; }多路分支【例3-3】編程實現(xiàn)一個簡單的計算器功能,實現(xiàn)簡單的加、減、乘、除表達式式的計算。設(shè)用戶輸入的表達式具有如下格式:<操作數(shù)1><運算符><操作數(shù)2>其中的操作數(shù)是整數(shù)或?qū)崝?shù),運算符是“+”、“-”、“*”或“/”之一,三個量之間用空格隔開。問題分析輸入3+5輸出9輸入3*5輸出15如果運算符不同,操作就不同if語句可以實現(xiàn)嗎?switch語句格式switch(<表達式>){case<常量表達式1>:<case塊1>case<常量表達式2>:<case塊2>...case<常量表達式n>:<case塊n>default:<默認case塊>}關(guān)鍵詞:<表達式>的數(shù)據(jù)類型:整型、字符、邏輯、枚舉defaultbreak例題算法用num1,num2,op分別表示輸入的表達式的兩個操作數(shù)和一個運算符。如果op='+',那么result=num1+num2,輸出result;如果op='-',那么result=num1-num2,輸出result;如果op='*',那么result=num1*num2,輸出result;如果op='/',那么如果num2=0,顯示“除數(shù)為0”;否那么,計算result=num1/num2,輸出result;其他,顯示“運算符錯誤”。前兩章習(xí)題中的問題不能直接簡單的表達式計算第1章第7題:n≠0第1章第8題:x>=0第1章第9題:x2-3x+2>0第1章第10題:a>0,a≠1第2章第3題:(1-cos(x))≠0第2章第6題:輸入>0用if語句進行控制計算循環(huán)結(jié)構(gòu)在程序設(shè)計中,往往需要重復(fù)屢次執(zhí)行某一段程序〔模塊〕,這就是循環(huán)結(jié)構(gòu),根據(jù)設(shè)定的條件來確定一段程序〔模塊〕重復(fù)執(zhí)行的次數(shù)。循環(huán)結(jié)構(gòu)又分兩種形式:當型循環(huán)直到型循環(huán)當型循環(huán)當型循環(huán)執(zhí)行流程為根據(jù)條件,假設(shè)成立反復(fù)執(zhí)行模塊,當條件不成立轉(zhuǎn)到下一個模塊。圖示如下:條件?成立不成立模塊條件?成立不成立模塊新模塊語句格式:while(條件表達式)語句序列求1+2+…+100#include<iostream>usingnamespacestd;intmain(){ intsum=0,i=1;
while(i<=100) { sum=sum+i; i=i+1; } cout<<“1+2+…100=”;cout<<sum<<endl; return0;}開始SUM=0,I=1SUM=SUM+II=I+1輸出SUM結(jié)束I≤100成立不成立第2章第3題解題思路求上式當x→0時的極限X=0.1,0.01,0.001,0.0001……1E-10循環(huán)10次,每次x=x/10.0再計算#include<iostream>#include<cmath>usingnamespacestd;intmain(){ doublex=0.1,y; while(x>1e-10) { y=sin(x*x)/(1-cos(x)); cout<<"sin(x*x)="<<sin(x*x)<<'\t'; cout<<"cos(x)="<<cos(x)<<'\t'; cout<<"x="<<x<<'\t'<<"y="<<y<<endl; x=x/10.0; } return0;}第2章第3題源程序求E的值
設(shè)初值:e=0,u=1,n=1u>10–7?計算:u=u/n;e=e+u;n=n+1;是否輸出結(jié)果e求e的近似值,利用公式:直到最后一項1/n!的值小于107為止//計算常數(shù)e的值#include<iostream>usingnamespacestd;intmain(){ doublee=1.0; doubleu=1.0; intn=1;
while(u>=1.0e-7) { u=u/n; e=e+u; n=n+1; } cout<<"e="<<e<<endl; cout<<"n="<<n<<endl; return0;}u>1e-7
u=u/ne=e+un=n+1直到型循環(huán)直到型循環(huán)執(zhí)行流程為根據(jù)條件,假設(shè)成立反復(fù)執(zhí)行模塊,當條件不成立轉(zhuǎn)到下一個模塊。圖示如下:條件?模塊成立不成立條件?模塊成立不成立新模塊語句格式:do{語句序列}while(條件表達式);//計算常數(shù)e的值#include<iostream>usingnamespacestd;intmain(){ doublee=1.0; doubleu=1.0; intn=1;
do { u=u/n; e=e+u; n=n+1; }while(u>=1.0e-7); cout<<"e="<<e<<endl; cout<<"n="<<n<<endl; return0;}//do語句與while語句的區(qū)別是什么?u>=1e-7u=u/n;e=e+u;n=n+1;求x的n次方根【3-6】編程計算一個實數(shù)的任意次方根用戶輸入一個實數(shù)x和開方的次數(shù)n輸出顯示方根值如用戶輸入23,顯示2的三次方根1.25992要求當用戶輸入00時程序結(jié)束用戶輸入x<0且n<=0時或x<=0且1/n不為整數(shù)時顯示“輸入錯誤”的提示并繼續(xù)輸入。求解算法循環(huán)進行以下計算輸出提示信息“計算x的n次方根,請輸入x,n”輸入x,n如果x==0并且n==0break如果(x<0并且n<=0)或(x<=0且1/n不為整數(shù))輸出錯誤信息“輸入錯誤,”直接進入下一次循環(huán)y=pow(x,1/n);輸出y//example3-6計算x的任意次方根#include<iostream> //包含輸入輸出頭文件#include<cmath>usingnamespacestd; //指定名字空間intmain() //主函數(shù){ doublex; doublen; while(1)//一直循環(huán) { cin>>x>>n; if(x==0&&n==0)//終止條件 { cout<<"Programterminated"<<endl; break;//跳出最近循環(huán) } else if((x<0&&n<=0)||(x<=0&&1/n!=int(1/n)))//錯誤條件 { cout<<"errorreinput"<<endl; continue;//直接進入下一個循環(huán) } cout<<x<<"\t"<<n<<"throot"<<pow(x,1.0/n)<<endl; } return0; //函數(shù)返回}For循環(huán)語句For語句格式:
for(表達式1;表達式2;表達式3){
語句序列}For語句執(zhí)行功能表達式2成立不成立語句序列計算表達式1計算表達式3For語句是直到型還是當型使用梯形法計算定積分使用梯形法計算定積分∫f(x)dx,其中a=0,b=1,被積函數(shù)為sin(x),取積分區(qū)間等分數(shù)為1000。abxyf〔x〕xixi+1h梯型面積=〔上底+下低〕x高2#include<iostream>//用梯形法計算定積分#include<cmath> //包含標準數(shù)學(xué)函數(shù)的math.h函數(shù)庫usingnamespacestd;intmain(){ doublea=0,b=1.0;
//雙精度類型變量:積分上下限 doubleh; //雙精度類型變量:積分步長 doublesum=0;//雙精度類型變量:存放最后為積分值 intn=1000; //整型變量:積分區(qū)間等分數(shù) inti; //整型變量:循環(huán)工作變量 h=(b-a)/n; //計算小區(qū)間長度
for(i=0;i<n;i++)
//循環(huán)計算公式中的Σ和式
sum=sum+(sin(a+i*h)+sin(a+(i+1)*h))*h/2; //輸出計算結(jié)果 cout<<"Theresultis"<<sum<<endl; return0;}For語句應(yīng)用舉例編寫程序,計算n個數(shù)的和及平均值。n的值和n個數(shù)由用戶輸入?!締栴}分析】必須采用循環(huán)控制,因為n是隨機輸入【算法描述】用n表示數(shù)據(jù)個數(shù),x表示某個元素,sum表示和,average表示平均值。①n=0,sum=0;average=0;②輸入n③對i=1,...,n④
輸入x⑤
計算sum=sum+x⑥average=sum/n⑦輸出sum及average。#include<iostream> //包含輸入輸出頭文件usingnamespacestd; //指定名字空間intmain() //主函數(shù){ intn; //聲明變量,表示元素個數(shù) doublex,sum,average; //聲明變量,表示輸入的數(shù),和,平均值 inti; //循環(huán)變量 sum=0; //和置初始值 average=0; //平均值置初始值 cout<<"請輸入元素個數(shù):"; cin>>n; //輸入元數(shù)個數(shù) for(i=0;i<n;i++) //循環(huán),n次 { cout<<"請輸入第"<<i+1<<"個元素:";//提示信息 cin>>x; //輸入一個數(shù) sum=sum+x; //求和 } average=sum/n; //計算平均值 cout<<"Thesumis"<<sum<<endl; cout<<"Theaverageis"<<average<<endl; return0; //函數(shù)返回}例題講解計算兩個n維向量的夾角。設(shè)
是兩個n維向量,計算它們的夾角。要求程序循環(huán)提示用戶輸入向量并進行計算求解算法計算向量的夾角。設(shè)向量用數(shù)組a[N]b[N]表示。①輸入兩個向量;②計算a,b的內(nèi)積innerproduct:innerproduct=0
對i=0,...,n-1
計算innerproduct=innerproduct+a[i]*b[i]③計算a,b的模modea,modeb;④計算cosinetheta=innerproduct/modea/modeb⑤計算theta=arccosin(cosinetheta)⑥輸出theta⑦轉(zhuǎn)①#include<iostream> //包含需要的頭文件#include<cmath>//求數(shù)學(xué)需要的頭文件usingnamespacestd; //名字空間intmain() //主函數(shù){ constintN=100;//定義常量,表示數(shù)組能容納的最大元素數(shù) constdoublePAI=3.1415926; //定義常量,表示圓周率doublea[N],b[N]; //定義數(shù)組,存放兩個向量 doublemodea,modeb;//定義變量,分別表示兩個向量的模 doubleinnerproduct,cosinetheta,theta;//定義變量,分別表示內(nèi)積、余弦,夾角 intn,i; //n表示向量的實際維數(shù),i是循環(huán)變量for(;;) //循環(huán),不斷接受用戶輸入并計算向量的夾角 { cout<<"請輸入向量的維數(shù)(n>0):";//提示 cin>>n; //輸入向量的實際維數(shù) cout<<"請輸入向量a:"; //提示 for(i=0;i<n;i++) //輸入向量a,逐個輸入其元素 { cin>>a[i]; } cout<<"請輸入向量b:"; for(i=0;i<n;i++) //輸入向量b,逐個輸入其元素 { cin>>b[i]; }innerproduct=0; //變量賦初始值,開始為0 modea=0; modeb=0; for(i=0;i<n;i++) //逐步求和,加n次 { innerproduct=innerproduct+a[i]*b[i];//內(nèi)積 modea=modea+a[i]*a[i]; //向量a的模的平方 modeb=modeb+b[i]*b[i]; //向量b的模的平方 } modea=sqrt(modea); //開方,得a的模 modeb=sqrt(modeb); //開方,得b的模 cosinetheta=innerproduct/modea/modeb; //夾角余弦 theta=acos(cosinetheta); //夾角弧度 theta=theta/PAI*180; //夾角度 cout<<"它們的夾角為:"<<theta<<endl; //顯示 } //會進入下一循環(huán) return0;}授課提綱控制結(jié)構(gòu)的概念三種根本控制結(jié)構(gòu)假設(shè)干程序?qū)嵗笏苫〝?shù)水仙花數(shù)定義:一個數(shù)的個十百位數(shù)字立方和等于原數(shù)算法分析用窮舉法對100~999之間的每個數(shù)進行如下驗證:驗證公式:hdn=h3+d3+n3關(guān)鍵是如何分解一個3位數(shù)的百位、十位和個位?百位=(n%1000)/100十位=(n/10)%10個位=n%10例:371h=371/100=3d=〔371/10〕%10=37%10=7n=371%10=1求水仙花數(shù)流程圖n=100n<999?i=n/100;j=〔n/10〕%10;k=n%10;h=I^3+j^3+k^3h=n?打印該水仙花數(shù)
n=n+1是否是否求水仙花數(shù)源程序//打印所有的水仙花數(shù)#include<iostream>usingnamespacestd;intmain(){ intn,i,j,k;
for(n=100;n<=999;n=n+1) { i=n/100;//取出n的百位數(shù)
j=(n/10)%10;//取數(shù)n的十位數(shù)
k=n%10;//取出n的個位數(shù)
if(n==i*i*i+j*j*j+k*k*k) cout<<n<<"="<<i<<"^3+"<<j<<"^3+"<<k<<"^3"<<endl; }
return0;}輸出:153=1^3+5^3+3^3370=3^3+7^3+0^3371=3^3+7^3+1^3407=4^3+0^3+7^3任意位數(shù)自冪數(shù)算法①輸入位數(shù)n。②計算n位數(shù)的起始值和終止值start=10n-1,end=10n-1i=start③如果i>end轉(zhuǎn)⑨。④m=i,sum=0⑤如果m=0,轉(zhuǎn)⑦。⑥d=m%10,sum=sum+dn,m=m/10
轉(zhuǎn)⑤⑦如果sum=i,顯示i。⑧i=i+1,轉(zhuǎn)③⑨結(jié)束。#include<iostream> //包含需要的頭文件#include<cmath>//數(shù)學(xué)函數(shù)需要的頭文件usingnamespacestd;//名字空間intmai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 副園長個人述職報告(12篇)
- 幼兒園的表揚信范文集錦7篇
- 專業(yè)認知實習(xí)報告范文匯編6篇
- 2024年版建筑工人個人勞務(wù)服務(wù)協(xié)議版
- 銷售上半年工作總結(jié)感想10篇
- 財務(wù)年度工作總結(jié)七篇
- 前臺的實習(xí)報告模板集合9篇
- 八年級道德與法治上冊 第三單元 法律在我心中 第九課 從署名權(quán)說起 第2框 信守合同教學(xué)實錄 人民版
- 辭職申請書模板集錦7篇
- 新進員工試用期總結(jié)范文
- 35kv及以下架空線路施工及驗收規(guī)范
- 導(dǎo)光管采光施工工法
- 山東昌樂二中“271高效課堂”解讀
- 配電工程竣工資料
- 毗尼日用切要20140619最終版
- 出庫單樣本12623
- Y-△降壓啟動控制線路ppt課件
- 急危重患者的手術(shù)護理.ppt
- 一次風機動葉調(diào)節(jié)裝置故障原因分析及處理
- 新提拔領(lǐng)導(dǎo)干部個人重大事項和家庭財產(chǎn)申報備案表
- 常壓熱水鍋爐安裝系統(tǒng)圖
評論
0/150
提交評論