亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 51.txt

?? 本人在網絡上整理的c語言學習的絕好
?? TXT
字號:

   
   
   
   51
函數
 C程序是由一組或是變量或是函數的外部對象組成的。 函數是一個自我包含的
完成一定相關功能的執行代碼段。我們可以把函數看成一個"黑盒子", 你只要將數
據送進去就能得到結果, 而函數內部究竟是如何工作的的, 外部程序是不知道的。
外部程序所知道的僅限于輸入給函數什么以及函數輸出什么。函數提供了編制程序
的手段, 使之容易讀、寫、理解、排除錯誤、修改和維護。
 C程序中函數的數目實際上是不限的, 如果說有什么限制的話,
那就是, 一個C
程序中必須至少有一個函數, 而且其中必須有一個并且僅有一個以main為名,
這個
函數稱為主函數, 整個程序從這個主函數開始執行。
 C 語言程序鼓勵和提倡人們把一個大問題劃分成一個個子問題,
對應于解決一
個子問題編制一個函數, 因此, C 語言程序一般是由大量的小函數而不是由少量大
函數構成的, 即所謂"小函數構成大程序"。這樣的好處是讓各部分相互充分獨立,
并且任務單一。因而這些充分獨立的小模塊也可以作為一種固定規格的小"構件",
用來構成新的大程序。
 C語言的一個主要特點是可以建立庫函數。Turbo C2.0提供的運行程序庫有400
多個函數, 每個函數都完成一定的功能, 可由用戶隨意調用。這些函數總的分為輸
入輸出函數、數學函數、字符串和內存函數、與BIOS和DOS有關的函數、 字符屏幕
和圖形功能函數、過程控制函數、目錄函數等。對這些庫函數應熟悉其功能,
只有
這樣才可省去很多不必要的工作。
 本教程后半部分專門介紹Turbo C2.0的庫函數, 并對每個函數都給出例程,
者可以將自已需要的部分以塊的方式定義, 然后將此塊寫入文件, 這樣就可以在進
入Turbo C2.0集成開發環境后, 直接調用此程序, 連接, 運行, 觀察結果, 以加深
對該函數的理解。
 用戶編制Turbo C語言源程序, 就是利用Turbo C的庫函數。可以把所有使用的
庫函數放在一個龐大的主函數里, 也可以按不同功能設計成一個個用戶函數而被其
它函數調用。Turbo C2.0建議用戶使用后者, 當用戶編制了一些較常用的函數時,
只要將其存在函數庫里, 在以后的編程中可被方便的調用而不需要再去編譯它們。
連接時將會自動從相應的庫中裝配成所需程序。
 1. 函數的說明與定義
 Turbo C2.0中所有函數與變量一樣在使用之前必須說明。所謂說明是指說明函
數是什么類型的函數, 一般庫函數的說明都包含在相應的頭文件<*.h>中,
例如標
準輸入輸出函數包含在stdio.h中, 非標準輸入輸出函數包含在io.h中,
以后在使
用庫函數時必須先知道該函數包含在什么樣的頭文件中, 在程序的開頭用#include
<*.h>或#include"*.h"說明。只有這樣程序在編譯, 連接時Turbo C 才知道它是提
供的庫函數, 否則, 將認為是用戶自己編寫的函數而不能裝配。
 1.1 函數說明
 1. 經典方式
 其形式為: 函數類型
函數名();
 2. ANSI 規定方式
 其形式為: 函數類型
函數名(數據類型 形式參數, 數據類型 形式
參數, ......);
 其中: 函數類型是該函數返回值的數據類型, 可以是以前介紹的整型(int),
長整型(long), 字符型(char), 單浮點型(float), 雙浮點型(double)以及無值型
(void), 也可以是指針, 包括結構指針。無值型表示函數沒有返回值。
 函數名為Turbo C2.0的標識符, 小括號中的內容為該函數的形式參數說明。可
以只有數據類型而沒有形式參數, 也可以兩者都有。對于經典的函數說明沒有參數
信息。如:
 int putlll(int x,int y,int z,int color,char
*p)/*說明一個整型函數*/
 char *name(void);
/*說明一個字符串指什函數*/
 void student(int n, char *str); /*說明一個不返回值的函數*/
 float calculate();
/*說明一個浮點型函數*/
 注意: 如果一個函數沒有說明就被調用, 編譯程序并不認為出錯,
而將此函數
默認為整型(int)函數。因此當一個函數返回其它類型, 又沒有事先說明,
編譯時
將會出錯。
 1.2 函數定義
 函數定義就是確定該函數完成什么功能以及怎么運行,
相當于其它語言的一個
子程序。Turbo C2.0對函數的定義采用ANSI規定的方式。即:
 函數類型 函數名(數據類型
形式參數; 數據類型 形式參數...)
 {
 函數體;
 }
 其中函數類型和形式參數的數據類型為Turbo C2.0的基本數據類型。函數體為
Turbo C2.0提供的庫函數和語句以及其它用戶自定義函數調用語句的組合, 并包括
在一對花括號"{"和"}"中。
 需要指出的是一個程序必須有一個主函數, 其它用戶定義的子函數可以是任意
多個, 這些函數的位置也沒有什么限制, 可以在main()函數前, 也可以在其后。
Turbo C2.0將所有函數都被認為是全局性的。而且是外部的, 即可以被另一個文件
中的任何一個函數調用。
 2 函數的調用
 2.1 函數的簡單調用
 Turbo C2.0調用函數時直接使用函數名和實參的方法,
也就是將要賦給被調用
函數的參量, 按該函數說明的參數形式傳遞過去, 然后進入子函數運行, 運行結束
后再按子函數規定的數據類型返回一個值給調用函數。使用Turbo C2.0的庫函數就
是函數簡單調用的方法。舉例說明如下:
 例1:
 #include<stdio.h>
 int maxmum(int x, int y, int z);
/*說明一個用戶自定義函數*/
 int main()
 {
 int i, j, k;
 printf("i, j,
k=?\n");
 scanf("%4d%4d%4d",
&i, &j, &k);
 maxmum(i, j,
k);
 getch();
 return 0;
 }
 maxmum(int x, int y, int z)
 {
 int max;
 max=x>y?x:y;
 max=max>z?max:z;
 printf("The
maxmum value of the 3 data is %d\n", max);
 }
 2.2 函數參數傳遞
 一、調用函數向被調用函數以形式參數傳遞
 用戶編寫的函數一般在對其說明和定義時就規定了形式參數類型,
因此調用這
些函數時參量必須與子函數中形式參數的數據類型、順序和數量完全相同, 否則在
調用中將會出錯, 得到意想不到的結果。
 注意:
 當數組作為形式參數向被調用函數傳遞時, 只傳遞數組的地址,
而不是將整個
數組元素都復制到函數中去, 即用數組名作為實參調用子函數, 調用時指向該數組
第一個元素的指針就被傳遞給子函數。因為在Turbo C2.0中, 沒有下標的數組名就
是一個指向該數組第一個元素的指針。當然數組變量的類型在兩個函數中必須相同。
 用下述方法傳遞數組形參。
 例2:
 #include<stdio.h>
 void disp(int *n);
 int main()
 {
 int m[10], i;
 for(i=0; i<10;
i++)
m[i]=i;
 disp(m);
/*按指針方式傳遞數組*/
 getch();
 return 0;
 }
 void disp(int *n)
 {
 int j;
 for(j=0; j<10;
j++)
printf("%3d", *(n++));
 printf("\n");
 }
 另外, 當傳遞數組的某個元素時, 數組元素作為實參,
此時按使用其它簡單變
量的方法使用數組元素。例2按傳遞數組元素的方法傳遞時變為:
 #include<stdio.h>
 void disp(int n);
 int main()
 {
 int m[10], i;
 for(i=0; i<10;
i++){
m[i]=i;
disp(m[i]); /*逐個傳遞數組元素*/
 }
 getch();
 return 0;
 }
 void disp(int n)
 {
 printf("%3d\t");
 }
這時一次只傳遞了數組的一個元素。
 二、被調用函數向調用函數返回值
 一般使用return語句由被調用函數向調用函數返回值, 該語句有下列用途:
 1. 它能立即從所在的函數中退出, 返回到調用它的程序中去。
 2. 返回一個值給調用它的函數。
 有兩種方法可以終止子函數運行并返回到調用它的函數中:
一是執行到函數的
最后一條語句后返回; 一是執行到語句return時返回。前者當子函數執行完后僅返
回給調用函數一個0。若要返回一個值, 就必須用return語句。只需在return
語句
中指定返回的值即可。例1返回最大值時變為:
 例3:
 #include<stdio.h>
 int maxmum(int x, int y, int z);
/*說明一個用戶自定義函數*/
 int main()
 {
 int i, j, k,
max;
 printf("i, j,
k=?\n");
 scanf("%4d%4d%4d",
&i, &j, &k);
 max=maxmum(i,
j, k); /*調用子函數, 并將返回值賦給max*/
 printf("The
maxmum value is %d\n", max);
 getch();
 return 0;
 }
 maxmum(int x, int y, int z)
 {
 int max;
 max=x>y?x:y;
/*求最大值*/
 max=max>z?max:z;
 return(max);
/*返回最大值*/
 }
 return語句可以向調用函數返回值, 但這種方法只能返回一個參數,
在許多情
況下要返回多個參數, 這是用return語句就不能滿足要求。Turob C2.0提供了另一
種參數傳遞的方法, 就是調用函數向被調用函數傳遞的形式參數不是傳遞變量本身,
而是傳遞變量的地址, 當子函數中向相應的地址寫入不同的數值之后, 也就改變了
調用函數中相應變量的值, 從而達到了返回多個變量的目的。
 例4:
 #include<stdio.h>
 void subfun(int *m, int *n); /*說明子函數*/
 int main()
 {
 int i, j;
 printf("i, j=?\n");
 scanf("%d, %d",
&i, &j); /*從鍵盤輸入2個整數*/
 printf("In main
before calling\n"/*輸出此2數及其乘積*/
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
 subfun(&i,
&j); /*以傳送地址的方式調用子函數*/
 printf("In main
after calling\n"/*調用子函數后輸出變量值*/
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
 getch();
 return 0;
 }
 void subfun(int *m, int *n)
 {
 *m=*m+2;
 *j=*i-*j;
 printf("In subfun
after calling\n" /*子函數中輸出變量值*/
"i=%-4d j=%-4d i*j=%-4d\n", *i, *j, *i**j);
 }
 上例中, *i**j表示指針i和j所指的兩個整型數*i和*j之乘積。
 另外, return語句也可以返回一個指針, 舉例如下。
 下例中先等待輸入一字符串, 再等待輸入要查找的字符,
然后調用match() 函
數在字符串中查找該字符。若有相同字符, 則返回一個指向該字符串中這一位置的
指針, 如果沒有找到, 則返回一個空(NULL)指針。
 例5:
 #include<stdio.h>
 char *match(char c, char *s);
 int main()
 {
 char s[40],
c, *str;
 str=malloc(40);
/*為字符串指什分配內存空間*/
 printf("Please
input character string:");
 gets(s);
/*鍵盤輸入字符串*/
 printf("Please
input one character:");
 c=getche();
/*鍵盤輸入字符*/
 str=match(c,
s); /*調用子函數*/
 putchar('\n');
 puts(str);
/*輸出子函數返回的指針所指的字符串*/
 getch();
 return 0;
 }
 char *match(char c, char *s)
 {
 int i=0;
 while(c!=s[i]&&s[i]!='\n')/*找字符串中指定的字符*/
i++;
 return(&s[i]);
/*返回所找字符的地址*/
 }
 三、用全程變量實現參數互傳
 以上兩種辦法可以在調用函數和被調用函數間傳遞參數,
但使用不太方便。如
果將所要傳遞的參數定義為全程變量, 可使變量在整個程序中對所有函數都可見。
這樣相當于在調用函數和被調用函數之間實現了參數的傳遞和返回。這也是實際中
經常使用的方法, 但定義全程變量勢必長久地占用了內存。因此, 全程變量的數目
受到限制, 特別對于較大的數組更是如此。當然對于絕大多數程序內存都是夠用的。
 例6:
 #incluide<stdio.h>
 void disp(void);
 int m[10];
/*定義全程變量*/
 int main()
 {
 int i;
 printf("In main
before calling\n");
 for(i=0; i<10;
i++){
m[i]=i;
printf("%3d", m[i]); /*輸出調用子函數前數組的值*/
 }
 disp();
/*調用子函數*/
 printf("\nIn
main after calling\n");
 for(i=0; i<10;
i++)
printf("%3d", m[i]); /*輸出調用子函數后數組的值*/
 getch();
 return 0;
 }
 void disp(void)
 {
 int j;
 printf("In subfunc
after calling\n");/*子函數中輸出數組的值*/
 for (j=0; i<10;
j++){
m[j]=m[j]*10;
printf("%3d", m[i]);
 }
 }
 2.3 函數的遞歸調用
 Turbo C2.0允許函數自己調用自己, 即函數的遞歸調用,
遞歸調用可以使程序
簡潔、代碼緊湊, 但要犧牲內存空間作處理時的堆棧。
 如要求一個n!(n的階乘)的值可用下面遞歸調用:
 例8:
 #include<stdio.h>
 unsigned ling mul(int n);
 int main()
 {
 int m;
 puts("Calculate
n! n=?\n");
 scanf("%d",
&m); /*鍵盤輸入數據*/
 printf("%d!=%ld\n",
m, mul(m));/*調用子程序計算并輸出*/
 getch();
 retun 0;
 }
 unsigned long mul(int n)
 {
 unsigned long
p;
 if(n>1)
p=n*mul(n-1); /*遞歸調用計算n!*/
 else
p=1L;
 return(p);
/*返回結果*/
 }
運行結果:
 calculate n!
n=?
輸入5時結果為:
 5!=120
 3. 函數作用范圍
 Turbo C2.0中每個函數都是獨立的代碼塊, 函數代碼歸該函數所有,
除了對函
數的調用以外, 其它任何函數中的任何語句都不能訪問它。例如使用跳轉語句goto
就不能從一個函數跳進其它函數內部。除非使用全程變量, 否則一個函數內部定義
的程序代碼和數據, 不會與另一個函數內的程序代碼和數據相互影響。
 Turbo C2.0中所有函數的作用域都處于同一嵌套程度,
即不能在一個函數內再
說明或定義另一個函數。
 Turbo C2.0中一個函數對其它子函數的調用是全程的,
即是函數在不同的文件
中, 也不必附加任何說明語句而被另一函數調用, 也就是說一個函數對于整個程序
都是可見的。
 4. 函數的變量作用域
 在Turbo C2.0中, 變是可以在各個層次的子程序中加以說明,
也就是說, 在任
何函數中, 變量說明有只允許在一個函數體的開頭處說明, 而且允許變量的說明(
包括初始化)跟在一個復合語句的左花括號的后面, 直到配對的右花括號為止。
的作用域僅在這對花括號內, 當程序執行到出花括號時, 它將不復存在。當然,
層中的變量即使與外層中的變量名字相同, 它們之間也是沒有關系的。
 例9.
 #include<stdio.h>
 int i=10;
 int main()
 {
 int i=1;
 printf("%d\t,
i);
 {
int i=2;
pritnf("%d\t", i);
{
extern i;
i+=1;
printf("%d\t", i);
}
printf("%d\t", ++i);
 }
 printf("%d\n",
++i);
 return 0;
 }
運行結果為
 1 2 11
3 2
從程序運行的結果不難看出程序中各變量之間的關系, 以及各個變量的作用域。
返回目錄
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

成人毛片老司机大片| 天天色图综合网| 久久久久高清精品| 欧美日韩1区2区| 欧美日本免费一区二区三区| 日本黄色一区二区| 欧美日韩一区三区四区| 欧美日韩三级一区二区| 欧美日韩国产综合一区二区三区 | 亚洲国产成人av网| 午夜日韩在线观看| 免费观看日韩电影| 国产麻豆成人精品| 成av人片一区二区| 91福利国产精品| 91麻豆精品国产综合久久久久久| 8x福利精品第一导航| 精品国产乱码久久久久久牛牛| 亚洲精品一区二区三区99| 久久精品一区二区三区不卡| 国产精品国产三级国产普通话三级| 国产精品成人一区二区艾草| 国产精品美女久久久久久久| 一区二区三区中文字幕电影| 视频一区二区三区在线| 捆绑紧缚一区二区三区视频| 国产精品一区二区三区99| av动漫一区二区| 欧美日韩免费在线视频| 精品捆绑美女sm三区| 欧美国产日韩精品免费观看| 亚洲国产一区二区三区青草影视| 久久99在线观看| 91丨porny丨在线| 精品裸体舞一区二区三区| 自拍偷拍亚洲综合| 激情六月婷婷综合| 在线观看国产91| 国产日本欧洲亚洲| 水蜜桃久久夜色精品一区的特点 | 国产亚洲欧洲997久久综合| 日韩理论片在线| 久久疯狂做爰流白浆xx| 一本大道久久精品懂色aⅴ| 日韩免费视频一区二区| 一区二区在线观看视频在线观看| 美腿丝袜亚洲色图| 欧美最猛性xxxxx直播| 国产午夜亚洲精品羞羞网站| 天天色图综合网| 一本色道久久综合亚洲91| 久久影音资源网| 日韩av一二三| 欧美日韩美少妇| 亚洲欧美韩国综合色| 国产精品一二三四区| 日韩精品一区二区三区在线观看| 一区二区三区蜜桃网| 波多野结衣中文字幕一区| 久久久久久久久久久久久女国产乱 | 久久久久久久综合狠狠综合| 天使萌一区二区三区免费观看| 91在线视频播放地址| 中文字幕av一区二区三区| 国产在线视频不卡二| 欧美一级生活片| 亚洲成人综合网站| 欧美亚洲图片小说| 亚洲色图视频免费播放| 暴力调教一区二区三区| 国产精品入口麻豆九色| 国产成人精品亚洲日本在线桃色| 日韩免费一区二区| 久久99精品网久久| 久久久久国产精品麻豆ai换脸| 久久国产麻豆精品| 精品成人a区在线观看| 精品一区精品二区高清| 久久综合久色欧美综合狠狠| 久久aⅴ国产欧美74aaa| 久久午夜免费电影| 国产成人免费av在线| 国产精品美女久久久久aⅴ| 成人avav影音| 亚洲一区二区三区小说| 精品视频在线视频| 日韩不卡一区二区| 精品国产制服丝袜高跟| 国产成人综合在线观看| 亚洲欧洲日韩女同| 欧美日韩国产另类一区| 日韩av在线播放中文字幕| 精品成人a区在线观看| 国产成人啪午夜精品网站男同| 亚洲视频每日更新| 欧美伦理电影网| 韩国毛片一区二区三区| 中文字幕中文字幕在线一区 | 美腿丝袜亚洲色图| 亚洲国产精品99久久久久久久久| 成人黄色一级视频| 亚洲综合男人的天堂| 欧美一区二区美女| 不卡的电影网站| 偷拍日韩校园综合在线| 久久久久国产精品免费免费搜索| av一区二区不卡| 日韩中文字幕麻豆| 欧美激情艳妇裸体舞| 欧美性色综合网| 久久成人精品无人区| 日韩美女视频一区| 欧美一区二区三区视频免费播放| 国产成人精品1024| 日本亚洲天堂网| 中文字幕在线一区二区三区| 欧美另类久久久品| 国产精品996| 日韩精品成人一区二区三区 | 日韩美女一区二区三区| 99re热这里只有精品免费视频| 日本成人在线视频网站| 日韩一区中文字幕| 精品国产成人在线影院| 欧美视频一区在线| 99视频有精品| 国产成人aaaa| 精品一区二区三区香蕉蜜桃 | 日韩欧美一区中文| 欧美三级欧美一级| www.亚洲国产| 国产福利一区二区三区| 美女性感视频久久| 亚洲第一激情av| 亚洲美女一区二区三区| 国产欧美在线观看一区| 日韩视频一区二区| 欧美揉bbbbb揉bbbbb| 色素色在线综合| 色偷偷一区二区三区| 波多野结衣在线一区| 国产电影一区二区三区| 国产一区二区三区不卡在线观看| 婷婷成人激情在线网| 亚洲成人免费在线观看| 亚洲激情成人在线| 洋洋成人永久网站入口| 亚洲日本成人在线观看| 18涩涩午夜精品.www| 国产精品国产三级国产aⅴ中文| 国产日韩视频一区二区三区| 久久一夜天堂av一区二区三区| 精品欧美一区二区三区精品久久| 欧美一区二区三区免费视频| 欧美日韩一区二区三区在线看 | 日韩精品电影在线观看| 图片区小说区区亚洲影院| 午夜欧美电影在线观看| 天天综合色天天| 免费精品视频在线| 国内成+人亚洲+欧美+综合在线 | 一区二区三区精品在线| 亚洲国产成人porn| 日韩1区2区3区| 精品夜夜嗨av一区二区三区| 国内外精品视频| 国产在线麻豆精品观看| 国产传媒欧美日韩成人| 9i看片成人免费高清| 欧美在线视频你懂得| 91精品国产91久久久久久最新毛片| 91麻豆精品国产91久久久资源速度| 91麻豆精品国产综合久久久久久| 精品区一区二区| 国产精品电影一区二区| 亚洲午夜电影在线| 捆绑紧缚一区二区三区视频| 国产精品18久久久久久vr| 99久久婷婷国产综合精品电影| 欧美在线不卡视频| 欧美一区国产二区| 国产色91在线| 亚洲日本丝袜连裤袜办公室| 亚洲第一主播视频| 国产高清无密码一区二区三区| 色综合久久久久综合体| 欧美一区二区三区播放老司机| 国产香蕉久久精品综合网| 亚洲欧美另类在线| 麻豆精品一区二区av白丝在线 | 日韩美女视频一区| 久久机这里只有精品| 成人免费观看av| 欧美一区二区久久久| 国产精品久99| 狠狠色丁香久久婷婷综合丁香| 色婷婷香蕉在线一区二区| 久久综合999| 日韩影院精彩在线| 91久久免费观看|