1717 字
9 分钟
【C语言学习之路】第八节课——优先级与运算符、_Bool类型以及嵌套循环
2021-10-20
2024-01-13
c

前言#

这一星期终于上课了,这节课老师讲的是for循环、do…while循环和嵌套循环的基础,我们在之前的章节已经基本写过了,这一期来补一下之前我没看到书的内容——优先级与运算符和Bool类型,以及嵌套循环,还有一点点的数组输入输出。

基础循环部分:

https://hoyue.fun/myc_6.html


运算符与优先级#

运算符#

运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。我们在C中一般分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、杂项运算符等。

我们在这里和书中同步,介绍关系运算符、逻辑运算符、其他赋值运算符和逗号运算符。

关系运算符#

下表显示了 C 语言支持的所有关系运算符。假设变量 AB 的为int类型,且A=10;B=20,则:

运算符描述例子
==检查两个操作数的值是否相等,如果相等则条件为真。(A == B) 为假。
!=检查两个操作数的值是否相等,如果不相等则条件为真。(A != B) 为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A > B) 为假。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A < B) 为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A >= B) 为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A <= B) 为真。

这个很简单了,不过要注意的是: 相等是==;赋值是=;!=就是≠的意思。

逻辑运算符#

下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A || B) 为真。
!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

注意: 使用时要和其他语句中间有空格 ,例如:

if(a>=1 && a<=100)

表示判断a是不是>=1且<=100的,语句中间用空格隔开。

其他赋值运算符#

下表列出了一些 C 语言支持的其他类型赋值运算符:

运算符描述实例
+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数C += A 相当于 C = C + A
-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数C -= A 相当于 C = C - A
*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数C *= A 相当于 C = C * A
/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数C /= A 相当于 C = C / A
%=求模且赋值运算符,求两个操作数的模赋值给左边操作数C %= A 相当于 C = C % A

这个也没什么说的,就和++;—;一样方便运算的表达而已。


逗号运算符#

逗号运算符在一个表达式的位置使用多个表示式,顺序是从左到右。一般用于多个变量定义,for循环表达式等。

例如:

//变量定义
int a=1,b=2;

又例如:

//for循环表达
int a,b;
for(a=1,b=1;a+b<100;){}

用途:可以让简化行数。确定:检查困难。


优先级#

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。

类别运算符结合性
后缀() [] -> . ++ - -从左到右
一元+ - ! ~ ++ - - (type)* & sizeof从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左到右
位与 AND&从左到右
位异或 XOR^从左到右
位或 OR|从左到右
逻辑与 AND&&从左到右
逻辑或 OR||从左到右
条件?:从右到左
赋值= += -= *= /= %= >>= <<= &= ^= |=从右到左
逗号,从左到右

_Bool类型#

在C99中定义了bool类型,bool类型只包括有1(true)和0(false),即真和假。因为其只有两个值,我们可以定义来做标记变量。 默认_bool定义的值为1即true。

定义bool类型:第一种方法:

_Bool s;

这个时候定义的变量s,默认为1(true)。s只能是true或false。

第二种方法:在C99中还定义了:stdbool.h这个头文件,里面更加贴近C++做了bool的定义,因此我们在添加头文件stdbool.h后,可以用如下定义:

#include<stdbool.h>
int main()
{
bool s=true;
return 0;
}

不仅定义了bool类型,还定义了关键字true和false。当然我们输入1和0也是一样的。

注意:不是所有的编译器都可以编译bool类型的,C99以前的标准无法编译通过bool类型。


嵌套循环#

C 语言允许在一个循环内使用另一个循环,也可以在任何类型的循环内嵌套其他任何类型的循环。下面演示几个循环的嵌套。

For循环#

for (initialization; condition; increment/decrement)
{
statement(s);
for (initialization; condition; increment/decrement)
{
statement(s);
... ... ...
}
... ... ...
}

其流程大概是:

WHILE循环#

while (condition1)
{
statement(s);
while (condition2)
{
statement(s);
... ... ...
}
... ... ...
}

其流程图:

DO…WHILE循环#

do
{
statement(s);
do
{
statement(s);
... ... ...
}while (condition2);
... ... ...
}while (condition1);

其流程图:


数组输入输出#

新的数组输入输出方式,其实之前也有写过,但是我们还是写一下for循环下的数组输入输出。

输入:

#include<stdio.h>
int main()
{
int a[81]={0};
for(int i=1;i<=80;i++)//输入80个数
scanf("%d",&a[i]);//每次输入一个放到a数组的对应位置
return 0;
}

同理的输出:

#include<stdio.h>
int main()
{
int a[81]={0};
for(int i=1;i<=80;i++)//输入80个数
scanf("%d",&a[i]);//每次输入一个放到a数组的对应位置
for(int i=1;i<=80;i++)
printf("%d ",a[i]);//每次输出一个对应位置的数到终端上
return 0;
}

注意:在输入进对应位置的数组时需要取地址符,因为不加地址符的数组名只表示第一个元素的位置。

【C语言学习之路】第八节课——优先级与运算符、_Bool类型以及嵌套循环
https://hoyue.fun/myc_8.html
作者
Hoyue
发布于
2021-10-20
最后更新于
2024-01-13
许可协议
CC BY-NC-SA 4.0
评论