今天我们来进一步学习多次使用了表达式和语句。
表达式
C程序的基本步骤有语句组成,而大多数语句都有表达是构成。因此我们先讨论表达式。
表达式:由运算符和运算对象组成(运算对象是运算符的操作对象)。最简单的表达式是一个单独的运算对象(就像4、-6),以此为基础可以建立复杂的表达式(就像p<4+4)。更专业一点可以这么说,运算对象可以是由变量、常量、二者的组合。一些表达式有子表达式组成(即较小的表达式)。
C表达式的一个最重要的特性就是每一个表达式都有一个值。要获得这个值,必须根据运算符优先级进行操作。
下面给出几个表达式:
x = 6 * 6;
x > 6;
关于表达式的值的问题,我们来看看上面两个表达式的值分别是多少。1式,是一个计算式,那么它的值就是6*6的结果36;2式是一个判断式,这样的式子在前面早已出现过多次,比如while循环的()里就有这样的表达式,它的值不是0就是1,条件为假就是0,条件为真就是1。(真假判断这些,我们在下面的内容中或重点讲到,这里只要知道判断式的值非0即1 。
语句
语句是c程序的基本构建块,一条语句相当于一条计算机指令,在C程序中,大部分语句都以“;”结尾。
形如x = 2只是一个表达式,而x = 2;才是一条语句。(还有一种语句叫做空语句“;”)
[cpp]view plaincopy
/*addemup.c -- 几种常见的语句*/
#include
int main(void)
{
int count, sum;
count = 0;
sum = 0;
while (count++ < 20)
sum = sum + count;
printf("sum = %d\n", sum);
return 0;
}
在这个程序中要提醒大家的是,声明不是表达式语句。也就是说,如果删除什么后面的分号,剩下的部分不是一个表达式,也没有值。(说实话,没太看明白)赋值表达式语句在程序中非常常用:它为变量分配一个值。
复合语块(块)
复合语句(或块):由花括号括起来的一条或多条语句组成,如下:小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
[cpp]view plaincopy
while(++shoe <= 18)
{
foot = SCALE * shoe + ADJUST;
printf("%10.1f %15.2f inches\n", shoe, foot);
}
这就是一条复合语句。
类型转换
通常在已经和表达式中应使用类型相同的变量和常量,但如果使用混合类型,C会采用一套规则进行自动类型转换。这看上去很方便,但是会有一定的危险性。可能会出现莫名其妙的结果,在前面的某篇文章中有出现过。
当类型转换出现在表达式时,无论是unsigned 还是 signed的char 和 short(对应4种类型) 都会变成int如果有必要会转换成unsigned int 。
涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
类型的级别从高到低依次是 long double > double > float > unsignedlong long > long long > unsigned long > long > unsigned int > int 。(例外情况)当long 和 int 的大小相同时,unsigned int 比 long级别高。
在赋值表达式语句中,计算的最终结果会被转换成赋值变量的类型,其过程可能升级也可能降级。
类型升级通常不会有什么麻烦,但是降级的能会出问题。原因很简单,较低的类型可能不能放下整个数字,取决于类型可存放的字节数。
[cpp]view plaincopy
/*convert.c -- 自动类型转换*/
#include
int main (void)
{
char ch;
int i;
float fl;
fl = i = ch ='C';
printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
ch = 80.98;
printf("Now ch = %c\n", ch);
return 0;
}
运行结果为:
ch = C, i = 67, fl = 67.00
ch = D, i = 203, fl = 339.00
Now ch = P
改成几乎涵盖了上面的内容,大家可以一一验证。
【强制类型转换】
我们作为程序的操控者,不能看着自己的出因为自动转换而出错,所以就有了强制类型转换,其目的是为了避免错误的发生。强制类型转换的格式也很简单,形如:m = (int)1.2345 + (int)6.789 这样在右值前面加上“(类型名)”,右值就会转换成该类型。总之尽量避免这样的事情发生才是根本。小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!