C語言的常用語法
/*
* 一個函數中調用另外一個函數條件如下:
* 被調用函數必須是已經定義的函數(是庫函數或者用戶自己定義的函數)
*如果使用庫函數,應該在本文件開頭加相應的#include指令
*如果使用自己定義的函數,而該函數的位置在調用它的函數后面,應該聲明
*/
#include<stdio.h>
int main(){
void print(int x,int y); //聲明調用函數,還未調用
int x,y;
print(x,y); //直接調用函數
return 0;
}
void print(int x,int y){
****
}
printf() //輸出語句
\n //換行符 scanf("%f,%f",&a,&b) //輸入兩個浮點數,逗號隔開數,比如:2.1,2.2
scanf() //鍵盤輸入語句
float() //浮點語句 比如:2.3
char() //只能有一個字符,后面的會覆蓋
int() //初始化,為整數
void() //初始化,空字符
自定義類型的三種方法:
-
結構體:
1.struct結構體名
{成員列表} 數組名{數組長度};
2.先聲明一個結構體類型,然后再用此類型定義結構體數組;
結構體類型 數組名[數組長度];
如:struct Person Leader[3];
結構體數組用法說明:對結構體數組初始化的形式是在定義數組的后面加上: = {初始表列};
如:struct Person Leader[3]= {"LI",0,"ZHANG",0,"DENG",0}; -
共用體 union 最后一項賦值,其余值初始化,寫法和結構體大致相同
-
enum枚舉類型:
enum Weekday{sun,mon,tue,wed,thu,fri,sat};
聲明了一個枚舉類型enum Weekday
然后可以用此類型來定義變量
enum Weekday workday,weekend;
workday = mon; //正確
weekend = sun; //正確
Weekday = monday; //錯誤
庫函數:
void *malloc(unsigned int size)
- 作用是在內存的動態存儲區分配一個長度為size的連續空間
- 函數的值是所分配區域的第一個字節的地址,或者說,次函數是一個指針型函數,返回的指針指向該分配域的開頭位置
void *calloc(unsigned N,unsigned size)
- 作用是在內存的動態存儲區中分配N個長度為size的連續空間,這個空間一般比較大,足以保存一個數組
void *free(void *p)
- 其作用是釋放指針變量P所指向的動態空間,使這部分空間能重新被其他變量使用。P應是最近一次調用malloc或calloc函數時得到的函數返回值
void *realloc(void *p,undigned int size)
- 如果已經通過malloc函數或calloc函數獲得動態空間,想改變其大小,可以用recalloc函數重新分配
首先,我們了解文件的概念。"文件"指存儲在外部介質上數據的集合
- 一批數據是以文件的形式存放在外部介質上的
- 操作系統是以文件為單位對數據進行管理
- 想找存放在外部介質上的數據,先按文件名找到所指定的文件,然后再從該文件讀數據
- 要向外部介質上存儲數據也必須先建立一個文件(以文件名作為標志),才能向它輸出數據
文件有不同的類型,在程序設計中主要用到兩種
(1) 程序文件。包括源程序文件(后綴為.c)、目標文件(后綴為.obj)、可執行文件(后綴為.exe)等。這種文件的內容是程序代碼。
(2) 數據文件。文件的內容不是程序,而是供程序運行時讀寫的數據,如在程序運行過程中輸出到磁盤(或其他外部設備)的數據,或在程序運行過程中供讀入的數據。如一批學生的成績數據,或貨物交易的數據等。
根據數據的組織形式,數據文件可分為ASCII文件和二進制文件。
- 數據在內存中是以二進制形式存儲的,如果不加轉換地輸出到外存,就是二進制文件
- 如果要求在外存上以ASCII代碼形式存儲,則需要在存儲前進行轉換
- ASCII文件又稱文本文件,每一個字節放一個字符的ASCII代碼
在文件系統中,關鍵的概念是"文件類型指針”,簡稱”文件指針
- 每個被使用的文件都在內存中開辟一個相應的文件信息區,用來存放文件的有關信息(如文件的名字、文件狀態及文件當前位置等)
- 這些信息是保存在一個結構體變量中的。該結構體類型是由系統聲明的,取名為FILE
打開和關閉文件:
C語言用fopen函數打開數據文件,fopen函數的調用方式為: fopen(文件名,使用文件方式)
fopen("a1","r")
-
表示要打開名為"a1"的文件,使用文件方式為讀入”
-
fopen函數的返回值是指向a1文件的指針
-
用"r"方式打開的文件只能用于向計算機輸入而不能用作向該文件輸出數據,而且該文件應該已經存在,并存有數據,這樣程序才能從文件中讀數據。
-
不能用"r"方式打開一個并不存在的文件,否則出錯
-
用“w”方式打開的文件只能用于向該文件寫數據(即輸出文件),而不能用來向計算機輸入。如果原來不存在該文件,則在打開文件前新建立一個以指定的名字命名的文件。
-
如果原來已存在一個以該文件名命名的文件,則在打開文件前先將該文件刪去,然后重新建立一個新文件。
-
FILE *fp;
-
fp=fopen("al“w");//文件a1是否存在有不同處理
-
“a“方式打開, 如果希望向文件末尾添加新的數據(不希望刪除原有數據),則應該用“a"方式打開·但此時應保證該文件已存在;否則將得到出錯信。
-
打開文件時,文件讀寫標記移到文件末尾
-
FILE *fp;
-
fp=fopen("a1",“a); //可以在文件a1末尾追加數據
關閉文件用fclose函數。
- fclose函數調用的一般形式為: fclose(文件指針);例如:
- (fp)fclose
- 如果不關閉文件將會丟失數據。
文件讀寫字符:
fgetc(fp)
- 從p指向的文件讀人一個字符
- 讀成功,帶回所讀的字符,失敗則返回文件結束標志 EOF(即-1)
fputc(ch,fp) - 把字符 ch 寫到文件指針變量 ip所指向的文件中
- 輸出成功,返回值就是輸出的字符;輸出失敗,則返回 EOF(即-1)
文件讀寫:
格式化讀寫文件的一般調用方式:
fprintf(文件指針,格式字符串,輸出列表);
fscanf(文件指針,格式字符串,輸入列表);
如:
fprintf(fp,"%d,%6.2f",i,f);
fscanf(fp,"%d,%f",&i,&f);
二進制方式讀寫文件的一般調用:
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
隨機讀寫數據文件:
rewind函數的作用是使用文件標記重新返回文件的開頭,此函數沒有返回值
fseek(文件類型指針,位移量,起始點)
- 起始點0代表‘文件開始位置’,1為‘當前位置’,2為‘文件末尾位置’
- 位移量指以起始點為基點,向前移動的字節數,位移量應是long型數據(在數字的末尾加一個字母L)
ftell函數的作用是得到流式文件中文件位置標記的當前位置
- 由于文件中的文件位置標記經常移動,人們往往不容易知道其當前位置,所以常用ftell函數得到當前位置,用相對于文件開頭的位移量來表示。
- 如果調用函數時出錯(如不存在fp指向的文件)ftell函數返回值為-1L
遞歸的邏輯
#include<stdio.h>
int main(){
int age(int n); //聲明調用函數,還未調用
print('No.5,age:%d\n',age(5)); //直接調用函數
return 0;
}
int age(int n){
int c;
if(n===1) c=10;
else c=age(n-1)+2;
return (c);
}


浙公網安備 33010602011771號