当前位置:首页 > 浙江大学刘加海C语言课件1
第1章 C程序设计基础
unsigned long b; b=a;
printf(\}
25 2.表达式类型的强制转换
强制类型转换表达式的形式如下: 转换格式:(类型名)<变量>;
其中(类型名)称为强制类型转换运算符,可以利用强制类型转换运算符,将一个表达式的值转换成指定的类型,这种转换是根据人为要求而进行的。
例1.26 表达式类型强制转换的例子。
#include
float x; int i; x=3.6; i=(int)x;
printf(\}
结果为:x=3.600000,i=3
注意:语句i=(int)x;把x强制转换后的结果赋给i,而x本身的类型并不改变。
例1.27 设x=2.5、a=7、y=4.7,算术表达x+a%3*(int)(x+y)%2/4的值为( )。 (A)2.5 (B)7 (C)4.7 (D)2.75
解析:取模运算只能在整型数据之间进行,a为整型变量。因为%、*、/这三个运算符的优先级别相同,而类型转换符优先于*、/运算符,a的值为7,7%3=1,又因为(int)(2.5+4.7)=7,1*7=7,7%2=1,1/4=0,所以表达式x+a%3*(int)(x+y)%2/4=x+0=2.5。答案:A。
1.7.3 自反算术赋值运算
在C语言中,如进行某一类运算: i=i+1;或j=j*(x+1);
在C语言中可以分别表示为:i+=1; j*=x+1;把这类运算称为自反算术赋值运算。其格式为:
<变量><运算符>=<表达式> 它等效为:
<变量>=<变量><运算符><表达式> 例如:
a+=表达式; 等效为:a=a+(表达式);
26 C语言程序设计 a-=表达式; 等效为:a=a-(表达式); a*=表达式; 等效为:a=a*(表达式); a/=表达式; 等效为:a=a/(表达式); a%=表达式; 等效为:a=a%(表达式);
注意:
y*=a+b;应等价于y=y*(a+b);而不是:y=y*a+b; 例1.28 分析以下程序执行的结果。
#include
int a=10;
a/=a+a; /*此表达式等效为a=a/(a+a) */ printf(\}
解析:先做a+a为20,然后做a=a/20;由于在a/20中都为整型,不作类型转换,即a=0,所以执行的结果为0。 1.7.4 连续赋值运算
在C语言中,可以对变量连续赋值,其格式为: <变量1>=<变量2>=??<变量n>=<表达式>;
先计算<表达式>值,再将其值赋给<变量n>,从右到左。 例如:a=b=c=1等效于a=(b=(c=1)); 例如:int a=1,b=2;
a+=b+(c=8); 求a的值。
解析:8赋给c,b+a+c赋给a,所以a的值为11。
例1.29 如有定义:int a=12 ; 求表达式a+=a-=a*=a的值为( )。 (A)12 (B)144 (C)0 (D)132
解析:表达式a+=a-=a*=a的运算方向是自右向左,即先计算a*=a,a值为a*a=144,再计算a-=a,a值为a-a=0,再计算a+=a,故表达式和a的值都为a+a=0。答案:C。 1.7.5 自加++、自减运算--
自加运算符“++”和自减运算符“--”的运算结果是使运算对象的值增1或减1。如: i++; 相当于 i= i+l; i--; 相当于 i= i-l;
因此,自加或自减运算本身也是一种赋值运算。
注意:
第1章 C程序设计基础
27 (1)自加、自减运算符是单目运算符,运算对象可以是整型变量,也可以是实型变量,不能是常量和表达式,因为不能给常量或表达式赋值;因此,如++3、(i+j)++等都是不合法的。
(2)自加、自减运算符既可做为前缀运算符,也可做为后缀运算符而构成一个表达式,如++i、i--等都是合法的表达式。但无论是作为前缀,还是作为后缀运算符,对于变量本身来说自增1或自减1都具有相同的效果,但作为表达式来说却有着不同的值。
例1.30 分析程序的执行结果。
#include
int i,j=10; i=j++;
printf(\}
解析:在语句i=j++;中要做两件事,一是自增,二是赋值,而++为后缀,此语句相当于:i=j,j++;先赋值后自增,因而i的值为10,j的值为11。程序运行的结果为:
i=10 j=11 。
注意:
++和--运算符的结合方向是?自右至左?。
例如,如有定义:int i=3;执行语句j=-i++;后,求i,j的值。在此语句中,i左边是负号运算符,右边是自加运算符。负号运算符和自加运算符优先级相同,但结合方向为自右至左。即相当于对表达式j=-(i++)进行运算。但此时读者不要错误理解为先做括号,此时括号只不过表示i与++相结合,它与运算的优先级是两码事。因而j的值为-3,i的值为4,此问题的程序设计为:
#include
例1.31 分析程序的执行结果。
#include
int i=3,j; j=-i++;
printf(\
28 void main() {
int x=2 ,i; i=++x;
printf(\printf(\}
C语言程序设计 解析:++i是在使用i之前,先使i的值加1;i++是在使用i之后,使i的值加1。当执行语句i=++x;后i的值为3,因为此语句等同于++x,i=x;语句printf(\,\,++i);相当于++i;printf(\,\,i);i的值及输出均为4。语句printf(\,\,i++);相当于printf(\,\,i),++i;输出的值为4,i的值为5,不过程序运行后的结果为4,4。
思考: 请设计一个程序,检验以下说法,在int i=4; printf(“i=%d\\n”,i++); 输出为i=4,内存中i的值为5。 提示:可再次输出内存中i的值。 1.7.6 长度测试运算符sizeof
长度测试运算符sizeof可用测试某个类型变量所占用计算机内存空间的字节长度。
格式:sizeof(类型名) 例如下面的程序段:
int a;
a=sizeof(float); printf(\
其输出的值为4,因为它是测试float型的数据长度。在Visual C++6.0中一些基本类型的数据长度如下:
int : 4字节 char 1字节 short int 2字节 long int 4字节 float 4字节
double 8字节 思考: 编写一个程序,在Visual C++6.0环境下分别测试int、double型数据的长度。 1.7.7 逗号运算符与逗号表达式
“,”是C语言提供的一种特殊运算符。用逗号将表达式连接起来的式子,称为逗号表达式。
逗号表达式的一般形式为:
共分享92篇相关文档