黑馬程序員——ios開發基礎之C語言數據類型、運算符與輸入輸出

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

第一講 數據類型

一、概念 

            數據類型是指數據以何種方式儲存在內存中,不同的數據類型存儲方式不一樣。
             單位: 1 B   = 8 bit
                        1 KB = 1024 B
                        1 MB =1024 KB
                        1 GB =1024 MB
                        1 TB = 1024 GB

二、分類

           C語言有5大數據類型:基本數據類型、構造類型、指針類型、空類型、定義類型。
               1)基本數據類型:整型、字符型、實型。
                    A 整型用於準確的表示整數,根據佔用內存空間及表示範圍不同可以分爲以下三種:
                                short  int<  int   <long int
                                短整型   < 整型 <長整型
                                  2B       <  4B   <  8B(64位)
                    B 字符型用來描述單個字符
                                char   1B
                    C 實型(浮點型)用於表示實數(小數)根據範圍和精度不同分爲以下兩種:
                                   float       <    double
                           單精度浮點數<雙精度浮點數
                                   4B    <      8B
                          注意:float只能保證7位數字是有效的
                2)構造類型
                                      數組、結構體(struct)、共用型(union)、枚舉型(enum)
                3)指針類型
                                        *類型
                4)空類型
                                         void型 
                5)定義類型
                                         typedef 類型

三、常量

              常量表示一些固定的數據,也就是在程序運行過程中不能被改變的數據。
           常量也分爲整型常量、實型常量和字符型常量,並且還有字符串常量,注意字符串常量和字符常量是不一樣的。
               1)整型常量
                         二進制整數:逢二進一,以0b開頭
                         八進制整數:逢八進一,以0開頭,如0123,也就是十進制的83
                         十進制整數:逢十進一,平時生活中的數
                       十六進制整數:逢十六進一,以0x開頭,如0x123,也就是十進制291
               2)實型常量
                        單精度小數:以f結尾
                        雙精度小數:十進制小數形式        
               3)字符型常量
                       字符常量都是用''(單引號)括起來的,其表現形式有兩種:
                       A 一般形式。一個字符用''括起來,只能是一個字符
                       B 特殊形式。轉義字符,都是以\開頭,不會在屏幕上直接顯示出來而是會根據其特定的功能來顯示。如\n  換行
                     注意:字符常量在內存中存儲時,保存的是其對應的ASCII值。如'A'——>65   'a'——>97
               4)字符串常量
                       字符串常量與字符常量不同的地方是,字符串常量用" "括起來,所以'a'與"a"不是一回事,而且系統會在字符串常量的                          末尾自動加上一個字符串結束標誌'\0'。

四、變量

        變量代表內存中的某個空間,它是用來存放數據的,程序運行中它的值可以改變,是數據基本單元。
        變量由兩部分構成:變量類型與變量名。定義(聲明)變量的格式:
           格式一:   變量類型     變量名;                              int   a;
           格式二:   變量類型    變量名稱,變量名稱;       char a , b, c;
       變量名的命名規範:1、嚴格遵守標識符命名原則 2、簡潔、望文知意 3、駝峯命名法
       變量的使用流程:定義——初始化——使用;  變量定義完成後有值:1)隨機的 2)上一個程序在內總中駐留的  3)系統的
       變量初始化的幾種方式:
           1、先定義後初始化
                    int a;
                    a=0;
           2、定義的同時初始化
                   int a = 0;
                   int a = 0,b = 1;(全部初始化)
                   int a,b = 0;(部分初始化)
           3、使用其他變量初始化
                   int a = 0;
                   int b = a;
           4、連續初始化
                   int a,b,c;
                   a=b=c=0;
                  (注意:int a=b=c=0;是錯誤的,因爲bc變量還沒有被聲明)
       變量按作用域分爲:全局變量和局部變量
            1、全局變量     在函數外部定義的變量                               作用域:從定義的地方開始,到當前程序結束
            2、局部變量     在函數內部或者代碼塊中定義的變量       作用域:從定義的位置向下,遇到所在代碼塊“}”結束
        注意:1)塊的內部可以訪問全局變量
                    2)塊的外部不可以訪問局部變量
                    3)塊的內部可以定義和全局變量同名的局部變量,這時全局變量被屏蔽。

第二講 運算符


一、運算符

     連接兩個操作數(常量、變量)的符號
     用運算符按照一定的規則連接的式子稱爲表達式

  1、運算符的分類:

     1)操作數的個數:
       單目運算( ++、--、 sizeof 、!)
       雙目運算符(+、-、*、/、%)
       三目運算符(? :)
     2) 功能:
       算術運算符、關係和邏輯運算符、位運算符

  2、算術運算符

       進行算術的運算,總計5個(+ - * / %)
       都爲雙目運算符
       乘除的優先級要高於加減的
       優先級相同左結合:從左到右結合計算
        例如:int a=3,b=2;
              a+b*3/1-5
              --> a+6-5
              --> 4

        % 求餘數
         m%n求餘數
         m = 0 結果是 0
         n = 0 結果無意義, n不能爲0
         m > n 結果正常取餘數
         m < n 結果是 m

  3、賦值運算符(=)

     作用:把等號的右側的值(常量、表達式)賦值給等號左邊的變量
     注意:等號的左邊一定要是變量
     右結合性:從右至左。      例如int a,b,c,d;
                         a = b = c = d = 0; 

     複合賦值運算符:總共有5個
        +=  a+=2;--> a = a+2;
        -=  a-=2;--> a = a-2;
        *= a*=2;--> a = a*2;
        /= a/=2;--> a = a/2;
        %= a%=2;--> a = a%2;

  4、自增、自減運算符

     ++ -- 相當於讓運算符連接的操作數自身的值+1或者-1
     格式: 變量名++ ++ 變量名
          變量名-- -- 變量名
       讓變量的值自動的+1或者-1
          結合性:右結合
           (a++)+(++b)
          -a++ --> -(a++)

     技巧:
       如果a在++符號的前面,先取出a的值作爲表達式的值,然後a自身值+1
       口訣:先用後變
       如果a在++符號的後面,先讓a自身值+1,然後取出a的值作爲表達式的值
       口訣:先變後用
     經典問題分析:
int main(){
       int i = 5,j = 5,p,q;
       p = i+++i+++i++;
       q = j+++j+++j++;
       printf("%d,%d,%d,%d",p,q,i,j);
       return 0;
}
     最後輸出的結果:18,18,8,8
     分析:a在++的前面,所以均爲先用值,在+1,經歷3次++,i,j肯定都增加3變爲8。p(q)=5+6+7=18

  5、 sizeof運算符

     1)計算常量、變量、數據類型在我們內存中佔用的字節數
     2)用法
       常量上 : sizeof(10) sizeof(2.3) sizeof('a')
              ---> sizeof 10 sizeof 2.3
              sizeof("a") //2
        變量上: int a; sizeof(a);
       數據類型上: sizeof(int) sizeof(float) sizeof(char)

     3)注意事項
       sizeof不是第一個函數,是一個運算符
       sizeof('a') 4個字節,字符型的常量在C標準的編譯中用int型存儲的

  6、關係運算符

       所有的數值都有真假性 非0 就真(1) 0就是假(0)
       1)關係運算符,總計有6個,皆爲雙目運算符
          > 大於
          < 小於
         >= 大於等於
         <= 小於等於
         == 等於
         != 不等於
       2)結合性:左結合
          例如:a = 1>2<3>0;
               ((1>2)<3)>0
                 1>0

  7、邏輯運算符

       判斷多個條件是否同時成立(同時爲1) 雙目運算符
       1)&&    邏輯與&&符號兩邊的表達式都必須爲真          口訣:同真爲真 一假則假
       2)||    邏輯或 ||符號兩邊的表達式有一個爲真,結果就爲真  口訣:同假爲假 一真則真
       3)!     邏輯取反 (單目運算,右結合)              口訣:真變假 假變真
       4)注意事項 短路的問題:與短路  &&  只要第一個條件表達式爲假那麼後面的條件表達就不參與條件運算了
                        或短路  ||  只要第一個條件表達式爲真那麼後面的條件表達就不參與條件運算了
//經典題目:判斷某一年是否爲閏年
#include<stdio.h>
int main(){
    int year;
    printf("請輸入要判斷的年份:\n");
    scanf("%d",&year);
    if(!(year%4)&&year%100||!(year%400)){
                printf("%d年是閏年\n",year);
              }else
                printf("%d年不是閏年\n",year);
    return 0;
}


  8、條件運算符(? :)

       1)進行了一個簡單的判斷   三目運算符
          a>b?a:b -->取出a、 b中的最大值 
           先判斷a>b是否爲真:
            如果爲真: a的值作爲條件表達式的值返回
            如果爲假: b的值作爲條件表達式的值返回
       2)結合性:左結合
         (num1>num2?num1:num2)>num3 ? (num1>num2?num1:num2) :num3
     經典例題:用條件表達式求三個數的最大值
//用條件表達式求三個數的最大值
#include<stdio.h>
int main(){
      int a,b,c;
      printf("請輸入三個數:\n");
      scanf("%d%d%d",&a,&b,&c);
      int max;
      max = a>b?a:b;
      max = max>c?max:c;
      printf("輸出最大值:max = %d\n",max);
      return 0;
}

第三講 輸入與輸出

一、getchar函數與putchar函數

                getchar   字符輸入函數,作用是從鍵盤接收一個字符。
                putchar   字符輸出函數,作用是向終端輸出一個字符。
                注意:getchar與putchar只能接收和輸出單個字符。
//從鍵盤輸入單個字符並輸出
 #include<stdio.h>
int main(){
     char c;
     c = getchar();
     putchar(c);
     putchar('\n');//換行
     return 0;
}

二、printf函數與scanf函數

            1、printf函數

                    printf函數 標準的輸出函數
                    輸出的原理 : printf把要輸出的內容--->輸出緩衝區-->輸出到控制檯
                    格式: printf("格式說明",變量列表);
                  printf的格式控制的完整格式:
                      % - 0 m.n l或h 格式字符
                 下面對組成格式說明的各項加以說明:
                     ①%:表示格式說明的起始符號,不可缺少。
                     ②-:有-表示左對齊輸出(右側補空格),如省略表示右對齊輸出(左側補空格)。
                     ③0:有0表示指定空位填0,如省略表示指定空位不填。
                     ④m.n: m指域寬,即對應的輸出項在輸出設備上所佔的字符數。 N指精度。用於說明輸出的實型
                                    數的小數位數。對數值型的來說,未指定n時,隱含的精度爲n=6位。
                     ⑤l或h:l對整型指long型,對實型指double型。 h用於將整型的格式字符修正爲short型。
              格式字符
              格式字符用以指定輸出項的數據類型和輸出格式。
                     ①d格式:用來輸出十進制整數。有以下幾種用法:
                        %ld:輸出長整型數據。
                     ②o格式:以無符號八進制形式輸出整數。對長整型可以用"%lo"格式輸出。同樣也可以指定字段寬
                         度用“ %mo”格式輸出。
                     ③x格式:以無符號十六進制形式輸出整數。對長整型可以用"%lx"格式輸出。同樣也可以指定字段
                         寬度用"%mx"格式輸出。
                     ④u格式:以無符號十進制形式輸出整數。對長整型可以用"%lu"格式輸出。同樣也可以指定字段寬
                         度用“ %mu”格式輸出。
                     ⑤c格式:輸出一個字符。
                     ⑥s格式:用來輸出一個串。

            2、 scanf函數(阻塞式函數-等待用戶的輸入,如果不輸入會一直等待)

                     C語言中標準的輸入函數
                     接收用戶從鍵盤上輸入的內容
                     格式: scanf("格式控制",地址列表);            &-取地址符號
                    1)接收一個數字              
                    int   a;
                    scanf("%d",&a);
                           2)接收多個數字
                int  a,b,c;
                scanf("%d%d%d",&a,&b,&c);
                          3)接收的是數字和字符混合
           int a,b;
           char c;
           scanf("%d,%d,%c",&a,&b,&c);
                   4) scanf的運行原理
                         A  用戶從鍵盤輸入的內容放到了輸入緩衝區
                         B  scanf從緩衝區中逐個取對應的內容,如果取得內容和設定的類型不一樣,輸入不進去,不做改變
                      注意:如果輸入緩衝區內容不爲空,scanf會一直從緩衝區獲取,而不要求再次輸入


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章