C程序設(shè)計課件5.5-5.6_第1頁
C程序設(shè)計課件5.5-5.6_第2頁
C程序設(shè)計課件5.5-5.6_第3頁
C程序設(shè)計課件5.5-5.6_第4頁
C程序設(shè)計課件5.5-5.6_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

【例】求兩個整型數(shù)最大值。

#include"stdio.h"

intmax(int

x,inty){return(x>y?x:y);}voidmain(){inta,b,m;scanf("%d,%d",&a,&b);m=max(a,b);printf("%d",m);}形式參數(shù)實際參數(shù)1.形式參數(shù)和實際參數(shù)

形式參數(shù):

定義函數(shù)時的參數(shù)(簡稱形參)

實際參數(shù):

調(diào)用函數(shù)時的參數(shù)(簡稱實參)/*函數(shù)定義*//*函數(shù)調(diào)用*/(1)形參是變量;實參可以是常量、變量和表達(dá)式。

每個形參前面必須有類型,實參前面不能有類型(2)函數(shù)調(diào)用開始,為形參分配存儲單元;函數(shù)調(diào)用結(jié)束,釋放形參所占的存儲單元。(3)參數(shù)傳遞的規(guī)則

單向值傳遞,即實參值依次對應(yīng)地傳遞給形參,但形參不能反傳給實參。

參數(shù)傳遞是賦值運算(4)形參與實參的類型要一致,否則按賦值規(guī)則進(jìn)行轉(zhuǎn)換。說明xab23#include<stdio.h>intfun(

){y-=1;printf("x=%d,y=%d\n",x,y);}voidmain(){a=2;b=3;printf("a=%d,b=%d\n",a,b);fun(a,b);printf("a=%d,b=%d\n",a,b);}inta,b;y【例】寫出下列程序的運行結(jié)果。運行結(jié)果a=2,b=3x=4,y=2a=2,b=3x+=2;23intx,inty42程序1?2.函數(shù)返回值return語句的格式

return表達(dá)式;或return(表達(dá)式);功能:從函數(shù)中退出,返回到調(diào)用它的函數(shù)中,同時帶回表達(dá)式的值。【例】寫出下列程序的運行結(jié)果。#include"stdio.h"intmax(){;}voidmain(){m=;printf("m=%d\n",m);}return(x>y?x:y)max(3,4)xm4y34intm;4intx,inty運行結(jié)果m=4①一次函數(shù)調(diào)用,用return語句只能得到一個返回值。一個函數(shù)中可以有多個return語句,但只有第一個被執(zhí)行到的return語句起作用。如:intfun(intx,inty){return(x+y);return(x-y);}說明②函數(shù)返回值類型是定義函數(shù)時指定的類型。若return語句中表達(dá)式值的類型與定義函數(shù)時指定的類型不一致,則以定義函數(shù)時的類型為準(zhǔn)。如:floatfun(intx,inty){return(x+y);}/*只有該語句被執(zhí)行*//*返回值為實型*/思考題:語句return(4+3,4-3,4*3);的返回值是多少?③如果被調(diào)用函數(shù)中沒有return語句,函數(shù)并不是不帶回值,只是帶回一個不確定的無用值。如:#include"stdio.h"intfun(inta,intb){printf("%d\n",a+b);}voidmain(){intm;

m=fun(2,3);printf("m=%d\n",m);}④若明確表示函數(shù)調(diào)用不帶回值,則在定義函數(shù)時,類型指定為void。此時,不允許在函數(shù)中用return語句。如:voidfun(inta,intb){

}/*函數(shù)中沒有return語句*//*m的值不確定*/(×)returna+b;#include"stdio.h"voidswap(){t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);}voidmain(){printf("x=%d,y=%d\n",x,y);swap(x,y);printf("x=%d,y=%d\n",x,y);}運行結(jié)果

x=2,y=3a=3,b=2x=2,y=3程序2?【例】寫出下列程序的運行結(jié)果。3.函數(shù)參數(shù)的類型(1)基本類型數(shù)據(jù)作函數(shù)參數(shù)inta,intbintt;intx=2,y=3;axy23b23t思考題:x,y的值為什么沒有交換?#include"stdio.h"voidswap(){t=*a;*a=*b;*b=t;}voidmain(){printf("x=%d,y=%d\n",x,y);swap(&x,&y);printf("x=%d,y=%d\n",x,y);}運行結(jié)果

x=2,y=3x=3,y=2程序3?【例】寫出下列程序的運行結(jié)果。(2)指針作函數(shù)參數(shù)int*a,int*bintt;intx=2,y=3;axy23bt思考題:x,y的值為什么能交換?&x&y*a==x*b==y#include"stdio.h"voidswap(){t=a;a=b;b=t;}voidmain(){printf("x=%d,y=%d\n",x,y);swap(&x,&y);printf("x=%d,y=%d\n",x,y);}運行結(jié)果

x=2,y=3x=2,y=3【例】寫出下列程序的運行結(jié)果。int*a,int*bint*t;intx=2,y=3;axy23bt思考題:x,y的值為什么沒有交換?&x&y數(shù)組名作為函數(shù)參數(shù)時,傳遞的是數(shù)組的首地址,即形參數(shù)組與實參數(shù)組是同一個數(shù)組。#include"stdio.h"voidmain(){inta[8],i;

for(i=0;i<8;i++)scanf("%d",a+i);

exchange(a,8);for(i=0;i<8;i++)printf("%d\t",a[i]);}voidexchange(intx[],intn){}intt;t=x[0];x[0]=x[n-1];x[n-1]=t;【例】將一維數(shù)組的第一個元素值與最后一個元素值交換。/*系統(tǒng)自動將intx[]轉(zhuǎn)換為int*x*/(3)一維數(shù)組作函數(shù)參數(shù)程序4?/*輸入數(shù)據(jù)*//*調(diào)用函數(shù)交換*//*輸出數(shù)據(jù)*/a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]x[0]x[1]x[2]x[3]x[4]x[5]x[6]x[7]axvoidexchange(intx[],intn);/*函數(shù)引用說明*/#include"stdio.h"voidmain(){inta[100],n,max,min,i;

voidfun(intx[],intn,int*a,int*b);/*引用說明*/printf("n=");scanf("%d",&n);printf("Input%dintegers:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);

fun(a,n,&max,&min);printf("max=%d,min=%d",max,min);}voidfun(intx[],intn,int

*a,int

*b){inti;*a=*b=x[0];for(i=1;i<n;i++){

}}【例】求一組整數(shù)中的最大值和最小值。指針作為函數(shù)的參數(shù),一次函數(shù)調(diào)用可得到多個返回值min*a==max*b==min程序5?…ax/*輸入數(shù)據(jù)*//*函數(shù)調(diào)用*//*輸出數(shù)據(jù)*/

max&max

&minbaif(x[i]>*a)*a=x[i];if(x[i]<*b)*b=x[i];/*初始化最大值、最小值及其位置*/

/*依次比較,更新最大值、最小值及其位置*//*交換*/voidexchangemm(intx[M][N]){inti,j,max,min,hi,hj,li,lj,t;max=min=x[0][0];

hi=hj=li=lj=0;for(i=0;i<M;i++)for(j=0;j<N;j++){

}t=x[hi][hj];x[hi][hj]=x[li][lj];x[li][lj]=t;}/*系統(tǒng)自動將intx[M][N]轉(zhuǎn)換為int(*x)[N]*/【例】將3×4數(shù)組中的最大值與最小值互換位置。(4)二維數(shù)組作函數(shù)參數(shù)#include"stdio.h"#defineM3#defineN4voidmain(){inta[M][N],i,j;

voidexchangemm(intx[][N]);/*函數(shù)引用說明*/for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);

exchangemm(a);for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%d\t",a[i][j]);printf("\n");}}程序6?/*輸入數(shù)據(jù)*/

/*函數(shù)調(diào)用*//*輸出交換后數(shù)據(jù)*/a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]x[0][0]x[0][1]x[0][2]x[0][3]x[1][0]x[1][1]x[1][2]x[1][3]x[2][0]x[2][1]x[2][2]x[2][3]axif(x[i][j]>max){max=x[i][j];hi=i;hj=j;}if(x[i][j]<min){min=x[i][j];li=i;lj=j;}#include<stdio.h>voidmain(){charstr[80];

voidstrcatrep(char*s);/*引用說明*/gets(str);

strcatrep(str);puts(str);}程序7?voidstrcatrep(char*s){char*p,*q;p=s;while(*p!='\0')p++;q=p-1;while(q>=s)*p++=*q--;*p='\0';}(5)字符串作函數(shù)參數(shù)【例】將一字符串倒過來與原字符串連接成一個字符串。/*輸入字符串*//*函數(shù)調(diào)用*//*輸出結(jié)果*//*也可用chars[]*/a\0\0bcspqabc/*p定位到\0*//*q定位到最后字符*//*復(fù)制*//*尾部置\0*/str4主函數(shù)與命令行參數(shù)主函數(shù)格式

main(intargc,char*argv[]){……}①argc用于保存用戶在命令行中輸入的參數(shù)的個數(shù),命令名本身也作為一個參數(shù)。②argv[]是一個字符型指針數(shù)組,用于保存各個參數(shù)的名字(包括命令名本身)。③對命令名,系統(tǒng)將會自動加上盤符、路徑、文件名,而且變成大寫字母串存儲到argv[0]中。其他命令行參數(shù)名將會自動依次存到argv[1]、argv[2]、…、argv[argc-1]中。說明【例】寫出下列程序的運行結(jié)果。#include<stdio.h>voidmain(intargc,char*argv[]){while(--argc>=0)puts(argv[argc]);}通常用argc和argv作為命令行參數(shù)的形參名,也可以使用其他的合法標(biāo)識符作為形參變量名。輸出結(jié)果RussiaChinaC:\USER\EM.EXE/*文件名為:em.c(存放在c:\user中)*/程序8?經(jīng)過編譯連接,生成EM.EXE,在命令狀態(tài)下輸入:

emChinaRussia↙argv[0]C:\TC\EM.EXE\0

argv[1]China\0

argv[2]Russia\0函數(shù)與帶參數(shù)的宏的區(qū)別①函數(shù)調(diào)用是在程序運行時處理的;宏展開是在編譯之前進(jìn)行的。②函數(shù)調(diào)用時,先求出實參的值,然后傳遞給形參;使用帶參數(shù)的宏只是簡單的字符替換,不進(jìn)行值傳遞,也沒有返回值的概念。③函數(shù)中的實參和形參都有類型;宏名無類型,參數(shù)也無類型。④宏展開后源程序增長;函數(shù)調(diào)用不會使源程序變長。⑤一次函數(shù)調(diào)用只能得到一個返回值;宏調(diào)用可以得到多個結(jié)果。用帶參數(shù)的宏實現(xiàn)#include<stdio.h>#define(a)>(b)?(a):(b)voidmain(){intm,x,y;scanf("%d%d",&x,&y);m=S(x+1,y-2);printf("m=%d",m);}用函數(shù)實現(xiàn)#include<stdio.h>intmax(inta,intb){return(a>b?a:b);}main(){intm,x,y;scanf("%d%d",&x,&y);m=max(x+1,y-2);printf("m=%d",m);}【例】求兩個整數(shù)的最大值。S(a,b)m=(x+1)>(y-2)?(x+1):(y-2);說明1.定義為void類型的函數(shù),其含義是()。

調(diào)用函數(shù)后,被調(diào)用的函數(shù)的返回值為任意的類型

調(diào)用函數(shù)后,被調(diào)用的函數(shù)的返回值為隨機(jī)值

調(diào)用函數(shù)后,被調(diào)用的函數(shù)沒有返回值

以上三種說法都是錯誤的2.C語言規(guī)定,函數(shù)返回值的類型由()。

函數(shù)中return語句的表達(dá)式類型決定

函數(shù)定義時指定的類型決定

調(diào)用該函數(shù)時系統(tǒng)臨時決定

主調(diào)函數(shù)的返回值類型決定練習(xí)題3.若函數(shù)的形參是一個有M行N列的二維整型數(shù)組,則錯誤的形參說明是()。

①inta[M][]②inta[][N]③int(*a)[N]④inta[M][N]一、單項選擇題③②①3.以下說法不正確的是()。

實參可以是任意類型

形參應(yīng)與對應(yīng)的實參類型一致

形參可以是常量、變量或表達(dá)式

實參可以是常量、變量或表達(dá)式5.以下敘述正確的是()。

①main函數(shù)的形參個數(shù)和形參名均可由用戶指定

②main函數(shù)的形參名只能是argc和argv

當(dāng)main函數(shù)帶有形參時,傳遞給形參的值從調(diào)用它的函數(shù)得到

當(dāng)main函數(shù)帶有形參時,傳遞給形參的值只能從命令行中得到③④1.函數(shù)fun的功能是將n所指變量中的各位上為偶數(shù)的數(shù)去除,剩余的數(shù)

按原來從高位到低位的順序組成一個新的數(shù),并通過形參指針n傳回

所指變量。

voidfun(unsignedlong*n)

{unsignedlongx=0,i=1;

intt;

while(*n)

{t=*n%

;

if(t%2!=0)

{x=x+t*i;i=i*10;}

*n=*n/10;}

*n=

;

}二、程序填空題10x2.

函數(shù)fun的功能是在ss所指字符串?dāng)?shù)組中,刪除所有串長超過k的字符

串,函數(shù)返回所剩字符串的個數(shù)。ss所指字符串?dāng)?shù)組中共有N個字符

串,且串長小于M。

#include<string.h>

#defineN5

#defineM10

intfun(charss[][M],intk)

{inti,j=0,len;

for(i=0;i<N;i++)

{len=strlen(ss[i]);

if(len<=

)

strcpy(ss[j++],

);}

returnj;

}kss[i]

3.函數(shù)fun的功能是將s所指字符串中的所有非數(shù)字字符移到所有數(shù)字字符之后,并保持?jǐn)?shù)字字符和非數(shù)字字符原有的先后次序。

#include<stdio.h>voidfun(char*s)

{inti,j=0,k=0;chart1[80],t2[80];

for(i=0;s[i]!='\0';i++)if(s[i]>='0'&&s[i]<='9')

{t1[j]=s[i];j++;}else{

;k++;}t2[k++]='\0';for(i=0;i<j;i++)s[i]=t1[i];for(i=0;i<k;i++)s[i+j]=

; }voidmain(){chars[81];gets(s);

;puts(s);}fun(s)t2[i]t2[k]=s[i]三、閱讀程序,寫出運行結(jié)果1.下列程序的運行結(jié)果是()#include<stdio.h>intfun(longs){intt=0;while(s>0){t=t+s%10;s=s/10;}returnt;}voidmain(){longs=7654321;intt;t=fun(s);printf("%d\n",t);}282.下列程序的運行結(jié)果是()#include<stdio.h>#defineN4f

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論