黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)

3. 运算符与表达式

3.1 常用运算符分类

运算符类型

作用

算术运算符

用于处理四则运算

赋值运算符

用于将表达式的值赋给变量

比较运算符

用于表达式的比较,并返回一个真值或假值

逻辑运算符

用于根据表达式的值返回真值或假值

位运算符

用于处理数据的位运算

sizeof运算符

用于求字节数长度

3.2 算术运算符

运算符

术语

示例

结果

+

正号

+3

3

-

负号

-3

-3

+

10 + 5

15

-

10 - 5

5

*

10 * 5

50

/

10 / 5

2

%

取模(取余)

10 % 3

1

++

前自增

a=2; b=++a;

a=3; b=3;

++

后自增

a=2; b=a++;

a=3; b=2;

--

前自减

a=2; b=--a;

a=1; b=1;

--

后自减

a=2; b=a--;

a=1; b=2;

  • 除法运算后,得到的结果赋值给整型变量时,取整数部分。
  • 除0 :错误操作。不允许。
  • 对0取余:错误操作。不允许。
  • 不允许对小数取余。余数不能是 小数。 35 % 3.4;
  • 对负数取余,结果为余数的绝对值。10 % -3;  --》 1

3.3 赋值运算符

运算符

术语

示例

结果

=

赋值

a=2; b=3;

a=2; b=3;

+=

加等于

a=0; a+=2;

a=2;

-=

减等于

a=5; a-=3;

a=2;

*=

乘等于

a=2; a*=2;

a=4;

/=

除等于

a=4; a/=2;

a=2;

%=

模等于

a=3; a%2;

a=1;

void test03()
{
	int a = 8;
	a += a -= a *= a /= 2;
	
	printf("%d\n", a);//0
}

 

3.4 比较运算符

C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。

运算符

术语

示例

结果

==

相等于

4 == 3

0

!=

不等于

4 != 3

1

<

小于

4 < 3

0

>

大于

4 > 3

1

<=

小于等于

4 <= 3

0

>=

大于等于

4 >= 1

1

3.5 逻辑运算符

运算符

术语

示例

结果

!

!a

如果a为假,则!a为真;

如果a为真,则!a为假。

&&

a && b

如果a和b都为真,则结果为真,否则为假。

||

a || b

如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

3.6 运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

<

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--   

void test07()
{
    printf("%d\n", 3>4 || 5<3);//0
    printf("%d\n", 3<4 || 5<3);//1
    printf("%d\n", 3<4 || 5>3);//1

    4 < 3 || printf("hehe\n");//hehe执行
    4 > 3 || printf("haha\n");//haha不执行
}

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第1张图片

void test06()
{
	printf("!0 = %d\n", !0);//1
	printf("!1 = %d\n", !1);//0
	printf("!100 = %d\n", !100);//0
	printf("!-100 = %d\n", !- 100);//0

	printf("!(4<3) = %d\n", !(4<3));//1
	
}
void test01()
{
	// /取整
	printf("%d\n", 5 / 2);//2
	printf("%d\n", 1/2);//0

	// % 取余
	printf("%d\n", 5 % 2);//1
	printf("%d\n", 1 % 2);//1
	printf("%d\n", 6 % 2);//0
	if (5 % 2 == 0)
	{
		printf("5被2整除\n");
	}
	else
	{
		printf("5不被2整除\n");
	}

	//将num的每位上的数单独输出
	int num = 1234;
	printf("千位:%d\n", num / 1000);
	printf("百位:%d\n", num % 1000 / 100);
	printf("十位:%d\n", num % 100 / 10);
	printf("个位:%d\n", num%10);
}

3.7 类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

转换的方法有两种:

  1. 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。
  2. 强制类型转换:把表达式的运算结果强制转换成所需的数据类型。

类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第2张图片

void test01()
{
	int num1 = -10;
	unsigned int num2 = 5;

	num1 + num2 > 0 ? printf(">0\n") : printf("<0\n");//有符号 转为 了无符号。因为补码所以数很大
	printf("num = %d\n", num1 + num2);//强制换回来了
}

3.7.1 隐式转换

#include 

int main()
{
	int num = 5;
	printf("s1=%d\n", num / 2);
	printf("s2=%lf\n", num / 2.0);

	return 0;
}

//8

案例:char  short   空间过小 运算中 很容易溢出 ,防止溢出 编译器决定:char short只要参加运算 先转成int

void test01()
{
	char a = 10;
	short b = 20;
	printf("%u\n", sizeof(a + a));
	printf("%u\n", sizeof(b + b));
	printf("%u\n", sizeof(a + b));
}

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第3张图片

3.7.2 强制转换

强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,其基本语法格式如下所示:

(类型说明符) (表达式)

void test08()
{
	float f = 3.14f;
	int num = 0;

	num = f;
	printf("num = %d\n", num);//3
	printf("f = %f\n", f);//3.140000
}
void test01()
{
	float f = 3.14f;
	int num = 0;

	//强制类型转换只是临时改变f变量的值  
	num = (int)f;//num = (int)3.14;
	printf("num = %d\n", num);//3
	printf("f = %f\n", f);//3.140000
}

 

#include 

int main()
{
	float x = 0;
	int i = 0;
	x = 3.6f;

	i = x;			//x为实型, i为整型,直接赋值会有警告
	i = (int)x;		//使用强制类型转换

	printf("x=%f, i=%d\n", x, i);

	return 0;
}

可能优化黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第4张图片

4. 程序流程结构

4.1 概述

C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。

  1. 顺序结构:程序按顺序执行,不发生跳转。
  2. 选择结构:依据是否满足条件,有选择的执行相应功能。
  3. 循环结构:依据条件是否满足,循环多次执行某段代码。

4.2 选择结构

4.2.1 if语句

如果只在乎项目的某一种结果 请选择 
 

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第5张图片

void test01()
{
	//需求:判断一个数能被3整除
	int num = 0;
	printf("请输入一个int数据:");
	scanf("%d", &num);

	if (num%3 == 0)
	{
		printf("%d能被3整除\n", num);
	}
	
}
#include 

int main()
{
	int a = 1;
	int b = 2;

	if (a > b)
	{
		printf("%d\n", a);
	}

	return 0;
}

4.2.2 if…else语句

项目只有两种结果 且不会同时出现。

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第6张图片

void test02()
{
	//需求:判断一个数对2的余数
	int num = 0;
	printf("请输入一个int数据:");
	scanf("%d", &num);

	if (num % 2 == 0)
	{
		printf("%d对2的余数为%d\n", num, num%2);
	}
	else
	{
		printf("%d对2的余数为%d\n", num, num % 2);
	}
}

 

#include 
int main()
{
	int a = 1;
	int b = 2;

	if (a > b)
	{
		printf("%d\n", a);
	}
	else
	{
		printf("%d\n", b);
	}
	return 0;
}

4.2.3 if…else if…else语句

 项目有多个结果 但是不会同时出现。

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第7张图片

void test03()
{
	//需求:判断一个数对3的余数 (0 1  2)
	int num = 0;
	printf("请输入一个int数据:");
	scanf("%d", &num);

	if (num % 3 == 0)
	{
		printf("%d对3的余数为%d\n", num, num % 3);
	}
	else if(num%3 == 1)
	{
		printf("%d对3的余数为%d\n", num, num % 3);
	}
	else if(num % 3 == 2)
	{
		printf("%d对3的余数为%d\n", num, num % 3);
	}
}
#include 

int main()
{
	unsigned int a;
	scanf("%u", &a);

	if (a < 10)
	{
		printf("个位\n");
	}
	else if (a < 100)
	{
		printf("十位\n");
	}
	else if (a < 1000)
	{
		printf("百位\n");
	}
	else
	{
		printf("很大\n");
	}

	return 0;
}
//成绩
int main0702(void)
{
	int score;		// 100--90 优 90 -- 70 良好 70 -- 60 及格  < 60 差劲

	printf("请输入学生成绩:");
	scanf("%d", &score);

	if (score>=90 && score <=100)
	{
		printf("优秀\n");
	} 
	else if(score < 90 && score >=70)
	{
		printf("良好\n");
	}
	else if (score < 70 && score >= 60)
	{
		printf("及格\n");
	}
	else
	{
		printf("不及格\n");
	}



	system("pause");
	return EXIT_SUCCESS;
}

 

if   if    if  if  if  if 项目有多种结果 不确定是否同时出现

//下面三个if是独立的  

void test04()
{
	//需求:判断一个数是2的倍数   能被3整除  取值范围0~100
	int num = 0;
	printf("请输入一个int数据:");
	scanf("%d", &num);
	if (num % 2 == 0)
	{
		printf("是2的倍数\n");
	}

	if (num % 3 == 0)
	{
		printf("能被3整除\n");
	}

	if (num>=0 && num <=100)
	{
		printf("num在0~100之间\n");
	}
}

错误示范:

void test05()
{
	if (3 > 4);//错误演示 
	{
		printf("3大于4\n");
	}

	if (4 >3)
		printf("4大于3\n");
		printf("4小于3\n");//如果if没有{}只能识别最近的一条语句

	int num = 5;
	//if (num = 3)//注意别把==写成=
	if(3 == num)
	{
		printf("num等于3\n");
	}	
}

4.2.4 三目运算符

#include 

int main()
{
	int a = 10;
	int b = 20;
	int c;

	if (a > b)
	{
		c = a;
	}
	else
	{
		c = b;
	}
	printf("c1 = %d\n", c);

	a = 1;
	b = 2;
	c = ( a > b ? a : b );
	printf("c2 = %d\n", c);

	return 0;
}
	int m = a < b ? 69 : a
void test02()
{
	//三目运算符       表达式 ? 值1:值2     表达式为真 结果为值1 否则为值2
	printf("%d\n", 3>4 ? 3:4);//4

	3 > 4 ? printf("表达式1\n") : printf("表达式2\n");
	3 > 4 ? printf("表达式1\n") : 5>4? printf("表达式2"): printf("表达式3");
}

4.2.5 switch语句

#include 

int main()
{
	char c;
	c = getchar();

	switch (c) //参数只能是整型变量
	{
	case '1':
		printf("OK\n");
		break;//switch遇到break就中断了
	case '2':
		printf("not OK\n");
		break;
	default://如果上面的条件都不满足,那么执行default
		printf("are u ok?\n");
	}
	return 0;
}

4.3 循环结构

4.3.1 while语句

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第8张图片

#include 

int main()
{
	int a = 20;
	while (a > 10)
	{
		scanf("%d", &a);
		printf("a = %d\n", a);
	}

	return 0;
}

4.3.2 do…while语句

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第9张图片

#include 

int main()
{
	int a = 1;
	do
	{
		a++;
		printf("a = %d\n", a);
	} while (a < 10);

	return 0;
}

水仙花数:一个三位数。各个位上的数字的立方和等于本数字。 

    int a, b, c;
	int num = 100;

	do {
		a = num % 10;		// 个位
		b = num / 10 % 10;	// 十位
		c = num / 100;		// 百位

		if (a*a*a + b*b*b + c*c*c == num)
		{
			printf("%d\n", num);
		}
		num++;

	} while (num < 1000);

4.3.3 for语句

#include 

int main()
{
	int i;
	int sum = 0;
	for (i = 0; i <= 100; i++)
	{
		sum += i;

	}

	printf("sum = %d\n", sum);

	return 0;
}

4.3.4 嵌套循环

循环语句之间可以相互嵌套:

#include 

int main()
{
	int num = 0;
	int i, j, k;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			for (k = 0; k < 10; k++)
			{
				printf("hello world\n");
				num++;
			}
		}
	}

	printf("num = %d\n", num);

	return 0;
}

猜数字游戏:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 



int main(void)
{
	srand(time(NULL));	//种随机数种子。

	int n = 0;
	int num = rand() % 100;  // 生成随机数

	for (;;)  // while(1)
	{
		printf("请输入猜测的数字:");
		scanf("%d", &n);
		if (n < num)
		{						// for、while、if 如果执行语句只有一条。 { } 可以省略
			printf("猜小了\n");
		}
		else if (n > num)	
			printf("猜大了\n");	
		else
		{
			printf("猜中!!!\n");
			break;			// 跳出
		}
	}
	printf("本尊是:%d\n", num);

	system("pause");

	return 0;
}

模拟电子表:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
#include 

int main(void)
{
	int i, j, k;

	// 小时
	for (i = 0; i < 24; i++)
	{
		// 分钟
		for (j = 0; j < 60; j++)
		{
			// 秒
			for (k = 0; k < 60; k++)
			{
				printf("%02d:%02d:%02d\n", i, j, k);
				Sleep(960);
				system("cls");  // 清屏
			}
		}
	}

	system("pause");
	return EXIT_SUCCESS;
}

打印99乘法表:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 

// 正序99乘法表
int main01(void)
{
	for (size_t i = 1; i <=9; i++)
	{
		for (size_t j = 1; j <= i; j++)
		{
			printf("%dx%d=%d\t", j, i, j*i);
		}
		printf("\n");
	}
	system("pause");
	return EXIT_SUCCESS;
}

// 倒序 99 乘法表
int main(void)
{
	int i, j;

	for (i = 9; i >= 1; i--)		// 行
	{
		for (j = 1; j <= i; j++)		// 列
		{
			printf("%dx%d=%d\t", j, i, j*i);
		}
		putchar('\n');
	}

	system("pause");
	return EXIT_SUCCESS;
}

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第10张图片黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第11张图片

4.4 跳转语句breakcontinuegoto

4.3.1 break语句

在switch条件语句和循环语句中都可以使用break语句:

  1. 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
  2. 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。
  3. 当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。
#include 

int main()
{
	int i = 0;
	while (1)
	{
		i++;
		printf("i = %d\n", i);

		if (i == 10)
		{
			break; //跳出while循环
		}
	}

	int flag = 0;
	int m = 0;
	int n = 0;

	for (m = 0; m < 10; m++)
	{
		for (n = 0; n < 10; n++)
		{
			if (n == 5)
			{
				flag = 1;
				break; //跳出for (n = 0; n < 10; n++)
			}
		}

		if (flag == 1)
		{
			break; //跳出for (m = 0; m < 10; m++)
		}
	}

	return 0;
}

4.3.2 continue语句

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 

int main(void)
{
	for (size_t i = 0; i < 5; i++)
	{
		if (i == 3)
		{
			continue; 
		}
		printf("i = %d\n", i);
		printf("============1=========\n");
		printf("============2=========\n");
		printf("=============3========\n");
		printf("============4=========\n");
		printf("=============5========\n");

	}

	system("pause");
	return EXIT_SUCCESS;
}

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第12张图片

在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。

#include

int main()
{
	int sum = 0;           //定义变量sum

	for (int i = 1; i <= 100; i++)
	{
		if (i % 2 == 0)   //如果i是一个偶数,执行if语句中的代码
		{
			continue;      //结束本次循环
		}
		sum += i;          //实现sum和i的累加
	}

	printf("sum = %d\n", sum);

	return 0;
}

4.3.3 goto语句(无条件跳转,尽量少用)

#include 

int main()
{
	goto End; //无条件跳转到End的标识
	printf("aaaaaaaaa\n");

End:
	printf("bbbbbbbb\n");

	return 0;
}

 

逗号运算符:

#include 

// 逗号运算符
int main(void)
{
	int a = 10, b = 20, c = 30;

	int x = (a = 1, c = 5, b = 2);		// 逗号运算符。

	printf("x = %d\n", x);
	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("c = %d\n", c);

	system("pause");
	return 0;
}

黑马32期c++笔记--- 01-c语言基础---03-(运算符、程序结构)_第13张图片

void test04()
{
	int num = 0;
	num = 1, 2, 3, 4;
	printf("num = %d\n", num);//1

	num = (1, 2, 3, 4);
	printf("num = %d\n", num);//4

}

 

你可能感兴趣的:(黑马c++)