實驗06 函數(shù)、編譯預處理_第1頁
實驗06 函數(shù)、編譯預處理_第2頁
實驗06 函數(shù)、編譯預處理_第3頁
實驗06 函數(shù)、編譯預處理_第4頁
實驗06 函數(shù)、編譯預處理_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選文檔班級:B12數(shù)信班 姓名:歲夢 學號:1205025106試驗6 函數(shù)、編譯預處理試驗目的:1把握函數(shù)的定義、函數(shù)的說明和調(diào)用方法;2把握函數(shù)實參與形參的對應關系以及“值傳遞”的方式和函數(shù)值的正確返回;3把握函數(shù)的嵌套調(diào)用和遞歸調(diào)用的方法;4把握數(shù)組做函數(shù)參數(shù)的用法;5把握全局變量、局部變量、動態(tài)變量、靜態(tài)變量的概念和使用方法;6把握宏定義、文件包含處理和條件編譯的方法;7學習對多文件程序的編譯和運行。試驗內(nèi)容:1程序閱讀理解訓練。1) 輸入并運行下面的程序,分析輸出的結果。#include void try(int,int,int);void main( ) int x=2,y=3,

2、z=4;printf(1) x=%d y=%d z=%dn,x,y,z);try(x,y,z);printf(4) x=%d y=%d z=%dn,x,y,z);void try(int x,int y,int z)printf(2) x=%d y=%d z=%dn,x,y,z);z=x+y;x=x*x;y=y*y;printf(3) x=%d y=%d z=%dn,x,y,z);2) 輸入并運行下面的程序,分析輸出的結果。#include void swap(int,int);void main( ) int x=10,y=20;printf(1) x=%d y=%dn,x,y);swap(

3、x,y);printf(4) x=%d y=%dn,x,y);void swap(int a,int b)int t;printf(2) a=%d b=%dn,a,b);t=a;a=b;b=t;printf(3) a=%d b=%dn,a,b);3) 輸入并運行下面的程序,分析輸出的結果。#include int a=3,b=5,c; void f(int b)c=a+b;printf(%d %d %dn,a,b,c); void main()int a=8;f(3);printf(%d %d %dn,a,b,c); 4) 輸入并運行下面的程序,分析輸出的結果。#include int f1(

4、int n) static int f=1; f=f*n; return(f); void main() int i; for(i=1;i=4;i+) printf(%5d,f1(i); printf(n);5) 輸入并運行下面的程序,說明程序及其ispring函數(shù)的功能。運行程序時,分別輸入數(shù)據(jù):17、34、2,1、0,檢查結果是否正確,假如結果不正確,請修改。(嫻熟把握該程序)#include int isprime(int);void main( ) int x;printf(Enter a integer number:);scanf(%d,&x);if(isprime(x)print

5、f(%d is prime.n,x);elseprintf(%d is not prime.n,x);int isprime(int a)int i;for(i=2;i=sqrt(double)a);i+)if(a%i=0)return 0;return 1;6) 輸入并運行下面的程序,說明函數(shù)fun的功能。#include int fun(int num)int k=1; dok*=num%10;num/=10;while(num);return k; void main()int n=26;printf(%dn,fun(n);思考:假如將函數(shù)fun中的變量k初始化為0,并將語句“k*=nu

6、m%10;”改為“k+=num%10;”,函數(shù)fun的功能變?yōu)槭裁矗?) 輸入并運行下面的程序,說明函數(shù)fun的功能。(嫻熟把握該程序)#include void dtob(int n) int i; if(n1)i=n%2;dtob(n/2); elsei=n; printf(%d,i); void main() int i=11; printf(%d-,i); dtob(i); printf(2)n); 2程序填空(依據(jù)題意在空白處填入適當?shù)膬?nèi)容,使程序變得完整,并上機進行調(diào)試驗證) 1) 程序說明:下面程序?qū)⑤斎氲氖M制數(shù) n 轉換為 b 進制數(shù),并將轉換結果輸出。轉換的方法是:除 b

7、取余法。#include stdio.h void transfer(int m,int k) int a20,i; for(i=0; m; i+) ai= ;m/=k; for(;i=0;i-)printf(%d,ai); void main() int b,n; scanf(%d%d, ); ;修改:#include stdio.h void transfer(int m,int k) int a20=0,i; for(i=0; i=0;i-)printf(%d,ai); void main() int b,n; scanf(%d%d,&b,&n); transfer(n,b);2) 程序

8、說明:歌德巴赫猜想指出:任何一個充分大的偶數(shù)都可以表示為兩個素數(shù)之和,例如 4=2+2 6=3+3 8=3+5 50=3+47。下面程序?qū)?4-50 之間的全部偶數(shù)用兩個素數(shù)之和表示,推斷一個整數(shù)是否為素數(shù)用函數(shù) prime 完成。#include stdio.h int prime(int x)int k,flag=1; for(k=2;k=x/2;k+) if( ) flag=0; break; return( ); void main() int m,n,k; for(m=4;m=50;m+) for(n=2;nm-1;n+) if(prime(n)& ) printf(%d=%d+%d

9、n, );break; 修改:#include stdio.h int prime(int x)int k,flag=1; for(k=2;k=x/2;k+) if(x%k=0) flag=0; break; return(flag); void main() int m,n,k; for(m=4;m=50;m+) for(n=2;nm-1;n+) if(prime(n)&prime(m-n) printf(%d=%d+%dn,m,n,m-n);break; 3) 程序說明:用一個一維數(shù)組存放 10 個同學的成果,寫一個函數(shù)求出平均分、最高分和最低分。#include stdio.h floa

10、t max=0;min=0; float average(float score,int n) int i; float ave,sum=score0; max=min= ; for(i=1;imax) max=scorei; else if( )min=scorei; sum=sum+scorei; ave=sum/10; return ; void main() float ave,score10; int i; for(i=0;i10;i+) scanf(%f, ); ave=average( ); printf(max=%6.2f min=%6.2f average=%6.2fn,ma

11、x,min,ave); 修改:#include stdio.h float max=0,min=0; float average(float score,int n) int i; float ave,sum=score0; max=min=score0; for(i=1;imax) max=scorei; else if(scoreimin)min=scorei; sum=sum+scorei; ave=sum/10; return ave; void main() float ave,score10; int i; for(i=0;i10;i+) scanf(%f,&scorei); av

12、e=average(score,10); printf(max=%6.2f min=%6.2f average=%6.2fn,max,min,ave); 4) 程序說明:在主函數(shù)中讀入一字符串,再讀入一字符,然后調(diào)用函數(shù)delete在字符串中查找并刪除該字符,最終輸出該字符串。#include stdio.h void delete(char p,char ch)int i=0,j;while( ) if(pi=ch)for(j=i;j ;j+)pi=pi+1;elsei+; void main() char p80,ch;int i=0,j;scanf(%s,p);scanf(%c,&ch)

13、;delete( );printf(%s, ); 修改:#include stdio.h void delete(char p,char ch) /asd aint i=0,j;while(pi!=0) /aif(pi=ch)for(j=i;j80;j+)pi=pi+1;elsei+; void main() char p80,ch;int i=0,j;scanf(%s,p);scanf( %c,&ch); delete(p,ch);printf(%s,p); 5) 程序說明:輸入10 個同學的學號及單科成果,然后求出最高分的學號、最低分的學號以及超過平均分的人數(shù)。#include stdio

14、.hint high_num, low_num; int over_aver(int score,int n) int i, imax, imin, over_num; float aver; imax=0; imin=0; aver=0; for(i=0;iscoreimax) imax=i; if(scoreiscoreimin) imin=i; aver/=n; over_num=0; for(i=0;i=aver)over_num+; _; _; return over_num; void main() int i, over_num, a10; printf(n input a:);

15、 for(i=0;i10;i+)scanf(%d,&ai);over_num=_; printf(n high_num,low_num=%d,%d, high_num, low_num); printf(n over_num=%d,over_num); 修改:#include stdio.hint high_num, low_num; /全局變量int over_aver(int score,int n) int i, imax, imin, over_num; float aver; imax=0; imin=0; aver=0; for(i=0;iscoreimax) imax=i; if

16、(scoreiscoreimin) imin=i; aver/=n; over_num=0; for(i=0;i=aver)over_num+; high_num=imax; low_num=imin; return over_num; void main() int i, over_num, a10; printf(n input a:); for(i=0;i10;i+)scanf(%d,&ai);over_num=over_aver(a,10); printf(n high_num,low_num=%d,%d, high_num, low_num); printf(n over_num=%

17、d,over_num); 3程序設計(依據(jù)題意編寫程序并上機進行調(diào)試)1) 用遞歸法將一個整數(shù)n轉換成字符串。例如,輸入483,應輸出字符串“483”。n的位數(shù)不確定,可以是任意的整數(shù)。# includevoid convert(int n) int i; /定義整數(shù)變量if (i=n/10)!=0)/*假如整數(shù)i除以10后不為0,說明高位還有值,需要更多字符來表示*/convert(i);/調(diào)用自身,使用除以10后的i值putchar(n%10+0);/打印余數(shù),余數(shù)是1則打印字符1,以此類推int main() int number;/定義整數(shù)變量printf(輸入一個數(shù):);/輸出信息s

18、canf(%d,&number);/讓用戶輸入一個整數(shù)printf(輸出:);/輸出信息if (number0)/假如是負數(shù) putchar(-);/打印負號number=-number;/負數(shù)變?yōu)檎龜?shù)convert(number); /執(zhí)行遞歸函數(shù)printf(n);return 0;2) 求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)。用一個函數(shù)求最大公約數(shù),用另一函數(shù)依據(jù)求出的最大公約數(shù)求最小公倍數(shù)。要求:求最大公約數(shù)用遞歸方法實現(xiàn),遞歸公式為(r=m%n): 不用全局變量,分別用兩個函數(shù)求最大公約數(shù)和最小公倍數(shù)。兩個整數(shù)在主函數(shù)中輸人,并傳送給函數(shù)l,求出的最大公約數(shù)返回主函數(shù),然后再與兩個整數(shù)一

19、起作為實參傳遞給函數(shù)2,以求出最小公倍數(shù),再返回到主函數(shù)輸出最大公約數(shù)和最小公倍數(shù)。# includeint gcd(int m,int n)int r,max_gys;r=m%n;if (r=0) max_gys=n; return max_gys; else gcd(n,r); int gbs(int m,int n,int l)int a,b,c;a=m/l;b=n/l;c=a*b*l;return c; int main() int m,n,x,y,t;printf(輸入兩個需要求最大公約數(shù)和最小公倍數(shù)的數(shù):n);scanf(%d%d,&m,&n);if (mn) t=m;m=n;n=

20、t; x=gcd(m,n);y=gbs(m,n,x);printf(最大公約數(shù)是%dt最小公倍數(shù)的數(shù)是%dn,x,y);return 0; 用全局變量的方法,分別用兩個函數(shù)求最大公約數(shù)和最小公倍數(shù),但其值不由函數(shù)帶回。將最大公約數(shù)和最小公倍數(shù)都設為全局變量,在主函數(shù)中輸出它們的值。# includeint x,y;void gcd(int m,int n)int r,max_gys;r=m%n;if (r=0) x=n; else gcd(n,r); void gbs(int m,int n)int a,b;a=m/x;b=n/x;y=a*b*x; int main() int m,n,t;printf(輸入兩個需要求最大公約數(shù)和最小公倍數(shù)的數(shù):n);scanf(%d%d,&m,&n);if (mn) t=m;m=n;n=t; gcd(m,n);gbs(m,n);printf(最大公約數(shù)是%dt最小公倍數(shù)的數(shù)是%dn,x,y);return 0;3) 三角形的面積為其中,為三角形的邊長,。編寫程序求面積。要求:定義兩個帶參數(shù)的宏,一個用來求,另一個用來求,在程序中用帶參數(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

提交評論