C語言基礎(chǔ)(上)

一、C語言的歷史

C語言誕生于美國的貝爾實(shí)驗(yàn)室宝与,在B語言的基礎(chǔ)之上發(fā)展而來。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯习劫、處理低級存儲(chǔ)器咆瘟、僅產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。C語言描述問題比匯編語言迅速诽里、工作量小袒餐、可讀性好、易于調(diào)試谤狡、修改和移植灸眼,而代碼質(zhì)量與匯編語言相當(dāng)。

C語言誕生于美國的貝爾實(shí)驗(yàn)室墓懂,在B語言的基礎(chǔ)之上發(fā)展而來焰宣。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲(chǔ)器捕仔、僅產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言匕积。C語言描述問題比匯編語言迅速盈罐、工作量小、可讀性好闪唆、易于調(diào)試盅粪、修改和移植,而代碼質(zhì)量與匯編語言相當(dāng)悄蕾。

二票顾、C語言能干什么

C語言兼顧了匯編語言和高級語言的優(yōu)點(diǎn)库物,運(yùn)行效率只比匯編語言代碼生成的目標(biāo)程序效率低10%~20%。因此C語言廣泛使用在編寫系統(tǒng)軟件上民晒。得益于C語言的高效和能夠直接和系統(tǒng)資源進(jìn)行交互,也經(jīng)常用于編寫硬件驅(qū)動(dòng)程序磁滚!我們使用的windows系統(tǒng)和unix系統(tǒng)都是C/C++語言編寫的!(C++是C的一個(gè)擴(kuò)展)

三晒他、數(shù)據(jù)的定義

C語言有以下幾種數(shù)據(jù)類型

類型 打印格式符 字節(jié)大小
char %c 1
unsigned char %c 1
int %d 4
unsigned int %d 4
short %d 2
unsigned short %d 2
long %ld 8
unsigned long %lu 8
long long %lld 8
float %f 4
double %lf 8
long double %Lf 16

測試結(jié)果如下

#include <stdio.h>

int main(){
    char ch = 'a';
    printf("char = %c ,size = %lu\n\n",ch,sizeof(char));

    unsigned char unCh = 'b';
    printf("unsigned char = %c ,size = %lu\n\n",unCh,sizeof(unsigned char));

    int numA = 1;
    printf("int = %d ,size = %lu\n\n",numA,sizeof(int));

    unsigned int numB = 1;
    printf("unsigned int = %d ,size = %lu\n\n",numB,sizeof(unsigned int));

    short numC = 10;
    printf("short = %d ,size = %lu\n\n",numC,sizeof(short));

    unsigned short numD = 10;
    printf("unsigned short = %d ,size = %lu\n\n",numD,sizeof(signed short));

    float numE = 10;
    printf("float = %f ,size = %lu\n\n",numE,sizeof(float));

    double numF = 100;
    printf("double = %lf ,size = %lu\n\n",numF,sizeof(double));

    long numG = 1000;
    printf("long = %ld ,size = %lu\n\n",numG,sizeof(long));

    long long numH = 10;
    printf("long long = %lld ,size = %lu\n\n",numH,sizeof(long long));

    unsigned long  numI= 1000;
    printf("unsigned long = %lu ,size = %lu\n\n",numI,sizeof(unsigned long));

    long double numJ = 100;
    printf("long double = %Lf ,size = %lu\n\n",numJ,sizeof(long double));

    return 0;
}

運(yùn)行結(jié)果

運(yùn)行結(jié)果

變量的聲明

語法定義

數(shù)據(jù)類型 變量名
例如:int sum;
變量在定義之后如果在使用前未賦值咪鲜,其值是不確定的猾警!

變量命名規(guī)則

  1. 變量名只能由$、_穴墅、英文字母和數(shù)字組成
  2. 變量開頭只能是$玄货、 _ 或者英文字母
  3. 變量的名稱不能和C語言的內(nèi)置關(guān)鍵字重名
    例如以下變量的命名都是不合法的:123a、int隘世、a12*

其他

sizeof():獲取變量或者類型的所占字節(jié)數(shù)。

四械媒、運(yùn)算符優(yōu)先級

運(yùn)算符優(yōu)先級
運(yùn)算符優(yōu)先級
運(yùn)算符優(yōu)先級

說明

同一優(yōu)先級的運(yùn)算符兰绣,運(yùn)算次序由結(jié)合方向所決定缀辩。
簡單記就是:! > 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > && > || > 賦值運(yùn)算符

五健无、判斷結(jié)構(gòu)

C語言中的判斷句語法如下:

if (布爾值) {
    funcA();
} else if (布爾值){
    funcB();
} else {
    funcC();
}

語法規(guī)則如下

  1. C語言中0表示為假叠穆,非0即為真
  2. if()語句中的布爾值為真時(shí)才會(huì)執(zhí)行if語句塊內(nèi)的代碼,否則向下繼續(xù)判斷
  3. if代碼塊的內(nèi)的代碼只有一句時(shí)可以省略花括號嚷硫,超過一句時(shí)必須加上花括號
  4. 整個(gè)if...else...代碼塊中只有一塊代碼會(huì)得到執(zhí)行。例如上述代碼中funcA()起暮、funcB()鞋怀、funcC()中只有一個(gè)函數(shù)會(huì)得到執(zhí)行。
  5. else代碼塊只有在之前的判斷條件都為假時(shí)才會(huì)得到執(zhí)行残腌。
  6. 一個(gè)判斷結(jié)構(gòu)中else if代碼塊和else代碼塊不是必須的

示例程序

#include <stdio.h>
int main() {
    int score = 90;
    if(score < 60)
        //單行代碼可以不加花括號
        printf("this student grade is D\n");
    else if (score < 70){
        //多行代碼需要加上花括號
        printf("this student grade is ");
        printf("C \n");
    }else if(score < 80){
        printf("this student grade is B\n");
    }else{
        printf("this student grade is A\n");
    }
    return 0;
}

除了if...else...之外還有另外一種判斷結(jié)構(gòu): switch語句

switch (expression) //這里表示需要匹配的值
{
case /* constant-expression */: //可匹配的選項(xiàng)
     /* code */
     break; //匹配成功之后跳出整個(gè)switch語句
default: //當(dāng)所有可匹配項(xiàng)都不匹配時(shí)執(zhí)行的語句塊
     break;
}

三目運(yùn)算表達(dá)式

語法結(jié)構(gòu)

布爾表達(dá)式 孩灯? A : B败匹;

語法規(guī)則

  1. 當(dāng)布爾表達(dá)式為真時(shí)返回A掀亩,為假時(shí)返回B
  2. A 或者 B 可以是另外一個(gè)三目運(yùn)算表達(dá)式
    示例:
#include <stdio.h>
int main(){
    //可以使用括號包裹增加可讀性
    int num = 1 > 2 ? 1 : (2 > 3 ? 2 : 3);
    printf("num = %d\n",num):
    return 0;
}

switch語句語法規(guī)則

1、expression中的值必須是整形常量表達(dá)式缆巧,double之類的值是不允許的
2陕悬、default總是在所有條件都不匹配時(shí)執(zhí)行芙委。
3推捐、當(dāng)一個(gè)選項(xiàng)匹配之后沒有break牛柒。則會(huì)之直接順序執(zhí)行后續(xù)的代碼皮壁,不管case是否匹配,直到遇到break語
示例代碼:

#include <stdio.h>
int main(){
    int a = 100;
    switch (a)
    {
    case 100:
        printf("this char is a\n");
    case 'b':
        printf("this char is b\n");
    default:
        printf("this char is default\n");
        break;
    case 'c':
        printf("this char is c\n");
        break;
    }
    return 0;
}
//執(zhí)行結(jié)果:
/*
this char is a
this char is b
this char is default
*/

六滴须、循環(huán)結(jié)構(gòu)

for循環(huán)

語法格式

for(expression A; expression B; expression C){
    // write code
}

語法規(guī)則

  1. A、B朝氓、C三個(gè)部分的代碼都可為空赵哲,但是 ; 是不可缺少的磅网。
  2. A部分代碼只在循環(huán)開始時(shí)執(zhí)行一次涧偷!隨后執(zhí)行B喻鳄,再執(zhí)行括號內(nèi)代碼除呵,最后執(zhí)行C,再執(zhí)行B泛豪,以此循環(huán)诡曙,直到 B 表達(dá)式的布爾值為真
  3. for循環(huán)可相互嵌套,當(dāng)花括號內(nèi)代碼只有一句時(shí)渊涝,花括號可省略

示例代碼

#include <stdio.h>
int main(){
    for(int i = 1;i < 10;i ++){
        for(int j = 1;j <= i;j ++)
            printf("%d * %d = %d\t",i,j,i * j);
        printf("\n");
    }
    return 0;
}

void test(){
    for(;;){
        printf("這是一個(gè)死循環(huán)"):
    }
}

執(zhí)行結(jié)果

運(yùn)行結(jié)果

while循環(huán)

語法格式

while(expression){//表達(dá)式結(jié)果為真時(shí)才會(huì)執(zhí)行內(nèi)部代碼
    //write your code
}

語法規(guī)則

  1. 每次執(zhí)行先判斷expression表達(dá)式的結(jié)果為真時(shí)才會(huì)執(zhí)行花括號內(nèi)部代碼
  2. 當(dāng)內(nèi)部只有一行代碼時(shí)可省略花括號

示例代碼

#include <stdio.h>
int main(){
    
    int count = 10;
    while(count){
        // count -- => count = count - 1;
        printf("count = %d \n", count --);
    }
    return 0;
}

do...while循環(huán)

語法格式

do{
    // write your code
}while(expression);

語法規(guī)則

  1. do...while循環(huán)開始時(shí)先執(zhí)行花括號內(nèi)部的代碼盖文,再判斷 expression 的結(jié)果是否為真五续,為真則繼續(xù)執(zhí)行,為假直接結(jié)束循環(huán)
  2. do...while循環(huán)至少會(huì)執(zhí)行一次

示例代碼

#include <stdio.h>
int main(){
    do
    {
        // -- count => count = count - 1
        printf("count = %d \n", --count);
    } while (count > 0);
    return 0;
}

循環(huán)終止

  1. 三種循環(huán)都可以使用continue關(guān)鍵字提前結(jié)束本次循環(huán)它碎,相當(dāng)于花括號內(nèi)部代碼提前執(zhí)行完畢
  2. 三種循環(huán)都可以使用break關(guān)鍵字直接跳出循環(huán)體

count -- 和 count ++ 的區(qū)別

#include <stdio.h>
int main(){
    int x = y = 10;
    int numA = x --; // numA = 10,x = 9
    int numB = -- y; // numB = 9,y = 9
    /*
        count -- 和 count ++的區(qū)別主要在于:
            count-- 是先賦值給numA再執(zhí)行自減操作
            --count 是先執(zhí)行自減操作再賦值給numB
    */
    return  0;
}

以上就是本次C語言基礎(chǔ)上的全部內(nèi)容傻挂。C語言是我們編程的基礎(chǔ)語言金拒,C語言學(xué)好了再學(xué)習(xí)Java、python幢码、go等語言都很快速宛官!編程是一門重視實(shí)操的課程底洗,在學(xué)習(xí)完理論知識后需要結(jié)合實(shí)操才能說真正掌握珊擂!可以多動(dòng)手做做C語言教材后面的習(xí)題摧扇,學(xué)有余力的同學(xué)可以在leetcode上做一做題目!我們下期見在张!

https://leetcode-cn.com/leetbook/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痴鳄,一起剝皮案震驚了整個(gè)濱河市螺句,隨后出現(xiàn)的幾起案子趟妥,更是在濱河造成了極大的恐慌披摄,老刑警劉巖疚膊,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件璧函,死亡現(xiàn)場離奇詭異善炫,居然都是意外死亡宪萄,警方通過查閱死者的電腦和手機(jī)拜英,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狰右,“玉大人嫁佳,你說我怎么就攤上這事」饶海” “怎么了蒿往?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湿弦。 經(jīng)常有香客問我瓤漏,道長,這世上最難降的妖魔是什么颊埃? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任罗标,我火速辦了婚禮证膨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灶似。我一直安慰自己砌创,他們只是感情好宰缤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布语淘。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桃熄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天设凹,我揣著相機(jī)與錄音素标,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛艺蝴,可吹牛的內(nèi)容都是我干的胯盯。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼梢什,長吁一口氣:“原來是場噩夢啊……” “哼猜极!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體困乒,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谭企,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年欲低,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了块蚌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片球昨。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡璃谨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤夸溶,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站扫皱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏氢妈。R本人自食惡果不足惜首量,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一加缘、第九天 我趴在偏房一處隱蔽的房頂上張望觉啊。 院中可真熱鬧,春花似錦勋乾、人聲如沸辑莫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忌锯,卻和暖如春领炫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脚猾。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工砚哗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛛芥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓称勋,卻偏偏與公主長得像赡鲜,于是被迫代替她去往敵國和親庐船。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容