P 41 关系运算符及其使用 2022/8/27
一、基本介绍
- 关系运算符的结果要么是真(非0 表示),要么是 假(0 表示)
- 关系表达式 经常用在 if结构的条件中或循环结构的条件中
二、关系运算符一览表
案例演示以以及相关截图:
#include<stdio.h>void main(){int a = 8;int b = 7;// 0 是FALSE,表示不成立;非0是TRUE,表示成立printf("\na>b=%d",a > b); // 1 printf("\na>=b=%d",a >= b); // 1printf("\na<b=%d",a < b); // 0printf("\na<=b=%d",a <= b); // 0printf("\na==b=%d",a == b); // 0printf("\na!=b=%d",a != b); // 1getchar();
}
三、细节说明
- 关系运算符的结果要么是真(非0 表示, 默认使用1),要么是 假(0 表示)
- 关系运算符组成的表达式,我们称为关系表达式。 a > b
- 比较运算符 “==”(关系运算符),判断数据是否相等 不能误写成 “=” (赋值)
P 42 逻辑运算符应用案例 2022/8/27
一、基本介绍
用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非0 表示),要么是 假(0 表示)
二、逻辑运算符一览表
三、案例演示
1. && 逻辑与运算符
#include<stdio.h>void main() {
double score = 70;//成绩
if(score>=60 && score<=80){
printf("ok1");
} else {
printf("ok2");
}
getchar();
}
// 应该输出OK1
#include<stdio.h>void main() {int a = 10, b = 99;// if(a < 20 && b++>99) // 先比较,后自增,所以b输出100// if(a < 20 && ++b>99) // 先自增,在比较 ,所以会输出ok100// 说明:// 1.在进行 && 操作时,如果第一个条件为FALSE,则后面条件不在判断。// 2.该现象成为短路现象,所以 逻辑与 也称为 短路逻辑与if(a < 2 && ++b>99) // 当改为 a < 2时,即为假,后面的就不会去判断,直接进行输出{ printf("\nok100");}printf("\nb=%d\n", b); //b=100getchar();
}
2. || 逻辑或运算符
#include<stdio.h>
// 逻辑或运算符 : 有真即真,全假为假
void main() {int a = 10, b = 99;// 说明:// 1.在进行逻辑与 时,如果第一个条件为真,则不在执行后面条件,整个结果为真// 2.该现象称为 逻辑或短路 现象,因此 逻辑或 也称为 短路逻辑或if(a > 5 || b++>100) { // 当第一个条件为真时,就已经判断为真了,后面的条件是不会再进行执行printf("ok100");}printf("b=%d\n", b); //b=100getchar();
}
3. !逻辑非运算符
#include<stdio.h>void main() {int score = 100;int res = score > 199; // 为真则输出Tom,为假则输出 jackif(res) {printf("hello, tom\n");}if(!res) {printf("hello,jack\n");}getchar();
}
P 43 逻辑运算符课堂练习 2022/8/28
一、题目练习
题目一:
#include<stdio.h>void main(){int x = 1;int y=1;if(x++==2 && ++y==2){ // x++,先比较,在自增,所有1!=2为假,故后面不执行,最后输出x=2,y=1x = 7; }printf("x= %d,y=%d",x,y); //x = 2, y =1getchar();
}
题目二:
#include<stdio.h>void main(){int x = 1,y = 1;if(x++==1 || ++y==1){ // x++,先比较,再自增,所以前面为真,后面就不执行了,最后输出x=7,y=1x =7;}printf("x=%d , y=%d",x,y); // x = 7, y = 1getchar();
}
题目三:
#include<stdio.h>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=2) || (++z==45)) { // z = 45z++; // z = 46}printf("z=%d", z); // z 为46getchar();
}
P 44 赋值运算符介绍和使用 2022/8/28
一、基本介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
二、赋值运算符一览表
先讲 =、+=、-=、*= 、/=、%= ;
<<=、>>=、&=、^=、|= 和位运算相关,放在后面讲解.
三、案例演示
- 有两个变量,a和b,要求将其进行交换,最终打印结果
#include<stdio.h>void main(){// 有两个变量 a 和 b,要求将其进行交换,最终打印结果int a = 10;int b = 20;// 思路通过一个临时变量来实现 a,b值得交换int temp = a;a = b;b = temp;printf("\na=%d b=%d",a,b); // a = 20,b = 10;getchar();
}
- += 的使用案例;其余-+,*=,/=,%= 。
#include<stdio.h>void main(){// += 的使用案例;其余-+,*=,/=,%= 。int c =12;c += 3; // 等价于 c = c +3;printf("c=%d",c); // c = 15getchar();
}
四、赋值运算符特点
1.运算顺序从右往左
int num1 = 10 + 3 // 先运算右边的10+3
2.赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
int a = 10;c += 3; // 等价于c+3
c += a // 等价于 c+a
3.复合赋值运算符等价于下面的效果
比如:a+=3;等价于a=a+3;
int c2 =15;c2 += 1.7; // 等价于 c2 = 1.7 + 15 ,但是只会取整,则是c2 = 16printf("c2=%d",c,c2);
4.在运算是可能会截断小数点后面的一部门,造成数据丢失
P 45 三元运算符介绍和使用 2022/8/29
一、基本语法
- 如果条件表达式为非0 (真),运算后的结果是表达式1;
- 如果条件表达式为0 (假),运算后的结果是表达式2;
- 口诀: 一灯大师 =》 一真大师 === > 一真二假
二、案例演示
#include<stdio.h>void main(){int a = 10;int b = 99;int res = a > b ? a++ : b--; // 一真二假;当前则为假,返回后面的,b--,先把值赋给res然后在进行自减,所以得 res = 99,a=10,b=98printf("\na=%d b=%d res=%d",a,b,res);getchar();
}
三、细节说明
- 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换),否则会有精度损失
int n1 = a > b ? 1.1 : 1.2; // 警告:编译器以为你把double给到了intprintf("\na=%d b=%d res=%d n1=%d",a,b,res,n1);
- 三元运算符可以转换成if – else 语句 int res = a > b ? a++ : --b; // if … else …
四、课堂练习
- 案例1:实现两个数的最大值 (a , b )
- 案例2:实现三个数的最大值
#include<stdio.h>void main(){int a = 10;int b = 100;int c = 199;// 第一种方法//int max = a >b ? a : b;//int max2 = max > c ? max : c;// 第二种方法int max = (a >b ? a : b) > c ? (a >b ? a : b) : c;//printf("max=%d max2=%d",max,max2);printf("max=%d",max);getchar();
}
P 46 运算符优先级 2022/8/30
一、运算符优先级小结
- 结合的方向只有三个是从右向左,其余都是从左向右
- 所有的双目运算符中只有赋值运算符的结合方向是从右向左
- 另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()
- 逗号的运算符优先级最低
- 说一下优先级的大概的顺序 算术运算符 > 关系运算符 > 逻辑运算符(逻辑非! 除外) > 赋值运算符 > 逗号运算符
- 注意不需要刻意的记, 常用就慢慢有印象.
二、C语言运算符优先级一览表
三、优先级注意事项和细节
上表中,优先级同 为1 的几种运算符 如果同时出现,那 怎么确定表达式的 优先级呢?这里我们专门说明一把
P 47 标识符命名规则和规范 2022/8/30
一、标识符概念以及命名规则
概念:
- C语言 对各种变量、函数等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符
标识符命名规则:
- 由26个英文字母大小写,0-9 ,_或 $ 组成
- 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- C语言中严格区分大小写,长度无限制。
- 标识符不能包含空格。
判断下面变量名是否正确 hello // √
hello12 // √
1hello // × h-b // ×
x h //×
h$4 //√
int //×
double //×
stu_name //√
二、标识符命名规范
- 程序中不得出现仅靠大小写区分的相似的标识符int x, X; 变量x 与X 容易混淆
- 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词比如: const double TAX_RATE = 0.08; //TAX_RATE 只读变量#define FILE_PATH “/usr/tmp”
- 定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据, 运行程序,会异常退出*.
int c1; // 没有初始化,就是没有给他赋值,可能造成程序异常退出
- 变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [驼峰法,小驼峰, 比如 short stuAge = 20;] 比如: tankShotGame 大驼峰 [TankShotGame]
三、关键字的定义和特点
P 48 键盘输入语句 2022/8/30
一、基本介绍
介绍:在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.c
步骤:
- include <stdio.h>
- 使用scanf 函数
- 使用适当的格式参数接收输入
二、案例演示
要求:可以从控制台接收用户信息,【姓名,年龄,薪水,性别 (male(m) / female(f))】。
#include<stdio.h>void main(){// 使用字符数组接收文字char name[10] = "";int age = 0;double sal = 0.0;char gender = ' ' ;// 提示用户 输入信息printf("请输入名字:");// 接收一个字符串并且放在name这个字符数组中scanf("%s,",name);printf("请输入年龄:");scanf("%d",&age); // 因为我们将得到的输入存放到age变量指向的地址中,因此需要加&符// // 如果将一个整数放进去,就是他指向的一个地址,因此要加&printf("请输入薪水:");scanf("%lf",&sal); // 接收一个double时,格式参数 %lfprintf("请输入性别(m/f):");scanf("%c",&gender); // 因为char类型是字符,回车就是一个字符,所以这里是接收上面的回车字符scanf("%c",&gender); // 这里才是 等待用户输入// 输出得到的信息printf("\nname %s age %d sal %.2f gender %c",name,age,sal,gender);getchar(); // 因为gender要输入字符,回车就是一个字符;接收到一个回车getchar(); // 因此我们需要在打一个getchar 控制台才会暂停
}
P 49 运算符的综合练习题 2022/8/31
一、课后练习题
题目一:定义变量保存 秒数,打印输出 xx小时xx分钟xx秒
#include<stdio.h>void main(){// 定义变量保存秒数吗,打印输出xx小时xx分钟xx秒// 思路// 1. 定义变量保存 秒数 second// 2. 定义变量保存 小时 hour// 3. 定义变量保存 分钟 min// 4.定义变量保存 剩余的秒数 leftSendconint second = 894567;int hour = second / 3600; // 一个小时有3600秒int min = second % 3600 / 60;int leftSendcon = second % 60; // 模60就是剩余的秒数printf("%d 秒 合 %d 小时 %d分钟 %d 秒",second,hour,min,leftSendcon);getchar();
}
题目二:实现对三个整数进行排序,输出时按照从小到大的顺序输出
#include<stdio.h>void main(){// 实现对三个整数进行排序,输出时按照从小到大的顺序输出-->冒泡法// 思路// 1. 从小到大将值保存到n1 n2 n3int n1 =10;int n2 = 8;int n3 = 5;int temp = 0; // tmp 是用来交换的临时变量// printf("\n最初顺序n1=%d n2=%d n3=%d",n1,n2,n3);// 2. n1 和 n2 比较,如果n1大于n2,则交换if(n1 > n2) {temp = n1;n1 = n2;n2 =temp;}// 输出
// printf("\n第一次处理 n1=%d n2=%d n3=%d",n1,n2,n3);// 3. n2 和 n3 比较,如果n2大于n3,则交换if(n2 > n3) {temp = n2;n2 = n3;n3 =temp;}
// printf("\n第二次处理 n1=%d n2=%d n3=%d",n1,n2,n3);// 4. n1 和 n2 比较,如果n1大于n2,则交换if(n1 > n2) {temp = n1;n1 = n2;n2 =temp;}printf("\n第三次处理 n1=%d n2=%d n3=%d",n1,n2,n3);getchar(); }
题目三:写出程序的输出结果
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();
题目四:实现两个整数的加减乘除以及取余算法
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();
题目五:写出程序的输出结果
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();
P 50 四种进制的规则 2022/8/31
一、进制介绍
对于整数,有四种表示方式:
-
二进制:0,1 ,满2进1,C语言中没有二进制常数的表示方法。
-
十进制:0-9 ,满10进1。
-
八进制:0-7 ,满8进1. 以数字0开头表示。
-
十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。[A->10 B->11 C->12 D->13 E->14 F->15 ]
如:0x21AF +1= 0X21B0 ,在这里 如+1,则就是F+1就是16了,满16进1,所以前面A–>就变成B了。