一、如何理解循环结果?
循环如字面的意思,反复地连续做某件事,而完成这某件事可以说是循环体通俗的说是循环的目的,为什么要做这个循环,取决你的需求,如图一
人一生中会做很多重复的事情,做重复的事情大体有三类,重复的衰减、重复的原地踏步、重复的继续成长,例如,对于人拥有的生命重复的一年一年减少,有的人每天干几大碗饭体重却还是原地踏步,每天学习一点并能掌握的继续成长,我们如今每天所做的事情不就是在减少、原地踏步、继续成长中度过吗?如每天循环着上学,一节又一节的课,一日三餐,循环着做某件事(一局又一局的游戏或来回跑的事情)如图二
二、while的解析与应用
while语句与if语句很相似,模样是
if(表达式)
{
语句;
}
while(表达式)
{
语句;
}
大括号里面可以是单条语句,也可以是多条语句
if语句与while语句有着相同的需要判断后面小括号里的表达式,但if语句判断为真完之后只是运行一次,然后跳出if语句不再运行这个if语句
而while循环是判断表达式为真之后运行里面的语句,它会再次返回判断表达式是否为真再决定是否执行while循环体里面的语句。如图所示
1. 判断表达式为一个整数值
如今你已知到循环过程了,让我们来尝试判断表达式为一个数值的时候的情况吧==(0为假,非0为真)==
int main()
{
while (0)
{
printf("再见\n");
}
while (5)
{
printf("你好\n");
}
return 0;
}
如图所示,代码并没有进入while(0),反而一直在循环while(5),我们可以看出,0为假,判断过后并没有进入“再见”的打印;5为真,判断之后进入循环里面打印“你好”,它的过程是打印一次之后再回来判断表达式,看到5还是真就再次进入,因为没有条件结束循环,所以就会一直打印,也被称为死循环。
2. 判断表达式为变量与逻辑的结合
一个数值为判断表达式通常不是我们想要的,毕竟人总不会一直徘徊一件事,总会在时间消磨下有进步或者退步,好了,如今我们来看一下怎么进步与退步
int main()
{
int num = 1;
while (num <= 10) //增加
{
printf("%d ",num);
num = num + 1;
}
printf("\n");
num = 10;
while (num > 0) //减少
{
printf("%d ",num);
num = num - 1;
}
return 0;
}
第一个while,num初始值为1,判断是num小于等于(<=)10,打印数值是从1到10,打印之后我再让num加1,我们可以依次看到数值的增大。
第二个while,num初始值重新赋值为10,判断是num大于(>)0,那么就是说我到0的时候它就不大于0了,如此,打印数值时可以看到是从10到0,打印之后再让num减1,慢慢的数值就减小,我们可以看到数值的减小。
3. 玩高位与低位互换
直接上代码和图片,不废话
int main()
{
int num = 0;
int over = 0;
printf("输入:");
scanf("%d", &num);
while (num != 0)
{
over = over * 10 + num % 10;
num = num / 10;
}
printf("输出:%d\n", over);
return 0;
}
整个过程是输入一个num,判断这个num是否不等于(!=)0,不等于0就继续运行里面的语句,里面的过程是取余(求模)和取整(两个整数除法最后得到整数)。
取余10结果就是个数那位(例如,在数学上123/10应该等于12······3得12余3,而123%10就是得到后面那个余数);除以10结果就是把个位砍了(例如123/10等于12······3得12余3,而最后结果就取那个商就行了,所以理应是123/10=12)
三、for的解析与应用
for循环的功能很强大,也比较便捷,它是把赋值、判断、增值(变化)集合在一个地方的,如下
for (表达式1;表达式2;表达式3)
{
语句;
}
表达式1可以是赋值(例如i = 0;),也可以是定义初始化(int a = 0;注意在表达式1定义的变量只能在for语句内用),也可以是空语句(什么语句都不放为空)。
表达式2可以是判断表达式,可以是一个数值(非0,一般不会这样),也可以是空语句,(表达式2是数值或者空语句都会造成死循环),如果表达式2为0(假)就不会进入循环执行语句。
表达式3什么都可以放,但通常是放数学运算、自增、自减这种,因为这样可以变动变量的值,也可以是一条空语句(再次说明什么语句都不放为空)。
花括号内的语句可以是多条语句,当只有一条语句时可以去掉花括号,但一般建议一直带着花括号因为这样可以更清晰的看清楚代码结构。
1. 正常使用for
int main()
{
for (int a = 1;a <= 10;a++)
{
printf("%d ",a);
}
return 0;
}
上面这样写 a 只能在for循环里面用
也可以像下面这样写,
下面这样写的好处是 a 可以在整个主函数里面用
int main()
{
int a;//未初始化,可以初始化为0
for ( a = 1;a <= 10;a++)
{
printf("%d ",a);
}
return 0;
}
两个效果都一样,如图所示
以上是在不同地方定义a,根据自己需求来定义变量,毕竟在不同的局部内名字相同时有使用的范围。
2. for循环实现打印三角
不废话,直接上
int main()
{
int a = 0;
scanf("%d", &a);
for (int i = 0; i < a; i++)//运行a次,设a = 5;
{
for (int k = 0; k < a - i-1; k++) //关系是从第0行开始,第0行打印4个空格,第1行打印3个空格
{ //i从0开始增,可以推算第0行是5-0-1(这时i为0,打印4个空格)
printf(" "); //第1行是5-1-1(这时i为1,打印3个空格)
}
for (int j = 0; j < i * 2 + 1; j++) //第0行为1个*,第1行为3个*,刚好是i*2+1
{
printf("*");
}
printf("\n");
}
return 0;
}
解释不通,杨辉三角,可以尝试去看视频。
四、do…while的解析与应用
do…while语句,使用得频率相对于while和for是稍微有点少,它的使用方法是先用了一次再判断
基本形式如下:
do
{
语句;
}while(判断表达式)
以顺序来说,第一次是先进去do执行一次花括号里面的语句(可以是多条语句),然后再判断while里面的表达式是否为真,如果为真就返回继续循环,如果为假就退出do…while执行接下来后面的语句,所以说至少执行了一次循环,其他状况基本和while一样。
1. 条件不成立至少运行一次
int main()
{
int a = 0;
do
{
printf("%d\n", a);
} while (a > 0);
return 0;
}
2. 使用do…while判断有多少位数
int main()
{
int a = 0;
int num = 0;
printf("请输入一个整数:");
scanf("%d", &a);
do
{
num++;
a = a / 10;
} while (a > 0);
printf("位数:%d\n", num);
return 0;
}
以上代码对比于应用while与一个好处,就是哪怕输入的是0,也能算得出是有一位数
五、break与continue在循环中应用
1. break和continue的理解
break:break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
continue:continue的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和while 循环中有所差异的。
2. break和continue在while和for熟悉使用
1. break
break在三个不同的循环几乎是同样的效果,下面展示:
int main()
{
int a = 0;
printf("while:\n");
while (a <= 10)
{
if (a == 5)
{
break;
}
printf("%d ", a);
a++;
}
printf("\nagain for:\n");
a = 0;
for (; a <= 10; a++)
{
if (a == 5)
{
break;
}
printf("%d ", a);
}
return 0;
}
2.continue
在while循环中,增值语句的位置会有不同的效果,下面展示放在后面:
int main()
{
int a = 0;
printf("for:\n");
for (; a <= 10; a++)
{
if (a == 5)
{
continue;
}
printf("%d ", a);
}
printf("\nagain while:\n");
a = 0;
while (a <= 10)
{
if (a == 5)
{
continue;
}
printf("%d ", a);
a++;
}
return 0;
}
我们能直观的看到for循环内,当a==5时并没有打印5,因为continue特性是遇到continue就不再执行下面的语句了,所以它返回到for的表达式3里面了,继续了下一次的循环。
再看while循环,用continue特性来解释,它返回了while小括号里面的判断表达式,而5还是小于10那a存的还是5,再下次还是进入if语句里面,再次遇到continue,周而复始,它并没有执行增值语句a++;所以它的值是不变的。
很多人认为为什么不放在if判断前面呢,可以,只要适当调整是可以实现的,但如果a++放在了printf前面,那么第一次打印的就没有0而是1了。
对比continue在while与for里面,个人感觉for会更加方便,因为我并不用调整增值语句的位置。
六、总言
循环语句的适当使用才能让代码写的方便,看得直观,人生就是由顺序走年纪,选择改方向,循环去提高,代码也是以顺序、选择、循环去支撑基础的,人生如戏,戏如人生啊
祝你好运