目录
回顾:
一、定义概念:
二、表达式的分类
举例说明:
(一)首先是加、减、乘、除、取余四种表达式:
(二)一元表达式
(三)强制转换表达式
(四)判断表达式
(五)逻辑表达式
(六)移位表达式
小结
写在最后:
回顾:
在上一篇博客中我们通过一个羞羞的小故事了解了什么“常量”什么是“变量”。我们了解到了变量有什么用,应该怎么使用。对,变量可以用来表示一个常量,可以在使用的过程中重新赋值,多次重复使用。
除此之外,我们通过一个模拟“加法运算”的小程序简单的了解了scanf语句的用法:scanf(“这个双引号中写输入的变量的数据类型(%d或者别的)”,这里写变量的地址(&变量名));例如scanf(“%d %c”, &a, &b);就是输入一个整数a,一个字符b。至于什么是地址?我们暂时不需要了解,在今后学到指针的时候会给大家详细介绍,我们现在只需要知道怎么用。
今天我们学习C语言基础的另一部分内容——表达式。
一、定义概念:
C语言中的表达式一种有值的语法结构,它由运算符将变量、常量、函数调用返回值结合而成。
这个是官方定义,我们用自己的话来说:表达式就是包含“变量”“常量”“运算符”中的一种或者多种组成的式子/语句。
我们举几个例子说明什么是表达式吧:
4;//只包含一个正整数
-6;//只包含一个负整数
4 + 21;//一个加法运算
a * (b + c/d) / 20;//一个四则运算
q=5*2;//乘法运算同时赋值给一个变量
x=++q % 3;//同上
q > 3;//比较表达式
"hello world";//一个字符串
上面写的这些都是合法的表达式,什么叫做合法?就是符合C语言的规定,可以被编译器看明白从而使用。
可以看到一个表达式也可以没有操作符,例如“4”这种形式就是最简单的表达式形式,即最简单的表达式只有一个常量或一个变量名称而没有操作符。
还可以看出,一些表达式是多个较小的表达式的组合,这些小的表达式被称为子表达式(subexpression)。例如表达式c/d是表达式a * (b + c/d) / 20的子表达式,而表达式c和d又是表达式c/d的子表达式。
二、表达式的分类
基本表达式(primary expression)
常量表达式(constant expression)
后缀表达式(postfix expression)
一元表达式(unary expression)
强制转换表达式(cast expression)
乘法表达式(multiplicative expression)
加法表达式(additive expression)
移位表达式(shift expression)
关系表达式(relational expression)
相等表达式(equality expression)
AND表达式(AND expression)
异或表达式(exclusive OR expression)
或表达式(inclusive OR expression)
逻辑与表达式(logical AND expression)
逻辑或表达式(logical OR expression)
条件表达式(conditional expression)
赋值表达式(assignment expression)
举例说明:
(一)首先是加、减、乘、除、取余四种表达式:
代码示例:
#includeint main()
{
printf("1+4=%d\n", 1+4);
printf("5-3=%d\n", 5-3);
printf("2*4=%d\n", 2*4);
printf("5/2=%d\n", 5/2);
printf("5%%2=%d\n", 5%2);
return 0;
}
运行结果:
大家注意看最后两个5/2和5%2:
5/2=2,为什么呢?因为我们定义的输出为%d,因此它会自动的输出整数部分,有人会问,要想输出结果为2.5该怎么办呢?有办法,printf(“%.2f”, 5.0/2);大家可以自己尝试一下,.2f表示保留两位小数,这个是可以改变的。
5%2=1,在C语言中% 表示取余数。
(二)一元表达式
定义,只含有一个操作数的表达式称之为一元表达式,例如:5,5++,++5
大家可能有疑问,5++和++5两个都是+1操作,有什么区别呢?先看代码:
#includeint main()
{
int a = 5;
int b = 5;
printf("a++=%d\n", a++);
printf("a=%d\n", a);
printf("++b=\n%d", b++);
printf("b=%d\n", b);
return 0;
}
运行结果:
大家会发现,两个都是+1操作是没问题的,因为最终a与b都变成了6,但是a++和b++的结果有区别,a++怎么还是等于5?这个时候给大家介绍一下两者区别:++a表示a先加1,这个时候++a=6,因此输出的结果为6,a++表示后加1,因此这个时候a依然为5,输出后再次加1变成6;
(三)强制转换表达式
强制表达式是指将一种数据类型强制转换为别的数据类型,举个例子,代码如下:
#includeint main()
{
float a = 5.3;
printf("保留两位小数a = %.2f\n", a);
printf("强制转换为整数(int)a = %d",int(a));
return 0;
}
运行过结果如下:
刚好复习一下之前提到的保留几位小数,自动用0填充空位。(int)a 即将a强制转换为整数,我们也可以将强制转换为别的数据类型,大家可以自己尝试。
(四)判断表达式
即判断两个操作数是否相等,判断成立的话返回true(1)。否则返回false(0);这部分在以后学到if语句时会经常用到。
举例:
#includeint main()
{
int a = 5;
int b = 6;
printf("a == b? %d\n", a==b);
printf("a > b? %d\n", a>1);
printf("a < b? %d", a<1);
return 0;
}
运行结果:
可以看出来 a>b是成立的,其它不成立
大家注意在C语言中“=”表示赋值“==”用来判断是否相等。
(五)逻辑表达式
即判断两个操作数逻辑是否成立,主要有三种运算“与(&&)、或(||)、非(!)”
int a, b, c;
a = 1;
b = 2;
c = 3;
与表示并且,只有前后两个表达式同时成立才会成立,成立即为true(1),否则为false(0).
举例:
a
或即表示符号前后的表达式有一个成立即为true(1)
举例:
只有a>b || b>c;为假。否则为真
(六)移位表达式
移位运算符即为”>>”(右移)”<
首先要了解在计算机中,所有的数字都会转换成二进制进行运算,什么时二进制?大家如果不了解可以进行百度,如果有需要的话可以单独介绍什么时进制。
举例:
#includeint main()
{
int a = 5;/*对应的二进制为00000101,为什么这么多0?因为C语言中int 类型的数据占8位,不足的位自
动补零;*/
printf("5>>1 右移一位=%d\n", a>>1);
printf("5<<1 左移一位=%d", a<<1);
return 0;
}
运行结果:
为什么会这样呢?因为5对应的二进制位00000101,右移一位,空位补0变为00000010,对应的十进制数位2,左移一位,空位补0变为:00001010,对应的十进制数位10。
小结
今天主要聊了一些关于表达式的内容,举得例子比较多,大家需要仔细的体悟,通过修改数等方式将这部分内容牢记于心。表达式是C语言最重要的组成部分之一,在今后的编程中会频繁用到。
OKK,开始不正经了,学习累了可以看看后面的彩蛋。
不要脸求关注,爱你。
写在最后:
有小可爱需要那个什么套路?我可没有,正直老学长从不玩套路。不过可以给大家讲一个小故事。一个男生军训期间没有军训神器,军训脚疼,于是他找到一个可爱甜美善良可爱的女生说:“同学,哪个,可以请你帮个忙吗?”男生摸摸头,很羞涩的说,女孩说:“好啊,同学,请问有什么需要帮助的呢?”男孩儿继续羞涩的说:“就是哪个……”女孩儿无语了说:“你就说啊”,男孩儿低下头就说:“军训鞋垫卖完了,刚来学校我也不认识别的人,你能不能帮我买个……”说完赶紧扭头。女孩儿脸红的说:“嗯”男孩儿得到了女孩儿的微信,并且在军训之余和女孩儿聊天,初入大学,大家的内心都彷徨孤独寂寞,这个时候一个人闯入自己的生活陪自己聊天,仿佛打开了一扇天窗,他们的感情开始升温……军训结束,男孩儿联系女孩儿说:“为了表示感谢,我想请你吃饭,我听说附近的什么什么挺不错的”女孩儿想:这个男生好细心啊,提前了解周围好吃的,还约我吃饭 ,这么礼貌这么暖,军训期间还陪我聊天,拒绝不好吧,这也是大学刚认识的朋友emmm以后我再请回来好了。于是男孩儿女孩儿顺利的吃饭-逛街,逐渐的,,故事自己脑补。
仅以此故事献给广大学弟学妹,本故事纯属虚构,如有雷同,纯属巧合。