基本數據類型與表達式


一、數據的儲存

1.整型數據——占兩個字節,范圍[-32768 , 32768]

(1)原碼:正數的符號用0,負數的符號用1,其余各位表示數值的絕對值。

(2)反碼:正數為本身;負數,數值部分每位求反,符號位不變。

(3)補碼:正數為本身,負數為其反碼+1(計算機中以補碼的表示數值)。

  ——總結:正數的原碼,反碼,補碼相等

                   負數的反碼為原碼取反(符號位不變),補碼為反碼+1

   

 2.實型數據存儲方式:符號位+階碼+尾數。例如:- 1.23e +02

 3.字符型數據 ——每個字符占用一個字節,存儲ASCII碼

二、基本數據類型

1.整型與整型常數

(1)整型變量分類 ——無符號(unsign)/有符號、長短

     

(2)整型常量 表達式

        ①十進制,②八進制,③十六進制(0x / 0X + 0~9,a~f / A~F)

  (3)整數類型 

        ①long型常數:123L/123l  ②unsigned型常數:123U /123u   ③unsigned long 型常數:123LU / 123lu

Tip:比長整型數還大的數要用實數表示。

2.字符型

(1)字符型常量:'a','0'(注意:單引號)

(2)ASCII字符集(256個)

 ——整型變量與字符變量的定義和賦值可以互換(在ASCII碼的范圍內)

(3)轉義字符

         

 3.實型

(1)數據長度:

         單精度浮點型 —— float ——32位

         雙精度浮點型 —— double ——64位

(2)數據精度 不等於 取值范圍

 

 Tip:①不是所有的實數都能在計算機中精確表示;

       ②實型常量(浮點數)的類型都是 double

(3)實數的表示——浮點表示法(0.123)/ 科學計數法(1.2e-5)

三、數據的輸入與輸出

 1.整型數據的輸入與輸出

 (1)格式

       

 

 

 (2)指定整型數據的輸出寬度:例如:%md,%5d(數據寬度為5)// 如果實際輸出數小於寬度,用空格補上。

例題:

scanf("%o%d",&a,&b);
printf("%d %5d",a,b);

  輸入:17 17

  輸出:15      17

2.實型數據

(1)輸出:float與double :都以%f(小數形式輸出且保留6位小數),%e(指數形式即小數點前有且僅有一位非零數字)

(2)輸入:

       ①float:使用%f,%e

       ②double:使用%lf%le(多一個限定詞 l(long))

(3)控制輸出格式:例如:%5.3f——輸出寬度為5,小數部分 3 位,小數點 1 位

3.字符型

(1)使用scanf()和printf():格式控制說明為%c

(2)使用getchar()與putchar():每次僅輸入輸出一個字符

例題:

代碼:

#include <stdio.h>
int main ()
{
    char ch;
    ch = getchar();
    while(ch!='#'){
        if(ch>='A'&&ch<='Z'){
            ch=ch-'A'+'a';
        }else if(ch>='a'&&ch<='z'){
            ch=ch-'a'+'A';
        }
        putchar(ch);
        ch = getchar();
    }

    return 0;
}

解析:'m' - 'a' + 'A'='M' ——ASCII中‘a'與’A‘為任意一個字母小寫與大寫間的數據差。

 

4.類型轉換:(只是為了本次運算而進行的臨時性轉換)

(1)自動類型轉換:參與運算量的類型不同,則先轉換成同一類型,然后進行運算。

(2)強制類型轉換:轉換的是運算符,不是函數,例如 強制轉換應寫成(int)x,而不是int(x)

四、表達式

1.算術表達式

(1)優先級

 (2)結合方向:單目為從右向左,雙目為從左向右。

 (3)注意:

① / :整數除整數得整數,且不會四舍五入,直接舍去小數部分。

          負整數結果的四舍五入沒有規定,所以結果不確定。

          如果要精確的結果,可以把一個操作數轉換為浮點數 。

②% :針對整型數據

           負數%沒有規定符號

(4)++,--

①++i,--i :i=i+1;取i值為++n的值

②i++;i-- :取 i 值為表達式i++的值,再來 i=i+1

2.賦值表達式

3.關系表達式

4.邏輯表達式

(1) 優先級與結合方向:!(最高,右結合) && || (左結合)

(2)!a:如果a為真,!a為0()假,!a的值永遠為0或1。

5.條件表達式:exp1?exp2:exp3——先判斷exp1,真(非0)執行exp2,反之。

6.逗號表達式:從左向右,以最后一個為表達式的值

7.位運算

(1)運算符:

  ① ~ 按位取反 ②& 按位與(不同為0,同1為1,同0為0) ③^ 按位異或:相同取0,不同取1

  ④ | 按位或  ⑤移位運算符 << 左移,>>右移 (空出位置用0填補)

(2)操作數只為整型或字符型的數據以及其變體,運算時先將數據轉化為二進制。

(3)異或的特殊操作:

  ①a^a=0 ②a^~a=二進制全是1 ③ ~(a~^a)=0

 

 

 

周結問題

1.以鍵盤輸入^Z或遇到文件結束符時結束數據輸入 的題型:

 ——輸入停止以不等於EOF為標志 (不確定循環次數用while)

 ——用scanf()!=EOF 或者getchar()即可不用再調用輸入函數

2.換行問題:

有些題會要求行末不能有多余換行,但是多個樣例之間需要,這時候我們一般都是特判:如果不是最后一組樣例,就輸出換行,是最后一組就不換行。

\\如果無法確認最后一組,則判斷第一組前面沒有\n,后面每組前面都輸出\n。即:除了最后一個樣例結尾不換行,其他結尾都換行<=>除了第一個樣例開始前不換行,其他都換行。

3.負數的二進制:取反用 ! ,而不用~ ——因為~是按位取反,先轉化為二進制取反,再轉化為十進制,使得輸出不再是二進制。

4.輸出二進制:用數組從0->32儲存,再從32->0的輸出,從而正確輸出二進制。

例如:

for(i=0;i<=32;i++)
{ a[i]
=1; a[i]=n%2; n=n/2; if(n==0) break; }
for(i=31;i>=0;i--)
{
    printf("%d",a[i]);
        if(i==8||i==16||i==24||i==32)  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM