#includestdio.h
10余年的善左網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整善左建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“善左網站設計”,“善左網站推廣”以來,每個客戶項目都認真落實執行。
#includestring.h
#includemath.h
main()
{
char c;
int i,j,k,s;
int m;
double a;
scanf("%c\n",c);
scanf("%d\n",m);
//若c是字母('A'-'Z','a'-'z')返回非0值,否則返回0
i=isalpha(c);
printf("i=%d",i);
//若c是數字('0'-'9')返回非0值,否則返回0
j=isdigit(c);
printf("j=%d",j);
//若c是大寫字母('A'-'Z')返回非0值,否則返回0
k=isupper(c);
printf("k=%d",k);
//返回x的開方
a= sqrt(m)
printf("a=%d",a);
//若c是空格(' '),水平制表符('\t'),回車符('\r'),
//走紙換行('\f'),垂直制表符('\v'),換行符('\n')
//返回非0值,否則返回0
s= isspace( c)
printf("s=%d",s);
}
另外,還有
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() 返回浮點狀態字
============目錄函數(原型聲明所在頭文件為dir.h、dos.h)================
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')
哈夫曼編碼(Huffman Coding)是一種編碼方式,以哈夫曼樹—即最優二叉樹,帶權路徑長度最小的二叉樹,經常應用于數據壓縮。 在計算機信息處理中,“哈夫曼編碼”是一種一致性編碼法(又稱"熵編碼法"),用于數據的無損耗壓縮。這一術語是指使用一張特殊的編碼表將源字符(例如某文件中的一個符號)進行編碼。這張編碼表的特殊之處在于,它是根據每一個源字符出現的估算概率而建立起來的(出現概率高的字符使用較短的編碼,反之出現概率低的則使用較長的編碼,這便使編碼之后的字符串的平均期望長度降低,從而達到無損壓縮數據的目的)。這種方法是由David.A.Huffman發展起來的。 例如,在英文中,e的出現概率很高,而z的出現概率則最低。當利用哈夫曼編碼對一篇英文進行壓縮時,e極有可能用一個位(bit)來表示,而z則可能花去25個位(不是26)。用普通的表示方法時,每個英文字母均占用一個字節(byte),即8個位。二者相比,e使用了一般編碼的1/8的長度,z則使用了3倍多。倘若我們能實現對于英文中各個字母出現概率的較準確的估算,就可以大幅度提高無損壓縮的比例。
本文描述在網上能夠找到的最簡單,最快速的哈夫曼編碼。本方法不使用任何擴展動態庫,比如STL或者組件。只使用簡單的C函數,比如:memset,memmove,qsort,malloc,realloc和memcpy。
因此,大家都會發現,理解甚至修改這個編碼都是很容易的。
背景
哈夫曼壓縮是個無損的壓縮算法,一般用來壓縮文本和程序文件。哈夫曼壓縮屬于可變代碼長度算法一族。意思是個體符號(例如,文本文件中的字符)用一個特定長度的位序列替代。因此,在文件中出現頻率高的符號,使用短的位序列,而那些很少出現的符號,則用較長的位序列。
編碼使用
我用簡單的C函數寫這個編碼是為了讓它在任何地方使用都會比較方便。你可以將他們放到類中,或者直接使用這個函數。并且我使用了簡單的格式,僅僅輸入輸出緩沖區,而不象其它文章中那樣,輸入輸出文件。
bool CompressHuffman(BYTE *pSrc, int nSrcLen, BYTE *pDes, int nDesLen);
bool DecompressHuffman(BYTE *pSrc, int nSrcLen, BYTE *pDes, int nDesLen);
要點說明
速度
為了讓它(huffman.cpp)快速運行,我花了很長時間。同時,我沒有使用任何動態庫,比如STL或者MFC。它壓縮1M數據少于100ms(P3處理器,主頻1G)。
壓縮
壓縮代碼非常簡單,首先用ASCII值初始化511個哈夫曼節點:
CHuffmanNode nodes[511];
for(int nCount = 0; nCount 256; nCount++)
nodes[nCount].byAscii = nCount;
然后,計算在輸入緩沖區數據中,每個ASCII碼出現的頻率:
for(nCount = 0; nCount nSrcLen; nCount++)
nodes[pSrc[nCount]].nFrequency++;
然后,根據頻率進行排序:
qsort(nodes, 256, sizeof(CHuffmanNode), frequencyCompare);
現在,構造哈夫曼樹,獲取每個ASCII碼對應的位序列:
int nNodeCount = GetHuffmanTree(nodes);
構造哈夫曼樹非常簡單,將所有的節點放到一個隊列中,用一個節點替換兩個頻率最低的節點,新節點的頻率就是這兩個節點的頻率之和。這樣,新節點就是兩個被替換節點的父節點了。如此循環,直到隊列中只剩一個節點(樹根)。
// parent node
pNode = nodes[nParentNode++];
// pop first child
pNode-pLeft = PopNode(pNodes, nBackNode--, false);
// pop second child
pNode-pRight = PopNode(pNodes, nBackNode--, true);
// adjust parent of the two poped nodes
pNode-pLeft-pParent = pNode-pRight-pParent = pNode;
// adjust parent frequency
pNode-nFrequency = pNode-pLeft-nFrequency + pNode-pRight-nFrequency;
這里我用了一個好的訣竅來避免使用任何隊列組件。我先前就直到ASCII碼只有256個,但我分配了511個(CHuffmanNode nodes[511]),前255個記錄ASCII碼,而用后255個記錄哈夫曼樹中的父節點。并且在構造樹的時候只使用一個指針數組(ChuffmanNode *pNodes[256])來指向這些節點。同樣使用兩個變量來操作隊列索引(int nParentNode = nNodeCount;nBackNode = nNodeCount –1)。
接著,壓縮的最后一步是將每個ASCII編碼寫入輸出緩沖區中:
int nDesIndex = 0;
// loop to write codes
for(nCount = 0; nCount nSrcLen; nCount++)
{
*(DWORD*)(pDesPtr+(nDesIndex3)) |=
nodes[pSrc[nCount]].dwCode (nDesIndex7);
nDesIndex += nodes[pSrc[nCount]].nCodeLength;
}
(nDesIndex3): 3 以8位為界限右移后到達右邊字節的前面
(nDesIndex7): 7 得到最高位.
注意:在壓縮緩沖區中,我們必須保存哈夫曼樹的節點以及位序列,這樣我們才能在解壓縮時重新構造哈夫曼樹(只需保存ASCII值和對應的位序列)。
解壓縮
解壓縮比構造哈夫曼樹要簡單的多,將輸入緩沖區中的每個編碼用對應的ASCII碼逐個替換就可以了。只要記住,這里的輸入緩沖區是一個包含每個ASCII值的編碼的位流。因此,為了用ASCII值替換編碼,我們必須用位流搜索哈夫曼樹,直到發現一個葉節點,然后將它的ASCII值添加到輸出緩沖區中:
int nDesIndex = 0;
DWORD nCode;
while(nDesIndex nDesLen)
{
nCode = (*(DWORD*)(pSrc+(nSrcIndex3)))(nSrcIndex7);
pNode = pRoot;
while(pNode-pLeft)
{
pNode = (nCode1) ? pNode-pRight : pNode-pLeft;
nCode = 1;
nSrcIndex++;
}
pDes[nDesIndex++] = pNode-byAscii;
}
#include "stdio.h"
#include "string.h"
int fun(char s[],char max[])
{
char ss[100][100],*p=s;
int i=0,j=0,k,n=0;
while(*p!='\0')
{
if((*p)!=' ')
{
ss[i][j]=*p;
j++;
}
else
{
ss[i][j]='\0';
i++;j=0;
}
p++;
}
ss[i][j]='\0';
strcpy(max,ss[0]);
n=n=strlen(max);
for(k=1;k=i;k++)
{
if(strlen(ss[k])strlen(max))
{
strcpy(max,ss[k]);
n=strlen(max);
}
}
return n;
}
int main()
{
char s[100];/*asdf asdfll asdf*/
char max[100];
int n;
gets(s);
n=fun(s,max);
printf("%s,%d",max,n);
}
#includestdio.h
int computNum(int num)
{
int sum=0;
int n;
while(num)
{
n=num%10;//取數的一位數
sum=sum+n;//累加這個數
num=num/10;//把num去掉一位數
}
return sum;
}
void main()
{
int number;
printf("請輸入一個整數:");
scanf("%d",number);
printf("各個數的和是%d",computNum(number));
}
#include stdio.h
#include string.h
int main(void)
{
int num;
char from[10] = "NONONO";
char to[10];
char toget[20];
strcmp(to,from);
num = strlen(from);
strcan(toget,to);
memeset(to,0,sizeof(to));
printf("OK");
getchar();
return 0;
}
c常用的函數太多了。。
文章標題:c語言實驗五函數的簡單,c語言實驗報告
網站鏈接:http://vcdvsql.cn/article14/hshjde.html
成都網站建設公司_創新互聯,為您提供虛擬主機、網頁設計公司、靜態網站、網站導航、全網營銷推廣、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯