概述
**
六循环结构程序设计
**
①.介绍:在程序设计中,经常需要反复执行某一条语句或一个语句块,这种结构称为“循环结构”或“重复结构”。
②.循环结构有三种实现语句:while语句,do—while语句和for语句。
**
1.while语句
①.while语句格式:
while(表达式)
{
循环体 }
注1:当循环体不符合表达式,则停止循环行下一语句 。
例:
int i=1;
while(i<=10)
{ printf("@");i++;}
输出情况:
①将i++改为i+=2,程序输出五个@。
②将i<=10改为i<1,程序无输出,因为第一次循环条件就不成立。
③如果将i++遗漏,程序会一直执行printf("@")语句,永远不会结束,这种情况称为"死循环"。
注2:注意循环条件表达式的书写,以及循环体中"循环控制变量"的更新。同时循环条件表达式和循环控制变量的变化,也决定了循环体被执行的次数。
例子:例1 求1+2+3+.+100的值。
[问题分析]设sum存放答案,初始化为0。再设i为循环控制变量,初始化为1。 当循环条件(i<=100)成立时,反复执行以下循环体:
(1)将i累加到和sum中;
(2)将i取值为下一个数,即i++。最后,输出ans的值。
//p4-1-1#include<iostream>
using namespace std;
int main(){
int i=1,sum=0;`
while(i<= 100)
sum+=i++;
cout<< sum<< endl;
return 0;}
**
2.do–while语句
①do–while语句格式:
do{
循环体
}
while(表达式);
**
②含义**:先执行一次循环体,然后判断表达式是否成立,如果成立,则返回继续执行循环体,直到表达式表达式不成立,才退出循环。一般称之为"指导性循环"。

注1:do–while语句和while语句都可以实现循环结构,区别是:do–while语句先执行循环体,再判断表达式。所以至少执行一次循环体。
例1
用do-while 语句实现:
输出一行10个“@”.
#include<cstdio>
using namespace std;
int main()(int i=1;
do{printf("@")i++;}
while(i<= 10);
return 0;}
2例子 统计正数。
[问题描述]用do-while 语句实现:输人若干整数,以0结尾,统计其中有多少个正整数。
[输入格式]一行若干整数,最后一个为0。
[输出格式]一行一个整数,表示输人的数据中正整数的个数。
[样例输入]3 1 6 -3 2 0
#include<iostream>
using namespace std;
int main(){
int x,s=0;
do{(cin>>X)
if(x>0)S++;}
while(X !=O);
cout << s<< endl;
return 0;}
3.for语句
①for语句格式:
for(表达式1;表达式2;表达式3)
{循环体}
②含义:先运行表达式1,然后继续运行表达式2,如果为真,则执行循环体。之后执行表达式3。如果为假,则退出循环。
例子:输出一行10个"@"
①#include<iostream>
using namesoace std;
int main(){
for(int i=1;i<=10;i++)
printf("@");
printf("n");
return 0;}
for语句写法灵活,上述程序也可以写成:
②#include<iostream>
using namespace std;
int main( )
{int i=1;
for(;i<=10;i++)
printf("@");
printf("n");
return 0;}
还可以是
③#include<iostream>
using namespace std;
int main()
{int i=1;
for(;i<=10;)
{printf("@n");i++;}
printf("@n");
return 0;}
注1:循环变量,只能在循环语句中起作用,离开循环语句就不起作用。
注2:在开头的定义变量,在循环的()中可以不用再加,但要在两个中表达式加";"。
注3:做题时观察好再用,不要糊里糊涂的就用
4.循环嵌套
1.介绍:在一个循环语句的循环体里出现另一个循环语句,不管是while语句、do–while语句还是for语句。这样的循环结构称为"循环嵌套"。
例子
输出矩形。
[问题描述]输入n和m,输出一个n行m列的“@”矩形图案。
[输入格式]一行两个正整数n和m,中间用一个空格隔开n,m<=100。
[输出格式)输出一个n行m列的“@”矩形图案。
[样例输入]3 4
[样例输出)
@@@@
@@@@
@@@@
[问题分析]要输出n行,所以可以编写一个外层循环,穷举行。然后,在循环体里,还要输出m个“@”,所以再嵌套一个内层循环,穷举每一行的“@”个数。
#include<cstdio>
using namespace std;
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) printf("*");
printf("n")}
return 0;}
注1:两条循环语句要加{ }。
注2:做题时要学会找规律或解决方法,尽量简洁。
注3:在循环中也可以利用标志变量,用标志变量来控制循环。
5.break和continue语句
①.break语句解释:在循环体中遇到break语句,就会立刻跳出循环体,执行循环结构后面的语句。
例:与7无关的数。
[问题描述]一个正整数,如果它能被7整除,或者它的某一位上的数字为7,则称其为为“与7相关”的数。现在,请编程求出所有小于或等于n的“与7无关”的正整数个数。
[输入格式]一行一个正整数n,n<=10^6。
[输出格式]一行一个整数,表示答案。
[样例输入]21
[样例输出]17
[问题分析]判断x中是否有数字7的时候,一旦出现“x%10==7”,则说明x是与7相关的数,就可以用break 语句立刻退出当前的while 循环,这样可以提高程序的效率。
②continue语句在循环体中遇到continue语句,就会忽略本次循环的后续语句而去执行下一次循环。
例//p4-5-1
#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)
{
if(x%10== 7){flag2=0;break;}
x=x/10;
if(flag1&&flag2)ans++;}
cout << ans<< endl;
return 0;
}
注1:这道例题中使用了标志变量和多个if语句。要仔细思考和学习。
[问题描述]一个正整数,如果它能被7整除,或者它的某一位上的数字为7,则称其为“与7相关”的数。请编程求出所有小于或等于n的“与7无关”的正整数个数。
[输人格式]一行一个正整数n,n<=10^6。[输出格式]一行一个整数,表示答案。
[样例输入]21
[样例输出]17
[问题分析]当i是7的倍数,即“i%7==0”时,说明i已经是与7相关的数了,此时,就不再需要判断i的某一位是否是7了。所以,可以用continue忽略本次循环的后续语句,而去执行下一次循环,判断下一个数了。 这样做同样可以提高程序的效率。
#include<iostream>
using namespace std;
int main(){
int n,ans=0;
cin>>n;
for(int i =l;i <=n; i++)
{int flag=1;
if(i %7==0)continue;
int x=i;
while(x){if(x %10==7){flag=0;break;}
x=x/10;
}
if(flag)ans++;
}
cout << ans << endl;
return 0;
}
**注1:**在使用break和continue应判断好情况和程序内容,再使用。
6.程序的调试与循环
①静态差错
(1)变量未赋初值
(2)中间运算结果越界。
例
int a=100000;int b;
b=aa/100;
cout<<b<<endl;*
原因:c++在进行编译时,先计算"aa",把它放到一个中间变量中,然后再把"/100"放到b中,而"aa"的结果超出了int范围,这就造成了错误。
(3)if–else语句混乱
在使用if–else的嵌套时出错。
if-else语句的规则是if语句可以没有else语句与之相配;else语句总是与前面的,最近的if语句匹配。
例如
**if(条件a)
if(条件b) 代码段b
else 代码段a**
本例与原意不符,原因:else 与if(条件b)相匹配,导致代码段a需在if(条件b)不成立时,方能执行。
(4)实数比较错误在比较两个实数是否相等时,如果直接用等号,往往会造成错误。 这是浮点运算存在误差所造成的,解决办法是使用两数差的绝对值与一个相对极小量进行比较如:if(fabs(x-y)<1e-6)…或者if(fabs(x)<le-6).……。
**注1:平常要注重积累经验和教训。**
**
感想
**在学习本单元时,明显感到困难,这一章既有新的内容又有上一章和嵌套有关。如果上一章的嵌套未学清楚,那么这一章在做题时会有些混乱。
这一章是关于循环语句的使用,而循环在思考的时候很容易晕,这更需要我们将基础知识扎牢。平常要多训练一些,让自己的见识广一些。而且在做题时,题中所用到的语句可能和其他的题所需要的语句相似或一样。
学习循环嵌套不仅要把三个循环语句记清楚,还要能成功的将他们在实题中运用。在做题时也要细心,不要因为小错误而导致程序无法运行。
循环嵌套中其实我仍还有许多问题未解决,比如在做题时无法正确判断循环该用哪一个和该用几次。这个问题我会在看例题时来学习模仿然后自己再设计出程序来。平时自己也要多积累例题,但不能靠做题来提升。
学完循环语句后,其实也是将上一章的内容进行了一遍复习和延伸。c++虽然越学越难,但也感觉越来越有意思,越来越能体会到c++的乐趣,希望下一章的学习能越来越高效。****
最后
以上就是美丽嚓茶为你收集整理的c++感想循环语句的全部内容,希望文章能够帮你解决c++感想循环语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复