循环结构
while语句
while(表达式){代码块;
}do{代码块;
}while(表达式)
while语句分为do-while和while两种,区别在于循环之前是不是先执行一次循环的内容,可以类似于++i和i++的关系,本质上来讲是相同的。当表达式为真时,则会执行一次代码块,然后继续进行循环条件判断,重复此过程,一直到表达式为假,则跳出循环
在循环读入的写法有频繁的使用while语句,也可以看出while语句的适用场景,就是适合没有确切循环次数的循环
使用while循环实现程序,输出1--100;#include<stdio.h>
int main(){int i = 1;do{printf("%d ", i);if(i % 10 == 0){printf("\n")}}while(i++ < 100)
}
FOR语句
for(初始化;循环条件;执行后操作){代码块;
}
for循环相较于while循环最大的区别就是,他是有明确的循环次数的循环语句,可以注意到for循环中的有三条控制语句,其中可以省略任意数量的语句,都可使程序运行。
适用for循环实现程序,输出1--100;#include<stdio.h>
int main(){for(int i = 0; i <= 100; i++){printf("%d ",i);if(i % 10 == 0){printf("\n");}}
}
break和continue
break:程序运行到此行代码时终止循环;
continue:程序运行到慈航代码时跳过这次循环,进行下一次循环判断
短路原则
在刚才我们提到了i++与++i,我们用代码简单演示一下,二者的区别。
可以看到不论i++还是++i都是进行了加1的操作,但区别是i++是先进行对变量的访问,然后才是进行加1操作,而++i则是先进行加1操作,之后进行变量访问。
了解二者区别之后我们再看下面的判断语句与输出情况
按照正常情况下应该是if语句中在条件判断先进行判断,而后因为a是先访问变量是0,而后加1,b是先加1然后访问变量,a = 0, b = 1,所以应该打印F,然后a = 1, b = 1;
但是我们可以看到输出结果与我们预想的结果有出入,b打印出了0,也就是说++b的操作并没有被运行。这就是短路原则。我们再把逻辑"与"换成“逻辑非”看一下运行结果
可以看到这一次依旧是没有执行++b的操作
短路原则
当用逻辑与链接多个表达式,若当前判断已经可以确定结果,则不再运行后面的代码
逻辑与:当出现假的情况出现,则不运行后面的代码
逻辑非:当出现真的情况出现,则不运行后面的代码
短路原则一个简单的应用就是可以解决输出格式问题,我们在一些网站刷题的时候,多个输出的时候需要用空格间隔,但是最后一个输出后面不能有空格,这种情况我们往往会用特判的方式来解决。现在我们可以用短路原则来解决这个问题。在代码,为了观察方便我把空格换成了逗号。
判断奇数个数
那么根据以上内容简单写一个程序,用来判断奇数个数
思路
根据我们输入的整数,让电脑随机生成指定个数的随机数(1~100)然后,然后对每一个随机数进行逐一判断,最后返回奇数的个数。最后应输出生成的随机数中间应该用空格隔开,然后再打印出判断结果即随机数中奇数的数量
首先是随机数,我们需要引入一个头文件<stdlib.h>里面的rand()函数可以生成一个随机数,但是它是一个伪随机数,所以我们还需要一个种子,引入一个<time.h>,以时间作为种子,这样可以保证它不断的变化。生成一个1~100的随机数,则对rand()对100取余即可
然后我们可以用if来进行特判,定义一个count变量接收,如果为奇数则加1,然后我们可以优化一下,用当前随机数ans&1来代替if的特判语句。