C语言学习笔记——运算符

本文详细介绍了C语言中的算术运算符,包括正号、负号、加、减、乘、除、取余,以及自增和自减运算符。接着讲解了关系运算符,如等于、不等于、大于、小于、大于等于和小于等于,并通过代码示例演示了其用法。还探讨了逻辑运算符,包括逻辑与、逻辑或和逻辑非,以及它们在条件判断中的应用。最后,提到了赋值运算符和三元运算符,并给出了一些练习题,帮助读者巩固这些概念。
摘要由CSDN通过智能技术生成

3.1算术运算符

运算符运算范例结果
+正号+77
-负号a=7;-a-7
+9+716
-9-72
*9*763
/7/71
%取余9%71

++

++

自增(前):先运算后取值

自增(后):先取值后运算

a=7;b=++a

a=7;b=a++

a=8;b=8

a=8;b=7

--

--

自减(前):先运算后取值

自减(后):先取值后运算

a=7;b=--a

a=7;b=a--

a=6;b=6

a=6;b=7

5.1.1取余

#include<stdio.h>
void main() {
	//因为9和7都为整数,所以结果中整数1后面的小数都被截断,只保留1
	double a = 9 / 7;
	printf("a = %f\n", a);

	//若想要保留小数,则在参加运算的数字中,必须加上小数部分
	double b = 9.0 / 7;
	printf("b = %.15f\n", b);

	//9 % 7 指的是9对7取余(取模)
	int c = 9 % 7;
	printf("c = %d\n", c);

	//计算机中取模的公式为 a - a / b * b
	//-9 - (-9) / 7 * 7
	int d = -9 % 7;
	printf("d = %d\n", d);

	//9 - 9 / (-7) * (-7)
	int e = 9 % -7;
	printf("e = %d\n", e);

	//(-9) - (-9) / (-7) * (-7)
	int f = -9 % -7;
	printf("f = %d\n", f);
}

 计算机中取模的公式为 a - a / b * b

5.1.2 ++

#include<stdio.h>
void main() {
	int a = 7;
	int b = a++;//等价于b = a; a = a + 1;
	printf("a = %d  b = %d\n", a, b);
	int c = ++a;//等价于a = a + 1; c = a;
	printf("a = %d  c = %d\n", a, c);
	//++a和a++可以独立使用,但两者完全等价,都是a = a + 1;
	++a;
	printf("a = %d\n", a);
	a++;
	printf("a = %d", a);
}

  1. b = a++;//等价于b = a; a = a + 1;
  2. c = ++a;//等价于a = a + 1; c = a;
  3. ++a和a++可以独立使用,但两者完全等价,都是a = a + 1

5.1.3练习

  1. 假如还有97天放假,请问还有多少个星期零几天?
    #include<stdio.h>
    void main() {
    	int weeks, days;
    	weeks = 97 / 7;
    	days = 97 % 7;
    	printf("距离放假还有 % d个星期零 % d天", weeks,days);
    }

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

    
    #include<stdio.h>
    void main() {
    	//华氏温度转换摄氏温度的公式为:5 / 9 * (华氏温度 - 100),
    	double Fahrenhite = 97;
    	double Centigrade = 5.0 / 9 * (Fahrenhite - 100);
    	printf("%f对应的摄氏温度为%f", Fahrenhite, Centigrade);
    }

3.2关系运算符

3.2.1介绍

  1. 关系运算符的结果为真是非0,为假是0
  2. 关系表达式经常用在if或循环中

3.2.2关系运算符表示

运算符运算示例结果
==相等于9 == 7false
!=不等于9 != 7true
>大于9 > 7 true
<小于9 < 7false
>=大于等于9 >= 7true
<=小于等于9<=7false

3.2.3代码

#include<stdio.h>
void main() {
	int a = 9;
	int b = 7;
	printf("a==b = %d\n",a==b);
	printf("a!=b = %d\n", a != b);
	printf("a>b = %d\n", a > b);
	printf("a<b = %d\n", a < b);
	printf("a>=b = %d\n", a >= b);
	printf("a<=b = %d\n", a <= b);
}

 3.3逻辑运算符

3.3.1介绍

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

3.2.2逻辑运算符表示

设变量A为1,变量B为0

运算符描述示例
&&逻辑与运算符。只有两个操作数都为真,结果才为真;否则,则为假(A && B) 为假
||逻辑或运算符。只要有一个操作数为真,结果就为真(A || B)为真
!逻辑非运算符。如果条件为真,则使其为假!(A || B)为假

3.2.3代码

3.2.3.1逻辑与运算符

#include<stdio.h>
void main() {
	//double score = 97;
	//double score = 79;
	double score = 59;
	if (score >= 80) {
		printf("优秀");
	}
	else if (score >= 60 && score < 80) {
		printf("良");
	}
	else {
		printf("不合格");
	}
}

#include<stdio.h>
void main() {
	int a = 9, b = 7;
	if (b < 8 && a++ > 9) {// a++ > 9判断中先进行a > 9的判断,再进行a++
		printf("ok1\n");
	}
	printf("a = %d\n", a);
	
	int c = 9, d = 7;
	if (d < 8 && ++c > 9) {// ++c > 9判断中先进行c > 9的判断,再进行++c
		printf("ok2\n");
	}printf("c = %d\n", c);

	int e = 9, f = 7;
	if (f < 6 && ++e > 9) {// 如果在进行&&操作时,第一个判断的结果是false,则之后的条件就不再进行判断
		printf("ok3\n");
	}printf("e = %d", e);
}

 3.2.3.2逻辑或运算

#include<stdio.h>
void main() {
	int a = 9, b = 7;
	if (a > 7 || b++ > 7) {//在进行逻辑与时候,第一个判断的结果是true,则之后的条件不再进行判断
		printf("ok\n");
	}
	printf("b = %d\n", b);
}

 3.2.3.3逻辑非运算

#include<stdio.h>
void main() {
	//int score = 97;
	int score = 79;
	int result = score > 80;
	if (result) {
		printf("ok1\n");
	}
	if (!result) {//当result取反为真时
		printf("ok2");
	}
}

3.3赋值运算符

3.3.1介绍

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

3.3.2赋值运算符表示

运算符描述示例
=把右边的操作数赋值给左边的操作数

A = B + C等价于把

B + C的值赋值给A

+=加且赋值运算符,把左边的操作数加上右边的操作数再赋值给左边的操作数

A += B 等价于 A = A + B

-=减且赋值运算符,把左边的操作数减去右边的操作数再赋值给左边的操作数A -= B 等价于 A = A - B
*=乘且赋值运算符,把左边的操作数乘去右边的操作数再赋值给左边的操作数A *= B 等价于 A = A * B
/=除且赋值运算符,把左边的操作数除去右边的操作数再赋值给左边的操作数A /= B 等价于 A = A / B
%=求模且赋值运算符,把左边的操作数对去右边的操作数取模,再赋值给左边的操作数A %= B 等价于 A = A % B
<<=左移且赋值运算符C <<= 2 等价于 C = C << 2
>>=右移且赋值运算符C >>= 2 等价于 C = C >> 2
&=按位与且赋值运算符C &= 2 等价于 C = C & 2
^=按位异或且赋值运算符C ^= 2 等价于 C = C ^ 2
|=按位或且赋值运算符C |= 2 等价于 C = C | 2

3.3.3代码

#include<stdio.h>
void main() {
	//交换a与b的值
	int a = 9;
	int b = 7;
	int temp = a;//设置一个临时变量保存a的值
	a = b;//将b赋值给a
	b = temp;//将temp赋值给b,即a原来的值复制给b,完成交换
	printf("a = %d\tb = %d", a, b);

	//+=示例
	int c = 97;
	c += a;
	printf("c = %d", c);
}

  1.  运算顺序从右往左
  2. 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
  3. 在运算时,如果被赋值的变量精度较小,则有可能会导致精度损失

3.4三元运算符

3.4.1基本语法

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

3.4.2代码

#include<stdio.h>
void main() {
	int a = 9;
	int b = 7;
	int c = a > b ? a++ : --b;//a > b为真,因此a++赋值给c;而a++先进行赋值操作,即c = a,再进行 a = a + 1
	printf("a = %d\nb = %d\nc =%d\n", a, b, c);

	int d = 9;
	int e = 7;
	int f = d < e ? d++ : --e;//d < e为假,因此e--赋值给f;而e--先进行e = e - 1,在进行赋值操作
	printf("d = %d\ne = %d\nf =%d\n", d, e, f);

	//三元运算符中,如果被赋值的变量精度小于赋值变量,则会产生精度损失
	int num1 = a > b ? 1.2 : 1.3;
	printf("num1 = %d\n", num1);

	//三元可以转换为eif else语句
	int num2;
	if (a > b) {
		num2 = 1.2;
	}
	else {
		num2 = 1.3;
	}
	printf("num2 = % d\n", num2);
}

  1.  三元运算符中,如果被赋值的变量精度小于赋值变量,则会产生精度损失
  2. 三元可以转换为eif else语句

3.4.3练习

输出三个数中的最大值

#include<stdio.h>
void main() {
	int a = 9;
	int b = 7;
	int c = 97;
	int temp = a > b ? a : b;
	temp = temp > c ? temp : c;
	printf(" a,b,c中的最大值为%d", temp);
}

 3.5运算符优先级

  1. 结合的方向只有三个是从右向左,其余都是从左向右,分别是赋值运算符、单目运算和三目运算
  2. 逗号的运算符优先级最低
  3. 优先级的大概顺序为算数运算符>关系运算符>逻辑运算符(逻辑非除外,其优先级较高)>赋值运算符>逗号运算符

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

3.6.1标识符的概念

  1. C语言对各种变量、函数等命名时使用的字符序列称为标识符
  2. 凡是自己可以起名字的地方都叫标识符

3.6.2标识符的命名规则

  1. 由 26 个英文字母大小写,0-9 ,_或 $ 组成
  2. 数字不可以开头
  3. 不可以使用关键字和保留字,但能包含关键字和保留字
  4. C语言中严格区分大小写,长度无限制
  5. 标识符不能包含空格

3.6.3标识符的规范

  1. 程序中不得出现仅靠大小写区分的相似的标识符                                                                      
  2. 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词                    
  3. 定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据, 运行程序, 会异常退出
  4. 变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写

3.6.4关键字

关键字的定义:被C语言赋予了特殊意义,用于专门用途的字符串

3.7键盘输入语句

3.7.1介绍

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

3.7.2步骤

  1. #include<stdio.h>
  2. 使用scanf函数
  3. 使用恰当的格式参数接收输入

3.7.3代码

#include<stdio.h>
void main() {
	char name[20] = "";
	int age;
	double sal = 0.0;
	char gender ;

	printf("请输入名字");//提示用户输入信息
	scanf_s("%s", name, sizeof(name));//scanf_s("%s", name)表示接收一个字符串,并将其存入name数组中

	printf("请输入年龄");
	scanf_s("%d", &age);//将用户输入的信息存入name所指向的地址中,因此需要用&

	printf("请输入薪水");
	scanf_s("%lf", &sal);//在使用scanf时,double对应的参数是%lf

	printf("请输入性别(m/f)");
	scanf_s("%c", &gender, sizeof(gender));//第一个scanf接收回车
	scanf_s("%c", &gender, sizeof(gender));//第二个scanf接收用户数据	

	printf("\n姓名为%s\t年龄为%d\t薪水为%f\t性别为%c", name, age, sal, gender);
}

3.8练习

  1. 定义变量保存 秒数,打印输出 xx 小时 xx 分钟 xx 秒
    #include<stdio.h>
    void main() {
    	int seconds = 0;
    	int hours = 0;
    	int minutes = 0;
    	int leftSeconds = 0;
    	printf("请输入秒数:");
    	scanf_s("%d", &seconds);
    	hours = seconds / 3600;
    	minutes = seconds % 3600 / 60;
    	leftSeconds = seconds % 3600 % 60;
    	printf("%d小时%d分%d秒", hours, minutes, leftSeconds);
    }

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

    #include<stdio.h>
    void main() {
    	int a = 0;
    	int b = 0;
    	int c = 0;
    	int temp = 0;
    	printf("请输入三个数字:");
    	scanf_s("%d%d%d", &a, &b, &c);
    	if (a > b) {
    		temp = a;
    	}
    	else {
    		temp = b;
    		b = a;
    		a = temp;
    	}
    	if (a > c && b > c) {
    		printf("这三个数字中最大的数字为%d,且它们的从大到小的顺序为%d %d %d", temp, a, b, c);
    	}
    	else if ( a > c &&  b < c){
    		printf("这三个数字中最大的数字为%d,且它们的从大到小的顺序为%d %d %d", temp, a, c, b);
    	}
    	else {
    		printf("这三个数字中最大的数字为%d,且它们的从大到小的顺序为%d %d %d", c, c, a, b);
    	}
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值