5.2 循环之 for循环

这篇来说一下for循环

1 简单介绍for循环

本节内容在书6.5章.

for循环"初始化,测试更新组合在一处".(151页).

for( (1)初始化 ; (2)循环继续的条件 ; (4)每次循环的变化 ) {
    (3)循环体
}

循环开始时进行初始化操作(1),判断循环是否继续(2),如果可以继续就执行循环体(3),否则就跳出循环循环体执行完毕后进行变化(4),之后重复(2)->(3)->(4)直到不符合循环条件(2).

(1) -> (2) 是否符合条件? -符合-> (3) -> (4) -> (2) 是否符合条件? -符合-> (3) -> (4).....
                 |                                    |
               退出循环                             退出循环      

就我个人体验来说,当while和for都可以使用时,我是比较喜欢使用for循环的.下面的代码是高斯那个问题的for循环版.

int main(void) {
	int max, result;
	printf("请输入最大值,程序将计算从最大值到1的和值.\n");
	scanf("%d", &max);
	int cache = max;               //此处存储一下用户输入的值.
	for(; max > 0; max--) {        //max已经初始化过,所以第一部分可以简化
		result += max;
	} 
    //因为循环结束for已经变为0,所以这里用之前存储的值cache.
	printf("从1加到%d的和为: %d\n", cache, result);
	return 0;
}

运行结果

请输入最大值,程序将计算从最大值到1的和值.
678
从1加到678的和为: 230181

还可以变成这样:

...
for(; max > 0; ) {
    result += max;
    max--;
} 
...

如果什么都不写只有两个分号,就是一个死循环.

for(;;) { ... }

这样会无限执行循环体内的内容,除非循环体内有跳出循环的语句.

所以理论上for循环中只需书写第二个表达式就可以了,因为这是判断循环是否结束的条件.

2 for循环其他用法

2.1 每次不递增递减1

比如求所有偶数的和

int main(void) {
	int max, result;
	printf("请输入最大值,程序将计算从2到最大值的所有偶数和值.\n");
	scanf("%d", &max);
	int now = 2;
	for(; now <= max; now += 2) {
		result += now;
	} 
	printf("从2加到%d的所有偶数的和为: %d\n", max, result);
	return 0;
}

运行结果:

请输入最大值,程序将计算从2到最大值的所有偶数和值.
999
从2加到999的所有偶数的和为: 249500

2.2 计算连本带利

只需输入本金,利率,时间即可

int main(void) {
	float principal, rate; //本金,利率
	int years;             //时间
	printf("请输入本金:\n");
	scanf("%f", &principal);
	printf("请输入利息:\n");
	scanf("%f", &rate);
	printf("请输入年数:\n");
	scanf("%d", &years);		 
	for(; years > 0; years--) {
		principal = principal + principal * (rate * 1 / 100);
	} 
	printf("到期后可以获得连本带利%.2f元.\n", principal);
	return 0;
}

运行结果

请输入本金:
10000
请输入利息:
4.41
请输入年数:
4
到期后可以获得连本带利11884.16元.

2.3 第一个表达式不一定是给变量赋初始值

其实很好理解,因为第一个条件在整个循环中只在最开始执行一次.下面是用这一点来改写while循环版的密码验证.

int main(void) {
	int password = 0;
	int correct = 456123; 
	for(printf("请输入密码,在输入正确之前不会弹出消息.\n"); correct != password; ){
		scanf("%d", &password);
	}
	printf("登陆成功!\n");
	return 0;
}

运行结果

请输入密码,在输入正确之前不会弹出消息.
123456
456789
456123
登陆成功!

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值