版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 籃球618活動策劃方案(3篇)
- 電路隱蔽施工方案(3篇)
- 粉塵定期清理安全管理制度(3篇)
- 醫(yī)院網(wǎng)評員管理制度(3篇)
- 車間標(biāo)識卡管理制度內(nèi)容(3篇)
- 2026國家統(tǒng)計局黔南調(diào)查隊招聘編外聘用人員1人(貴州)備考考試試題及答案解析
- 2026江蘇南京大學(xué)生物醫(yī)學(xué)工程學(xué)院準(zhǔn)聘長聘崗位(事業(yè)編制)招聘備考考試題庫及答案解析
- 2026年1月江蘇揚州市衛(wèi)生健康系統(tǒng)事業(yè)單位招聘專業(yè)技術(shù)人員54人參考考試題庫及答案解析
- 2026重慶飛駛特人力資源管理有限公司派往重慶市運動技術(shù)學(xué)院專職體能教練員招聘備考考試試題及答案解析
- 護(hù)理案例分享:感染控制與預(yù)防的重要性
- 百人公司年會策劃方案
- 青少年法律知識競賽試題及答案
- 鏈?zhǔn)捷斔蜋C(jī)傳動系統(tǒng)設(shè)計
- 加班工時管控改善方案
- 2025分布式數(shù)據(jù)庫 OceanBase 架構(gòu)演進(jìn)與業(yè)務(wù)場景實踐
- 2025年軍工企業(yè)招聘考試面試流程與注意事項詳解
- 《昆蟲記》中的昆蟲圖片
- 鐵路施工安全檢查日志范本
- 五層外架施工方案
- 供應(yīng)鏈中斷應(yīng)急預(yù)案(商品斷供、物流中斷)
- 山東省青島市李滄、平度、西海岸、膠州2026屆九年級數(shù)學(xué)第一學(xué)期期末綜合測試試題含解析
評論
0/150
提交評論