循环结构程序设计
在程序设计中,经常需要反复执行某一条语句或一个语句块,这种结构称为“循环结构”或者“重复结构”。
在C++中,循环结构有三种实现语句:while语句、do-while语句和for语句。
循环变量可以在循环语句中定义,其作用范围是循环语句,离体循环语句不起作用。
◆while语句
1.while语句的格式如下:
while(表达式){
循环体
}
2.其含义为:先计算表达式(一般称为循环条件)的值,当表达式的值为真(循环条件成立)时,去执行一次循环体。和if语句不同的是,执行完一次循环体后,while语句又回到开始处,继续计算和判断表达式的真假,决定是否再次执行循环体。也就是“当表达式成立时,不断重复执行循环体”,所以又称为“当型循环”。
3.在while语句中,一定要注意“循环条件表达式“的书写、以及循环体中“循环控制变量”的更新,从而避免死循环。同时,循环条件表达式和循环控制变量的变化,也决定了循环体被执行的次数。
4.#include<iostream>
using namespace std;
int main(){
int x,s=0;
cin >>x;
while(x!=0){//也可以简写成while(x)
if(x>0)s++;
cin >>x;
}
cout <<s<< endl;
return 0;
}
◆do-while语句
do-while语句是C++中用于解决至少执行一次重复操作(循环体)的循环语句。
1.do-while语句的格式如下:
do{
循环体
}while(表达式);
2.其含义为:先执行一次循环体,然后判断表达式是否成立,如果成立,则返回继续执行循环体,直到表达式不成立,才退出循环。一般称之为“直到型循环”。
所示。
3.do-while语句与while语句都可以实现循环结构,区别是:do-while语句先执行循环体,再判断表达式。所以,至少执行一次循环体。
4.#include<iostream>
using namespace std;
int main(){
double r,m,y;
int k=0;
cin>>r >>m>>y;
do{
m=m*(1+r/100);
k=k+1;
}while(m <=y)
cout << k<< endl;
return 0;
}
◆for语句
在实际应用中,如果重复执行的操作(循环体)次数是固定的已知的,则一般使用for语句。
1.for语句的格式如下:
for(表达式1;表达式2;表达式3){
循环体
}
2.#include<iostream>
using namespace std;
int main(){
int k;
cin>>k;
int k1=1,k2=1,k3=1;
for(int i=3;i<=k;i++){
k3=k1+k2;
k1=k2; //迭代法
k2=k3;
}
cout << k3<<endl;
return 0;
}
◆循环嵌套
循环结构与分支结构类似,也可以在一个循环语合
的循环体里出现另一个循环语句,不管是while语句、do-while语句还是for语句。这样的循环结构称为“循环嵌套”。
1.数字三角形
#include<cstdio>
using namespace std;
int main(){
int n,t=1;
scanf ("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
printf("&d",t%10);
t++;
}
printf("\n");
}
return 0;
}
2.与7无关的数
#include<iostream>
using namespace std;
int main(){
int n,ans=0;
cin >>n;
for(int i=1;i<=n;i++){
int flag1=1,flag2=1;
if(i%7==0) flag1=0;
int x=i;
while(x && flag2){
if(x%10==7)
X=X/10;
}
if(flag1 && flag2) ans++;
}
cout << ans << endl;
return 0;
}
◆break和continue语句
在循环结构中,有时需要提前跳出循环体,或者忽略本次循环的后续语句而去执行下一循环。为此,C++提供了break语句和continue语句。
1.在循环体中遇到break语句,就会立刻跳出循环体,执行循环结构后面的语句。
2.在循环体中遇到continue语句,就会忽略本次循环的后续语句而去执行下一次循环。
3.#include<iostream>
#include<cmath>
using namespace std;
int main(){
int m,n,i,j,ans =0;
cin >>m >>n;
for(i=m;i<=n;i++){
for(j=2;j<sqrt(i);j++)
if(i%j==0)break;
if(j<sqrt(i))continue;
ans++i
}
cout << ans << endl;
return 0;
}
◆程序的调试与跟踪
动态调试用增加输出语句的方式来进行,提交之前注销掉。
1.静态查错:程序写好后,首先要从头至尾通读程序,检查是否存在下面几个问题:语句的顺序、思路、逻辑是否有误;语法是否有误,如关键字是否录入错误、变量是否没有定义就使用、变量的大小写
问题、用错标点符号等。其他常见的错误还有以下几个方面。
(1)变量未赋初值
(2)中间运算结果越界
(3)if-else语句混乱
(4)实数比较出错