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語言中一個函數(function)是一個可以從程序其它地方調用執行的語句塊。

1、通過使用函數(functions)我們可以把我們的程序以更模塊化的形式組織起來,從而利用C語言所支持的結構化程序設計。

2、從數學角度,函數即集合A和集合B之間的映射關係。實際上計算機中的函數概念也是源於此,因此,一般函數,都有形參和返回值。

3、從計算機組成原理的角度來看,函數即是一個小型的計算機系統,依據馮諾伊曼的「存儲程序原理」,每一個計算機系統包含:輸入系統、輸出系統、運算器以及控制器,實際上對於C語言中的函數來說,它是「存儲程序原理」的軟實現,其中形參、實參這是輸入系統,返回值是輸出系統,函數體中的運算符,比如+、-、*、/四則運算即為運算器,而邏輯運算符以及if、while等控制語句便是一個控制器。

如何用C語言生成一個正態分佈的樣本

調試程序時,隨機數種子可以設常數,例如srand(54321);

用 rand() 產生均勻分佈隨機數 x1,x2

利用瑞利分佈得正態分佈隨機數 y1,y2

再按要求線性縮放一下到[0.01,2] 區間。

#include stdio.h

#include stdlib.h

#include math.h

#include time.h

main(){

#define N 100

double rd[N];

double x1,x2,y1,y2;

double pi2=6.28318530728,mx,mi,ave=0;

int i;

//srand(54321);

srand(time(NULL));

for (i=0;i=N-2;i=i+2){

x1=1.0*rand()/RAND_MAX;

x2=1.0*rand()/RAND_MAX;

y1= sqrt((-2.0*log(x1))) * cos(pi2*x2);

y2= sqrt((-2.0*log(x1))) * sin(pi2*x2);

rd[i]=y1;

rd[i+1]=y2;

}

mx=rd[0];mi=rd[0];

for (i=0;iN;i++){

if (rd[i]mx)mx=rd[i];

if (rd[i]mi)mi=rd[i];

}

//printf(“mi=%lf mx=%lf\n”,mi,mx);

for (i=0;iN;i++) rd[i] = (rd[i]-mi)/(mx-mi+0.001) * (2.0-0.01) + 0.01;

for (i=0;iN-2;i=i+2) printf(“%lf %lf\n”,rd[i],rd[i+1]);

return 0;

}

我需要c語言每個頭文件里的所有函數介紹及用法!

分類函數,所在函數庫為ctype.h

int isalpha(int ch) 若ch是字母(‘A’-‘Z’,’a’-‘z’)返回非0值,否則返回0

int isalnum(int ch) 若ch是字母(‘A’-‘Z’,’a’-‘z’)或數字(‘0’-‘9’)

返回非0值,否則返回0

int isascii(int ch) 若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0

int iscntrl(int ch) 若ch是作廢字符(0x7F)或普通控制字符(0x00-0x1F)

返回非0值,否則返回0

int isdigit(int ch) 若ch是數字(‘0’-‘9’)返回非0值,否則返回0

int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否則返回0

int islower(int ch) 若ch是小寫字母(‘a’-‘z’)返回非0值,否則返回0

int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否則返回0

int ispunct(int ch) 若ch是標點字符(0x00-0x1F)返回非0值,否則返回0

int isspace(int ch) 若ch是空格(‘ ‘),水平製表符(‘\t’),回車符(‘\r’),

走紙換行(‘\f’),垂直製表符(‘\v’),換行符(‘\n’)

返回非0值,否則返回0

int isupper(int ch) 若ch是大寫字母(‘A’-‘Z’)返回非0值,否則返回0

int isxdigit(int ch) 若ch是16進制數(‘0’-‘9′,’A’-‘F’,’a’-‘f’)返回非0值,

否則返回0

int tolower(int ch) 若ch是大寫字母(‘A’-‘Z’)返回相應的小寫字母(‘a’-‘z’)

int toupper(int ch) 若ch是小寫字母(‘a’-‘z’)返回相應的大寫字母(‘A’-‘Z’)

數學函數,所在函數庫為math.h、stdlib.h、string.h、float.h

int abs(int i) 返回整型參數i的絕對值

double cabs(struct complex znum) 返回複數znum的絕對值

double fabs(double x) 返回雙精度參數x的絕對值

long labs(long n) 返回長整型參數n的絕對值

double exp(double x) 返回指數函數ex的值

double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中

double ldexp(double value,int exp); 返回value*2exp的值

double log(double x) 返回logex的值

double log10(double x) 返回log10x的值

double pow(double x,double y) 返回xy的值

double pow10(int p) 返回10p的值

double sqrt(double x) 返回+√x的值

double acos(double x) 返回x的反餘弦cos-1(x)值,x為弧度

double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度

double atan(double x) 返回x的反正切tan-1(x)值,x為弧度

double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度

double cos(double x) 返回x的餘弦cos(x)值,x為弧度

double sin(double x) 返回x的正弦sin(x)值,x為弧度

double tan(double x) 返回x的正切tan(x)值,x為弧度

double cosh(double x) 返回x的雙曲餘弦cosh(x)值,x為弧度

double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度

double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度

double hypot(double x,double y) 返回直角三角形斜邊的長度(z),

x和y為直角邊的長度,z2=x2+y2

double ceil(double x) 返回不小於x的最小整數

double floor(double x) 返回不大於x的最大整數

void srand(unsigned seed) 初始化隨機數發生器

int rand() 產生一個隨機數並返回這個數

double poly(double x,int n,double c[])從參數產生一個多項式

double modf(double value,double *iptr)將雙精度數value分解成尾數和階

double fmod(double x,double y) 返回x/y的餘數

double frexp(double value,int *eptr) 將雙精度數value分成尾數和階

double atof(char *nptr) 將字符串nptr轉換成浮點數並返回這個浮點數

double atoi(char *nptr) 將字符串nptr轉換成整數並返回這個整數

double atol(char *nptr) 將字符串nptr轉換成長整數並返回這個整數

char *ecvt(double value,int ndigit,int *decpt,int *sign)

將浮點數value轉換成字符串並返回該字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

將浮點數value轉換成字符串並返回該字符串

char *gcvt(double value,int ndigit,char *buf)

將數value轉換成字符串並存於buf中,並返回buf的指針

char *ultoa(unsigned long value,char *string,int radix)

將無符號整型數value轉換成字符串並返回該字符串,radix為轉換時所用基數

char *ltoa(long value,char *string,int radix)

將長整型數value轉換成字符串並返回該字符串,radix為轉換時所用基數

char *itoa(int value,char *string,int radix)

將整數value轉換成字符串存入string,radix為轉換時所用基數

double atof(char *nptr) 將字符串nptr轉換成雙精度數,並返回這個數,錯誤返回0

int atoi(char *nptr) 將字符串nptr轉換成整型數, 並返回這個數,錯誤返回0

long atol(char *nptr) 將字符串nptr轉換成長整型數,並返回這個數,錯誤返回0

double strtod(char *str,char **endptr)將字符串str轉換成雙精度數,並返回這個數,

long strtol(char *str,char **endptr,int base)將字符串str轉換成長整型數,

並返回這個數,

int matherr(struct exception *e)

用戶修改數學錯誤返回信息函數(沒有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p,

double *arg2p,double retval)

用戶修改數學錯誤返回信息函數(沒有必要使用)

unsigned int _clear87() 清除浮點狀態字並返回原來的浮點狀態

void _fpreset() 重新初使化浮點數學程序包

unsigned int _status87() 返回浮點狀態字

int chdir(char *path) 使指定的目錄path(如:”C:\\WPS”)變成當前的工作目錄,成

功返回0

int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功

返回0

pathname為指定的目錄名和文件名,如”C:\\WPS\\TXT”

ffblk為指定的保存文件信息的一個結構,定義如下:

┏━━━━━━━━━━━━━━━━━━━━┓

┃struct ffblk ┃

┃{ ┃

┃ char ff_reserved[21]; /*DOS保留字*/ ┃

┃ char ff_attrib; /*文件屬性*/ ┃

┃ int ff_ftime; /*文件時間*/ ┃

┃ int ff_fdate; /*文件日期*/ ┃

┃ long ff_fsize; /*文件長度*/ ┃

┃ char ff_name[13]; /*文件名*/ ┃

┃} ┃

┗━━━━━━━━━━━━━━━━━━━━━┛

attrib為文件屬性,由以下字符代表

┏━━━━━━━━━┳━━━━━━━━━┓

┃FA_RDONLY 只讀文件┃FA_LABEL 卷標號 ┃

┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃

┃FA_SYSTEM 系統文件┃FA_ARCH 檔案 ┃

┗━━━━━━━━━┻━━━━━━━━━┛

例:

struct ffblk ff;

findfirst(“*.wps”,ff,FA_RDONLY);

int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0

void fumerge(char *path,char *drive,char *dir,char *name,char *ext)

此函數通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),擴展名ext(.EXE、.COM等)組成一個文件名

存與path中.

int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)

此函數將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),擴展名ext(.EXE、.COM等),並分別存入相應的變量中.

int getcurdir(int drive,char *direc) 此函數返回指定驅動器的當前工作目錄名稱

drive 指定的驅動器(0=當前,1=A,2=B,3=C等)

direc 保存指定驅動器當前工作路徑的變量 成功返回0

char *getcwd(char *buf,iint n) 此函數取當前工作目錄並存入buf中,直到n個字

節長為為止.錯誤返回NULL

int getdisk() 取當前正在使用的驅動器,返回一個整數(0=A,1=B,2=C等)

int setdisk(int drive) 設置要使用的驅動器drive(0=A,1=B,2=C等),

返回可使用驅動器總數

int mkdir(char *pathname) 建立一個新的目錄pathname,成功返回0

int rmdir(char *pathname) 刪除一個目錄pathname,成功返回0

char *mktemp(char *template) 構造一個當前目錄上沒有的文件名並存於template中

char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,

,此函數使用DOS的PATH變量,未找到文件返回NULL

進程函數,所在函數庫為stdlib.h、process.h

void abort() 此函數通過調用具有出口代碼3的_exit寫一個終止信息於stderr,

並異常終止程序。無返回值

int exec…裝入和運行其它程序

int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)

int execle( char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int execlp( char *pathname,char *arg0,char *arg1,…,NULL)

int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])

int execv( char *pathname,char *argv[])

int execve( char *pathname,char *argv[],char *envp[])

int execvp( char *pathname,char *argv[])

int execvpe(char *pathname,char *argv[],char *envp[])

exec函數族裝入並運行程序pathname,並將參數

arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯返回-1

在exec函數族中,後綴l、v、p、e添加到exec後,

所指定的函數將具有某種操作能力

有後綴 p時,函數可以利用DOS的PATH變量查找子程序文件。

l時,函數中被傳遞的參數個數固定。

v時,函數中被傳遞的參數個數不固定。

e時,函數傳遞指定參數envp,允許改變子進程的環境,

無後綴e時,子進程使用當前程序的環境。

void _exit(int status)終止當前程序,但不清理現場

void exit(int status) 終止當前程序,關閉所有文件,寫緩衝區的輸出(等待輸出),

並調用任何寄存器的”出口函數”,無返回值

int spawn…運行子程序

int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnv( int mode,char *pathname,char *argv[])

int spawnve( int mode,char *pathname,char *argv[],char *envp[])

int spawnvp( int mode,char *pathname,char *argv[])

int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])

spawn函數族在mode模式下運行子程序pathname,並將參數

arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯返回-1

mode為運行模式

mode為 P_WAIT 表示在子程序運行完後返回本程序

P_NOWAIT 表示在子程序運行時同時運行本程序(不可用)

P_OVERLAY表示在本程序退出後運行子程序

在spawn函數族中,後綴l、v、p、e添加到spawn後,

所指定的函數將具有某種操作能力

有後綴 p時, 函數利用DOS的PATH查找子程序文件

l時, 函數傳遞的參數個數固定.

v時, 函數傳遞的參數個數不固定.

e時, 指定參數envp可以傳遞給子程序,允許改變子程序運行環境.

當無後綴e時,子程序使用本程序的環境.

int system(char *command) 將MSDOS命令command傳遞給DOS執行

轉換子程序,函數庫為math.h、stdlib.h、ctype.h、float.h

char *ecvt(double value,int ndigit,int *decpt,int *sign)

將浮點數value轉換成字符串並返回該字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

將浮點數value轉換成字符串並返回該字符串

char *gcvt(double value,int ndigit,char *buf)

將數value轉換成字符串並存於buf中,並返回buf的指針

char *ultoa(unsigned long value,char *string,int radix)

將無符號整型數value轉換成字符串並返回該字符串,radix為轉換時所用基數

char *ltoa(long value,char *string,int radix)

將長整型數value轉換成字符串並返回該字符串,radix為轉換時所用基數

char *itoa(int value,char *string,int radix)

將整數value轉換成字符串存入string,radix為轉換時所用基數

double atof(char *nptr) 將字符串nptr轉換成雙精度數,並返回這個數,錯誤返回0

int atoi(char *nptr) 將字符串nptr轉換成整型數, 並返回這個數,錯誤返回0

long atol(char *nptr) 將字符串nptr轉換成長整型數,並返回這個數,錯誤返回0

double strtod(char *str,char **endptr)將字符串str轉換成雙精度數,並返回這個數,

long strtol(char *str,char **endptr,int base)將字符串str轉換成長整型數,

並返回這個數,

int toascii(int c) 返回c相應的ASCII

int tolower(int ch) 若ch是大寫字母(‘A’-‘Z’)返回相應的小寫字母(‘a’-‘z’)

int _tolower(int ch) 返回ch相應的小寫字母(‘a’-‘z’)

int toupper(int ch) 若ch是小寫字母(‘a’-‘z’)返回相應的大寫字母(‘A’-‘Z’)

int _toupper(int ch) 返回ch相應的大寫字母(‘A’-‘Z’)

診斷函數,所在函數庫為assert.h、math.h

void assert(int test) 一個擴展成if語句那樣的宏,如果test測試失敗,

就顯示一個信息並異常終止程序,無返回值

void perror(char *string) 本函數將顯示最近一次的錯誤信息,格式如下:

字符串string:錯誤信息

char *strerror(char *str) 本函數返回最近一次的錯誤信息,格式如下:

字符串str:錯誤信息

int matherr(struct exception *e)

用戶修改數學錯誤返回信息函數(沒有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p,

double *arg2p,double retval)

用戶修改數學錯誤返回信息函數(沒有必要使用)

怎麼調用c語言中的標準正態分佈函數?

摘要:

隨機數在實際運用中非常之多,如遊戲設計,信號處理,通常我們很容易得到平均分佈的隨機數。但如何根據平均分佈的隨機數進而產生其它分佈的隨機數呢?本文提出了一種基於幾何直觀面積的方法,以正態分佈隨機數的產生為例討論了任意分佈的隨機數的產生方法。

大家都知道,隨機數在各個方面都有很大的作用,在vc的環境下,為我們提供了庫函數rand()來產生一個隨機的整數。該隨機數是平均在0~RAND_MAX之間平均分佈的,RAND_MAX是一個常量,在VC6.0環境下是這樣定義的:

#define RAND_MAX 0x7fff

它是一個short 型數據的最大值,如果要產生一個浮點型的隨機數,可以將rand()/1000.0這樣就得到一個0~32.767之間平均分佈的隨機浮點數。如果要使得範圍大一點,那麼可以通過產生幾個隨機數的線性組合來實現任意範圍內的平均分佈的隨機數。例如要產生-1000~1000之間的精度為四位小數的平均分佈的隨機數可以這樣來實現。先產生一個0到10000之間的隨機整數。方法如下 :

int a = rand()%10000;

然後保留四位小數產生0~1之間的隨機小數:

double b = (double)a/10000.0;

然後通過線性組合就可以實現任意範圍內的隨機數的產生,要實現-1000~1000內的平均分佈的隨機數可以這樣做:

double dValue = (rand()%10000)/10000.0*1000-(rand()%10000)/10000.0*1000;

則dValue就是所要的值。

到現在為止,你或許以為一切工作都已經完成了,其實不然,仔細一看,你會發現有問題的,上面的式子化簡後就變為:

double dValue = (rand()%10000)/10.0-(rand()%10000)/10.0;

這樣一來,產生的隨機數範圍是正確的,但是精度不正確了,變成了只有一位正確的小數的隨機數了,後面三位的小數都是零,顯然不是我們要求的,什麼原因呢,又怎麼辦呢。

先找原因,rand()產生的隨機數分辨率為32767,兩個就是65534,而經過求余後分辨度還要減小為10000,兩個就是20000而要求的分辨率為1000*10000*2=20000000,顯然遠遠不夠。下面提供的方法可以實現正確的結果:

double a = (rand()%10000) * (rand()%1000)/10000.0;

double b = (rand()%10000) * (rand()%1000)/10000.0;

double dValue = a-b;

則dValue就是所要求的結果。在下面的函數中可以實現產生一個在一個區間之內的平均分佈的隨機數,精度是4位小數。

double AverageRandom(double min,double max)

{

int minInteger = (int)(min*10000);

int maxInteger = (int)(max*10000);

int randInteger = rand()*rand();

int diffInteger = maxInteger – minInteger;

int resultInteger = randInteger % diffInteger + minInteger;

return resultInteger/10000.0;

}

但是有一個值得注意的問題,隨機數的產生需要有一個隨機的種子,因為用計算機產生的隨機數是通過遞推的方法得來的,必須有一個初始值,也就是通常所說的隨機種子,如果不對隨機種子進行初始化,那麼計算機有一個確省的隨機種子,這樣每次遞推的結果就完全相同了,因此需要在每次程序運行時對隨機種子進行初始化,在vc中的方法是調用srand(int)這個函數,其參數就是隨機種子,但是如果給一個常量,則得到的隨機序列就完全相同了,因此可以使用系統的時間來作為隨機種子,因為系統時間可以保證它的隨機性。

調用方法是srand(GetTickCount()),但是又不能在每次調用rand()的時候都用srand(GetTickCount())來初始化,因為現在計算機運行時間比較快,當連續調用rand()時,系統的時間還沒有更新,所以得到的隨機種子在一段時間內是完全相同的,因此一般只在進行一次大批隨機數產生之前進行一次隨機種子的初始化。下面的代碼產生了400個在-1~1之間的平均分佈的隨機數。

double dValue[400];

srand(GetTickCount());

for(int i= 0;i 400; i++)

{

double dValue[i] = AverageRandom(-1,1);

}

請問:C語言中怎麼計算正態分佈函數?

C語言中計算一個數的N次方可以用庫函數pow來實現。

函數原型:double pow(double x, double y);

功 能:計算x^y的值

返 回 值:計算結果

舉例如下:

double a = pow(3.14, 2); // 計算3.14的平方

註:使用pow函數時,需要將頭文件#includemath.h包含進源文件中。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/277845.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-19 13:21
下一篇 2024-12-19 13:21

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29

發表回復

登錄後才能評論