第8节 循环结构的设计

第8节 循环结构的设计

1.循环的嵌套
1、循环的嵌套
►如果一个循环体内包含又一个循环语句时,就构成了循环的嵌套。 
►C++语言的循环语句(while、do、for)可以互相嵌套,循环嵌套的层数没有限制,可以形成多重循环。
►使用多重循环的时候,嵌套的循环控制变量不能相同。

在这里插入图片描述

【例8.1】 打印九九乘法表
    1 #include <iostream>
    2 using namespace std;
    3 int main()
    4 {
    5 	int i,j;
    6 	for (i=1; i<=9; i++) { //控制行
    7 		for (j=1; j<=i; j++) //控制每行
    8 			cout<<i<<"x"<<j<<"="<<i*j<<" ";
    9 		cout<<endl; //每行末尾输出1个换行
   10 	}
   11 	return 0;
   12 }
 /*
① i=1
 j=1
② i=2
 j=1, j=2
③ i=3
 j=1, j=2, j=3
④ i=4
 j=1, j=2, j=3, j=4
 ……
 */   
/*运行结果
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
*/ 
2、循环语句的选用
►1)计数型循环
    ►计数型循环用于处理已知循环次数的循环过程。
    ►控制变量在每次循环时都要发生规律性变化(递增或递减),当控制变量达到预定的循环次数时,循环就结束。
    ►计数型循环常使用for语句。
    
【例8.1】 求S=1!+2!+3!+……+10!
    1 #include <iostream>
    2 using namespace std;
    3 int main()
    4 {
    5 		int s,n,t;
    6 		for (s=0,t=1,n=1; n<=10; n++)
    7 			t = t * n, s = s + t; //t=n!
    8 		cout<<s<<endl;
    9 		return 0;
    10 } 
/*
① t=1!, s=1!, n=2
② t=2!, s=1!+2!, n=3
③ t=3!, s=1!+2!+3!, n=4
……
*/
►2)条件型循环
    ►条件型循环用于处理循环次数未知的循环过程,称为“不定次数循环”。 
    ►在条件型循环中,由于事先不能准确知道循环的次数,因此循环控制是由条件来判定的。在每次循环时检测这
    个条件,当条件一旦满足,循环就结束。
    ►条件型循环常使用while语句和do while语句。
    
【例8.2】求π的近似值 π/4≈1-1/3+1/5-1/7+1/9-…,直到最后一项的绝对值小于10-7为止。
    1 #include <iostream>
    2 #include <cmath>
    3 using namespace std;
    4 int main()
    5 {
    6 	double s=1,pi=0,n=1,t=1;
    7 	while (fabs(t)>1e-7)
    8 		pi=pi+t, n=n+2, s=-s, t=s/n;
    9 	cout<<pi*4<<endl;
   10 	return 0;
   11 }
/*
① pi=1, n=3, s=-1, t=-1/3
② pi=1-1/3, n=5, s=1, t=1/5
③ pi=1-1/3+1/5, n=7, s=-1, t=-1/7 
……
*/
2.循环的设计
3、循环语句应用举例
►1. 利用循环实现枚举算法: 
        ►枚举法,也称为穷举法,是指从可能的集合中一一枚举各个元素,用给定的约束条件判定哪些是无用的,哪些
    	是有用的。能使命题成立者,即为问题的解。
        ►采用枚举算法求解问题的基本思路为:
            ►(1)确定枚举对象、枚举范围和判定条件;
            ►(2)一一枚举可能的解,验证是否是问题的解。

【例8.3】百钱买百鸡问题:有人有一百块钱,打算买一百只鸡。公鸡一只5元,母鸡一只3元,小鸡3只1元,求应各买多少?
     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 	int x,y,z;
     6 		for (x=0; x<=20; x++) //枚举公鸡的可能数量,最多为20
     7 			for (y=0; y<=33; y++) //枚举母鸡的可能数量,最多为33
     8 				for (z=0; z<=100; z++)//枚举小鸡的可能数量,最多为100
     9 					if(z%3==0&&x+y+z==100&&5*x+3*y+z/3==100)//约束条件
    10 						cout<<"公鸡="<<x<<",母鸡="<<y<<",小鸡="<<z<<endl;
    11 return 0;
    12 }

► 二重循环实现百钱百鸡问题:
     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 	int x,y,z;
     6 		for (x=0; x<=20; x++) //枚举公鸡的可能数量,最多为20
     7 			for (y=0; y<=33; y++) { //枚举母鸡的可能数量,最多为33
     8 				z=100-x-y; //小鸡的数量根据约束条件求得
     9 				if (z%3==0 && 5*x+3*y+z/3==100) //约束条件
    10 					cout<<"公鸡="<<x<<",母鸡="<<y<<",小鸡="<<z<<endl;
    11 			}
    12 		return 0;
    13 }

►2. 利用循环实现迭代算法: 
    ►迭代法是一种不断用变量的旧值递推新值的求解方法。
    ►采用迭代算法求解问题的基本思路为:
        ►(1)确定迭代变量。
        ►(2)建立迭代关系式。
        ►(3)对迭代过程进行控制。

【例8.4】求斐波那契(Fibonacci)数列前40个数。斐波那契数列公式为:
     			f(1)=1		   (n=1)
    			f(2)=1		   (n=2)
    	  f(n)=f(n-1)+f(n-2) 	(n>2)
   确定迭代变量:f(n)
   建立迭代关系式:f(n)=f(n-1)+f(n-2)
   对迭代过程进行控制:Fibonacci数列的前40个数
     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 		int i, f1=0, f2=1, fn;   //迭代变量
     6 		for(i=1; i<=40; i++) {   //迭代次数 
     7 			fn = f1 + f2; 		//迭代关系式
     8 			f1 = f2 , f2 = fn;   //f1和f2迭代前进
     9 			cout<<f1<<endl;
    10 	}
    11 	return 0;
    12 }
        /*
        ① i=1, fn=1, f1=1, f2=1
        ② i=2, fn=2, f1=1, f2=2
        ③ i=3, fn=3, f1=2, f2=3
        ④ i=4, fn=5, f1=4, f2=5
        ……
        */
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值