C表达式(运算符)

本文探讨了C语言中计算时间差的关键代码,重点对比了'/'和'%'运算符的不同用途,以及如何正确处理运算符优先级。通过实例展示了单目和复合赋值运算符,以及关系运算符的使用,帮助读者掌握C语言中表达式的运算规则。
摘要由CSDN通过智能技术生成

一个表达式是一系列运算符和算子的组合,用来计算一个值

计算时间差的代码,体现出/和%的区别,一个舍余数,一个取余数。

int main ()
 {
	//计算时间差
	int hour1, hour2 = 0;
	int minute1, minute2 = 0;
	printf("请输入第一个时间\n");
	scanf("%d:%d", &hour1, &minute1);
	printf("请输入第二个时间\n");
	scanf("%d:%d", &hour2, &minute2);
	int t1 = hour1 * 60 + minute1;
	int t2 = hour2 * 60 + minute2;
	int delt = t2 - t1;
	printf("时间差为%d小时%d分钟", delt /60, delt % 60);
	 return  0;
	}

运算符的优先级

与数学相同,计算机中的运算符有不同的优先级

(单目 :表达式中有些运算符使用时用到两个算子称为双目运算符,而图中1,2所示单目运算符计算时只涉及一个算子,即图中1 2给变量b取正值和取负值,进行一次单目运算,之后进行多目运算,即与变量a相乘。)

赋值运算符

与一些别的语言不同,C中赋值也是一种运算符,也有结果(某些语言中赋值是一种语句),如a=6的结果是a被赋予的值,也就是6;而 a=b=6-->a=(b=6)

        嵌入式赋值(一个不良习惯)

int a=6;
int b;
int c=1+(b=a);
  •  不易阅读
  • 容易产生错误

        结合关系(另一个不良习惯)

result=a=b=3+c;
result=2;
result=(result=result*2)*6*(result=3+result);

这样的表达式太复杂,不容易阅读和理解,容易造成读程序时的误解。所以要避免写出这样的复杂表达式来。这个表达式应该被拆成若干个表达式,然后以明显的正确的顺序来进行计算。        

        交换  (常用套路)

int t=a

a=b

b=c

        复合赋值

  • 5个算术运算符,+-*/%,可以和赋值运算符“=”结合起来,形成复合赋值运算符:“+=”,“-=”,“*=”,“/=”,“%=”
  • 如total += 5 ----->   total = total+5;
  • 注意两个运算符中间不要有空格
  • 注意a+=(b+1)/2--->a=a+(b+1)/2      a*=b+1--->a=a*(b+1)

        递增递减运算符

  • ++”和“--”是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,他们的作用就是给这个变量+1或-1
  • count++;    count+=1;    count=count+1;
  • 前缀后缀:++和--可以放在前面和后面叫做前缀后缀形式。但a++的值是a加1以前的值,而++a的值是加了1以后的值,无论哪个,a自己的值都加了1 
int main()
{
	int a;
	a= 10;
	printf("a++=%d\n", a++);
	printf("a=%d\n", a);

	printf("++a=%d\n", ++a);
	printf("a=%d\n", a);

	return 0;
}

 

关系运算符

  • 用于判断条件,决定程序的流程 
  • “=”是赋值,“==”是判断两个数是否相等,注意不能混用。
  • C没有“之间”,“中间”,“之内”或“在某范围内”的关系运算符,只能表达大于等于某并且小于等于某。

当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0.

int main()
{
	printf("%d\n", 5 == 5);
	printf("%d\n", 5 == 6);
	printf("%d\n", 5 < 6);
	printf("%d\n", 5 > 6);
	return 0;
}

 结果 

优先级

1.所有的关系运算符的优先级比算数运算的低,但比赋值运算的 高。 

int main()
{
    printf("%d\n",7>=3+4);
    
    return 0;
}

 得到结果为1(7>=3+4的和关系为真,值为1),而非5(7>=3的关系为真,值为1,与4相加得5)

2.判断是否相等的==和!=的优先级比其他的低,而连续的关系运算符是从左到右进行的。

5>3==6>4 先判断大小再判断相等 且判断大小从左到右进行

逗号运算符

一条语句理论上是有返回值的,如果语句里面有多个逗号,则以最后一个逗号后面的表达式值为返回值

目前就只在for中使用ex:for(i=0,j=1;i<j;i++,j--)...

条件运算符(旧朝遗老)

 count=(count>20)?count-10:count+10;

                    ||

if(count>20)                               易嵌套不易理解

        count-=10;                         条件运算符的优先级高于赋值运算符,但是低于其他运算符

else                                            条件运算符是自右向左结合的

        count+=10;                         不建议用

逻辑运算符

#include <stdio.h>

int main()
{
    int year;
    printf("请输人年份:");
    scanf("%d", &year);
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
            printf("%d 是闰年\n", year);
        else
            printf("%d 非闰年\n", year);
    return 0;
}

! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

vⅤ_Leon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值