17C語言培訓(xùn)知識小百科

一、程序結(jié)構(gòu)
C 程序主要包括以下部分:
 預(yù)處理器指令
 函數(shù)
 變量
 語句 & 表達(dá)式
 注釋
一個(gè)簡單的程序
#include <stdio.h>
 
int main()
{
   /* 我的第一個(gè) C 程序 */
   printf("Hello, World! \n");
   
   return 0;
}
     程序解釋
1.程序的第一行 #include <stdio.h> 是預(yù)處理器指令,告訴 C 編譯器在實(shí)際編譯之前要包含 stdio.h 文件。
2.下一行 int main() 是主函數(shù),程序從這里開始執(zhí)行。
3.下一行 /*...*/ 將會(huì)被編譯器忽略,這里放置程序的注釋內(nèi)容。它們被稱為程序的注釋。
4.下一行 printf(...) 是 C 中另一個(gè)可用的函數(shù),會(huì)在屏幕上顯示消息 "Hello, World!"。
5.下一行 return 0; 終止 main() 函數(shù),并返回值 0。

                     數(shù)據(jù)類型
類型                     存儲大小           值范圍
char                     1 字節(jié)             -128 到 127 或 0 到 255
unsigned char      1 字節(jié)             0 到 255
signed char          1 字節(jié)             -128 到 127
int                         2 或 4 字節(jié) -   32,768 到 32,767 或 -2,147,483,648 到2,147,483,647
unsigned int          2 或 4 字節(jié)     0 到 65,535 或 0 到 4,294,967,295
short                     2 字節(jié)             -32,768 到 32,767
unsigned short      2 字節(jié)             0 到 65,535
long                       4 字節(jié)             -2,147,483,648 到 2,147,483,647
unsigned long       4 字節(jié)              0 到 4,294,967,295

整型(基本型):類型說明符為int,在內(nèi)存中占2個(gè)字節(jié)。 
短整型:類型說明符為short int或short。所占字節(jié)和取值范圍均與整型(基本型)相同。
 
長整型:類型說明符為long int或long,在內(nèi)存中占4個(gè)字節(jié)。 
無符號型:類型說明符為unsigned。 
無符號型又可與上述三種類型匹配而構(gòu)成: 

單精度(float型)、雙精度(double型)和長雙精度(long double型)三類。
單精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為3.4E-38~3.4E+38,只能提供七位有效數(shù)字
雙精度型占8 個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為1.7E-308~1.7E+308,可提供16位有效數(shù)字。
 
長雙精度型16 個(gè)字節(jié)(128位)內(nèi)存空間,可提供18-19位有效數(shù)字。
       
           
            常見常用符號
\b 退格(當(dāng)前位置啊后退一個(gè)字符)
\f 走紙換頁(當(dāng)前位置移到下一頁的開頭)
\n 換行(當(dāng)前位置移到下一行的開頭)
\r 回車(當(dāng)前位置移到本行的開頭)
%d    整型(有符號10進(jìn)制)             int
%c    字符型                         char
%f    浮點(diǎn)型(單精度)               float
%lf   浮點(diǎn)型(雙精度)               double
%s    字符串型           
%ld   長整型                         long int
%lld  長整型                         long long
%llu  無符號長整型                   unsigned long long
%o或%O    無符號8進(jìn)制型
%x或%X    無符號16進(jìn)制型
%e或%E    指數(shù)型
二、 變量與常量
 變量定義:     就是告訴編譯器在何處創(chuàng)建變量的存儲,以及如何創(chuàng)建變量的存儲。變量定義指定一個(gè)數(shù)據(jù)類型,并包含了該類型的一個(gè)或多個(gè)變量的列表
    
    變量的名稱:可以由字母、數(shù)字和下劃線字符組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因?yàn)?C 是大小寫敏感的。另外定義的變量不能是C語言中的關(guān)鍵字  例如變量不能是int double等見一個(gè)記一個(gè)就行了
      
     常量: 是固定值,在程序執(zhí)行期間不會(huì)改變。這些固定的值,又叫做字面量。常量可以是任何的基本數(shù)據(jù)類型,比如整數(shù)常量、浮點(diǎn)常量、字符常量,或字符串字面值,也有枚舉常量。
常量就像是常規(guī)的變量,只不過常量的值在定義后不能進(jìn)行修改。

    整數(shù)常量:   可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制的常量。前綴指定基數(shù):0x 或 0X 表示十六進(jìn)制,0 表示八進(jìn)制,不帶前綴則默認(rèn)表示十進(jìn)制。
整數(shù)常量也可以帶一個(gè)后綴,后綴是 U 和 L 的組合,U 表示無符號整數(shù)(unsigned),L 表示長整數(shù)(long)。后綴可以是大寫,也可以是小寫,U 和 L 的順序任意。

    浮點(diǎn)常量: 浮點(diǎn)常量由整數(shù)部分、小數(shù)點(diǎn)、小數(shù)部分和指數(shù)部分組成。您可以使用小數(shù)形式或者指數(shù)形式來表示浮點(diǎn)常量。
當(dāng)使用小數(shù)形式表示時(shí),必須包含整數(shù)部分、小數(shù)部分,或同時(shí)包含兩者。當(dāng)使用指數(shù)形式表示時(shí), 必須包含小數(shù)點(diǎn)、指數(shù),或同時(shí)包含兩者。帶符號的指數(shù)是用 e 或 E 引入的。
下面列舉幾個(gè)整數(shù)常量的實(shí)例:
212         /* 合法的 */
215u        /* 合法的 */
0xFeeL      /* 合法的 */
078         /* 非法的:8 不是八進(jìn)制的數(shù)字 */
032UU       /* 非法的:不能重復(fù)后綴 */
以下是各種類型的整數(shù)常量的實(shí)例:
85         /* 十進(jìn)制 */
0213       /* 八進(jìn)制 */
0x4b       /* 十六進(jìn)制 */
30         /* 整數(shù) */
30u        /* 無符號整數(shù) */
30l        /* 長整數(shù) */
30ul       /* 無符號長整數(shù) */
下面列舉幾個(gè)浮點(diǎn)常量的實(shí)例:
3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指數(shù) */
210f          /* 非法的:沒有小數(shù)或指數(shù) */
.e55          /* 非法的:缺少整數(shù)或分?jǐn)?shù) */
     
對于你定義的變量 變量之間進(jìn)行運(yùn)算時(shí) 期間會(huì)有強(qiáng)制類型轉(zhuǎn)換 下面看一個(gè)例子
#include <stdio.h>
int main()
{
    int a=1,c=0;
    float b=1.1;
    c=a+b;
   //變量a和變量b的類型是不一樣的 但由于變量c是整型 所以在會(huì)強(qiáng)制類型轉(zhuǎn)換 結(jié)果取整型
    結(jié)果是2 而不是2.1;
    printf("%d\n",c);此處的%字母(類型)和你后面輸出的變量是相對應(yīng)的 否則結(jié)果會(huì)是亂碼
    return 0;
}
在涉及小數(shù)位數(shù)時(shí) 在%.后寫需要的位數(shù) 例如兩位 %.2f 保留整數(shù)%.0f
      字符型數(shù)據(jù): 是指單個(gè)字符,在計(jì)算機(jī)內(nèi)存中占一個(gè)字節(jié),C語言規(guī)定字符常量用單引號括起來。例如:'a','b','c','8',但輸出時(shí)不輸出單引號。
      格式說明%c用于輸出一個(gè)字符,字符可以按整形式輸出,而且是以ASCII碼形式來輸出,字符a和A的ASCII碼值分別為97和65。
      字符常量可以參與運(yùn)算,表達(dá)式'a'+1的值是字符'a'的ASCII碼值97和1之和。
      小寫字母和其對應(yīng)的大寫字母的ASCII碼值之差都是32,沒兩個(gè)字母的ASCII碼值相差1且下寫字母的ASCII碼值是比大寫字母的大的,因此將字母'H'可表示為'h'-32,字母'm'可表示為'M'+32
      字符常量是ASCII字符集中的一個(gè)字符,但是有些字符是在鍵盤上找不到的,在程序中使用這些字符的方法是在“\”后加該字符的八進(jìn)制ASCII碼值(最多三位)或在“\x”后加該字符的十六進(jìn)制ASCII碼值(最多兩位)
      因此,字符常量有兩種形式:一個(gè)是常規(guī)字符(用單引號括起來的單個(gè)字符),二是轉(zhuǎn)義字符(以“\”開頭的字符序列),字符常量可以按其ASCII碼值參與整數(shù)運(yùn)算,即字符數(shù)據(jù)與整形數(shù)據(jù)可以通用
      以"\"開頭的字符序列為轉(zhuǎn)義字符,下列是常用的轉(zhuǎn)義字符

\\  \ 字符    
\'  ' 字符    
\"  " 字符    
\?  ? 字符    
\a  警報(bào)鈴聲    
\b  退格鍵 
\f  換頁符 
\n  換行符 
\r  回車  
\t  水平制表符   
\v  垂直制表符   
\ooo    一到三位的八進(jìn)制數(shù)   
\xhh . . .  一個(gè)或多個(gè)數(shù)字的十六進(jìn)制數(shù)   
       字符型變量:可以存放ASCII字符集中的任何一個(gè)字符,字符變量在內(nèi)存中占一個(gè)字節(jié)
       將常規(guī)字符或轉(zhuǎn)義字符賦給字符變量時(shí)都需要在其兩側(cè)加單引號,但將整形數(shù)據(jù)賦給字符常量時(shí),不能加單引號
       轉(zhuǎn)義字符“\0”的ASCII碼值為0
       由于字符按其ASCII碼值參與整數(shù)運(yùn)算,因此可以將其運(yùn)算結(jié)果直接賦給整形變量,當(dāng)把一個(gè)字符放在字符變量時(shí),實(shí)際上是將該字符的ASCII碼值存放在變量所帶代表的存儲單元,即變量中的內(nèi)容為該字符的ASCII碼值,因此字符變量可以參加整形數(shù)據(jù)的任何運(yùn)算,
       編寫程序時(shí),建議用c作為變量的第一個(gè)字母,表示該變量為字符型
三、輸入和輸出
 先寫一個(gè)簡單的輸入輸出程序  
    #include<stdio.h>
    int main()
    {
      int num;
      printf("Please enter a number");
      scanf("%d",&num);
      printf("You entered %d",num);
      return 0;
    }
    首先要用到輸入輸出函數(shù),就要引用頭文件:#include<stdio.h>
    輸入語句:scanf函數(shù)格式:
    scanf("格式控制字符串",變量地址);
    變量地址代表scanf函數(shù)獲取的是變量的地址(其中&符號為獲取變量的地址),而不是一個(gè)變量的值,通過這個(gè)變量地址,就能找到這個(gè)變量在哪里,從而可以改變這個(gè)變量的值,“%d”是格式控制字符串,表示scanf函數(shù)將接收一個(gè)整數(shù)
    在程序運(yùn)行到這里時(shí),會(huì)檢查格式字符串來確定要接收的數(shù)據(jù)類型,然后把鍵盤輸入的值通過&來找到變量從而把值存進(jìn)去
    輸出語句:printf函數(shù):
    printf(“格式控制字符串”,變量);
    這個(gè)的意思就是把變量中的值以“”中的格式輸出到屏幕上
    常用的格式控制字符:
      由%+特定字符構(gòu)成,如%d表示十進(jìn)制整數(shù),%f表示小數(shù)形式,%c表示單個(gè)字符
    普通的字符將原樣輸出
    
    一個(gè)簡單的開平方程序
    #include<stdio.h>
    #include<math.h>      //這個(gè)要加上
    int main()
    {
        int a;
        a=sqrt(4);           //對4開平方并賦給a 
        printf("%d",a);      // 輸出a的值為2
        return 0;    
    }
    
四、運(yùn)算符和表達(dá)式
 基本的算術(shù)運(yùn)算符:   算術(shù)運(yùn)算符用于各類數(shù)值運(yùn)算    c語言的算術(shù)運(yùn)算符有五種:+(加)-(減)*(乘)/(除)%(求余)

      基本算術(shù)運(yùn)算符都是雙目運(yùn)算符,即運(yùn)算符要求有兩個(gè)運(yùn)算量,如:a+b  a*b

      基本算術(shù)運(yùn)算符優(yōu)先級別和數(shù)學(xué)一樣,遵循原則:先乘除后加減,算術(shù)運(yùn)算符的結(jié)合方向?yàn)樽宰笙蛴?
      %運(yùn)算要求運(yùn)算量必須為整形數(shù)據(jù),5%2=1 1%10=1都是正確的,而5/1.0是錯(cuò)誤的

      /運(yùn)算時(shí)參與運(yùn)算量均為整形時(shí)結(jié)果也為整形,舍去小數(shù)   5/3=1

      加減乘除運(yùn)算時(shí),有一個(gè)數(shù)為實(shí)數(shù)時(shí)結(jié)果為double型   1+2.0=3.0

      字符型數(shù)據(jù)可以和數(shù)值型數(shù)據(jù)混合運(yùn)算

      算術(shù)表達(dá)式:   由算術(shù)運(yùn)算符和括號把常量.變量.函數(shù)連接起來的式子為算術(shù)表達(dá)式       單個(gè)常量,變量,和函數(shù)可以看做是表達(dá)式的特例   a*b+c/d

      算術(shù)表達(dá)式中的變量必須有確定的值

      數(shù)學(xué)中的{}和[]再表達(dá)式中不能使用,c只允許使用圓括號,而且可以是多層

      如果一個(gè)運(yùn)算符兩側(cè)數(shù)據(jù)類型不同,先自動(dòng)進(jìn)行類型轉(zhuǎn)換,再進(jìn)行運(yùn)算

      運(yùn)算符的優(yōu)先級和結(jié)合性:     

      優(yōu)先級:優(yōu)先級高的先于優(yōu)先級低的進(jìn)行運(yùn)算,和數(shù)學(xué)一樣,先算括號內(nèi)再算括號外,先乘除后加減

      結(jié)合性:一個(gè)運(yùn)算數(shù)據(jù)兩側(cè)的運(yùn)算符優(yōu)先級相同時(shí),按運(yùn)算符結(jié)合性規(guī)定的結(jié)合方向處理,結(jié)合性分為兩種,左結(jié)合性(從左往右)和右結(jié)合性(從右往左)

      數(shù)據(jù)類型的轉(zhuǎn)換規(guī)則:垂直降落,向上位移

      垂直降落:如果運(yùn)算符是cher型的,則必須轉(zhuǎn)換為int型,是float的先轉(zhuǎn)換為double型

      向上位移:如果時(shí)數(shù)據(jù)類型不相同,則先將低級別類型的轉(zhuǎn)換為高級別的

      :int型的和double型運(yùn)算,則現(xiàn)將int型裝換為double型在運(yùn)算,結(jié)果為double型的

      如果int型和float型運(yùn)算,則先降再移則是先將float轉(zhuǎn)換為double型,然后int 型轉(zhuǎn)換為double型進(jìn)行運(yùn)算

      

![](http://upload-images.jianshu.io/upload_images/7035387-5369705e4572256e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

      [強(qiáng)制類型轉(zhuǎn)換](https://baike.baidu.com/item/%E5%BC%BA%E5%88%B6%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2)

      強(qiáng)制類型轉(zhuǎn)換:是通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。其一般形式為:(類型說明符)(

[表達(dá)式](https://baike.baidu.com/item/%E8%A1%A8%E8%BE%BE%E5%BC%8F)

)其功能是把表達(dá)式的運(yùn)算結(jié)果

[強(qiáng)制轉(zhuǎn)換](https://baike.baidu.com/item/%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2)

成類型說明符所表示的類型

       例如(float) a 把a(bǔ)轉(zhuǎn)換為浮點(diǎn)型,(int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為[整型](https://baike.baidu.com/item/%E6%95%B4%E5%9E%8B)

。

      類型說明符和[表達(dá)式](https://baike.baidu.com/item/%E8%A1%A8%E8%BE%BE%E5%BC%8F)

都必須加括號(單個(gè)變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。


      無論是[強(qiáng)制轉(zhuǎn)換]

或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對變量的數(shù)據(jù)長度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時(shí)對該變量定義的類型。

      main()

      {

        float f=5.75;

        printf("f=%d,f=%f\n",(int)f,f);

      }

      結(jié)果:f=5,f=5.750000

      

      將浮點(diǎn)數(shù)(單雙精度)轉(zhuǎn)換為整數(shù)時(shí),將舍棄浮點(diǎn)數(shù)的小數(shù)部分, 只保留整數(shù)部分。將整型值賦給浮點(diǎn)型變量,數(shù)值不變,只將形式改為浮點(diǎn)形式, 即小數(shù)點(diǎn)后帶若干個(gè)0。注意:賦值時(shí)的類型轉(zhuǎn)換實(shí)際上是強(qiáng)制的。

       由于C語言中的浮點(diǎn)值總是用雙精度表示的,所以float 型數(shù)據(jù)只是在尾部加0延長為double型數(shù)據(jù)參加運(yùn)算,然后直接賦值。double型數(shù)據(jù)轉(zhuǎn)換為float型時(shí),通過截尾數(shù)來實(shí)現(xiàn),截?cái)嗲耙M(jìn)行四舍五入操作。



    自加自減運(yùn)算符:自加運(yùn)算符++;自減運(yùn)算符--,自加自減運(yùn)算符都是單目運(yùn)算符,即運(yùn)算符要求有且只能有一個(gè)運(yùn)算量,例如:5++   ++5   4--  --4

           ++運(yùn)算符的功能是使變量的值自加1;--運(yùn)算符功能是使變量值自減1

           自加自減運(yùn)算符的兩種形式:

           前置:++i、--i,它的功能就是在使用i之前,i值先加(減)1(先執(zhí)行i+1或i-1,再使用i值)

           后置:i++,--i,它的功能就是在使用i之后,i值再加(減)1(先執(zhí)行i值,再執(zhí)行i+1或i-1)

           例如:j=3;k=++j;    /賦值時(shí)j先加1,再將j的值賦給k,結(jié)果k=4,j=4;

           j=3;k=j++;   /賦值時(shí)j先賦給k,然后j再增1,結(jié)果k=3,j=4;

           優(yōu)先級:高于算術(shù)運(yùn)算符,具有右結(jié)合性

           正負(fù)號運(yùn)算符:+(正號)-(負(fù)號),和數(shù)學(xué)中一樣,運(yùn)算符優(yōu)先級大于算術(shù)運(yùn)算符,而與++ --同級,結(jié)合方向?yàn)樽杂邢蜃?
            
五、運(yùn)算符優(yōu)先級

http://blog.csdn.net/huangblog/article/details/8271791
注:上面網(wǎng)址里面有非常詳細(xì)的表格

六、邏輯運(yùn)算符
    下面顯示了 C 語言支持的所有關(guān)系邏輯運(yùn)算符。假設(shè)變量 A 的值為 1,變量 B 的值為 0,則:

    &&  稱為邏輯與運(yùn)算符。 如果兩個(gè)操作數(shù)都非零,則條件為真。  (A && B) 為假。


    ||  稱為邏輯或運(yùn)算符。如果兩個(gè)操作數(shù)中有任意一個(gè)非零,則條件為真。 (A || B) 為真。


    !   稱為邏輯非運(yùn)算符。   用來逆轉(zhuǎn)操作數(shù)的邏輯狀態(tài)。如果條件為真則邏輯非運(yùn)算符將使其為假。  !(A && B) 為真。


    && 左邊為0 結(jié)果=0  后面的不執(zhí)行 ;

    || 左邊為1 結(jié)果=1  后面的不執(zhí)行 ;

    要注意的是&&  ||都有不完全運(yùn)送。對于&&運(yùn)送則從左到右進(jìn)行判斷,如果左邊為0,說明此命題不可能再為真 ,則右邊不再計(jì)算,整個(gè)&&運(yùn)算就是0.  ||運(yùn)算也是從左到右,如果有左邊為1,說明此命題不可能為假,則右邊也不在計(jì)算,直接輸出1.
七、三目運(yùn)算符與if語句
    條件運(yùn)算符為?和:,它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。由條件運(yùn)算符組成條件表達(dá)式的一般形式為:

    表達(dá)式1? 表達(dá)式2: 表達(dá)式3 

    其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2 的值作為條件表達(dá)式的值,否則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。 條件表達(dá)式通常用于賦值語句之中。

    例如條件語句: 

    if(a>b) max=a;

    else max=b;

    可用條件表達(dá)式寫為 max=(a>b)?a:b; 執(zhí)行該語句的語義是:如a>b為真,則把a(bǔ)賦予max,否則把b 賦予max。

    使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):

    1. 條件運(yùn)算符的運(yùn)算優(yōu)先級低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此 max=(a>b)?a:b可以去掉括號而寫為 max=a>b?a:b

    2. 條件運(yùn)算符?和:是一對運(yùn)算符,不能分開單獨(dú)使用。

    3. 條件運(yùn)算符的結(jié)合方向是自右至左。

    例如:

    a>b?a:c>d?c:d應(yīng)理解為

    a>b?a:(c>d?c:d) 這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條

    件表達(dá)式。


    if 語句

    用 if 語句可以構(gòu)成分支結(jié)構(gòu),它根據(jù)給的條件進(jìn)行判定,以決定執(zhí)行哪個(gè)分支程序段。

    C 語言的 if 語句有三種基本形式

    第一種形式:

    if(條件表達(dá)式) 

    {

      語句1;

    }

    if(條件表達(dá)式) 

    {

      語句1;

    }

    這種形式運(yùn)行順序?yàn)椋寒?dāng)條件表達(dá)式為真,執(zhí)行語句1,否則,直接跳過語句1,執(zhí)行后面的語句

    例子1:

    BOOL result = YES;

    if(result)

    {

      printf("result is true\n");

    }

     

    BOOL result = YES;

    if(result)

    {

      printf("result is true\n");

    }

    輸出結(jié)果為:

    result is true

    如果把 result 的值改為 NO,那么就什么都不輸出了。

    例子2:

    int a = 5;

    int b = 6;

    if(a >= b)

    {

      printf("a大于b\n");

    }

     

    int a = 5;

    int b = 6;

    if(a >= b)

    {

      printf("a大于b\n");

    }

    輸出結(jié)果為:

    什么都不輸出


    如果改成這樣:

    if(a <= b)

    {

      printf("a小于b\n");

    }

     

    if(a <= b)

    {

      printf("a小于b\n");

    }

    那么輸出結(jié)果為:a小于b。


    第二種形式:

    if(條件表達(dá)式)

    {

      語句1;

    }

    else 

    {

      語句2;

    }

     

    if(條件表達(dá)式)

    {

      語句1;

    }

    else 

    {

      語句2;

    }

    這種結(jié)構(gòu)的執(zhí)行順序?yàn)椋寒?dāng)條件表達(dá)式為真時(shí),執(zhí)行語句1,否則執(zhí)行語句2。

    例子1:

    BOOL result= YES;

    if(result)

    {

      printf("result 為真\n");

    }

    else

    {

      printf("result 為假\n");

    }

     

    BOOL result= YES;

    if(result)

    {

      printf("result 為真\n");

    }

    else

    {

      printf("result 為假\n");

    }

    這里的兩個(gè)輸出語句絕對不會(huì)同時(shí)輸出。

    第三種形式:

    if(條件表達(dá)式1)

    {

      語句1;

    }

    else if(條件表達(dá)式2)

    {

      語句2;

    }

    else 

    {

      語句3;

    }

     

    if(條件表達(dá)式1)

    {

      語句1;

    }

    else if(條件表達(dá)式2)

    {

      語句2;

    }

    else 

    {

      語句3;

    }

    這種結(jié)構(gòu)的執(zhí)行順序?yàn)椋寒?dāng)條件表達(dá)式1成立時(shí),執(zhí)行語句1,如果不成立則看條件表達(dá)式2是否成立,如果條件表達(dá)式2成立,則執(zhí)行語句2,如果條件表達(dá)式2也不成立這會(huì)執(zhí)行語句3。

    例子1:

    int age = 35;

    if(age < 18)

    {

      printf("你是小孩子\n");

    }

    else if(age >= 60)

    {

      printf("你是位老人\n");

    }

    else

    {

      printf("你正當(dāng)青年啊, 小伙子!\n");

    }

     

    int age = 35;

    if(age < 18)

    {

      printf("你是小孩子\n");

    }

    else if(age >= 60)

    {

      printf("你是位老人\n");

    }

    else

    {

      printf("你正當(dāng)青年啊, 小伙子!\n");

    }

    輸出結(jié)果為:

    你正當(dāng)青年啊,小伙子!
八、switch語句
    C語言還提供了另外一種多分支選擇的語句——switch 語句,它的基本語法格式如下:

    switch(表達(dá)式){

        case 常量表達(dá)式1: 語句 1;

        case 常量表達(dá)式2: 語句 2;

        ......

        case 常量表達(dá)式n: 語句 n;

        default: 語句 n+1;

    }

    它的執(zhí)行過程是:首先計(jì)算“表達(dá)式”的值,然后從第一個(gè) case 開始,與“常量表達(dá)式x”進(jìn)行比較,如果與當(dāng)前常量表達(dá)式的值不相等,那么就不執(zhí)行冒號后邊的語句 x,一旦發(fā)現(xiàn)和某個(gè)常量表達(dá)式的值相等了,那么它會(huì)執(zhí)行之后所有的語句,如果直到最后一個(gè)“常量表達(dá)式 n”都沒有找到相等的值,那么就執(zhí)行 default 后的“語句 n+1”。

    需要注意的是,當(dāng)找到一個(gè)相等的 case 分支后,會(huì)執(zhí)行該分支以及之后所有分支的語句。例如

    #include <stdio.h>

    int main(){

      int a;

      printf("Input integer number:");

      scanf("%d",&a);

      switch(a){

        case 1: printf("Monday\n");

        case 2: printf("Tuesday\n");

        case 3: printf("Wednesday\n");

        case 4: printf("Thursday\n");

        case 5: printf("Friday\n");

        case 6: printf("Saturday\n");

        case 7: printf("Sunday\n");

        default:printf("error\n");

      }

      return 0;

    }

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

    Input integer number:

    Thursday

    Friday

    Saturday

    Sunday

    error

     

    輸入4,發(fā)現(xiàn)和第四個(gè)分支匹配,于是就執(zhí)行第四個(gè)分支以及后面的所有分支。這顯然不是我們想要的結(jié)果,我們希望只執(zhí)行第四個(gè)分支,跳過后面的所有分支。

    為了避免這種情況,C語言還提供了一個(gè)關(guān)鍵字 break,專門用于跳出switch語句。

    switch 的分支語句一共有 n+1 種,而我們通常希望的都是選擇其中的一個(gè)分支來執(zhí)行,執(zhí)行完后就結(jié)束整個(gè) switch 語句,而繼續(xù)執(zhí)行 switch后面的語句,此時(shí)就可以通過在每個(gè)分支后加上 break 語句來實(shí)現(xiàn)了。如下:

    switch (表達(dá)式){

        case 常量表達(dá)式1: 語句1; break;

        case 常量表達(dá)式2: 語句2; break;

        ......

        case 常量表達(dá)式n: 語句n; break;

        default: 語句n+1; break;

    }

    加了這個(gè) break 語句后,一旦“常量表達(dá)式 x”與“表達(dá)式”的值相等了,那么就執(zhí)行“語句 x”,執(zhí)行完畢后,由于有了 break 則直接跳出 switch 語句,繼續(xù)執(zhí)行 switch 語句后面的程序了,這樣就可以避免執(zhí)行不必要的語句。

    使用switch語句修改上面的代碼:

    #include <stdio.h>

    int main(){

      int a;

      printf("Input integer number:");

      scanf("%d",&a);

      switch(a){

        case 1: printf("Monday\n"); break;

        case 2: printf("Tuesday\n"); break;

        case 3: printf("Wednesday\n"); break;

        case 4: printf("Thursday\n"); break;

        case 5: printf("Friday\n"); break;

        case 6: printf("Saturday\n"); break;

        case 7: printf("Sunday\n"); break;

        default:printf("error\n"); break;

      }

      return 0;

    }

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

    Input integer number:4

    Thursday

    值得一提的是,由于default是最后一個(gè)分支,匹配后不會(huì)再執(zhí)行其他分支,所以也可以不用break;語句。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,536評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,505評論 2 379

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,733評論 25 708
  • Java8張圖 11、字符串不變性 12、equals()方法、hashCode()方法的區(qū)別 13、...
    Miley_MOJIE閱讀 3,722評論 0 11
  • 01 最近《歡樂頌2》熱播,又到了安迪的“牛市”。 成為安迪是無數(shù)女孩的夢想。她擁有女性身上的最高配置,外表,身材...
    王玬錦閱讀 407評論 0 7
  • 本文是針對群里本周的作業(yè),關(guān)于如何抓住自己的黑天鵝,絞盡腦汁想了半天也沒有找到正面黑天鵝,就說一些自己在股市中的一...
    在云之巔閱讀 153評論 2 1