本章感受:总的来说本章知识可以很好理解但是十分难以应用,所以这让学习并应用本章内容显得十分困难,本章光单单靠思考和看书想学好是几乎不可能的,得在看懂课本内容基础上用作业反复实践才能真正明白循环结构到底该如何使用,很多技巧和小细节也必须靠做题来积累。
本章重点和难点:循环结构的嵌套和应用(没事多看看课本上该几节的内容好更好的消化知识)
本章要掌握的重点:如何程序调试(这是菜鸟和大佬的区别所在)
基础知识:while(循环的条件){循环语句}。
do{循环语句}while(判断条件)。
for(初始化语句;判断语句;循环后的语句){循环语句}。
break语句:在循环体中遇到break语句会立刻跳出循环体执行循环结构后面的语句。
continue语句:在循环体中遇到continue语句就会忽略本次循环后续语句而执行下一次循环。
程序调试:1.静态查错:从头到尾通读程序检查是否存在常规错误(用眼看错)。
2.动态查错:用cout动态调试提交前将cout去掉。
注:循环变量可以在循环语句内定义其作用空间就为该循环语句
例子
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&&flag2){
if(x%10==7)flag2=0;
x=x/10;}
if(flag1&&flag2) ans++;}
cout<<ans<<endl;
return 0;
技巧:1.标志变量的使用。
2.多个循环语句相嵌套。
3.if的灵活使用 。
2.
#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++;
}
注:结合例子更好的理解break和continue语句在打程序时的位置和理解它们的作用。
3.#include<iostream>
using namespace std;
int main(){
int i=1,k=1,s=0,n;
cin>>n;
while(i<=n){
for(int j=1;j<=k;j++){
s+=k;
i++;
if(i>n)break;}
k=k+1;}
cout<<s<<endl;
return 0;
}
cout<<ans<<endl;
return 0;
}
技巧:1.注意cout的位置如果cout在循环体外则输出循环体的总和,如果在循环体内则输出每次循环的总和同时也要注意s的位置。
2.在写循环体之前(大部分情况)要先给k,s赋值以免过程出现警告或者出现循环结果不正确。
4.动态查错应用
for(int i=2;i<x;i++){
if(x%i==0){
cout<<x<<" "<<i<<endl;//用于查看x和i的值,最后别忘删去
cout<<"not";
break;}