3.1.1 不同类型的数据间的混合运算
在程序中经常会遇到不同类型的数据进行运算,如5 * 4.5。如果一个运算符两侧的数据类型不同,则先自动进行强制类型转化,使二者成为同一种类型,然后进行运算。整型、实型、字符型数据间可以进行混合运算。规律为:
数据类型 | 转化成的类型 |
float和double | double |
int或float和double | 先转化成float在转化成double |
字符(char)型数据与整型数据进行运算 | 就是把字符ASCII代码与整型数据进行运算 |
例如: 12 + ‘A’,由于’A’的ASCII值是65 ,相当于12 + 65 = 77 | |
字符型数据和实型数据 | ACII值转化成double类型的数据然后进行运算 |
例题1:给定一个大写字母,要求用小写字母输出
int main() { char c1 = 'A';//存放A的字符变量 char c2 = c1 + 32;//将A的字符变量加32就是小写a存放到c2中 printf("c2 = %c\n", c2);//打印得到的字符 printf("c2 = %d\n", c2);//打印其ASCII值 return 0; }
运行结果:
3.2.1强制类型转化换运算符
可以利用强制类型转化运算符将一个表达式转化成所需类型。例如:
(double)a //(将a转化成double型) (int) (x + y) //(将x + y转化成int类型) (float)(5 % 3) //(将5 % 3的值换成float型)
其它一般形式为:(类型名)(表达式)
注意,表达式应该用括号括起来。如果写成
(int)x + y //则只将x转化成int,然后与y相加
3.3.1 C语句的作用和分类
3.3.2控制语句
控制语句用于完成一定的控制功能C语言只有9种控制语句,它们的形式是:
if()…else…. | 条件语句 |
for()… | 循环语句 |
while()…. | 循环语句 |
do…while() | 循环语局 |
continue | 结束本次循环语句 |
break | 中止执行switch或循环语句 |
return | 从函数返回语句 |
goto | 转向语句,在结构化程序中基本不用goto语句 |
3.3.3函数调用语句
函数调用语句由一个函数用加一个分号构成,例如:
printf("This is C statement."); //其中printf("This is C statement.")就是一个函数调用,加一个分号成为一个语句
3.3.4表达式语句
表达式语句由一个表达式加一个分号构成,最典型的是由赋值表达式构成一个赋值语句。
例如:①a = 3
是一个赋值语句。
②a = 3;
是一个赋值表达式。
因此我们可以看到,一个表达式最后加一个分号就成了一个语句。一个语句必须在最后有一个分号。
3.3.5空语句
下面就是一个空语句:
;
此句只有一个分号,它什么也不用做。那它的作用是什么呢?可以用来作为流程的转向点,也可以用来作为循环语句中的循环体。
3.3.6复合语句
可以用{ }把一些语句和声明括起来成为复合语句(又称为语句块)。下面是一个复合语句:
int main() { float pi = 3.1415926; float r = 2.15; float area = 0.0; area = pi * r * r; printf("area = %f\n", area); return 0; }
可以在复合语句中包含声明部分,中运行C99中允许将声明部分放在复合语句中的任何位置,但习惯上把它放在语句块的开头。复合语句常用在if语句或者循环语句中此时程序需要连续执行一个组语句。
3.4.1最基本的语句 --赋值语句
3.4.1.2赋值运算符
赋值符号"="就是赋值运算符,它的作用是将一个数据赋给一个变量。如
a =3
的作用是执行一次赋值操作(称为赋值运算)。把常量3赋给a。也可以将一个表示的值赋值给一个变量。
3.4.1.3复合的赋值运算符
在赋值符 = 之前加上其它运算符,称为复合运算符。如果在"=“之前加个”+“运算符就成了复合运算符” +="。例如,可以有以下复合赋值运算符:
a += 3 //等价于 a = a + 3 x *= y + 8 //等价于 x = x * (y + 8) x %= 3 //等价于 x = x % 3
3.4.1.4赋值表达式
前面介绍过,赋值语句是在赋值表达式的末尾加上一个分号构成。那么什么是赋值表达式呢?
由赋值运算符将一个变量和一个表达式连接起来的式子称为"赋值表达式"。它的形式为: 变量 赋值运算符 表达式
赋值表达式的作用是将一个表达式的值赋给一个变量因此赋值表达式子具有计算和赋值的双重功能。如a = 3 * 5是一个赋值表达式。对赋值表达式求解的过程是:先求解赋值运算符右侧的"**表达式"**的值,然后赋给赋值运算符左侧的变量。
此外赋值运算符左侧应该是一个可修改的"左值"。左值的意思是它可以出现在赋值运算符的左侧,它的值是可以改变的。并不是任何形式的数据都可以作为左值的,左值应当为"存储空间"并可以"被赋值"。变量可以作为左值,而算术表达式a + b就不能作为左值,常量也不能作为左值,因为常量不能被赋值。
3.4.2赋值过程中的类型转换
如果赋值运算符的俩侧的类型一致,则可以直接进行赋值,如:i = 234; //已经设置i 为整型变量
(1)将浮点型数据(包括单精度,双精度)赋值给整型变量时,先对浮点数取整,即舍弃小数部分然后赋予整型变量。如果i 为整型变量,执行"i = 3.56;"的结果是使i=3
(2)将整型数据赋值给单、双精度时,数值不变,但以浮点数形式存储到变量中,如果float变量f,执行f = 23;先将整数23转化成实数23.0再按照指数形式存储在变量f中/
(3)将一个double类型的数据赋值给float变量时,先将双精度转换成为单精度,即只取6~7为有效数字,存储到float类型变量的4个字节中。应注意双精度数值大小不能超过float型变量的数值范围。例如将一个double型的变量d中的双精度实数赋给了一个float型变量f
double d = 123.456789e100;//指数为100超过了float数据的最大范围 f = d;
(4)字符型数据赋给整型变量时,将字符ASCII的值赋给整型变量。
(5)将一个占字节多的整型数据赋值给一个占字节少的整型变量或字符变量,具体讲解可以看这个链接,内容十分详细讲解了数据的存储与赋值过程中的变化:C语言中数据类型的存储
好了,今天的讲解就到这里了,如果有不好的地方希望各位多多指出,作者都会虚心接受并修改的,谢谢各位观看