循环结构(一)——while语句 与 for语句

这篇文章是关于c语言3大结构中的第3个结构,也就是循环结构。我将会用两篇文章讲完循环结构,这是两篇中的第一篇。

目录

1. while循环

1.1 语法形式

1.2 while循环的流程图

1.3 金典习题:数字逆序

2. do while循环

2.1 语法形式

2.2 do while循环的流程图

2.3 金典习题:计算数字位数

3. for 循环

3.1 语法形式

3.2 for循环的流程图

3.3 for语句的循环次数问题

4.循环的嵌套

5. 三种循环的异同

5.1 最少执行次数:

5. 2 循环语句和分支语句的相似之处


1. while循环

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来我来介绍⼀下 while 语句。

1.1 语法形式

while (表达式)

        语句;

1.2 while循环的流程图

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。 

1.3 金典习题:数字逆序

题目:输⼊⼀个正的整数,逆序打印这个整数的每⼀位

例如:

输⼊:1234,输出:4321

输⼊:521,输出:125

题⽬解析:

1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4

2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。

3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。

参考代码:

int main()
{
	int n = 0;
	scanf("%d", &n);
	while (n)
	{
		int d = n % 10; //d是个位(最小位数)
		n /= 10;		//去掉个位(最小位数)
		printf("%d", d);
	}
	return 0;
}

2. do while循环

在循环语句中 do while 语句的使⽤比较少,它的语法如下:

2.1 语法形式

do

        语句;

while(表达式) ;

 注意:“while(表达式)” 的后面是有一个分号 ; 的。

2.2 do while循环的流程图

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的 结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。

2.3 金典习题:计算数字位数

题目:输⼊⼀个正整数,计算这个整数是⼏位数

例如:

输⼊:1234     输出:4

输⼊:12         输出:2

参考代码:

int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	do
	{
		cnt++;
		n = n / 10;
	} while (n);
	printf("%d\n", cnt);
	return 0;
}

do while会先执行一次再判断, 所以程序必定会让cnt加加一次,而整数至少会有1位,所以cnt的起始值是0。如果用while循环来实现,cnt的初始值就是1了。

3. for 循环

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

3.1 语法形式

for(表达式1; 表达式2; 表达式3)

        语句;

表达式1:⽤于循环变量的初始化; 表达式2 :⽤于循环结束条件的判断 ;表达式3 ⽤于循环变量的调整

3.2 for循环的流程图

⾸先执⾏ 表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。

整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。 

3.3 for语句的循环次数问题

初学者经常会没有认清楚自己写的for循环到底循环了多少次? 自己的循环变量到最后值会变成多少?这里我列出下面这几种情况的循环次数。

tips:如果要循环n次,我比较推荐使用第一个,这与数组下标的排列方式有关。

如果要更保险的方式计算循环次数,而不是靠死记的话,我教你们一个方法。

步骤:

1. 从循环变量的初始值开始记录,(中间太多可省略) ,写到条件n值时,再在后面写上n+1的值就结束。(假如6是n值,则要写到7:0 1 2……6 7)

2. 在初始值、n值、n+1处的下面标注它们“是否执行循环语句”。( i超过条件范围就不会执行)

3. 算出数字的个数cnt:设初始值为i ,则数字个数 cnt = (n + 1) - i + 1 = n - i + 2  

4. 设不执行的个数为t 。因为不执行就不算进循环次数里面,所以循环次数sum = cnt - t

比如我们要计算for(i = 8; i < 100; i++)的循环次数?

这样就能清楚地观察 初始值、有哪几次会执行、i 的最终值 以及执行次数了。

4.循环的嵌套

循环之中还有循环,这就是循环的嵌套

while(...)
{
    for(...)
    {
        ...    
        for(...)
        {
            ...
        }
    }
    ...

}

需要注意的是:外层循环不能使用内层循环才开始创建的变量的。

因为在内层循环才创建的变量,它的生命周期和作用域都只在该内层循环中。离开内层循环后,该变量会被销毁。

5. 三种循环的异同

5.1 最少执行次数:

do while循环是先执行再判断,所以它至少执行1次

while循环 和 for循环 都是先判断再执行,所以它们的至少执行0次

5. 2 循环语句和分支语句的相似之处

循环语句 和 分支语句一样,都是默认只控制一条语句。如果要控制多条语句,需要加上{ }。

补充:如果do while之间有多条语句,且没有用{ }括起来,那么程序会报错且不能运行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值