⑴ 在c語言中定義的函數有什麼作用
函數的作用就相當於一台機器,這種機器的作用各不相同。不同的函數能完成不同的特定的功能。就像你放玉米進去,它出來的是爆米花一樣。它就對玉米進行處理了。而c語言的函數就是你放入數據,它就會對數據進行處理。
數組的作用就是存儲數據的作用。是存儲數據的類型的一種。計算機處理的就是數據。存儲數據,你說重要不?就像電腦沒有內存,它怎麼運行啊?
上面是通俗的介紹,補充幾點:
1:函數是很重要的,沒有函數c語言程序無法運行,包括大多數語言都是這樣,因為必須要有一個主函數(main)。
2:函數可以把不同功能的代碼獨立到一個地方,減少耦合性,提高代碼可重用性,增強程序的安全性。
3:不同類型的函數有不同的功能,按照不同分類有不同的叫法。比如庫函數是系統自帶的「庫」,回調函數用於處理操作系統的問題,API函數叫做應用程序介面函數。
加油,越學越明白。
⑵ C語言函數有什麼作用啊
函數是C源碼程序中最基本的功能單位,是一個可以從程序其它地方調用執行的語句塊
C語言是一種結構化程序設計語言,結構化程序設計思想是「分解」大問題,依次解決小問題,通過小問題解決實現大問題的解決,描述「小問題」解決方法的工具即是函數。
函數的定義格式如下:
type name ( argument1, argument2, ...) statement說明:
type
是函數返回的數據的類型
name
是函數被調用時使用的名
argument
是函數調用需要傳入的參量(可以聲明任意多個參量)。每個參量(argument)由一個數據類型後面跟一個標識名稱組成,就像變數聲明中一樣(例如,int
x)。參量僅在函數范圍內有效,可以和函數中的其它變數一樣使用,
它們使得函數在被調用時可以傳入參數,不同的參數用逗號(comma)隔開.
statement
是函數的內容。它可以是一句指令,也可以是一組指令組成的語句塊。如果是一組指令,則語句塊必須用花括弧{}括起來,這也是我們最常見到情況。其實為了使程序的格式更加統一清晰,建議在僅有一條指令的時候也使用花括弧,這是一個良好的編程習慣。
⑶ C 語言中函數有什麼用處
第五題:
局部變數也稱為內部變數。局部變數是在函數內作定義說明的。其作用域僅限於函數內, 離開該函數後再使用這種變數是非法的。
例如:
int f1(int a) /*函數f1*/
{
int b,c;
……
}a,b,c作用域
int f2(int x) /*函數f2*/
{
int y,z;
}x,y,z作用域
main()
{
int m,n;
}
m,n作用域 在函數f1內定義了三個變數,a為形參,b,c為一般變數。在 f1的范圍內a,b,c有效,或者說a,b,c變數的作用域限於f1內。同理,x,y,z的作用域限於f2內。 m,n的作用域限於main函數內。關於局部變數的作用域還要說明以下幾點:
1. 主函數中定義的變數也只能在主函數中使用,不能在其它函數中使用。同時,主函數中也不能使用其它函數中定義的變數。因為主函數也是一個函數,它與其它函數是平行關系。這一點是與其它語言不同的,應予以注意。
2. 形參變數是屬於被調函數的局部變數,實參變數是屬於主調函數的局部變數。
3. 允許在不同的函數中使用相同的變數名,它們代表不同的對象,分配不同的單元,互不幹擾,也不會發生混淆。如在例5.3 中,形參和實參的變數名都為n,是完全允許的。4. 在復合語句中也可定義變數,其作用域只在復合語句范圍內。例如:
main()
{
int s,a;
……
{
int b;
s=a+b;
……b作用域
}
……s,a作用域
}[例5.11]main()
{
int i=2,j=3,k;
k=i+j;
{
int k=8;
if(i==3) printf("%d\n",k);
}
printf("%d\n%d\n",i,k);
}
main()
{
int i=2,j=3,k;
k=i+j;
{
int k=8;
if(i=3) printf("%d\n",k);
}
printf("%d\n%d\n",i,k);
}
本程序在main中定義了i,j,k三個變數,其中k未賦初值。 而在復合語句內又定義了一個變數k,並賦初值為8。應該注意這兩個k不是同一個變數。在復合語句外由main定義的k起作用,而在復合語句內則由在復合語句內定義的k起作用。因此程序第4行的k為main所定義,其值應為5。第7行輸出k值,該行在復合語句內,由復合語句內定義的k起作用,其初值為8,故輸出值為8,第9行輸出i,k值。i是在整個程序中有效的,第7行對i賦值為3,故以輸出也為3。而第9行已在復合語句之外,輸出的k應為main所定義的k,此k值由第4 行已獲得為5,故輸出也為5。
全局變數也稱為外部變數,它是在函數外部定義的變數。 它不屬於哪一個函數,它屬於一個源程序文件。其作用域是整個源程序。在函數中使用全局變數,一般應作全局變數說明。 只有在函數內經過說明的全局變數才能使用。全局變數的說明符為extern。 但在一個函數之前定義的全局變數,在該函數內使用可不再加以說明。 例如:
int a,b; /*外部變數*/
void f1() /*函數f1*/
{
……
}
float x,y; /*外部變數*/
int fz() /*函數fz*/
{
……
}
main() /*主函數*/
{
……
}/*全局變數x,y作用域 全局變數a,b作用域*/
從上例可以看出a、b、x、y 都是在函數外部定義的外部變數,都是全局變數。但x,y 定義在函數f1之後,而在f1內又無對x,y的說明,所以它們在f1內無效。 a,b定義在源程序最前面,因此在f1,f2及main內不加說明也可使用。
[例5.12]輸入正方體的長寬高l,w,h。求體積及三個面x*y,x*z,y*z的面積。
int s1,s2,s3;
int vs( int a,int b,int c)
{
int v;
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
return v;
}
main()
{
int v,l,w,h;
printf("\ninput length,width and height\n");
scanf("%d%d%d",&l,&w,&h);
v=vs(l,w,h);
printf("v=%d s1=%d s2=%d s3=%d\n",v,s1,s2,s3);
}
本程序中定義了三個外部變數s1,s2,s3, 用來存放三個面積,其作用域為整個程序。函數vs用來求正方體體積和三個面積, 函數的返回值為體積v。由主函數完成長寬高的輸入及結果輸出。由於C語言規定函數返回值只有一個, 當需要增加函數的返回數據時,用外部變數是一種很好的方式。本例中,如不使用外部變數, 在主函數中就不可能取得v,s1,s2,s3四個值。而採用了外部變數, 在函數vs中求得的s1,s2,s3值在main 中仍然有效。因此外部變數是實現函數之間數據通訊的有效手段。對於全局變數還有以下幾點說明:
1. 對於局部變數的定義和說明,可以不加區分。而對於外部變數則不然,外部變數的定義和外部變數的說明並不是一回事。外部變數定義必須在所有的函數之外,且只能定義一次。其一般形式為: [extern] 類型說明符 變數名,變數名… 其中方括弧內的extern可以省去不寫。
例如: int a,b;
等效於:
extern int a,b;
而外部變數說明出現在要使用該外部變數的各個函數內, 在整個程序內,可能出現多次,外部變數說明的一般形式為: extern 類型說明符 變數名,變數名,…; 外部變數在定義時就已分配了內存單元, 外部變數定義可作初始賦值,外部變數說明不能再賦初始值, 只是表明在函數內要使用某外部變數。
2. 外部變數可加強函數模塊之間的數據聯系, 但是又使函數要依賴這些變數,因而使得函數的獨立性降低。從模塊化程序設計的觀點來看這是不利的, 因此在不必要時盡量不要使用全局變數。
3. 在同一源文件中,允許全局變數和局部變數同名。在局部變數的作用域內,全局變數不起作用。
[例5.13]
int vs(int l,int w)
{
extern int h;
int v;
v=l*w*h;
return v;
}
main()
{
extern int w,h;
int l=5;
printf("v=%d",vs(l,w));
}
int l=3,w=4,h=5;
本常式序中,外部變數在最後定義, 因此在前面函數中對要用的外部變數必須進行說明。外部變數l,w和vs函數的形參l,w同名。外部變數都作了初始賦值,mian函數中也對l作了初始化賦值。執行程序時,在printf語句中調用vs函數,實參l的值應為main中定義的l值,等於5,外部變數l在main內不起作用;實參w的值為外部變數w的值為4,進入vs後這兩個值傳送給形參l,wvs函數中使用的h 為外部變數,其值為5,因此v的計算結果為100,返回主函數後輸出。變數的存儲類型各種變數的作用域不同, 就其本質來說是因變數的存儲類型相同。
第四題:
程序調用自身的編程技巧稱為遞歸( recursion)。
一個過程或函數在其定義或說明中又直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。
注意:
(1) 遞歸就是在過程或函數里調用自身;
(2) 在使用遞增歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
第三題:
函數調用運行 EGL 生成的函數或系統函數。當被調用函數結束時,將繼續處理調用之後的語句,或者繼續處理(在復雜情況下)表達式或自變數列表中所需的下一進程。
⑷ c程序語言中,為何要調用函數函數的作用是什麼
不是C語言中要調用函數,是任何語言都要做的.
函數是對問題描述的最基本的分解方式,最簡單的它可以使問題逐層簡化,使工作可以分工協作.
的確某些非常簡單的操作是沒必要再細化成函數,但並不是說該編譯系統就只處理非常簡單的操作,它還考慮到更復雜情況,所以加上強制使用函數方式編程也是合情合理的。
⑸ C語言中各種函數的具體作用,要詳細點的
字元處理函數
本類別函數用於對單個字元進行處理,包括字元的類別測試和字元的大小寫轉換
頭文件 ctype.h
函數列表<>
函數類別 函數用途 詳細說明
字元測試 是否字母和數字 isalnum
是否字母 isalpha
是否控制字元 iscntrl
是否數字 isdigit
是否可顯示字元(除空格外) isgraph
是否可顯示字元(包括空格) isprint
是否既不是空格,又不是字母和數字的可顯示字元 ispunct
是否空格 isspace
是否大寫字母 isupper
是否16進制數字(0-9,A-F)字元 isxdigit
字元大小寫轉換函數 轉換為大寫字母 toupper
轉換為小寫字母 tolower
地區化
本類別的函數用於處理不同國家的語言差異。
頭文件 local.h
函數列表
函數類別 函數用途 詳細說明
地區控制 地區設置 setlocale
數字格式約定查詢 國家的貨幣、日期、時間等的格式轉換 localeconv
數學函數
本分類給出了各種數學計算函數,必須提醒的是ANSI C標准中的數據格式並不符合IEEE754標准,一些C語言編譯器卻遵循IEEE754(例如frinklin C51)
頭文件 math.h
函數列表
函數類別 函數用途 詳細說明
錯誤條件處理 定義域錯誤(函數的輸入參數值不在規定的范圍內)
值域錯誤(函數的返回值不在規定的范圍內)
三角函數 反餘弦 acos
反正弦 asin
反正切 atan
反正切2 atan2
餘弦 cos
正弦 sin
正切 tan
雙曲函數 雙曲餘弦 cosh
雙曲正弦 sinh
雙曲正切 tanh
指數和對數 指數函數 exp
指數分解函數 frexp
乘積指數函數 fdexp
自然對數 log
以10為底的對數 log10
浮點數分解函數 modf
冪函數 冪函數 pow
平方根函數 sqrt
整數截斷,絕對值和求余數函數 求下限接近整數 ceil
絕對值 fabs
求上限接近整數 floor
求余數 fmod
本分類函數用於實現在不同底函數之間直接跳轉代碼。 頭文件 setjmp.h io.h
函數列表
函數類別 函數用途 詳細說明
保存調用環境 setjmp
恢復調用環境 longjmp
信號處理
該分類函數用於處理那些在程序執行過程中發生例外的情況。
頭文件 signal.h
函數列表
函數類別 函數用途 詳細說明
指定信號處理函數 signal
發送信號 raise
可變參數處理
本類函數用於實現諸如printf,scanf等參數數量可變底函數。
頭文件 stdarg.h
函數列表
函數類別 函數用途 詳細說明
可變參數訪問宏 可變參數開始宏 va_start
可變參數結束宏 va_end
可變參數訪問宏 訪問下一個可變參數宏 va_arg
輸入輸出函數
該分類用於處理包括文件、控制台等各種輸入輸出設備,各種函數以「流」的方式實現
頭文件 stdio.h
函數列表
函數類別 函數用途 詳細說明
文件操作
刪除文件 remove
修改文件名稱 rename
生成臨時文件名稱 tmpfile
得到臨時文件路徑 tmpnam
文件訪問 關閉文件 fclose
刷新緩沖區 fflush
打開文件 fopen
將已存在的流指針和新文件連接 freopen
設置磁碟緩沖區 setbuf
設置磁碟緩沖區 setvbuf
格式化輸入與輸出函數 格式輸出 fprintf
格式輸入 fscanf
格式輸出(控制台) printf
格式輸入(控制台) scanf
格式輸出到緩沖區 sprintf
從緩沖區中按格式輸入 sscanf
格式化輸出 vfprintf
格式化輸出 vprintf
格式化輸出 vsprintf
字元輸入輸出函數 輸入一個字元 fgetc
字元串輸入 fgets
字元輸出 fputc
字元串輸出 fputs
字元輸入(控制台) getc
字元輸入(控制台) getchar
字元串輸入(控制台) gets
字元輸出(控制台) putc
字元輸出(控制台) putchar
字元串輸出(控制台) puts
字元輸出到流的頭部 ungetc
直接輸入輸出 直接流讀操作 fread
直接流寫操作 fwrite
文件定位函數 得到文件位置 fgetpos
文件位置移動 fseek
文件位置設置 fsetpos
得到文件位置 ftell
文件位置復零位 remind
錯誤處理函數 錯誤清除 clearerr
文件結尾判斷 feof
文件錯誤檢測 ferror
得到錯誤提示字元串 perror
實用工具函數
本分類給出了一些函數無法按以上分類,但又是編程所必須要的。
頭文件 stdlib.h
函數列表
函數類別 函數用途 詳細說明
字元串轉換函數 字元串轉換為整數 atoi
字元串轉換為長整數 atol
字元串轉換為浮點數 strtod
字元串轉換為長整數 strtol
字元串轉換為無符號長整型 strtoul
偽隨機序列產生函數 產生隨機數 rand
設置隨機函數的起動數值 srand
存儲管理函數 分配存儲器 calloc
釋放存儲器 free
存儲器分配 malloc
重新分配存儲器 realloc
環境通信 中止程序 abort
退出程序執行,並清除環境變數 atexit
退出程序執行 exit
讀取環境參數 getenv
程序掛起,臨時執行一個其他程序 system
搜索和排序工具 二分查找(數據必須已排序) bsearch
快速排序 qsort
整數運算函數 求絕對值 abs
div
得到除法運算底商和余數
求長整形底絕對值 labs
求長整形除法的商和余數 ldiv
多位元組字元函數 得到多位元組字元的位元組數 mblen
得到多位元組字元的位元組數 mbtowc
多位元組字元轉換 wctomb
多位元組字元的字元串操作 將多位元組串轉換為整數數組 mbstowcs
將多位元組串轉換為字元數組 mcstowbs
字元串處理
本分類的函數用於對字元串進行合並、比較等操作
頭文件 string.h
函數列表
函數類別 函數用途 詳細說明
字元串拷貝 塊拷貝(目的和源存儲區不可重疊) memcpy
塊拷貝(目的和源存儲區可重疊) memmove
串拷貝 strcpy
按長度的串拷貝 strncpy
字元串連接函數 串連接 strcat
按長度連接字元串 strncat
串比較函數 塊比較 memcmp
字元串比較 strcmp
字元串比較(用於非英文字元) strcoll
按長度對字元串比較 strncmp
字元串轉換 strxfrm
字元與字元串查找 字元查找 memchr
字元查找 strchr
字元串查找 strcspn
字元串查找 strpbrk
字元串查找 strspn
字元串查找 strstr
字元串分解 strtok
雜類函數 字元串設置 memset
錯誤字元串映射 strerror
求字元串長度 strlen
日期和時間函數
本類別給出時間和日期處理函數
頭文件 time.h
函數列表
函數類別 函數用途 詳細說明
時間操作函數 得到處理器時間 clock
得到時間差 difftime
設置時間 mktime
得到時間 time
時間轉換函數 得到以ASCII碼表示的時間 asctime
得到字元串表示的時間 ctime
得到指定格式的時間 strftime
函數庫未來的發展方向
本部分用於說明各類別函數庫在將來如何發展。
序號 庫類別 頭文件 詳細說明
1 錯誤處理 errno.h
2 字元處理 ctype.h
3 地區化 local.h
4 數學函數 math.h
5 信號處理 signal.h
6 輸入輸出 stdio.h
7 實用工具程序 stdlib.h
8 字元串處理 string.h
⑹ C語言函數有什麼作用啊
函數的作用就相當於一台機器,這種機器的作用各不相同。不同的函數能完成不同的特定的功能。就像你放玉米進去,它出來的是爆米花一樣。它就對玉米進行處理了。而c語言的函數就是你放入數據,它就會對數據進行處理。
數組的作用就是存儲數據的作用。是存儲數據的類型的一種。計算機處理的就是數據。存儲數據,你說重要不?就像電腦沒有內存,它怎麼運行啊?
⑺ C語言中聲明函數有什麼用 為什麼有的代碼不用聲明函數就能直接使用
代碼的運行是自上到下的。如果你的函數在被調用的地方的上面。那麼你就可以不需要聲明。反之,如果你的函數在調用處的下面。那麼你必須要聲明,不然你的程序沒法調用函數
⑻ 你們能不能給我通俗地解釋一下在C語言中函數是什麼有什麼作用
C源程序是由函數組成的。
C程序是由一組或是變數或是函數的外部對象組的。 函數是一個自我包含的完成一定相關功能的執行代碼段。
從函數定義的角度看,函數可分為庫函數和用戶定義函數兩種。
1)庫函數
由C系統提供,用戶無須定義, 也不必在程序中作類型說明,只需在程序前包含有該函數原型的頭文件即可在程序中直接調用。在前面各章的例題中反復用到printf 、 scanf 、 getchar 、putchar、gets、puts、strcat等函數均屬此類。
(2)用戶定義函數
由用戶按需要寫的函數。對於用戶自定義函數, 不僅要在程序中定義函數本身, 而且在主調函數模塊中還必須對該被調函數進行類型說明,然後才能使用。
2. C語言的函數兼有其它語言中的函數和過程兩種功能,從這個角度看,又可把函數分為有返回值函數和無返回值函數兩種。
(1)有返回值函數
此類函數被調用執行完後將向調用者返回一個執行結果, 稱為函數返回值。如數學函數即屬於此類函數。 由用戶定義的這種要返回函數值的函數,必須在函數定義和函數說明中明確返回值的類型。
(2)無返回值函數
此類函數用於完成某項特定的處理任務, 執行完成後不向調用者返回函數值。這類函數類似於其它語言的過程。 由於函數無須返回值,用戶在定義此類函數時可指定它的返回為「空類型」, 空類型的說明符為「void」。
3. 從主調函數和被調函數之間數據傳送的角度看又可分為無參函數和有參函數兩種。
(1)無參函數
函數定義、函數說明及函數調用中均不帶參數。 主調函數和被調函數之間不進行參數傳送。 此類函數通常用來完成一組指定的功能,可以返回或不返回函數值。
(2)有參函數
也稱為帶參函數。在函數定義及函數說明時都有參數, 稱為形式參數(簡稱為形參)。在函數調用時也必須給出參數, 稱為實際參數(簡稱為實參)。 進行函數調用時,主調函數將把實參的值傳送給形參,供被調函數使用。
4. C語言提供了極為豐富的庫函數, 這些庫函數又可從功能角度作以下分類。
(1)字元類型分類函數
用於對字元按ASCII碼分類:字母,數字,控制字元,分隔符,大小寫字母等。
(2)轉換函數
用於字元或字元串的轉換;在字元量和各類數字量 (整型, 實型等)之間進行轉換;在大、小寫之間進行轉換。
(3)目錄路徑函數
用於文件目錄和路徑操作。
(4)診斷函數
用於內部錯誤檢測。
(5)圖形函數
用於屏幕管理和各種圖形功能。
(6)輸入輸出函數
用於完成輸入輸出功能。
(7)介面函數
用於與DOS,BIOS和硬體的介面。
(8)字元串函數
用於字元串操作和處理。
(9)內存管理函數
用於內存管理。
(10)數學函數
用於數學函數計算。
(11)日期和時間函數
用於日期,時間轉換操作。
(12)進程式控制制函數
用於進程管理和控制。
(13)其它函數
用於其它各種功能。
函數可以避免重復的書寫。比如一個運算要在不同的地方多次進行,就不必把這么多行都寫一遍,調用一個函數就行了。同時減少不必要的變數。從而使程序大大簡化。
庫函數就比較高深了,它的好處我現在還沒有切實體會到。