第三章 数据类型、运算符与表达式 (答案)

来源:互联网 发布:apache 监控 插件 编辑:程序博客网 时间:2024/04/20 05:15

【例3.1】符号常量的使用。

#define PRICE 30main(){  int num,total;num=10;total=num* PRICE;printf(“total=%d”,total);}

n        用标识符代表一个常量,称为符号常量。

n        符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。

n        使用符号常量的好处是:

          Ø        含义清楚;

          Ø        能做到“一改全改”。


 

 下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。

类型说明符

数的范围

字节数

int

-32768~32767           即-215~(215-1)

2

unsigned int

0~65535              即0~(216-1)

2

short int

-32768~32767           即-215~(215-1)

2

unsigned short int

0~65535              即0~(216-1)

2

long int

-2147483648~2147483647即-231~(231-1)

4

unsigned long

0~4294967295         即0~(232-1)

4

以13为例:

int型:

00

00

00

00

00

00

11

01

short int型:

00

00

00

00

00

00

11

01

long int型:

00

00

00

00

00

00

00

00

00

00

00

00

00

00

11

01

unsigned int型:

00

00

00

00

00

00

11

01

unsigned short int型:

00

00

00

00

00

00

11

01

unsigned long int型:

00

00

00

00

00

00

00

00

00

00

00

00

00

00

11

01


【例3.2】整型变量的定义与使用
main(){int a,b,c,d;unsigned u;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}

【例3.3】整型数据的溢出。

main(){  int a,b;  a=32767;  b=a+1;  printf("%d,%d\n",a,b); }

32767:

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

-32768

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


【例3.4】

main(){  long x,y;  int a,b,c,d;  x=5;  y=6;  a=7;  b=8;  c=x+a;  d=y+b;  printf("c=x+a=%d,d=y+b=%d\n",c,d); }

【例3.6】实型数据的舍入误差。

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){double a,b;//此处为 doublea=123456.789e5;b=a+20; printf ("%f\n",a);printf("%f\n",b);}

常用的转义字符及其含义

转义字符

转义字符的意义

ASCII代码

       \n

回车换行

10

       \t

横向跳到下一制表位置

9

       \b

退格

8

       \r

回车

13

       \f

走纸换页

12

       \\

反斜线符"\"

92

       \'

单引号符

39

\”

双引号符

34

       \a

鸣铃

7

       \ddd

1~3位八进制数所代表的字符

 

       \xhh

1~2位十六进制数所代表的字符

 



3.8.1   C运算符简介

C语言的运算符可分为以下几类:

1.      算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

2.      关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

3.      逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

4.      位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

5.      赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

6.      条件运算符:这是一个三目运算符,用于条件求值(?:)。

7.      逗号运算符:用于把若干表达式组合成一个表达式(,)。

8.      指针运算符:用于取内容(*)和取地址(&)二种运算。

9.      求字节数运算符:用于计算数据类型所占的字节数(sizeof)。

10.  特殊运算符:有括号(),下标[],成员(→,.)等几种。


1.       自增、自减运算符

自增1,自减1运算符:自增1运算符记为“++”,其功能是使变量的值自增1。

自减1运算符记为“--”,其功能是使变量值自减1。

自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:

       ++i    i自增1后再参与其它运算。

       --i    i自减1后再参与其它运算。

       i++    i参与运算后,i的值再自增1。

       i--    i参与运算后,i的值再自减1。

在理解和使用上容易出错的是i++和i--。 特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。

【例3.16】

//尼玛的炫耀技巧有木有,没有可读性的有木有,实际中这样写-i--会被人骂娘的有木有。#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int i=8;printf("%d\n",++i);  //9  8+1=9printf("%d\n",--i);  //8  9-1=8printf("%d\n",i++);  //8  输出8后,i+1 此时内存中i=9printf("%d\n",i--);  //9  输出内存中的 9,i再-1,此时内存中i=8printf("%d\n",-i++); //-8 先执行-,输出-i=-8,再++,此时i=囧printf("%d\n",-i--); //-9 尼玛   囧RZ}/*i的初值为8,第2行i加1后输出故为9;第3行减1后输出故为8;第4行输出i为8之后再加1(为9);第5行输出i为9之后再减1(为8) ;第6行输出-8之后再加1(为9)第7行输出-9之后再减1(为8)。*/


【例3.18】

 
char c1='k',c2;......printf("%d,%f,%d,%c",a,x,a,c2);

例子中这种算法不具有可读性,现实中绝对不可使用,了解即可,无需深究,所以本文不予采纳为答案。



1.        复合的赋值运算符

在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。

构成复合赋值表达式的一般形式为:

变量  双目运算符=表达式

它等效于

变量=变量 运算符 表达式

例如:

   a+=5      等价于a=a+5

   x*=y+7    等价于x=x*(y+7)

   r%=p      等价于r=r%p

+= 加法赋值-= 减法赋值*= 乘法赋值/= 除法赋值%= 模运算赋值<<= 左移赋值>>= 右移赋值&= 位逻辑与赋值|= 位逻辑或赋值^= 位逻辑异或赋值

复合赋值符这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。



【例3.19】改

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int a=2,b=4,c=6,x,y,z;y=(x=a+b),z=(b+c);printf("y=%d,x=%d,z=%d",y,x,z);}

3.1   小结

3.1.1   C的数据类型

基本类型,构造类型,指针类型,空类型

3.1.2   基本类型的分类及特点

             

类型说明符

字节

数值范围

字符型

char

1

C字符集

基本整型

int

2

-32768~32767

短整型

short int

2

-32768~32767

长整型

long int

4

-214783648~214783647

无符号型

unsigned

2

0~65535

无符号长整型

unsigned long

4

0~4294967295

单精度实型

float

4

3/4E-38~3/4E+38

双精度实型

double

8

1/7E-308~1/7E+308

3.1.3   常量后缀

    L或l   长整型

    U或u  无符号数

F或f   浮点数

3.1.4   常量类型

    整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符。

3.1.5   数据类型转换

·自动转换:在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。

·强制转换:由强制转换运算符完成转换。

3.1.6   运算符优先级和结合性

    一般而言,单目运算符优先级较高,赋值运算符优先级低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。

3.1.7   表达式

    表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。表达式求值按运算符的优先级和结合性所规定的顺序进行。