前言
这一星期终于上课了,这节课老师讲的是for循环、do…while循环和嵌套循环的基础,我们在之前的章节已经基本写过了,这一期来补一下之前我没看到书的内容——优先级与运算符和Bool类型,以及嵌套循环,还有一点点的数组输入输出。
基础循环部分:
运算符与优先级
运算符
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。我们在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;}注意:在输入进对应位置的数组时需要取地址符,因为不加地址符的数组名只表示第一个元素的位置。