终于到了循环~ 来吧~ 看看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;
}
定义格式:
格式1:
for(循环变量初始化;循环条件;循环变量增量)
语句;
格式2:
for(循环变量初始化;循环条件;循环变量增量)
{
语句1;
语句2;
......
}
标颜色的语句都是要重复执行的内容,即for循环体。
功能:
对于使循环条件成立的每一个循环变量的取值,都要执行一次循环体。
for 循环语句的执行流程:
示例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
实际运行结果:
还是蛮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
实际运行结果:
哦哦,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?
实际运行结果:
推测错了。。。为啥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相加的和
实际运行结果:
// 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相加的和
实际运行结果:
示例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;
}
我这里是直接沿用上一小节的了,
运行结果:
看下书中给出的答案吧:
// 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;
}
运行结果:
除了加一个条件判断,书中还给了另一种方法,就是从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;
}
运行结果:
示例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;
}
运行结果:
看看书上给的答案吧~
// 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;
}
运行结果:
书上写的更简洁呀,但逻辑是一样的,循环中先判断是不是偶数,然后加到对应的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;
}
运行结果:
示例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;
}
运行结果:
*示例4.8:
// 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;
}
运行结果:
作业:
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。
运行结果:
// 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;
}
运行结果:
// 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;
}
运行结果:
// 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;
}
运行结果:
*2、
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留小数点后两位。
#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;
}
3、
给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值=最大值-最小值)
#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;
}
上面这么写是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的话,任意输入一个都不会比它小啊。