C語言學習
html
C語言練習知識點程序員
auto
局部變量(自動儲存)
編程
break
無條件退出程序最內層循環
case
switch
語句中選擇項
char
單字節整型
const
定義不可更改值的變量
continue
中斷本次循環,並轉向下一次循環
default
switch
語句中的默認選擇項
do
用於構成
do
.....
while
循環語句
double
雙精度浮點型
else
構成
if
.....
else
選擇程序結構
enum
枚舉
extern
聲明外部全局變量
float
單精度浮點型
for
構成
for
循環語句
goto
跳到程序中指定的標籤位置
if
構成
if
....
else
選擇結構
int
整型
long
長整型
register
定義CPU內部寄存的變量
return
用於返回函數的返回值
short
短整型
signed
有符號數 與基本整型類型結合使用
sizeof
計算表達式或數據類型的佔用字節數
static
定義靜態變量、函數
struct
定義結構類型
switch
構成
switch
選擇結構
typedef
從新定義數據類型
union
聯合類型
unsigned 定義無符號數據 與基本整型類型結合使用
void
定義任意類型指針
void
* , 無參數 , 無返回值等
volatile
易失性變量
while
用於構成
do
...
while
或
while
循環結構
#include "heard.h" void heard1(int r){ printf("%d\n",r); } #ifndef heard_h #define heard_h #include <stdio.h> void heard1(int r); #endif /* heard_h */ ///////////////////////// #include <stdio.h> #include "heee.h" #include "heard.h" int main(int argc, const char * argv[]) { heard1(123); int ee = hee1(2); printf("\n%d",ee); return 0; }
//共用體:共用體是一種特殊的數據類型,容許您在相同的內存位置存儲不一樣的數據類型。您能夠定義一個帶有多成員的共用體,可是任什麼時候候只能有一個成員帶有值。共用體提供了一種使用相同的內存位置的有效方式。 union Data { int i; float f; char str[21]; }; //,同一時間只能使用一個共用體,使用多個最後一個使用的無誤以前的會錯亂; union Data date;//聲明 date.i = 20; date.f = 22.22; strcpy(date.str,"woshiyige"); print(「%d—%f—%s」,date.i,date.f,date.str); //結構體:至關於OC中的類,Swift中的類也是一個結構體(暫時這麼理解) #include <stdio.h> struct Books { char title[50]; char author[20]; char subject[100]; int bookid; }; void printBook(struct Books book);//函數聲明 int main(int argc, const char * argv[]) { //聲明 struct Books book1; struct Books book2; strcpy(book1.title,"zhonghua"); strcpy(book1.author, "xude"); book1.bookid = 23; strcpy(book2.title,"zhongguo"); strcpy(book2.author, "nide"); book2.bookid = 25; printBook(book1); return 0; } void printBook(struct Books book){ printf("book.title %s\n",book.title); printf("book.authoe %s\n",book.author); printf("book.bookid %d\n",book.bookid); } //位域:能夠 定義類型的儲存大小,節省沒必要要的內存開銷 //類型說明符 位域名: 位域長度 struct wei{ int kai:2; int guan:1; unsigned a:2; unsigned :4; //空域 從下一個單元 開始存放 }; void printBook(struct Books book);//函數聲明 int main(int argc, const char * argv[]) { //聲明位域 struct wei w; w.a = 2; w.guan = 33;//⚠️注意不要超過位域的大小 } Ttypedef //C 語言提供了 typedef 關鍵字,您可使用它來爲類型取一個新的名字。下面的實例爲單字節數字定義了一個術語 BYTE: typedef unsigned char BYTE; int main(int argc, const char * argv[]) { // 在這個類型定義以後,標識符 BYTE 可做爲類型 unsigned char 的縮寫,例如: BYTE b1, b2; //#define 是 C 指令,用於爲各類數據類型定義別名,與 typedef 相似,可是它們有如下幾點不一樣: typedef 僅限於爲類型定義符號名稱,#define 不只能夠爲類型定義別名,也能爲數值定義別名,好比您能夠定義 1 爲 ONE。 typedef 是由編譯器執行解釋的,#define 語句是由預編譯器進行處理的。 return 0; }
C 中文件的讀寫ide
C //讀寫文件 txt,本地化數據 #include <stdio.h> int main(int argc, const char * argv[]) { //文件的讀取 /*打開文件 您可使用 fopen( ) 函數來建立一個新的文件或者打開一個已有的文件,這個調用會初始化類型 FILE 的一個對象,類型 FILE 包含了全部用來控制流的必要的信息。下面是這個函數調用的原型: FILE *fopen( const char * filename, const char * mode ); 在這裏,filename 是字符串,用來命名文件,訪問模式 mode 的值能夠是下列值中的一個: 模式 描述 r 打開一個已有的文本文件,容許讀取文件。 w 打開一個文本文件,容許寫入文件。若是文件不存在,則會建立一個新文件。在這裏,您的程序會從文件的開頭寫入內容。 a 打開一個文本文件,以追加模式寫入文件。若是文件不存在,則會建立一個新文件。在這裏,您的程序會在已有的文件內容中追加內容。 r+ 打開一個文本文件,容許讀寫文件。 w+ 打開一個文本文件,容許讀寫文件。若是文件已存在,則文件會被截斷爲零長度,若是文件不存在,則會建立一個新文件。 a+ 打開一個文本文件,容許讀寫文件。若是文件不存在,則會建立一個新文件。讀取會從文件的開頭開始,寫入則只能是追加模式。 若是處理的是二進制文件,則需使用下面的訪問模式來取代上面的訪問模式: "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b" 關閉文件 ; 爲了關閉文件,請使用 fclose( ) 函數。函數的原型以下: int fclose( FILE *fp );*/ //lizi FILE * fp; fp = fopen("/tmp/text.txt", "w+");//在tmp目錄下建立text.txt 文件類型爲w+ fprintf(fp, "This is testing for fprintff....\n"); fputs("123456\n", fp);//以上是兩種不一樣的寫入方法 fclose(fp);//關閉文件 FILE * pp; pp = fopen("/tmp/tt.txt", "a+"); fprintf(pp, "woshiyigetianjiade"); fputs("woshidierge", pp); fclose(pp); FILE * yy; yy = fopen("uu.txt", "w"); fprintf(yy, "yyyyyyyyyyyy"); fputs("ffffffffff", yy); fclose(yy); //文件等讀取 //若是這個函數在讀取最後一個字符以前就遇到一個換行符 '\n' 或文件的末尾 EOF,則只會返回讀取到的字符,包括換行符。您也可使用 int fscanf(FILE *fp, const char *format, ...) 函數來從文件中讀取字符串,可是在遇到第一個空格字符時,它會中止讀取 FILE * gg; //定義文件 char butff[255];//char大小 gg = fopen("/tmp/text.txt", "r"); //獲取文件 fscanf(gg, "%s",butff); printf("1:%s\n",butff); // fscanf 輸出 遇到空格會中止 讀取 fgets(butff, 255, gg); printf("2: %s",butff); fgets(butff, 255, gg); //進行文件讀取一整行 遇到\n會中止 printf("3: %s\n",butff); /*輸出 1:This 2: is testing for fprintff.... 3: 123456 */ fclose(gg);//關閉文件 return 0; }
C中 的預處理函數
//預處理 #include <stdio.h> #define shuchu(a) printf(#a) #define liashuchu(a,b) printf(#a"haiyou"#b"zifudandu") void wenjian(); void yuchuli(); int main(int argc, const char * argv[]) { yuchuli(); //wenjian(); return 0; } void yuchuli(){ /* 全部的預處理器命令都是以井號(#)開頭。它必須是第一個非空字符,爲了加強可讀性,預處理器指令應從第一列開始。下面列出了全部重要的預處理器指令: 指令 描述 #define 定義宏 #include 包含一個源代碼文件 #undef 取消已定義的宏 #ifdef 若是宏已經定義,則返回真 #ifndef 若是宏沒有定義,則返回真 #if 若是給定條件爲真,則編譯下面代碼 #else #if 的替代方案 #elif 若是前面的 #if 給定條件不爲真,當前條件爲真,則編譯下面代碼 #endif 結束一個 #if……#else 條件編譯塊 #error 當遇到標準錯誤時,輸出錯誤消息 #pragma 使用標準化方法,向編譯器發佈特殊的命令到編譯器中 預約義宏 ANSI C 定義了許多宏。在編程中您可使用這些宏,可是不一樣直接修改這些預約義的宏。 宏 描述 __DATE__ 當前日期,一個以 "MMM DD YYYY" 格式表示的字符常量。 __TIME__ 當前時間,一個以 "HH:MM:SS" 格式表示的字符常量。 __FILE__ 這會包含當前文件名,一個字符串常量。 __LINE__ 這會包含當前行號,一個十進制常量。 __STDC__ 當編譯器以 ANSI 標準編譯時,則定義爲 1。 */ /* 預處理器運算符 C 預處理器提供了下列的運算符來幫助您建立宏: 宏延續運算符(\) 一個宏一般寫在一個單行上。可是若是宏太長,一個單行容納不下,則使用宏延續運算符(\)。例如: #define message_for(a, b) \ printf(#a " and " #b ": We love you!\n") 字符串常量化運算符(#) 在宏定義中,當須要把一個宏的參數轉換爲字符串常量時,則使用字符串常量化運算符(#)。在宏中使用的該運算符有一個特定的參數或參數列表。例如: #include <stdio.h> #define message_for(a, b) \ printf(#a " and " #b ": We love you!\n") int main(void) { message_for(Carole, Debra); return 0; } 當上面的代碼被編譯和執行時,它會產生下列結果: Carole and Debra: We love you!*/ shuchu(33); liashuchu(jdfsjdf, dsadfd); printf("日期 %s\n",__DATE__); printf("時間 %s\n",__TIME__); printf("文件名: %s\n",__FILE__); printf("行號:%d\n",__LINE__); printf("ANSI : %d\n",__STDC__); /* 日期 Jun 16 2017 時間 14:28:32 文件名: /Users/yurong/Documents/代碼/C/C練習/C練習/main.c 行號:55 ANSI : 1 */ }
C中的遞歸學習
#include <stdio.h> double faction(unsigned int i); int main(int argc, const char * argv[]) { //遞歸 C 語言支持遞歸,即一個函數能夠調用其自身。但在使用遞歸時,程序員須要注意定義一個從函數退出的條件,不然會進入死循環。\ 與直接的語句(如while循環)相比,遞歸函數會耗費更多的運行時間,而且要佔用大量的棧空間。遞歸函數每次調用自身時,都須要把它的狀態存到棧中,以便在它調用完自身後,程序能夠返回到它原來的狀態。未經精心設計的遞歸函數老是會帶來麻煩。 //下面的實例使用遞歸函數計算一個給定的數的階乘: int i = 5; printf("%d 的階乘 = %f\n",i,faction(i)); return 0; } double faction(unsigned int i){ if (i<=1) { return 1; } return i* faction(i-1); }