变量赋值
变量赋初值
类型说明符 变量1=值1, 变量2=值2, ....;
int a = 1, //指定整型变量a,初值为1
float b = 1.28 //指定实型变量b,初值为1.28
也可以使被定义的变量的一部分赋初值。
- 如只对c赋初值:
int a,b,c=5;
- 如只对c赋初值:
如果对几个变量赋予初值,应写成:
int a=1,b=2,c=3;
各类数值型数据间的混合运算
- 整数、实数、字符型数据可以混合运算,如:10 + 'a'+ 1.5 - 8765.1234 * 'b'
- 若参与运算量的类型不同,应先转换成同一类型,然后进行运算。
- 转换按数据长度增加的方向进行,以保证精度不降低。
- 所有的浮点运算都是以双精度进行的。
- char型和short型参与运算时,必须先转换成int型。
- 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。
例子
设已定义i为int型变量,f为float型变量,d为double型变量, e为long型。
看下面的表达式:
10 + 'a' + i * f - d / e
在计算机执行时从左至右扫描,运算次序为:
- 第一步:先 10 + 'a'的运算,先将 'a' 转换成整型97,运算结果为107;
- 第二步:由于 “ * ” 比 “ + ” 优先,先进行 i * f 的运算。先将i与f都转成double型,运算结果为double型。
- 第三步:整数107与 i * f 的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.000...00),结果为double型。
- 第四步:将变量e化成double型,d/e结果为double型。
- 第五步:求整个表达式
10 + 'a' + i * f - d / e
的结果
运算符
算术运算符
运算符 | 描述 | 实例 (A=10, B=20) |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
\% | 取模运算符,整除后的余数 | B \% A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
-- | 自减运算符,整数值减少 1 | A-- 将得到 9 |
- + 、- 、* 、/ 运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行计算。
- 两个整数相除的结果为整数。如:5 / 3 的结果值为1,舍去小数部分。
- 两个数相除有一个有小数,则结果为小数,如:5.0 / 2= 2.5。
- 除数或被除数中有一个为负值,舍入方向不固定。例如,-5 / 3, 有的系统中得到的结果为-1,在有的系统中则得到结果为-2。Turbo C采取“向零取整”的方法,即5 / 3=1, -5 / 3= -1,取整后向零靠拢。
- \% 模运算符,或称求余运算符,\% 两侧均应为整型数据。如:7 \% 4 的值为3。
- 对于求余(\%)运算,结果与第一个数的符号相同。如:-5 \% 3 = -2; 5 \% 3 = 2; -5 \% -3 = -2
算数表达式
算术表达式和运算符的优先级与结合性
- 在表达式求值时,先按照运算符的优先级别高低次序执行。
- 算术运算符的结合方向为“自左向右”。
强制类型转换运算符
- 含义:用来将一个算术表达式的值转换成所需类型。
- 定义格式: (类型名) [表达式],如:
(int) (a + b)
例子
取整
#include <stdio.h>
void main()
{
int a;
float b = 10.65;
a = (int) b;
printf("%d\n",a);
}
- 不使用强制类型转换如(a = b),在执行不同类型变量进行运算时,两边都是数值型或字符型时,系统会进行自动转换。
- 无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的值进行的临时性转换而不改变数据说明时对该变量定义的类型。
自增自减运算符
定义格式
++a , --a
含义( a = a+1 , a = a-1)++a , --a
(在使用a之前,先使a的值加/减1)a++ , a--
(在使用a之后,使a的值加/减1)
- 自增1,自减1运算符均为单目运算,都具有右结合性。
- 作为单独的语句,
a++;
与++a;
并没什么区别,但是b= a++;
和b= ++a
就有区别了
#include <stdio.h>
void main() {
int a = 1, b = 1, x, y;
// 在使用a之后,使a的值加/减1
x = a++;
// x = a;
// a = a+1;
// 在使用b之前,先使b的值加/减1
y = ++b;
// b = b+1;
// y= b;
printf("%d,%d\n", x, y);
}
- 自增运算符(++)和自减运算符(--)只能用于变量,不能用于常量和表达式。如: 5++、(a+b)++ 都不合法。
++ 和 --的结合方向是“自右向左”。
- 如:
-i++
=-(i++)
i=3;
printf("%d",-i++);
结果为:-3
- 如:
赋值运算符
使用:如:a =3
- 类型转换
条件:如果赋值运算符两侧的类型不一致, 但都是数值型或字符型时,在赋值时要进行类型转换。
- 如:
int a;
a=6.3;
则 a 的值为6;
- 如:
- 将实型数据赋给整型变量时,舍弃实数的小数部分。
- 将整型数据赋给单、双精度变量时,数值不变,但以实数形式存储到变量中。
- 将一个double型数据赋给一个float型变量时,截取其前面的7位有效数字,存放到float变量的存储单元(32位)中。
- 字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2字节,因此将字符数据(8位) 放到整型变量低8位中
- 将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)
例子
字符型数据赋给整型变量
#include <stdio.h>
void main()
{
int i = 289;
char c = 'a';
c = i;
printf("%d\n", c);
}
转换过程:
复合的赋值运算符
- 在赋值符“=”之前加上其他运算符。
- 一般形式为: 变量 双目运算符 = 表达式
- 它等效于:变量 = 变量 运算符 表达式
例如:
a += 3
等价于a = a+3
x *= y+8
等价于x = x * (y+8)
x %= 3
等价于x = x % 3
赋值表达式
- 定义:由赋值运算符将一个变量和一个表达式连接起来的式子 。
- 一般形式: <变量> <赋值运算符> <表达式>
例如:
a = 1
赋值表达式值为1,a=1a = b = c =1
赋值表达式值为1,a=b=c=1a=1+(b=2)
赋值表达式值为3,a=3,b=2
例子
求表达式 a+ = a- = a*a
的值,a的初始值为12。
解:根据赋值运算符的“右结合性”
第一步:先求表达式
a -= a*a
;a- = a*a
等价于a = a - a*a
,结果为a= -132
第二步:再求表达式
a += -132
;a += -132
等价于a = a - 132
,注意上一步a的值已经变成了-132所以就是 -132-132,结果为a = -264
逗号运算符
C语言提供一种特殊的运算符逗号运算符。用它将两个表达式连接起来。
- 一般形式:表达式1,表达式2
- 扩展:表达式1,用表达式2,表达式3,...,表达式n
- 求解过程:根据左结合性,分别求n个表达式的值,并以表达式n的值作为整个逗号表达式的值。
例如:
a = 3 * 4,a * 5
表达式的值为60(a=3*4,a*5),a+6
表达式的值为18
练习
1、设int a; float f; double d; 则表达式 2、若有代数式|3a+2b|,则正确的C语言表达式为___。(求绝对值的函数 3、设x=2,y=3,则计算表达式 4、下面程序的运行结果是___。 5、下面程序输出的结果是___。 10 + a + i*f
的值的数据类型是___。fabs()
) y+=x++, x+y
的值为___。#include <stdio.h>
void main() {
int a = 2;
a %= 3;
a += a * 2;
printf("%d\n", a);
>
#include <stdio.h>
void main( ){
int x,y,m,n;
x=2;y=2
m=x++*5;
n=++y*5;
printf("%d,%d,%d,%d",x,y,m,n);
}
评论