c语言学习-3

二、运算符与表达式

C语言优先级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

/*
算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符

单目运算符	!	逻辑非
算术运算符	加、减,乘除,取模
关系运算符	>	<	>=	<=	==	!=
逻辑运算符	&&	||

if里边99%是放关系表达式,逻辑表达式,剩余的1%的情况,直接放入一个值

零代表假,非零代表真
*/

1.算术运算符–倒叙输出:输入152->输出251

#define _CRT_SECURE_NO_WARNINGS //解决2019版本scanf报错问题
#include<stdio.h>

//算术运算符
//先乘除,取模,后加减
int main()
{
	long a;//4字节
	int g;
	int s = 4 + 5 * 2 - 6 / 3 + 11 % 4;
	printf("s=%d\n", s);
	scanf("%d", &a);
	printf("a=%d\n", a);//如果输入的是1234,那么输出的就是4321
	while(a != 0) {//当a不等于零就可以进入循环
		g = a % 10;//区域运算符
		printf("%c", g + 48);//数字变字符
		a = a / 10;//除法运算符 
	}
	return 0;
}
s=15
152
a=152
251

D:\cbook\数据类型与运算符\Debug\14.算术运算符.exe (进程 19792)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

2.关系运算符

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>

//C语言认为一切非零值都是真
//判断浮点数是否等于某个值
//关系运算符和逻辑运算符
int main()
{
	int a = 18;
	if (3 < a && a < 10) {//如果要判断3<a 同时 a<10,要用逻辑运算符
		printf("a is right\n");
	}
	else {
		printf("a is wrong\n");
	}

	printf("判断两个浮点数是否相等:\n");
	//判断两个浮点数是否相等,必须用第二种方法
	float f = 234.56;
	//第一种方法
	if (f == 234.56) {
		printf("第一种方法:f 等于 234.56\n");
	}
	else {
		printf("第一种方法:f 不等于 234.56\n");
	}
	//第二种方法
	if (f - 234.56 > -0.0001 && f - 234.56 < 0.0001)
	{
		printf("第二种方法:f 等于 234.56\n");
	}
	else {
		printf("第二种方法:f 不等于 234.56\n");
	}

	return 0;
}
a is wrong
判断两个浮点数是否相等:
第一种方法:f 不等于 234.56
第二种方法:f 等于 234.56

D:\cbook\数据类型与运算符\Debug\15.关系运算符.exe (进程 12604)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

3.逻辑运算符

#define _CRT_SECURE_NO_WARNINGS //解决2019版本scanf报错问题
#include<stdio.h>
#include<stdlib.h>

//逻辑运算符  组成的式子叫 逻辑表达式,逻辑表达式只有真和假
/*
!  逻辑非   如果原来是真,取非就是假;如果是假,取非就是真
&& 逻辑与   a&&b,a和b任何一个为假,就是假;如果均为真,整体为真
|| 逻辑或   a||b,a和b任何一个为真,为真;如果两个都为假,整体才是假
*/
//逻辑与、或的短路运算
int main()
{
	int i = 0, j;
	while (scanf("%d", &i) != EOF)
	{
		//可以被4整除,不可以被100整除,或者可以被400整除
		if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
		{
			printf("i is leap year\n");
		}
		else {
			printf("i is not leap year\n");
		}
		
	}

	j = 1;//当j不为0时,j==0为假,后面一个表达式不会得到执行
	j == 0 && printf("j == 0,system is error\n");
	j == 1 && printf("j == 1,system is error\n");
	printf("j = %d\n",j);

	j = 0;//当j为0时,j==0为真,后面一个表达式不会得到执行
	j == 0 || printf("j == 0,system is error\n");
	j == 2 || printf("j == 2,system is error\n");
	printf("j = %d\n", j);

	j = 10;//下面我们来看一下逻辑非运算符
	i = !j;
	printf("j = %d\n", j);
	printf("i的值=%d\n", i);
	i = !!j;
	printf("j = %d\n", j);
	printf("i的值=%d\n", i);

	return 0;
}
2009
i is not leap year
^Z
^Z
^Z
j == 1,system is error
j = 1
j == 2,system is error
j = 0
j = 10
i的值=0
j = 10
i的值=1

D:\cbook\数据类型与运算符\Debug\16.逻辑运算符.exe (进程 2464)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

4.赋值运算符

#define _CRT_SECURE_NO_WARNINGS //解决2019版本scanf报错问题
#include<stdio.h>
#include<stdlib.h>

//表达式的值存在于运算过程中的
//赋值运算符的左边只能放变量
int main()
{
	int a = 5;
	//a + 3 = 10;//如果报出左操作数必须为左值,这时说明等号左边必须为变量

	char c;
	while ((c = getchar()) != EOF)
	{
		printf("%c", c);
	}

	return 0;
}
hello
hello
^Z

D:\cbook\数据类型与运算符\Debug\17.赋值运算符.exe (进程 1124)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

5.加后赋值与乘后赋值的用法

#define _CRT_SECURE_NO_WARNINGS //解决2019版本scanf报错问题
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int iNum, iResult;
	iNum = 10;
	iResult = 3;

	iNum += 5;
	iResult *= iNum;
	printf("iNum = %d\n", iNum);
	printf("iResult = %d\n", iResult);

	return EXIT_SUCCESS;
}
iNum = 15
iResult = 45

D:\cbook\数据类型与运算符\Debug\18.加后赋值与乘后赋值的用法.exe (进程 12452)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

6.条件运算符与逗号运算符

#define _CRT_SECURE_NO_WARNINGS //解决2019版本scanf报错问题
#include<stdio.h>
#include<stdlib.h>
//逗号表达式整体的值,是最后一个表达式的值
// 条件运算符优先级高于赋值运算符
int main()
{
	int a, b, c, max, copymax;
	while (fflush(stdin), scanf("%d%d%d", &a, &b, &c) != EOF)
	{
		max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
		copymax = a > b ? (a > c ? a : c) : (b > c ? b : c);

		printf("max = %d\n", max);
		printf("copymax = %d\n", copymax);
	}

	return EXIT_SUCCESS;
}
15 6 58
max = 58
copymax = 58
^Z
^Z
^Z

D:\cbook\数据类型与运算符\Debug\19.条件运算符与逗号运算符.exe (进程 18348)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

7.自增、自减运算符及求字节运算符

#include<stdio.h>
#include<stdlib.h>

//sizeof不是函数,是C的关键字,是一个运算符
//自增自减注意分清是前加加,还是后加加,自减类似
//针对后加加,后减减,按照备注理念,可以保证简单准确!
//i++代表的是i=i+1;比较难理解的是后加加和后减减
//++i直接按优先级进行正常运算即可
int main() 
{
	int i = -1;
	int j;
	//5++;//如果打开语句,会造成编译不通
	j = i++ > -1;//后++,或后者--等价于j=i>-1;i=i+1
				//拆成两步,j=i>-1;i++
	printf("i = %d ,j = %d \n", i, j);
	j = !++i;//当时前加加时,直接按优先级结合顺序
	printf("i = %d , j = %d ,sizeof(i) = %d\n", i, j, sizeof(i));

	return EXIT_SUCCESS;
}
i = 0 ,j = 0
i = 1 , j = 0 ,sizeof(i) = 4

D:\cbook\数据类型与运算符\Debug\20.自增、自减运算符及求字节运算符.exe (进程 18848)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

8.读取整数输出字符

#define _CRT_SECURE_NO_WARNINGS //解决2019版本scanf报错问题
#include<stdio.h>

/*
当你操作的空间,超出了变量本身占用的空间的大小时

引发异常信息
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.

Description
读取一个65到122之间的整型数,然后以字符形式输出它,比如读取了97,输出字符a
Input
读取一个整型数,整型数大于等于65,小于等于122
Outputt
输出整型数在ASCII表中对应的字符

*/
int main()
{
	int a;
	scanf("%d",&a);
	printf("%c\n", a);//整型数在0-128之间可以用%c输出

	return 0;
}
97
a

D:\cbook\数据类型与运算符\Debug\21.读取整数输出字符.exe (进程 10092)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

良辰美景好时光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值