20160720IOS_C

1、運算符
取模運算符:%
增量運算符:++ 前綴,后綴
減量運算符:--
+=, -=, =, /=, %=
2、類型轉換基本規則:
(1)當出現在表達式里,有符號和無符號的char 和 short 類型都將被自動轉換為int,在需要的情況下,將自動被轉換為unsigned int
(2)在包含兩種數據類型的任何運算里,兩個值都被轉換稱兩種類型里較高的級別
(3)類型級別從高到低為:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int, int
(4)當作為函數的參數被傳遞時,char 和 short 會被轉換為int,float會被轉換為double,可以通過函數原型來阻止自動提升的發生
強制轉換類型:(type) 變量名
3、函數
返回值類型 函數名(參數列表) //沒有參數就用void , 形參:函數里聲明的參數,實參:傳遞給參數的值
{
statement;
}
4、關系運算符
<, <=, ==, >=, >, !=
5、for循環
for (count = 1; count <= NUMBER; count++)
{
statement;
}
可以使用逗號運算符在for循環中使用多個初始化或更新表達式
for (a = 1, b = 2; a < 100; a++, b++)
{
statement;
}
逗號運算符:從左到右執行
6、do while循環
do
{
statement;
} while (boolean)
7、數組
type arrayName[size];
數組元素編號從0開始,直到size-1
char數組,并且存在的最后一個元素是 \0 ,則該數組是字符串
C90, c99:
int m = 3, n = 4;
int arr1[m], arr[n]; c90不允許,c99允許
初始化:type arrayName[size] = {值列表};//當數值數目少于數組元素數目時,多余的數組元素被初始化為默認值
const type arrayName[size] = {值列表};//定義只讀數組
變量和數組元素未初始化的數值是不確定的
指定項目初始化:
int arr[6] = {[5] = 212};//C99 把arr[5]初始化為212
指定項目初始化注意事項:
int day[12] = {31, 28, [4] = 31, 30, 31, [1] = 29};
各元素的值: 0->31, 1->29, 2->0, 3->0, 4->31, 5->30, 6->31, 7->0, 8->0, 9->0, 10->0, 11->0
數組和指針:
arr[3]恒等于
(arr + 3)
&arr[3]等于arr + 3
變長數組:
并不表示在創建數組后,可以修改其大小。變長數組的大小在創建后就是保持不變的,“變”的意思是說其維大小可以用變量來指定
int sum2d(int rows, int cols, int ar[rows][cols]);
int sum2d(int, int, int ar[][]);//C99
8、if語句
if (expression)
{
statement;
}

    if (expression)
    {
        statement;
    }
    else //else與最近的if配對
    {
        statement;
    }
9、getchar(), putchar();
    char ch = getchar();//接收一個字符
    putchar(ch);//輸出一個字符
10、ctype.h  系列字符函數
    isalnum() 字母或數字
    isalpha() 字母
    isblank() 空白字符(空格、水平制表符、換行)
    iscntrl() 控制符
    isdigit() 阿拉伯數字
    isgraph() 除空格以外的字符
    islower() 小寫字母
    isprint() 可打印字符 
    ispunct() 標點符號
    isspace() 空白字符:空格、換行、走紙、回車、垂直制表符、水平制表符
    isuper() 大寫字母
    isxdigit() 十六進制數字字符
    tolower() 返回小寫字符
    toupper() 返回大寫字符
14、邏輯運算符
    &&, ||, ! 具有短路性
    #include <iso646.h> 后,可以使用 and, or, not
15、stdbool.h
    提供bool,true,false的定義,使用布爾類型時需要include
16、條件運算符
    expression ? if-true-expression : if-false-expression;
17、循環輔助語句 continue, break
    continue:
        (1)忽略剩余代碼,進行下一次迭代
        (2)位于嵌套結構中,忽略里層循環
    break:
        終止循環
18、switch語句
    switch(expression)
    {
        case exp1:
            statement;
            break;  //如果沒有break會往下執行
        default:
            statement;
            break;
    }
19、goto語句
    (1)定義標簽
        標簽名:
    (2)跳轉
        goto 標簽名;
20、緩沖分類
    完全緩沖I/O, 行緩沖I/O
    對于完全緩沖輸入來說,緩沖區滿時被清空(內容被發送至其目的地),這種類型的緩沖通常出現在文件輸入中,緩沖區的大小取決于系統,但512字節和4096字節是常見的值
    對于行緩沖I/O來說,遇到一個換行字符時將被清空緩沖區,鍵盤輸入是標準的行緩沖,按下回車鍵將清空緩沖區
21、file_efo.c
    #include <stdio.h>
    #include <stdlib.h> //為了使用exit()
    int main()
    {
        int ch;
        FILE *fp;
        char fname[50];
        printf("Enter the name of the file:");
        scanf("%s", fname);
        fp = fopen(fname, "r");
        if(fp == NULL)
        {
            printf("Failed to open file. Bye\n");
            exit(1);
        }
        while((ch = getc(fp) != EOF)
        {
            putchar(ch);
        }
        fclose(fp);
        return 0;
    }
22、函數
    返回值類型 函數名(類型 參數名, 類型 參數名)
    {
        
    }
    void fuc();//不會進行參數檢查
    void fuc2(void);//表明該函數確實不使用參數,編譯器就會檢查確實有沒有使用參數
    遞歸:
        調用自己的函數稱為遞歸
        遞歸函數必須在某一條件下返回確定的值,否則產生無限調用
    對形參使用const修飾符,編譯器會把形參當作常量來對待,無法修改
23、地址運算符 &
24、取值運算符 * 也叫間接運算符
    聲明一個指針: 類型 * 指針名
    指針可以作為函數的參數
    取指針地址——指針變量同其他變量一樣具有地址和數值,使用運算符&可以的餓到存儲指針本身的地址
    常量或非常量數據的地址賦給指向常量的指針是合法
    只有非長臉該數據的指針才可以賦給普通的指針
    const int * pc;//指向常量int類型的指針,指針可改,數據不可改
    int * const pc2;//常量指針,指針不可改,數據可改
    const int * const pc3;//指針不可改,常量不可改
    定義指向多維數組的指針: int (* pz)[2];//pz指向一個包含2個int值的數組
    指針之間的賦值規則比數值類型的賦值更加嚴格,類型不同就不行
25、復合文字
    創建一個包含兩個int值的無名稱數組:
        (int [2]) {10, 20}
        (int []) {10, 20, 30}
26、字符串I/O
    gets(字符串數組名):最后一個元素是\0,返回獲取的字符串的地址,如果出錯或gets()遇到文件結尾,返回一個空地址
    puts(字符串|字符串數組);
    字符串數組初始化:
        (1)char array1[size] = "this is a string.";
        (2)char array2[size] = {'t', 'h', 'i', 's', 'i', 's', 'a', 's','\0'};//這種方式最后一個元素必須是\0,多余的數組會被初始化為\0
    區別:
        char heart[] = "I love";//不能用于++, --
        char *head = "I like";//可用于++, --
        主要區別在于數組名heart是個常量,而指針head則是個變量
        head = heart;//合法
        heart = head;//非法
    fges()函數:多用于文件讀取
        (1)第二個參數來說明最大讀入字符數,如果這個參數值為n,fgets()就會讀取最多n-1個字符或者讀完一個換行符為止
        (2)如果fgets()讀取到換行符,就會把它存到字符串里,而不是想gets()那樣丟棄它
        (3)第三個參數來說明讀哪一個文件。使用stdin作為參數,從鍵盤上讀數據
    scanf(), gets():
        scanf更基于獲取單詞而不是獲取字符串,gets函數會讀取所有的字符,直到遇到第一個換行符為止
    puts(地址參數):參數是一個地址
        顯示字符串時自動在其后添加一個換行符,直到遇到空白字符\0
    fputs()函數:多用于文件讀取
        第二個參數說明要寫的文件,使用stdout作為參數來進行輸出顯示
        fputs()并不為輸出自動添加換行符
27、字符串函數 string.h 
    strlen()函數:返回字符串的長度
    strcat()函數:兩個參數為char * 類型,將第二個參數附加到第一個參數后面
    strncat()函數:三個參數,第三個指定第二個參數添加到第一個參數的長度,當加到足夠字符或遇到空字符時停止
    strcmp()函數:兩個字符串參數,a1>a2返回1,a1=a2返回0,a1<a2返回-1
    strncmp(a1, a2, int)函數:第三個參數指定a1, a2比較的字符串長度
    strcpy(a1, a2)函數:把a2的內容復制到a1,要保證a1的控件足夠大容納,返回第一個參數的字符的地址,第一個參數可以使數組中的中間的一部分
    聲明一個數組將為數據分配存儲控件,而聲明一個指針只為一個地址分配存儲空間
    strncpy(a1, a2, length):第三個函數指明最大可復制的字符數,如果a2比length大,則沒有添加空字符,因此需要設置n為目標數組大小減1,然后將最后一個數組元素賦值為'\0'
    sprintf(存儲, 轉換說明字符, 項目列表)函數:跟printf類似,將結果存儲到存儲地址里
    
    常用:
        char *strcpy(char * s1, const char * s2);
            把s2指向的字符串(包括空字符)復制到s1指向的位置,返回值是s1
        char *strncpy(char * s1, const char * s2, size_t n);
            把s2指向的字符復制到s1指向的位置,復制的字符數不超過n個,返回值是s1.空字符后的字符不被賦值,如果原字符串的字符數少于n個,在字符串中就以空字符填充。如果源字符串的字符數大于或等于n個,空字符就不被賦值,返回值是s1
        char *strcat(char * s1, const char * s2);
            s2指向的字符串被復制到s1指向字符串的結尾,復制過來的s2所指字符串的第一個字符覆蓋了s1所指字符結尾的空字符,返回值是s1
        char *strncat(char * s1, const char * s2, size_t n);
            s2字符串中只有前n個字符被追加到s1字符串,復制過來的s2所指字符串的第一個字符覆蓋了s1所指字符結尾的空字符,s2字符穿中的空字符及其后的任何字符都不會被賦值,并且追加一個空字符到所得結果后面,返回值是s1
        int strcmp(const char * s1, const char * s2);
            如果s1字符串在機器編碼順序中落后于s2字符,函數的返回值是一個整數;如果兩個字符串相同,返回值是0;如果第一個字符串在機器編碼順序中先于第二個字符串,返回值是一個負數
        int strncmp(const char * s1, const char * s2, size_t n);
            函數的作用和strcmp()一樣,只是比較n個字符后或者遇到第一個空白字符時會停止比較,由二者中最先被滿足的那一個條件終止比較過程
        char * strpbrk(const char * s1, const char * s2);
            返回一個指針,指向字符串s1中存放s2字符中的任何字符的第一個位置,如果沒有找到任何字符,返回空指針
        char *strrchr(const char * s, int c)
            返回一個指針,指向字符串s中字符c最后一次出現的地方(標志結束的空字符是字符串的一部分,因此也可以搜索到它),如果沒找到該字符,函數就返回空指針
        char *strstr(const char * s1, const char * s2)
            返回一個指針,指向s1字符串中第一次出現s2字符串的地方,如果在s1中沒找到s2字符串,函數就返回空指針
        size_t strlen(const char * s)
            返回s字符串中的字符個數,其中布包裹標志結束的空字符
        char *strcpy(char * s1, const char * s2)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容