C语言C++编程学习之表达式和语句+类型转换详解

今天我们来进一步学习多次使用了表达式和语句。

表达式

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++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

你可能感兴趣的:(C语言C++编程学习之表达式和语句+类型转换详解)