C語言程序設計基礎知識點概括


C語言程序設計基礎知識點概括

C語言程序設計基礎知識點
1、函數是C語言的基本構成單位。main函數是C語言程序的唯一入口。
2、C語言程序開發過程。
編譯過程:將以.c或.cpp結尾的源程序文件經過編譯成計算機能識別的二進制文件目標文件,編譯過程中,編譯器會檢查每條語句的語法錯誤。
鏈接過程:連接器將所生成的目標文件鏈接生成最后可直接運行的的執行文件。
3、算法:解決問題的具體步驟的描述。
算法的特性:
---有窮性:算法必須在有限步驟后結束,而且每一步都在有限時間內完成。
---確定性:每條指令無二義性。相同的輸入只能得到相同的輸出。
---可行性:算法描述中的操作和功能都可以通過已實現的基本運算執行有限次來實現。
---輸入:算法有零個或多個輸入。
---輸出:算法至少有一個或多個輸出。
4、變量命名規則:
大小寫字母、數字和下划線組成,可以以字母或下划線開頭,不能使C語言的關鍵字。
5、數據類型:基本數據類型有int,char,float,double,void
整形: int 占4個字節16位。-32768~32767
無符號整形: unsigned int 占4個字節16位。0~65537
短整型: short int 占2個字符8位。
無符號短整型:unsigned short 占2個字節8位。
長整型: long int 占4個字節32位。
無符號長整型:unsigned long int 占4個字字節32位。
float和double類型的異同:
--同:都是C語言的浮點數據類型,帶精度的數據類型。
--異:
占用內存不同:單精度浮點型占用4個字節,雙精度浮點型占用8個字節。
有效數位不同:float有效數位8個,double有效數位16個。
char類型:內存中以ASCII碼存放,在其取值范圍內可以與整數一起使用,如:char c = 'A' + 10;則c為K。
常見的字符對應的ASCII碼:'0':48,'A':65,'a':97
大小寫字母ASCII值相差32。
6、運算符
算術運算符:+ - * / % ++ --  (注:%兩邊的對象都需要是正數)
賦值運算符:= += -= *= /= %=
關系運算符:> < >= <= == !=
邏輯運算符:&& || !
三元運算符:表達式1 ?表達式2 :表達式3
運算符優先級:
( ): 自左向右結合
! ++ -- sizeof: 自右向左結合
* / %: 自左向右結合
+ - : 自左向右結合
< > <= >=:自左向右結合
== !=: 自左向右結合
&& ||: 自左向右結合
= += -= *= /= %= 自左向右結合
7、類型轉換
自動轉換:不同數據類型的數據進行運算時,由編譯器自動完成。轉換規則:由短整型和字符型向整形轉換,整形向無符號整形轉換,無符號整形向長整型轉換,長整型和單精度浮點型向雙精度浮點型轉換。(字節少的向字節多的轉換)
強制類型轉換:(類型名)變量名或數值。如果是高向低轉換則會丟失多余的精度。低精度向高精度轉換,多余的補上0。
8、輸入輸出
(1)printf函數
常見格式控制字符
%d:將參數按整形輸出。
%c:按字符輸出。
%s:輸出字符串。
%f:帶小數點形式輸出。
%md:輸出數據占m個位寬,數據長度左補空格,超出按原樣輸出。
%m.nf:n表示小數位數。
(2)putchar( ): 向終端輸出一個字符。注意:使用沒有換行符。
(3)puts( ): 向終端輸出字符串。int puts(const char *string);
(4)scanf( ): 輸入。int scanf(const char * restrict format,...);  注:從終端中輸入空格,會使scanf獲取終端,空格后面的舍棄。
(5)getchar( ):向終端接受一個字符。getc(stdin)
(6) gets( ):向終端接受一個字符串。char *gets(char *string);注意:gets不檢測字符串string的大小,容易造成溢出,且LinuxC不支持該函數,可以使用fgets代替。fgets(s, size, stdin)。
9、程序結構設計
(1)程序的三種基本機構:順序結構,分支結構,循環結構。
(2)分支結構:if if-else switch-case
注意1:if-else語句的二義性,C語言規定else永遠與最近的if配對。合理的編程規范,if-else每一個語句塊均使用{ }括出。
注意2:switch括號中要求數據類型為整形或字符表達式。注意case后面要有break跳出,不然會一直往下執行,知道找到一個break跳出或者繼續往下執行完default。
(3)循環結構:while( ) do-while( ); for( )
(4)continue:只能在循環里面試用,作用:結束該次循環,直接執行下一次循環。
(5)break:結束該層循環。
10、數組
數組的特點:
數組在內存中連續存儲多個元素的結構,一個數組存放的元素的地址是連續的。
數組的大小是固定的,所有的元素的數據類型是相同的。
數組的定義和初試化:
定義:數據類型 數組名[數組大小];
一維數組初始化:
int array[10] = {10,9,8,7,6,5,4,3,2,1};
int array[10]={10,9,8,7,6,5,4,3,2,1,0};//越界
數組初試化元素個數小於數組大小,后面默認為0。 二維數組初始化:
int array[2][3]={ {1,2,3}, {4,5,6} };
定義二維數組可以省略第一維的值,但不能省略第二維的值。二維數組的存放順序是按行存放。
如:int array[][3]={ {1,2,3}, {4,5,6} };//定義2行3列數組
int array[2][]={ {1,2,3}, {4,5,6} };//錯誤,不能省列值。
數組的使用:數組的索引是從0開始。
一維數組:array[序列號]
二維數組:array[行序列號][列序列號]
11、字符串
(1)字符串是由雙引號括起來的存放在連續內存地址的任意字符。
C語言中沒有特定的字符串變量,通常使用數組存放字符串。
字符串的定義方式:
char string = "Hello";//使用指針定義一個字符串常量
char string[]="Hello";//使用數組定義一個字符串。
(2)字符數組與字符串的區別:
定義:
字符數組:存儲字符的數組。
字符串數組:一種特殊的字符數組,存放以\0結尾。
長度:字符數組大小與字符數相同,字符串數組的大小等於字符數加上結束符'\0'。
(3)字符串處理函數:
拷貝
char *strcpy(char* dest, const char *src):拷貝字符串,注意該函數沒有限定大小,容易越界,
char *strncpy(char *dest,char *src,size_t n);拷貝字符串,對strcpy進行優化,限制了拷貝長度,注意如果長度size與dest數組大小相等時,會缺少結束符\0。
int sprintf( char *buffer, const char *format [, argument] … );
建議使用sprintf函數拷貝字符串。
void memcpy(void *dest, const void *src, size_t n); 內存塊拷貝,需要注意的是第一第二個參數需要是指針。
strcat:字符串連接。
extern char *strcat(char *dest, const char *src);
strcmp(str1, str2):字符串比較。相同返回0。
strlen( s1[], s2[]):字符串長度。
12、指針
指針也是一個變量,只不過該變量存放的是另外一個對象的內存地址。
聲明和初始化:指針變量類型 *指針變量名。使用指針時,需要在定義的同時進行聲明,防止出現野指針。指針變量名=NULL;
指針的運算:指針變量 = 地址;
int a[5]; int *p = a;定義數組名為a的數組,將數組的首地址賦值給p。p指向數組的第一個元素。&a[0]表示數組的第一個元素的地址。
數組第1個元素的地址: a,&a[0],p
數組第i+1個元素的地址:a+i, &a[i], p+i, &p[i]
數組的第一個元素的值: a[0], p[0], *a, *p
數組的第i+1個元素的值: a[i], p[i], *(a+i), *(p+i)
++ -- :使用一次遞增遞減,指針就移動一個單位,一個類型為T的指針的移動。
指針加上或減去某個整數值n:指針將移動n個單位。
13、typedef :typedef 類型名 標識符
typedef只是將已經存在的類型用一個新的名字來代表。typedef可以為各種類型說明一個新名,但不能用來為變量名說明一個新名。
14、枚舉:enum 枚舉名 {符號1,符號2...}
枚舉類型為一組在邏輯上密不可分的整形提供便於記憶的符號。默認情況下第一個枚舉符號值為0,往后一個加1。
15、結構
結構是一種構造數據類型,它是由若干數據項組合而成的復雜的數據對象,這些數據項稱為結構成員。
定義結構:struct structrename
{
datatype variable1;
datatype variable2;
...
};
聲明結構變量:struct 結構名 結構變量名;
表示結構變量成員:變量名.成員名;
16、預處理命令
宏定義:#define 標識符 字符串:在編譯時,將用字符串替換程序中出現的所有標識符。如:#define PI 3.14
文件包含處理:
#include“文件名”:系統將先在用戶當前目錄下查找文件,找不到將在系統目錄下找。
#include<文件名>:<>系統只在系統目錄中查找該文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM