循环结构总结与感受
一、for,while,do-while语句的内容介绍,特点与应用
①(●—●)
for语句
格式: for(控制变量初始化表达式;条件表达式;增量表达式)
{
语句块1;
…………;
语句块n;
}
②(●—●)
while语句
格式:while(条件表达式)
{
语句1;
…………;
语句n;
}
③(●—●)
do-while语句
格式: do
{
语句1;
…………;
语句n;
}
while(条件表达式);
注意:
1、书写问题 :
① 为了防止意外,要养成无论语句块多少都要有括号的习惯,没有括号,程序默认循环语句为for( ) 、whike( )、do 下一行的第一句语句。
② 注意书写的美观,括号相对于上一句向后两个空格。
③ 三个循环语句开头的语句都不需要分号,还有就是while( )后要加分号。
2、三个语句相互互换的注意事项:
① 想要进行三个循环语句的替换,就要熟悉各自的语句格式,根据“控制变量初始化、条件表达式、增量表达式”的所在位置区别同异点。
② for语句while语句的 “条件表达式” 在被执行的循环语句块前面,而do-while语句的“条件表达式”在被执行的的循环语句块的后面。这是3个循环语句的特殊语句。
③ 三个循环语句中的 ( ),可以不书写任何代码,“条件表达式,变量初始化,增量表达式”可以不书写,而一旦没有书写条件表达式,循环就变成死循环了。
for(控制变量初始化表达式;条件表达式;增量表达式)
{
语句块1;
…………;
语句块n;
}
while(条件表达式)
{
语句1; 控制变量初始化表达式;
…………;
语句n; 增量表达式;
}
do
{
语句1; 控制变量初始化表达式;
…………;
语句n; 增量表达式;
}
while(条件表达式); 这样就完成了语句替换
循环语句的应用:
① 入门级别⭐:单个循环语句,完成对较多变量的加减乘除、选出一大串变量的最大(小)值、构建等差数列等比数列、配合之前学习的分支结构的知识通过简单的数学关系挑选出需要的变量…………等等
② 增强级别⭐⭐:多个循环语句嵌套,解决一些较为复杂的问题:按要求输出想表达的图案、寻找最小公倍数、寻找最大公因数、…………等等
③ 困难级别⭐⭐⭐:不仅要掌握循环语句的使用还要有一定的课外数学小常识,两者配合起来完成代码书写。
例子:
给定一大串坐标,要求寻找出距离指点点的最近点,并计算出距离
#include<iostream>
using namespace std;
int main()
{
int l,s,z,Q,P,Y,e=0,f=0;
int min,x,y,i=1;
while(cin>>x>>y)
{
if(i==1)
{
Q=x;
P=y;
}
if(i!=1)
{
if(i>=3)
{Y=z;}
l=(Q-x)*(Q-x);
s=(P-y)*(P-y);
z=l+s;
min=Y<z?Y:z;
if(z<=min)
{
e=x;
f=y;
}
}
++i;
}
cout<<e<<" "<<f;
return 0;
}
规定n*n的正方形,输入n和两个符号,对标以及对角线有一符号表示其它的用另一个符号表示
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
int main()
{
int n;
char a,b;
cin>>n>>a>>b;
for(int c=1;c<=n;++c)
{cout<<a;}
cout<<endl;
int Z=((n-1)/2)-1;
if(n%2!=0)
{for(int h=2,d=0;h<(n+1)/2;++h,++d)
{cout<<a;
for(int e=0;e<d;++e)
{cout<<b;}
cout<<a;
int f;
f=(n-2)-2*(h-1);
for(int A=1;A<=f;++A)
{cout<<b;}
cout<<a;
for(int B=0;B<d;++B)
{cout<<b;}
cout<<a<<endl;
}
cout<<a;
for(int C=1;C<=Z;++C)
{cout<<b;}
cout<<a;
for(int D=1;D<=Z;++D)
{cout<<b;}
cout<<a<<endl;
for(int h1=1,d1=Z;h1<(n-1)/2;++h1,--d1)
{cout<<a;
for(int e1=1;e1<d1;++e1)
{cout<<b;}
cout<<a;
int f1;
f1=((h1-1)*2)+1;
for(int A1=1;A1<=f1;++A1)
{cout<<b;}
cout<<a;
for(int B1=1;B1<d1;++B1)
{cout<<b;}
cout<<a<<endl;
}
}
else
{ for(int h2=2,d2=0;h2<=(n/2);++h2,++d2)
{ cout<<a;
for(int e2=0;e2<d2;++e2)
{cout<<b;}
cout<<a;
for(int A2=1,f2=((n-2)-2*(h2-1));A2<=f2;++A2)
{cout<<b;}
cout<<a;
for(int B2=0;B2<d2;++B2)
{cout<<b;}
cout<<a<<endl;
}
for(int h3=1,d3=(n-2)/2;h3<n/2;++h3,--d3)
{cout<<a;
for(int e3=1;e3<d3;++e3)
{cout<<b;}
cout<<a;
int f3=2*(h3-1);
for(int A3=1;A3<=f3;++A3)
{cout<<b;}
cout<<a;
for(int B3=1;B3<d3;++B3)
{cout<<b;}
cout<<a<<endl;
}
}
for(int c1=1;c1<=n;++c1)
{cout<<a;}
return 0;
}
二、程序设计时容易忽略的地方总结
比如for(int n=1;n<=10;++n)
{ …… }
当完成循环时,n的值为11,而不是10,特别在数组的使用时应该注意,
要是a[n]的赋值到a[10],而后续使用a[n]就是a[11]而不是a[10].此时就会出现错误,还是不容易被发现
如果在循环定义了某个变量,只能在循环中使用到,出了循环语句再使用该变量就出现错误了,一离开循环语句,该定义就失效了。
三,学习循环知识感受总结
1、@循环程序的设计较为复杂,特别是多重循环嵌套,容易乱,这时要分清步骤明确每一步的想法,(可以在纸上记下)即可以加快程序书写速度也可以减少错误。
2、@对于规定图案输出问题,可以找出每行各个位置与所在行的数学关系,这样十分容易解决问题。
3、@循环中最经常使用到的办法就是枚举法,“暴力输出”,通过循环将全部情况都尝试一遍,找出符合要求的变量。
3、@在循环中有时需要使用到break或continue语句,前者是终止循环,“循环结束” ,后者是跳过本次循环,进入下次循环。注意!!!在嵌套循环条件下,break语句和continue语句只对包含它们的最内层的循环语句起作用,不能用break语句和continue语句跳出的多重循环。
4、@ while的括号中可以有多重语句,但是,是用逗号隔开,不是分号,程序只判断最后一句语句是否正确。
5、@要时刻提醒自己,循环是解决规律性的重复运算,这样就不觉得问题有多难了。
上一章学习完分支结构后最大的感受是细节,要考虑有可能出现的全部情况,这时非常需要注意细节,也许一个不注意就少了一个可能。而这章学习完循环结构,最大的感受是“方向” ,自己觉得做循环题时思路特别容易乱,和做数学题使一样,所以我觉得在解决问题时要明确各个循环的意义、多重循环嵌套时每重循环要干什么,完成什么任务。这样可以有效的解决问题。