生活中很多操作需要重复进行,比如统计50个数据是否过关等等。如果找到一个方法统计完一个数据后,再用这个方法一直去重复49次,过程显得非常冗长,在这种情况下,我们就可以引入一个新方法:循环结构 来解决重复的问题。
1. while 循环
while循环会先判断括号内的表达式,如果成立则进行下一步。其实while的用法和if相似,只是在if判断的基础上可以通过i++从而引入一个循环的判断
可以看出其实是等效的,下面是while的运行流程图
我们可以用这种方法判断一个数字的位数
注意,记得给变量赋值,而且需要给到一个停下的条件,不能让循环无限的进行下去
2. for 循环
for循环的语句更简单,也更常用。for循环的一般形式是for(表达式1;表达式2;表达式3),表达式1一般是变量的定义,表达式2是判断条件,表达式3是循环的调整,比如我们输入100内3的倍数
相对与用其他的方法更简单明了,当然我用一些处理来使得数据看起来更舒服
3. do while 循环
do while循环也是循环的一种,只不过他一般先进行程序,再判断循环条件是否成立
当然,这个方式的好处是,可以先执行程序,避免省略一些情况
4. while 循环和do while 循环的比较
while循环是先判断再执行, do while先执行后判断。do while的不同体现在
在这里区别就很明显了,我要求数字要大于10才能打印haha,我输入了6当然不满足条件,while在判断的时候就发现这个命题为假,没有执行,而do while循环先不假思索得打印了haha,然后判断的时候才发现不成立。
5. 循环嵌套
循环嵌套的意思是在循环里面再添加一个循环,比如我打印数组的时候就需要用到这个
6. break和continue的运用
break可以帮助我们终止进程,continue可以帮助我们跳过下一个进程。直接举例
如果我们引入break
我们就可以在中间i为6的时候终止循环
如果换成continue呢
则会变成跳过打印6的情况,这就是break和continue的运用
7. 素数判断
如果我们想求100到200内的素数,我们该怎么办呢
这时候我们就会想到素数的定义是没有因数,即不能为两个非0或者1的数相乘得到。那么我们可以通过一个循环,一个一个尝试,直到找到一个特例不符合素数的条件然后判断他不是素数
#include <stdio.h>
int main()
{
int a = 0;
for (a=100;a<=200;a++)
{
int b = 0;
for(b=2;b<a;b++)
{
if (a%b==0)
{
printf("%d\t",a);
break;
}
}
}
return 0;
}
通过这种方法我们可以找出所有的非素数
当然我们可以改进一下,如下
#include <stdio.h>
int main()
{
int a = 0;
for (a=100;a<=200;a++)
{
int c = 1;
int b = 0;
for(b=2;b<a;b++)
{
if (a%b==0)
{
c = 0;
break;
}
}
if (c==1)
{
printf("%d\t",a);
}
}
return 0;
}
当我们进行这样的操作后,我开始假设一个变量c为1,如果我判断出这个数字为非素数,那我改变c为0,这样我在后面满足c=1的前提时就不会去打印非素数,剩下的全都是素数。
还有一个优化的方法,比如一个数为16,他为2*8 4*4 8*2,当我们判断的数大于4时就会产生重复,所以我们可以认为如果一个数不能被他的平方根整除,就是素数
#include <stdio.h>
#include <math.h>
int main()
{
int a = 0;
for (a=100;a<=200;a++)
{
int c = 1;
int b = 0;
int d = 0;
d = sqrt(a);
for(b=2;b<d;b++)
{
if (a%b==0)
{
c = 0;
break;
}
}
if (c==1)
{
printf("%d\t",a);
}
}
return 0;
}
这样处理完会减少程序的循环与判断次数,让程序运行更快
8. goto语句
goto语句是一种更迅速跳出程序的方法。如果我们位于一个复杂的嵌套循环,一个break只能暂停当前程序,如果真的很复杂我们就需要一堆break,这样我们就可以引入goto语句,可以一步就跳转到外面
一旦我们判断完i为12,直接跳转到goto语句,更快更精确。
9. 迭代法
如果我们已知一个迭代公式,那么我们可以通过迭代的方法一直循环缩小差距,直到将误差降到目标值。
比如我们求平方根公式,他的迭代近似公式为X(n+1)=0.5*(Xn+a/Xn)
#include <stdio.h>
#include <math.h>
int main()
{
float a = 0;
float X0 = 0;
float X1 = 0;
printf("输入数字:\n");
scanf("%f",&a) ;
X0=a/2;
X1=(X0+a/X0)/2;
do
{
X0=X1;
X1=(X0+a/X0)/2;
}
while (fabs(X0-X1)>=1e-5);
printf("根号%5.2f的结果是%8.5f\n",a,X1);
return 0;
}
通过这个方法,我们得到
对照一下sqrt函数,通过不断的迭代,最终也能实现sqrt函数的效果。
好了,文章到这边基本上介绍完了常量与变量,作者制作不易,希望能收获你的喜欢和关注