前言

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

基础循环部分:

【C语言学习之路】第六节课——循环、左右值以及typedef关键字


运算符与优先级

运算符

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

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

关系运算符

下表显示了 C 语言支持的所有关系运算符。假设变量 A 和 B 的为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;
}

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

这里的一切都有始有终,却能容纳所有的不期而遇和久别重逢。
最后更新于 2024-01-14