c语言操作符(下)

news2024/10/6 4:02:45

前言

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏: 🍔🍟🌯 c语言初阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:
讲解c语言中有关操作符的知识.
金句分享:

✨✨✨行程万里,初心如一。✨✨✨

目录

  • 前言
  • 一、关系操作符
  • 二、逻辑操作符
  • 三、条件操作符:'?'
  • 四、逗号表达式
  • 五、其余操作符
    • 1)下标引用操作符
    • 2)函数调用操作符

一、关系操作符

关系操作符包括以下几种:

>	判断大于
>=
<
<=
!=		用于测试“不相等”
==		用于测试“相等”

关系操作符的返回结果只有两种,‘真’或’假’.
常见使用错误:
在实际编程中,关系运算符‘==’(判断相等)经常错写为‘=’(赋值),导致错误的出现,
并且错误还很难找到原因,因为这种错误编译器并不会报错.

🌰栗子

//错误示范
#include <stdio.h>
int main()
{
	int a = 3;
	if (a = 6)
	{
		printf("开心每一天!!!");
	}
	return 0;
}

运行结果是:

开心每一天!!!

结果分析,a = 6是将6的值赋给a,所以表达式的结果为’’,则执行打印语句.

修正方法:养成良好的编程习惯

#include <stdio.h>
int main()
{
	int a = 3;
	if (6 = a)//将变量方到右边
	{
		printf("开心每一天!!!");
	}
	return 0;
}

运行结果:

编译错误,
1.表达式必须是可修改的左值"="
2.左操作数必须为左值

将变量放到右边进行判断,会很好的避免这类问题.

二、逻辑操作符

&&     逻辑与
||     逻辑或

首先,我们应该要将它们与‘&’(按位与)‘|’(按位或)区分开.
‘&&’(逻辑与):表示操作符两边的操作符都为’’是才为’’,否则都为’’.
‘| |’ (逻辑或):只要有一个为’’,则为’’,否则都为’’.
并不是对二进制位进行运算.

#include <stdio.h>//区分区分逻辑与和按位与区分逻辑或和按位或
int main()
{
	int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0;
	a1 = 1 & 0;
	a2 = 1 && 0;

	a3 = 1 & 2;
	a4 = 1 && 2;

	a5 = 1 | 2;
	a6 = 1 || 2;
	printf("%d\n", a1);//1 & 0
	printf("%d\n\n", a2);//1 && 0

	printf("%d\n", a3);//1 & 2
	printf("%d\n\n", a4);//1 && 2

	printf("%d\n", a5);//1 | 2
	printf("%d\n", a6);//1 || 2
	return 0;
}

运行结果:

0
0

0
1

3
1

除此之外,还要了解的是,‘&&’(逻辑与)‘| |’ (逻辑或)的运算规则.

重点来了::!!!

建议仔细观察下段代码:试着写出运行结果

#include <stdio.h>
int main()
{
	int a = 0, b = 1, c = 2, d = 3;
	a++ && ++b && d++;
	printf("变化1:\n a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);


	a = 0, b = 1, c = 2, d = 3;//重新赋值为原来的值
	++a && ++b && d++;
	printf("变化2:\n a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);


	a = 0, b = 1, c = 2, d = 3;//重新赋值为原来的值
	a++||++b||d++;
	printf("变化3:\n a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	return 0;
}

在这里插入图片描述
运行结果:

变化1:
 a = 1
 b = 1
 c = 2
 d = 3
变化2:
 a = 1
 b = 2
 c = 2
 d = 4
变化3:
 a = 1
 b = 2
 c = 2
 d = 3

原因分析:

变化1分析:
a++是后置++,所以表达式a++在使用时是0,故表达式左边结果为假,即整个
a++ && ++b && d++;语句为假,不执行后面的++b和d++操作.
最后:a自增1(后置++),故结果为,a+1=1,b,c,d值不变.

变化2分析:
++a是前置++,所以a是先自增1再使用,故表达式a++的结果为真,
则继续执行表达式++b,同样为真,继续执行表达式d++.
最终:a+1;b+1,d+1,c不变;

变化3分析:
同样a++是后置++,所以表达式a++在使用时是0,故表达式左边结果为假,
但是逻辑与会继续执行表达式++b,则表达式++b的结果为真,则整个表达式
a++||++b||d++;的结果为真,并不会继续执行d++.
最终:a+1,b+1,d和c不变.
图解:

本题总结:电脑很懒,当足以判断整个表达式结果的时候,后面的剩余表达式将不会执行,如

1):'&&'逻辑与一边为假,则整个为假,
2):'||'  逻辑或一边为真,则整个为真

这种现象在有的书中被称为"短路"现象.

三、条件操作符:‘?’

条件操作符?,通常也被称之为三目运算符,即操作数有3个.
一般用法:

表达式 ?  语句1:语句2;

当表达式结果为’’时,执行语句1,表达式结果为’’时,执行语句2.

🌰栗子
当我们比较两个数的值的时候,通常使用if语句判断:

#include <stdio.h>
int main()
{
	int a = 0, b = 0;
	printf("请输入两个数:");
	scanf("%d%d", &a, &b);
	if (a > b)
	{
		printf("这两个数中%d更大", a);
	}
	else printf("这两个数中%d更大", b);
	return 0;
}

其实我们可以转换为较为简单的写法,条件表达式写法:

#include <stdio.h>
int main()
{
	int a = 0, b = 0;
	printf("请输入两个数:");
	scanf("%d%d", &a, &b);
	a > b ? printf("这两个数中%d更大", a) : printf("这两个数中%d更大", b);
	return 0;
}

四、逗号表达式

使用方法:

表达式1,表达式2,表达式3……

逗号表达式的意思就是用逗号隔开的多个表达式。
运算规则:
从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

实例:
通过观察执行逗号表达式之后,各变量的变化,了解逗号表达式的用法和运算规则.

#include <stdio.h>
int main()
{
	int x = 0, a = 1, b = 2, c = 3, d = 5;
	x = (a++, b + 2, c += 2, a + d);
	printf("x=%d\n", x);
	printf("a=%d,b=%d,c=%d,d=%d", a, b, c, d);
	return 0;
}

在这里插入图片描述

运行结果:

x=7
a=2,b=2,c=5,d=5

结果分析:
因为逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
所以a++会执行使得,a+1,
b+2虽然也被执行了,但是并没有重新赋值给b,所以只是进行了简单计算,并没有进行赋值操作,所以b没有变化,
c+=2执行后c被重新赋值了,所以c+2
最后:x=a+d=2+5=7;

灵活运用逗号表达式:
逗号表达式实际使用时的妙处:

#include <stdio.h>
int main()
{
	int a = 3, b = 5, c = 0;
	b=dispose1(a);//函数处理1
	c=dispose2(b);//函数处理2
	while (c > 0)
	{
		

			//这里是一段业务处理



		b = dispose1(a);//函数处理1
		c = dispose2(b);//函数处理2
	}
	return 0;
}

改为逗号表达式之后:

#include <stdio.h>
int main()
{
	int a = 3, b = 5, c = 0;
	while (b = dispose1(a), c = dispose2(b),c > 0)
	{


		//这里是一段业务处理


	}
	return 0;
}

五、其余操作符

1)下标引用操作符

还记得数组吗?
我们对数组进行访问的时候就会使用这个操作符.
使用方法: 数组名[操作数]
数组的回忆

2)函数调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
使用方法:

函数名(参数1,参数……)

🌰栗子

int sum(int x, int y)//创建求和函数
{
	return x + y;
}

#include <stdio.h>
int main()
{
	int a = 2, b = 3;
	int c=sum(a, b);//调用求和函数,a,b为函数参数
	printf("%d", c);
	return 0;
}

结构体的内容后面会详细介绍,目前了解一下,认识一下即可.
结构体成员访问操作符, 访问一个结构体的成员

. 结构体.成员名
-> 结构体指针->成员名

🌰栗子

struct classmate//创建一个结构体变量
{
	char name[10];//姓名
	char sex[5];//性别
	int age;//年龄
	double stature;//身高
};
#include <stdio.h>
int main()
{
	struct classmate c1 = { "初阶牛","男","19",1.75 };//初始化结构体变量
	printf("姓名:%s\n", c1.name);//使用结构体访问操作符'.'
	struct classmate* c = &c1;
	printf("性别:%s\n", c->sex);//使用结构体访问操作符'->'
	c->stature = 1.88;//修改身高
	printf("身高:%.3lf", c->stature);
	return 0;
}

关于操作符,还有一点知识在这一篇文章中有介绍
隐式转换

好了,c语言中,有关操作符的知识就讲到这里了.希望对大家有所帮助.
最后,小伙伴们的点赞就是给牛牛最大的支持,能不能给牛牛来一个一键三连呢?谢谢支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我用python写了个小病毒,老板再也不敢扣我工资啦

名字&#xff1a;阿玥的小东东 学习&#xff1a;python正在学习c 主页&#xff1a;阿玥的小东东 今天做个什么呢&#xff0c;我的好朋友提议做一个关机的代码吧&#xff0c;我这一想&#xff0c;对吼&#xff0c;我以前还做过一个关机代码呢&#xff0c;于是乎&#xff0c;今天…

时序收敛技巧之寄存器复制

1、何时需要复制寄存器&#xff1f; 在设计中的关键路径发现某个寄存器具有高扇出和高延迟时&#xff0c;使用寄存器复制是个不错的实现时序收敛的方法。下图是一个典型的例子&#xff1a; 可以看出&#xff0c;第一个寄存器的 IC(InterConnect) 延迟为 1.476ns&#xff0c;该寄…

seo站内优化的方法有哪些(站内优化和站外优化)

站内部优化什么意思 网站优化公司的内部优化意味着什么&#xff1f;网站内部优化&#xff0c;就是网站关键词优化、内容优化、内链优化等等&#xff0c;网站要有一定的排名和流量&#xff0c;要做到内部优化&#xff0c;要做到最快&#xff0c;最快的优化排名&#xff1f;接下…

「认知」打工人的自我修养

都说认知以外的钱难搞&#xff0c;那认知内的呢&#xff1f; 01互联网内卷年代&#xff0c;作为不着调的普通选手&#xff1b; 在诸多花里胡哨的黑话中&#xff0c;个人最待见的就是"认知"这个词&#xff1b; 认知&#xff0c;有强烈的抽象感&#xff1b; 想要深刻…

Mr. Cappuccino的第37杯咖啡——Kubernetes资源管理

Kubernetes资源管理kubectl常用的命令陈述式管理方法1. 创建一个namespace2. 查询所有namespace3. 在namespace下运行一个pod4. 查询指定namespace下的pod5. 查看指定pod的详细信息6. 删除pod7. 删除namespace声明式管理方法命令式对象配置1. 创建yaml文件2. 基于yaml文件创建资…

【JavaEE】多线程(初阶)

目录 Thread 线程的创建 线程的常见属性 中断线程 等待线程 休眠线程 线程的状态 多线程相比于单线程的优势 Thread 在Java中操作多线程&#xff0c;最常用的类就是Thread。 Thread 类是 JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一…

一网打尽带环链表问题(手把着手带你理解,木有基础也能看懂!)

目录 0.前言 1.认识带环链表 2.带环链表OJ问题简述 3.判断是否为带环链表 4. 寻找入环节点&#xff08;法一&#xff1a;数学推理的魅力&#xff09; 5. 寻找入环节点&#xff08;暴力拆解带环链表的魄力&#xff09; 6.番外&#xff1a;判断是否为带环链表(fast和slow的…

树上的DP

ACACAC来的如此之快&#xff0c;让我以为还要再调试几个点(h)&#xff0c;本文涉及思路参考&#xff1a;参考文章 嗯,这个题和思路让我对跨父节点的树上链有了一个认识&#xff0c;我们来看一下&#xff1a; 如果说&#xff0c;我们要对这样的一条链进行dpdpdp操作&#xff0c…

[GXYCTF2019]BabysqliV3.0

发现我们随便上传一个以后返回的是 alert(Wrong pass); 密码错误 如果上传一个账号永真的话返回 Not this user! 没有这个用户&#xff0c;所以感觉可以使用盲注&#xff0c;对账号进行盲注 可是题目 ascii(substr((select database()),1,1))>1 也不对 最后才知道是…

电脑组装配件知识

目录 1.电脑硬件基础知识 1.1CPU 1.2内存 ​编辑 1.3硬盘 1.4主板 1.5显卡 ​编辑 1.6显示器 1.7电源 1.8机箱 2.电脑硬件搭配及选购 2.1硬件搭配原则 2.2怎样查询软件或游戏配置 2.3配件购买注意事项 2.4搭配一台普通办公电脑 3.电脑组装 1.电脑硬件基础知识 …

软件测试/测试开发 | 一文学会 Appium 环境配置

Appium 是一个开源的、跨平台的测试框架&#xff0c;可以用来测试 Native App、混合应用、移动 Web 应用&#xff08;H5 应用&#xff09;等&#xff0c;也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念&#xff1a; •无需用户对 App 进行任何修改或…

OAuth2.0 开放平台认证授权开发套件 Authmore-Framework 1.0 发布

简介 | Intro 基于 OAuth2.0 协议的开放平台认证授权开发套件, 包含授权服务和开放平台 Docker 镜像&#xff0c;基于 Spring Boot Starter 的资源服务工具包和客户端&#xff08;第三方应用&#xff09;工具包 优点 | Advantages 简洁&#xff1a;专注核心功能 —— 社会化…

剑指offer----C语言版----第十六天----面试题22:链表中的倒数第k个节点

目录 1. 链表中倒数第 k 个节点 1.1 题目描述 1.2 思路一 1.3 思路二&#xff1a; 1.4 总结----代码的鲁棒性 1. 链表中倒数第 k 个节点 原题链接&#xff1a; 剑指 Offer 22. 链表中倒数第k个节点 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/l…

竹制品行业市场运行态势及未来前景分析

2023-2029年中国竹制品行业市场运行态势及未来前景分析报告报告编号&#xff1a;1691644免费目录下载&#xff1a;http://www.cninfo360.com/yjbg/qthy/qt/20230110/1691644.html本报告著作权归博研咨询所有&#xff0c;未经书面许可&#xff0c;任何组织和个人不得以任何形式复…

基于Power BI的终端消费会员客户价值RFM分析

一、原理&#xff1a;RFM分析 &#xff08;一&#xff09;概念 RFM模型衡量当前客户价值和客户潜在价值的重要工具和手段。通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三个维度来描述该客户价值状况的客户分类模型。 &#xff08;二&#xff09;分析维度 R&a…

使用标量衍射理论和菲涅耳和弗劳恩霍夫衍射的衍射对波动光学进行建模(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文使用Matlab对波动光学进行建模。包括使用标量衍射理论和菲涅耳和弗劳恩霍夫衍射的衍射。 &#x1f4da;2 运行结果 &#…

北大硕士LeetCode算法专题课-栈、队列相关问题

算法面试相关专题&#xff1a; 北大硕士LeetCode算法专题课--链表相关问题_ 北大硕士LeetCode算法专题课-查找相关问题_ 北大硕士LeetCode算法专题课-字符串相关问题_ 北大硕士LeetCode算法专题课-数组相关问题_ _ 北大硕士LeetCode算法专题课-基础算法之排序_ 北…

四、Javaweb之Filter、Listener、Ajax、Vue

文章目录12. Filter 和 Listener12.1 Filter快速入门和执行流程12.2 Filter使用细节12.3 Filter案例&#xff1a;登录验证12.4 Listener13. AJAX13.1 AJAX快速入门13.2 AJAX案例13.3 Axios异步框架13.4 JSON13.5 JSON案例SelectAllServlet.javabrand.htmlAddServlet.javaaddBra…

某集团汽车配件电子图册性能分析案例(二)

背景 汽车配件电子图册系统是某汽车集团的重要业务系统。业务部门反映&#xff0c;汽车配件电子图册调用图纸时&#xff0c;出现访问慢现象。 某汽车集团总部已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和历史原始流量。本次分析重点针对汽车配件电子图…

JDBC简介及原理和使用介绍

JDBC简介及原理和使用介绍JDBC简介 jdbc概述 ​ Java数据库连接&#xff0c;&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口&#xff0c;提供了诸如查询和更新数据库中数据的方法。 …