C语言中操作符总结(下)

  1. 逻辑操作符
    常见的逻辑操作符:
    逻辑与( && )、 逻辑或( || )
    逻辑操作运算中不看二进制位,只看真假。

    使用规则:
    逻辑与( && ):操作符作用的两个操作数全为 真 时结果为 “ 1 ” ,其他情况结果都为 “ 0 ”。
    逻辑或( || ):操作符作用的两个操作数全为 假 时结果为 “ 0 ”,其他情况结果都为 “ 1 ”。
    在实际生活中的应用:判断闰年等。
// 输出1000-2000 年之间的闰年

#include<stdio.h>
int main()
{
	int count = 0;	
	int year = 0;
	for (year = 1000; year <= 2000; year++) {
		// 判断闰年条件(能被 4 整除但不能被 100 整除,或者能被 400 整除)
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		{ 
			printf("%d ", year);	// 输出闰年
			count++;	// 计数
		}
	}
	printf("\ncount = %d\n", count);	// 输出1000-2000 年之间的闰年个数
	system("pause");
	return 0;
}

在这里插入图片描述
特别注意1: 逻辑与 和 按位与,逻辑或 和 按位或 的区别。
如:在这里插入图片描述
特别注意2: 逻辑与 和 逻辑或 的特点

//逻辑与
#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	system("pause");
	return 0;
}
// 程序输出的结果是什么?

首先来分析一下这段代码:这里的i = a++ && ++b && d++;是用两个“ && ”连接,逻辑与的特点就是它的两个操作数都为 真 时结果才为真,所以代码在执行时先判断 a 是否为真,如果为真,执行 ++b,然后判断 b 自增后的结果是否为真,若为真则执行a++ && ++b,如果a++ && ++b结果为真,继续向后执行;否则代码只执行到判断为假的那步,之后的代码一律不执行。
这里由于 a 的初值等于 0,为假,所以代码执行到这里就不再继续向后执行,最终结果为:a = 0 , b = 2 , c = 3 , d = 4。
在这里插入图片描述

//逻辑或
#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	system("pause");
	return 0;
}
// 程序输出的结果是什么?

首先来分析一下这段代码:这里的i = a++ && ++b && d++;是用两个“ || ”连接,逻辑或的特点就是它的两个操作数都为 假 时结果才为假,所以代码在执行在执行的过程中无论“ || ”的两个操作数是否为真都会一直执行,直到最后一个代码之前的代码全部执行完才会判断,如果前边所有代码的执行结果为真,那么最后一个代码就不再执行,否则执行最后一个代码。
这里在执行i = a++ || ++b || d++;时,先执行a++ || ++b由于 b 的初值为 2,所以 ++b 的结果为真,即:a++ || ++b的结果为真,所以 d++就不再执行。最终结果为:a = 1 , b = 3 , c = 3 , d = 4。
在这里插入图片描述

  1. 条件操作符
    exp1 ? exp2 : exp3
    运算规则:
    如果 exp1 为真,则结果为 exp2 ,否则结果为 exp3。
    如:
#include<stdio.h>
int main()
{
	int a = 10;
	int b = 0;
	if (a > 5) {
		b = 3;
	}
	else{
		b = -3;
	}
	printf("b = %d\n", b);
	system("pause");
	return 0;
}

在这里插入图片描述
将上面代码转换为条件表达式:

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 0;
	(a > 5) ? (b = 3) : (b = -3);
	printf("b = %d\n", b);
	system("pause");
	return 0;
}

在这里插入图片描述
例:使用条件表达式实现找两个数中的较大值。

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 9;
	int max = 0;
	max = (a > b) ? a : b;
	printf("max = %d\n", max);
	system("pause");
	return 0;
}

在这里插入图片描述

  1. 逗号表达式
    exp1, exp2, exp3, … expN
    逗号表达式就是用逗号隔开的多个表达式。
    运算规则:
    逗号表达式,从左向右依次执行,整个表达式的结果是 最后一个表达式 的结果。
#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);	// 逗号表达式
	printf("c = %d\n", c);
	system("pause");
	return 0;
}
// c 的结果是多少?

在这里插入图片描述

  1. 下标引用操作符
    [ ]
    操作数:一个数组名 + 一个索引值
int arr[4] = { 5,3,4,1 };	// 这里的[ ] 不是下标引用操作符
arr[2] = 4;		// 这个 [ ] 才是下表引用操作符,arr 表示数组首元素地址
				// [ ] 的两个操作数是 arr 和 2
				// arr 表示数组首元素地址,[2]表示数组第三个元素
  1. 函数调用操作符
    ( )
    接受一个或多个操作数:第一个操作数是函数名,剩余的操作数都是传递给函数的参数。
#include<stdio.h>

//定义函数
int Add(int x, int y)
{
	return x + y;
}

int main()
{
	int a = 10;
	int b = 5;
	Add(a, b);	// 调用函数,这里的()就是函数引用操作符
				// 接收了三个操作数:Add、a、b
	system("pause");
	return 0;
}
  1. 结构体成员
    .结构体.成员名
    结构体对象访问自己的成员。
    在这里插入图片描述
    ->结构体指针 ->成员名
    结构体指针访问它指向对象的成员。
    在这里插入图片描述
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值