自学内容网 自学内容网

C语言 | 第五章 | 运算符-2

P 41 关系运算符及其使用 2022/8/27

一、基本介绍

  1. 关系运算符的结果要么是真(非0 表示),要么是 假(0 表示)
  2. 关系表达式 经常用在 if结构的条件中或循环结构的条件中

二、关系运算符一览表

image-20220827151138848

案例演示以以及相关截图:

#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);  // 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();
}

三、细节说明

  1. 关系运算符的结果要么是真(非0 表示, 默认使用1),要么是 假(0 表示)
  2. 关系运算符组成的表达式,我们称为关系表达式。 a > b
  3. 比较运算符 “==”(关系运算符),判断数据是否相等 不能误写成 “=” (赋值)

P 42 逻辑运算符应用案例 2022/8/27

一、基本介绍

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

二、逻辑运算符一览表

image-20220827162205512

三、案例演示

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=100
getchar();
}

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=100
getchar();
}

3. !逻辑非运算符

#include<stdio.h>

void main() {
int score = 100;
int res = score > 199;   // 为真则输出Tom,为假则输出 jack
if(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=1
x = 7; }
printf("x= %d,y=%d",x,y); //x = 2, y =1
getchar();
}

题目二:

#include<stdio.h>

void main(){
int x = 1,y = 1;
if(x++==1 || ++y==1){   // x++,先比较,再自增,所以前面为真,后面就不执行了,最后输出x=7,y=1
x =7;
}
printf("x=%d , y=%d",x,y); // x = 7, y = 1
getchar();
}

题目三:

#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 = 45
z++; // z = 46
}
printf("z=%d", z); // z 为46
getchar();
}

P 44 赋值运算符介绍和使用 2022/8/28

一、基本介绍

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

二、赋值运算符一览表

先讲 =、+=、-=、*= 、/=、%= ;

<<=、>>=、&=、^=、|= 和位运算相关,放在后面讲解.

image-20220828154614937

三、案例演示

  • 有两个变量,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 = 15
getchar();
}

四、赋值运算符特点

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 = 16
printf("c2=%d",c,c2); 

4.在运算是可能会截断小数点后面的一部门,造成数据丢失

P 45 三元运算符介绍和使用 2022/8/29

一、基本语法

  1. 如果条件表达式为非0 (真),运算后的结果是表达式1;
  2. 如果条件表达式为0 (假),运算后的结果是表达式2;
  3. 口诀: 一灯大师 =》 一真大师 === > 一真二假

二、案例演示

#include<stdio.h>

void main(){

int a = 10;
int b = 99;
int res = a > b ? a++ : b--;  
//  一真二假;当前则为假,返回后面的,b--,先把值赋给res然后在进行自减,所以得 res = 99,a=10,b=98
 
printf("\na=%d b=%d res=%d",a,b,res);
getchar();
}

三、细节说明

  1. 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换),否则会有精度损失
int n1 = a > b ? 1.1 : 1.2;     //警告:编译器以为你把double给到了int
printf("\na=%d b=%d res=%d n1=%d",a,b,res,n1);
  1. 三元运算符可以转换成if – else 语句 int res = a > b ? a++ : --b; // if … else …

四、课堂练习

  1. 案例1:实现两个数的最大值 (a , b )
  2. 案例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

一、运算符优先级小结

  1. 结合的方向只有三个是从右向左,其余都是从左向右
  2. 所有的双目运算符中只有赋值运算符的结合方向是从右向左
  3. 另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()
  4. 逗号的运算符优先级最低
  5. 说一下优先级的大概的顺序 算术运算符 > 关系运算符 > 逻辑运算符(逻辑非! 除外) > 赋值运算符 > 逗号运算符
  6. 注意不需要刻意的记, 常用就慢慢有印象.

二、C语言运算符优先级一览表

image-20220830102245309

image-20220830102344836

三、优先级注意事项和细节

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

image-20220830102744564

P 47 标识符命名规则和规范 2022/8/30

一、标识符概念以及命名规则

概念:

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

标识符命名规则:

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

hello // √
hello12 // √
1hello // × h-b // ×
x h //×
h$4 //√
int //×
double //×
stu_name //√

二、标识符命名规范

  1. 程序中不得出现仅靠大小写区分的相似的标识符int x, X; 变量x 与X 容易混淆
  2. 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词比如: const double TAX_RATE = 0.08; //TAX_RATE 只读变量#define FILE_PATH “/usr/tmp”
  3. 定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据, 运行程序,会异常退出*.
int c1; // 没有初始化,就是没有给他赋值,可能造成程序异常退出
  1. 变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [驼峰法,小驼峰, 比如 short stuAge = 20;] 比如: tankShotGame 大驼峰 [TankShotGame]

三、关键字的定义和特点

image-20220830111209351

P 48 键盘输入语句 2022/8/30

一、基本介绍

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

步骤:

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

二、案例演示

要求:可以从控制台接收用户信息,【姓名,年龄,薪水,性别 (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时,格式参数 %lf

printf("请输入性别(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 控制台才会暂停
}

image-20220830172526188

P 49 运算符的综合练习题 2022/8/31

一、课后练习题

题目一:定义变量保存 秒数,打印输出 xx小时xx分钟xx秒

#include<stdio.h>

void main(){

// 定义变量保存秒数吗,打印输出xx小时xx分钟xx秒
// 思路
// 1. 定义变量保存 秒数 second
// 2. 定义变量保存 小时 hour
// 3. 定义变量保存 分钟 min
// 4.定义变量保存 剩余的秒数 leftSendcon

int 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 n3
int 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

一、进制介绍

对于整数,有四种表示方式:

  1. 二进制:0,1 ,满2进1,C语言中没有二进制常数的表示方法。

  2. 十进制:0-9 ,满10进1。

  3. 八进制:0-7 ,满8进1. 以数字0开头表示。

  4. 十六进制: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了。

二、进制的图示

image-20220831234229202

image-20220831234531421


原文地址:https://blog.csdn.net/ZJC744575/article/details/142655324

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!