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)等,在屏幕上输出给字母。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值