C程序设计(第五版) 第三章(2)运算符和表达式

文章目录

  • 三、运算符和表达式
    • 3.1 C运算符
    • 3.2 基本的算术运算符
    • 3.3 自增(++)、自减(--)运算符
    • 3.4 算术表达式和运算符的优先级和结合性
    • 3.5 不同类型数据间的混合运算
    • 3.6 强制类型转换运算符


三、运算符和表达式

C语言的运算符范围很宽,把除了控制语句和输入输出以外几乎所有的基本操作都作为运算符处理,例如将赋值符“=”作为赋值运算符,方括号作为下标运算符。

3.1 C运算符

C程序设计(第五版) 第三章(2)运算符和表达式_第1张图片


3.2 基本的算术运算符

C程序设计(第五版) 第三章(2)运算符和表达式_第2张图片

  • 两个实数相除的结果是双精度实数,两个整数相除的结果为整数,舍去小数部分。但是当除数或被除数中有一个为负值,则舍入的方向是不固定的。多数编译系统采取向零取整的方法,即5/3=1,-5/3=-1,取整后向零靠拢。
  • %运算符要求参加运算的对象为整数,结果也是整数如8%3=2。
  • 除%以外的运算符的操作数都可以是任何算术类型。

3.3 自增(++)、自减(–)运算符

自增自减运算符的作用是使变量的值加一或减一
++i,–i(在使用i之前先使i的值加减一)
i++,i–(在使用i之后,使i的值加减一)

自增自减运算符常用于循环语句中,使循环变量自动加1;也可用于指针变量,使指针指向下一个地址。


3.4 算术表达式和运算符的优先级和结合性

用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子称为C算术表达式。运算对象包括常量、变量、函数等。例如一个合法的C算术表达式:

a * b/c - 1.5 + 'a'

C语言还规定了运算符的优先级(例如先乘除后加减),还规定了运算符的结合性。在表达式求值时,先按运算符的优先级别顺序执行,如a-b* c,b的左侧为减号,右侧为乘号,乘号优先级高于减号,故相当于a-(b* c)。

如果一个运算对象两侧的运算符优先级别相同,则按规定结合方向处理。C语言规定了各种运算符的结合方向。算术运算符的结合方向都是从左到右,即先左后右,又称为左结合性(运算对象先与左边的运算符结合)。还有一些运算符是右结合性,即结合方向从右到左,如赋值运算符 a=b=c,先把c的值赋给b,再把b的值赋给a。

注意:算术运算符从左至右(左结合性),赋值运算符从右至左(右结合性)


3.5 不同类型数据间的混合运算

在程序中经常会遇到不同类型的数据进行运算,如54.5。如果一个运算符两侧的数据类型不一样,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。整型、实型、字符型数据间都可以进行混合运算。规律为:
(1)±
/运算的两个数有一个数是float 或double型,结果都是double型,因为系统将所有float型数据都先转换为double型在进行计算。
(2)如果int和float或double型数据进行计算,先把int、float转换为double然后进行运算,结果是double。
(3)字符型(char)数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。如12+‘A’,就是12+65,等于77。如果字符型数据与实型数据进行运算,则将字符型的ASCII码转换为double型数据,然后进行运算。

以上过程编译系统自动完成,用户不必过问。
C程序设计(第五版) 第三章(2)运算符和表达式_第3张图片
【例3.3】给定一个大写字母,要求用小写字母输出。
编写程序

#include
int main()
{
    char c1;
    char c2;
    printf("请输入字符:");
    scanf("%c", &c1);
    c2 = c1 +32;
    printf("小写字符:%c\n",c2);
    printf("ASCII码:%d\n",c2);
    return 0;
}

运行结果

请输入字符:A
小写字符:a
ASCII码:97

C程序设计(第五版) 第三章(2)运算符和表达式_第4张图片


3.6 强制类型转换运算符

可以利用强制类型转换运算符讲一个表达式转换为所需类型。如:

(double)a       //将a转换为double型
(int)(x+y)		//将x+y的值转换成int型
(float)(5%3)	//将5%3的值转换为float型

其一般形式为
(类型名)(表达式)
注意,表达式应用括号括起来,如果写成(int)x+y只是将x转换为整型然后与y相加。需要说明的是,在强制类型转换时得到一个中间数据,而原来的变量类型未发生改变。如a = (int)x,如果已定义x为float类型变量,a为整型变量,进行强制类型转换后得到一个int类型的临时值,它的值等于x的整数部分,把它赋给a,注意x的值和类型都没有变化,临时值赋值后就不存在了。

故有两种类型转换。一种是不必用户干预,系统自动进行的类型转换,3+6.5 。另一种是强制类型转换。如x为float型,x%3不合法,必须用(int)x%3 。且强制类型转换运算优先于%运算,因此先进行强制转换。此外,在函数调用时,有时为了使实参和形参类型一致,可以用强制类型转换运算符得到一个所需类型的参数。


你可能感兴趣的:(C语言,c语言,算法,数据结构)