關(guān)于C的一些基礎(chǔ)皮毛

  1. 一個(gè)C程序就是由若干頭文件(#include)和函數(shù)組成,并有且只有一個(gè)主函數(shù)
  2. 在最新的C標(biāo)準(zhǔn)中,main函數(shù)前的類型為int而不是void(表示無(wú)類型沒(méi)有返回值)
  3. 單行注釋: //、多行注釋: /* */
  4. 標(biāo)識(shí)符:盡量不超8位、分大小寫、非關(guān)鍵字、有意義
  5. 變量賦值的兩種方式:1.先聲明再賦值 2.聲明的同時(shí)賦值
  6. 基本數(shù)據(jù)類型分四大類:


  • 普通整型int,字符型char,浮點(diǎn)型float,雙精度浮點(diǎn)型double
  1. 常量分為直接常量(即字面量)和符號(hào)常量(需要#define 標(biāo)識(shí)符 常量值來(lái)定義)
  2. 變量可在編譯時(shí)可自動(dòng)類型轉(zhuǎn)換,char類型數(shù)據(jù)轉(zhuǎn)換為int類型數(shù)據(jù)遵循ASCII碼中的對(duì)應(yīng)值,字節(jié)小的可以向字節(jié)大的自動(dòng)轉(zhuǎn)換,但字節(jié)大的不能向字節(jié)小的自動(dòng)轉(zhuǎn)換
  3. 強(qiáng)制類型轉(zhuǎn)換((數(shù)據(jù)類型) (表達(dá)式)):必須加括號(hào);不會(huì)修改原值;不遵循四舍五入原則
  4. 算數(shù)運(yùn)算符:加+ 減- 乘* 除/ 求余%(運(yùn)算后的符號(hào)取決于被模數(shù)的符號(hào)) 自增++ 自減--
  5. 關(guān)于自增運(yùn)算符:-/+號(hào)在前:先運(yùn)算再取值,在后則反之
  6. 復(fù)合賦值運(yùn)算符:即在簡(jiǎn)單運(yùn)算符前面加=(如+=)
  7. 關(guān)系運(yùn)算符: > >= < <= == !=
  8. 邏輯運(yùn)算符:與&& 或|| 非!
  9. 三目運(yùn)算符:表達(dá)式1? 表達(dá)式2:表達(dá)式3
  10. 分支結(jié)構(gòu):
if (表達(dá)式){
    代碼塊
    if (表達(dá)式){  // 嵌套if-else語(yǔ)句
    代碼塊Inner
    }
} 
[else if (表達(dá)式2)]{      // 多重if-else語(yǔ)句
代碼塊2
}
[else]{
代碼塊3
}
  1. 循環(huán)結(jié)構(gòu):while循環(huán)、do-while循環(huán)(先do再循環(huán),while后面需有分號(hào))、for循環(huán)(1初始;2判斷;3步進(jìn),分號(hào)不能省略,變量要在for之前定義)
  2. 用循環(huán)結(jié)構(gòu)和操作運(yùn)算符實(shí)現(xiàn)水仙花數(shù)字:
/*所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)*/
#include <stdio.h>
int main()
{
    //定義三位數(shù)num,個(gè)位數(shù)sd,十位數(shù)td,百位數(shù)hd
    int num, sd, td, hd;
    //循環(huán)所有三位數(shù)
    for(num=100; num < 1000; num++)
    {
        // printf("%d", num);
        // 獲取三位數(shù)字num百位上的數(shù)字
        hd =        num/100         ;
        //獲取三位數(shù)字num十位上的數(shù)字
        td =        num/10%10         ;
        //獲取三位數(shù)字num個(gè)位上的數(shù)字
        sd =        num%10         ;
        //水仙花數(shù)的條件是什么?
        if(hd * hd * hd + td * td * td + sd * sd * sd == num) 
        {
            printf("水仙花數(shù)字:%d\n", num);    
        }
    }
    return 0;    
}
  1. 多重循環(huán):一般用2~3層循環(huán),父循環(huán)執(zhí)行一次,子循環(huán)需要全部執(zhí)行完,直到跳出循環(huán)
  2. 分支結(jié)構(gòu)switch:
switch(表達(dá)式){
    case1 exp1: code1; break;  // case后的各常量表達(dá)式不能相同,否則報(bào)錯(cuò)
    case2 exp2: code2; break;   // 代碼塊后面的分號(hào)不要忘
    caseN expN: codeN; break;   
    [default: codeX; break;]
}

switch后面的表達(dá)式語(yǔ)句只能是整型或字符型
在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)
case和default子句的順序可以變動(dòng),結(jié)果不變

  1. goto語(yǔ)句:執(zhí)行后,程序?qū)⑻D(zhuǎn)到定義的標(biāo)識(shí)符(一般用英文大寫)處并執(zhí)行其后的語(yǔ)句
  2. 函數(shù)的定義:
/*其中[]內(nèi)為可選內(nèi)容*/
[數(shù)據(jù)類型說(shuō)明] 函數(shù)名([參數(shù)]){    // 數(shù)據(jù)類型默認(rèn)是int
    執(zhí)行代碼塊;
    return (表達(dá)式);
}

自定義函數(shù)盡量放在main函數(shù)之前,如果在其后需要在前面先聲明

形參是用來(lái)接收調(diào)用該函數(shù)時(shí)傳入的參數(shù),
實(shí)參是在調(diào)用時(shí)傳遞該函數(shù)的參數(shù)

遞歸函數(shù):自我調(diào)用且有完成狀態(tài),具有遞推和回推兩個(gè)階段

  1. 函數(shù)返回值為三目運(yùn)算符的寫法:return 判斷?表達(dá)式1:表達(dá)式2;
  2. 變量存儲(chǔ)類別:按生存周期可分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式;按存儲(chǔ)類別可分:自動(dòng)auto(可省略)、靜態(tài)static(分局部和外部)、來(lái)自寄存器register、來(lái)自外部extern
    • 靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,只賦初值一次(如無(wú)賦值則默認(rèn)為0或空字符)
    • 只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量,不能定義任意多個(gè)寄存器變量(有限)
    • 外部變量的意義是某函數(shù)可以調(diào)用在該函數(shù)之后定義的變量
  3. 內(nèi)部函數(shù):不能被其他源文件調(diào)用的函數(shù)(也稱靜態(tài)函數(shù)),用static定義
    外部函數(shù)(系統(tǒng)默認(rèn)):能被其他源文件調(diào)用的函數(shù),用extern定義
  4. 數(shù)組:一塊連續(xù)的、大小固定、數(shù)據(jù)類型一致的內(nèi)存空間(數(shù)組是相同類型變量集合);
    三種初始化:
    • 數(shù)據(jù)類型 數(shù)組名稱[數(shù)組長(zhǎng)度n] = {元素1, 元素2...元素n}(當(dāng)元素小于長(zhǎng)度,多余的元素默認(rèn)為0)
    • 數(shù)據(jù)類型 數(shù)組名稱[] = {元素1, 元素2...元素n}
    • 數(shù)據(jù)類型 數(shù)組名稱[數(shù)組長(zhǎng)度n];數(shù)組名稱[0] = 元素1;數(shù)組名稱[1] = 元素2;數(shù)組名稱[n-1] = 元素n
      在聲明數(shù)組后沒(méi)有進(jìn)行初始化的時(shí)候,static和extern類型的數(shù)組元素初始化元素為0,auto類型的數(shù)組的元素初始化值不確定

27.字符串是用數(shù)組定義的:

法1:
char 字符串名[長(zhǎng)] = "字符串值"
法2(在數(shù)組中不能寫中文):
char 字符串名[長(zhǎng)] = {'字符1', '字符2', '字符3', .... '字符n', '\0'}  //注意末尾的\0字符是結(jié)束標(biāo)志

/*字符串?dāng)?shù)組當(dāng)作形參時(shí)的寫法*/
void foo(char stringname[]){
    return;
}

常用字符串函數(shù):strlen(), strcmp(s1, s2), strcat(s1, s2), strcpy(s1, s2), atoi(s1)

  1. 多維數(shù)組:數(shù)組名后跟n個(gè)維度(稱作第一維下標(biāo)...第n維下標(biāo)),使數(shù)組中的元素可以再用下標(biāo)訪問(wèn),如下
    int number[2][5] = {{11,12,13,14,15}, {21,22,23,24,25}}
    可看作一個(gè)2×5的二位矩陣;多維數(shù)組的初始化與數(shù)組類似:
    • 數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};(必須指定的維數(shù),系統(tǒng)會(huì)根據(jù)元素總個(gè)數(shù)分配空間,當(dāng)知道元素總個(gè)數(shù)以及列的維數(shù)后,會(huì)直接計(jì)算出行的維數(shù))
    • 數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n]; 數(shù)組名稱[下標(biāo)1][下標(biāo)2]...[下標(biāo)n] = 值;(需要同時(shí)指定行和列的維數(shù))
  2. 求二維數(shù)組的對(duì)角線之和:
#include <stdio.h>
int main()
{
    int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int i,j;
    int sum=0;
    for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++){
           if((i+j)%2==0)    //關(guān)鍵點(diǎn)
           sum+= arr[i][j];
       }
    }
    printf("對(duì)角線元素之和是:%d\n",sum);
    return 0;    
}
  1. 結(jié)構(gòu)體:是用戶自定義的可用數(shù)據(jù)類型,可存儲(chǔ)不同類型變量集合(與數(shù)組相反),有幾種定義方法:
// 這里是定義了一個(gè)結(jié)構(gòu)體類型
struct weapon{
    char name[20];
    int cost;
    char memo[100];
};
// 法1:聲明和定義分離的形式
struct weapon weapon_number1;
// 法2:在聲明的時(shí)候定義,即在尾部加變量名
struct weapon{
    char name[20];
    int cost;
    char memo[100];
}weapon_number2;
// 法3:不指定結(jié)構(gòu)體名字,直接定義變量
struct{
    char name[20];
    int cost;
    char memo[100];
}weapon_number3;

初始化:用{}把常量依次傳入,即weapon_number1={"gun", 70, "warning"}
訪問(wèn)成員的值:用.(成員運(yùn)算符),weapon_number1.name
結(jié)構(gòu)體數(shù)組的聲明:由結(jié)構(gòu)體組成的數(shù)組
struct weapon weapon_numbers[2] // 初始化時(shí)需要依次指定6個(gè)常量
結(jié)構(gòu)體指針:

// 指針變量c指向結(jié)構(gòu)體weapon_number1
struct weapon * c;
c=&weapon_number1;

//調(diào)用結(jié)構(gòu)體成員,可用c->name替代(->稱作指向運(yùn)算符);
(*c).name;  // 指針兩側(cè)變量不能省略(因成員運(yùn)算符.的優(yōu)先級(jí)高于*)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,533評(píng)論 0 13
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,661評(píng)論 1 51
  • 我特別膽小一人兒,父母的不幸婚姻造成了我從小沒(méi)有安全感。我勇敢過(guò)兩次,第一次去追逐愛(ài)情,結(jié)果弄丟了自己;第二次忠誠(chéng)...
    半碗饅頭閱讀 195評(píng)論 0 1

友情鏈接更多精彩內(nèi)容