第9课 for循环


前言

循环结构用于在程序中控制某些指令重复执行,是计算机程序中使用最多的一种控制结构,可以解决实际应用中需要重复处理的问题。
譬如要统计全班同学某一课程某次考试成绩的平均分,局需要先把每个同学该课程的考试分数累加起来,这就需要用到循环结构。


一、C++常用的3种循环控制语句

  • for循环
  • while循环
  • do-while循环
    本课内容只介绍第一种for循环,其余的将在后续课程中介绍。

二、for循环

三、for循环的4个要素

  • 循环初值
  • 循环终止条件
  • 是循环趋于结束的语句(即改变循环初值的语句)
  • 循环体

四、课后练习

1. 7的倍数问题

计算1-100中是7的倍数的数的和。
关键代码如下:

int sum = 0;
for(int i=1; i<=100; i++) {
    if(n%7==0) sum += n;
}
cout << sum << endl;

其实上面的代码可以优化如下。

int sum = 0;
for(int i=7; i<=100; i+=7) {
    sum += n;
}
cout << sum << endl;

2. 神奇的算式问题(1)

已知一个算式abc+bcc=458,其中abc和bcc是两个三位整数,求a、b、c分别是多少?
代码如下:

#include <iostream>
using namespace std;

int main() {
	for(int a=1; a<=9; a++) {
		for(int b=0; b<=9; b++) {
			for(int c=0; c<=9; c++) {
				if((100*a+10*b+c)+(100*b+10*c+c)==458)
					cout << a << ' ' << b << ' ' << c << endl;
			}
		}
	}
    return 0;
}

运行程序输出结果为
3 1 4

3. 神奇的算式问题(2)

试编程求出a、b、c、d的值各为多少时,下面的算式成立。
竖式求数

#include <iostream>
using namespace std;

// abcd multiply 9 equal bcda
// abcd*9=bcda
int main() {
	for(int b=0; b<=9; b++) {
		for(int c=0; c<=9; c++) {
			for(int d=0; d<=9; d++) {
				if((1000+100*b+10*c+d)*9==(1000*d+100*c+10*b+1))
					cout << 1 << ' ' << b << ' ' << c << ' ' << d << endl;
			}
		}
	}
    return 0;
}

运行程序,输出为
1 0 8 9

其实本题完全可以使用数学推导方法求出结果。
首先a、b、c、d各不相同;
由竖式可以知a必然是1,否则会有进位。
当a=1时,则d必然为9,只有99=81;
b要保持不往前进位才行,
b如果要保持不往前进位,则b=0或b=1;
若b=1,则有
c
9+8=1,即b=1时,c9同样不能有进位,此时c9+8=1不成立,
所以b=0;
所以c*9+8=0,此时,c=8.
所以a=1, b=0, c=8, d=9.

4. 神奇的算式问题(3)

下面的乘法竖式中,每个汉字代表一个数字,不同的汉字代表不同的数字,请编程求出每个汉字代表的数字是多少。
学习再学习

#include <iostream>
using namespace std;

// abcab multiply a equal dddddd
// abcab*a=dddddd
int main() {
	for(int a=1; a<=9; a++) {
		for(int b=0; b<=9; b++) {
			for(int c=0; c<=9; c++) {
				for(int d=0; d<=9; d++) {
					if((10000*a+1000*b+100*c+10*a+b)*a==(100000*d+10000*d+1000*d+100*d+10*d+d))
						cout << a << ' ' << b << ' ' << c << ' ' << d << endl;
				}
			}
		}
	}
    return 0;
}

运行程序,输出为
3 7 0 1
即=37037*3=111111

5. 神奇的算式问题(4)

试编程求出算式中的被除数和除数。

编程求出算式中的被除数和除数
提示与分析

设x是被除数,y是除数,则x的取值范围是[1000, 9999],y的取值范围是[10, 99]。枚举x和y,如果x/y809, 并且x%y1,则x和y就有可能是我们想要的解。但程序运行过程中实际会输出许多无效的答案,所以还需要再仔细观察算式,找出更多限制条件,例如9*y>=100等等。
据此分析,给出代码如下

#include<iostream>
using namespace std;

int main() {
	int x, y;
	for(x=1000; x<10000; x++) {
		for(y=10; y<100; y++) {
			if(8*y<100 && 9*y>=100 && x/y==809 && x%y==1)
				cout << "x = " << x << "  y = " << y << endl;
		}
	}

	return 0;
}

运行代码,输出
x = 9709 y = 12


总结

使用循环控制结构可以解决一些按一定规则重复执行的问题而无须重复书写代码,这是程序设计中最能发挥计算机特长的程序结构之一。
本课内容对for循环控制结构通过一些案例进行了结合介绍,读者在学习的时候要与枚举算法,即穷举算法结合起来思考问题并解决问题。

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值