函數(shù)與編譯預(yù)處理課件_第1頁(yè)
函數(shù)與編譯預(yù)處理課件_第2頁(yè)
函數(shù)與編譯預(yù)處理課件_第3頁(yè)
函數(shù)與編譯預(yù)處理課件_第4頁(yè)
函數(shù)與編譯預(yù)處理課件_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、4.1 4.1 模塊化程序設(shè)計(jì)與函數(shù)模塊化程序設(shè)計(jì)與函數(shù)4.2 4.2 函數(shù)的定義與調(diào)用函數(shù)的定義與調(diào)用4.3 4.3 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用4.4 4.4 變量作用域與存儲(chǔ)方式變量作用域與存儲(chǔ)方式4.5 4.5 編譯預(yù)處理編譯預(yù)處理4.6 4.6 函數(shù)設(shè)計(jì)舉例函數(shù)設(shè)計(jì)舉例C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)教學(xué)目的和基本要求:教學(xué)目的和基本要求:要求學(xué)生了解模塊化程序設(shè)計(jì)的思想,掌握函數(shù)的定義及調(diào)用,理解變量的作用域與存儲(chǔ)方式的概念,理解編譯預(yù)處理的概念。 教學(xué)重點(diǎn):教學(xué)重點(diǎn):函數(shù)的定義及調(diào)用、遞歸調(diào)用、變量的作用域。 C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程

2、序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)4.1模塊化程序設(shè)計(jì)與函數(shù)模塊化程序設(shè)計(jì)與函數(shù) 在設(shè)計(jì)較復(fù)雜的程序時(shí),我們一般采用的方法是:在設(shè)計(jì)較復(fù)雜的程序時(shí),我們一般采用的方法是:把問題分成幾個(gè)部分,每部分又可分成更細(xì)的若干小把問題分成幾個(gè)部分,每部分又可分成更細(xì)的若干小部分,逐步細(xì)化,直至分解成很容易求解的小問題。部分,逐步細(xì)化,直至分解成很容易求解的小問題。這樣的話,原來問題的解就可以用這些小問題來表示。這樣的話,原來問題的解就可以用這些小問題來表示。 把復(fù)雜任務(wù)細(xì)分成多個(gè)問題的過程,就叫程序的把復(fù)雜任務(wù)細(xì)分成多個(gè)問題的過程,就叫程序的模塊化。模塊化程序設(shè)計(jì)是靠設(shè)計(jì)函數(shù)和調(diào)用

3、函數(shù)實(shí)模塊化。模塊化程序設(shè)計(jì)是靠設(shè)計(jì)函數(shù)和調(diào)用函數(shù)實(shí)現(xiàn)的?,F(xiàn)的。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)模塊與函數(shù) C語(yǔ)言程序由基本語(yǔ)句和函數(shù)組成,每個(gè)函數(shù)可完成相對(duì)獨(dú)立的語(yǔ)言程序由基本語(yǔ)句和函數(shù)組成,每個(gè)函數(shù)可完成相對(duì)獨(dú)立的任務(wù),依一定的規(guī)則調(diào)用這些函數(shù),就組成了解決某個(gè)特定問題的任務(wù),依一定的規(guī)則調(diào)用這些函數(shù),就組成了解決某個(gè)特定問題的程序。程序。任務(wù)、模塊與函數(shù)的關(guān)系任務(wù)、模塊與函數(shù)的關(guān)系:任務(wù)模塊模塊模塊函數(shù)函數(shù)函數(shù)函數(shù)函數(shù)函數(shù)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)看這樣一個(gè)問題:求200,1000的雙胞

4、胎數(shù)的對(duì)數(shù)。雙胞胎數(shù):兩素?cái)?shù)差為2稱為雙胞胎數(shù)。 這是我們上一章結(jié)束的一道練習(xí)題,下面的左邊是我們當(dāng)時(shí)編的程序。main( ) int a,b,n=0,I; for(a=200;a=998;a+) for(I=2;Ia;I+) if(a%I=0) break; if(a=i) b=a+2; for(I=2;Ib;I+) if(b%I=0) break; if(b=i) n+; printf(“n%d”,n);我們注意到,程序中用 筐住的部分是完成了相同的功能,即判斷一個(gè)數(shù)(a或b)是否是素?cái)?shù)。我們可以考慮用一個(gè)獨(dú)立的函數(shù)來完成判斷素?cái)?shù)的功能,在主函數(shù)中調(diào)用此函數(shù)即可。如下:main( ) in

5、t a,b,n=0; int f(int x); for(a=200;a=998;a+) if(f(a)=1) b=a+2; if(f(b)=1) n+; printf(“n%d”,n);int f(int x) int I; for(I=2;Ix;I+) if(x%I=0) break; if(x=I) return 1; else return 0;下面我們?cè)敿?xì)介紹函數(shù)調(diào)用的格式和語(yǔ)法規(guī)定。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)4.2 函數(shù)的定義與調(diào)用在C語(yǔ)言中,函數(shù)(Function)是一個(gè)處理過程,可以進(jìn)行數(shù)值運(yùn)算、信息處理、控制決策,即一段程

6、序的工作放在函數(shù)中進(jìn)行,函數(shù)結(jié)束時(shí)可以攜帶或不帶處理結(jié)果。 庫(kù)函數(shù)(標(biāo)準(zhǔn)函數(shù)):系統(tǒng)提供自定義函數(shù):用戶自己寫C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)C語(yǔ)言程序處理過程全部都是以函數(shù)形式出現(xiàn),最簡(jiǎn)單的程序至少也有一個(gè)main函數(shù)。函數(shù)必須先定義和聲明后才能調(diào)用。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)標(biāo)準(zhǔn)庫(kù)函數(shù)C語(yǔ)言有豐富的庫(kù)函數(shù),這些函數(shù)的說明在不同的頭文件(*.h)中。想要調(diào)用標(biāo)準(zhǔn)的庫(kù)函數(shù),就必須include。#includemain()printf(“%d”,1024*768);調(diào)用printf函數(shù)時(shí),必須

7、includeC語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)自定義函數(shù)可以把完成一個(gè)任務(wù)的過程寫成函數(shù)。int A_to_a(int capital)int small; if (capital=A & capital=Z) small= capital (A-a); return small;返回值類型名函數(shù)名注意不要與已有庫(kù)函數(shù)重名參數(shù)說明和參數(shù)列表調(diào)用函數(shù)時(shí)輸入?yún)?shù)的格式要與之相同定義局部變量最好只使用局部變量,這樣將方便調(diào)試。返回值如果不需返回則可return 0;另外請(qǐng)注意這樣的判斷,如寫成AcapitalZ是不行的C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)

8、計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)“函數(shù)”的主要知識(shí)點(diǎn)函數(shù)的定義 函數(shù)的參數(shù)和返回值 函數(shù)的調(diào)用 嵌套和遞歸 變量的作用域C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)函數(shù)舉例 #include main() int a,b,m; /*說明變量*/ int max(int a,int b); /*函數(shù)聲明*/ scanf(%d,%d,&a,&b); /*調(diào)用庫(kù)函數(shù)scanf*/ m=max(a,b); /*調(diào)用字定義函數(shù)max*/ printf(max=%dn,m); /*調(diào)用庫(kù)函數(shù)printf*/ getch(); /*調(diào)

9、用庫(kù)函數(shù)getch*/C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)函數(shù)舉例int max(int a,int b) /*定義函數(shù)max*/ int y; y=(ab)? a:b; /*條件表達(dá)式 */ return y;if(ab) y=a; else y=b;C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)自定義函數(shù)的聲明自定義函數(shù)在調(diào)用前應(yīng)先聲明。使系統(tǒng)知道將要用到某個(gè)函數(shù)及它的類型,以便處理。函數(shù)聲明應(yīng)與該函數(shù)定義時(shí)給出的函數(shù)類型與名字、形參的個(gè)數(shù)、類型、次序相一致。#include “stdio.h”void main

10、()float x,y; int n; float power (float x, int n); scanf(%f,%d, &x, &n); y = power(x, n); printf(“%8.2f”,y );float power( float x, int n) int i; float t=1; for(i=1; i=n; i+) t = t * x; return t; C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)求1!+2!+3!+10!算法 i =1; s=0; 當(dāng) i = 10 s=s+ i! 定義求 i! 的函數(shù)C語(yǔ)言程

11、序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)求1!+2!+3!+10! 程序void main() long mm( int ); /*自定義求階乘函數(shù)應(yīng)先聲明 */ int i; long s=0; for (i =1; i =10; i +) s+= mm(i ); /*調(diào)用求階乘函數(shù),求I的階乘 */ printf(“n%ld”,s);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)定義求 n! 的函數(shù)long mm( int n) long t=1; int i; for (i =1; i b)? a:b; return y;

12、 調(diào)用時(shí):m=max(3,6); m=max(a,b); 括號(hào)里是形式參數(shù)返回值括號(hào)里是實(shí)參在這一句調(diào)用時(shí),形參的值是3和6其返回值y將被賦給調(diào)用語(yǔ)句中的mC語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)形式參數(shù)與實(shí)際參數(shù)的關(guān)系n 形式參數(shù)在函數(shù)中是變量名, 在函數(shù)調(diào)用時(shí),形參被分配相應(yīng)的內(nèi)存n 實(shí)際參數(shù)是表達(dá)式 負(fù)責(zé)向?qū)?yīng)的形參標(biāo)識(shí)的內(nèi)存單元傳遞數(shù)據(jù)n 實(shí)參與形參必須個(gè)數(shù)相同n 對(duì)應(yīng)的形參和實(shí)參的類型必須一致C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)實(shí)參與形參例:主調(diào)函數(shù)中有如下語(yǔ)句: scanf(%d,%d,&a

13、,&b); m=max(a,b+3);如果輸入 6,2函數(shù) int max(int a,int b)形參 a 得到第一個(gè)實(shí)際參數(shù)a的值 6形參 b 得到第二個(gè)實(shí)際參數(shù)b+3的值 5C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)函數(shù)返回值函數(shù)返回值通過return語(yǔ)句獲得函數(shù)返回值的類型就是函數(shù)的類型 return y; 將變量y的值返回給調(diào)用者 return y+3; 將表達(dá)式的值返回給調(diào)用者C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)return 的數(shù)據(jù)類型與函數(shù)的類型矛盾時(shí),自動(dòng)將數(shù)據(jù)轉(zhuǎn)換成函數(shù)的類型int fu

14、nct1() char ch; while (ch=getch( )z) ; return ch; 調(diào)用: i=funct1(); /* 返回的是int類型 */C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)函數(shù)沒有返回值, 函數(shù)定義成空類型void putline() int i; for (i=0;i35;i+) printf(-); printf(n); 函數(shù)的功能就是輸出函數(shù)的功能就是輸出35個(gè)個(gè)-調(diào)用調(diào)用: putline( ); 應(yīng)該的語(yǔ)句形式應(yīng)該的語(yǔ)句形式 i=putline( ); 是錯(cuò)的是錯(cuò)的C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程

15、序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)調(diào)用函數(shù)a=function(x,y);或者function(x,y);取返回值只是操作解決更復(fù)雜問題時(shí)可以嵌套調(diào)用。n n) )! !( (m mn n! !m m! !C Cn nm mlong fac(int k)long f=1; int i; for(i=1;i=n;i+) f=f*i; retrun f;long combination(int n ,int m)long c; int i; c=fac(m)/(fac(n)*fac(m-n) ); retrun c;主函數(shù):main( ) int n,m; long c; scanf(“%d,%d”,

16、 &n,&m); c=combination (n,m); prnit(“%ld”, c); 理論上可以a(b(d(e(x),c(f)般嵌套無數(shù)層。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)4.3 函數(shù)的遞歸調(diào)用函數(shù)調(diào)用它本身,稱為遞歸。直接在函數(shù)內(nèi)調(diào)用自己為直接遞歸,通過別的函數(shù)調(diào)用自己為間接遞歸。void a( ). a( );.void a( ). b( ); .void b( ). a( ); .遞歸在解決某些問題中,是一個(gè)十分有用的方法。因?yàn)槠湟?有的問題它本身就是遞歸定義的;其二,它可以使某些看起來不易解決的問題變得容易解決,寫

17、出的程序較簡(jiǎn)短。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)遞歸方法求n! 由于 n!= n*(n-1)! 是遞歸定義所以求n! (n-1)! (n-1)! (n-2)!(n 2)! (n-3)! 0!的問題, 根據(jù)公式有0!=1。 再反過來依次求出1!,2!直到最后求出n!。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)遞歸方法求n!long fac( int n)long f; if (n=0) f=1; else f=n* fac(n-1); return f;main( )long y; int n; scanf(“

18、%d”,&n); y=fac(n); printf(“%d!=%ld”,n,y); 剛開始的時(shí)候,這個(gè)n是前面輸入的需要階乘的n所以在這里帶入的值是n而這個(gè)函數(shù)里又調(diào)用了本身,不過參數(shù)已經(jīng)變成了n-1所以這里再次調(diào)用時(shí)參數(shù)已經(jīng)變成了n-1注意:上次調(diào)用fac(n)還沒有完,只是由于遇到了fac(n-1)而執(zhí)行fac(n-1)去了.而在調(diào)用fac(n-1)時(shí)同樣遇到了要調(diào)用fac(n-2)的問題,于是一層一層的包裹下去,每次調(diào)用的時(shí)候都會(huì)在內(nèi)部調(diào)用一個(gè)結(jié)構(gòu)相同但變量不同的函數(shù),直到。直到調(diào)用到fac(0)時(shí),由于內(nèi)部if判斷,已經(jīng)不需要再繼續(xù)調(diào)用另一個(gè)fac(n-1),而直接有了f=1f

19、ac(0)已經(jīng)執(zhí)行完畢,它的返回值被fac(1)中的f=n*fac(n-1)語(yǔ)句賦給了f值,同時(shí)返回了f。而這個(gè)返回的f又被fac(2)乘上當(dāng)前的n值以后繼續(xù)返回f直到最后的fac(n)都做完了,f的值被返回到了它的調(diào)用點(diǎn):主函數(shù)中,這樣就是一個(gè)遞歸運(yùn)算。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)遞歸舉例問題: 第1個(gè)月有1對(duì)兔子 過2個(gè)月,兔子就可每個(gè)月生1對(duì)兔子 問第n個(gè)月有多少對(duì)兔子? 分析: 設(shè)第n個(gè)月有f(n)對(duì)兔子 根據(jù)題意有 f(0)=0, f(1)=1 f(n)= f(n-1) + f(n-2) f(n-1): 前一個(gè)月的兔子數(shù) f(n-2

20、): 本月生的兔子數(shù) C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)定義函數(shù)f(n)long f(int n ) switch (n ) case 0: return 0; break ; case 1: return 1; break ; default: return f(n-1) + f(n-2); /*調(diào)用函數(shù)f(n) */ C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)兔子問題主函數(shù)void main() long f(int n ); /*自定義函數(shù)聲明 */int n; printf(“n input n:”);

21、scanf(“%d”,&n); printf(“n f(%d)=%ld”,n, f(n) ); /*調(diào)用函數(shù)f(n) */C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)輾轉(zhuǎn)相除法求最大公約數(shù) 求 m和 n 的公約數(shù)算法 if (m % n) = 0 n 是公約數(shù); else 求 n 和 m % n 的公約數(shù); C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)求最大公約數(shù)的遞歸算法 int gcd(int m, int n) if (m % n) = 0 return n ; else return gcd(n, m %

22、n); C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)求最大公約數(shù)的主函數(shù)void main() int m,n,t;int gcd(int m, int n);scanf(“%d %d”,&m,&n);if (mn) t=m; m=n; n=t; t= gcd( m, n); /*調(diào)用函數(shù)gcd( m, n); */ print(“n gcd=%d”,t);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)4.4 變量作用域與存儲(chǔ)方式先看一個(gè)例子,錯(cuò)在那里?:void f1( ) int t=2; a *= t;

23、 b /= t; main() int a, b; printf(“ Enter a,b:”); scanf(“%d,%d”, &a, &b); f1( ); /* 調(diào)用函數(shù)f1( ) */ printf (“a=%d,b=%d”, a, b); 編譯程序會(huì)提示出錯(cuò): Undefined symbol a 和 Undefined symbol b 。為什么?C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)一.變量的作用域 即變量的有效范圍1.變量按作用域分為全局變量全局變量和局部變量局部變量2.比較: 全局變量(外部變量) 局部變量(內(nèi)部變量)定

24、義位置: 函數(shù)體外 函數(shù)體內(nèi)作用域 : 從定義處到本源 從定義處到本函數(shù)結(jié)束文件結(jié)束舉例 : 所有函數(shù)體外定義的變量 (1)所有在函數(shù)體內(nèi)定義 (2)形式參數(shù)注意與局部變量同名的處理 局部變量屏蔽全局變量不同函數(shù)中同名局部變量互不干擾 C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè) 3 3、局部變量 C C語(yǔ)言程序是由函數(shù)組成的,有且只能有一個(gè)語(yǔ)言程序是由函數(shù)組成的,有且只能有一個(gè)mainmain函數(shù)。函數(shù)。 變量定義可以出現(xiàn)在函數(shù)內(nèi),亦可出現(xiàn)在函數(shù)外或者是函變量定義可以出現(xiàn)在函數(shù)內(nèi),亦可出現(xiàn)在函數(shù)外或者是函數(shù)的參數(shù)中。數(shù)的參數(shù)中。按照變量定義語(yǔ)句出現(xiàn)的位置,

25、可以分為:按照變量定義語(yǔ)句出現(xiàn)的位置,可以分為:局部變量:局部變量:在函數(shù)或復(fù)合語(yǔ)句內(nèi)定義;在函數(shù)或復(fù)合語(yǔ)句內(nèi)定義; 只在該函數(shù)或復(fù)合語(yǔ)句中才能使用。只在該函數(shù)或復(fù)合語(yǔ)句中才能使用。 全局變量:全局變量:在函數(shù)外定義;在函數(shù)外定義; 從它被定義的位置起從它被定義的位置起, ,在在之后的之后的所有函數(shù)中有效。所有函數(shù)中有效。形式參數(shù):形式參數(shù):定義為函數(shù)的參數(shù);定義為函數(shù)的參數(shù); 只在該函數(shù)中才能使用。只在該函數(shù)中才能使用。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè) 在函數(shù)內(nèi)部說明的變量或者在復(fù)合語(yǔ)句中定義的變?cè)诤瘮?shù)內(nèi)部說明的變量或者在復(fù)合語(yǔ)句中定義的變量稱

26、為局部變量。其作用范圍是其所在的函數(shù)或復(fù)合量稱為局部變量。其作用范圍是其所在的函數(shù)或復(fù)合語(yǔ)句。語(yǔ)句。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè) 又稱全程變量又稱全程變量或外部變量,在或外部變量,在函數(shù)外部說明。函數(shù)外部說明。其作用范圍從它其作用范圍從它被定義的位置起,被定義的位置起,在之后的程序段在之后的程序段中都是起作用的。中都是起作用的。4、全局變量C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè) 如果在全局變量定義之前的函數(shù)想引用該外部變?nèi)绻谌肿兞慷x之前的函數(shù)想引用該外部變量,則應(yīng)該在該函數(shù)中用關(guān)鍵字量,則應(yīng)該在

27、該函數(shù)中用關(guān)鍵字externextern作作“外部變外部變量說明量說明”。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)int a, b; int a, b; void swap( ) void swap( ) int t; int t; t = a; a = b; b = t; t = a; a = b; b = t; printf(“swap:a=%d,b=%dn”,a,b); printf(“swap:a=%d,b=%dn”,a,b); main()main() printf( printf(“ Enter a,b: Enter a,b:”);); sc

28、anf( scanf(“%d,%d%d,%d”, &a, &b);, &a, &b); swap( ); swap( ); printf ( printf (“main:a=%d,b=%dmain:a=%d,b=%d”,a,b); ,a,b); Enter a,b:Enter a,b:5,35,3 swap:a=3,b=5swap:a=3,b=5main:a=3,b=5main:a=3,b=5運(yùn)行結(jié)果運(yùn)行結(jié)果C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)int a, b; int a, b; void swap( ) void

29、swap( ) int t; int t; t = a; a = b; b = t; t = a; a = b; b = t; printf(“swap:a=%d,b=%dn”,a,b); printf(“swap:a=%d,b=%dn”,a,b); main()main() printf( printf(“ Enter a,b: Enter a,b:”);); scanf( scanf(“%d,%d%d,%d”, &a, &b);, &a, &b); swap( ); swap( ); printf ( printf (“main:a=%d,b=%dmain:

30、a=%d,b=%d”,a,b); ,a,b); 運(yùn)行結(jié)果運(yùn)行結(jié)果int a,b;int a,b;程序在編譯時(shí),屏幕將程序在編譯時(shí),屏幕將提示有錯(cuò)誤提示有錯(cuò)誤: : Undefine symbol aUndefine symbol a Undefine symbol b Undefine symbol bC語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)int a, b; int a, b; void swap( ) void swap( ) int t; int t; t = a; a = b; b = t; t = a; a = b; b = t; printf

31、(“swap:a=%d,b=%dn”,a,b); printf(“swap:a=%d,b=%dn”,a,b); main()main() printf( printf(“ Enter a,b: Enter a,b:”);); scanf( scanf(“%d,%d%d,%d”, &a, &b);, &a, &b); swap( ); swap( ); printf ( printf (“main:a=%d,b=%dmain:a=%d,b=%d”,a,b); ,a,b); 運(yùn)行結(jié)果運(yùn)行結(jié)果int a,b;int a,b;int a=5,b=3;int a=5,b=

32、3;Enter a,b:Enter a,b:5,35,3 swap:a=3,b=5swap:a=3,b=5main:a=5,b=3main:a=5,b=3C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)#include int a,b; /*a,b為全局變量*/ void f1(int x ) int t1,t2,a; a=t1 = x* 4; t2 = b * 3; b = 10; printf (“f1:t1=%d,t2=%d,a=%d,b=%dn”, t1,t2,a,b); main( ) a=2; b=4; /* 此a,b是全局變量,賦值 */ f1(

33、a); /* 調(diào)用函數(shù)f1( ) */ printf (“main: a=%d,b=%d”, a, b); 程序輸出結(jié)果為: f1:t1=8,t2=12,a=8,b=10main:a=2,b=10C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)若將程序改為:#include int a=2,b=4; /*a,b為全局變量*/ void f1( ) int t1,t2; t1 = a * 2; t2 = b * 3; b = 100; printf (“t1=%d,t2=%d,b=%dn”, t1, t2,b); main() int b=4; /* 此b是局部變

34、量,賦值 */ f1( ); /* 調(diào)用函數(shù)f1( ) */ printf (“a=%d,b=%d”, a, b); 結(jié)論:全局變量與局部變量同名時(shí),局部變量起作用,全局變量被屏蔽(不影響),應(yīng)小心使用程序輸出結(jié)果為:t1=4,t2=12,b=100a=2,b=4C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)二.變量的存儲(chǔ)特性1.變量按存在時(shí)間分變量按存在時(shí)間分 靜態(tài)變量 動(dòng)態(tài)變量靜態(tài)存儲(chǔ)類型的變量的生存期為程序執(zhí)行的整個(gè)過程,在該過程中占有固定的存儲(chǔ)空間,通常稱它們?yōu)橛谰么鎯?chǔ)。動(dòng)態(tài)存儲(chǔ)類型變量只生存在某一段時(shí)間內(nèi)。例如,函數(shù)的形參和函數(shù)體或分程序中定義的變量

35、, 只是在程序進(jìn)入該函數(shù)或分程序時(shí)才分配存儲(chǔ)空間, 當(dāng)該函數(shù)或分程序執(zhí)行完后,變量對(duì)應(yīng)的存儲(chǔ)空間又被撤銷了。2.c語(yǔ)言中每一個(gè)變量有兩個(gè)屬性語(yǔ)言中每一個(gè)變量有兩個(gè)屬性:數(shù)據(jù)類型數(shù)據(jù)類型,存儲(chǔ)特性存儲(chǔ)特性完整的變量定義: 存儲(chǔ)特性 數(shù)據(jù)類型 變量名;C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)3.變量的存儲(chǔ)特性變量的存儲(chǔ)特性 自動(dòng)型 auto 靜態(tài)型 static 寄存器型 register 外部型 extern(1) auto型每次進(jìn)入程序是自動(dòng)分配內(nèi)存,不長(zhǎng)期占用內(nèi)存例如:形式參數(shù),自動(dòng)型局部變量(2)static 型 局部靜態(tài)變量 全局靜態(tài)變量長(zhǎng)期占用內(nèi)

36、存C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)例例1 1:分析執(zhí)行結(jié)果f(int a)int b=0; static int c=3;b+;c+;printf(“%5d%5d%5d”,a,b,c);return(a+b+c);main()int a=2,k;for(k=0;k3;k+)printf(“%5dn”,f(a);靜態(tài)變量只初始化一次結(jié)果:2 1 4 (a,b,c) 7 (f(a)2 1 5 82 1 6 9C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)(3) register型將使用頻率高的變量定義為registe

37、r型,可以提高運(yùn)行速度. 數(shù)據(jù)內(nèi)存 運(yùn)算器 運(yùn)算器 結(jié)果 控制器 數(shù)據(jù)寄存器寄存器變量只限于整型、字符型、指針型的局部變量。寄存器變量是動(dòng)態(tài)變量,而且數(shù)目有限, 一般僅允許說明兩個(gè)寄存 器變量。例如: register int d; register char c;C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)(4)extern型型引用: extern 類型 變量名;如果某個(gè)模塊文件中要用到另一個(gè)模塊文件中的全局變量,就要用extern說明例如:程序模塊file1.c中定義了全局變量 int s ;而在另一個(gè)程序模塊file2.c中的函數(shù)fun1( )中需要使

38、用這個(gè)變量s。為此,可以在file2.c的函數(shù)fun1( )中加上外部變量說明語(yǔ)句:fun1( ) extern int s;/*表明變量s是在其他文件定義的*/ .定義時(shí)分配內(nèi)存,其他文件引用時(shí)不再分配內(nèi)存.C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)4.5編譯預(yù)處理 “編譯預(yù)處理”是C語(yǔ)言編譯系統(tǒng)的 一個(gè)組成部分。是在編譯前由編譯系統(tǒng)中的預(yù)處理程序?qū)υ闯绦虻念A(yù)處理命令進(jìn)行加工。 源程序中的預(yù)處理命令均以“#”開頭,結(jié)束不加分號(hào),以區(qū)別源程序中的語(yǔ)句,它們可以寫在程序中的任何位置,作用域是自出現(xiàn)點(diǎn)到源程序的末尾。n 預(yù)處理命令包括執(zhí)行宏定義執(zhí)行宏定義(宏替

39、換宏替換)、包含文件和、包含文件和條件編譯條件編譯。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)一.宏定義 簡(jiǎn)單宏定義1. .一般形式為一般形式為: #define 宏名 串 (宏體) 如: #define PI 3.14159 /*定義后,可以用PI來代替串3.14159*/2.宏定義的作用宏定義的作用 在宏定義之后, 該程序中宏名就代表了該字符串。3.說明說明可以用 #undef命令終止宏定義的作用域。例如:#undef PI宏定義的嵌套使用 # define R 3.0 # define PI 3.1415926 # define L 2*PI*R /

40、*宏體是表達(dá)式*/ # define S PI*R*RC語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)main ( ) printf (L=%fnS=%fn,L,S); /*2*PI*R替換L, PI*R*R替換S */ 程序運(yùn)行結(jié)果如下:L=18.849556雙引號(hào)內(nèi)與宏同名的字母不作宏展開.(見上例)n帶參數(shù)的宏定義1.帶參數(shù)的宏定義的一般形式為帶參數(shù)的宏定義的一般形式為 # define 宏名(參數(shù)表) 字符串如: #define S (a,b) a*b #define PR (x) printf(s=%fn”, x)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序

41、設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)2.帶實(shí)參的宏名被展開帶實(shí)參的宏名被展開 宏名被所定義的宏體替換, 宏體中的形參按從左到右的順序被實(shí)參替換。例如: area = S (3,2); PR(area) ;展開為: area=3*2;PR(area) 展開的結(jié)果是: printf(s=%fn”, area) ;宏定義與函數(shù)的區(qū)別(1) 引用宏只占編譯時(shí)間,不占運(yùn)行時(shí)間。 (2) 引用宏沒有返回值。如: #define squ(n) n*nvoid main (void) printf (%fn,27.0/squ(3.0); 程序輸出結(jié)果為: 27.000000注意,展開為27.0/3.0*

42、3.0 不是27.0/(3.0*3.0) C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)(3) 宏替換的形參無類型 (4) 實(shí)參為表達(dá)式的情況 函數(shù)調(diào)用是先計(jì)算出實(shí)參的值函數(shù)調(diào)用是先計(jì)算出實(shí)參的值, 再將值傳遞給形參;再將值傳遞給形參; 宏的引用是用表達(dá)式替換形參宏的引用是用表達(dá)式替換形參. 例如: #define S (a,b) a*b 引用: S(a+c,b+c) 展開后的表達(dá)式為: a+c*b+cC語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)二.文件包含#include1. 文件包含是指一個(gè)源文件可以將是指一個(gè)源文件可以

43、將 另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來。另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來。2. #include命令有兩種格式。 (1) #include (2) #include “文件名”3. 兩種格式區(qū)別(p102)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)三.條件編譯1.控制條件為常量表達(dá)式的條件編譯, 有以下幾種形式: ()if常量表達(dá)式 程序段 #endif功能:常量表達(dá)式為非時(shí),程序段被編譯。否則,程序段不被編譯。 ()if常量表達(dá)式 程序段 else 程序段 #endif功能:常量表達(dá)式為非,程序段被編譯。否則,編譯程序段。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序

44、設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)()if常量表達(dá)式 程序段 #elif常量表達(dá)式 程序段 . #elif 常量表達(dá)式 程序段n #else 程序段n+1 #endif.控制條件為定義標(biāo)識(shí)符的條件編譯)ifdef 標(biāo)識(shí)符 程序段 #endif 功能:當(dāng)標(biāo)識(shí)符在該條件編譯結(jié)構(gòu)前已定義過時(shí),程序段被編 譯。否則,程序段不被編譯。C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)()ifdef 標(biāo)識(shí)符 程序段 else 程序段 #endif功能:當(dāng)標(biāo)識(shí)符在該條件編譯結(jié)構(gòu)前已定義過時(shí),程序段被編譯。否則,編譯程序段。()ifndef 標(biāo)識(shí)符 程序段 else 程序

45、段 #endif功能是,當(dāng)標(biāo)識(shí)符在該條件編譯結(jié)構(gòu)之前沒有被define定義過時(shí),程序段被編譯;否則,編譯程序段C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)條件編譯舉例:#define inttag 1Main( )int ch; scanf(“%d”,ch); #if inttag printf(“%d”,ch); #else printf(“%c”,ch); #endif編譯成:main( )int ch; scanf(“%d”,ch); printf(“%d”,ch); C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)1。

46、以下程序求10,1000之間能被3或5或8整除的數(shù)之和。請(qǐng)將程序補(bǔ)充完整,給出正確程序運(yùn)行結(jié)果,填入相應(yīng)窗口。 #include #include #include main()_long sum;sum=0;for ( i=10;i=1000;i+) if ( _ ) sum+=i; clrscr();printf(%ldn,sum);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)3下面程序是求5,75之間的所有奇數(shù)的立方和。請(qǐng)將程序補(bǔ)充完整,并給出正確結(jié)果,填入相應(yīng)窗口。 #include #include #include main() long sum

47、; _ sum=0; for (i=5;i=75;i+) if (fmod(i,2)!=0) _ clrscr(); printf(%ldn,sum);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)4下面的程序是求表達(dá)式的值:s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1)請(qǐng)將程序補(bǔ)充完整,并給出當(dāng)n=20時(shí),程序的運(yùn)行結(jié)果(按四舍五入保留10位小數(shù))。#include #include #include double fun(int n) double s, t; int i;

48、 _ t=1.0; for(i=1;i=n; i+) t=t*i/(2*i+1); _ return s;C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)main()printf(n %12.10lf, fun(20);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)改錯(cuò)題:1下面的程序是求500以內(nèi)的所有的素?cái)?shù)之和。請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的結(jié)果,并給出正確結(jié)果。#include #include #include int prime(int n) int yes, i; if(n=1) return 1; yes=1

49、; for(i=2; i=sqrt(n); i+) if(n%i=0) yes=0; break; return 1; C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)main() int sum=0, i; clrscr(); for(i=2;i=500; i+) if(prime(i) sum+=i; printf(%dn, sum);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)2下面的程序中,函數(shù)fun的功能是:根據(jù)形參m,計(jì)算下面公式的值。 T=1+1/(2*3)+1/(3*4)+1/(m*(m+1) 請(qǐng)改正程序中的錯(cuò)

50、誤,并運(yùn)行改正后的程序。當(dāng)從鍵盤輸入70時(shí),給出程序運(yùn)行的正確結(jié)果(按四舍五入保留6位小數(shù))。#include #include double fun(int m) double t=1.0;int i=2;for(i=2; i=m; i+) t+=1.0/i*(i+1);return ;C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)main() int m;clrscr();printf(n 請(qǐng)輸入一個(gè)整數(shù): );scanf(%d,&m);printf(n 結(jié)果是: %lf n, fun(m);C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)上一頁(yè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論