南哪 2022-2-if-for-array
if-for-array。在这一章中我们学会了 C 语言编程中最基础也是最重要的两种结构:分支结构以及循环结构
以及一种最重要的写法:数组,这使得我们开始有能力处理大量的数据。
if
语句,先来看一下用法:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
printf("是闰年。\n");
} else if (year % 10 == 0) {
printf("是个整十数的年份。");
} else {
printf("貌似是个年份");
}
当 if
语句中条件成立的时候,便会执行 if
语句之后大括号里面的内容,如果条件不成立,且这个 if
后面有紧接着对应的 else
的时候,便会执行 else
之后大括号里面的内容
if
语句可以进行嵌套,类似上面的写法,来对某个值进行分类
同时,在使用 if-else
语句的时候,某 CQ 希望大家无论语句多少都加上大括号,以避免一些逻辑上的问题,因为有时,if
里面仍然有 if-else
,而如果没有加大括号,编译器便会选择最近的 if
来作为判断条件,这可能会导致一些意料之外的结果
如果你想使用多种判断,你可以使用逻辑与(&&
)还有逻辑或(||
)来连接多个判断。
其它的逻辑判断符号除了相等(==
)特别一些(为了和赋值语句区分开),其它的也不太容易错
提示
if
判断条件中非 0 即真,比如:
if (1)
if (-1)
if (a = 100)
这些if条件之后的语句可以执行
而:
int n = 0;
if (n)
//...
这个 if
之后的语句并不能执行。
for
循环,先来看一下写法:
for (int i = 1; i <= n; ++i) {
printf("*");
}
可以看到,for
循环当中我们用两个分号将其分成了三个部分。
第一个部分是初始化部分,在其中可以直接定义一个变量,也可以直接给某个变量附上初值,也可以不填。
第二个部分是判断部分,只有判断条件成立,for
循环才会继续。
第三个部分是处理部分,在每次循环结束的时候,这里面的操作都会进行一次。
在每次循环结束并完成 for
循环中的处理部分后,for
循环会进行一次判断部分,如果判断不成立,for
循环就会结束。
提示
你可以使用 continue
语句来直接进入下一次循环
你可以使用 break
语句来直接跳出循环
我们还学习了数组。数组这东西好理解啊,我们把它想象成一个有限长的数列,数列中的每一个位置上都存储了一个对应类型的变量,我们需要提前指定这个数组的大小,我们也需要通过指定位置来调用某一个元素。
int a[100005];
for (int i = 1; i <= 100000; ++i)
{
a[i] = i;
}
a 是我们建的数组的名字,我们在后面加上方括号,填上数字来告诉编译器我们想定义一个数组,长度为多少,之后我们就可以通过在方括号里填数组下标的形式来访问某一个特定的元素。
结合 for
循环和数组,我们便能对大量的数据进行处理,统一读入、统一输出。
一些提示:
当同学们使用 for
循环的时候,可以灵活运用内部的三大部分,不一定每一个部分都要死板的填上东西,只要你的思路没有错误,你可以采取更花式的写法,你也可以把 for
循环变成下一次要提到的 while
循环,因为定义和处理部分完全可以不填。
这便是 2-if-for-array 的大致内容,某 CQ 希望同学们在题单的习题中能够练习掌握这些基本结构。
我们在结尾附上位运算的运算法则:
与运算(&):
0 & 0 = 0, 1 & 1 = 1, 0 & 1 = 0, 1 & 0 = 0
或运算(|):
0 | 0 = 0, 1 | 1 = 1, 0 | 1 = 1, 1 | 0 = 1
异或运算(^)
0 ^ 0 = 0, 1 ^ 1 = 0, 1 ^ 0 = 1, 0 ^ 1 = 1
位移运算(<<、>>)
a << x 将 a 左移 x 位,相当于乘上 2 的 x 次方,右移同理
提示
超出存储范围的位数将被抹除,不足的将填上0
注意
位运算的速度比正常运算要快,灵活使用可以提高代码的效率,但是使用时,需要注意运算符的运算顺序,必要的情况下,尽量加上括号
比如,判断一个数是否为偶数,如果使用 %
运算符的话,除法的速度非常的慢,而如果使用 n & 1
来获取 n 二进制下第一位的取值来判断的话,速度会快很多
题单链接: