版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章模塊化程序設(shè)計(jì)
北京交通大學(xué)計(jì)算機(jī)學(xué)院趙宏1整理ppt教學(xué)目標(biāo)理解如何用函數(shù)模塊構(gòu)造程序熟悉標(biāo)準(zhǔn)庫中常見的函數(shù)會(huì)定義和調(diào)用函數(shù)并理解函數(shù)調(diào)用的機(jī)制掌握變量的作用域和存儲(chǔ)類別理解并運(yùn)用遞歸函數(shù)編寫程序。
2整理ppt4.1模塊化程序設(shè)計(jì)概述
4.2函數(shù)的聲明、定義和調(diào)用
4.3函數(shù)的多級(jí)調(diào)用
4.4變量的作用域和存儲(chǔ)類別
4.5計(jì)算機(jī)隨機(jī)模擬方法
4.6編譯預(yù)處理
3整理ppt復(fù)雜任務(wù)可以分解為若干子任務(wù)。重復(fù)使用的程序段,將其進(jìn)行獨(dú)立設(shè)計(jì),使計(jì)算機(jī)可以重復(fù)執(zhí)行。
4.1模塊化程序設(shè)計(jì)概述main()func1()func2()func3()func4()func5()func6()圖4-1程序模塊結(jié)構(gòu)圖4整理ppt1.引例
4.2函數(shù)的聲明、定義和調(diào)用
/*程序名:4_1.cpp*//*功能:計(jì)算兩個(gè)實(shí)數(shù)中大的值*/#include<stdio.h>floatfmax(floatx,floaty);
/*函數(shù)說明*/voidmain(){floata,b,c;scanf(“%f,%f”,&a,&b);c=fmax(a,b);/*函數(shù)調(diào)用*/printf(“max=%f\n”,c);}floatfmax(floatx,floaty)/*函數(shù)定義*/{floatz;z=x>y?x:y;returnz;}5整理ppt2.函數(shù)說明
說明格式為:
函數(shù)返回值類型函數(shù)名(參數(shù)表);#include<stdio.h>floatfmax(floatx,floaty);/*函數(shù)說明*/voidmain(){floata,b,c;scanf(“%f,%f”,&a,&b);c=fmax(a,b);printf(“max=%f\n”,c);}
函數(shù)說明是一條語句,它指出函數(shù)返回值的類型、函數(shù)的名稱、函數(shù)要接收的參數(shù)的個(gè)數(shù)、順序和類型。如果在一個(gè)函數(shù)中要調(diào)用另外一個(gè)函數(shù),則在調(diào)用之前要對(duì)該函數(shù)進(jìn)行說明。4.2函數(shù)的聲明、定義和調(diào)用
6整理ppt3.函數(shù)定義
函數(shù)定義的一般形式:
函數(shù)值類型函數(shù)名(形參表)/*函數(shù)頭*/{/*函數(shù)體*/說明部分執(zhí)行部分}4.2函數(shù)的聲明、定義和調(diào)用
floatfmax(floatx,floaty){floatz;z=x>y?x:y;returnz;}函數(shù)頭函數(shù)體7整理ppt4.函數(shù)調(diào)用
函數(shù)調(diào)用的一般形式為:
函數(shù)名(實(shí)參表);
4.2函數(shù)的聲明、定義和調(diào)用
voidmain(){floata,b,c;scanf(“%f,%f”,&a,&b);
c=fmax(a,b);printf(“max=%f\n”,c);}可用兩種方式調(diào)用函數(shù):(1)函數(shù)的調(diào)用可以在允許表達(dá)式出現(xiàn)的任何地方。如:c=fmax(a,b);(2)函數(shù)調(diào)用可以作為一條獨(dú)立的語句。比如,有函數(shù)定義:voidprintstar(){printf(“***************”);}則可以把該函數(shù)調(diào)用作為一個(gè)獨(dú)立語句,printstar();8整理ppt4.2函數(shù)的聲明、定義和調(diào)用
函數(shù)返回值
函數(shù)返回值的類型是由函數(shù)定義或說明中的函數(shù)返回類型決定的。如果返回的類型與函數(shù)說明的不同,則在返回值時(shí),先作隱含的類型轉(zhuǎn)換,然后再返回。#include<stdio.h>intfmax(floatx,floaty){returnx>y?x:y;}voidmain(){floatmax;max=fmax(3.5,2.6);printf(“max=%f\n”,max);}結(jié)果?9整理ppt4.2函數(shù)的聲明、定義和調(diào)用
形參和實(shí)參
形式參數(shù):定義函數(shù)時(shí)放在函數(shù)名稱之后括號(hào)中的參數(shù),簡稱形參。實(shí)際參數(shù):調(diào)用函數(shù)時(shí)括號(hào)中的參數(shù),簡稱實(shí)參。形參與實(shí)參的結(jié)合:函數(shù)在調(diào)用時(shí),將生成實(shí)參值的一個(gè)副本傳遞給對(duì)應(yīng)的形參,這個(gè)過程稱為形參與實(shí)參的結(jié)合。如果只允許實(shí)參向形參傳遞數(shù)據(jù),則被稱為“單向傳遞”。
10整理ppt4.2函數(shù)的聲明、定義和調(diào)用
參數(shù)傳遞實(shí)例
voidswap(floatx,floaty){floatt;t=x;x=y;y=t;}voidmain(){floata,b;scanf(“%f,%f”,&a,&b);swap(a,b);printf(“%f,%f\n”,a,b);}3.53.52.62.6實(shí)參a實(shí)參b形參x形參y圖4-2實(shí)參和形參數(shù)據(jù)的傳遞11整理ppt4.2函數(shù)的聲明、定義和調(diào)用
函數(shù)的調(diào)用過程
voidmain(){floata,b,c;scanf(“%f,%f”,&a,&b);c=fmax(a,b);printf(“max=%f\n”,c);}floatfmax(floatx,floaty){floatz;z=x>y?x:y;returnz;}保存返回地址及當(dāng)前現(xiàn)場,為形參分配內(nèi)存并將實(shí)參的值傳給形參變量恢復(fù)main函數(shù)的現(xiàn)場,取得返回地址和返回值12整理ppt4.帶自定義函數(shù)的程序設(shè)計(jì)
4.2函數(shù)的聲明、定義和調(diào)用
程序設(shè)計(jì)思路:(1)定義一個(gè)函數(shù)isprime(intm)判斷m是否為素?cái)?shù),若是素?cái)?shù),函數(shù)返回1,否則返回0。intisprime(intm){inti;for(i=2;i<=m-1;i++)if(m%i==0)return0;return1;}(2)在主函數(shù)中輸入一個(gè)整數(shù),調(diào)用isprime函數(shù),如果函數(shù)值為1,則打印是素?cái)?shù),否則打印不是素?cái)?shù)。voidmain(){intiNumber;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&iNumber);if(isprime(iNumber))printf("%d是素?cái)?shù)",iNumber);elseprintf("%d不是素?cái)?shù)",iNumber);}【例4-2】從鍵盤輸入一個(gè)整數(shù),判斷該整數(shù)是否為素?cái)?shù)。13整理ppt1.嵌套調(diào)用intmin2(inta,intb){returna<b?a:b;}intmin3(inta,intb,intc){intx,y;x=min2(a,b);y=min2(t,c);returny;}#include<stdio.h>voidmain(){intt1,t2;t1=min2(-2,8);printf(“min=%d\n”t1,);t2=min3(-2,8,-6);printf(“min=%d\n”,t2);}4.3函數(shù)的多級(jí)調(diào)用14整理ppt4.3函數(shù)的多級(jí)調(diào)用main函數(shù){……t1=min2(-2,8);t2=min3(-2,8,-6);……}min3函數(shù){……x=min2(a,b);……}min2函數(shù){……returna<b?a:b;
……}圖4-5函數(shù)調(diào)用關(guān)系
15整理ppt1.嵌套調(diào)用(續(xù))
【例4-5】用弦截法求方程x3-5x2+16x-80=0
的根。4.3函數(shù)的多級(jí)調(diào)用求解的方法是:yxx1x2xf(x1,f(x1))f(x,f(x))f(x2,f(x2))圖4-4弦截法求方程的根16整理ppt程序設(shè)計(jì)思路:(1)輸入x1,x2代表根的初始區(qū)間,f1,f2代表函數(shù)f在x1,x2兩點(diǎn)的函數(shù)值。要保證初始的f1,f2異號(hào),如果不是異號(hào),要重新輸入x1,x2。(2)定義函數(shù)f(x)計(jì)算多項(xiàng)式f(x)=x3-5x2+16x-80的值。(3)用函數(shù)xpoint(x1,x2)計(jì)算f(x1,f(x1))和f(x2,f(x2))的連線與x軸交點(diǎn)x的值,公式為:(4)定義函數(shù)root(x1,x2)來求解實(shí)根。首先調(diào)用用函數(shù)xpoint(x1,x2)計(jì)算f(x1,f(x1))和f(x2,f(x2))的連線與x軸交點(diǎn)x的值,再判斷f(x)與f(x1)和f(x2)哪一個(gè)同號(hào),如果f(x)與f(x1)同號(hào),就用x作為新的x1,否則就用x作為新的x2。再在新的區(qū)間內(nèi)進(jìn)行計(jì)算。4.3函數(shù)的多級(jí)調(diào)用17整理ppt4.3函數(shù)的多級(jí)調(diào)用main函數(shù){……x=root(x1,x2);……}root函數(shù){……x=xpoint(x1,x2);……}xpoint函數(shù){……return(x1*f(x2)-x2*f(x1))/(f(x2)–f(x1));……}f函數(shù){……}圖4-5函數(shù)調(diào)用關(guān)系
18整理ppt2.遞歸調(diào)用
遞歸調(diào)用指的是一個(gè)函數(shù)執(zhí)行過程中出現(xiàn)了直接或間接調(diào)用函數(shù)本身的調(diào)用方式。如果直接調(diào)用函數(shù)本身稱為直接遞歸;如果調(diào)用了另外一個(gè)函數(shù),那個(gè)函數(shù)又調(diào)用該函數(shù),則稱為間接遞歸。遞歸方法的基本思想是將一個(gè)問題向下分解具有同樣解決方法但規(guī)模不斷縮小的子問題,不斷進(jìn)行這樣的分解,直到分解的子問題有一個(gè)已知解。某數(shù)列為k(n)的定義為: 1n=1k(n)=2×k(n-1)n為偶數(shù) 3×k(n-1)n為奇數(shù)4.3函數(shù)的多級(jí)調(diào)用19整理ppt4.3函數(shù)的多級(jí)調(diào)用k(4)=k(3)×2k(3)=k(2)×3k(2)=k(1)×2k(1)=1k(2)=1×2=2k(3)=2×3=6k(4)=6×2=12圖4-6回推和遞推過程20整理pptintk(intn) /*遞歸計(jì)算函數(shù)*/{intm; /*m存放函數(shù)的返回值*/if(n==1)m=1;elseif(n%2==0)m=k(n-1)*2;/*調(diào)用自身,n為偶數(shù)*/elsem=k(n-1)*3;/*調(diào)用自身,n為奇數(shù)*/return(m);}voidmain() {printf("\nk(%d)=%f",k(4));}4.3函數(shù)的多級(jí)調(diào)用21整理ppt【例4-6】求Fibonacci數(shù)列第n項(xiàng)的值。Fibonacci數(shù)列以1,1開頭,以后每一項(xiàng)都是前兩項(xiàng)之和。1,1,2,3,5,8,13,21……程序設(shè)計(jì)思路:(1)求Fibonacci數(shù)列第n項(xiàng)的值可用遞歸形式定義為:fibonacci(0)=1fibonacci(1)=1fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)(2)定義fibonacci函數(shù)計(jì)算第n項(xiàng)的值intfibonacci(intn){if(n==0||n==1)return1;elsereturnfibonacci(n–1)+fibonacci(n–2);}4.3函數(shù)的多級(jí)調(diào)用3.遞歸調(diào)用舉例22整理ppt【例4-8】反向輸出一個(gè)長整數(shù)程序設(shè)計(jì)思路:(1)如果要輸出的數(shù)據(jù)只有一位,則“反向輸出”問題可簡化為輸出一位整數(shù)。(2)如果要輸出的數(shù)據(jù)超過一位,則可將該整數(shù)分為兩部分:個(gè)位上的數(shù)字和個(gè)位以前的數(shù)字。個(gè)位上的數(shù)字可以直接輸出,而個(gè)位以前的數(shù)字又可以看成一個(gè)新的整數(shù),重復(fù)執(zhí)行“反向輸出”的操作。這時(shí),反向輸出在規(guī)模上縮小了一位,但求解的方法還是一致的。(3)用表達(dá)式x%10可以分離出一個(gè)整數(shù)個(gè)位上的數(shù)字,用表達(dá)式x/10可以表示出個(gè)位以前的數(shù)。定義一個(gè)反向輸出函數(shù)invertLongInt,每次先用x%10計(jì)算并輸出個(gè)位上的數(shù),然后用x/10(即個(gè)位以前的數(shù))做參數(shù)調(diào)用自己,不斷進(jìn)行下去,直到只剩一位數(shù)字。4.3函數(shù)的多級(jí)調(diào)用23整理ppt遞歸函數(shù)可以寫為:voidinvertLongInt(longx){if(x>=0&&x<=9)printf("%d\n",x);else { printf("%d",x%10); invertLongInt(x/10); }}4.3函數(shù)的多級(jí)調(diào)用24整理ppt小結(jié):函數(shù)分為系統(tǒng)函數(shù)和自定義函數(shù)。每個(gè)函數(shù)的都是獨(dú)立定義的,如果函數(shù)定義在后、調(diào)用在前,要對(duì)函數(shù)原型進(jìn)行說明。除了主函數(shù)外,其他函數(shù)可以相互調(diào)用,如果A調(diào)用B,B又調(diào)用C,稱為嵌套調(diào)用,如果直接或間接調(diào)用自己,稱為遞歸。25整理ppt練習(xí):1.函數(shù)fun實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)之差的絕對(duì)值,并將差值返回調(diào)用函數(shù),請(qǐng)編寫fun函數(shù)fun(intx,inty).26整理ppt第7周作業(yè):1.在主函數(shù)中輸入三角形的的三條邊,調(diào)用子函數(shù),判斷是否能組成三角形,若可以則返回1否則返回0。在主函數(shù)中輸出判斷結(jié)果。2.編寫函數(shù),求兩個(gè)正整數(shù)m和n的最大公約數(shù)。m和n作為函數(shù)的參數(shù)。函數(shù)返回運(yùn)算結(jié)果,由主函數(shù)輸出。4.習(xí)題4.2要求:第8周上課前提交27整理ppt(1)程序區(qū):存放用戶程序代碼,即程序中各個(gè)函數(shù)的代碼。(2)靜態(tài)存儲(chǔ)區(qū):存放程序的全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)。分配在靜態(tài)存儲(chǔ)區(qū)中的變量的生命期最長,它們?cè)趍ain函數(shù)運(yùn)行之前就存在了,在程序的整個(gè)活動(dòng)期(從程序開始執(zhí)行到執(zhí)行結(jié)束)中,這些變量始終占用靜態(tài)存儲(chǔ)區(qū)中對(duì)應(yīng)的存儲(chǔ)空間,即程序開始執(zhí)行時(shí)分配存儲(chǔ)單元,程序執(zhí)行完畢后釋放。(3)動(dòng)態(tài)存儲(chǔ)區(qū):存放局部變量。分配在動(dòng)態(tài)存儲(chǔ)區(qū)中的變量只有在所定義的函數(shù)被調(diào)用時(shí)才分配存儲(chǔ)單元,函數(shù)結(jié)束時(shí)就釋放。系統(tǒng)對(duì)函數(shù)調(diào)用時(shí)的現(xiàn)場保護(hù)、返回地址等也占用動(dòng)態(tài)保護(hù)區(qū)。(4)堆:自由存儲(chǔ)區(qū),用于運(yùn)行程序時(shí)動(dòng)態(tài)申請(qǐng)內(nèi)存。4.4變量的作用域和存儲(chǔ)類別1.程序在內(nèi)存中的分布區(qū)域
28整理ppt局部變量:在塊內(nèi)定義的變量。局部變量作用域:塊內(nèi)定義、塊內(nèi)使用。所謂塊內(nèi)是指一對(duì)以{}為界限的若干個(gè)語句,例如函數(shù)體、復(fù)合語句。而塊內(nèi)使用,是指變量的作用范圍僅僅局限在從變量定義處開始、到變量定義所在的那個(gè)塊結(jié)束。如:4.4變量的作用域和存儲(chǔ)類別2.局部變量及存儲(chǔ)類別
局部于main的局部變量局部于func的局部變量voidmain(){
intn=5;printf(“%d”,n);func();}voidfunc(){
intn=8;printf(“%d”,n);}29整理ppt形式參數(shù)也為局部變量,其作用范圍是形式參數(shù)所在的整個(gè)函數(shù)。例如:voidmain(){printf(“%d,%d”,x,y);/*error*/}voidfunc(intx,inty){/*……*/}4.4變量的作用域和存儲(chǔ)類別30整理ppt局部變量的存儲(chǔ)類別:自動(dòng)變量:用關(guān)鍵字auto(可缺省)加以說明的局部變量。如:autofloatb;或floatb;特點(diǎn):是短生命期的局部變量,安排在動(dòng)態(tài)存儲(chǔ)區(qū),由系統(tǒng)自動(dòng)分配和釋放,用到時(shí)分配內(nèi)存,不用時(shí)釋放內(nèi)存,以節(jié)省程序執(zhí)行時(shí)的內(nèi)存資源。局部靜態(tài)變量:用關(guān)鍵字static加以說明的局部變量。局部靜態(tài)變量在靜態(tài)存儲(chǔ)區(qū)分配空間。如:staticintcount;特點(diǎn):是長生命期的局部變量。函數(shù)執(zhí)行結(jié)束后,分配給該變量的存儲(chǔ)區(qū)不釋放。局部靜態(tài)變量安排在靜態(tài)存儲(chǔ)區(qū)。寄存器變量:用關(guān)鍵字register說明的局部變量為寄存器變量。特點(diǎn):寄存器變量的值存放在CPU的寄存器中??梢蕴岣叱绦虻膱?zhí)行效率。4.4變量的作用域和存儲(chǔ)類別31整理ppt【例4-10】局部變量存儲(chǔ)方式舉例,分析下面程序運(yùn)行結(jié)果:/*程序名:4_10.cpp*//*功能:局部變量存儲(chǔ)方式示例*/#include<stdio.h>intfun1(int);intfun2(int);voidmain(){inti;for(i=2;i<5;i++)printf("fun1(%d)=%d\t",i,fun1(i));printf("\n");for(i=2;i<5;i++)printf("fun2(%d)=%d\t",i,fun2(i));printf("\n");}4.4變量的作用域和存儲(chǔ)類別32整理ppt續(xù)上頁:intfun1(intx){
intf=1;return(f*=x);}intfun2(intx){
staticintf=1;return(f*=x);}
4.4變量的作用域和存儲(chǔ)類別程序執(zhí)行結(jié)果為:fun1(2)=2fun1(3)=3fun1(4)=4fun2(2)=2fun2(3)=6fun2(4)=2433整理ppt#include<stdio.h>intfunc(int,int);voidmain(){ intk=4,m=1,p; p=func(k,m); printf("%d,",p); p=func(k,m); printf("%d\n",p);}intfunc(inta,intb){ staticintm,i=2; i+=m+1; m=i+a+b; return(m);}結(jié)果:8,17主函數(shù):第一次fun函數(shù):km41mi02mi83第二次fun函數(shù):mi83mi171234整理ppt全局部變量:函數(shù)外定義的變量。全局變量作用域:全局變量的作用范圍是從變量定義處開始到所定義的源文件結(jié)束處,即從全局變量定義所在處開始到源文件結(jié)束處之間的所有函數(shù)都可以訪問該變量。如:intn=1;voidmain(){printf(“%d”,n);func();printf(“%d”,n);}floatm;voidfunc(){n=5;m=3;}4.4變量的作用域和存儲(chǔ)類別2.全局部變量及存儲(chǔ)類別
35整理ppt【例4-11】全局變量的作用域舉例,分析下面程序運(yùn)行結(jié)果。#include<stdio.h>voidswap(void);inta,b;
/*是兩個(gè)函數(shù)公用的變量*/voidmain(){scanf("%d%d",&a,&b);printf("交換前的a和b是%d,%d\n",a,b);swap();printf("交換后的a和b是%d,%d\n",a,b);}voidswap(){intt;t=a;a=b;b=t;/*使用的變量名a和b全局變量a和b*/}4.4變量的作用域和存儲(chǔ)類別36整理ppt局部變量與全局變量同名時(shí)的處理:小范圍優(yōu)先【例4-12】分析下面程序運(yùn)行結(jié)果:
inti=1;/*變量i定義在所有函數(shù)之外,屬于全局變量*/voidmain(){printf(“主函數(shù)中訪問的變量i:%d\n",i);i=test()+1;printf(“主函數(shù)中訪問的變量i:%d\n",i);}inttest(){
inti;printf(“test中訪問的變量i:%d\n",i);i=2;printf(“test中訪問的變量i:%d\n",i);returni;}4.4變量的作用域和存儲(chǔ)類別程序運(yùn)行結(jié)果:主函數(shù)中訪問的變量i:1test中訪問的變量i:28345test中訪問的變量i:2主函數(shù)中訪問的變量i:337整理ppt全局部變量的存儲(chǔ)類別
:靜態(tài)全局變量:使用關(guān)鍵字static定義的全局變量是文件內(nèi)部的全局變量。特點(diǎn):只能被定義所在的源文件中的所有函數(shù)訪問,同一程序的其它源文件中的函數(shù)都不能訪問該變量。非靜態(tài)全局變量:使用缺省關(guān)鍵字的全局變量。特點(diǎn):則該變量不僅能被定義所在的源文件中的所有函數(shù)訪問,而且組成程序的其它源文件中的所有函數(shù)也都能訪問該變量。因此,從作用范圍看,缺省關(guān)鍵字的全局變量要比使用關(guān)鍵字static的靜態(tài)全局變量大。關(guān)鍵字extern的作用關(guān)鍵字extern的作用是對(duì)要使用的某個(gè)尚未定義的全局變量在使用前作變量說明,該全局變量或者是以后會(huì)在該源文件中定義的全局變量,或者是在另一個(gè)源文件中使用缺省關(guān)鍵字定義的全局變量。4.4變量的作用域和存儲(chǔ)類別38整理ppt【例4-13】全局變量存儲(chǔ)方式舉例,分析下面程序運(yùn)行結(jié)果:/*程序名:4_13.cpp*//*功能:全局變量存儲(chǔ)方式示例*/#include<stdio.h>externinta;/*對(duì)4_13_2.cpp中定義的變量進(jìn)行說明*/voidfun1();voidfun2();voidmain(){fun1();fun2();printf("函數(shù)main中的a是%d\n",a);}4.4變量的作用域和存儲(chǔ)類別39整理ppt/*程序名:4_13_1.cpp*/#include<stdio.h>staticinta;/*只允許文件4_13_1.cpp中函數(shù)訪問的全局變量*/voidfun1(){a=2;printf("函數(shù)fun1中的a是%d\n",a);}/*程序名:4_13_2.cpp*/#include<stdio.h>inta;/*允許其它文件中函數(shù)訪問的全局變量*/voidfun2(){a=4;printf("函數(shù)fun2中的a是%d\n",a);}4.4變量的作用域和存儲(chǔ)類別40整理pptrand()函數(shù)可隨機(jī)生成0~RAND_MAX之間的一個(gè)整數(shù)。RAND_MAX是頭文件<stdlib.h>中定義的一個(gè)符號(hào)常量。ANSI規(guī)定RAND_MAX的值不小于32767。根據(jù)下面公式可以得到所需范圍內(nèi)的隨機(jī)數(shù):n=a+rand()%b其中a為位移,是所需連續(xù)整數(shù)范圍的第一個(gè)數(shù),b是比例因子,是所需連續(xù)整數(shù)范圍的寬度,則希望產(chǎn)生1~6之間隨機(jī)數(shù)的公式為:face=1+rand()%64.5計(jì)算機(jī)隨機(jī)模擬方法1.偽隨機(jī)數(shù)的產(chǎn)生
41整理ppt【例4-14】編寫一個(gè)模擬投擲硬幣的程序,模擬20次,統(tǒng)計(jì)出正面出現(xiàn)的次數(shù)。#include<stdio.h>#include<stdlib.h>voidmain(){ inti,face,iCount=0; for(i=1;i<=20;i++) { face=rand()%2; printf("%5d",face); if(i%10==0)printf("\n"); if(face)iCount++; } printf("正面出現(xiàn)次數(shù):%d次\n",iCount);}4.5計(jì)算機(jī)隨機(jī)模擬方法42整理ppt運(yùn)行程序,結(jié)果為:11001000001111111010正面出現(xiàn)次數(shù):11次再次運(yùn)行該程序結(jié)果為:110010000011111110104.5計(jì)算機(jī)隨機(jī)模擬方法43整理ppt用srand()函數(shù)進(jìn)行隨機(jī)化voidmain(){unsignedseed;printf(“輸入一個(gè)非負(fù)整數(shù)做種子:”);scanf(“%d”,&seed);srand(seed);for(inti=1;i<=10;i++)printf("%3d",1+rand()%6);}運(yùn)行3次程序:輸入一個(gè)非負(fù)整數(shù)做種子:161343565262輸入一個(gè)非負(fù)整數(shù)做種子:333153565415輸入一個(gè)非負(fù)整數(shù)做種子:1613435652624.5計(jì)算機(jī)隨機(jī)模擬方法44整理ppt使用系統(tǒng)定時(shí)/計(jì)數(shù)器的值做為隨機(jī)種子: srand(time(NULL));time()函數(shù)返回以秒為單位的當(dāng)前時(shí)間值,因?yàn)橛袝r(shí)鐘參數(shù),而時(shí)間始終在變,隨機(jī)數(shù)序列就不會(huì)固定不變了?!纠?-16】編寫程序,用來生成一個(gè)隨機(jī)小寫字符串。#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){ srand(time(NULL)); for(inti=1;i<=20;i++) printf("%c",97+rand()%26);}4.5計(jì)算機(jī)隨機(jī)模擬方法45整理ppt用事件發(fā)生的“頻率”來決定事件的“概率”考慮平面上的一個(gè)邊長為1的正方形及其內(nèi)部的一個(gè)形狀不規(guī)則的“圖形”,如何求出這個(gè)“圖形”的面積呢?MonteCarlo方法是這樣一種“隨機(jī)化”的方法:向該正方形“隨機(jī)地”投擲N個(gè)點(diǎn)落于“圖形”內(nèi),則該“圖形”的面積近似為M/N?!纠?-17】計(jì)算圖形面積。圖中有兩條半徑為1的圓弧,求s的面積。4.5計(jì)算機(jī)隨機(jī)模擬方法2.蒙特卡羅(MonteCarlo)方法
xyo11s圖4-10求面積46整理ppt程序設(shè)計(jì)思路:模擬雨點(diǎn)落在陰影區(qū)域的情況。對(duì)于以x=0,y=0位圓心的圓,s中每個(gè)點(diǎn)應(yīng)該滿足:(1)對(duì)于以x=1,y=0位圓心的圓,s中每個(gè)點(diǎn)應(yīng)該滿足:(2)同時(shí)滿足(1)和(2)就可以保證雨點(diǎn)落在s區(qū)域??梢允褂萌缦抡Z句:if(sqrt(x*x+y*y)>1&&sqrt((x–1)*(x-1)+y*y))g=g+1;g為落入s區(qū)雨點(diǎn)的數(shù)目。程序參見教材4_17.cpp。4.5計(jì)算機(jī)隨機(jī)模擬方法47整理ppt“文件包含”是指一個(gè)源文件可以將另一個(gè)源文件的全部內(nèi)容包含進(jìn)來。在編譯預(yù)處理時(shí)#include指令讓預(yù)處理器在程序該點(diǎn)處加入指定文件內(nèi)容,然后作為一個(gè)源文件編譯形成新文件。文件包含的一般形式為:(1)#include<文件名>(2)#include"文件名"例如:#include<stdio.h>#include"stdio.h"4.6編譯預(yù)處理1.文件包含#include48整理ppt(1)定義符號(hào)常量#define標(biāo)識(shí)符字符串如:#definePI3.14預(yù)處理器將在源文件中搜索PI,并把每個(gè)PI替換成3.14。完成搜索和操作替換后,預(yù)處理器刪除#define行。(2)定義宏#define宏名(參數(shù)表)字符串如:#defineS(a,b)a*b對(duì)程序中帶有實(shí)參的宏(如S(3,4)),按#define命令中指定的字符串從左到右進(jìn)行替換。如果字符串中包含宏的形參(如a,b),則將程序語句中相應(yīng)的實(shí)參代替形參,如果宏定義中字符串中的字符不是參數(shù)字符(如a*b中的*)則原樣保留。4.6編譯預(yù)處理2.宏定義#define
49整理ppt(3)宏與函數(shù)宏替換只占編譯時(shí)間,不占運(yùn)行時(shí)間。但函數(shù)調(diào)用時(shí)分配單元、傳值、返回值時(shí)都占時(shí)間,特別是多次調(diào)用時(shí)尤為嚴(yán)重。但使用宏的程序代碼較長,因?yàn)楹暝诔绦蛑写嬖诹硕啻?,而使用函?shù)時(shí),雖然多次調(diào)用,但函數(shù)代碼只存在一次。函數(shù)調(diào)用時(shí)先求實(shí)參表達(dá)式的值,再傳給形參。而帶參數(shù)的宏只是簡單的字符替換,宏展開時(shí)并不對(duì)實(shí)參表達(dá)式求值。函數(shù)調(diào)用時(shí)臨時(shí)分配存儲(chǔ)單元,宏替換并不分配存儲(chǔ)單元,也沒有返回值。宏是無類型的。宏既可以用于浮點(diǎn)型,也可以用于整型,因?yàn)轭A(yù)處理器只是完成字符替換,而不考慮它的參數(shù)類型。如果使用函數(shù),則對(duì)于每種求平方的數(shù)據(jù)類型都需要一個(gè)函數(shù)。4.6編譯預(yù)處理50整理ppt條件編譯就是按條件對(duì)C/C++程序的一部分進(jìn)行編譯,其它部分不編譯。(1)使源代碼能更迅速、更容易地進(jìn)行修改,并使目標(biāo)代碼縮短。如:#if(MAX>99)printf("Compiledforarraygreaterthan99\n");#elseprintf("Compiledforsmallarray\n");#endif(2)協(xié)調(diào)多個(gè)頭文件,避免一個(gè)符號(hào)或一個(gè)頭文件被多次包含。例如,符號(hào)NULL在幾個(gè)不同的頭文件中都進(jìn)行了定義,如果一個(gè)源文件包含其中幾個(gè)頭文件,則會(huì)出現(xiàn)符號(hào)NULL被多次定義的錯(cuò)誤,這時(shí)需要使用條件編譯命令:#ifdefNULL#defineNULL((void)0)#endif4.6編譯預(yù)處理3.條件編譯51整理ppt4.7本章小結(jié)函數(shù)分為系統(tǒng)函數(shù)和自定義函數(shù)。每個(gè)函數(shù)的都是獨(dú)立定義的,如果函數(shù)定義在后、調(diào)用在前,要對(duì)函數(shù)原型進(jìn)行說明。除了主函數(shù)外,其他函數(shù)可以相互調(diào)用,如果A調(diào)用B,B又調(diào)用C,稱為嵌套調(diào)用,如果直接或間接
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶護(hù)理職業(yè)學(xué)院《人居環(huán)境與風(fēng)水》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)設(shè)部門一崗雙責(zé)制度
- 天津大學(xué)《觀賞石》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南工業(yè)職業(yè)技術(shù)學(xué)院《人體及動(dòng)物生理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 福州科技職業(yè)技術(shù)學(xué)院《天然活性成分分離和活性篩選新技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 合肥工業(yè)大學(xué)《會(huì)計(jì)信息系統(tǒng)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江藝術(shù)職業(yè)學(xué)院《基站工程技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 太原工業(yè)學(xué)院《大學(xué)生職業(yè)規(guī)劃與就業(yè)指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 棗莊科技職業(yè)學(xué)院《污水處理與資源化理論與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 增強(qiáng)現(xiàn)實(shí)廣告合作合同協(xié)議(2025年零售)
- 五年級(jí)上冊(cè)小數(shù)四則混合運(yùn)算100道及答案
- 德育原理 課件全套 班建武 第1-9章 德育的本質(zhì)與功能-學(xué)校德育現(xiàn)代化
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- 國際標(biāo)準(zhǔn)《風(fēng)險(xiǎn)管理指南》(ISO31000)的中文版
- 變壓器借用合同范本
- 東海藥業(yè)校招測評(píng)題庫
- 精準(zhǔn)定位式漏水檢測方案
- 2023氣管插管意外拔管的不良事件分析及改進(jìn)措施
- 2023自動(dòng)啟閉噴水滅火系統(tǒng)技術(shù)規(guī)程
- 架線弧垂計(jì)算表(應(yīng)力弧垂插值計(jì)算)
- 工廠驗(yàn)收測試(FAT)
評(píng)論
0/150
提交評(píng)論