C语言学习-- 运算符

提示:在C语言编程中,算术、关系和逻辑运算符是基础且不可或缺的工具。

目录

前言

5.1 算术运算符

5.1.1介绍

5.1.2算术运算符一览

5.1.3案例演示

5.1.4细节说明

5.1.5自增,自减课堂练习 1

5.1.6课堂练习 2

5.2 关系运算符(比较运算符)

5.2.1介绍

5.2.2关系运算符一览

5.2.3案例演示

5.2.4细节说明

5.3 逻辑运算符

5.3.1介绍

5.3.2逻辑运算符一览

5.3.3&& 案例演示

5.3.4|| 案例演示

5.3.5! 案例演示

5.3.6练习题 1 请写出每题的输出结果

5.4 赋值运算符

5.4.1介绍

5.4.2赋值运算符一览表

5.4.3案例演示

5.4.4赋值运算符特点

5.5 位运算符

5.5.1介绍

5.5.2位运算符一览表

5.6 三元运算符

5.6.1基本语法

5.6.2案例演示

5.6.3使用细节

5.6.4课堂练习

5.7 运算符优先级

5.7.1运算符优先级一览表

5.7.2运算符优先级小结:

5.7.3运算符优先级注意事项和细节:

5.8 标识符的命名规则和规范

5.8.1标识符概念

5.8.2标识符的命名规则

1) 由 26 个英文字母大小写,0-9 ,_或 $ 组成

5.8.3判断下面变量名是否正确

5.8.4标识符命名规范

5.9 关键字

5.9.1关键字的定义和特点

5.10 键盘输入语句

5.10.1 介绍

5.10.2 步骤 :

5.10.3 案例演示:

5.11 课后练习题

总结


前言

在C语言编程中,算术、关系和逻辑运算符是基础且不可或缺的工具。这些运算符不仅使基本的数学计算变得简单,还使得条件判断和逻辑推理得以实现。掌握这些运算符的使用能够提高代码的有效性和可读性。


5.1 算术运算符

5.1.1介绍

算术运算符是对数值类型的变量进行运算的,在 C 程序中使用的非常多

5.1.2算术运算符一览

5.1.3案例演示

1) 案例演示算术运算符的使用(operator.c)。

+, - , * , / , %, ++, -- , 重点讲解 /、%、++

2) 自增:++

作为独立的语句使用:

前++和后++都完全等价于 i=i+1;

作为表达式使用:

前++:++i 先自增后赋值

后++:i++先赋值后自增

3) -- ,+、-、* 是一个道理,完全可以类推。

4) 代码演示

#include <stdio.h>

void main() {

//处理的流程 10 / 4 = 2.5 ==截取整数==> 2 => 2.00000

double d1 = 10 / 4; //

double d2 = 10.0 / 4; //如果希望保留小数,参与运算数必须有浮点数

//给大家一个取模的公式

// a % b = a - a / b * b

int res1 = 10 % 3; // 求 10/3 的余数 1

int res2 = -10 % 3; // = -10 - (-10) / 3 * 3 = -10- (-3) * 3 = -10 + 9 = -1

int res3 = 10 % -3; // 10 - 10 / (-3) * (-3) = 10 - 9 = 1

int res4 = -10 % -3; // ? -1

//++ 的使用

int i = 10;

int j = i++; // 运算规则等价是 int j = i; i = i + 1; ==> j = 10, i=11

int k = ++i; // 运算规则等价 i = i + 1; int k = i; ===> i=12, k =12

printf("\n i=%d j=%d", i, j); //i=12 j=10

printf("\n i=%d k=%d", i ,k );// i = 12 k = 12

printf("\nd1=%f d2=%f res1=%d res2=%d res3=%d res4=%d", d1, d2, res1, res2, res3, res4); //

//++ 或者 -- 还可以独立使用, 就相当于自增

//k++ 等价于 k = k +1

//++k 等价于 k= k +1

//如果独立使用 ++k 和 k++ 完全等价

k++; // k = 13

++k;// k = 14

printf("\nk=%d", k); //k = 14

getchar();

}

5.1.4细节说明

1) 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x= 10/3 ,结果是 3

2) 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。

3) 当 自增 当做一个独立语言使用时,不管是 ++i; 还是 i++; 都是一样的,等价

4) 当 自增 当做一个 表达式使用时 j = ++i 等价 i = i + 1; j = i;

5) 当 自增 当做一个 表达式使用时 j = i++ 等价 j = i; i = i + 1;

5.1.5自增,自减课堂练习 1

void main() {

int i1 = 10, i2 = 20;

int i = i1++;//i =10, i1=11

printf("i=%d\n",i);// 10

printf("i1=%d\n", i1);//11

i = ++i1;

printf("i=%d\n", i);//12

printf("i1=%d\n", i1);//12

i = i2--;

printf("i=%d\n",i);// 20

printf("i2=%d\n",i2);//19

i = --i2;

printf("i=%d\n", i);//18

printf("i2=%d\n", i2);//18

getchar();

}

5.1.6课堂练习 2

1) 假如还有 97 天放假,问:xx 个星期零 xx 天

2) 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。

3) 解答

#include <stdio.h>

void main() {

//假如还有 97 天放假,问:xx 个星期零 xx 天

//思路

//1. 定义一个 days 保存 天数

//2. 定义 week 保存 计算得到星期

//3. 定义 leftDays 保存 剩余的天数

//4 使用 % 和 /

//代码

int days = 97;

int week = days / 7;

int leftDays = days % 7;

/*

定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:

5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度

思路

1. 用 huaShi 华氏温度

2. 用 sheShi 摄氏温度

3. 使用公式来进行转换 5/9*(华氏温度-100)

*/

double huaShi = 146.7;

double sheShi = 5.0/9*(huaShi-100);

printf("\n 华氏温度 %.2f 对应的摄氏温度是 %.2f", huaShi, sheShi);

printf("\n 有 %d 个星期零%d 天 放假", week, leftDays);

getchar();

}

5.2 关系运算符(比较运算符)

5.2.1介绍

1) 关系运算符的结果要么是真(非 0 表示),要么是 假(0 表示)

2) 关系表达式 经常用在 if 结构的条件中或循环结构的条件中

5.2.2关系运算符一览

5.2.3案例演示

案例演示关系运算符的使用(operator02.c)

#include <stdio.h>

void main() {

int a = 8;

int b = 7;

printf("\na>b=%d", a > b); // 1

printf("\na>=b=%d", a >= b); // 1

printf("\na<b=%d", a < b); //0

printf("\na<=b=%d", a <= b);//0

printf("\na==b=%d", a == b);//0

printf("\na!=b=%d", a != b);//1

getchar();

}

5.2.4细节说明

1) 关系运算符的结果要么是真(非 0 表示, 默认使用 1),要么是 假(0 表示)

2) 关系运算符组成的表达式,我们称为关系表达式。 a > b

3) 比较运算符 "=="(关系运算符) 不能误写成 "=" (赋值)

5.3 逻辑运算符

5.3.1介绍

用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非 0 表示),要么是 假(0 表示) 。

5.3.2逻辑运算符一览

下表显示了 C 语言支持的所有逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则

5.3.3&& 案例演示

案例演示&& 运算符的使用(operatorXx.c)。

void main() {

double score = 70;//成绩

if(score>=60 && score<=80){

printf("ok1");

} else {

printf("ok2");

}

int a = 10, b = 99;

//说明:

//1. 在进行 && 操作时, 如果第一个条件为 false ,则后面的条件不在判断

//2. 该现象称为 短路现象,所以 逻辑与 也称为 短路逻辑与

if(a < 2 && ++b>99) { //

printf("ok100");

}

printf("b=%d\n", b); //b=99

getchar();

}

5.3.4|| 案例演示

案例演示|| 运算符的使用(operator03.c)。

void main() {

int a = 10, b = 99;

//说明

//1. 在进行逻辑与时,如果第一个条件为真,则不再执行后面的条件,整个结果为真

//2. 该现象称为 逻辑或短路现象,因此 逻辑或也称为 短路逻辑或

if(a > 5 || b++>100) { //

printf("ok100");

}

printf("b=%d\n", b); // b= 99

getchar();

}

5.3.5! 案例演示

案例演示 !运算符的使用(operator03.c)。

void main() {

int score = 100;

int res = score > 99;

if(res) {

printf("hello, tom\n");

}

if(!res) {

printf("hello,jack\n");

}

getchar();

}

5.3.6练习题 1 请写出每题的输出结果

案例 2

void main() {

int x=1;

int y=0;

short z=42;

if((z++==42)&&(y=1)) { // z = 43 , y =1

z++; // z = 44

}

if((x=0) || (++z==45)) { // z = 45

z++; // z = 46

}

printf("z=%d", z); // z 为 46

getchar();

}

结果为:z 为 46

5.4 赋值运算符

5.4.1介绍

赋值运算符就是将某个运算后的值,赋给指定的变量。

5.4.2赋值运算符一览表

先讲 =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|= 和位运算相关,放在后面讲解。

5.4.3案例演示

案例演示赋值运算符的基本使用。

1) 赋值基本案例 [int num1 = 10 + 3]

2) 有两个变量,a 和 b,要求将其进行交换,最终打印结果

3) += 的使用案例

4) 代码演示

#include <stdio.h>

void main() {

//+= 的案例,其它的类似 -= *= /= %=

int c = 12;

int a2 = 10;

//有两个变量,a 和 b,要求将其进行交换,最终打印结果

int a = 10;

int b = 20;

//思路是通过一个临时变量来实现 a , b 值的交换

int temp = a;

a = b;

b = temp;

c += 3; // 等价 c = c + 3;

//c += b;// 等价 c = c + b;

a2 += 1.7;

printf("\na=%d b=%d c=%d a2=%d", a, b, c, a2);// a=20, b = 10 c = 15 a2=11

getchar();

}

5.4.4赋值运算符特点

1) 运算顺序从右往左

2) 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值

3) 复合赋值运算符等价于下面的效果

比如:a+=3;等价于 a=a+3;

4) 注意在运算时,可能截断小数点后面的部分

int a = 10;

a += 1.7; // a = a + 1.7 =>11.7 => 11

a= 11

5.5 位运算符

5.5.1介绍

位运算符作用于位,并逐位执行操作。

5.5.2位运算符一览表

要彻底搞懂位运算,

需要先学习二进制,

因此位运算,我们

放在二进制后讲解

5.6 三元运算符

5.6.1基本语法

条件表达式 ? 表达式 1: 表达式 2;

1) 如果条件表达式为非 0 (真),运算后的结果是表达式 1;

2) 如果条件表达式为 0 (假),运算后的结果是表达式 2;

3) 口诀: 一灯大师 =》 一真大师

5.6.2案例演示

#include <stdio.h>

void main() {

int a = 10;

int b = 99;

int res = a > b ? a++ : b--; // 一真大师

int n1 = a > b ? 1.1 : 1.2; // 警告 double -> int

printf("\n a = %d b=%d res=%d", a, b, res); // a = 10 , b=98, res = 99

getchar();

}

5.6.3使用细节

1) 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换), 否则会有精度损失

2) 三元运算符可以转成 if--else 语句

int res = a > b ? a++ : --b; // if ... else ..

5.6.4课堂练习

1) 案例 1:实现两个数的最大值 (a , b )

2) 案例 2:实现三个数的最大值

3) 代码演示

int a = 10;

int b = 100;

int c = 199;

int max = a > b ? a : b

int max2 = max > c ? max : c

int max3 = (a > b ? a : b) > c ? (a > b ? a : b) : c; // ok

5.7 运算符优先级

5.7.1运算符优先级一览表

5.7.2运算符优先级小结:

1) 结合的方向只有三个是从右向左,其余都是从左向右

2) 所有的双目运算符中只有赋值运算符的结合方向是从右向左

3) 另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()

4) 逗号的运算符优先级最低

5) 说一下优先级的大概的顺序 算术运算符 > 关系运算符 > 逻辑运算符(逻辑非! 除外) > 赋值运算符 > 逗号运算符

6) 注意不需要刻意的记, 常用就慢慢有印象.

5.7.3运算符优先级注意事项和细节:

上表中,优先级同为 1 的几种运算符如果同时出现,那怎么确定表达式的优先级呢?这里我们专门说明一把

5.8 标识符的命名规则和规范

5.8.1标识符概念

1) C 语言 对各种变量、函数等命名时使用的字符序列称为标识符

2) 凡是自己可以起名字的地方都叫标识符

5.8.2标识符的命名规则

1) 由 26 个英文字母大小写,0-9 ,_或 $ 组成

2) 数字不可以开头。

3) 不可以使用关键字和保留字,但能包含关键字和保留字。

4) C 语言中严格区分大小写,长度无限制。

5) 标识符不能包含空格。

5.8.3判断下面变量名是否正确

hello // √

hello12 // √

1hello // ×

h-b // ×

x h //×

h$4 //√

int //×

double //×

stu_name //√

5.8.4标识符命名规范

1) 程序中不得出现仅靠大小写区分的相似的标识符

int x, X; 变量 x 与 X 容易混淆

2) 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词

比如: const double TAX_RATE = 0.08; //TAX_RATE 只读变量

#define FILE_PATH "/usr/tmp"

3) 定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据, 运行程序,会异常退出。

4) 变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [驼峰法,小驼峰, 比如 short stuAge = 20;]

比如: tankShotGame 大驼峰 [TankShotGame]

5.9 关键字

5.9.1关键字的定义和特点

5.10 键盘输入语句

5.10.1 介绍

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.c

5.10.2 步骤 :

1) include <stdio.h>

2) 使用 scanf 函数

3) 使用适当的格式参数接收输入

5.10.3 案例演示:

要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 性别 (male(m) / female(f))】。

#include <stdio.h>

void main() {

//使用字符数组接收名

char name[10] = "";

int age = 0;

double sal = 0.0;

char gender = ' ';

//提示用户输入信息

printf("请输入名字:");

//scanf("%s", name) 表示接收 一个字符串,存放到 name 字符数组

scanf("%s", name);

printf("请输入年龄:");

scanf("%d", &age); // 因为我们将得到输入存放到 age 变量指向地址,因此需要加 &

printf("请输入薪水:");

scanf("%lf", &sal); //接收一个 double 时,格式参数 %lf

printf("请输入性别(m/f):");

scanf("%c", &gender); //这里是接收到了上面的回车字符

scanf("%c", &gender); //等待用户输入.

//输出得到信息

printf("\nname %s age %d sal %.2f gender %c", name, age,sal,gender);

getchar();//接收到一个回车

getchar();//这个 getchar() 才会让控制台暂停

}

5.11 课后练习题

1. 定义变量保存 秒数,打印输出 xx 小时 xx 分钟 xx 秒

void main() {

//定义变量保存 秒数,打印输出 xx 小时 xx 分钟 xx 秒

//思路

//1. 定义变量保存 秒数 second

//2. 定义变量保存 小时 hour

//3. 定义变量保存 分钟 min

//4. 定义变量保存 剩余描述 leftSecond

int second = 894567;

int hour = second / 3600 ; // 一个小时有 3600 秒

int min = second % 3600 / 60; //

int leftSecond = second % 60;

printf("%d 秒 合%d 小时%d 分钟%d 秒", second, hour, min, leftSecond);

getchar();

}

2. 实现对三个整数进行排序,输出时按照从小到大的顺序输出

void main() {

//实现对三个整数进行排序,输出时按照从小到大的顺序输出=> 冒泡

int n1 = 10;

int n2 = 8;

int n3 = 5;

int temp = 0; //temp 是用于交换的临时变量

printf("\n 最初顺序 n1=%d n2=%d n3=%d", n1, n2,n3);

//思路如下

//1. 从小到大将值保存 n1 n2 n3

//2. n1 和 n2 比较,如果 n1 大于 n2 ,则交换

//3. n2 和 n3 比较 , 如果 n2 大于 n3 ,则交换

//4. n1 和 n2 比较,如果 n1 大于 n2 ,则交换

//n1 和 n2 比较,如果 n1 大于 n2 ,则交换

if (n1 > n2) {

temp = n1;

n1 = n2;

n2 = temp;

}

//输出

printf("\n 第一次处理 n1=%d n2=%d n3=%d", n1, n2,n3);

// n2 和 n3 比较 , 如果 n2 大于 n3 ,则交换

if (n2 > n3) {

temp = n2;

n2 = n3;

n3 = temp;

}

//输出

printf("\n 第 2 次处理 n1=%d n2=%d n3=%d", n1, n2,n3);

//n1 和 n2 比较,如果 n1 大于 n2 ,则交换

if (n1 > n2) {

temp = n1;

n1 = n2;

n2 = temp;

}

//输出

printf("\n 第 3 次处理 n1=%d n2=%d n3=%d", n1, n2,n3);

getchar();

}

3. 写出程序的输出结果

int x=1,y=12;

x+=2; // x=3

y-=3; // y =9

printf("\n");

printf("x= %d y=%d",x, y); // x=3,y=9

y/=x; // y = 3

printf("x= %d y=%d",x, y);// x=3,y=3

y++; //y=4

y%=x; //y=1

printf("x= %d y=%d",x, y);//x =3 ,y =1

getchar();

4. 看各个数的结果

int a=5+4; int b=a*2; int c=b/4; int d=b-c; int e=-d; int f=e%4;

int i=3;int j=i++; int k=++i;

printf("a=%d", a); //9

printf("b=%d", b); //18

printf("c=%d", c); // 4

printf("d=%d", d);// 14

printf("e=%d", e);//-14

printf("f=%d", f); //-2

printf("i=%d", i);//3

printf("j=%d", j);//3 => i =4

printf("k=%d", k);//5

getchar();

5. 分析结果

int n=3, m=4;

printf("\n n<m is =%d ",(n<m)); //1

printf("\n n=m is =%d ",((++n)==m));//1 // n =4

printf("\n n>m is =%d",((++n)>m));//1//n =5

printf("\n n is =%d ", n);// 5

getchar();


总结

算术运算符用于执行基本数学操作,如加法、减法等。关系运算符用于比较值并返回布尔结果。逻辑运算符则用来组合多个条件,以形成更复杂的逻辑表达式。正确使用这些运算符能够帮助开发者编写功能丰富且逻辑清晰的程序。

附录

参考:【尚硅谷C语言零基础快速入门教程-哔哩哔哩】 https://b23.tv/vS3vTDp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值