摘要:
使用程序解决问题的一大优势就是程序能够快速准确的执行重复的工作,C++中for循环、while循环和do-while循环便是专为这类工作设计的结构。for循环适用于已知次数的循环结构设计,而while循环则适用于在特定条件下终止循环的程序。
本文主要内容包括以下四个方面:
1、for循环
2、while循环、do–while循环
3、循环的中途退出
4、两个典型的算法介绍
一、for循环程序设计
for循环被设计用来执行那些需要循环执行n次的程序,一般的,for循环的语法形式为:
for(i=0;i< n;i++)
{
需要重复执行的语句;
}
其中,i=0;这个表达式形式并不唯一,主要用来给循环变量进行初始化,当初始化的表达式不止一个时,可以用逗号进行连接,如:i=0,j=9,m=8;在此处,逗号表达式最终的执行结果是最后一个基本表达式的值。i< n;这个表达式是循环判断条件,当这个表达式为真的时候,程序会执行一次循环体,然后程序执行后面一个表达式i++,此处,这个表达式的形式也不唯一,其可以是关系表达式,可以是逻辑表达式,当表达式的结果为0时判断为假,退出循环,否则程序就进行循环。i++这个语句主要用来决定步长,即程序每循环一次i增加的值为多少。上面的三个表达式构成了for循环的循环控制行,而控制对象称为循环体。此外,for循环可以嵌套使用。
例子1:打印n个连续正整数的平方根
/**************INFO***********
*@author|yongchun_zha
*@mail|1729465178@qq.com
*@version|20170105
*******************************/
/*
*for循环:打印连续正整数的平方根
**/
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double start, end;
cout << "输入起始、终止值:";
cin >> start >> end;
cout << "结果为:\n";
for (int i = start; i <= end; i++){
cout << i << "的开根:" << sqrt(i) << "\n";
}
cout << endl;
system("pause");
return 0;
}
例子2:for循环的嵌套:打印九九乘法表
/**************INFO***********
*@author|yongchun_zha
*@mail|1729465178@qq.com
*@version|20170105
*******************************/
/*
*for循环嵌套:打印九九乘法表
**/
#include<iostream>
#include<cmath>
using namespace std;
int main(){
for (int i = 1; i <= 9; i++){
for (int j = 1; j <= 9; j++){
cout << i*j << "\t";
}
cout << endl;
}
system("pause");
return 0;
}
二、while循环、do–while循环
当循环程序不是按照确定的循环次数终止,而是按照确定的循环条件终止,此时,for循环就不再实用,而while循环则大有用武之地。一般地,C++中while循环的语法规则如下:
while(条件表达式){要重复执行的语句}
当条件表达式的值为true时,程序执行循环体,而当判断为false时循环退出。注意,只要当条件表达式的值为非零,此时表达式的值就是true。
例子:用无穷级数计算e的x次幂,要求第n项小于0.000001。
/**************INFO***********
*@author|yongchun_zha
*@mail|1729465178@qq.com
*@version|20170105
*******************************/
/*
*while循环实例:求e的x次幂
**/
#include<iostream>
#include<cmath>
using namespace std;
计算n的阶乘
double n_factorial(int n) {
double res = 1;
for (int i = 1; i <= n; i++)
res *= i;
return res;
}
int main(){
int n = 0;
const int x = 10;
const double e = 2.718281828;
double ex = 0;
while (pow(x, n) / n_factorial(n) > 0.000001){
ex += pow(x, n) / n_factorial(n++);
cout << "n=" << n << "\t" << pow(x, n) / n_factorial(n)<<endl;
}
cout << "pow(e,10)=" << ex;
system("pause");
return 0;
}
从上面的while循环可以发现,只有当条件判断为真的时候程序才会进行循环,有的时候可能程序会一次都不执行就结束,如果要求程序至少执行一次则可以使用do–while循环结构。一般的,do–while循环结构具有以下形式:
do{
需要重复执行的语句
}while(条件表达式)
这个结构的语法规则与while循环基本无异,只是它先执行循环体然后再判断条件以确定循环是否继续。
三、循环的中途退出
有的时候,有些情况需要在循环的中途退出,C++中提供了两种中途退出循环的机制,一种是使用break;语句,执行此语句的作用是退出该循环体。另外,continue;语句也可退出循环体,但它的作用是跳过循环中continue;语句后面的内容执行下一次循环。
四、两个实用的循环算法
1、枚举法:顾名思义,枚举法就是遍历问题所有的可能性然后求取结果的方法。
例:枚举法求台阶数
/**************INFO***********
*循环程序设计:枚举法
*
*@author|yongchun_zha
*@mail|1729465178@qq.com
*@version|20170105
*******************************/
/*
*问题描述:有一长台阶,每步上两阶,最后剩一阶,每步上三阶,最后剩2阶
*每步上五阶,最后剩四阶,每步上六阶,最后剩五阶,每步上七阶,最后一阶不剩。
*求满足条件的最少台阶数
**/
#include<iostream>
using namespace std;
int main(){
int i = 7;
for (;; i += 7)
if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5)break;
cout << "结果是=" <<i <<endl;
system("pause");
return 0;
}
2、贪婪法:贪婪法求解的思路是,在每一步解决问题的过程中,选择一个问题的最优解,缩小求解的范围,然后继续求解,直到获得全局解。
例子:硬币找零的最优方案
/**************INFO***********
*循环程序设计:贪婪法
*
*@author|yongchun_zha
*@mail|1729465178@qq.com
*@version|20170105
*******************************/
/*
*问题描述:给定找零总额,找出找零的最优方案
**/
#include<iostream>
using namespace std;
int main(){
int coin;
cout << "输入要找的零钱(以分为单位):";
cin >> coin;
cout << "找零:\n";
cout << coin/10<< "张1角\n";
cout << (coin - coin / 10 * 10) / 5 << "张5分\n";
cout << ((coin - coin / 10 * 10) - (coin - coin / 10 * 10) / 5 * 5) / 2 << "张2分\n";
cout << ((coin - coin / 10 * 10) - (coin - coin / 10 * 10) / 5 * 5) - ((coin - coin / 10 * 10) - (coin - coin / 10 * 10) / 5 * 5) / 2 * 2 << "张1分\n";
system("pause");
return 0;
}
五、小结
本篇讲解了C++中的循环程序:for循环、while循环和do–while循环,并给出了应用的小例子,在此基础上,介绍了两种算法:枚举法和贪婪法,这是两种常用的算法,枚举法可以暴力解决需要遍历的所有问题,而贪婪法则能找到优化的解。