第二章數(shù)據(jù)類型及表達(dá)式_第1頁
第二章數(shù)據(jù)類型及表達(dá)式_第2頁
第二章數(shù)據(jù)類型及表達(dá)式_第3頁
第二章數(shù)據(jù)類型及表達(dá)式_第4頁
第二章數(shù)據(jù)類型及表達(dá)式_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第二章數(shù)據(jù)類型及表達(dá)式第一頁,共九十三頁,編輯于2023年,星期四C++程序設(shè)計(jì)一問題-模型-程序

客觀世界認(rèn)識(shí)世界計(jì)算機(jī)世界(問題)(模型)(程序)建模表現(xiàn)程序設(shè)計(jì)是建立問題的模型并把它用一種計(jì)算機(jī)語言表現(xiàn)出來的過程。第二頁,共九十三頁,編輯于2023年,星期四二數(shù)據(jù)結(jié)構(gòu)與算法1.數(shù)據(jù)結(jié)構(gòu):是現(xiàn)實(shí)世界中事物屬性及相互聯(lián)系的模型。如簡單問題中的變量、數(shù)組,復(fù)雜問題中的集合、棧、隊(duì)列、樹、圖等。2.算法:由一些特定的操作按一定的規(guī)則組成的有窮序列。包括基本操作和控制結(jié)構(gòu)兩要素。1)基本操作:算數(shù)運(yùn)算、邏輯運(yùn)算、關(guān)系運(yùn)算和賦值運(yùn)算。2)控制結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三面向過程與面向?qū)ο蟮某绦蛟O(shè)計(jì)1.面向過程的程序設(shè)計(jì):是一種基于功能分析、以算法為中心的程序設(shè)計(jì)方法。第三頁,共九十三頁,編輯于2023年,星期四2.面向?qū)ο蟮某绦蛟O(shè)計(jì):是一種基于結(jié)構(gòu)分析的、以數(shù)據(jù)為中心的程序設(shè)計(jì)方法。通常把面向?qū)ο蟮某绦蛟O(shè)計(jì)描述為

對(duì)象+消息傳遞第四頁,共九十三頁,編輯于2023年,星期四問題一:解方程ax2+bx+c=0分析:①只考慮有實(shí)數(shù)根。②考慮可能有復(fù)數(shù)根。問題二:設(shè)有曲線f(x)=…,求f(x)、y=x1、y=x2及X軸圍成的圖形面積。f(x)xyx1x2第五頁,共九十三頁,編輯于2023年,星期四問題三:兩盤磁帶內(nèi)容互換。問題四:有100個(gè)整數(shù),按從小到大順序排列。第六頁,共九十三頁,編輯于2023年,星期四第二章數(shù)據(jù)類型及表達(dá)式C++過程程序構(gòu)成(1)過程程序功能:輸入、運(yùn)算、控制、輸出、界面與接口C++過程程序結(jié)構(gòu)例1.2.cpp計(jì)算a+b=?(P6)組成:注釋、編譯預(yù)處理、程序主體第七頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>//預(yù)處理voidmain()//主函數(shù){inta,b,sum;//定義變量cin>>a>>b;//輸入sum=a+b;//計(jì)算cout<<“a+b=“<<sum<<endl;//輸出}第八頁,共九十三頁,編輯于2023年,星期四2.1C++數(shù)據(jù)類型P19表2.1數(shù)據(jù)類型長度和范圍2.2常量常量:1)常數(shù)(整型和實(shí)型)2)字符常量(單引號(hào)內(nèi)的一個(gè)字符)轉(zhuǎn)義字符是以反斜杠\開頭的字符常量(如‘\n’表示換行)詳見表2-2。第九頁,共九十三頁,編輯于2023年,星期四3)字符串常量:一對(duì)雙引號(hào)內(nèi)的字符序列,如“Hello”注意字符串常量與字符型常量的存儲(chǔ)形式是不同的。它在內(nèi)存中構(gòu)成是HELLO\04)符號(hào)常量:用const說明的標(biāo)識(shí)符。如constintmutex=1;用define定義符號(hào)常量#defineMAX100程序變量:由名字來標(biāo)識(shí),在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。其名字為變量名,其值為變量值。變量還有特定的類型,使用變量前應(yīng)聲明即創(chuàng)建。三要素:名字、類型和值。字符集:ASCII碼字符集第十頁,共九十三頁,編輯于2023年,星期四2.3變量變量定義:類型變量名表如intx,y,z;chara,b;floatarea;變量命名:變量名是標(biāo)識(shí)符,不能使用C++關(guān)鍵字。變量名區(qū)分大小寫,如DAY和day不同。變量賦值與初始化intx,y;x=5,y=10;也可以在定義時(shí)初始化intx=5,y=10;第十一頁,共九十三頁,編輯于2023年,星期四2.4運(yùn)算符與表達(dá)式運(yùn)算符功能、運(yùn)算對(duì)象個(gè)數(shù)、類型、值的限制。表達(dá)式值的類型。運(yùn)算的優(yōu)先級(jí)。結(jié)合性。表達(dá)式(1)算數(shù)運(yùn)算符與算數(shù)表達(dá)式(2)關(guān)系運(yùn)算符與關(guān)系表達(dá)式(3)邏輯運(yùn)算符與邏輯表達(dá)式(4)條件運(yùn)算符與條件表達(dá)式(5)賦值運(yùn)算符與賦值表達(dá)式第十二頁,共九十三頁,編輯于2023年,星期四2.5算術(shù)運(yùn)算符與算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符運(yùn)算符的優(yōu)先級(jí)與結(jié)合性混合運(yùn)算自增和自減運(yùn)算符第十三頁,共九十三頁,編輯于2023年,星期四2.6賦值運(yùn)算符與賦值表達(dá)式賦值過程中的類型轉(zhuǎn)換復(fù)合賦值運(yùn)算符:將復(fù)合賦值運(yùn)算符后的若干項(xiàng)當(dāng)成一個(gè)整體。如x*=y+3相當(dāng)于x*=(y+3)賦值表達(dá)式第十四頁,共九十三頁,編輯于2023年,星期四a%b=a-int(a/b)*b如:7%4=37%-4=3-7%4=-3-7%-4=-3例ex202#include<iostream.h>main(){inti=3;floatr=2.0;cout<<2*-i<<endl;i=r/i;cout<<i;r=r/(r+3);cout<<r<<endl;i=2%3;cout<<i<<endl;}第十五頁,共九十三頁,編輯于2023年,星期四例ex203賦值右結(jié)合;關(guān)系表達(dá)式為真輸出1,否則輸出0#include<iostream.h>main(){inta=1,b=2,c;cout<<“a=1,b=2”<<endl;cout<<-(c=a=1)<<endl;cout<<(c=a>=b);}第十六頁,共九十三頁,編輯于2023年,星期四例ex204復(fù)合賦值運(yùn)算符是把右邊的表達(dá)式作為一個(gè)整體來進(jìn)行運(yùn)算的#include<iostream.h>Main(){intx,y;cout<<(x=3,y=8,x*=y+1)<<endl;cout<<(x=3,y=8,x=x*y+1)<<endl;}第十七頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>main(){inti=3;cout<<(i++)+(i++)+(i++);}運(yùn)行結(jié)果:9例sizeof運(yùn)算符#include<iostream.h>main(){cout<<sizeof(int)<<‘‘;cout<<sizeof(double)<<endl;}運(yùn)行結(jié)果:48第十八頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>main(){inti=3;cout<<(++i)<<endl;cout<<(++i)<<endl;cout<<(++i)<<endl;}結(jié)果:456(6)逗號(hào)運(yùn)算符及其表達(dá)式(7)關(guān)于表達(dá)式運(yùn)算順序的討論第十九頁,共九十三頁,編輯于2023年,星期四2.7逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式一般形式表達(dá)式1,表達(dá)式2,…,表達(dá)式n其值是表達(dá)式n的值第二十頁,共九十三頁,編輯于2023年,星期四

第三章結(jié)構(gòu)化程序設(shè)計(jì)

語句:定義語句、表達(dá)式語句、空語句、塊語句(復(fù)合語句)、流程控制語句。流輸入輸出1)無格式輸出coutcout<<表達(dá)式1<<表達(dá)式2<<表達(dá)式n2)數(shù)據(jù)輸入cincin>>變量1>>變量2>>變量n輸入的數(shù)據(jù)之間用空格來分隔,所以不能將空格輸入給字符變量,若要輸入空格給字符變量需要用getchar()函數(shù)。第二十一頁,共九十三頁,編輯于2023年,星期四例:#include<stdio.h>#include<iostream.h>voidmain(){cout<<getchar()<<endl;}輸入:空格↙運(yùn)行結(jié)果:32(空格的ASCII碼)第二十二頁,共九十三頁,編輯于2023年,星期四3.5順序結(jié)構(gòu)程序設(shè)計(jì)實(shí)現(xiàn)順序結(jié)構(gòu)可通過定義語句、表達(dá)式語句、空語句、塊語句(復(fù)合語句)來實(shí)現(xiàn)。順序結(jié)構(gòu)是按照語句出現(xiàn)的次序依此執(zhí)行例3.5塊A塊B第二十三頁,共九十三頁,編輯于2023年,星期四3.6關(guān)系運(yùn)算和邏輯運(yùn)算表達(dá)式關(guān)系運(yùn)算符表達(dá)式表達(dá)式邏輯運(yùn)算符表達(dá)式第二十四頁,共九十三頁,編輯于2023年,星期四C++約定,對(duì)表達(dá)式進(jìn)行最少的運(yùn)算例:#include<iostream.h>main(){inta=1,b=2,c;c=a||b++;cout<<b<<c<<endl;}運(yùn)行結(jié)果:21第二十五頁,共九十三頁,編輯于2023年,星期四3.7選擇結(jié)構(gòu)程序設(shè)計(jì)if-else語句If(判斷表達(dá)式)”真語句“;else“假”語句;注意:if-else結(jié)構(gòu)可以嵌套:每個(gè)else和其前面最近的尚未配對(duì)的if匹配。第二十六頁,共九十三頁,編輯于2023年,星期四if…else結(jié)構(gòu)嵌套例:從3個(gè)數(shù)中找最大數(shù)intx,y,z;cin>>x>>y>>z;cout<<“Themaxis:”if(x>y)if(x>z)cout<<x<<endl;elsecout<<z<<endl;elseif(y>z)cout<<y<<endl;elsecout<<z<<endl;}第二十七頁,共九十三頁,編輯于2023年,星期四例輸入三個(gè)數(shù),按從小到大的順序輸出#include<iostream.h>main(){floata,b,c,t;cin>>a>>b>>c;if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}cout<<a<<","<<b<<","<<c<<endl;}第二十八頁,共九十三頁,編輯于2023年,星期四

表達(dá)式1?表達(dá)式2:表達(dá)式3

若表達(dá)式1為真,則表達(dá)式2作為整個(gè)表達(dá)式的值;否則表達(dá)式3作為整個(gè)表達(dá)式的值。

例:輸入一個(gè)字符,判別它是否大寫字母,如果是將它轉(zhuǎn)換成小寫字母;如不是,不轉(zhuǎn)換。

#include<iostream.h>

main()

{charch;

cin>>ch;

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

cout<<ch<<endl;

}第二十九頁,共九十三頁,編輯于2023年,星期四switch選擇結(jié)構(gòu)Switch(開關(guān)表達(dá)式){case常量1:語句序列1;break;case常量2:語句序列2;break;…case常量n:語句序列n;break;default:語句序列n+1}第三十頁,共九十三頁,編輯于2023年,星期四例#include<iostream.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;};case2:a++;b++;break;}cout<<a<<“,”<<b<<endl;}結(jié)果:2,1第三十一頁,共九十三頁,編輯于2023年,星期四While循環(huán)While(條件表達(dá)式)語句//循環(huán)體例3.28練習(xí):計(jì)算10!第三十二頁,共九十三頁,編輯于2023年,星期四例:歐幾里德算法:求兩個(gè)非負(fù)整數(shù)m,n的最大公因子。算法:m,n的最大公因子表示為(m,n),m=n*q+r,則r為m/n后的余數(shù),且有(m,n)=(n,r),當(dāng)r=0時(shí),n就是最大公因子。例如:(64,24)=(24,16)=(16,8)=(8,0)即8就是64,24的最大公因子。第三十三頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>voidmain(){intm,n,r,u,v;cin>>m>>n;u=m;v=n;if(u*v!=0){while(r=u%v) { u=v; v=r; } cout<<"最大公因子是:"<<v<<endl;} else cout<<"數(shù)據(jù)非法"<<endl;cout<<"最小公倍數(shù)是:"<<m*n/v<<endl;}第三十四頁,共九十三頁,編輯于2023年,星期四例Fibonacci數(shù)列問題

1,1,2,3,5,8,13,21,34,…#include<iostream.h>main(){intf1=1,f2=1,n=0,num;cin>>num;while(++n<=num){cout<<f1<<","<<f2<<",";f1=f1+f2; f2=f2+f1; } }第三十五頁,共九十三頁,編輯于2023年,星期四Do-while循環(huán)Do語句//循環(huán)體while(判斷表達(dá)式);注意:最后有分號(hào);循環(huán)體不需要加{};先執(zhí)行循環(huán)體后判斷條件(循環(huán)體至少執(zhí)行一次)例3.29第三十六頁,共九十三頁,編輯于2023年,星期四For循環(huán)結(jié)構(gòu)for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句序列;}//循環(huán)體for循環(huán)完全可以代替while和do-while循環(huán)注意for語句的執(zhí)行過程第三十七頁,共九十三頁,編輯于2023年,星期四For循環(huán)嵌套for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句序列;for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句序列;}}第三十八頁,共九十三頁,編輯于2023年,星期四流程轉(zhuǎn)向控制Break語句:從循環(huán)體內(nèi)跳出循環(huán),即提前結(jié)束循環(huán)。Continue:結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,進(jìn)行下一次是否執(zhí)行循環(huán)的判定。第三十九頁,共九十三頁,編輯于2023年,星期四第四十頁,共九十三頁,編輯于2023年,星期四例把100~200之間的不能被3整除的數(shù)輸出。#include<iostream.h>Main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;cout<<n;}}(見例ex126.cpp)第四十一頁,共九十三頁,編輯于2023年,星期四例打印3~100中的素?cái)?shù)#include<iostream.h>main(){cout<<"Theprimersfrom3to100is:"<<endl;for(intm=3;m<=100;m++){intf=1;for(intn=2;n<=m/2;n++) {if(m%n==0) {f=0; break;} } if(f==0) continue; cout<<m<<',';}}第四十二頁,共九十三頁,編輯于2023年,星期四讀程序,寫出運(yùn)行結(jié)果(例ex127.cpp)#include<iostream.h>main(){inty=9;for(;y>0;y--){if(y%3==0){cout<<--y<<endl;continue;}}}第四十三頁,共九十三頁,編輯于2023年,星期四讀程序,寫出運(yùn)行結(jié)果(例ex128.cpp)#include<iostream.h>main(){intx=1,y=1,z=0;x=x&&y||z; cout<<x<<endl; cout<<(x||!y++&&++z)<<endl; cout<<y<<endl; cout<<z<<endl; x=1; y=1; z=x++-1; cout<<x<<endl; cout<<z<<endl; z+=(-x++)+(++y); cout<<x<<endl; cout<<z<<endl; cout<<y<<endl;}第四十四頁,共九十三頁,編輯于2023年,星期四讀程序,寫出運(yùn)行結(jié)果:輸入2473(例ex129.cpp)#include<iostream.h>#include<stdio.h>main(){ints;while((s=getchar())!='\n'){switch(s-'2'){case0:case1:putchar(s+4); case2:putchar(s+4);break; case3:putchar(s+3); default:putchar(s+2);break;}}cout<<endl;}第四十五頁,共九十三頁,編輯于2023年,星期四實(shí)驗(yàn)習(xí)題:1.i=1,j=1;cout<<i+++j<<endl;結(jié)果:2相當(dāng)于(i++)+ji++++j;i+++++j均出錯(cuò),但i+++(++j)是正確的。2.for(inti=0,

j=5;

i=j;){cout<<i<<j<<endl;i++;j--;}循環(huán)執(zhí)行5次。如條件換成i!=j,則是無限循環(huán)。3.#include<iostream.h>voidmain(){inti,j,x=0;for(i=0;i<=3;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}cout<<”x=”<<x<<endl;}結(jié)果:16第四十六頁,共九十三頁,編輯于2023年,星期四4.#include<iostream.h>voidmain(){inti,s=0;for(i=0;i<5;i++)switch(i){case0:s+=i;break;case1:s+=i;break;case2:s+=i;break;default:s+=2;}cout<<”s=”<<s<<endl;}循環(huán)做5次結(jié)果:75.

#include<iostream.h>voidmain(){for(intj=10;j>3;j--){if(j%3)j--;j=j-2;cout<<j<<endl;}}

循環(huán)做2次結(jié)果:74第四十七頁,共九十三頁,編輯于2023年,星期四例打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。如153是一個(gè)“水仙花數(shù)”。(見ex130.cpp)例猴子吃桃問題:猴子第一天摘下若干桃子,當(dāng)即吃了一半,還不過癮又多吃了一個(gè)。第二天又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天都吃了前一天剩下的一半零一個(gè)。到第10天想再吃時(shí),見只剩一個(gè)桃子了。求第一天共摘多少桃子。(見ex131.cpp)第四十八頁,共九十三頁,編輯于2023年,星期四例輸入n=5時(shí),輸出下列圖形*************************(見Ex132.cpp)練習(xí):輸入n值,輸出由*組成的高為n的平行四邊形。******************************((見Ex133.cpp)第四十九頁,共九十三頁,編輯于2023年,星期四例求下列算式中的X,Y,Z的值XYZ+YZZ532(ex134.cpp)例一球從100米高度自由落下,每次落地后跳回原高度的一半,再落下。求它在第10次落地時(shí),共經(jīng)過多少米?第10次反彈多高?(ex135.cpp)第五十頁,共九十三頁,編輯于2023年,星期四讀程序,從鍵盤輸入3.62.4(ex136.cpp)#include<iostream.h>#include<math.h>main(){floatx,y,z;cin>>x>>y;z=x/y;while(1){if(fabs(z)>1.0){x=y;y=z;z=x/y;}else break;}cout<<y<<endl;}第五十一頁,共九十三頁,編輯于2023年,星期四讀程序,從鍵盤輸入6514(ex137.cpp)#include<iostream.h>main(){intm,n;cin>>m>>n;while(m!=n){while(m>n)m-=n;while(n>m)n-=m;}cout<<m<<','<<n<<endl;}第五十二頁,共九十三頁,編輯于2023年,星期四例求sn=a+aa+aaa+…+aaa…a的值,n個(gè)a其中a是一個(gè)數(shù)字。如2+22+222+2222+22222(此時(shí)n=5)(ex138.cpp)第五十三頁,共九十三頁,編輯于2023年,星期四例:求1n+3n+5n+7n+…+mn,其中m,n的值從鍵盤輸入。ex139.cpp#include<iostream.h>voidmain(){ints=0,m=9,n=3,t,i=1;while(i<=m){t=1;for(intj=1;j<=n;j++) t=t*i;s=s+t; i=i+2;}cout<<s<<endl;}第五十四頁,共九十三頁,編輯于2023年,星期四例求sin(x)的近似值#include<iostream.h>voidmain(){intn,s;doublex,y,d,t;cin>>x>>n;y=x;s=1;for(inti=2;i<=n;i++){d=1.0;t=1.0;for(intk=1;k<=2*i-1;k++) {d*=k;t*=x;} s=-s; y=y+s*t/d;}cout<<y<<endl;}第五十五頁,共九十三頁,編輯于2023年,星期四第5章函數(shù)與預(yù)處理使用函數(shù)的目的:提高程序的可讀性。下圖為一個(gè)C++程序的結(jié)構(gòu)示意圖第五十六頁,共九十三頁,編輯于2023年,星期四函數(shù)結(jié)構(gòu):函數(shù)頭{函數(shù)體}其中:函數(shù)頭形式為:類型函數(shù)名(形式參數(shù)列表)函數(shù)體:是一個(gè)語句塊,即{…}函數(shù)返回形式:return表達(dá)式;(一個(gè)函數(shù)體中可以有多個(gè)return語句,每次只通過一個(gè)return執(zhí)行返回操作)函數(shù)定義:即實(shí)現(xiàn)。它給定函數(shù)的類型與名字、形參的類型與名字、函數(shù)體。第五十七頁,共九十三頁,編輯于2023年,星期四如定義intfunl(charc,floatf),表明函數(shù)返回值為整型,函數(shù)名為funl,形式參數(shù)為c和f,分別是字符型和實(shí)型。函數(shù)定義一般形式:類型函數(shù)名(形式參數(shù)表列)例:返回一個(gè)整數(shù)的絕對(duì)值的函數(shù)intabsolute_value(intx){if(x>=0)returnx;elsereturn–x;}關(guān)于函數(shù)的返回值函數(shù)的返回值是通過return語句獲得的。函數(shù)值的類型:定義函數(shù)時(shí)應(yīng)指定函數(shù)值的類型,如intmax(x,y);Charletter(c1,c2);doublemin(x,y)第五十八頁,共九十三頁,編輯于2023年,星期四為了明確表示“不帶回值”,用void定義無類型,此時(shí)函數(shù)只執(zhí)行一個(gè)功能。此時(shí)可省略return語句。例:voidspc(intn){for(inti=0;i<n;i++)cout<<‘‘;}函數(shù)名重載即多個(gè)函數(shù)使用一個(gè)函數(shù)名例:定義兩個(gè)同名的函數(shù)intmax(intx,inty){return((x>y)?x:y);}doublemax(doublex,doubley){return((x>y)?x:y);}第五十九頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>main(){cout<<max(10,20)<<endl;cout<<max(1.23,4.56)<<endl;}C++編譯器根據(jù)實(shí)參與形參的匹配自動(dòng)選擇用哪個(gè)函數(shù)。函數(shù)調(diào)用形式:函數(shù)名(實(shí)參表列)函數(shù)調(diào)用的功能:1.用實(shí)參向形參傳遞數(shù)據(jù);2.為形參及函數(shù)體中聲明的變量分配存儲(chǔ)空間;3.中斷現(xiàn)行函數(shù),把流程轉(zhuǎn)向被調(diào)用函數(shù)的入口處,開始執(zhí)行被調(diào)函數(shù)。第六十頁,共九十三頁,編輯于2023年,星期四例:ex501.cpp#include<iostream.h>intmax(intx,inty){intz;z=x>y?x:y; returnz; }main(){inta,b,c;cin>>a>>b;c=max(a,b);cout<<c<<endl;}第六十一頁,共九十三頁,編輯于2023年,星期四說明:參數(shù)傳遞關(guān)系如下:形參未出現(xiàn)函數(shù)調(diào)用時(shí),并不占用內(nèi)存單元,只有在發(fā)生函數(shù)調(diào)用時(shí)函數(shù)max中的形參才被分配內(nèi)存單元。調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。第六十二頁,共九十三頁,編輯于2023年,星期四注意:實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是單向“值傳遞”,即只能由實(shí)參傳給形參,而不能由形參傳回來給實(shí)參。(所以形參在函數(shù)內(nèi)即使發(fā)生變化也不會(huì)影響到實(shí)參的值)函數(shù)聲明:1.當(dāng)函數(shù)定義在前調(diào)用在后時(shí),編譯器在調(diào)用函數(shù)之前,能從其定義中抽取函數(shù)原型2.當(dāng)函數(shù)調(diào)用在前定義在后時(shí),要求程序員在調(diào)用之前用函數(shù)原型對(duì)函數(shù)進(jìn)行聲明,以便編譯器從函數(shù)原型中得到所提供的有關(guān)信息。見程序ex501.cpp與ex502.cpp的區(qū)別。第六十三頁,共九十三頁,編輯于2023年,星期四例(ex503.cpp)#include<iostream.h>main(){inta=24,b=16,c;intabc(int,int); c=abc(a,b); cout<<c<<endl;}intabc(intu,intv){intw;while(v) { w=u%v; u=v; v=w; } returnu;}

第六十四頁,共九十三頁,編輯于2023年,星期四函數(shù)的嵌套調(diào)用在調(diào)用一個(gè)函數(shù)的過程中,可以調(diào)用另一個(gè)函數(shù)。第六十五頁,共九十三頁,編輯于2023年,星期四局部變量和全局變量局部變量:指在函數(shù)內(nèi)部定義的變量,它只在本函數(shù)范圍內(nèi)有效。第六十六頁,共九十三頁,編輯于2023年,星期四例#include<iostream.h>voidmain()intx=5,y=1;cout<<"x1="<<x<<",y="<<y<<endl;{intx=3;//初始化為5的x本塊內(nèi)不可見cout<<"x2="<<x<<",y="<<y<<endl;}cout<<"x3="<<x<<",y="<<y<<endl;}結(jié)果:x1=5,y=1x2=3,y=1x3=5,y=1第六十七頁,共九十三頁,編輯于2023年,星期四全局變量:在函數(shù)之外定義的變量稱為外部變量,外部變量是全局變量。第六十八頁,共九十三頁,編輯于2023年,星期四例(ex504.cpp)#include<iostream.h>intd=1;fun(intp){intd=5;d+=p++; cout<<d<<endl;}main(){inta=3;fun(a); d+=a++; cout<<d<<endl;}第六十九頁,共九十三頁,編輯于2023年,星期四注意:1)如果外部變量在文件開頭定義,則在整個(gè)文件范圍內(nèi)都可以使用該外部變量,如果不在文件開頭定義,則作用范圍只限于定義點(diǎn)到文件終了。如果在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在函數(shù)中用關(guān)鍵字extern作“外部變量說明”。表示該變量在函數(shù)的外部定義在函數(shù)內(nèi)部可以引用它們。例:ex505.cpp此例中變量a,b只在main中有效;如不加extern說明,雖編譯能通過,但得不到正確結(jié)果。一般做法是外部變量的定義放在引用它的所有函數(shù)之前,這樣可以省一個(gè)extern說明。2)外部變量定義和外部變量說明并不同:外部變量定義只能有一次,它的位置在所有函數(shù)之外,而外部變量說明可以有多次,它的位置在需要引用的函數(shù)之內(nèi)。第七十頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>intmax(intx,inty){intz;z=x>y?x:y; returnz; }voidmain(){externinta,b;//外部變量說明cout<<max(a,b)<<endl;}inta=13,b=-8;//外部變量定義第七十一頁,共九十三頁,編輯于2023年,星期四3)如果在同一個(gè)源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量不起作用。例ex506.cpp第七十二頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>inta=3,b=5;intmax(intx,inty){intz;z=x>y?x:y; returnz; }voidmain(){inta=8;cout<<max(a,b)<<endl;}第七十三頁,共九十三頁,編輯于2023年,星期四動(dòng)態(tài)存儲(chǔ)變量與靜態(tài)存儲(chǔ)變量從變量的生存期來考慮,靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式;而動(dòng)態(tài)存儲(chǔ)方式則是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。內(nèi)存中供用戶使用的存儲(chǔ)空間有:1)程序區(qū)2)靜態(tài)存儲(chǔ)區(qū)3)動(dòng)態(tài)存儲(chǔ)區(qū)。規(guī)則:1)全局變量存放在靜態(tài)存儲(chǔ)區(qū),程序執(zhí)行完才釋放。2)動(dòng)態(tài)存儲(chǔ)區(qū)中存放①形參②局部變量,函數(shù)結(jié)束時(shí)就釋放。數(shù)據(jù)的存儲(chǔ)類別有四種:自動(dòng)的(auto)、靜態(tài)的(static)、寄存器的(register)、外部的(extern)第七十四頁,共九十三頁,編輯于2023年,星期四auto變量被聲明在“內(nèi)部”(即函數(shù)、塊、聲明語句之中),屬于動(dòng)態(tài)存儲(chǔ)類別,其生存期局部于所在的塊(所在塊結(jié)束時(shí)存儲(chǔ)空間即被釋放)。以前函數(shù)中定義的變量沒有說明為auto,都隱含為自動(dòng)變量。例2.2.2其結(jié)果應(yīng)是輸出三個(gè)相等的值,但卻是不可預(yù)知的(由于沒對(duì)i初始化)。有時(shí)希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失,即其占用的存儲(chǔ)單元不釋放,應(yīng)指定該局部變量為“局部靜態(tài)變量”例2.2.11(i初始值應(yīng)該先定為0)第七十五頁,共九十三頁,編輯于2023年,星期四例ex507.cpp#include<iostream.h>f(inta){autointb=0;staticintc=3;b=b+1;c=c+1;return(a+b+c);}voidmain(){inta=2,i;for(i=0;i<3;i++)cout<<f(a)<<',';}第七十六頁,共九十三頁,編輯于2023年,星期四例#include<iostream.h>fun(inta,intb){staticintm=0,i=2;i+=m+1;m=i+a+b;return(m);}voidmain(){intk=4,m=1,p;p=fun(k,m);cout<<p<<',';p=fun(k,m);cout<<p<<',';}第七十七頁,共九十三頁,編輯于2023年,星期四函數(shù)遞歸調(diào)用在調(diào)用一個(gè)函數(shù)的過程中又直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。例:有5個(gè)人坐在一起,問第5個(gè)人多少歲?他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù),他說比第3個(gè)人大2歲。問第3個(gè)人,又說比第2個(gè)人大2歲。問第2個(gè)人,說比第1個(gè)人大2歲。最后問第1個(gè)人,他說是10歲。請(qǐng)問第5個(gè)人多大。顯然,這是一個(gè)遞歸問題。要求第5個(gè)人的年齡,就必須先知道第4個(gè)人的年齡,而第4個(gè)人的年齡也不知道,要求第4個(gè)人的年齡必須先知道第3個(gè)人的年齡,而第3個(gè)人的年齡又取決于第2個(gè)人的年齡,第2個(gè)人的年齡取決于第1個(gè)人的年齡。而且每一個(gè)人的年齡都比其前1個(gè)人的年齡大2。即:

第七十八頁,共九十三頁,編輯于2023年,星期四age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10可以用式子表述如下:age(n)=10n=1age(n-1)+2n>1下圖表示求第5個(gè)人年齡的過程第七十九頁,共九十三頁,編輯于2023年,星期四#include<iostream.h>//ex209.cppage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}voidmain(){cout<<age(5)<<endl;}第八十頁,共九十三頁,編輯于2023年,星期四函數(shù)調(diào)用過程如下圖例2.1.9注意函數(shù)為實(shí)形較好voidmain(){intn;floaty;cin>>n;y=rfact(n);cout<<y<<endl;}第八十一頁,共九十三頁,編輯于2023年,星期四例ex210.cpp#include<iostream.h>voidbin(intx){if(x/2>0)bin(x/2);cout<<(x%2);}voidmain(){bin(12);}其結(jié)果是以二進(jìn)制形式輸出整數(shù)n的值。第八十二頁,共九十三頁,編輯于2023年,星期四例ex210.cpp(15)#include<iostream.h>intsub(intn){inta;if(n==1)return1;a=n+sub(n-1);returna;}voidmain(){inti=5;cout<<sub(i);}第八十三頁,共九十三頁,編輯于2023年,星期四例ex212.cpp(8)#include<iostream.h>longfib(intn){if(n>2)return(fib(n-1)+fib(n-2));elsereturn1;}voidmain

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論