一、C语句的作用和分类 | 控制语句、函数调用语句、表达式语句、空语句、复合语句 |
二、赋值语句 | 赋值运算符、复合的赋值运算符、赋值表达式、赋值过程中的类型转换、变量赋初值 |
一、C语句的作用和分类
一个函数包含声明部分和执行部分,执行部分由语句组成的,语句的作用是向计算机系统发出操作指令。C语句分为以下5类:
(1)控制语句:控制语句用于完成一定的控制功能。C语言有九种控制语句:
条件语句 | 循环语句 | 循环语句 |
if().....elae | for().... | while().... |
循环语句 | 结束本次循环语句 | 终止执行switch或循环语句 |
do.....whilw() | continue | break |
多分支选择语句 | 从函数返回语句 | 转向语句 |
switch | return | goto |
(2)函数调用语句:函数调用语句由一个函数调用加一个分号构成。例如:
ptintf("This? is? a? cat");
(3)表达式语句:表达式语句由一个表达式和一个分号组成,最典型的就是赋值表达式构成一个赋值语句。例如
a=3? ?(赋值表达式)
a=3;? //是赋值语句
由此可得,一个表达式最后加一个分号就成了一个语句。函数表达式语句也是调用语句的一种。
(4)空语句:此语句只有一个分号,什么也不做。例如:
? ?;? ? ? ? ? ?//(空语句)
空语句的作用是:a、作为流程的转向点(流程从其他地方转到此语句);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?b、可以作为循环语句中的循环体;
(5)复合语句:可以用{}把一些语句和声明括起来成复合语句。例如:
{
? ? ? float? pi=3.14,r=2.5,area;
? ? ? ?area=pi*r*r;
? ? ? ? printf("area=%f",area);
}
复合语句常用于if语句或循环体中,此程序需要连续执行一组语句。
二、最基本的语句-赋值语句
1、赋值运算符:赋值符号“=”就是赋值运算符,它的作用就是将一个数据赋给一个变量。
例如:? ?a=3
2、复合的赋值运算符:在赋值符=之前加上其他运算符,就可以构成复合的运算符。
例如: a+=3? ? ?等价于? ?a=a+3
? ? ? ? ? ? x*=y+8? ? ? 等价于x=x*(y+8)
凡是二元运算符,都可以与赋值运算符一起组合成复合赋值符。有关算数运算的复合赋值运算符有:+=、-+、*=、/=、%=。
3、赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子成为“赋值表达式”。形式为:变量? ?赋值运算符? ?表达式
赋值表达式的作用就是将一个表达式的值赋给一个变量,因此它具有计算和赋值的双重功能。对赋值表达式求解的过程就是先求赋值表达式右侧的值,再把右侧的值赋给左侧的变量。赋值运算符的左侧应该是一个可修改值的"左值",它的值是可以改变的。左值作为存储空间并可以被赋值,并不是任何类型数据都可以作为左值。变量可以作为左值,常量、算数表达式不可以作为左值。赋值运算符的右侧称为“右值”,显然左值也可以出现在赋值运算符右侧。例如:c=b;
赋值表达式中的“表达式”也可以是一个赋值表达式,例如:a=(b=5);括号中的b=5就是一个赋值表达式。表达式“a=(b=5);”就是执行b=5和a=b两个赋值表达式,因此a的值为5。赋值运算符按照“自右而左”的结合顺序。
4.赋值过程中的类型转换
如果赋值运算符两侧的类型一致,则直接进行赋值。例如:
i=124;? ? ? ? ? //已设定i为整型变量。此时直接将整数存入i的储存单元中。
如果赋值运算符两侧的值类型不一致,但都是基本类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的,转换规则是:
(1)将浮点型数据分给整型变量时,先对浮点数取整,舍弃小数部分,然后赋予整型变量。
(2)将整形数据赋给浮点数时,数值不变,以浮点数的形式存储到变量中。分单精度和双精度。
(3)将double型赋给float型变量中,先将双精度转换成单精度,取6-7位有效数字,存储到float型变量4个字节中。应注意双精度数值的大小不能超过float型变量的数值范围,如果超出,就会出现错误。
? ? ? ? ?将float型数据赋给double型变量中,数值不变,在内存中以8个字节储存,有效数扩到15位。
(4)字符型数据赋给整形变量时,将字符的ASCII代码赋给整型变量。
(5)将一个占字节多的整形数据赋给一个占字节少的整型变量或字符变量,只有将其低字节原封不动的送到被复制的变量中(即发生了“截断”)。例如:
例如:int i=289;? ? ? ? ? ? ? ?//i的补码:00000001? 00100001? ??
? ? ? ? char c='a';? ? ? ? ? ? ??
? ? ? ? c=i;? ? ? ? ? ? ? ? ? ? ? //? ? ? ?赋值后c的补码:? ? ? ? ? ? 00100001
c 是char类型,占的字节少,因此将int中的低字节复制到c中
c的值为33,用"%c"输出c得到”!"
5、赋值表达式和赋值语句
赋值语句属于表达式语句,由一个赋值表达式加一个分号构成。
赋值表达式既然是表达式,那么就可以出现在其它表达式中,例如:
if((a=b)>0)? ? ?max=a;? ? ? ? ? ? ? //a=b是赋值表达式
注:区分赋值表达式和赋值语句,赋值表达式的末尾没有分号,赋值语句的末尾必须有分号。一个表达式中可以包含一个或多个赋值表达式,但绝对不能包含赋值语句。
6、变量赋初值:赋值语句可以在定义变量时对变量赋以初值。这样可以使程序更简练。例如
(1)int a=3;? ? ? ? ? //指定a为整型变量,初值为3.
(2)也可以定义一部分初值,例如:
int a,b,c=5;? ? ? ? ? ?//指定a,b,c为整型变量,只对c初始化,c的初值为5.
(3)对几个变量赋同一初值,例如:
int a=3,b=3,c=3;? ? ? ?//而不是int a=b=c=3;
一般变量初始化不是在编译阶段完成的,而是在程序执行本函数时,赋予初值的,相当于执行一个赋值语句。例如:
int? a=3;
相当于:
int? a;
a=3;
??? ? ? ? ? ? ? ? ? ?
? ? ? ? ?