第三章 C语言 的数据类型、
运算符和表达式第一节 标识符定义,用来标识常量名、变量名、函数名、
数组名、文件名等对象的有效字符序列命名规则:
1)由字母(大小写)、数字、下划线
2)第一个 字符必须为字母或下划线如,ab name file1 _sum
5x Doc,Bao ei int
√
×
注意事项:
( 1) 区分大小写,即大写字母和小写字母被认为是不同的字符。
如,name Name NAME
( 2) C语言的关键字是一类特殊标识符,它们具有特定的含义,已被 C语言做其他用途,即关键字不能做变量名、常量名、函数名、
文件名等
( 3),见名知意,,即选有相应含义的英文单词等作为标识符第二节 数据类型
1.概述
1)对,数据,的描述在程序中需要指定数据的类型即数据的组织形式,即 数据结构
2)对,动作,的描述值对数据的加工处理步骤与过程,即 算法
2.数据类型
C语言中,数据结构是以数据类型的形式来体现的。
数据类型是指数据的内在存储方式。
C语言提供了丰富的数据类型 p38
从另一个角度来看,C语言中的数据又可以分成:
常量变量第三节 常量整型常量(整数)
实型常量(实数)
字符常量(字符)
转义字符字符串常量如,123 -5 8
如,5.4 0.486
如,?aH?
如,?\n\012?
如,,China”
1.整型常量(整数)
表示形式正整数负整数十进制整型常量 0~ 9
八进制整型 常量 0~ 7
十六进制整型 常量 0~ 9,A~ F
如,整数 1234在 C语言中十,1234
八,02322
十六,0x4D2
2.实型常量(实数、浮点数)
小数形式指数形式表示形式
1)小数形式整数部分小数部分小数点格式,±整数部分,小数部分注意:
( 1) 当整数部分或小数部分为 0时,可省略不写,
但不能同时缺省(,0.0” 不能写成,,” )
( 2) 小数点是小数部分的标志,不能省略如,234.5 -3.6,156
-.034 0,78.
2)指数形式尾数部分指数部分
E或 e
格式,±尾数部分 e ±指数部分如,12.34e+9 表示
5.6789E-10 表示
-58.99e-6 表示
12.34× 109
5.6789× 10-10
-58.99× 10-6
注意:
( 1) 指数部分只能是整数,并且指数形式的 3个组成部分不能省略如,12.34e 5E e 5e3.6
( 2) 一个实数可以有多种表示形式如,789.989 表示 789.989e0
78.9989e1
7.89989e2
0.789989e3 等
e2
3.字符常量用一对单引号括起来的一个字符如,?aB>
注意:
( 1) 其中单引号只作为定界符使用,并不是字符常量的组成部分,即在输出字符常量时,一对单引号并不输出注意:
( 2) ‘ ’ ‘,‘ \’ 是不允许的
( 3) 在 C语言中,字符常量具有数值,在 ASCⅡ
代码表中,‘ a’的值为 97,‘ A’的值为 65
( 4) 字符常量在计算机内部以整数常量的形式存放,因此,字符常量与整型常量等价如,a=?D?+8; 等价于 a=68+6;
b=+?x?; 等价于 b=63+88;
4.转义字符常量在 C语言中,允许另一种特殊形式的字符常量,
即以一个,\” 开头的字符序列。意思是将,\”
后面的字符转换成为另外的意思。
转义字符都是以,\” 开头 p48
如,?\n\t\b\r\f?
\\\\”?
\101\x0A?
例,转义字符 1
main( )
{
printf(“boy\t\girl\n”);
printf(“\n 12 3\t 45\r6\t7\n”);
}
结果,boy
8列
girl
12 3 456 7
例,转义字符 2
main( )
{
printf(“\“\\I
say:\‘ Goodby!\?\\\”\n”);
}
5.字符串常量由一对双引号括起来的字符序列如,,Hello”,C Program”
“How are you!”
注意:
( 1) 字符串常量与字符常量的区别 如,,a”?a?
( 2) 容量不同
( 3) 占用内存空间大小不同 ‘ \0’
第四节 变量
1.变量和变量的地址变量 —— 在程序运行过程中,其值可以发生变化的量变量的地址 —— 定义变量后,变量在内存中存放的位置如,变量 y的值为 6,而 y的地址为 1800H
则说明 1800H存储单元中存放的值为 6
2.变量说明语句一般形式:
数据类型 变量名如,int age,total;
注意:
( 1) 可以在一个数据类型后说明多个相同类型的变量,变量名之间用,,,隔开,数据类型与变量名之间至少要用一个,,隔开注意:
( 2),;,位于最后一个变量之后
( 3) 必须放在变量使用之前,通常放在函数体开头部分
( 4) 变量一经说明,每个变量就有一个特定的类型,在编译时就对其分配相应的存储空间
3.整型变量 —— 用于存放整数的变量基本类型符 int -215~ 215-1 2个字节短整型 short int -215~ 215-1 2个字节长整型 long int -231~ 231-1 4个字节无符号型
unsigned int 0~ 216-1 2个字节
unsigned short 0~ 216-1 2个字节
unsigned long 0~ 232-1 4个字节例,整型变量的定义与引用
main( )
{
int a,b,x,y;
unsigned int m;
a=15; b=-8; m=10;
x=2*a-m;
y=2*b+m;
printf(“a+m=%d,b+m=%d\n”,x,y);
}
结果,a+m=20,b+m=-6
4.实型变量 —— 用于存放实数的变量单精度 float
双精度 double
长双精度 long double
P46表如,float a,b,c; /*定义 a,b,c为单精度实型变量 */
double x,y; /*定义 x,y为双精度实型变量 */
long double z; /*定义 z为长双精度实型变量 */
例,实型数据的舍入误差
main( )
{
float x,y;
x=1.23456789e10;
y=x+20;
printf(“x=%f\ny=%f\n”,x,y);
}
结果,x=12345678848.000000
y=12345678848.000000
5.字符型变量 —— 用于存放字符数据的变量类型符 char 0~ 255 1个字节如,char ch1,ch2; /*定义 ch1,ch2为字符变量 */
ch1=?a?; /*把字符常量 ‘a’赋给字符变量 ch1 */
ch2=?b?; /*把字符常量 ‘b’赋给字符变量 ch2 */
注意:
如,char c1=97;
int c1=?a?;
( 1)在 0~ 255内,字符型变量与整型变量可以通用注意:
( 2)一个字符既可以以字符形式输出,也可以以整数形式输出例,字符以整数形式输出
main( )
{ char c1,c2;
int c3,c4;
c1=97; c2=?b?;
c3=?a?; c4=98;
printf(“%c%c%c%c\n”,c1,c2,c3,c4);
printf(“%d%d%d%d\n”,c1,c2,c3,c4);
}
注意:
( 3)字符数据可以参与算术运算例 (1),大小写字母转换
main( )
{ char c1,c2;
printf(“Please input a letter:”);
scanf(“%c”,&c1);
c2=c1+?A?-?a?;
printf(“%c\t%c\n”,c1,c2);
}
例 (2):
main( )
{
char c;
c=?b?+?5?-?3?;
printf(“%c\n”,c);
}
第五节 变量赋初值
int a=3;
float f=3.5;
char c=?e?;
C语言规定,允许在定义变量的同时给变量初始化(即赋初指)
方法 1,int a;
a=3;
float f;
f=3.5
char c;
c=?e?;
如,int a,b,c=5;
/*定义 a,b,c为整型变量,其中 c的值为 5*/
如,int a=5,b=5,c=5;
/*定义 a,b,c为整型变量,初值均为 5*/
方法 2:被定义变量的一部分赋初值方法 3:对几个变量赋初值如,int a=b=c=5;
第六节 各类数值型数据间的混合运算转换规则,
double float
long
unsigned
int char,short
1.隐式转换:
例,10+‘ a?+i*f-d/e
设,i为整型 int
f为单精度实型 float
d为双精度实型 double
e为长整型 long
2.强制类型转换:(显式转换)
强制类型转换运算符 —— ( )
(类型名) 表达式如,int n; /*定义 n为整型变量 */
float d; /*定义 d为实型变量 */
d=sin((double)n); /*将 n转换为 double型 */
如,(double)a; /*将 a转换为 double型 */
(int)(x+y); /*将 x+y的值转换为 int型 */
第七节 算术运算符和算术表达式一、运算符简介 p55
二、算术运算符和表达式
1,基本运算符,+ - * / %
注意,
( 1) *不能省,也不能写成×或?
( 2) %参与运算量必须为整数,既它只适用于
int和 char型如,6%4 -6%4 6%-4
注意,
( 3) /用法与一般数学中用法规则不完全相同
① 参与运算的均为整数时,结果也为整数
② 如果运算中有一个是实数,则结果为 double型如,5/2 5/3 -7/4 8/-5 1/2
如,S= absinA 21
如,5.0/2 1/2.0 -7.0/4
2.优先级和结合性优先级,按运算符的优先级别高低次序执行如,a-b*c+d
结合性,,自左向右,
如,a+b-c-d
但也有一些运算符结合方向为,自右向左,
如,a=3
3.自增、自减运算符( ++,--)
++a,--a—— 在使用之前,先使变量 a的值加(减) 1
a++,a-- —— 在使用之后,再使变量 a的值加(减) 1
注意,
( 1) ++a,a++的区别
++a,a++ 都相当于 a=a+1
区别在于:
如,a=5; b=++a;
a=5; b++=a;
( 2) ++,--只能用与变量,不能用于常量或表达式注意,
如,2++ ( 2*b-1)--
( 3) 与其它运算符混合使用时,应注意结合方向
,自右向左,
如,-a++ -(a++)
(-a)++
例 1,
int i,j,k;
i=3;
j=i++;
k=++i;
最后 i= j= k=,请填空5 3 5
例 2:
main( )
{
int a,b,c;
a=3;b=5;
c=(--a)+(--b);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
a=3;b=5;
c=(a--)+(b--);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
}
4.赋值运算符和赋值表达式
( 1)简单的赋值运算符 ——,=”
如,a=5 /*把 5赋给变量 a*/
注意,
①,=“左边必须是变量,右边可以时变量、
常量、函数调用、表达式等如,a=5.66 y=23.5+a*b-c/d
b=c z=sqrt(3)+2*c
i=i+1
注意,
②,=” 与数学中的等号外观相同,但含义、作用不同,i=i+1在数学中不成立,但在 C语言中成立
③ 如果,=” 两侧类型不同,在赋值过程中要进行类型转换转换规则,不论赋值号两侧级别高低如何,
一律将赋值号右边的类型转换成左边的类型,然后再赋值具体规定:
a.整型变量 =实数如,a=5.99 则 i的值为,5
b.单、双精度变量 =整数如,float x;
x=2 则 x的值为,2.000000
c.整型变量 =字符数据
d.字符变量 =整型数据
( 2)复合的赋值运算符如,x+=4 /*先使 x+4,再赋给 x*/
x=x+4
如,b-=5
a*=b+2
m/=y-15
y%=2
令 b=8 a=2 m=30 y=17
则 b= a= m= y=,3 10 15 1
一般形式:
变量 =表达式
( 3)赋值表达式如,a=5
b=c*5+12
注意,
①,=“右边的表达式又可以是一个赋值表达式即出现多个,=” 的情况如,a=b=3 /*把 3赋给变量 b
最后变量 a的值为 3*/
如,a=b=c=d=3 表达式值为,
x=(y=6)+3 表达式值为,
z=(x=16)*( y=4) 表达式值为,
3
9
64
注意,
② 赋值表达式还可以包含复合运算符如,x+=y*=3
令 x=5;y=2
求 表达式最后值为,
x的值为,
y的值为,
11
6
11
5.逗号运算符和逗号表达式 ——“,,
一般形式:
表达式 1,表达式 2,表达式 3,…,表达式 n
如,2+3,3*5
则 表达式最后值为,15
注意,
( 1) 优先级最低如,x=2+3,x-4
则 表达式最后值为,1
注意,
( 2) 逗号表达式可以嵌套,即表达式 n本身也可以为一逗号表达式如,( x=2*5,x-3),x*4
则 表达式最后值为,40
( 3) 并非所有出现逗号的地方,就可以作为逗号表达式如,printf(“%d,%d,%d”,a,b,c);
printf(“%d,%d,%d”,(a,b,c),x,y);
习题例 1,main()
{
float a;
int b;
printf(“Enter a float number:\n”);
scanf(“%f”,&a);
b=(int)a%10;
printf(“%d\n”,b);
}
运行时输入,56.789
习题例 2,main()
{
int a=4,b,c;
a*=5+2;
printf(“%d\n”,a++);
a-=b=c=6;
printf(“%d,%d,%d\n”,a,b,c);
}
/*a=a*(5+2)*/
习题例 3,main()
{
int a=2;
a%=5-1;
printf(“%d\n”,a);
a+=a*=a-=a*=5;
printf(“%d\n”,a);
}
习题例 4,main()
{
int i=2;
i+=i-=i+i;
printf(“%d\n”,i);
}
习题例 5,main()
{
int a=5,b=2;
float x=4.5,y=3.0,u;
u=a/3+b*x/y+1/2;
printf(“%f\n”,u);
}
习题例 6,main()
{
int i=2,j;
(j=3*i,j+2),j*5;
printf(“j=%d\n”,j);
}
习题例 7,main()
{
int i=2,j=4;
printf(“%d\n”,(i=i+1,i+j,j+1));
}
运算符和表达式第一节 标识符定义,用来标识常量名、变量名、函数名、
数组名、文件名等对象的有效字符序列命名规则:
1)由字母(大小写)、数字、下划线
2)第一个 字符必须为字母或下划线如,ab name file1 _sum
5x Doc,Bao ei int
√
×
注意事项:
( 1) 区分大小写,即大写字母和小写字母被认为是不同的字符。
如,name Name NAME
( 2) C语言的关键字是一类特殊标识符,它们具有特定的含义,已被 C语言做其他用途,即关键字不能做变量名、常量名、函数名、
文件名等
( 3),见名知意,,即选有相应含义的英文单词等作为标识符第二节 数据类型
1.概述
1)对,数据,的描述在程序中需要指定数据的类型即数据的组织形式,即 数据结构
2)对,动作,的描述值对数据的加工处理步骤与过程,即 算法
2.数据类型
C语言中,数据结构是以数据类型的形式来体现的。
数据类型是指数据的内在存储方式。
C语言提供了丰富的数据类型 p38
从另一个角度来看,C语言中的数据又可以分成:
常量变量第三节 常量整型常量(整数)
实型常量(实数)
字符常量(字符)
转义字符字符串常量如,123 -5 8
如,5.4 0.486
如,?aH?
如,?\n\012?
如,,China”
1.整型常量(整数)
表示形式正整数负整数十进制整型常量 0~ 9
八进制整型 常量 0~ 7
十六进制整型 常量 0~ 9,A~ F
如,整数 1234在 C语言中十,1234
八,02322
十六,0x4D2
2.实型常量(实数、浮点数)
小数形式指数形式表示形式
1)小数形式整数部分小数部分小数点格式,±整数部分,小数部分注意:
( 1) 当整数部分或小数部分为 0时,可省略不写,
但不能同时缺省(,0.0” 不能写成,,” )
( 2) 小数点是小数部分的标志,不能省略如,234.5 -3.6,156
-.034 0,78.
2)指数形式尾数部分指数部分
E或 e
格式,±尾数部分 e ±指数部分如,12.34e+9 表示
5.6789E-10 表示
-58.99e-6 表示
12.34× 109
5.6789× 10-10
-58.99× 10-6
注意:
( 1) 指数部分只能是整数,并且指数形式的 3个组成部分不能省略如,12.34e 5E e 5e3.6
( 2) 一个实数可以有多种表示形式如,789.989 表示 789.989e0
78.9989e1
7.89989e2
0.789989e3 等
e2
3.字符常量用一对单引号括起来的一个字符如,?aB>
注意:
( 1) 其中单引号只作为定界符使用,并不是字符常量的组成部分,即在输出字符常量时,一对单引号并不输出注意:
( 2) ‘ ’ ‘,‘ \’ 是不允许的
( 3) 在 C语言中,字符常量具有数值,在 ASCⅡ
代码表中,‘ a’的值为 97,‘ A’的值为 65
( 4) 字符常量在计算机内部以整数常量的形式存放,因此,字符常量与整型常量等价如,a=?D?+8; 等价于 a=68+6;
b=+?x?; 等价于 b=63+88;
4.转义字符常量在 C语言中,允许另一种特殊形式的字符常量,
即以一个,\” 开头的字符序列。意思是将,\”
后面的字符转换成为另外的意思。
转义字符都是以,\” 开头 p48
如,?\n\t\b\r\f?
\\\\”?
\101\x0A?
例,转义字符 1
main( )
{
printf(“boy\t\girl\n”);
printf(“\n 12 3\t 45\r6\t7\n”);
}
结果,boy
8列
girl
12 3 456 7
例,转义字符 2
main( )
{
printf(“\“\\I
say:\‘ Goodby!\?\\\”\n”);
}
5.字符串常量由一对双引号括起来的字符序列如,,Hello”,C Program”
“How are you!”
注意:
( 1) 字符串常量与字符常量的区别 如,,a”?a?
( 2) 容量不同
( 3) 占用内存空间大小不同 ‘ \0’
第四节 变量
1.变量和变量的地址变量 —— 在程序运行过程中,其值可以发生变化的量变量的地址 —— 定义变量后,变量在内存中存放的位置如,变量 y的值为 6,而 y的地址为 1800H
则说明 1800H存储单元中存放的值为 6
2.变量说明语句一般形式:
数据类型 变量名如,int age,total;
注意:
( 1) 可以在一个数据类型后说明多个相同类型的变量,变量名之间用,,,隔开,数据类型与变量名之间至少要用一个,,隔开注意:
( 2),;,位于最后一个变量之后
( 3) 必须放在变量使用之前,通常放在函数体开头部分
( 4) 变量一经说明,每个变量就有一个特定的类型,在编译时就对其分配相应的存储空间
3.整型变量 —— 用于存放整数的变量基本类型符 int -215~ 215-1 2个字节短整型 short int -215~ 215-1 2个字节长整型 long int -231~ 231-1 4个字节无符号型
unsigned int 0~ 216-1 2个字节
unsigned short 0~ 216-1 2个字节
unsigned long 0~ 232-1 4个字节例,整型变量的定义与引用
main( )
{
int a,b,x,y;
unsigned int m;
a=15; b=-8; m=10;
x=2*a-m;
y=2*b+m;
printf(“a+m=%d,b+m=%d\n”,x,y);
}
结果,a+m=20,b+m=-6
4.实型变量 —— 用于存放实数的变量单精度 float
双精度 double
长双精度 long double
P46表如,float a,b,c; /*定义 a,b,c为单精度实型变量 */
double x,y; /*定义 x,y为双精度实型变量 */
long double z; /*定义 z为长双精度实型变量 */
例,实型数据的舍入误差
main( )
{
float x,y;
x=1.23456789e10;
y=x+20;
printf(“x=%f\ny=%f\n”,x,y);
}
结果,x=12345678848.000000
y=12345678848.000000
5.字符型变量 —— 用于存放字符数据的变量类型符 char 0~ 255 1个字节如,char ch1,ch2; /*定义 ch1,ch2为字符变量 */
ch1=?a?; /*把字符常量 ‘a’赋给字符变量 ch1 */
ch2=?b?; /*把字符常量 ‘b’赋给字符变量 ch2 */
注意:
如,char c1=97;
int c1=?a?;
( 1)在 0~ 255内,字符型变量与整型变量可以通用注意:
( 2)一个字符既可以以字符形式输出,也可以以整数形式输出例,字符以整数形式输出
main( )
{ char c1,c2;
int c3,c4;
c1=97; c2=?b?;
c3=?a?; c4=98;
printf(“%c%c%c%c\n”,c1,c2,c3,c4);
printf(“%d%d%d%d\n”,c1,c2,c3,c4);
}
注意:
( 3)字符数据可以参与算术运算例 (1),大小写字母转换
main( )
{ char c1,c2;
printf(“Please input a letter:”);
scanf(“%c”,&c1);
c2=c1+?A?-?a?;
printf(“%c\t%c\n”,c1,c2);
}
例 (2):
main( )
{
char c;
c=?b?+?5?-?3?;
printf(“%c\n”,c);
}
第五节 变量赋初值
int a=3;
float f=3.5;
char c=?e?;
C语言规定,允许在定义变量的同时给变量初始化(即赋初指)
方法 1,int a;
a=3;
float f;
f=3.5
char c;
c=?e?;
如,int a,b,c=5;
/*定义 a,b,c为整型变量,其中 c的值为 5*/
如,int a=5,b=5,c=5;
/*定义 a,b,c为整型变量,初值均为 5*/
方法 2:被定义变量的一部分赋初值方法 3:对几个变量赋初值如,int a=b=c=5;
第六节 各类数值型数据间的混合运算转换规则,
double float
long
unsigned
int char,short
1.隐式转换:
例,10+‘ a?+i*f-d/e
设,i为整型 int
f为单精度实型 float
d为双精度实型 double
e为长整型 long
2.强制类型转换:(显式转换)
强制类型转换运算符 —— ( )
(类型名) 表达式如,int n; /*定义 n为整型变量 */
float d; /*定义 d为实型变量 */
d=sin((double)n); /*将 n转换为 double型 */
如,(double)a; /*将 a转换为 double型 */
(int)(x+y); /*将 x+y的值转换为 int型 */
第七节 算术运算符和算术表达式一、运算符简介 p55
二、算术运算符和表达式
1,基本运算符,+ - * / %
注意,
( 1) *不能省,也不能写成×或?
( 2) %参与运算量必须为整数,既它只适用于
int和 char型如,6%4 -6%4 6%-4
注意,
( 3) /用法与一般数学中用法规则不完全相同
① 参与运算的均为整数时,结果也为整数
② 如果运算中有一个是实数,则结果为 double型如,5/2 5/3 -7/4 8/-5 1/2
如,S= absinA 21
如,5.0/2 1/2.0 -7.0/4
2.优先级和结合性优先级,按运算符的优先级别高低次序执行如,a-b*c+d
结合性,,自左向右,
如,a+b-c-d
但也有一些运算符结合方向为,自右向左,
如,a=3
3.自增、自减运算符( ++,--)
++a,--a—— 在使用之前,先使变量 a的值加(减) 1
a++,a-- —— 在使用之后,再使变量 a的值加(减) 1
注意,
( 1) ++a,a++的区别
++a,a++ 都相当于 a=a+1
区别在于:
如,a=5; b=++a;
a=5; b++=a;
( 2) ++,--只能用与变量,不能用于常量或表达式注意,
如,2++ ( 2*b-1)--
( 3) 与其它运算符混合使用时,应注意结合方向
,自右向左,
如,-a++ -(a++)
(-a)++
例 1,
int i,j,k;
i=3;
j=i++;
k=++i;
最后 i= j= k=,请填空5 3 5
例 2:
main( )
{
int a,b,c;
a=3;b=5;
c=(--a)+(--b);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
a=3;b=5;
c=(a--)+(b--);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
}
4.赋值运算符和赋值表达式
( 1)简单的赋值运算符 ——,=”
如,a=5 /*把 5赋给变量 a*/
注意,
①,=“左边必须是变量,右边可以时变量、
常量、函数调用、表达式等如,a=5.66 y=23.5+a*b-c/d
b=c z=sqrt(3)+2*c
i=i+1
注意,
②,=” 与数学中的等号外观相同,但含义、作用不同,i=i+1在数学中不成立,但在 C语言中成立
③ 如果,=” 两侧类型不同,在赋值过程中要进行类型转换转换规则,不论赋值号两侧级别高低如何,
一律将赋值号右边的类型转换成左边的类型,然后再赋值具体规定:
a.整型变量 =实数如,a=5.99 则 i的值为,5
b.单、双精度变量 =整数如,float x;
x=2 则 x的值为,2.000000
c.整型变量 =字符数据
d.字符变量 =整型数据
( 2)复合的赋值运算符如,x+=4 /*先使 x+4,再赋给 x*/
x=x+4
如,b-=5
a*=b+2
m/=y-15
y%=2
令 b=8 a=2 m=30 y=17
则 b= a= m= y=,3 10 15 1
一般形式:
变量 =表达式
( 3)赋值表达式如,a=5
b=c*5+12
注意,
①,=“右边的表达式又可以是一个赋值表达式即出现多个,=” 的情况如,a=b=3 /*把 3赋给变量 b
最后变量 a的值为 3*/
如,a=b=c=d=3 表达式值为,
x=(y=6)+3 表达式值为,
z=(x=16)*( y=4) 表达式值为,
3
9
64
注意,
② 赋值表达式还可以包含复合运算符如,x+=y*=3
令 x=5;y=2
求 表达式最后值为,
x的值为,
y的值为,
11
6
11
5.逗号运算符和逗号表达式 ——“,,
一般形式:
表达式 1,表达式 2,表达式 3,…,表达式 n
如,2+3,3*5
则 表达式最后值为,15
注意,
( 1) 优先级最低如,x=2+3,x-4
则 表达式最后值为,1
注意,
( 2) 逗号表达式可以嵌套,即表达式 n本身也可以为一逗号表达式如,( x=2*5,x-3),x*4
则 表达式最后值为,40
( 3) 并非所有出现逗号的地方,就可以作为逗号表达式如,printf(“%d,%d,%d”,a,b,c);
printf(“%d,%d,%d”,(a,b,c),x,y);
习题例 1,main()
{
float a;
int b;
printf(“Enter a float number:\n”);
scanf(“%f”,&a);
b=(int)a%10;
printf(“%d\n”,b);
}
运行时输入,56.789
习题例 2,main()
{
int a=4,b,c;
a*=5+2;
printf(“%d\n”,a++);
a-=b=c=6;
printf(“%d,%d,%d\n”,a,b,c);
}
/*a=a*(5+2)*/
习题例 3,main()
{
int a=2;
a%=5-1;
printf(“%d\n”,a);
a+=a*=a-=a*=5;
printf(“%d\n”,a);
}
习题例 4,main()
{
int i=2;
i+=i-=i+i;
printf(“%d\n”,i);
}
习题例 5,main()
{
int a=5,b=2;
float x=4.5,y=3.0,u;
u=a/3+b*x/y+1/2;
printf(“%f\n”,u);
}
习题例 6,main()
{
int i=2,j;
(j=3*i,j+2),j*5;
printf(“j=%d\n”,j);
}
习题例 7,main()
{
int i=2,j=4;
printf(“%d\n”,(i=i+1,i+j,j+1));
}