重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
C語言中的函數的作用是可以將一段經常需要使用的代碼封裝起來,在需要使用時可以直接調用。
創新互聯憑借在網站建設、網站推廣領域領先的技術能力和多年的行業經驗,為客戶提供超值的營銷型網站建設服務,我們始終認為:好的營銷型網站就是好的業務員。我們已成功為企業單位、個人等客戶提供了成都網站建設、網站建設服務,以良好的商業信譽,完善的服務及深厚的技術力量處于同行領先地位。
示例:
語言的函數定義和函數聲明
#includestdio.h
//使用函數前,需要在main函數前對使用的函數進行聲明
int getMax(int, int);
void main() {
int t=getMax(12, 21);
printf("%d\n", t);
getchar();
}
int getMax(int a, int b) {
if (a b) {
return a;
}
else {
return b;
}
}
擴展資料
scanf 函數
函數原型:int scanf(char *format [,argument,...])
功能:從標準輸入設備(一般指鍵盤)實現格式化輸入
返回值:成功返回讀入的數據項個數
函數參數:format 格式化字符串
argument 輸入數據項的地址列表
常用格式類型參考printf函數的個格式類型
用法舉例:
從標準輸入設備中輸入一個整數到整形變量a中,輸入一個浮點數到浮點型變量b中
int a=0;
float b=0;
scanf("%d%f",a,b);
上面程序執行后,從鍵盤輸入: 19 18.6 ,程序將 19賦值給變量a, 18.6賦值給變量b 。
析構函數(destructor)
與構造函數相反,當對象脫離其作用域時(例如對象所在的函數已調用完畢),系統自動執行析構函數。析構函數往往用來做“清理善后”
的工作(例如在建立對象時用new開辟了一片內存空間,應在退出前在析構函數中用delete釋放)。
以C++語言為例,析構函數名也應與類名相同,只是在函數名前面加一個波浪符~,例如~stud(
),以區別于構造函數。它不能帶任何參數,也沒有返回值(包括void類型)。只能有一個析構函數,不能重載。如果用戶沒有編寫析構函數,編譯系統會自動生成一個缺省的析構函數,它也不進行任何操作。所以許多簡單的類中沒有用顯式的析構函數。
例15.2
包含構造函數和析構函數的C++程序。
#includecstring
#includeiostream
using
namespace
std;
class
stud
//聲明一個類
{
private:
//
私有部分
int
num;
char
name[10];
char
sex
;
public:
//公用部分
stud(int
n,char
nam[],char
s
)
//構造函數
{
num
=
n;
strcpy
(name,
nam);
sex
=
s;
}
~stud(
)
//析構函數
{
cout
"stud
has
been
destructe!"
endl;//通過輸出提示告訴我們析構函數確實被調用了
}
void
display(
)
//成員函數,輸出對象的數據
{
cout"num:
"numendl;
cout"name:
"nameendl;
cout"sex:
"sexendl;
}
};
void
main(
)
{
stud
stud1(10010,
"Wang-li",
'f'),
stud2(10011,
"Zhang-fun",
'm');
//建立兩個對象
stud1.display(
);
//輸出學生1的數據
stud2.display(
);
//輸出學生2的數據
}//主函數結束的同時,對象stud1,stud2均應被“清理”,而清理就是通過調用了析構函數實現的。
輸出結果:
num:
10010
name:
Wang-li
sex:
f
num:
10011
name:
Zhang-fun
sex:
m
stud
has
been
destructe!
stud
has
been
destructe!
現在把類的聲明放在main函數之前,它的作用域是全局的。這樣做可以使main函數更簡練一些。在main函數中定義了兩個對象并且給出了初值,然后輸出兩個學生的數據。當主函數結束時調用析構函數,輸出stud
has
been
destructe!。
在本程序中,成員函數是在類中定義的,如果成員函數的數目很多以及函數的長度很長,類的聲明就會占很大的篇幅,不利于閱讀程序。而且為了隱藏實現,一般是有必要將類的聲明和實現(具體方法代碼)分開編寫的,這也是一個良好的編程習慣。即可以在類的外面定義成員函數,而在類中只用函數的原型作聲明。
對象的時候首先運行的函數 可以有參數 可以無參數 也可以重載 你可以發現你在定義類的成員的時候無法賦初始值 構造函數的很重要的一個用處就是初始化里面的成員變量
析構函數正好相反 當你這個類的對象不存在的時候 先運行析構函數 然后再釋放這個對象所占用的內存 比如說定義在某個函數里的類的對象 當這個函數體結束的時候 先運行這個類的對象的析構函數 然后釋放該類所占用的內存 現在析構函數最大的用處就是 比如說你在構造函數里用了 new這個函數 申請了一塊堆內存 (或者用malloc 一樣的作用)如果你不釋放這塊內存就會造成內存泄露 這個時候就應該在析構函數里寫一個delete函數釋放申請的空間(如果是malloc申請的則用free()函數)別的用處就看你自己想象了。。。
另外還有一點應該注意 先構造后析構 比如你申請了類TEMP的兩個對象TEMP a;TEMP b;則析構的時候首先析構b,然后再析構a,如果是繼承的話 則先構造子類 然后構造父類 先析構父類 后析構子類 你可以自己嘗試寫點兒句子 可以更加了解構造函數析構函數的順序及作用。。。
sqrt(float型變量)
例:float
i=5;printf("%f",sqrt(i));
abs(i)求絕對值,意義不大,還不如自己定義
isprint、isalnum、isxdigit
這些沒什么用處,都可以用基本函數實現,學他就是浪費時間
srand()和rand()隨機函數
,默認種子
0返回0-65536的其中一個值,randomize();對種子初始化,默認參數:時間,不初始化的結果是每次隨機的結果序列都一樣,因為這個隨機數是用數學公式計算出來的
產生
0-7的隨機數:rand()%7
,對7求余即可達到目的
字符處理函數
本類別函數用于對單個字符進行處理,包括字符的類別測試和字符的大小寫轉換
頭文件 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