第四章 运算符与表达式

目录

一、表达式

二、赋值运算符与赋值表达式

1、变量赋初值

1.1、将常数赋值给变量

1.2、通过赋值表达式为变量赋初值

2、自动类型转换

3、强制类型转换

三、算数运算符与算数表达式

1、算术运算符

2、算术表达式

3、优先级与结合性

3.1、算术运算符的优先级

3.2、算术运算符的结合性

4、自增/自减运算符

4.1、自增运算符

4.2、自减运算符

四、关系运算符与关系表达式

五、逻辑运算符与逻辑表达式

1、逻辑运算符

2、逻辑表达式

3、优先级与结合性 

六、位逻辑运算符号与位逻辑表达式

1、位逻辑运算符

2、位逻辑表达式

七、逗号运算符号与逗号表达式

八、复合赋值运算符号


一、表达式

#include<stdio.h>
int main()
{
	int iNumber1, iNumber2, iNumber3;						/*声明变量*/
	iNumber1 = 3;											/*为变量赋值*/
	iNumber2 = 7;

	printf("the first number is :%d\n", iNumber1);			/*显示变量值*/
	printf("the second number is :%d\n",iNumber2);			

	iNumber3 = iNumber1 + 10;								/*在表达式中利用iNumber1变量加上一个常量*/
	printf("the first number add 10 is :%d\n", iNumber3);	/*显示iNumber3的值*/

	iNumber3 = iNumber2 + 20;								/*在表达式中利用iNumber2变量加上一个常量*/
	printf("the secnd number add 10 is :%d\n", iNumber3);	/*显示iNumber3的值*/

	iNumber3 = iNumber1 + iNumber2;							/*在表达式中两个变量进行计算*/
	printf("the result number of first and second is :%d\n", iNumber3);		/*将计算结果输出*/

	return 0;
}

在程序中,主函数main中第一行是声明变量的表达式,可以使用逗号通过一个表达式声明3个变量 。

二、赋值运算符与赋值表达式

1、变量赋初值

1.1、将常数赋值给变量

一般形式:类型   变量名   =   常数;

1.2、通过赋值表达式为变量赋初值

一般形式:类型   变量名   =   表达式;

#include<stdio.h>
int main()
{
	int iHoursWorded = 8;						/*定义变量,为变量赋值,表示工作时间*/
	int iHourlyRate;							/*声明变量,表示一个小时的薪水*/
	int iGrossPay;								/*声明变量,表示得到的工资*/

	iHourlyRate = 13;							/*为变量赋值*/
	iGrossPay = iHoursWorded * iHourlyRate;		/*将表达式的结果赋值给变量*/

	printf("The HoursWorded is: %d\n", iHoursWorded);		/*显示工作变量*/
	printf("The HourlyRate is: %d\n", iHourlyRate);			/*显示一个小时的薪水*/
	printf("The GrossPay is: %d\n", iGrossPay);				/*显示工作所得的工资*/

	return 0;
 }

  

2、自动类型转换

如果将比较短的数值类型变量的值赋给比较长的数值类型变量,数据不会丢失;

如果将比较长的数值类型变量的赋值给比较短的数值类型变量,数据会降低级别显示;

当数据大小超过比较短的数值类型的可表示范围时,就会发生数据截断。

3、强制类型转换

强制类型转换一般形式:(类型名)(表达式)

#include<stdio.h>

int main()
{
	char cChar;					/*字符型变量*/
	short int iShort;			/*短整型变量*/
	int iInt;					/*整型变量*/
	float fFloat = 70000;		/*单精度浮点数*/

	cChar = (char)fFloat;		/*强制转换*/
	iShort = (short)fFloat;		
	iInt = (int)fFloat;			

	printf("the char is : %c\n", cChar);		/*输出字符变量值*/
	printf("the short is : %d\n", iShort);		/*输出短整型变量值*/
	printf("the int is : %d\n", iInt);			/*输出整型变量值*/
	printf("the float is : %f\n", fFloat);		/*输出单精度浮点变量值*/

	return 0;
}

  

三、算数运算符与算数表达式

1、算术运算符

算术运算符
符号功能符号功能
+单目正%取模
-单目负+加法
*乘法-减法
/除法

取模运算符“%”用于计算两个整数相除得到余数,并且取模运算符号两侧均为整数,例如7%4的结果是3。 

2、算术表达式

使用算术表达式计算摄氏温度。

#include<stdio.h>
int main()
{
	int iCelsius, iFahrenheit;							/*声明两个变量*/
	printf("Please enter temperature :\n");				/*显示提示信息*/
	scanf_s("%d", &iFahrenheit);						/*在键盘中输入华氏温度*/
	iCelsius = 5 * (iFahrenheit - 32) / 9;				/*通过算术表达式进行计算,并将结果赋值*/

	printf("Temperature is :");							/*显示提示信息*/
	printf("%d", iCelsius);								/*显示摄氏温度*/
	printf(" degress Celsius\n");						/*显示提示信息*/

	return 0;
}

使用scanf_s函数获得在键盘上输入的数据,其中%d是格式符,用来表示输入有符号的十进制整数。 

  

3、优先级与结合性

3.1、算术运算符的优先级

*、/、%的优先级高于+、-的级别。

3.2、算术运算符的结合性

当运算符号的优先级相同时,结合方向为“自左向右”。

#include<stdio.h>
int main()
{
	int iNumber1, iNumber2, iNumber3, iResult = 0;			/*声明整型变量*/
	iNumber1 = 20;
	iNumber2 = 5;
	iNumber3 = 2;

	iResult = iNumber1 + iNumber2 - iNumber3;				/*加法,减法表达式*/
	printf("the reult is : %d\n", iResult);					/*显示结果*/

	iResult = iNumber1 - iNumber2 + iNumber3;				/*减法,加法表达式*/
	printf("the reult is : %d\n", iResult);					/*显示结果*/

	iResult = iNumber1 + iNumber2 * iNumber3;				/*加法,乘法表达式*/
	printf("the reult is : %d\n", iResult);					/*显示结果*/

	iResult = iNumber1 / iNumber2 * iNumber3;				/*除法,乘法表达式*/
	printf("the reult is : %d\n", iResult);					/*显示结果*/

	iResult = (iNumber1 + iNumber2) * iNumber3;				/*括号,加法,乘法表达式*/
	printf("the reult is : %d\n", iResult);					/*显示结果*/

	return 0;
}

  

4、自增/自减运算符

4.1、自增运算符

自增运算符“++”对变量的操作进行增加1。

4.2、自减运算符

自减运算符“--”对变量的操作进行减少1。

#include<stdio.h>
int main()
{
	int iNumber1 = 3;							/*定义变量,赋值为3*/
	int iNumber2 = 3;			

	int iResultPreA, iResultLastA;				/*声明变量,得到自增运算的结果*/
	int iResultPreD,iResultLastD;				/*声明变量,得到自减运算的结果*/

	iResultPreA = ++iNumber1;					/*前缀自增运算*/
	iResultLastA = iNumber2++;					/*后缀自增运算*/

	printf("The Addself...\n");
	printf("the iNumber1 is : %d\n", iNumber1);		/*显示自增运算后自身的数值*/
	printf("the iResultPreA is : %d\n", iResultPreA);	/*得到自增表达式中的结果*/
	printf("the iNumber2 is : %d\n", iNumber2);			/*显示自增运算后自身的数值*/
	printf("the iResultLastA is :%d\n", iResultLastA);	/*得到自增表达式中的结果*/

	iNumber1 = 3;								/*恢复变量值为3*/
	iNumber2 = 3;

	iResultPreD = --iNumber1;					/*前缀自减运算*/
	iResultLastD = iNumber2--;					/*后缀自减运算*/

	printf("The Deleteself...\n");
	printf("the iNumber1 is : %d\n", iNumber1);		/*显示自减运算后自身的数值*/
	printf("the iResultPreD is : %d\n", iResultPreD);	/*得到自减表达式中的结果*/
	printf("the iNumber2 is : %d\n", iNumber2);			/*显示自减运算后自身的数值*/
	printf("the iResultLastD is :%d\n", iResultLastD);	/*得到自减表达式中的结果*/

	return 0;
}

如果运算符放在变量前面,那么变量在参加表达式运算之前完成自增或者自减;

如果运算符放在变量后面,那么变量的自增或者自减在变量参加表达式运算之后完成。

 ①前缀自增使得iResultPreA变量先进行自增操作,然后进行赋值处理;

②后缀自增使得iResultLastA变量先进行赋值操作(iResult先等于了iNumber2=3),然后进行自增操作(然后iNumber2进行了自增)。

四、关系运算符与关系表达式

1、关系运算符

符号功能符号功能
>大于<=小于等于
>=大于等于==等于
<小于!=不等于

2、关系表达式

关系运算符用于两个表达式的值进行比较,返回一个真值(1)或者假值(0)。

判断时不能用“=”,只能用“==”。

3、优先级与结合性

“!=”要比“==”优先级高

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int iChinese, iEnglish;					/*定义两个变量,用来保持分数*/
	printf("Enter Chinese score:");			/*提示信息*/
	scanf("%d", &iChinese);				/*输入分数*/
	printf("Enter English score:");			/*提示信息*/
	scanf("%d", &iEnglish);				/*输入分数*/

	if (iChinese > iEnglish)				/*使用关系表达式进行判断*/
	{
		printf("Chinese is better than English\n");
	}
	if (iChinese < iEnglish)				/*使用关系表达式进行判断*/
	{
		printf("English is better than Chinese\n");
	}
	if (iChinese == iEnglish)					/*使用关系表达式进行判断*/
	{
		printf("Chinese equal English");
	}
	return 0;
}

五、逻辑运算符与逻辑表达式

1、逻辑运算符

符号功能
&&逻辑与
||逻辑或
单目逻辑非

2、逻辑表达式

逻辑运算符根据表达式的真或者假属性返回真值或假值。在c语言中,表达式的值非零,那么其值为真。非零的值用于逻辑运算,则等价于1,假值总为0。

一般形式:表达式   逻辑运算符    表达式

3、优先级与结合性 

“&&”与“||”是双目运算符,需要两个操作数,结合方向从左至右;

“!”是单目运算符,需要一个操作数,结合方向自左向右。

#include<stdio.h>
int main()
{
	int iNumber1, iNumber2;					/*声明变量*/
	iNumber1 = 10;							/*为变量赋值*/
	iNumber2 = 0;							

	printf("the 1 is Ture,0 is Flase\n");	/*显示提示信息*/
	printf("5< iNumber1&&iNumber2 is %d\n", 5 < iNumber1 && iNumber2);		/*显示逻辑与表达式的结果*/
	printf("5< iNumber1||iNumber2 is %d\n", 5 < iNumber1 || iNumber2);		/*显示逻辑或表达式的结果*/
	iNumber2 = !iNumber1;					/*得到iNumber1一次单目逻辑运算符的逻辑值*/
	printf("iNumber2 is %d\n", iNumber2);		/*输出逻辑值*/
	
	iNumber2 = !!iNumber1;					/*得到iNumber1两次单目逻辑运算符的逻辑值*/
	printf("iNumber2 is %d\n", iNumber2);		/*输出逻辑值*/

	return 0;
}

  

六、位逻辑运算符号与位逻辑表达式

位逻辑运算符可实现位的设置、清零、取反和取补操作。

1、位逻辑运算符

符号功能
&位逻辑与
|位逻辑或
^位逻辑非
~取补

2、位逻辑表达式

在程序中,位逻辑运算符一般被程序员用作开关标志。较低层次的硬件设备驱动程序,经常对输入/输出设备进行位操作。

if(Field&BITMASK)            /*if语句对后面括号中表达式进行检测。如果表达式返回真值,则执行下来的语句块,否则跳过该语句块,不执行。其中,运算符用来对BITMASK变量的位进行检测,判断是否与Field变量的位有吻合之处*/

七、逗号运算符号与逗号表达式

1、在c语言中,可以用逗号将多个表达式分隔开。其中,用逗号分隔的表达式被分别计算,并且整个表达式的值是最后一个表达式。逗号表达式称为顺序求值运算符。

2、一般形式:表达式1,   表达式2,  ...,   表达式n

3、逗号表达式的求解过程是:先求解表达式1,在求解表达式2,一直求解到表达式n。整个逗号表达式的值是表达式n的值。

#include<stdio.h>

int main()
{
	int iValue1, iValue2, iValue3, iResult;				/*声明变量,使用逗号运算符*/

	iValue1 = 10;										/*为变量赋值*/
	iValue2 = 43;
	iValue3 = 26;
	iResult = 0;

	iResult = iValue1++, --iValue2, iValue3 + 4;			/*计算逗号表达式*/
	printf("the result is : %d\n", iResult);

	iResult = (iValue1++, --iValue2, iValue3 + 4);
	printf("the result is : %d\n", iResult);

	return 0;
}

①第一个表达式中没有使用括号运算符,所以iResult 得到第一个表达式的值。在第一个表达式中,iValue变量进行的是后缀自加操作,所以iResult先得到iValue1的值,iValue1再进行自加操作。

②在第二个表达式中,使用了括号运算符,因此iResult变量得到的是第三个表达式iValue3+4的值,iResult变量赋值为30.

八、复合赋值运算符号

复合赋值运算符是c语言中独有的,是一种缩写形式,。

Value=Value+3;

也可以写成

Value+=3;

 对于简单赋值运算符,如Func=Func+1,表达式中Func计算两次;对于复合运算符,如Func+=1中,表达式Func仅计算一次。

#include<stdio.h>

int main()
{
	int iTotal, iValue, iDetail;				/*声明变量*/
	iTotal = 100;								/*为变量赋值*/
	iValue = 50;
	iDetail = 5;

	iValue *= iDetail;						/*计算得到iValue变量值*/
	iTotal += iValue;
	printf("Volue is : %d\n", iValue);
	printf("Total is : %d\n", iTotal);

	return 0;
}

iValue*=iDetail  表示  ivalue*iDetail的结果

iTotal+=iValue  表示   iTotal+iValue的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半边山的海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值