![(53)-第6章 函數(shù)程序設計-里應外合的函數(shù)_第1頁](http://file4.renrendoc.com/view/d198b96f8f72d5500ae4ae62aef52891/d198b96f8f72d5500ae4ae62aef528911.gif)
![(53)-第6章 函數(shù)程序設計-里應外合的函數(shù)_第2頁](http://file4.renrendoc.com/view/d198b96f8f72d5500ae4ae62aef52891/d198b96f8f72d5500ae4ae62aef528912.gif)
![(53)-第6章 函數(shù)程序設計-里應外合的函數(shù)_第3頁](http://file4.renrendoc.com/view/d198b96f8f72d5500ae4ae62aef52891/d198b96f8f72d5500ae4ae62aef528913.gif)
![(53)-第6章 函數(shù)程序設計-里應外合的函數(shù)_第4頁](http://file4.renrendoc.com/view/d198b96f8f72d5500ae4ae62aef52891/d198b96f8f72d5500ae4ae62aef528914.gif)
![(53)-第6章 函數(shù)程序設計-里應外合的函數(shù)_第5頁](http://file4.renrendoc.com/view/d198b96f8f72d5500ae4ae62aef52891/d198b96f8f72d5500ae4ae62aef528915.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章函數(shù)程序設計
第6章函數(shù)程序設計6.1函數(shù)概述6.2自定義函數(shù)示例6.3函數(shù)定義及調用6.4函數(shù)嵌套和遞歸函數(shù)6.5數(shù)組與函數(shù)6.6函數(shù)應用程序舉例6.7變量的作用域和存儲類型
C語言程序設計(第4版)ISBN9787302496014清華大學出版社張磊編著
6.1函數(shù)概述C語言程序的特點:函數(shù)化結構函數(shù)分類:系統(tǒng)函數(shù)、用戶函數(shù)系統(tǒng)函數(shù):printf()、scanf()、sqrt()等用戶函數(shù):在程序中編寫的函數(shù),又稱自定義函數(shù)。用戶函數(shù)的特例:main()函數(shù)如果在程序中經(jīng)常需要某種處理,就可以編寫一個函數(shù),在需要這種處理時,就調用該函數(shù)。示例計算a!+b!+c!
6.2用戶函數(shù)示例例6-1編程計算表達式a!+b!+c!的值。程序結構只有main()函數(shù)的階乘程序#include<stdio.h>voidmain(){ inta,b,c,i; longt,sum; printf("Inputa,b,c:"); scanf("%d,%d,%d",&a,&b,&c);
for(t=1,i=1;i<=a;i++) t=t*i; sum=t;
for(t=1,i=1;i<=b;i++) t=t*i; sum+=t;
for(t=1,i=1;i<=c;i++) t=t*i; sum+=t; printf("SUM=%ld\n",sum);}使用用戶函數(shù)的階乘程序#include<stdio.h>intmain(){ longf(intn); inta,b,c; printf("Inputa,b,c:"); scanf("%d,%d,%d",&a,&b,&c); printf("SUM=%ld\n",f(a)+f(b)+f(c));return0;}longf(intn)/*計算階乘的函數(shù)*/{ longt; inti; for(t=1,i=1;i<=n;i++) t*=i; return(t);}求n!函數(shù)調用函數(shù)f()求c!
6.3函數(shù)定義及調用6.3.1函數(shù)定義6.3.2函數(shù)值和return命令6.3.3函數(shù)調用
6.3.1函數(shù)定義函數(shù)定義的一般格式
函數(shù)類型
函數(shù)名(形式參數(shù)表) {
函數(shù)體
}形式參數(shù)表的格式數(shù)據(jù)類型
變量1,數(shù)據(jù)類型
變量2,…,數(shù)據(jù)類型變量n函數(shù)值的類型
6.3.1函數(shù)定義例6-2
定義連續(xù)輸出n個*字符的函數(shù)。voidp_star(intn){inti;for(i=1;i<=n;i++)putchar('*');}
6.3.2函數(shù)值和return命令函數(shù)值是函數(shù)執(zhí)行后帶回的一個結果,稱為函數(shù)的返回值。函數(shù)值通過函數(shù)體中return命令獲得。return一般格式return表達式或:return(表達式)
6.3.2函數(shù)值和return命令例6-3
定義求兩個實數(shù)的最大數(shù)函數(shù)max()。floatmax(floatx,floaty){ floatm; m=x>y?x:y;
returnm;}floatmax(floatx,floaty){ if(x>y)
returnx; else
returny;}
6.3.2函數(shù)值和return命令例6-4intsum(intn){ ints,i; for(s=0,i=1;i<=n;i++) s+=i;
returns;}
C語言程序設計-理論、方法與實踐(第2版)6.3.3函數(shù)調用在進行函數(shù)調用之前,須對被調用函數(shù)進行函數(shù)聲明函數(shù)原型;函數(shù)原型一般形式對已定義函數(shù)的具體應用一般格式函數(shù)名(實參表)例如:f(a)發(fā)生函數(shù)調用時,函數(shù)中的形參將得到實參表中的數(shù)據(jù),然后執(zhí)行函數(shù)體語句,實現(xiàn)函數(shù)功能。函數(shù)調用函數(shù)聲明函數(shù)類型函數(shù)名(數(shù)據(jù)類型1
形參1,數(shù)據(jù)類型2
形參2,…,數(shù)據(jù)類型n形參n);簡化形式函數(shù)類型函數(shù)名(數(shù)據(jù)類型1,數(shù)據(jù)類型2,…,數(shù)據(jù)類型n)
6.3.3函數(shù)調用函數(shù)調用注意事項⑴函數(shù)調用的實參個數(shù)必須與形參個數(shù)相同。⑵實參與形參按照在參數(shù)表中的位置一一對應傳值,實參與形參的名稱是否相同對調用傳值無任何影響。⑶實參與形參對應位置上的數(shù)據(jù)類型應該一致。⑷對于無參數(shù)函數(shù),即形參表為void的函數(shù),函數(shù)調用時實參表必須為空,不能有任何內容。函數(shù)定義voidp_star(intn){ inti; for(i=1;i<=n;i++) putchar('*'); return;}
6.3.3函數(shù)調用#include<stdio.h>intmain(){
voidp_star(intn);
intk; for(k=1;k<=5;k++) {
p_star(k);
putchar('\n'); }return0;}例6-5
調用p_star()函數(shù),輸出*字符圖案。***************函數(shù)原型及函數(shù)聲明函數(shù)調用函數(shù)實參函數(shù)形參
6.3.3函數(shù)調用k值p_star()調用實例參數(shù)傳遞執(zhí)行結果1p_star(1)1傳遞給形參n執(zhí)行p_star()的函數(shù)體,輸出:*2p_star(2)2傳遞給形參n執(zhí)行p_star()的函數(shù)體,輸出:**3p_star(3)3傳遞給形參n執(zhí)行p_star()的函數(shù)體,輸出:***4p_star(4)4傳遞給形參n執(zhí)行p_star()的函數(shù)體,輸出:****5p_star(5)5傳遞給形參n執(zhí)行p_star()的函數(shù)體,輸出:*****p_star()函數(shù)調用的參數(shù)傳遞及執(zhí)行情況
6.3.3函數(shù)調用例6-6
調用求和函數(shù)sum(),計算表達式#include<stdio.h>intmain(){ intsum(int); printf("%d\n",sum(20)+sum(50));
return0;
}intsum(intn){ ints,i; for(s=0,i=1;i<=n;i++) s+=i; return(s);}函數(shù)定義函數(shù)調用
6.3.3函數(shù)調用函數(shù)調用的三種形式⑴
當被調用函數(shù)為void類型時,函數(shù)無返回值,函數(shù)調用是一個獨立的語句。⑵當被調用函數(shù)有返回值時,函數(shù)調用出現(xiàn)在表達式中,是表達式的一部分。⑶函數(shù)調用也可以作為一個函數(shù)的實參。
6.3.3函數(shù)調用#include<stdio.h>intmain(){ floatmax(float,float); floata,b,c; printf("a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); printf("Max=%f\n",max(max(a,b),c));
return0;}floatmax(floatx,floaty){ floatm; m=x>y?x:y; return(m);}函數(shù)調用作為函數(shù)的實參利用求兩個數(shù)的最大數(shù)函數(shù)max(),求得三個數(shù)的最大數(shù)。例6-76.3.3函數(shù)調用注意函數(shù)調用時,實參和形參按照在參數(shù)表中的位置對應傳值。例6-8
編寫輸出n個連續(xù)的任意字符的函數(shù)p_string(),并調用該函數(shù)輸出一個5行的“*”三角形圖案#include<stdio.h>intmain(){ voidp_string(int,char); intk; for(k=1;k<=5;k++) {
p_string(k,'*'); putchar('\n'); }return0;}voidp_string(intn,charch){ inti; for(i=1;i<=n;i++) putchar(ch); return;}
按位置對應傳送
6.4函數(shù)嵌套和遞歸函數(shù)6.4.1函數(shù)嵌套6.4.2遞歸函數(shù)
6.4.1函數(shù)嵌套函數(shù)嵌套是在一個用戶函數(shù)的函數(shù)體中,出現(xiàn)另外用戶函數(shù)的調用。如函數(shù)a調用函數(shù)b,函數(shù)b又調用函數(shù)c等。
6.4.1函數(shù)嵌套#include<stdio.h>voidp_star(int);voidp_all(int);intmain(){p_all(5);return0;}voidp_star(intn)
{inti;for(i=1;i<=n;i++)putchar('*');}voidp_all(intm)
{inti;for(i=1;i<=m;i++){p_star(i);putchar('\n');}}在一行上連續(xù)輸出n個*字符
輸出m行*三角形圖案
函數(shù)嵌套調用函數(shù)調用,main()是主調函數(shù)函數(shù)嵌套示例程序輸出*圖案例6-9函數(shù)嵌套是在一個用戶函數(shù)的函數(shù)體中,出現(xiàn)另外用戶函數(shù)的調用。***************
6.4.1函數(shù)嵌套函數(shù)嵌套調用圖示main()函數(shù)調用p_all()函數(shù)p_all()函數(shù)調用p_star()函數(shù)p_star()函數(shù)main()函數(shù)調用p_all()函數(shù)p_all()函數(shù)調用p_star()函數(shù)p_star()函數(shù)共被調用了5次
6.4.2遞歸函數(shù)遞歸函數(shù)是由遞歸定義產生的,若在定義一個函數(shù)的過程中直接或間接地調用了被定義的函數(shù)本身,那么這種定義就是遞歸定義,所定義的函數(shù)稱為遞歸函數(shù)。C語言程序設計-理論、方法與實踐(第2版)6.4.2遞歸函數(shù)公式遞歸問題。能夠使用一個遞歸公式描述的問題歸類為公式遞歸問題。非公式遞歸問題。有的問題不能直接用一個遞歸公式進行描述,但可以用遞歸方法進行描述,我們將其歸類為非公式遞歸問題。遞歸函數(shù)是由遞歸定義產生的,若在定義一個函數(shù)的過程中直接或間接地調用了被定義的函數(shù)本身,那么這種定義就是遞歸定義,所定義的函數(shù)稱為遞歸函數(shù)。1什么是遞歸函數(shù)2分類討論遞歸函數(shù)
6.4.2遞歸函數(shù)公式遞歸1能夠使用一個遞歸公式描述的問題歸類為公式遞歸問題。公式遞歸問題實現(xiàn)起來比較容易,只要給出了遞歸公式,就能直觀地編寫遞歸函數(shù)。求解公式遞歸問題歸結為兩個步驟⑴用遞歸公式描述問題。⑵將遞歸公式函數(shù)化。
6.4.2遞歸函數(shù)公式遞歸例6-10用遞歸函數(shù)計算累加和1+2+3+……+n用遞歸公式描述問題將遞歸公式函數(shù)化longsum(intn){if(n==1)return(1);elsereturn(sum(n-1)+n);}遞歸調用
6.4.2遞歸函數(shù)#include<stdio.h>intmain(){ longsum(int); intn; printf("n="); scanf("%d",&n); printf("Sum=%ld\n",sum(n));return0;}longsum(intn){ if(n==1) return(1); else return(sum(n-1)
+n);}遞歸調用
6.4.2遞歸函數(shù)非公式遞歸2有的問題不能直接用一個遞歸公式進行描述,但可以用遞歸方法進行描述,將其歸類為非公式遞歸問題。漢諾塔問題有三個柱和n個大小各不相同的盤子,開始時,所有盤子以塔狀疊放在柱A上,要求按一定規(guī)則,將柱A上的所有盤子移動到柱B上,柱C為移動緩沖住。移動規(guī)則:一次只能移動一個盤子。任何時候不能把盤子放在比它小的盤子的上面。
6.4.2遞歸函數(shù)漢諾塔問題遞歸實現(xiàn)過程若只有一個盤子,則直接從A移到B,問題結束;若有n(n>1)個盤子,則須經(jīng)過如下三個步驟:第一步:按照移動規(guī)則,把A上面的n-1個盤子,移到C。第二步:將A上僅有的一只盤子(也就是最大的一只)直接移到柱B上。第三步:用第一步所述方法,將C柱上的n-1個盤子移到B柱上。與第一步一樣,這一步實際上是由一系列更小的一次僅移一個盤子的操作組成。B6.4.2遞歸函數(shù)#include<stdio.h>intmain(){intdisks;voidhanoi(int,char,char,char);printf("Numberofdisks:");scanf("%d",&disks);printf("\n");hanoi(disks,'A','B','C');return0;}voidhanoi(intn,charA,charB,charC){if(n==1){ printf("%c-->%c",A,B);return;} else { hanoi(n-1,A,C,B); printf("%c-->%c",A,B); hanoi(n-1,C,B,A);}}漢諾塔問題的遞歸算法:hanoi(n個盤,A→B,緩柱C){if(n==1)
直接從A移到Belse{hanoi(n-1個盤,A→C,緩柱B)
移動n號盤子:A→Bhanoi(n-1個盤,C→B,緩柱A)}}漢諾塔問題例6-11
6.5數(shù)組與函數(shù)6.5.1數(shù)組元素作函數(shù)參數(shù)6.5.2一維數(shù)組名作函數(shù)參數(shù)6.5.3二維數(shù)組與函數(shù)
6.5.1數(shù)組元素作為函數(shù)參數(shù)數(shù)組元素作為函數(shù)的參數(shù)時,只傳送作為實參的數(shù)組元素,與其他簡單變量作函數(shù)參數(shù)沒有區(qū)別。例6-12設計一個判斷素數(shù)的函數(shù),在主函數(shù)中調用它,把一個整型數(shù)組的所有素數(shù)找出來。
求解問題的思路⑴設計判斷素數(shù)的函數(shù)prime(),函數(shù)原型:
intprime(intk)
當k為素數(shù)時,函數(shù)值為1;否則,函數(shù)值為0。⑵在主函數(shù)main()中建立一個自然數(shù)數(shù)組natural,然后用它的每一個數(shù)組元素調用prime()函數(shù)求素數(shù)。
6.5.1數(shù)組元素作為函數(shù)參數(shù)intprime(intk){
intsk,i;
sk=sqrt(k);
for(i=2;i<=sk;i++) if(k%i==0)
return0;
return1;}#defineN10#include<stdio.h>#include<math.h>intmain(){intprime(int); inti,natural[N]; printf("Data:"); for(i=0;i<N;i++)scanf("%d",&natural[i]); for(i=0;i<N;i++)if(
prime(natural[i]
)printf("%d",natural[i]); printf("\n");return0;}判斷素數(shù)函數(shù)素數(shù):函數(shù)值為1不是素數(shù):值為0數(shù)組元素作函數(shù)參數(shù)
6.5.2一維數(shù)組名作函數(shù)參數(shù)數(shù)組名的實質是數(shù)組的首地址。數(shù)組名作為函數(shù)參數(shù)時傳送的是數(shù)組的開始地址,是一種傳址調用。形參數(shù)組和實參數(shù)組要在各自的函數(shù)中進行等同的定義。例6-13
定義求一維數(shù)組最大元素值的函數(shù)v_max(),并在主函數(shù)中調用它求數(shù)組元素的最大值。
6.5.2一維數(shù)組名作函數(shù)參數(shù)#include<stdio.h>#defineN10intmain(){ intv_max(inta[N]); intdata[N],i; printf("Data:"); for(i=0;i<N;i++) scanf("%d",&data[i]); printf("Max=%d\n",v_max(data));return0;}intv_max(inta[N]){ inti; intmax=a[0]; for(i=1;i<N;i++) if(max<a[i]) max=a[i]; return(max);}v_max()函數(shù)調用開始時的數(shù)組狀態(tài)
6.5.2一維數(shù)組名作函數(shù)參數(shù)#include<stdio.h>#defineN10intmain(){
intv_max(int[],int);
intdata[50],i;printf("Data:");
for(i=0;i<N;i++)scanf("%d",&data[i]);printf("Max=%d\n",v_max(data,N));return0;}intv_max(inta[],intn){
inti;intmax=a[0];for(i=1;i<n;i++)if(max<a[i])max=a[i];
returnmax;}程序改進,注意數(shù)組參數(shù)的變化一維數(shù)組形參一維數(shù)組長度
6.5.2一維數(shù)組名作函數(shù)參數(shù)例6-14輸入一個字符串,統(tǒng)計其中數(shù)字字符的個數(shù),具體統(tǒng)計過程由用戶函數(shù)實現(xiàn)。i=0str[i]不是字符串結束標記數(shù)字字符count++(其值變?yōu)?)i=1str[i]不是字符串結束標記不是數(shù)字字符i=2str[i]不是字符串結束標記數(shù)字字符count++(其值變?yōu)?)i=3str[i]不是字符串結束標記不是數(shù)字字符i=4str[i]不是字符串結束標記不是數(shù)字字符i=5str[i]不是字符串結束標記數(shù)字字符i=6str[i]不是字符串結束標記數(shù)字字符count++(其值變?yōu)?)i=7str[i]不是字符串結束標記數(shù)字字符count++(其值變?yōu)?)i=8str[i]不是字符串結束標記不是數(shù)字字符i=9str[i]是字符串結束標記統(tǒng)計結束count值為41A2BD45E數(shù)組strstr[0]str[1]str[2]str[3]4tr[4]str[5]str[6]str[7]str[8]Str[9]\0演示
6.5.2一維數(shù)組名作函數(shù)參數(shù)#include<stdio.h>#defineN100intmain(void){ charstring[N]; intcount_s(char[]); gets(string); printf("Total:%d\n",count_s(string)); return0;}intcount_s(charstr[]){ inti,count; for(i=0,count=0;str[i]!='\0';i++)
if(str[i]>='0'&&str[i]<='9')count++; returncount;}程序實現(xiàn)例6-14字符統(tǒng)計函數(shù)字符數(shù)組作函數(shù)參數(shù)C語言程序設計(第3版)張磊編著高等教育出版社6.5.3二維數(shù)組與函數(shù)二維數(shù)組在內存中按行逐列存儲,各個數(shù)組元素依次占用連續(xù)的存儲單元,存儲后的狀態(tài)與一維數(shù)組是沒有區(qū)別的。因此,可以用一個對應的一維數(shù)組來處理二維數(shù)組。以2×3數(shù)組example為例說明二維數(shù)組與一維數(shù)組的關系⑴二維數(shù)組example可視為由example[0]和example[1]兩個元素構成的一維數(shù)組,而example[0]、example[1]又可視為分別存儲二維數(shù)組example各行元素的一維數(shù)組。⑵若把一維數(shù)組p映射到m×n的二維數(shù)組example的存儲空間,則二維數(shù)組元素和一維數(shù)組元素有如下對應關系:example[i][j]對應于p[i*n+j]C語言程序設計(第3版)張磊編著高等教育出版社6.5.3二維數(shù)組與函數(shù)example[0]→example[0][0]p[0]example[0][1]p[1]example[0][2]p[2]xample[1]→example[1][0]p[3]example[1][1]p[4]example[1][2]p[5]
6.5.3關于二維數(shù)組的函數(shù)設計例6-15
求下列3×4矩陣的所有元素的和。
6.5.3關于二維數(shù)組的函數(shù)設計#include<stdio.h>intmain(void){intsum_array(int[],int,int);intarr[3][4]={{16,27,8,-6},{-17,21,5,19},{66,9,58,86}};printf("Sum=%d\n",sum_array(arr[0],3,4));return0;}
intsum_array(inta[],intm,int
n){inti,s=0;for(i=0;i<m*n;i++)s+=a[i];return(s);}
6.6函數(shù)應用舉例“學生成績分等統(tǒng)計”函數(shù)化使用判斷素數(shù)函數(shù)求解哥德巴赫猜想式排序函數(shù)的設計與應用生成數(shù)字字符串
6.6函數(shù)應用舉例例6-16改寫第5章例5-14的“學生成績分等統(tǒng)計”程序,將判斷等級的過程改由用戶函數(shù)實現(xiàn)。問題分析flag()函數(shù)值01234對應等級優(yōu)秀良好中等及格不及格對應計數(shù)元素r[0]r[1]r[2]r[3]r[4]設計flag()函數(shù),其功能為按課程成績判定等級,其原型如下:intflag(intx,inty)其中,形參x、y代表課程成績。對應于5個等級,flag()函數(shù)有5種取值:
6.6函數(shù)應用舉例#include<stdio.h>#defineN6
intmain(void){intflag(int,int);ints1,s2,i;staticintr[5];for(i=0;i<N;i++){printf("Score:");scanf("%d,%d",&s1,&s2);
r[flag(s1,s2)]++;}for(i=0;i<5;i++)
printf("%d",r[i]);printf("\n");return0;}intflag(intx,inty){intave;ave=(x+y)/2;if(ave>=90)return0;elseif(ave>=80)return1;elseif(ave>=70)return2;elseif(ave>=60)return3;
elsereturn4;
}判斷等級函數(shù)函數(shù)值與等級元素下標一致9085r[1]++1
6.6函數(shù)應用舉例例6-17利用判斷素數(shù)的函數(shù)prime()求解哥德巴赫猜想式。分析與設計(1)判斷素數(shù)的函數(shù)prime(),函數(shù)原型
intprime(intn)若為素數(shù),則函數(shù)prime(n)為1,否則prime(n)為0。(2)對于任何偶數(shù)n(n≥6),可表示為n=i+(n-i),若prime(i)、prime(n-i)均為1,則該式子即為n的哥德巴赫猜想式。
6.6函數(shù)應用舉例#include<stdio.h>#include<math.h>intmain(void){ intprime(int);
inti,n; scanf("%d",&n); for(i=3;i<=n/2;i+=2)
if(prime(i)&&prime(n-i))
{printf("%d=%d+%d\n",n,i,n-i);break;}return0;}intprime(intn){ inti; for(i=2;i<=sqrt(n);i++) if(n%i==0)return0; return1;
}i與n-i都是素數(shù)時,輸出猜想式判斷素數(shù)函數(shù)素數(shù):函數(shù)值為1非素數(shù):函數(shù)值為0
6.6函數(shù)應用舉例例6-18
設計一個對一維數(shù)組排序的sort()函數(shù),并調用它實現(xiàn)數(shù)組排序。問題分析與算法設計⑴設計排序函數(shù)sort(),排序算法使用冒泡排序法。
sort()函數(shù)原型voidsort(inta[],intn)⑵設計input()實現(xiàn)數(shù)組輸入、設計output()實現(xiàn)數(shù)組輸出。函數(shù)原型:
voidinput(inta[],intn)
voidoutput(inta[],intn)⑶設計主函數(shù)mian(),在其中定義數(shù)組data。①調用input()函數(shù)建立data數(shù)組。②調用output()函數(shù)輸出data數(shù)組。③調用sort()函數(shù)對data數(shù)組排序。④調用output()函數(shù)輸出排序后的結果。排序的元素數(shù)排序數(shù)組voidoutput(inta[],intn){inti;for(i=0;i<n;i++)printf("%d",a[i]);printf("\n");}voidsort(inta[],intn){inti,j,temp;for(i=1;i<n;i++)for(j=0;j<n-i;j++)if(a[j]>a[j+1])
{temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}
6.6函數(shù)應用舉例#include<stdio.h>#defineN10voidsort(int[],int);voidinput(int[],int);voidoutput(int[],int);intmain(void){intdata[N];input(data,N);output(data,N);sort(data,N);output(data,N);return0;}voidinput(inta[],intn){inti;for(i=0;i<n;i++)scanf("%d",&a[i]);}排序函數(shù)輸出函數(shù)輸入函數(shù)被調用2次,結果有何不同?函數(shù)聲明
6.6函數(shù)應用舉例例6-19輸入一個字符串,將其中的數(shù)字字符按輸入順序存儲到digital數(shù)組中,然后輸出該數(shù)組中的數(shù)字字符串。要求:檢測并存儲數(shù)字字符串的過程通過用戶函數(shù)實現(xiàn)。。問題分析與算法設計⑴設計函數(shù)find(),函數(shù)原型:voidfind(charstr[],chardig[])其中,str代表源字符串數(shù)組,dig代表數(shù)字串數(shù)組。函數(shù)功能:將str中的數(shù)字字符逐個存儲到dig數(shù)組中。⑵在主函數(shù)中定義源數(shù)組string、定義目標數(shù)組digital,將源字符串存儲到string數(shù)組后,使用函數(shù)調用find(string,digital)即生成digital數(shù)組。⑶輸出digital數(shù)組中的字符串。voidfind(char
str[],char
dig[]){inti,j;for(i=0,j=0;str[i]!='\0';i++)if(str[i]>='0'&&str[i]<='9')
dig[j++]=str[i];
dig[j]='\0';}
6.6函數(shù)應用舉例#include<stdio.h>#include<string.h>#defineN100intmain(void){charstring[N],digital[N];voidfind(char[],char[]);gets(string);find(string,digital);printf("Targetstring:");puts(digital);return0;}生成數(shù)字字符串函數(shù)字符串源數(shù)組數(shù)字字符串數(shù)組
6.6函數(shù)應用舉例--生成數(shù)字字符串find()函數(shù)執(zhí)行過程j=0123456j=1j=5j=2j=3j=4j=6END!演示
6.7變量的作用域和存儲類型6.7.1變量的作用域
6.7.2變量的存儲類型
6.7.1變量的作用域變量作用域指的是變量在程序中的作用范圍局部變量全局變量外部變量
6.7.1變量的作用域1.局部變量在函數(shù)體內定義的變量稱為局部變量,也稱為內部變量。局部變量只能在定義它的函數(shù)中使用。例6-20
局部變量舉例#include<stdio.h>intmain(){ voidp_star50(void); inti; for(i=1;i<=20;i++) { p_star50(); putchar('\n'); } return0;}voidp_star50(void){ int
i; for(i=1;i<=50;i++) putchar('*'); return;}
6.7.1變量的作用域2.全局變量全局變量是在函數(shù)之外定義的變量。在任何一個函數(shù)之外的位置,都可以定義全局變量。在一個程序中,凡是在全局變量之后定義的函數(shù),都可以使用在其之前定義的全局變量。因此,一個全局變量,可以被多個函數(shù)使用,但并不一定能被所在程序中的每一個函數(shù)使用,全局變量也有一定的作用范圍。
6.7.1變量的作用域3.外部變量在一個文件中定義的全局變量,既可以由該文件的多個函數(shù)使用,也可以由其他文件的函數(shù)使用。在當前文件中使用其它文件里定義的全局變量時,該全局變量須在當前文件中聲明為外部變量。聲明外部變量的關鍵字為extern。
6.7.1變量的作用域例6-21
全局變量示例。源文件一:/*programmain_program.c*/#include<stdio.h>intcounter=0;intmain(void){
extern
voiddel(char[],char);charch,str[80];printf("輸入字符串:");gets(str);printf("刪除的字符:");scanf("%c",&ch);del(str,ch);printf("結果字符串:");puts(str);printf("刪除字符數(shù):%d\n",counter);return0;}源文件二:/*programdel_program.c*/#include<stdio.h>voiddel(charstr[80],charch){
externintcounter;inti,j;for(i=0,j=0;str[i]!='\0';i++)if(str[i]!=ch)str[j++]=str[i]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 全方位保安服務合同模板2025年
- 2025年體育中心使用租賃合同書
- 2025年合伙發(fā)展戰(zhàn)略投資合同
- 2025年協(xié)議離婚權益策劃保障
- 2025年重癥監(jiān)護臨床信息系統(tǒng)項目立項申請報告模稿
- 2025年個人融資合同策劃(含利息標準)
- 2025年產品質保跟蹤服務協(xié)議范本
- 2025年小型機床項目提案報告模范
- 2025年專利權使用許可合同示范文本
- 2025年機動車購買合同簡化版
- 氧化還原反應配平專項訓練
- 人教版英語高考試卷與參考答案(2024年)
- 河砂、碎石生產質量保證措施方案
- 全國教育科學規(guī)劃課題申報書:02.《鑄牢中華民族共同體意識的學校教育研究》
- 三位數(shù)除以兩位數(shù)過關練習口算題大全附答案
- 什么叫績效考勤管理制度
- 紅樓夢服飾文化
- 外墻噴漆施工合同協(xié)議書
- 軟件系統(tǒng)平臺項目實施方案
- 陜西延長石油集團礦業(yè)公司招聘筆試題庫2024
- 湖北省2024年村干部定向考試真題
評論
0/150
提交評論