![2a2d7d2d865c26f673ac52b8334ba74d.png](https://i-blog.csdnimg.cn/blog_migrate/bbb95c1274e833daa7d24dabc5b33540.jpeg)
终于到了循环~ 来吧~ 看看C++的for语句和python有何不同~
1、for语句
示例4.1:先来体验一个吧~
对于给定的任意正整数n,输出1~n的平方数。
//exam 4.1
#include <iostream>
using namespace std;
int main()
{
int i,n;
cin>>n;
for (i=1;i<=n;i++)
cout<<i*i<<endl;
return 0;
}
![d82629f72a19e3705478c33e01dbe0a0.png](https://i-blog.csdnimg.cn/blog_migrate/549f1b5a47fe9d1ee933524ed53a8ae6.png)
![8788869b72d21802b1819e924b58b017.png](https://i-blog.csdnimg.cn/blog_migrate/416df38666418899dfb89fc5be2eabaa.png)
定义格式:
格式1:
for(循环变量初始化;循环条件;循环变量增量)
语句;
格式2:
for(循环变量初始化;循环条件;循环变量增量)
{
语句1;
语句2;
......
}
标颜色的语句都是要重复执行的内容,即for循环体。
功能:
对于使循环条件成立的每一个循环变量的取值,都要执行一次循环体。
for 循环语句的执行流程:
![0fc1a41564c0f46d6eb4471f4ce962da.png](https://i-blog.csdnimg.cn/blog_migrate/51db46bc2b2743227c353abd5d125066.jpeg)
示例4.2:
写出下面程序的运行结果。
// exam 4.2
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=1;i<=5;i++)
cout<<i;
return 0;
}
我猜测是12345
实际运行结果:
![b669f9f577bd4d2636331cacf8dbb03c.png](https://i-blog.csdnimg.cn/blog_migrate/411f376255ec4432ab62bb3f193f18c1.png)
还是蛮easy的,只要记住它的格式就好了,注意里面有两个分号最后一个循环变量增量后面没有分号了。
示例4.3:
写出下面程序的运行结果。
// exam 4.3
#include <iostream>
using namespace std;
int main()
{
int i,j;
for (i=0,j=10;i<j;i++,j--)
cout<<i<<" "<<j<<endl;
return 0;
}
我猜测是这样的:
i 初始是0,j初始是10,i每次增加1,j每次减少1,但还是要满足i比j小。
因此,结果是这样的:0 10 1 9 2 8 3 7 4 6
实际运行结果:
![3cb198763da9a4d7bc2535e5fdd43db9.png](https://i-blog.csdnimg.cn/blog_migrate/2241f9d38c2ddeaf423d6efd1ed00119.png)
哦哦,endl那每一次都要换一行,注意啦~
示例4.4:
写出下面程序的运行结果。
// exam 4.4
#include <iostream>
using namespace std;
int main()
{
int i,sum;
sum=0;
for (;i<=100;)
{
sum+=i;
i++;
}
cout<<i<<" "<<sum<<endl;
return 0;
}
诶,这个就神奇了,标准格式的:
for(循环变量初始化;循环条件;循环变量增量)
语句;
里面只有循环条件,变量初始化和变量增量都没有。注意观察语句中竟然有 i++,也就是循环变量增量,因此啊,猜测这里是求1到100的和,结果是100 5050?
实际运行结果:
![ccf902a637753fa666dadf8abcf71005.png](https://i-blog.csdnimg.cn/blog_migrate/6c85d0df89f731f290fe92c5f879b330.png)
推测错了。。。为啥i是101呢,哦,就是前面已经到了100,计算完100以内的和5050了,但是循环体里面i还要增加1,那就是101。
实验:
// exam 4.4-1
#include <iostream>
using namespace std;
int main()
{
int i,sum;
sum=0;
for (i=0;i<=100;i++)
{
sum+=i;
i++;
}
cout<<i<<" "<<sum<<endl;
return 0;
}
猜测结果:这里应该是0到100相加的和
实际运行结果:
![a8d79c7d55f20c549560ce56ee9eb4fc.png](https://i-blog.csdnimg.cn/blog_migrate/a0af71118d02458daaed65b5f73d13ba.png)
// exam 4.4-1
#include <iostream>
using namespace std;
int main()
{
int i,sum;
sum=0;
for (i=1;i<=100;i++)
{
sum+=i;
i++;
}
cout<<i<<" "<<sum<<endl;
return 0;
}
猜测结果:这里应该是1到99相加的和
实际运行结果:
![708f2eaafecc4df25ca69430fecc8d6e.png](https://i-blog.csdnimg.cn/blog_migrate/0d9c1dbec56af84731b532011e76a45a.png)
示例4.5:
输出100以内所有的偶数
// practice 4.5
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=1;i<=100;i++)
{
i++;
cout<<i<<" ";
}
return 0;
}
我这里是直接沿用上一小节的了,
运行结果:
![78caf4a1377d12f481abe6ca1894ce95.png](https://i-blog.csdnimg.cn/blog_migrate/a57d2ebe9570344e579da846a762e246.png)
看下书中给出的答案吧:
// exam 4.5
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=1;i<=100;i++)
{
if (i%2==0)
cout<<i<<"";
}
return 0;
}
运行结果:
![603b72d5a663c889ba2143a1037c2463.png](https://i-blog.csdnimg.cn/blog_migrate/ca2ad6f7d2b66091b3fab582f027ef2a.png)
除了加一个条件判断,书中还给了另一种方法,就是从2开始,直接每次加2:
// exam 4.5-2
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=2;i<=100;i+=2)
cout<<i<<"";
return 0;
}
运行结果:
![84c6f0c09b96f2e89542775d7e3e7e3d.png](https://i-blog.csdnimg.cn/blog_migrate/3b929f823f04b47ee4bfe9a99e523220.png)
示例4.6:
分别计算1~100中偶数和奇数之和。
// practice 4.6
#include <iostream>
using namespace std;
int main()
{
int i,sum1,sum2;
sum1=0;
sum2=0;
for (i=1;i<=100;i++)
{
if (i%2==0)
{sum1+=i;}
else
sum2+=i;
}
cout<<"100以内偶数之和为"<<sum1<<endl;
cout<<"100以内奇数之和为"<<sum2<<endl;
return 0;
}
运行结果:
![3212b1bb76c7b10f3ec1dbbd055013be.png](https://i-blog.csdnimg.cn/blog_migrate/95e511588250a86ac4a57459d0245409.png)
看看书上给的答案吧~
// exam 4.6
#include <iostream>
using namespace std;
int main()
{
int i,sum1=0,sum2=0;
for (i=1;i<=100;i++)
if (i%2==0) sum1+=i;
else sum2+=i;
cout<<"偶数和"<<sum1<<" "<<"奇数和"<<sum2;
return 0;
}
运行结果:
![3b88aaa75709fdf02ba3ade974b427b2.png](https://i-blog.csdnimg.cn/blog_migrate/08947fb4d6fdb88336ebb645b2ab24ba.png)
书上写的更简洁呀,但逻辑是一样的,循环中先判断是不是偶数,然后加到对应的sum中
书中还有一种方法就厉害了~ 借助了两个初始变量i和j:
// exam 4.6-1
#include <iostream>
using namespace std;
int main()
{
int i,j,sum1=0,sum2=0;
for (i=2,j=1;i<=100;i+=2,j+=2)
{
sum1+=i;
sum2+=j;
}
cout<<"偶数和"<<sum1<<" "<<"奇数和"<<sum2;
return 0;
}
运行结果:
![51c23d861f179202482465f2b2689172.png](https://i-blog.csdnimg.cn/blog_migrate/d907268f272544307ee80ac28197a2c3.png)
示例4.7:
已知n个人的身高值,求出其中的最大值。
那就是依次用身高和目前的最大值比较,大就覆盖,小就不管:
// practice 4.7
#include <iostream>
using namespace std;
int main()
{
int i,n;
float x,max=0;
cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
if (x>max) max=x;
}
cout<<max<<endl;
return 0;
}
运行结果:
![ef7cddf60aae12ac77d837e5c4f0c944.png](https://i-blog.csdnimg.cn/blog_migrate/42178079b6b66b327812b37726a902e0.png)
*示例4.8:
![807491c4ee7eef2211599b3fb49f74c6.png](https://i-blog.csdnimg.cn/blog_migrate/fdba1434ac6d4967627b7e9a3ae611e5.png)
// exam 4.8
#include <iostream>
using namespace std;
int main()
{
int i,a=0,b=1,c;
cout<<a<<" "<<b;
for (i=3;i<=40;i++)
{
c=a+b;
cout<<c<<" ";
if (i%10==0) cout<<endl;
a=b;b=c;
}
return 0;
}
运行结果:
![ea8b982087dcddc041fcc20cd50eb11d.png](https://i-blog.csdnimg.cn/blog_migrate/79ca2512ad03b5f3bffb71dd3189a5ef.png)
作业:
1) 读程序,写结果
// test1-1
#include <iostream>
using namespace std;
int main()
{
int i,n=0;
for(i=1;i<=100;i=i*3)
if (i%7==0) n++;
cout<<n<<endl;
return 0;
}
猜测结果是:i的值是3、9、27、81,他们除以7的余数没有为0的,那实际都不满足if语句,那n就没任何变化,结果为0。
运行结果:
![13b29de7a67ed397a91cb72ef90e571e.png](https://i-blog.csdnimg.cn/blog_migrate/96e472c8ca885f176293d4ecfbb54d25.png)
// test1-2
#include <iostream>
using namespace std;
int main()
{
int i,j;
for(i=20,j=0;i<=50;i++,j=j+5)
if (i==j) cout<<i<<endl;
return 0;
}
运行结果:
![e078f58c65589faa5f753dfe03aa5a85.png](https://i-blog.csdnimg.cn/blog_migrate/6127b46200e91c6c31339713712414e6.png)
// test1-3
#include <iostream>
using namespace std;
int main()
{
int n;
for(n=1;n<=5;n++)
switch(n%5)
{
case 0:cout<<n<<"@"<<endl;break;
case 1:cout<<n<<"#"<<endl;break;
default:cout<<n<<endl;
case 2:cout<<n<<"$"<<endl;
}
return 0;
}
运行结果:
![4c8c614565b36e7623e430fcaf8eae17.png](https://i-blog.csdnimg.cn/blog_migrate/2ac4fc5ea14696c22f87faaa8f1fd524.png)
// test1-4
#include <iostream>
using namespace std;
int main()
{
int n,i;
for(i=1;i<=100;i++)
{
n=i;
if (++n%2==0);
if (++n%3==0);
if (++n%7==0);
cout<<i<<":"<<n<<" ";
}
return 0;
}
运行结果:
![00a7898138050c1a4cb45f226b82cb2b.png](https://i-blog.csdnimg.cn/blog_migrate/f6f7a9a948a37f112b184c9569c5a957.png)
*2、
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留小数点后两位。
![f5f5035bd1b754f5e0037c91cde552c8.png](https://i-blog.csdnimg.cn/blog_migrate/ad168379bef459fb8540ee1cf7e7a769.jpeg)
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n,i,a;
double s;
cin>>n;
s=0;
for(i=1;i<=n;i++)
{
cin>>a;
s=s+a;
}
printf("%0.2f",s/n);
return 0;
}
![8a6ea9694b8f3d9b99439d720458f09b.png](https://i-blog.csdnimg.cn/blog_migrate/15b3bc9e5eeff203fa66a882f4a77950.png)
![d6414e6a4f5d27064c38f616f3a9970e.png](https://i-blog.csdnimg.cn/blog_migrate/d9e3197c7d416ce7c7fb0836d1ba4a9c.png)
3、
给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值=最大值-最小值)
![68f7288265ceb6a0045aa2c4026a7d80.png](https://i-blog.csdnimg.cn/blog_migrate/7e16524e8de8f3304d5ac3a06d967470.png)
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n,i,a,max=0,min=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a;
if (a>max) max=a;
else if (a<max &&a<min) min=a;
}
printf("%d",max-min);
return 0;
}
![6e8b9b23fac6790087d24080bb6d955e.png](https://i-blog.csdnimg.cn/blog_migrate/640dd6ae22d31bf5493841e1ac8049a4.png)
![5d312b721099db1370bee0394dc0fa51.png](https://i-blog.csdnimg.cn/blog_migrate/28b2648381d0a37e4526733581141255.png)
上面这么写是10分,我看看怎么改能得100分~
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n,i,a,max=0,min=1000;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a);
if (a>max) max=a;
if (a<min) min=a;
}
printf("%d",max-min);
return 0;
}
100分~
原来得10分是因为结果对了但是逻辑完全不对啊,
错误的点是min的初始值是1000啊,要是0的话,任意输入一个都不会比它小啊。