#pragma mark - 0_14 自增与自减运算[掌握]
"强调
1.
a++ ----> 整个 a++ 的式子的值是a ---> a的值 是 a+1
++a ----> 整个 ++a 的式子的值是a+1 ---> a的值 是 a+1
a-- ----> 整个 a-- 的式子的值是a ---> a的值 是 a-1
--a ----> 整个 --a 的式子的值是a-1 ---> a的值 是 a-1
"技巧
int a = 1;
//int b1=a++;//1
//int b2=++a; //2
//int c1 = a--; //1
//int c2 = --a; //0
看与"="最近的是不是一个可以直接赋值的数字,如果是的话,就直接赋值给b,如果不是的话,就进行+1或者-1的操作之后再赋值给b
"练习
int main()
{
int num = 5;
/*
(num++)是5,num是6 (++num)是7,num是7 (++num)是8 num是8 (num--)是8,num是7
*/
int result = num++ + ++num + ++num - num--;
printf("%d\n",result);
return 0;
}
#pragma mark - 0_17 详解各类比较运算符[掌握]
"强调
1.结果
比较表达式的结果是0或者1,0表示不成立1表示成立
2,易错点
判断两个数据是否相等 是两个等号(等等于). 1个等号叫赋值(经常会有学生搞不清楚)
int m = 5;
if(6 == m )
{
....
}
#pragma mark - 0_18 比较运算表达式的场景 [掌握]
"例子
1>判断一个数是不是5的倍数
(数%5 == 0) ----> 结果有两种可能 0表示数不是5的倍数 1是表示数是5的倍数
2>实现
int main()
{
//定义一个数用于接受用户输入,拿这个数来操作
int caoZouShu = 0;
scanf("%d",&caoZouShu);
//对5取余数,如果结果 == 0 说明是5的倍数,反之就不是5的倍数
printf("%d\n",caoZouShu%5==0);
return 0;
}
char类型的变量或者常量也可以参与比较运算符,比较的是相应的ASCII码
"例子:
让用户输入两个同大写同小写的且不相同的英文字母,比较这两个字母谁排名在前面
int main()
{
char char_1,char_2;
scanf("%c,%c",&char_1,char_2);
int result = char_1<char_2;//如果是0表示char_2在前面
}
3>找最值: int a,b,c; *************
#pragma mark - 01 逻辑运算符的简要介绍 [掌握]
"强调
1.为什么C语言给程序员提供逻辑运算符?
1>比较表达式的最终结果0/1,只能表示一种情况,但是我们在开发中常常需要通过一个式子判断多个条件是否成立
比如: 数字%3==0 并且 数字%5==0
2>例子
1)开发中的例子
判断是否登陆成功,判断密码和账号是否"都"正确
输入的账号和服务器比对正确 && 输入的密码和服务器比对正确
2.什么是真?什么是假?
计算机的世界中,非0就是真,0就是假
2--->真
0---->假
1--->真
1.1f--->真
-43---->真
3.逻辑表达式的值是0或者1
#pragma mark - 02 逻辑与运算符 [掌握]
"强调
A && B
1.&&逻辑与运算符运算规则
A 和 B 都是真 结果才是真,A 和 B 有一个是假,结果就是假 (同真则真,一假为假)
2.短路问题
A 是假,B将不会再进行判断,整个式子是假的
例子:i++不执行
#include <stdio.h>
int main()
{
int num = 0;
int i = 0;
int result = num&&i++;
printf("%d----%d\n",result,i);
return 0;
}
#pragma mark - 03 逻辑或运算符 [掌握]
"强调
A || B
1.||逻辑与运算符运算规则
A 和 B 只要有一个是真 结果就是真,A 和 B 都是假,结果才是假 (一真则真,同假为假)
2.短路问题
A 是真,B将不会再进行判断,整个式子是真
例子:i++不执行
#include <stdio.h>
int main()
{
int num = 1;
int i = 0;
int result = num||i++;
printf("%d----%d\n",result,i);
return 0;
}
#pragma mark - 04 逻辑运算符的优先级 [掌握]
"强调
1. !逻辑非运算规则
真变假 假变1 非零变0 0变1 (真变假,假变真)
int main()
{
int i=2,j=1,k=0;
printf("%d----%d---%d\n",!i,!j,!k);
return 0;
}
2.优先级的万能公式
() ">" -(负号) ">" ! ">" 算数运算符(+-*/%) ">" 比较运算符(><==...) ">" && ">" ||
里面有一个错误:
逻辑运算符的优先级比 比较运算符的优先级要 (低).
#pragma mark - 04_2 练习讲解
a 请用户输入小明的语文成绩和数学成绩,输出以下判断的结果.
1). 两门成绩都大于90分. 1 0
2). 任意1门成绩大于90分. 1 0
b. 定义1个变量year int 保存年份.
写1个表达式 判断这个年份是不是闰年.
满足如下两个条件之一 那么年份就是闰年.
1). 年份可以被400整除.
2). 年份可以被4整除 但是 不能被100整除.
#pragma mark - 05 运算符的优先级和结合性 [掌握]
"强调
1.什么是优先级
当一个表达式中,有各种各样的不同类型的运算符的时候,此时应该先计算哪一个运算符?解决这个问题的方案就是优先级
优先级 万能公式
() ">" -(负号) ">" ! ">" 算数运算符(+-*/%) ">" 比较运算符(><==...) ">" && ">" ||
2.什么是结合性
当一个表达式中存在的运算符的优先级相等时候,此时应该从左向右运算还是从右向左运算?解决这个问题的方案就是结合性
例子
1>
1+2-3-4
左到右
2>
int i,j,k;
i = j = k = 3;
右到左
3>
i += j += k += 2;
右到左
#warning 短路问题大全
1.当自增自减运算和逻辑运算组合时,编译器编译代码的时候,放弃优先级,去从左向右扫描,最后去判断自增自减要不要去执行
int main()
{
int num = 1;
int i =1;
int result = num||i++;
printf("i==%d--result==%d\n",i,result);//1,1
return 0;
}
2.当逻辑&&和逻辑||组合运算时,仍然是放弃优先级,从左向右扫描
如果有短路,后面的就不执行,如果没有短路,那么就按照正常的优先级来计算
1>
int main()
{
int i = 1;
int result = 1||i++&&i;
printf("%d\n",result);//1
printf("%d\n",i);//1
return 0;
}
2>
int main()
{
int i = 0;
int result = 0||i++&&i;
printf("%d\n",result);//0
printf("%d\n",i);//1
return 0;
}
3>
int main()
{
int i = 0;
int result = 0||i++&&i++;//
printf("%d\n",result);//0
printf("%d\n",i);//1
return 0;
}
#pragma mark - 06_2 练习讲解 [掌握]
请用户输入他的儿子的语数外三门课的成绩,如果平均分>=60,给他一个吻.
#pragma mark - 07 使用IF结构注意[掌握]
1.空语句: 一个;表示一个空语句,什么都不做,但是是符合C语言语法规则的
int main()
{
;
return 0;
}
2.if结构中if后面的()后面不要加;如果你加了,就认为你满足条件执行依据空语句
int main()
{
int num = 11;
if(num > 10);//这里添加分号,if管控的代码块就只有一个空语句
{
printf("真的大于10!\n");
}
return 0;
}
//等价于
int main()
{
int num = 11;
if(num > 10)
{
;
}
{
printf("真的大于10!\n");
}
return 0;
}
|
|