C语言笔记第三天

目录

运算符优先级

if,if else,if else if else

switch

for

while


运算符优先级

#include <stdio.h>

int main()
{
	//逗号运算符
	//逗号运算符优先级最低,10先结合占位符
	printf("%d\n",10, 20, 30);	//10
	//加上括号是一个整体,自左向右最后结果为30
	printf("%d\n", (10, 20, 30));	//30

	//其实运算符优先级很重要,但是写代码可读性在99%的情况下更重要
	//代码虽然是给机器用的,可始终还是给人看的,尽可能的用()使运算顺序一目了然
	//对于运算符优先级我也只是记住() [] . ->在第一梯队
	//*优先级要高于&
	//=只比,高

    //! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
	return 0;
}

本来想着在CSDN上随便找一个图贴上来,然后真就随便找了一个.

突然想带一句话,在这个充满信息的时代,如果没有分辨信息真伪的能力,还不如做一个瞎子!

当然我一点也不权威,我记录这些只是为了做笔记而已,发现错误我会改.如果能帮到其他人我很荣幸,如果我错了,对你产生了误导真的很抱歉.

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

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

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

++

前置自增运算符

++变量名

单目运算符

++

后置自增运算符

变量名++

单目运算符

--

前置自减运算符

--变量名

单目运算符

--

后置自减运算符

变量名--

单目运算符 [4] 

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

左移

变量

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

小于

表达式

双目运算符

小于等于

表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

/=

除后赋值

变量/=表达式

*=

乘后赋值

变量*=表达式

%=

取模后赋值

变量%=表达式

+=

加后赋值

变量+=表达式

-=

减后赋值

变量-=表达式

左移后赋值

变量

>>=

右移后赋值

变量>>=表达式

&=

按位与后赋值

变量&=表达式

^=

按位异或后赋值

变量^=表达式

|=

按位或后赋值

变量|=表达式

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

if,if else,if else if else

#include <stdio.h>

int main()
{
	//if语句
	//当同时只需要一种结果时 if
	int num = 3;
	//哦!对了在C语言中一个=表示赋值,两个==表示逻辑,这个很重要,我刚学时也会在这里犯错
	//现在也经常手误,写错,可以写成 0 == num % 2 这样写如果手误写成 0 = num % 2 编译器会不通过 因为不能给常量赋值
	//条件不成立,会直接跳过这条语句,大括号很重要别看别人不写你也不写,代码的可读性在99%的情况下都是第一位
	if (num % 2 == 0) 
	{
		printf("num %% 2 == 0\n");	//不会执行
	}

	//当同时需要两种结果二选一的时候 if else
	if (num % 2 == 0)
	{
		printf("num %% 2 == 0\n");	//不会执行
	}
	else
	{
		printf("num %% 2 != 0\n");	//会执行这条语句
	}

	//当同时需要多种结果多选一时 if else if else
	int num2 = 5;
	if (num2 % 3 == 0)
	{
		printf("num2 %% 3 == 0\n");	//不会执行
	}
	else if(num2 % 3 == 1)
	{
		printf("num2 %% 3 == 1\n");	//不会执行
	}
	else if (num2 % 3 == 2)			//if可以不写,但是如果只有这三种情况下还是写上为好,还是那句话代码是给人看的
	{
		printf("num2 %% 3 == 2\n");	//会执行这条语句
	}

	//当不同时需要多种结果多选多时 if
	//下面三条语句都会执行
	int num3 = 6;
	if (num3 % 3 == 0)
	{
		printf("num3 %% 3 == 0\n");
	}

	if (num3 % 2 == 0)
	{
		printf("num3 %% 2 == 0\n");
	}

	if ((num3 % 3 == 0) && (num3 % 2 == 0))
	{
		printf("num3 %% 3 == 0,num3 %% 2 == 0\n");
	}

	return 0;
}

switch

#include <stdio.h>

int main1()
{
	//switch
	//switch可以一选一 一选多 多选一 多选多
	//switch的参数必须时整型或字符型(其实字符型也是整型,个人一直是这么认为的)
	//不能是浮点型,字符串
	int select = 0;
	printf("enter select:");
	scanf_s("%d", &select);

	//一选一
	switch (select)
	{
		//输入1执行case 1
	case 1:
	{	//这个大括号可加可不加,根据编译器决定,还是加上为好,少踩坑
		printf("1\n");
		//break必须加否会继续向下执行每条语句,直到遇到break或switch结束
		//也就可以多选多一选多
		break;
	}
	//输入2执行case 2
	case 2:
	{
		printf("2\n");
		break;
	}
	//输入3执行case 3
	case 3:
	{
		printf("3\n");
		break;
	}
	//其他输入执行default
	default:
		printf("other\n");
		break;
	}

	return 0;
}

int main2()
{
	int select = 0;
	printf("enter select:");
	scanf_s("%d", &select);

	//一选多
	switch (select)
	{
		//输入1执行case 1
	case 1:
	{
		printf("1\n");	//此处没有break
	}
	//输入1执行case 2
	case 2:
	{
		printf("2\n");
		break;
	}
	//输入3执行case 3
	case 3:
	{
		printf("3\n");
		break;
	}
	//其他输入执行default
	default:
		printf("other\n");
		break;
	}

	return 0;
}

int main()
{
	char select = 0;
	printf("enter select:");
	scanf_s("%c", &select, 1);

	//多选一 多选多
	switch (select)
	{
	//输入a或A 执行printf("a,A\n");
	case 'a':
	case 'A':
	{
		printf("a,A\n");
		break;
	}
	//输入cC执行printf("c,C\n");和printf("B,b\n");
	case 'c':
	case 'C':
	{
		printf("c,C\n");
	}
	case 'B':
	case 'b':
	{
		printf("B,b\n");
		break;
	}
	default:
		printf("other\n");
		break;
	}

	return 0;
}

for

#include <stdio.h>

int main(int argc,char * argv[])
{
	//for 其实没啥可说的
	/*for (初始条件;循环条件;循环步数)
	* {
	*		循环语句;
	* }*/
	//执行步骤
	//初始条件->循环条件->循环语句->循环步数->循环条件->循环语句
	//初始条件执行一次,然后判断循环条件符合执行循环语句,然后增加步数,判断循环条件.....
	//那个术语不是这些,但是无关紧要.....
	//前置++比后置++效率高,因为后置++会多执行指令(基本然并卵)
	int sum = 0;
	for (int i = 1; i <= 100; ++i)
	{
		sum += i;
	}
	printf("sum = %d\n", sum);	//5050

	//continue结束当前循环,执行下次循环
	sum = 0;
	for (int i = 1; i <= 100; ++i)
	{
		//如果i为1会结束当前循环执行下次循环,本次循环不会执行sum += i;
		if (i == 1)	
		{
			continue;
		}
		sum += i;
	}
	printf("sum = %d\n", sum);	//5049

	//break跳出循环
	sum = 0;
	for (int i = 0; i <= 100; ++i)
	{
		break;	//直接跳出循环
		sum += i;
	}
	printf("sum = %d\n", sum);	//0

	return 0;
}

while

#include <stdio.h>

int main(int argc,char * argv[])
{
	//while
	int sum = 0;
	int i = 1;
	//任何循环都要注意退出条件
	//执行顺序就是自上向下
fly:while (i <= 100)
	{	
		sum += i;
		++i;
	}
	printf("sum = %d\n", sum);

	//do while
	//会先执行一次循环语句,在判断
	i = 1;
	do
	{
		printf("循环条件不满足,也会执行一次\n");
	} while (i != 1);

	//goto(不建议使用)
	goto fly;	//每次执行到这,就会跳转到fly位置,这个程序会死循环

	return 0;
}
//还有一个需要说一下,十六进制输出的时候没有正负之分,他输出的是补码,也就是计算机存储的形式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值