教學課件:C++程序設(shè)計教程(第2版)羅建軍_第1頁
教學課件:C++程序設(shè)計教程(第2版)羅建軍_第2頁
教學課件:C++程序設(shè)計教程(第2版)羅建軍_第3頁
教學課件:C++程序設(shè)計教程(第2版)羅建軍_第4頁
教學課件:C++程序設(shè)計教程(第2版)羅建軍_第5頁
已閱讀5頁,還剩570頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第1章C++語言簡介1.1C++程序的基本結(jié)構(gòu)1.2算法與程序1.3C++程序的基本要素1.4分析問題、編碼和運行21.1C++程序的基本結(jié)構(gòu)

例1-1第一個C++程序,在計算機屏幕上顯示:

HelloWorld!//Example1-1:屏幕上顯示:HelloWorld!#include<iostream> usingnamespacestd; intmain() { cout<<"HelloWorld!"<<endl; return0; }3結(jié)構(gòu)分析1、C++程序由函數(shù)組成。該程序只由一個主函數(shù)main()構(gòu)成。2、一對花括號“{}”是函數(shù)的定界符。3、函數(shù)由語句組成語句用分號結(jié)束;41.2算法與程序算法:也就是解決問題的方案。舉例:給定兩個正整數(shù)p和q,求其最大公因數(shù)?古希臘數(shù)學家歐幾里德的算法:步驟1:如果p<q,交換p和q步驟2:求p/q的余數(shù)r步驟3:如果r=0,則q就是所求的結(jié)果如果r!=0,做如下工作:

令p=q,q=r,重復(fù)步驟2、3,直到r=0為止5例1.2按照歐幾里德算法編程//Example1-2:計算兩個正整數(shù)的最大公因數(shù)#include<iostream> usingnamespacestd; intmain(){ //說明三個整型變量p,q,r intp,q,r; //提示用戶由鍵盤輸入兩個正整數(shù)

cout<<"Pleaseinputtwointegers:"<<endl; cin>>p>>q;6接上頁: //如果p<q,交換p和q if(p<q) { r=p; p=q; q=r; } //計算p除以q的余數(shù)r r=p%q;7接上頁: //只要r不等于0,重復(fù)進行下列計算

while(r!=0) { p=q; q=r; r=p%q; } //輸出結(jié)果

cout<<"Themaximumcommondivisoris"<<q<<"."<<endl; return0;}81.3C++程序的基本要素一、C++關(guān)鍵詞asm,auto,bad_cast,bad_typed,bool,break,case,catch,char,class,const,const_cast,continue,default,delete,do,double,dynamic_cast,else,enum,except,extern,explicit,false,finally,float,for,friend,goto,if,inline,int,long,mutable,namespace,new,operator,private,9C++關(guān)鍵詞(續(xù))protected,public,register,reinterpret_cast,return,short,signed,sizeof,static,static_cast,struct,switch,template,this,throw,try,type_info,typedef,typeid,union,unsigned,using,virtual,void,volatile,while10二、注釋1、多行注釋:/*注釋內(nèi)容*/2、單行注釋://注釋內(nèi)容11三、輸入和輸出(1)標準輸入流對象cin格式:cin>>v1>>v2>>v3…說明:1)>>稱為提取運算符2)V1、V2、V3是已定義的變量3)輸入多個數(shù)據(jù),數(shù)據(jù)之間可以用空格、回車鍵或Tab分開12(2)標準輸出流對象cout格式:cout<<E1<<E2<<E3…1)<<稱為插入運算符2)輸出表達式E1、E2、E3例如:cout<<"Hello";//字符串常量

cout<<4;//常量

cout<<a;//輸出變量的值

cout<<a+6;//先計算后輸出131.4分析問題、編碼、運行1.算法研制2.編寫程序;3.編輯源程序4.編譯和連接5.反復(fù)上機調(diào)試程序,直到改正了所有的編譯錯誤和運行錯誤。6.運行。14例1-3加法計算器程序#include<iostream>usingnamespacestd; intmain(){ doublea,b,c; cout<<"Pleaseinputtwonumbers:"; cin>>a>>b; c=a+b; cout<<a<<"+"<<b<<"="<<c<<endl; return0;}151-4:顯示生日卡#include<iostream>usingnamespacestd; intmain(){ charname1[41],name2[41]; cout<<endl<<"Pleaseinputyourfriend'sname:"; cin>>name1; cout<<endl<<"Pleaseinputyourname:"; cin>>name2;16 cout<<endl<<"===================================="<<endl; cout<<"Mydear"<<name1<<","<<endl; cout<<"Happybirthdaytoyou!"<<endl; cout<<"yours,"<<endl; cout<<""<<name2<<endl; cout<<"===================================="<<endl; return0;}17例1-5:用梯形法計算定積分使用梯形法計算定積分,其中a=0,b=1,被積函數(shù)為sin(x),取積分區(qū)間等分數(shù)為1000。abxyf(x)xixi+1h梯型面積=(上底+下低)x高218//Example#include<iostream>#include<cmath> usingnamespacestd; intmain(){ doublea,b;doubleh; doublesum; intn; inti; a=0.0; b=1.0; n=1000; h=(b-a)/n; sum=(sin(a)+sin(b))/2;19

for(i=1;i<n;i=i+1) sum=sum+sin(a+i*h); sum=sum*h; cout<<"Theresultis"<<sum<<endl; return0;}20例1-6:計算星球之間的萬有引力#include<iostream>usingnamespacestd; doublegrav(doublem1,doublem2,doubledistance){ doubleg,G=6.67E-11; g=G*m1*m2/(distance*distance); returng; }21intmain(){doubleGse,Gme,Msun,Mearth,Mmoon,Dme; Msun=1.987E30; //太陽質(zhì)量1.987×1030千克Mearth=5.975E24; //地球質(zhì)量5.975×1024千克Gse=grav(Msun,Mearth,1.495E11);//太陽與地球兩者間距1.495×1011米

cout<<"Thegravitationbetweensunandearthis"<<Gse<<"N."<<endl; Mmoon=7.348E22; //月亮質(zhì)量7.348×1022千克Dme=3.844E5; //月亮與地球兩者間距3.844×105米

Gme=grav(Mmoon,Mearth,Dme); cout<<"Thegravitationbetweenmoonandearthis"<<Gme<<"N."<<endl; return0;}22學好計算機的唯一途徑是

你的編程能力與你在計算機上投入的時間成

結(jié) 束 語上機練習正比23第2章基本數(shù)據(jù)類型與表達式2.1數(shù)據(jù)類型2.2常量2.3變量2.4運算符與表達式1.算術(shù)運算符和算術(shù)表達式2.關(guān)系運算符和關(guān)系表達式3.邏輯運算符和邏輯表達式4.賦值運算符和賦值表達式5.自增運算符和自減運算符2.5表達式中各運算符的運算順序2.6類型不同的數(shù)據(jù)之間的混合算術(shù)運算程序設(shè)計舉例242.1數(shù)據(jù)類型C++的數(shù)據(jù)有兩種:常量和變量。常量通過本身的書寫格式就說明了該常量的類型;變量必須先說明其類型,否則程序無法為該變量分配存儲空間。在計算機中為了區(qū)別不同的數(shù),使用了不同的表示方法。包括:整數(shù)的表示實數(shù)的表示字符數(shù)據(jù)的表示數(shù)組的表示25數(shù)據(jù)類型計算機只能存放二進制數(shù)據(jù)。不同類型的事物如何區(qū)分和描述?由此產(chǎn)生數(shù)據(jù)類型。不同類型的數(shù)據(jù)占據(jù)不同長度的存儲單元。不同類型的數(shù)據(jù)對應(yīng)不同的值域范圍。不同類型的數(shù)據(jù)對應(yīng)不同的操作(運算)及規(guī)則。數(shù)據(jù)類型越豐富,求解能力越強大。26圖2.1C++的數(shù)據(jù)類型27基本數(shù)據(jù)類型

數(shù)據(jù)類型類型說明浮占用字節(jié)字符型 char1個短整數(shù) short2個整型 int4個浮點型 float4個雙精度型 double8個28數(shù)據(jù)在計算機中的存放數(shù)據(jù)在計算機中采用二進制存放;一個字節(jié)8個二進制位,示意圖如下:數(shù)的表示范圍:-2^7~2^7-1(-128~127)顯然,一個字節(jié)表示數(shù)的范圍是有限的。要表示更大范圍內(nèi)的數(shù),就要使用多個字節(jié)。7029整數(shù)的存儲格式字符型短整型

短整數(shù)表示范圍為:-2^15~2^15-1(-32768~32767)長整型

長整數(shù)表示范圍為:-2^31~2^31-17015870312423161587030實數(shù)的表示實數(shù)也稱為浮點數(shù),用于表示小數(shù);有兩種形式:十進制形式:xxxxx.xxxx指數(shù)形式:xxx.Exx一般浮點數(shù)的可以達到7位有效數(shù)字。例如1234.567。雙精度浮點數(shù)的有效位數(shù)可以達到15~16位。尾數(shù)部分指數(shù)部分3124231615870312.2常量1.整型常量8進制常量,例04400,0777,010010進制常量,例230416進制常量,0x900,0xABC,0xffff2.實型常量0.0,

2.68,3.141593,637.312,32767.0,

32768.0,…0.0E0,

6.226E

4,1.267E20,…323.字符型常量字符常量,例'a','A','1','','+',轉(zhuǎn)義常量'\n'(換行),'\r'(回車),'\t'(橫向跳格),'\''(單引號),…4.字符串常量"VisualC++","12.34","Thisisastring.\n",…5.布爾型常量整數(shù)0表示false,1表示true332.3變量一.變量定義格式:<類型說明符><變量名1>;例:charc1,c2; //說明了2個字符型變量inti,j,k; //說明了3個整型變量longlen; //說明了1個長整型變量

floataverage,sum; //說明了兩個浮點類型的變量

doubledistance,weight; //說明了兩個雙精度類型的變量34二.變量(標識符)命名命名規(guī)則:(1)變量名只能由字母、數(shù)字或下劃線組成;(2)變量名的第一個字符必須是字母或下劃線;(3)變量名長度不超過32個字符(TC);(4)不要用保留字定義變量名(有32個保留字)。合法變量名:

a、b1、_area、employee_name不合法變量名:1-name、maxone、float、*account35三.變量初始化定義變量時賦值例如:charc=‘A’;intcount=0;intcount(0);362.4運算符與表達式運算是數(shù)據(jù)的加工過程。記述不同運算的符號稱為運算符。參加運算的數(shù)據(jù)稱為操作數(shù)或運算數(shù)。由運算符運算符和運算數(shù)組成的式子是表達式。不同類型的表達式按不同運算規(guī)則進行計算37一、算術(shù)運算符和算術(shù)表達式算術(shù)運算符:+ - */%運算對象:數(shù)值變量、常數(shù)、函數(shù)、表達式等計算結(jié)果:數(shù)值優(yōu)先級:先乘、除、取余,后加、減結(jié)合性:從左至右注意事項:5X2

應(yīng)寫成5*X*X(x+y)(x-y)改為(x+y)*(x-y)38二.關(guān)系運算符和關(guān)系表達式關(guān)系運算是對兩個運算數(shù)進行大小關(guān)系等的比較。關(guān)系表達式用關(guān)系運算符將兩個表達式(可以是算術(shù)表達式或關(guān)系表達式、邏輯表達式、賦值表達式、字符表達式)連接起來的式子。39運算符名稱例子關(guān)系>大于a>ba大于b<小于a<ba小于b==等于a==ba等于b!=不等于a!=ba不等于b>=大于等于a>=ba大于等于b<=小于等于a<=ba小于等于b40關(guān)系表達式計算結(jié)果邏輯值(true和false)。c++語言沒有邏輯型數(shù)據(jù)以“非0”代表“真”,以“0”代表“假”。例如,“5==3”的值為“假”;“5>=0”的值為“真”優(yōu)先級:{>,>=,<,<=}高于{==,!=}41三.邏輯運算符和邏輯表達式計算結(jié)果:邏輯值(“真”和“假”)優(yōu)先級:!>&&>||賦值運算<&&、||

<關(guān)系運算<算術(shù)運算<?。ǚ牵┻\算對象:算術(shù)、關(guān)系、賦值、字符及邏輯表達式運算符名稱例子關(guān)系!邏輯非!a非a&&邏輯與a&&ba與b||邏輯或a||ba或b42舉例x*y>z&&x*y<100||-*y>0&&!isgreat(z)判別閏年表達式:(year%4==0&&year%100!=0)||year%400==0xc或xb至少之一成立

x<=c||x>=b43i和j均小于或等于100,或者i和j均大于k(i<=100&&j<=100)||(i>k&&j>k)選未婚、30歲以上女講師和35歲以上男副教授!婚否&&((性別=‘男’&&職稱=‘副教授’&&年齡〉=35)||(性別=‘女’&&職稱=‘講師’&&年齡〉=30))44四.賦值運算符和賦值表達式1.賦值運算符“=”:2.賦值的格式:變量名=表達式3.作用將表達式的值存入變量45舉例i=j=m*n;計算表達式m*n的值,將其結(jié)果存入變量j中,然后再將結(jié)果存入變量i中。temp=a;a=b;b=temp;交換a和b的值sum=sum+i;(等價于sum+=i;)計算sum與i的和,結(jié)果送sum465、自增、自減運算符表2-2自增運算符和自減運算符的用法舉例i++; //i增加1

i; //i減少1472.5表達式中各運算符的運算順序優(yōu)先級別運算符運算形式名稱或含義1()[](e)a[e]圓括號數(shù)組下標2-+++--!-e++x或x++負號和正號自增運算和自減運算邏輯非3*/%e1*e2乘、除和求余4+-e1+e2加和減6<<=>>=e1<e2關(guān)系運算(比較)7==!=e1==e2等于和不等于比較482.6類型不同的數(shù)據(jù)之間混合運算1.級別低的類型轉(zhuǎn)換為級別高的類型。各類型按級別由低到高的順序:char,int,unsigned,long,unsignedlong,float,double。2.可以使用強制類型轉(zhuǎn)換。d1=(double)i1/i2;49例2-1:取整型量的最低4位#include<iostream>usingnamespacestd;intmain(){ inti; cout<<"請輸入一個整數(shù):"; cin>>i; cout<<i<<"的最低4位對應(yīng)的十進制數(shù)是:"<<(i&0X0F)<<endl; return0;}50例2-2根據(jù)三邊長求三角形面積#include<iostream>#include<cmath>usingnamespacestd;intmain(){ 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<<endl; return0;}51例2-3:解一元二次方程求一元二次方程ax2+bx+c=0的根,其中系數(shù)a,b,c為實數(shù),由鍵盤輸入。52#include<iostream>#include<cmath>usingnamespacestd;intmain(){ doublea,b,c,delta,p,q; cout<<"Pleaseintputa,b,c="; cin>>a>>b>>c; delta=b*b-4*a*c;

p=-b/(2*a); q=sqrt(fabs(delta))/(2*a);53

if(delta>=0) cout<<"x1="<<p+q<<endl<<"x2="<<p-q<<endl; else { cout<<"x1="<<p<<"+j"<<q; cout<<endl<<"x2="<<p<<"-j"<<q<<endl; } return0;}54例2-4:溫度轉(zhuǎn)換輸入一個華氏溫度,計算并輸出對應(yīng)的攝氏溫度#include<iostream>usingnamespacestd;intmain(){ doublec,f; cout<<"請輸入一個華氏溫度:"; cin>>f; c=5.0/9.0*(f-32); cout<<"對應(yīng)于華氏溫度"<<f<<"的攝氏溫度為"<<c<<endl; return0;}55例2-5:反序輸出輸入一個四位無符號整數(shù),反序輸出這四位數(shù)。#include<iostream>usingnamespacestd;intmain(){ unsignedintn; charc1,c2,c3,c4; cout<<"請輸入一個界于1000與9999之間的數(shù):"; cin>>n; cout<<"反序輸出前的數(shù)為:"<<n<<endl;56 c1=n%10+'0'; //分離個位數(shù)字

c2=n/10%10+'0'; //分離十位數(shù)字

c3=n/100%10+'0'; //分離百位數(shù)字

c4=n/1000+'0'; //分離千位數(shù)字

cout<<"反序輸出后的數(shù)為:"<<c1<<c2<<c3<<c4<<endl; return0;}57例2-6:大小寫轉(zhuǎn)換輸入一個字符,判斷它是否為大寫字母,如是,將其轉(zhuǎn)換為對應(yīng)的小寫字母輸出;否則,不用轉(zhuǎn)換直接輸出。58#include<iostream>usingnamespacestd;intmain(){ charch; cout<<"請輸入一個字母:"; cin>>ch; if(ch>='A'&&ch<='Z')ch=ch-'A'+'a'; cout<<"將大寫轉(zhuǎn)換為小寫后,該字母為:"<<ch<<endl; return0;}59例2-7:找零錢問題假定有伍角、壹角、伍分、貳分和壹分共五種硬幣,在給顧客找硬幣時,一般都會盡可能的選用硬幣個數(shù)最小的方法。例如,當要給某顧客找七角二分錢時,會給他一個伍角,2個壹角和1個貳分的硬幣。請編寫一個程序,輸入的是要找給顧客的零錢(以分為單位),輸出的是應(yīng)該找回的各種硬幣數(shù)目,并保證找回的硬幣數(shù)最少。60#include<iostream>usingnamespacestd;intmain(){ intchange; //存放零錢的變量

cout<<"請輸入要找給顧客的零錢(以分為單位)"; cin>>change; cout<<"找給顧客的五角硬幣個數(shù)為:"<<change/50<<endl; change=change%50; cout<<"找給顧客的壹角硬幣個數(shù)為:"<<change/10<<endl;61

change=change%10;cout<<"找給顧客的伍分硬幣個數(shù)為:"<<change/5<<endl;change=change%5;cout<<"找給顧客的貳分硬幣個數(shù)為:"<<change/2<<endl;change=change%2;cout<<"找給顧客的壹分硬幣個數(shù)為:"<<change<<endl;return0;}62學好計算機的唯一途徑是

你的編程能力與你在計算機上投入的時間成

結(jié) 束 語上機練習正比63第3章控制結(jié)構(gòu)3.1程序的基本控制結(jié)構(gòu)3.2C++的控制結(jié)構(gòu)1.順序結(jié)構(gòu)2.選擇結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)程序設(shè)計舉例643.1程序的基本控制結(jié)構(gòu)一.結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計方法的基本思想是任何程序都可以用三種基本結(jié)構(gòu)表示,即順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。由這三種基本結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序語句序列1語句序列2語句序列1條件?成立不成立語句序列2語句序列不成立成立條件?順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)65二.模塊化程序結(jié)構(gòu)1.模塊化把程序劃分為若干個模塊,每個模塊獨立存放、一個模塊完成一個功能2.目的降低程序的復(fù)雜度,使設(shè)計出來的程序便于閱讀、調(diào)試和維護。3.一個模塊可以是一條語句、一段程序、一個函數(shù)等4.基本特征僅有一個入口和一個出口

663.2C++的控制結(jié)構(gòu)1、順序結(jié)構(gòu)說明語句賦值語句I/O語句復(fù)合語句和空語句672、選擇結(jié)構(gòu)(1)if語句格式:

if(表達式)

{語句序列1}else{語句序列2}68例3-1編程實現(xiàn)分段函數(shù)69#include<iostream>usingnamespacestd;intmain(){ doublex,y;

cout<<"Pleaseinputx="; cin>>x;

if(x<0) { y=x+1; cout<<"x="<<x<<",y=x+1="<<y<<endl;

}70 elseif(x<1) //0≤x<1 { y=1;

cout<<"x="<<x<<",y="<<y<<endl; } else //1≤x { y=x*x*x; cout<<"x="<<x<<",y=x*x*x="<<y<<endl;

} return0;}71(2)switch語句語句格式:

switch(整數(shù)表達式)

{case數(shù)值1:語句序列1;

…...case數(shù)值n:語句序列n;

[default:

語句序列n+1;]}

72例3-2:將百分制的分數(shù)轉(zhuǎn)換為5級制分數(shù)編寫程序,將百分制的學生成績轉(zhuǎn)換為優(yōu)秀、良好、中等、及格和不及格的5級制成績。標準為:

優(yōu)秀:100-90分;

良好:80-89分;

中等:70-79分;

及格:60-69分;

不及格:60分以下。73#include<iostream>usingnamespacestd;intmain(){ intold_grade,new_grade; cout<<"Pleaseinputthescore:"; cin>>old_grade;74 switch(old_grade/10) //根據(jù)轉(zhuǎn)換值進行分支選擇

{ case10: case9: new_grade=5; break; case8: new_grade=4; break; case7: new_grade=3; break;75case6: new_grade=2; break; default: new_grade=1; } cout<<"Beforetransformed,thescoreis"<<old_grade<<endl; cout<<"Aftertransformed,thescoreis"<<new_grade<<endl; return0;}763.循環(huán)結(jié)構(gòu)(1)while語句格式:

while(表達式)循環(huán)體不成立語句序列成立條件?77

例3-3:計算常數(shù)e的值計算,當通項時停止計算78#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<<"(n="<<n<<")"<<endl; return0;}79(2)do~while語句格式:

do

語句序列

while(表達式);條件?語句序列成立不成立80例3-4用do-while重新編寫例3-3的程序#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<<"(n="<<n<<")"<<endl; return0;}81(3)for語句格式:

for(表達式1;表達式2;表達式3)循環(huán)體82for的執(zhí)行過程(1)計算表達式1;(2)計算表達式2值為非0時,執(zhí)行步驟3;值為0時退出循環(huán);(3)執(zhí)行循環(huán)體;(4)計算表達式3;(5)返回(2);83例3-5:計算1+2+3+…+100#include<iostream>usingnamespacestd;intmain(){ intsum=0; for(inti=1;i<=100;i++) sum=sum+i; //累加求和

cout<<"1+2+3+…+100="<<sum<<endl; return0;}84例3-7:用迭代公式求平方根設(shè),則迭代公式為

迭代結(jié)束條件取相對誤差。85#include<iostream> #include<cmath> usingnamespacestd;constdoubleEPS=1.0e-10;intmain(){ doublea,x; cout<<"Pleaseinputthevalue:";

cin>>a; doublex0,x1; x1=1.0;86

if(a>0.0) //避免負數(shù)開方

{ do {x0=x1; x1=(x0+a/x0)/2; }while(fabs((x0-x1)/x1)>=EPS); //fabs()函數(shù)為求絕對值的庫函數(shù)

x=x1; } else x=a;87 if(x<0) cout<<"Thenegativedoesnothavesquareroot!"<<endl; else cout<<"Thesquarerootof"<<a<<"is"<<x<<endl; return0;}88例3-8:求π的近似值#include<iostream>#include<cmath>usingnamespacestd;intmain(){ ints=1; doublen=1.0,u=1.0,pi=0.0; while(fabs(u)>=1.0e-4) { pi=pi+u; //累加通項

n=n+2; s=-s; //符號位的生成

u=s/n; //通項

} cout<<"pi="<<4*pi<<endl; return0;}89例3-9:打印所有的水仙花數(shù)如果一個三位數(shù)的個位數(shù)、十位數(shù)和百位數(shù)的立方和等于該數(shù)自身,則稱該數(shù)為水仙花數(shù)。編一程序求出所有的水仙花數(shù)。90#include<iostream>usingnamespacestd;intmain(){ intn,i,j,k; for(n=100;n<=999;n++) { 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;}91例3-10:制作乘法表#include<iostream>usingnamespacestd;intmain(){ inti,j; for(i=1;i<10;i++) { for(j=1;j<=i;j++) cout<<j<<"*"<<i<<"="<<i*j<<"\t"; cout<<endl; }return0;}92例3-11:統(tǒng)計階乘n!的末尾中0的個數(shù)對于任意給定的一個正整數(shù)n,統(tǒng)計其階乘n!的末尾中0的個數(shù)。93#include<iostream>usingnamespacestd;intmain(){ intn;intsum=0;inti,k; cout<<"Pleastinputapositivenumber:"; cin>>n; for(i=5;i<=n;i=i+5)//只有5的倍數(shù)才含5的因子

{ intm=i; for(k=0;m%5==0;k++) m=m/5; sum=sum+k; } cout<<"Thenumberofzeroin"<<n<<"!is:"<<sum<<endl; return0;}94學好計算機的唯一途徑是

你的編程能力與你在計算機上投入的時間成

結(jié) 束 語上機練習正比95第4章數(shù)組與字符串4.1數(shù)組1.一維數(shù)組2.二維數(shù)組3.多維數(shù)組4.2字符型數(shù)組和字符串處理庫函數(shù)1.字符型數(shù)組的定義和初始化2.字符串的輸入與輸出3.字符串處理庫函數(shù)964.1數(shù)組數(shù)據(jù)類型(1)基本類型:整型、字符型、實型(2)構(gòu)造類型:由基本類型數(shù)據(jù)按一定規(guī)則組成的,包括數(shù)組、結(jié)構(gòu)體、共用體數(shù)組(1)具有相同數(shù)據(jù)類型的變量集合,這些變量名稱相同,下標不同,稱為數(shù)組元素(2)有一個下標——一維數(shù)組(3)有兩個下標——二維數(shù)組974.1.1一維數(shù)組1、一維數(shù)組的定義格式類型說明符數(shù)組名[常量表達式]2、說明(1)數(shù)組名命名規(guī)則和變量名相同。(2)數(shù)組名后用方括弧括起來的常量表達式表示下標長度(3)C語言的下標從0開始,必須是整型變量或常量。(4)數(shù)組在內(nèi)存中存儲時,按下標遞增的順序連續(xù)存儲各元素例如:intarray[10];

表示數(shù)組名為a,有10個元素983、一維數(shù)組的初始化(1)定義數(shù)組時順序?qū)Ω髟刭x以初值例如:inta[10]={0,1,2,3,4,5,6,7,8,9};(2)全部元素賦初值時,可以不指定數(shù)組長度例如:

inta[5[={1,2,3,4,5};可以寫成inta[]={1,2,3,4,5};(3)可以只給一部分元素賦值。例如:inta[10[={0,1,2,3,4};前面5個元素賦初值,后5個元素值為0。99一維數(shù)組初始化例:intA[5];在內(nèi)存存儲如圖數(shù)組的首地址是數(shù)組名A數(shù)組的首地址也是第一個元素的地址&A[0]C++語言中,數(shù)組的整體不能參加數(shù)據(jù)處理,參加處理的只能是數(shù)組中的元素變量。所以要對數(shù)組進行初始化。例如:intdata[5]={,4,,8,};賦值如圖A[0]A[1]A[2]A[3]A[4]100例4-1題目:給一維數(shù)組x輸入10個整數(shù),找出x數(shù)組中的最大數(shù)和最小數(shù)。算法分析:1、假設(shè)數(shù)組中第1個元素最大,令xmax=a[0]2、將a[i](0<=i<n)與max進行比較,若a[i]<xmax,i=i+1,再執(zhí)行2否則,令xmax=a[i],i=i+1,再執(zhí)行23、循環(huán)結(jié)束,求出最大元素并輸出max。輸入 21731249輸出 max=12101//Example4-1:#include<iostream.h>intmain(){intarray[7];cout<<"Pleaseinputanarraywithsevenelements:"<<endl; for(inti=0;i<7;i++) cin>>array[i]; intbig=array[0]; for(intj=0;j<7;j=j+1) if(array[j]>big)big=array[j]; cout<<"max="<<big<<endl; return0;}102二維數(shù)組定義格式:<類型><數(shù)組名>[<常量表達式1>][<常量表達式2>];例如,三個學生四門課程成績數(shù)據(jù)如下:858793888690958978918295利用二維數(shù)組存放這些數(shù)據(jù)更能表現(xiàn)數(shù)據(jù)之間相互聯(lián)系的特征。每一行數(shù)據(jù)表示該學生的各門課程的成績,而每一列數(shù)據(jù)表示該門課程各學生的成績。該數(shù)組定義為:intmatrix[3][4];103二維數(shù)組存儲結(jié)構(gòu)邏輯結(jié)構(gòu):二維數(shù)組恰似一張表格(或矩陣)。數(shù)組元素中的第一個下標值表示該元素在表格中的行號,第二個下標為列號。

M[3][3]具有如下邏輯結(jié)構(gòu):

M[0][0]M[0][1]M[0][2]M[1][0]M[1][1]M[1][2]M[2][0]M[2][1]M[2][2]存貯結(jié)構(gòu):二維數(shù)組在內(nèi)存中按一維數(shù)組存放、占據(jù)一片連續(xù)的存貯單元;是“按行順序”在內(nèi)存中分配存貯單元。104二維數(shù)組初始化1.按照二維數(shù)組元素的物理存儲次序給所有或部分數(shù)組元素提供數(shù)據(jù)值intscore[3][4]={85,87,93,88,86,90,95,89,78,91,82,95};//給數(shù)組stu_score每個元素都提供初值floatmatrix[2][3]={1.0,3.0};//僅為數(shù)組matrix的前2個元素提供初值1052.以行結(jié)構(gòu)方式提供各數(shù)據(jù)值

intscore[3][4]={{85,87,93,88}, {86,90,95,89},{78,91,82,95}};1064.2字符型數(shù)組和字符串處理庫函數(shù)字符串用雙引號括起來,例如,”abc”;用字符型數(shù)組存放字符串,存放時,在有效字符后自動加’\0’;稱’\0’為空值,是字符串結(jié)束標志;有效字符的個數(shù)稱為字符串長度。例如,”abc”的長度為3,但占4個字節(jié)(’\0’占一位)。107字符型數(shù)組的定義和初始化charweekday[7]={"MONDAY"};charweekday[7]="MONDAY";字符串的輸入與輸出charname[20];cin>>name;cin.get(name,n);//第一個是字符數(shù)組變量,第二個指定向這個變量//中讀入幾個字符cout<<name;108例4-2字符串的輸入與輸出輸入和輸出 Pleaseinputanamewithblank(within19characters):CongZhenPleaseinputthenameagainCongZhen109例4-2源程序#include<iostream.h>intmain(){ charname1[20],name2[20]; cout<<"Pleaseinputanamewithblank(within19characters):"<<endl; cin.get(name1,20); cout<<"Pleaseinputthenameagain"<<endl; cin>>name2; cout<<"Usingfunctionget,thenamestoringinthevariableis:"<<name1<<endl; cout<<"Usingoperater<<,thenamestoringinthevariableis:"<<name2<<endl; return0;}110字符串處理庫函數(shù)需要添加#include<string.h>stpcpy():字符串拷貝;strcat():字符串連接;strchr():在字符串中查找字符;strcmp():字符串比較;strlen():求字符串長度;strlwr():將字符串中的大寫字母轉(zhuǎn)換為小寫字母;strrev():反轉(zhuǎn)字符串;strstr():在字符串中查找另一個字符串;strupr():將字符串中的小寫字母轉(zhuǎn)換為大寫字母;…111例4-3編寫一個用來計算字符串長度的函數(shù)mystrlen(),并用主函數(shù)驗證算法分析:1)設(shè)一個計數(shù)器變量len=02)從數(shù)組s[len]第一個元素開始進行處理3)若當前的元素值s[len]非空(‘\0’),則len+1,繼續(xù)執(zhí)行3;否則,退出循環(huán)。4)打印結(jié)果len112程序邏輯功能框圖len=0str[n]len=len+1打印結(jié)果lenstr[len]=‘\0’?是否113//Example4-3:求字符串的長度#include<iostream.h>//計算字符串的長度的函數(shù)intmystrlen(charstring[]){intlen=0;while(string[len]!='\0')len=len+1;returnlen;}114//測試計算字符串長度的主函數(shù)intmain(){ charstring[100]; intlen=0; cout<<"Pleaseinputastring(within99characters):"<<endl; cin>>string; cout<<"Thelengthofthestringis:"<<mystrlen(string)<<endl; return0;}輸入 china輸出 Thelengthofthestringis:51154.3結(jié)構(gòu)體類型迄今為止,已介紹了基本類型(或稱簡單類型)的變量(如整型、實型、字符型變量等),也介紹了一種構(gòu)造類型數(shù)據(jù)——數(shù)組,數(shù)組中的各元素是屬于同一個類型的。但是只有這些數(shù)據(jù)類型是不夠的。有時需要將不同類型的數(shù)據(jù)組合成一個有機的整體,以便于引用。這些組合在一個整體中的數(shù)據(jù)是互相聯(lián)系的。116例如,工人工資單:姓名、單位、編號.....例如,學生成績單:學號、姓名、性別、各科成績等這些項都與某一學生相聯(lián)系。可以看到性別(sex)、年齡(age)、成績(score)、地址(addr)是屬于學號為10010和名為“LiFun”的學生的。如果將num、name、sex、age、score、addr分別定義為互相獨立的簡單變量,難以反映它們之間的內(nèi)在聯(lián)系。1174.3.1結(jié)構(gòu)體類型的定義

結(jié)構(gòu)體作為一種數(shù)據(jù)構(gòu)造類型,在C語言程序中也許需要經(jīng)歷定義——聲明——調(diào)用的過程。結(jié)構(gòu)體是由不同的數(shù)據(jù)類型的數(shù)據(jù)組成的。組成結(jié)構(gòu)體的每個數(shù)據(jù)成為該結(jié)構(gòu)體的成員項簡稱成員。在程序使用結(jié)構(gòu)體時,首先要對結(jié)構(gòu)體進行描述,這稱為結(jié)構(gòu)體的定義。1184.3.1結(jié)構(gòu)體類型的定義struct結(jié)構(gòu)名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;

……

數(shù)據(jù)類型成員名n;};structstudent{charname[20];unsignedlongnumber;floatmath;floatenglish;floatphysics;};119三種結(jié)構(gòu)體變量的聲明(1)先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型變量。例如,日期類型可以定義為

structdate{intda_year;charda_mon;charda_day;};structdateyesterday,today,tomorrow;120三種聲明結(jié)構(gòu)體變量的方式(2)(2)定義類型的同時聲明變量。例如,

structdate{intda_year;charda_mon;charda_day;}yesterday,today,tomorrow;聲明了3個日期類型的變量:yesterday、today和tomorrow。121三種聲明結(jié)構(gòu)體變量的方式(3)(3)直接定義結(jié)構(gòu)體類型變量。例如,

struct{intda_year;charda_mon;charda_day;}yesterday,today,tomorrow;不出現(xiàn)結(jié)構(gòu)體類型名。122程序設(shè)計舉例例4-5編寫一個程序,實現(xiàn)矩陣相乘運算例4-6編寫一個用于對整型數(shù)組進行排序的程序,排序方法使用簡單的交換排序法例4-7編寫一個字符串處理程序,將一個字符串之中的所有小寫字母轉(zhuǎn)換為相應(yīng)的大寫字母例4-8使用數(shù)組編寫一個統(tǒng)計學生課程平均分的程序例4-9使用結(jié)構(gòu)體重新編寫上題的程序123例4-5實現(xiàn)矩陣相乘運算算法說明:矩陣S(LxN)和矩陣T(NxM)相乘。S是L行、N列;T是N行、M列。要求:S的列數(shù)和T的行數(shù)必須相同。

124算法說明(續(xù))S=

103211

T=

312201121

SxT=

1*3+0*2+3*11*1+0*0+3*21*2+0*1+3*12*3+1*2+1*1

2*1+1*0+1*22*2+1*1+1*1

=Rr11r12r13r21r22r23

125矩陣乘法算法用兩重循環(huán)實現(xiàn)對Cij的求值:for(i=0;i<l;i=i+1)for(j=0;i<n;j=j+1)

求Cij;其中“求Cij”又可以細化為:

Cij=0;for(k=0;k<m;k=k+1)

Cij=Cij+Aik×Bkj126//4-5:計算兩個矩陣的乘積#include<iostream.h>intmain(){constintL=4; constintM=5;constintN=3; doublea[L*M]={1.0,3.0,-2.0,0.0,4.0, -2.0,-1.0,5.0,-7.0,2.0, 0.0,8.0,4.0,1.0,-5.0, 3.0,-3.0,2.0,-4.0,1.0 }; doubleb[M*N]={4.0,5.0,-1.0, 2.0,-2.0,6.0, 7.0,8.0,1.0, 0.0,3.0,-5.0, 9.0,8.0,-6.0 }; doublec[L*N]; inti,j,k;127//4-5:計算兩個矩陣的乘積(續(xù))for(i=0;i<L;i=i+1) for(j=0;j<N;j=j+1) {c[i*N+j]=0; for(k=0;k<M;k=k+1) c[i*N+j]=c[i*N+j]+a[i*M+k]*b[k*N+j]; } cout<<"Theresultisc="<<endl; for(i=0;i<L;i=i+1) { for(intj=0;j<N;j=j+1) cout<<c[i*N+j]<<""; cout<<endl; } return0;}128例4-6冒泡排序算法分析:(1)兩兩比較相鄰元素A(I)和A(I+1)(I=1,2,…N-1),如果A(I)>A(I+1),則交換它們的位置A(I)

A(I+1);(2)對剩下的N-1個元素,再兩兩進行比較,按同樣規(guī)則交換它們的位置,經(jīng)過N-2次比較,將次最大值交換到A(N-1)的位置;(3)如法炮制,經(jīng)過N-1趟的“冒泡處理”,每趟進行N-i次的比較,全部數(shù)列有序。129130//Example4-6:冒泡排序#include<iostream.h>intmain(){ constintCOUNT=16; intlist[COUNT]={503,87,512,61,908,170,897,275, 653,426,154,509,612,677,765,703 }; for(inti=0;i<COUNT;i=i+1) for(intj=COUNT-1;j>i;j=j-1) if(list[j-1]>list[j]) {inttmp=list[j-1];list[j-1]=list[j];list[j]=tmp;} cout<<"Theresultis:"<<endl; for(intk=0;k<16;k++)cout<<list[k]<<""; cout<<endl; return0;}131例4-7將小寫字母轉(zhuǎn)換為大寫字母#include<iostream.h>intmain(){ charstr[]="Thisisasample"; cout<<"Theoriginalstringis:"<<str<<endl; inti=0; while(str[i]!=0) { if(str[i]>='a'&&str[i]<='z')str[i]=str[i]-'a'+'A'; i=i+1; } cout<<"Aftertransform:"<<str<<endl; return0;}132例4-8統(tǒng)計學生課程平均分的程序定義二維數(shù)組student[6][5],其中,給數(shù)組student前4列元素讀值,第1列為學號,第2列到第4列為4門課程的成績。第5列為平均分,通過計算求得。133//4-8:統(tǒng)計學生課程的平均分#include<iostream.h>#define PERSON 6#define COURSE 3intmain(){ intstudent[PERSON][COURSE+2]; int i,j; cout<<"Pleaseinputdataofstudent:"<<endl;134

for(i=0;i<PERSON;i=i+1){ cin>>student[i][0];student[i][COURSE+1]=0; for(j=1;j<=COURSE;j=j+1) { cin>>student[i][j];student[i][COURSE+1]=student[i][COURSE+1]+student[i][j]; } student[i][COURSE+1]=student[i][COURSE+1]/COURSE;}135//4-8:統(tǒng)計學生課程的平均分 cout<<"學號高數(shù)英語體育平均分"<<endl; cout<<"--------------------------------------"<<endl; for(i=0;i<PERSON;i=i+1) { for(j=0;j<=COURSE+1;j=j+1) cout<<student[i][j]<<"\t"; cout<<endl; } return0;}136例4-9使用結(jié)構(gòu)體重新編寫上題的程序。算法定義一個結(jié)構(gòu)體類型StudentType,其中包含學號、各門課程成績和平均分等數(shù)據(jù)成員,其值分別通過輸入和計算求得。137//Example4-9:統(tǒng)計學生課程的平均分#include<iostream.h>#define PERSON 6#define COURSE 3structStudentType{charid[10]; //學號intscore[COURSE]; //課程成績intGPA; //平均分};138intmain(){StudentTypexjtuStudent[PERSON]; inti,j; cout<<"Pleaseinputdataofstudent:"<<endl; for(i=0;i<PERSON;i=i+1){ cin>>xjtuStudent[i].id; xjtuStudent[i].GPA=0; 139 for(j=0;j<COURSE;j=j+1) {cin>>xjtuStudent[i].score[j]; xjtuStudent[i].GPA=xjtuStudent[i].GPA+xjtuStudent[i].score[j]; } xjtuStudent[i].GPA=xjtuStudent[i].GPA/COURSE;}140cout<<"學號高數(shù)英語體育平均分"<<endl;cout<<"--------------------------------------"<<endl;for(i=0;i<PERSON;i=i+1){ cout<<xjtuStudent[i].id<<"\t"; for(j=0;j<COURSE;j=j+1) cout<<xjtuStudent[i].score[j]<<"\t"; cout<<xjtuStudent[i].GPA<<endl;}return0;}141上機練習題1.使用數(shù)組求斐波那挈數(shù)列的第n項和前n之和。3.矩陣相加。4.輸入10個字符到一維字符數(shù)組s中,將字符串置逆。即s[0]與s[9]互換,s[1]與[8]互換,...,s[4]與s[5]互換,輸出置逆后的數(shù)組s。5.替換加密(愷撒加密法)。7.定義一個名為Circle的結(jié)構(gòu)體(圓),其數(shù)據(jù)成員是圓的外接矩形的左上角和右下角兩點的坐標,計算該圓的面積。142學好計算機的唯一途徑是

你的編程能力與你在計算機上投入的時間成

結(jié) 束 語上機練習正比143第5章函數(shù)5.1函數(shù)概述5.2函數(shù)的定義5.3函數(shù)的調(diào)用5.4函數(shù)間的參數(shù)傳遞5.5函數(shù)與數(shù)組5.6局部變量和全局變量5.7函數(shù)聲明5.8帶有缺省參數(shù)的函數(shù)1445.1函數(shù)概述C++語言程序的結(jié)構(gòu)特點:程序整體由一個或多個稱為函數(shù)的程序塊組成每個函數(shù)都具有各自獨立的功能和明顯的界面1455.2函數(shù)定義函數(shù)定義就是編寫完成函數(shù)功能的程序塊1、函數(shù)定義的一般格式<函數(shù)值類型><函數(shù)名>(<形式參數(shù)表>){<函數(shù)體>}1462、函數(shù)值類型函數(shù)返回值所具有的數(shù)據(jù)類型與變量類型相同。(1)返回值是數(shù)值可以是帶符號或unsigned的char、int、short、long型以及float、double型(2)返回值是地址類型是指針型(3)函數(shù)沒有返回值類型是void1473、形式參數(shù)(1)形參概念函數(shù)可以帶有零個或多個形式參數(shù)。形參是函數(shù)的內(nèi)部變量。即形式參數(shù)的生存期和作用域僅限于函數(shù)內(nèi)部。形式參數(shù)只是被初始化的內(nèi)部變量,即只有當函數(shù)被調(diào)用,形式參數(shù)才被賦予調(diào)用函數(shù)傳遞來的實參148(2)形式參數(shù)聲明表示將從主調(diào)函數(shù)中接收哪些類型的信息例:doublegrav(doublem1,doublem2,doubledistance)形式參數(shù)可以在函數(shù)體中引用,可以輸入、輸出、賦值或參與運算參數(shù)說明格式為:

<類型><參數(shù)1>,<類型><參數(shù)2>,…,<類型><參數(shù)n>例:intarray[],intcount149例5.1編寫求階乘n!的函數(shù)算法分析:計算公式為:

n!=n×(n-1)×…×3×2×1,且0!=1在子函數(shù)中只需一個數(shù)據(jù)x,故設(shè)一個參數(shù)n計算結(jié)果要返回主函數(shù),故設(shè)一個變量resultn的階乘可在一重循環(huán)中實現(xiàn)150例5-1:函數(shù)fac()計算階乘n!//Example5-1:函數(shù)fac()計算階乘n!intfac(intn){ intresult=1; if(n<0) return-1; elseif(n==0) return1; while(n>1) { result*=n; n--; } returnresult;}1515.3函數(shù)的調(diào)用1、函數(shù)調(diào)用就是使程序轉(zhuǎn)去執(zhí)行某個函數(shù)體。C++中,除了main函

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論