C++基礎(二) 基本數據類型與數值表達式

2章 基本數據類型與數值表達式

2.1 知識要點

計算機的基本功能是進行數據處理。在C++語言中,數據處理的基本對象是常量和變量。運算是對各種形式的數據進行處理。數據在內存中存放的情況由數據類型所決定。數據的操作要通過運算符實現,而數據和運算符共同組成了表達式。本章是對C++語言中的數據類型、運算符、表達式等內容的全面介紹,要正確理解其特點,並靈活運用,主要掌握以下的知識要點:

1.掌握常量和變量的概念。

2.掌握整型數據和實型數據、字符型數據和字符串型數據的概念和區別。

3.掌握各種類型的變量說明及其初始化。

4.掌握算術運算、關係運算、邏輯運算、賦值運算、逗號運算、條件運算等概念。

5.掌握運算符的優先級、左結合和右結合規則。

6.掌握表達式求值時的自動轉換和強制類型轉換。

7.掌握自加、自減運算的規則。

8.掌握常用數學函數的功能。

2.2 典型例題分析與解答

1.  選擇題

例題1:運算符+=*>=中,優先級最高的運算符是(    )。

A+         B=        C*       D>=

答案:C

分析:根據C++語言對運算符優先級的規則,以上運算符優先級從低到高的次序爲=>=+*

 

例題2:下列說法正確的是(    )。

Acout<<”/n”是一個語句,它能在屏幕上顯示”/n”

B/68代表的是字符D

C1E+5的寫法正確,它表示餘割整型常量。

D0x10相當於020

答案:D

分析:分號是語句的已部分,且/n是轉義字符;/68代表了八進制的68,而八進制中沒有數字81E+5是實型常量;十六進制的10相當於十進制的16,相當於八進制的20

 

例題3:下列不合法的變量名爲(    )。

Aint         Bint1       Cname_1         Dname0

答案:A

 

分析:根據變量名命名要求,變量名只能由大小寫字母、數字、下劃線組成,且系統關鍵字不能作爲變量名。

 

例題4:下面正確的爲(    )。

A4.1/2                     B3.2%3

C3/2==1 結果爲1           D7/2 結果爲3.5

答案:A

分析:%運算符要求式整型;關係運算值爲0;兩個整數相除,商爲爲相除後的整數部分。

 

例題5:已知a=4b=6c=8d=9,則“(a++b>a++&&c>d)?++da<b 值爲(    )。

A9           B6           C8          D0

答案:D

分析:此題是考察“++”運算符、逗號運算符、條件運算符及它們運算優先級的綜合題,根據這些運算符的運算規則,得出表達式的運算結果。

 

例題6:已知i=5j=0,下列各式中運算結果爲j=6的表達式是(    )。

Aj=i+++j       Bj=j+i++      Cj=++i+j      Dj=j+++i

答案:C

分析:自增++、自減運算符在變量的前面或後面,其運算結果是不同的。若++在變量前,則先將變量的值加1(或減1)後,再將變量的值參與運算;反之則先將變量的值參加運算,再將變量的值加1(或減1)。自增++、自減運算符優先級高於算術運算符。

 

例題7:已知x=43ch=A’,y=0;則表達式(x>=y&&ch<’B’&&!y)的值是(    )。

A0         B.語法錯         C1         D.“假”

分析:根據C++語言中運算符優先級的高低,“!”運算符最高,關係運算符高於邏輯運算符。則上面的表達式轉換爲:1&&1&&1,結果爲1

答案:C

 

2.  填空題

例題8:如果sint型變量,且s=6,則下面s%2+s+1%2表達式的值爲____

答案:1

分析:%運算符是求餘運算,得到的結果是相除後的餘數。表達式轉換爲6%2+6+1%2=0+7%2=1

 

例題9:如果定義int a=2b=3float x=5.5y=3.5;則表達式(float)(a+b/2+intx%inty的值爲_____

答案:4.5

分析:不同類型的數據混合運算時,可以使用強制類型轉換符,強制將一種數據類型轉換爲另一種數據類型後再進行運算。對錶達式,先求表達式的值,再轉換值的類型,本題的運算結果爲4.5

 

例題10:設所有變量均爲整型,則表達式(e=2f=5e++f++e+f)的值爲____

答案:9

分析:逗號運算符是是將兩個或多個表達式組合成一個表達式的運算符。求解時從左至右依次計算每個表達式的值,整個表達式的值就是最右邊的表達式的值。本題的答案爲9

 

例題11:已知字母aASCII碼爲十進制數97,且設ch爲字符型變量,則表達式ch=’a’+’8’-‘4’的值爲____

答案:e

分析:C++語言中,對字符數據進行算術運算,實際上就是對字符的ASCII碼進行運算。以字符形式輸出時,再將ASCII碼轉換爲相應的字符輸出。本題表達式爲ch=97+8-4=101101相應的ASCII爲字符e

 

3.  編程題

例題12:編寫一個程序,從鍵盤輸入半徑和高,輸出圓柱體的底面積和體積。

解:程序如下:

#include<iostrean.h>

void main()

{

  double r, h, area, volume;

  cout<<”請輸入半徑:”;

  cin>>r;

  cout<<”請輸入高:”;

  cin>>h;

  area=3.14*r*r;

  volume=area*h;

  cout<<”底面積是: ”<<area<<endl;

  cout<<”體積是: ”<<volume<<endl;

}

2.3 教材習題分析與解答

1.     C++語言中有哪些數據類型?分別說明它們的類型關鍵字、取值範圍、類型長度。

答:C++語言中的數據類型有:整型(短整型,整型,長整型);字符型;邏輯型;枚舉型;實型(單精度,雙精度,長雙精度);引用型(指針,引用);複合型(結構,聯合);空類型。

2.     字符常量與字符串常量的區別是什麼?

答:字符常量與字符串常量的主要區別在於:(1)定界符不同。字符常量使用單引號,而字符串常量使用雙引號。2長度不同。字符常量的長度固定爲1,而字符串常量的長度,可以是0,也可以是某個整數。3存儲要求不同。字符常量存儲的是字符的ASCII碼值,而字符串常量除了要存儲有效的字符外,還要存儲一個結束標誌’/0’

 

3.說明下面的每個數據各屬於哪一種(數值常量、字符常量、字符串、標識符、保留字、運算符、標點、非法數據)?

      25       18        -3.67         12.8         4        4

      x1       x2       1949.10     cin                  K_name

      3ab      float  x ,y ;          if                  +

/n      ?                     sy1.cpp    /32       /

答:數值常量有:25,18,-3.67, 12.8

字符常量有:4//32

字符串有:4x21949.10sy1.cpp,  /n

保留字:cin ,int,endl,if

運算符:+

標點:?

非法數據:float  x ,y   ;  , 3ab

變量:x1,K_name

 

4.選擇題

1)下列數據類型不是C++語言基本數據類型的是( )。

A.字符型      B.整型       C.實型     D.數組

答案:D

 

2)在C++語言中,080是( )。

A.八進制數         B.十進制數    C.十六進制數       D.非法數

答案:B

 

3)下列字符列中,可作爲C++語言程序自定義標識符是(   )。

 A.switch       B.file        C.break           D.do 

答案:B

 

 (4)  運算符 +<==% 中,優先級最低的運算符是(   )。

A. +          B.<=         C.=              D.%

答案:C

 

 (5) 下列字符列中,可以作爲“字符串常量”的是( )。

 A. ABC       B.xyz     C.′uvw′          D. ′a′

答案:B

 

 (6)  設變量mnabcd均爲0,執行(m = a==b)||(n=c==d)後,mn的值是(  )。

 A.00        B. 01        C. 10         D. 11

答案:C

 

 (7)  字符串”vm/x43///np/102q”的長度是(   )。

A. 8          B. 10         C. 17            D. 16     

答案:A

 

8 C++語言中,自定義的標識符(  )。

A.能使用關鍵字並且不區分大小寫   B.不能使用關鍵字並且不區分大小寫

C.能使用關鍵字並且區分大小寫     D.不能使用關鍵字並且區分大小寫

答案:D

 

9)設有代碼“int a = 5;”,則執行了語句“a + = a - = a*a;”後,變量a的值是(   )。

A.3             B. 0          C. -40         D. –12

答案:C

 

10)設a5,執行下列代碼後,b的值不爲2的是(   )。

A. b = a/2                    B. b = 6-(--a)

C. b = a%2                   D. b = a < 3 ? 3: 2

答案:C

 

11下面的( )均是C語言的整型常量。

A.0xffff 611    B.01b 0xa1  C.986.012 0667      D.2e4 0x

答案:A

12)數學公式 寫成C表達式,下面的(   )是正確的。

A.sqrt (abs(pow(x, y) + exp(y)))     B.sqrt (abs(pow(y, x) + exp(y)))

C.sqrt (fabs(pow(x, y) + exp(y)))     D.sqrt (fabs(pow(y, x) + exp(y)))

答案:D

 

5.x爲int類型,y爲double類型,指出下列各表達式值的類型。

(1)1/3        int                (2) 48L           long

(3) 5 % 3     int                (4) x*3/y         double

(5) ‘x’+20    int                (6) (int )y          int

(7) y != 10    bool               (8)  x<1 || x>10   bool

(9) x>10 ? x : sqrt (x)  intfloat   (10) x && y       bool

(11) true     bool                (12) (char) (x+10)  char

(13) 1.0 /3   float                (14) sizeof (float)    int

(15) x,y,x+y,  double

說明:(9)題,如果x>10成立,表達式值的類型爲int,如果x>10不成立,表達式值的類型爲float。(15)題,爲逗號表達式,x+y的值即爲整個表達式的值,因而值的類型爲doublebool型在C++int代替,true值爲1false值爲0

 

6. 寫出下列算術表達式的值:

(1) x+a%3*(int)(x+y)%2/4   x=2.5,a=7,y=4.7        

答:上述表達式=2.5+1*int7.2%2/4 = 2.5+1*7%2/4 = 2.5

 

(2) (float)(a+b)/2+(int)x%(int)y   a=2,b=3,x=3.5,y=2.5

答:上述表達式=float5/2+3%2 = 2.5+1 = 3.5

 

7.設程序中有說明語句

int a=20;     double x=4.7;    char r= ’a’;

試求出下列每個表達式的值(假定各表達式互不影響)。~

                   答案                                  答案

      1a++            20                     (2) ++r                  98

(3) 1+a/3%4          3                      (4) 10*sizeof( int )         40

(5) char (a+20)        (                      (6)a= =r || a= =floor(x)      0

(7) a/9.0             2.222222           (8)x=pow(3,5)            273.000000

(9) x=(a++,r++)       97.000000         (10) ceil(x-0.5)           5.000000

(11) a=abs(a)%8-10    -6                     (12)x=fabs(-27.2)+6       33.200000

(13)floor(x+0.5)       5.000000          (14) ceil((x-=0.5)-0.5)      4.000000

(15)floor(x*1000+0.5)/1000  4.700000  (16)floor(x+0.5)           5.000000

(17)floor(x*1000)/1000     4.700000   (18)a+rand()%40        某一個隨機整數

(19) a % =n % = 2),n=5   5             

此題運行時要給n賦初值, n必須是整型奇數,n爲整型偶數出錯。

(20) a + = a - = a * = a       0

說明:函數ceilx),返回大於等於x的最小整數;floorx),返回小於等於x的最大整數;rand(),返回0~32767之間的整數。

 

8.設程序中有說明語句

int x=20;     float y=4.7;    char ch = ’k’;

試求出下列每個表達式的值(假定各表達式互不影響)

                 答案                                   答案

(1) x==0              0               (2) x!=y                1

(3) x++ >21           0               (4) a == A           0

(5) ch != 0           1               (6) x>0 && y>0          1

(7) x>0 && 1          1               (8) y>0 && 0            0

(9) !(x||y)==!x&&!y   0               (10) x++ !=20 || y      1

(11) !! ch==ch        0               (12) !(x&&y)==!x||!y    1

說明:C++語言提供了三種邏輯運算符:!,&&,||,其中!邏輯非的優先級最高,&&邏輯與次之,||邏輯或最低。!邏輯非是右結合性,&&邏輯與和||邏輯或是左結合性。

2.4 補充習題

1.       選擇題

1C++語言中的標識符只能右字母、數字和下劃線三種字符組成,且第一個字符(    )。

  A.必須爲字母                    B.必須爲下劃線      

C.必須爲字母或下劃線            D.可以是字母、數字和下劃線中任一中字符

 

2)下面正確的字符常量是(    )。

  A.“C          B.‘//’’       C.‘W        D.‘’

 

3)如果說明語句:char c=/72’;則變量c    )。

  A.包含1個字符           B.包含2 個字符

C.包含3個字符           D.說明不合法,c 的值不確定

 

4)表達式18/4*sqrt4.0/8值的數據類型爲(    )。

  Aint         Bfloat         Cdouble         D.不確定

 

5)關於邏輯運算符的說法正確的是(    )。

  A.它們都是雙目運算符,優先級相同

B.語句“int a=0,c=1,b;b=a&&c++; 執行後,c 的值爲2

C.語句“int a=0,c=1,b;b=a||c++; 執行後,c 的值爲2

D.語句“int a=1,c=1,b;b=a&&c++; 執行後,c 的值爲2

 

6)設 int m=7n=12;則表達式爲3的是(    )。

  An%=(m%=5)             Bn%=(m-m%5)

Cn%=m-m%5             D(n%=m)-(m%=5)

 

7)數學公式yx+lny,正確的C++語言的表達式是(    )。

  Asqrt(fabs(pow(y,x)+log(y)))     Bsqrt(fabs(pow(x,y)+log(y)))

Csqrt(abs(pow(y,x)+log(y)))      Dsqrt(abs(pow(x,y)+log(y)))

 

8)有如下程序段:

   int a=14,b=15,x;

   char c=’A’;

   x=(a&&b)&&(c<’B’);

  執行該程序後,x的值爲(    )。

  Ature        Bflase        C0          D1

 

  9)下面四個選項中,均是不合法的標識符的是(    )。

  AB         Bfor          Ccin        Dif

B_1          1a0              a_b          temp

cout          _a10             int           b-a

 

10)設變量a是整型,b是實型,c是雙精度型,則表達式10+a+c*b值的數據類型爲(   )。

  Aint         Bfloat         Cdouble         D.不確定

 

11)以下敘述中不正確的是(    )。

A.在C++程序中,nameNAME是兩個不同的變量 

B.在C++ 程序中,逗號運算符的優先級最低

C.若變量mnint型,則m=n後,n中的值不變

D.當從鍵盤輸入數據時,對於整型變量只能輸入整型數值,對於實型變量只能諸如實型數值。

 

12sizeoffloat)是(    )。

  A.一個雙精度型表達式            B.一個整型表達式

C.一種函數調用                  D.一個不合法的表達式

 

13)下面不正確的字符串常量是(    )。

  A.‘rst       B.“1414       C.“0        D.“ 

 

14)對代數式5ae/bc,下面不正確的C++語言表達式是(    )。

  Aa/b/c*e*5       B5*a*e/b/c       C5*a*e/b*c       Da*e/c/b*5

 

15)下列運算符中優先級最高的是(    )。

  A.?:         B&&           C+            D!=

 

16)設a是整型變量,則表達式(a=4*5a*2),a+6的值是(    )。

  A20           B26            C40           D46

 

17)設有:int a=1b=2c=3d=4m=2n=2;執行(m=a>b&&n=c<d)後n的值爲(    )。

  A1            B2             C3            D4

18)用C++的語言表達式表示 |x3+log10x|的正確是(    )。

  Afabsx*3+logx))                 Babspowx3+logx))

Cf abspowx3.0+logx))       Dabspowx3.0+logx))

 

19)設int k=7x=12;則能使值爲3的表達式是_____

  Ax%=k%=5               Bx%=k-k%5

Cx%=k-k%5                   D.(x%=k-k%=5

 

20)設有語句:int a=7float x=2.5y=4.7;則表達式x+a%3*int)(x+y%2/4的值是(    )。

  A2.500000        B2.750000        C3.500000        D0.000000

 

21)設有語句int x=3y=4z=5;則下面表達式中值爲0的是(    )。

  A’x’&&’y’                  Bx<=y

  Cx||y+z&&y-z               D.!((x<y&& !z | | 1

 

22)表達式18/4*sqrt4.0/8值的數據類型爲(    )。

  Aint           Bfloat          Cdouble          D.不確定

 

23)判斷char型變量n是否爲小寫字母的正確表達式爲(    )。

  A’a’<= n <=’z’                   B.(n>=a&&n<=z

C.(’a’>=n| |’z’<=n           D.(n>=’a’&&n<=’z’

 

2.       填空題

1 A”與‘A’的區別是:前者表示的是__________,佔用______個內存空間,後者表示的是_________,佔用_______個內存空間。

2 表達式8/4*(int)2.5/(int)(1.25*(3.7+2.3))值的數據類型爲_________

3)已知cASCII碼爲十進制數99,設k爲字符型變量,則表達式k=c+9-8’的值爲________

4)設有說明語句 int a=6;,則運算表達式a+=a-=a*a後,a的值爲_______

5C++表達式表達:y=ax2+bx+c_________________ 5x3+9xy/5-xy______________

6)設abc都是int型變量,則運算表達式a=(b=4)+(c=2)後,a值爲_____b值爲______c值爲______

  (7) C++語言中的標識符只能由三種字符組成,它們是______________________

8)有語句:char k=/010’;則變量k中包含的字符個數是_____

9)在C++語言中,表示邏輯“真”值用_____________

10)表達式pow2.8sqrtdoublex)))值的數據類型爲_________

11)設m是一個三位數,從左到右用abc表示各位是數字,則從左到右各個數字是cba的三位數的表達式是_________________________

12)設有語句int a=3b=4c=5;則表達式:!a+b+c-1&&b+c/2的值爲______,表達式a | | b+c&& b = = c的值爲______

13 請寫出判斷整型變量x爲偶數且不小於100的表達式:______________________

 

3.       編程題

1)用C++語言寫出下列要求的表達式:

    判斷char型變量ch是否爲大寫字母。

   yint變量,判斷y是否爲奇數。

   ƒ xyz都爲int型變量,描述“xy中有一個小於z”。

   xyz都爲int型變量,描述“xy z中有兩個爲負數”。

2)編寫一個程序,從鍵盤輸入兩個整型的數,在屏幕上分別輸出這兩個數的和、差和積。

3)編寫一個程序,從鍵盤輸入兩個數,分別求出這兩個數的平方和和立方和,在屏幕上予以輸出。

4)編寫程序,從鍵盤輸入某一字母的ASCII碼,如:97(字母a),98(字母b),65(字母A)等,在屏幕上輸出給字母。

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