第3章 簡單程序設計初步_第1頁
第3章 簡單程序設計初步_第2頁
第3章 簡單程序設計初步_第3頁
第3章 簡單程序設計初步_第4頁
第3章 簡單程序設計初步_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第3章程序設計初步

第3章程序設計初步3.1面向過程的程序設計和算法面向過程的程序設計:就是考慮程序要“做什么”,解決“怎么做”的問題.一個面向過程的程序應包括以下兩方面內(nèi)容:(1)對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結構(datastructure)。(2)對操作的描述。即操作步驟,也就是算法(algorithm)。3.1面向過程的程序設計和算法面向過程的程序,可以用下面的公式表示:

程序=算法+數(shù)據(jù)結構算法:解決一個問題而采取的方法和步驟。(廣義)計算機算法分兩類:數(shù)值算法和非數(shù)值算法學習面向?qū)ο蟮恼Z言依然要學習和掌握一些常用的算法。(C++語言也是如此)3.1面向過程的程序設計和算法算法的表示:

1、自然語言2、流程圖(特點:形象直觀,修改不方便,不適合復雜程序,本教材多使用流程圖表示算法)3、偽代碼(pseudocode)(一種介于自然語言和計算機語言之間的文字和符號)4、用計算機語言3.2C++程序的組成1.聲明語句如inta,b;2.執(zhí)行語句通知計算機完成一定的操作。執(zhí)行語句包括:(1)控制語句,完成一定的控制功能。C++有9種控制語句,即

①if()~else~(條件語句)②for()~(循環(huán)語句)③while()~(循環(huán)語句)④do~while()(循環(huán)語句)⑤continue(結束本次循環(huán)語句)⑥break(中止執(zhí)行switch或循環(huán)語句)⑦switch(多分支選擇語句)⑧goto(轉(zhuǎn)向語句)⑨return(從函數(shù)返回語句)C++程序的語句(2)函數(shù)和流對象調(diào)用語句。函數(shù)調(diào)用語句由一次函數(shù)調(diào)用加一個分號構成一個語句,例如sort(x,y,z);//假設已定義了sort函數(shù),它有3個參數(shù)cout<<x<<endl;//流對象調(diào)用語句(3)表達式語句。由一個表達式加一個分號構成一個語句。x=(a+1,a+2,a+3,a+4,a+5)是表達式x=(a+1,a+2,a+3,a+4,a+5);是語句3.空語句下面是一個空語句:;有時用來做被轉(zhuǎn)向點,或循環(huán)語句中的循環(huán)體。4.復合語句可以用{}把一些語句括起來成為復合語句。如下面是一個復合語句。{z=x+y;if(z>100)z=z-100;cout<<z;}3.4C++的輸入與輸出

在C++程序中可以方便的利用cout和cin進行輸出和輸入。但是cout和cin并不是C++語言中正式的輸入與輸出語句。

cout和cin是輸入輸出流庫中的流對象,是在編譯系統(tǒng)提供的I/O庫中定義的。

在使用cout和cin進行輸出和輸入時要使用預處理命令把頭文件stream包含到本文件中:#include<iostream>3.4C++的輸入與輸出3.4C++的輸入與輸出cout語句的一般格式:cout<<表達式1<<表達式2<<…….<<表達式n;

cin語句的一般格式:cin>>變量1>>變量2>>………>>變量n;一個cout語句可以分寫成若干行。如cout<<″ThisisasimpleC++program.″<<endl;可以寫成cout<<″Thisis″//注意行末尾無分號<<″aC++″<<″program.″<<endl;//語句最后有分號也可寫成多個cout語句,即cout<<″Thisis″;//語句末尾有分號cout<<″aC++″;cout<<″program.″;cout<<endl;比較printf與cout在用cout輸出時,用戶不必通知計算機按何種類型輸出,系統(tǒng)會自動判別輸出數(shù)據(jù)的類型,使輸出的數(shù)據(jù)按相應的類型輸出。如已定義a為int型,b為float型,c為char型,則cout<<a<<′′<<b<<′′<<c<<endl;會以下面的形式輸出:4345.789a用printf輸出時:printf(″a=%d,b=%f,c=%c\n″,a,b,c);putchar函數(shù)作用:向終端輸出一個字符格式:putchar(字符變量與常量);putchar(‘a(chǎn)’);//輸出結果acharc=‘a(chǎn)’;putchar(c);//輸出結果aputchar(66);//輸出結果Bputchar('\101′)//輸出結果A;

cin輸入cin>>a>>b>>c>>d;可以寫成

cin>>a//注意行末尾無分號>>b//這樣寫可能看起來清晰些>>c>>d;也可以寫成cin>>a;cin>>b;cin>>c;cin>>d;以上3種情況均可以從鍵盤輸入:1234↙也可以分多行輸入數(shù)據(jù):在用cin輸入時,系統(tǒng)也會根據(jù)變量的類型從輸入流中提取相應長度的字節(jié)charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;cout<<c1<<""<<c2<<""<<a<<""<<b<<endl;如果輸入123456.78↙(空格字符和回車換行符被跳過)輸出為:123456.78getchar函數(shù)此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設備)輸入一個字符。getchar函數(shù)沒有參數(shù),其一般形式為getchar()函數(shù)的值就是從輸入設備得到的字符.cin語句不能把空格字符、tab鍵、回車換行符作為字符輸入給字符變量,它們將被跳過。getchar函數(shù)可將空格字符tab鍵、回車換行符(或任何其他鍵盤上的字符)輸入給字符變量用scanf輸入scanf(“格式控制字符串”,地址列表)變量地址為&變量名Eg.scanf(″%d%c%f″,&a,&c,&b);而cin>>a>>c>>b就可以3.4.2在輸入流與輸出流中使用控制符滿足輸入輸出時有一些特殊的要求doublea=123.456789012345;對a賦初值cout<<a;輸出:123.456cout<<setprecision(9)<<a;輸出:123.456789cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;輸出:123.45678901cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;輸出:1.2346e02intb=123456;cout<<setw(10)<<b<<′,′<<b;輸出:123456,123456setw.:只對其后的第一個數(shù)據(jù)起作用程序的三種基本結構1、順序結構AB…C#include<iostream>#include<cmath>//由于程序要用到//數(shù)學函數(shù)sqrt,故應包含頭文件cmathusingnamespacestd;intmain(){ floata,b,c,x1,x2; cin>>a>>b>>c; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); cout<<″x1=″<<x1<<endl; cout<<″x2=″<<x2<<endl; return0;}2、選擇條件?真假ABx>y?真假z=xz=y例如: if(x<y)cout<<“xissmallerthany.”; elsecout<<“xislargerthanyorequaltoy.”; if(a==b&&x==y)cout<<“xissmallerthany.”;3.6關系運算和邏輯運算關系表達式:用關系運算符將兩個表達式連接起來的式子;

優(yōu)先級相同(高)①< (小于)②<= (小于或等于)③> (大于)④>= (大于或等于) ⑤== (等于)⑥!=(不等于)優(yōu)先級相同(低)1.前4種關系運算符(<,<=,>,>=)的優(yōu)先級別相同,后兩種也相同。前4種高于后兩種。例如,“>”優(yōu)先于“==”。而“>”與“<”優(yōu)先級相同。2.關系運算符的優(yōu)先級低于算術運算符。3.關系運算符的優(yōu)先級高于賦值運算符。例如:c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)關系表達式的值是一個邏輯值,即“真”或“假”。例如,關系表達式“5==3”的值為“假”,“5>=0”的值為“真”。在C和C++中都用數(shù)值1代表“真”,用0代表“假”。如果有以下賦值表達式: d=a>b則d得到的值為1 f=a>b>cf得到的值為0邏輯常量和邏輯變量C語言沒有提供邏輯型數(shù)據(jù),關系表達式的值(真或假)分別用數(shù)值1和0代表。C++增加了邏輯型數(shù)據(jù)。邏輯型常量只有兩個,即false(假)和true(真)。邏輯型變量要用類型標識符bool來定義,它的值只能是true和false之一。如: boolfound,flag=false;//定義邏輯變量found和flag,并使flag的初值為false found=true;//將邏輯常量true賦給邏輯變量found由于邏輯變量是用關鍵字bool來定義的,因此又稱為布爾變量。邏輯型常量又稱為布爾常量。所謂邏輯型,就是布爾型。設立邏輯類型的目的是為了看程序時直觀易懂。在編譯系統(tǒng)處理邏輯型數(shù)據(jù)時,將false處理為0,將true處理為1。因此,邏輯型數(shù)據(jù)可以與數(shù)值型數(shù)據(jù)進行算術運算。如果將一個非零的整數(shù)賦給邏輯型變量,則按“真”處理,如 flag=123;//賦值后flag的值為true cout<<flag;輸出為數(shù)值1。邏輯運算和邏輯表達式將兩個關系表達式用邏輯運算符連接起來就成為一個邏輯表達式。C++提供3種邏輯運算符:(1)&&邏輯與(相當于其他語言中的AND)(2)||邏輯或(相當于其他語言中的OR)(3)!邏輯非(相當于其他語言中的NOT)邏輯運算舉例如下: a&&b若a,b為真,則a&&b為真。 a||b若a,b之一為真,則a||b為真。 !a若a為真,則!a為假。邏輯表達式的值是一個邏輯量“真”或“假”。在給出邏輯運算結果時,以數(shù)值1代表“真”,以0代表“假”。但在判斷一個邏輯量是否為“真”時,采取的標準是:如果其值是0就認為是“假”,如果其值是非0就認為是“真”。判斷選擇語句,有三種形式:if(表達式)語句語句條件真假語句2語句1條件真假2)if(表達式)語句1else語句2if(a>b)

cout<<a;if(a>b)

cout<<a;else

cout<<b;3.7選擇結構和if語句3)if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3…elseif(表達式m)語句melse語句n例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;注意:1)if后可跟復合語句。2)注意;的位置。3)注意多重ifelse的搭配。if(a>b){a=1;b=0;}else{a=0;b=1;}a=0b=1a=1b=0a>b真假if(i>j)i++;if(i>j);i++;i++i>j真假if總是與它上面最近的else配對,如要改變,用復合語句{}。注意書寫格式,相互配對的語句要對齊。i>j真假i++例:輸入兩個實數(shù),按代數(shù)值由小到大次序輸出這兩個數(shù)。voidmain(void){floata,b,t;//定義變量cout<<“Input2RealNumber:\n";//在屏幕上的提示信息

cin>>a>>b;//給變量賦值a:7,b:3if(a>b){t=a;a=b;b=t;}//交換數(shù)據(jù),用中間變量cout<<a<<‘\t’<<b<<endl;//輸出變量

}}bat73773輸出結果:373.7.2if語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:if()if()語句1else語句2elseif()語句3else語句4 內(nèi)嵌if應當注意if與else的配對關系。else總是與它上面最近的、且未配對的if配對。{}限定了內(nèi)嵌if語句的范圍,關系清楚,不易出錯1、編寫程序計算y的值:-1(x<0)y=0(x=0)1(x>0)1.#include<iostream>voidmain(){intx,y;cin>>x;if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;cout<<y<<endl;}2.#include<iostream>voidmain(){intx,y;cin>>x;if(x<0)y=-1;elseif(x==0)y=0;elsey=1;cout<<y<<endl;}3.

#include<iostream>voidmain(){intx,y;cin>>x;if(x<=0)if(x==0)y=0;elsey=-1;elsey=1;cout<<y<<endl;}4.#include<iostream>voidmain(){intx,y;y=1;cin>>x;if(x<=0)if(x==0)y=0;elsey=-1;cout<<y<<endl;}3.8條件運算符和條件表達式條件表達式的一般形式為表達式1?表達式2∶表達式3優(yōu)先級高于賦值運算符,低于邏輯運算符用if語句表示則為:if(表達式1)表達式2;else表達式3;eg.x?′a′∶′b′若x=0,則條件表達式的值為字符′b′的ASCII碼。例3.7#include<iostream>usingnamespacestd;intmain(){ charch; cin>>ch; ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch; cout<<ch<<endl; return0;}b=(a<0?1:a>0?2:0);1.#include<iostream>voidmain(){ inta,b; cin>>a; if(a<0)b=1; elseif(a>0)b=2; elseb=0; cout<<b<<endl;}2.#include<iostream>voidmain(){ inta,b; cin>>a; if(a) if(a<0)b=1; elseif(a>0)b=2; elseb=0; cout<<b<<endl;}3.#include<iostream>voidmain(){ inta,b; cin>>a; b=2; if(a) if(a<0)b=1; elseif(a==0)b=0; elseb=2; cout<<b<<endl;}4.#include<iostream>voidmain(){ inta,b; cin>>a; b=0; if(a<=0) if(a<0)b=1; elseb=2; cout<<b<<endl;}格式如下:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2...case常量表達式n:語句ndefault:語句n+1//可無}語義為:根據(jù)對表達式的計算得到的值,從第一個case常量開始從上到下逐個進行匹配,若相等,則以此為入口,順序向下執(zhí)行各條語句序列。3.9多分支選擇結構和switch語句格式如下:Switch(<整型表達式>){case<整常型表達式1>:<語句序列1>;break;case<整常型表達式2>:<語句序列2>;break;……case<整常型表達式n>:<語句序列n>;break;default:<語句序列n+1>//可無}通過加break強行跳轉(zhuǎn)語句,在執(zhí)行完第一個語句序列后,就強行跳出switch結構P86第11題:將百分制成績轉(zhuǎn)換成5級switch(int(score/10)){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;default:grade='E';}3.11循環(huán)結構和循環(huán)語句while語句的一般形式如下:while(表達式)語句例3.10求1+2+3+…+100。#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}cout<<″sum=″<<sum<<endl;}do-while語句構成循環(huán)do-while語句的特點是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式為do語句while(表達式);例3.11用do-while語句求1+2+3+…+100。#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);cout<<″sum=″<<sum<<endl;return0;}對同一個問題用while語句處理和用dowhile語句處理是否等價?#include<iostream>usingnamespacestd;intmain(){inti,sum=0;cin>>i;while(i<=100){sum=sum+i;i++;}cout<<"sum="<<sum<<endl;return0;}#include<iostream>usingnamespacestd;intmain(){inti,sum=0;cin>>i;do{sum=sum+i;i++;}while(i<=100);cout<<"sum="<<sum<<endl;return0;}格式:for(e1;e2;e3)<語句體>計算e2執(zhí)行<語句>非00退出循環(huán)計算e1計算e3e1;while(e2){<語句>;e3;}

for循環(huán)語句for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句例如for(i=1;i<=100;i++)sum=sum+i;它的執(zhí)行過程與圖3.10完全一樣。它相當于以下語句:i=1;while(i<=100){sum=sum+i;i++;}for語句for(;;)表示無限循環(huán),相當于while(1)語句包含逗號表達式的其它形式的for語句,如:for(sum=0,i=1;i<100;i++)for(i=1,j=100;i<=j;i++,j++)k=k+i+j;for(i=1;i<=100;i++,i++);例當結束條件為和大于2000時,如何表示?while(sum<=2000){……}當輸入的數(shù)字為-1作為結束條件時,如何表示?小紅今年內(nèi)12歲,父親比她大20歲,問多少年之后,父親的年齡是小紅的二倍?cin>>n;while(n!=-1){sum=sum+n;cin>>n;}inth=12,f=32;intcount=0;while(2*h!=f){h++;f++;count++;}例輸入若干字母,將它們變成其后的第四個字母,A—>E,W—>A,非字母字符忽略。思路:1.建立循環(huán),循環(huán)結束以輸入回車符為準while((c=getchar())!=‘\n’)2.判斷輸入的是否是字符,否則忽略{if((c>=′a′&&c<=′z′)||(c>=′A′&&c<=′Z′))3.變成其后的第四個字母c=c+4;4.若變換后超出Z時,要進行模運算。if(c>′Z′&&c<=′Z′+4||c>′z′)c=c-26……A……Z……a……z……多重循環(huán)--九九乘法表(1)for(i=1;i<=1;i++)cout<<“1”<<“*”<<i<<“=”<<setw(2)<<1*i<<“”;cout<<endl;for(i=1;i<=2;i++)cout<<“2”<<“*”<<i<<“=”<<setw(2)<<2*i<<“”;cout<<endl;for(i=1;i<=n;i++)cout<<“n”<<“*”<<i<<“=”<<setw(2)<<n*i<<“”;cout<<endl;for(n=1;n<=9;n++) {for(i=1;i<=n;i++) cout<<n<<"*"<<i<<"="<<setw(2)<<n*i<<""; cout<<endl; }舉一反三for(i=1;i<=9;i++)cout<<“1”<<“*”<<i<<“=”<<setw(2)<<1*i<<“”;cout<<endl;for(i=1;i<=8;i++)cout<<“2”<<“*”<<i<<“=”<<setw(2)<<2*i<<“”;cout<<endl;for(i=1;i<=10-n;i++)cout<<“n”<<“*”<<i<<“=”<<setw(2)<<n*i<<“”;cout<<endl;for(n=1;n<=9;n++) {for(i=1;i<=10-n;i++) cout<<n<<"*"<<i<<"="<<setw(2)<<n*i<<""; cout<<endl; }*********************第1行一個*第2行二個*。。。。。第N行N個*inti,j,n;cout<<"請輸入要打印的行數(shù):";cin>>n;for(inti=1;i<=n;i++){

for(j=1;j<=i;j++)cout<<"*";//打印若干個*

cout<<endl;//換行}*********************for(j=1;j<=n-i+1;j++)@@@@*@@@***@@*****@****************第1行:4個@,接著1個*,換行第2行:3個@,接著3個*,換行第3行:2個@,接著5個*,換行第4行:1個@,接著7個*,換行第5行:0個@,接著9個*,換行每行@的個數(shù):5-i每行*的個數(shù):2*i-1每次循環(huán)要做三件事:先打印(5-i)個@后,接著打印(2*i-1)個*,再換行for(inti=1;i<=5;i++){for(j=1;j<=5-i;j++)cout<<"@";//打印若干個@

for(k=1;k<=2*i-1;k++)cout<<"*";//打印若干個*cout<<endl;//換行}練習分析程序運行結果。

inti(1),a(0);for(;i<=5;i++)

{

do{i++; a++;}while(i<3);

i++;

}cout<<a<<","<<i<<endl;

ia1021i<3成立32i<3不成立45for(;I<=5;I++)6378for(;I<=5;I++)格式:break;該語句在程序中只用于下列兩種情況:1、在開關語句中,其功能是退出開關語句,執(zhí)行其后的語句;2、在循環(huán)體中,其功能是用來退出該重循環(huán)break語句格式:continue;功能:只用在循環(huán)體中,用來結束該次循環(huán)。在循環(huán)體中遇到continue語句時,本次循環(huán)結束,回到循環(huán)條件判斷是否執(zhí)行下一次循環(huán)。continue語句#defineM10voidmain(){ intnum,sum(0); cout<<"inputnumber:"; for(inti=0;i<M;i++) { cin>>num; if(num<0)break; sum+=num; }cout<<"sum="<<sum<<endl;}#defineM10voidmain(){ intnum,sum(0); cout<<"inputnumber:"; for(inti=0;i<M;i++) { cin>>num; if(num<0)continue; sum+=num; }cout<<"sum="<<sum<<endl;}求10個數(shù)之和,遇負數(shù)終止求10個中的正數(shù)之和m是素數(shù)的條件是不能被2,3,…,m-1整除。

intm;cout<<"pleaseinputanumber:\n";cin>>m;//輸入for(intI=2;I<m;I++) if(m%I==0)break;//處理if(I>=m)cout<<m<<"isprime.\n";elsecout<<m<<"isn'tprime.\n";//輸出

判斷整數(shù)

m其是否為素數(shù)快速算法:判斷它能否被2到sqrt(m)之間的數(shù)整除,若不

溫馨提示

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

評論

0/150

提交評論