【C++】学习日志——循环结构设计

第四章 循环结构设计

4.1 计数循环

for 语句

for基本语法

for语句常用于某一组语句常用来重复执行
n次。

for (表达式1; 表达式2; 表达式3){
	//执行循环语句
}
  • 内部的i变量仅限于循环内使用,在循环外运用需要定义变量。
  • 可理解为:for(表达式1;表达式2; 表达式3) {执行循环语句}
  • for( ; ; )表示无限循环。
  • 表达式1里面可以用逗号分隔,表示并列语句。
  • 表达式2一般时关系表达式或是逻辑、算数表达式,死循环只能用break或者Ctrl+C。
    例程:求100个数的最大值、最小值、平均值
  • 表达式3也可以时任何表达式,在循环周期结束后对循环变量的修正。
#include <iostream>
using namespace std;

int main(){
	int a = 0, sum = 0, min = 0, max = 100;
	for (i = 0; i < 100; ++i){
		cout << "请输入一个数" ;
		cin >> a;      sum += a;
			if (a > max)	max = a;
			if (a < min)	min = a;
		}	
	cout << "max value" << max << endl;
	cout << "min value" << min << endl;
	cout << "average value" << sum / 100 << endl;
	}
	return 0;
}

tips:程序设计时应尽量用循环代替重复的语句,使程序变得简洁美观

for循环的嵌套

最内层的循环全部结束以后,才算完成外层循环的一次循环周期

#include <iostream>
using namespace std;

int main(){
	int i, j;
	for (i = 1; i <= 9; ++i){
		cout << endl;
		for (j = 1; j <= 9; ++j){
			cout << i*j << "\t" ;
		}
	}
	return 0;
}

while语句

用于循环次数不固定的循环

while语句语法
while (表达式){
 //语句 
 }
  • 表达式为true,就会执行循环,表达式内经常会进行变量的判断
  • 摘自百度百科,转义字符表
    百度百科——转义字符

例程:

int main(){
	double ex, x, p; //存储变量
	int i; //循环变量
	cout<< "请输入x的值:" ; cin >> x;
	ex = 0; p = 1; i = 0;
	
	while (p > 1e-6){//科学计数法0.000001
		ex += p;
		++i;
		p = p* x / i; //阶乘的递推
	}
	 cout << "ex = " << ex << endl;
 return 0;
}

do…while语句

do…while语句语法
do{
	//循环的语句(至少执行一次)
}  while (表达式);
  • 相比while,循环语句先于判断条件
循环的中途退出

当读入数值直到一个标志值时,中途退出循环

  • break语句:跳出循环
  • continue语句:跳出当前循环周期,直接进入下一个循环周期

一些拓展

循环是简单的代码重用,未来在面向对象和类编程有用

枚举法

对是可能解的所有候选按照一定顺序进行逐一枚举和检验
例程:四大湖问题:

#include <iostream>
using namespace std;

int main(){
	int a, b, c, d; bool flag = false;//flag为控制标志位
	for(a = 1; a <= 4; ++a){
		for(b = 1; b <= 4; ++b){
		if(a == b) continue;
		else
			for(c = 1; c <= 4; ++c){
			if(c == a || c == b) continue;
			else{
				d = 10 - a - b - c;
				if((a == 1) + (b == 4) + (c == 3) == 1 && (b == 1)+ (a == 4) + (c == 2) + (d == 3) == 1 && (b == 4) + (a == 3) == 1 && (c == 1) + (d == 4) + (a == 3) == 1)//满足所有的条件
				cout << a << b << c << d << endl;
				flag = 1;		break;
			}
			if(flag) break;}
		if(flag) break;}
	if(flag) break;}
	return 0;
}
贪婪法

将问题分为各类小问题,得到多个局部最优解,最后得到全局最优解。
例程:硬币找零问题

#define ONEFEN 1
#define TWOFEN 2
#define FIVEFEN 5
#define ONEJIAO 10

int main(){
	int onefen = 0, twofen = 0, fivefen = 0, onejiao = 0, money;
	cin >> money;
	//遍历扣除相应的硬币数,得到各个硬币的局部最优解
	while(money >= ONEJIAO){onejiao++; money = money - ONEJIAO}
	while(money >= FIVEFEN){fivefen++; money = money - FIVEFEN}
	while(money >= TWOFEN){twofen++; money = money - TWOFEN}
	while(money >= ONEFEN){onefen++; money = money - ONEFEN}
  cout << onefen << twofen << fivefen << onejiao << endl; 
  return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arctic-aurora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值