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

C语言学习笔记——运算符,第1张

C语言学习笔记——运算符 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
void main() {
	//因为9和7都为整数,所以结果中整数1后面的小数都被截断,只保留1
	double a = 9 / 7;
	printf("a = %fn", a);

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

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

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

	//9 - 9 / (-7) * (-7)
	int e = 9 % -7;
	printf("e = %dn", e);

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

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

5.1.2 ++
#include
void main() {
	int a = 7;
	int b = a++;//等价于b = a; a = a + 1;
	printf("a = %d  b = %dn", a, b);
	int c = ++a;//等价于a = a + 1; c = a;
	printf("a = %d  c = %dn", a, c);
	//++a和a++可以独立使用,但两者完全等价,都是a = a + 1;
	++a;
	printf("a = %dn", 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
    void main() {
    	int weeks, days;
    	weeks = 97 / 7;
    	days = 97 % 7;
    	printf("距离放假还有 % d个星期零 % d天", weeks,days);
    }

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

    #include
    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
void main() {
	int a = 9;
	int b = 7;
	printf("a==b = %dn",a==b);
	printf("a!=b = %dn", a != b);
	printf("a>b = %dn", a > b);
	printf("a=b = %dn", a >= b);
	printf("a<=b = %dn", 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
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
void main() {
	int a = 9, b = 7;
	if (b < 8 && a++ > 9) {// a++ > 9判断中先进行a > 9的判断,再进行a++
		printf("ok1n");
	}
	printf("a = %dn", a);
	
	int c = 9, d = 7;
	if (d < 8 && ++c > 9) {// ++c > 9判断中先进行c > 9的判断,再进行++c
		printf("ok2n");
	}printf("c = %dn", c);

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

 3.2.3.2逻辑或运算
#include
void main() {
	int a = 9, b = 7;
	if (a > 7 || b++ > 7) {//在进行逻辑与时候,第一个判断的结果是true,则之后的条件不再进行判断
		printf("okn");
	}
	printf("b = %dn", b);
}

 3.2.3.3逻辑非运算
#include
void main() {
	//int score = 97;
	int score = 79;
	int result = score > 80;
	if (result) {
		printf("ok1n");
	}
	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
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 = %dtb = %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
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 = %dnb = %dnc =%dn", 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 = %dne = %dnf =%dn", d, e, f);

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

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

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

输出三个数中的最大值

#include
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
  2. 使用scanf函数
  3. 使用恰当的格式参数接收输入
3.7.3代码
#include
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姓名为%st年龄为%dt薪水为%ft性别为%c", name, age, sal, gender);
}

3.8练习
  1. 定义变量保存 秒数,打印输出 xx 小时 xx 分钟 xx 秒
    #include
    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
    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);
    	}
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5698895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)