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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容