本文所有代码均在Vscode中编译通过
本节目录
1° for循环
2° for和if等的结合
3° 四舍五入
for循环
如果我想要让程序一直重复输入某段相同的东西,比如输出"我是一个复读机",要求他输出100次,那该怎么办呢?
这样吗?
cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机"; cout<<"我是一个复读机";
还有某人手打的几十行约会快乐!
没错我就是在水字数
这么写,大量占用硬盘空间,而且十分冗杂可读性非常低,一看就是一个没水平的程序员(没错就是我)。
所以,就有了循环这个东西,让程序重复做一个或一种有规律的东西。
现在,我们来了解一下最常用的循环----for循环。
上面的代码可以用三行for循环来解决,就像是这样:
for(int i = 0; i <= 99; i++){ cout<<"我是一个复读机"; }
这个被for包裹起来的三行代码叫做"for循环",是循环结构的一种,下面还有更多地循环结构。
仔细观察就会发现,for后的括号内有三个用分号隔开的语句。分别的意思是:
循环初始化--进入循环前要执行的语句
int i = 0;
int i = 0;的写法和int i; i = 0;是相同的,不过这里必须那么写,因为只能写一个语句。
循环条件--每执行完一次后都要检查的条件
i <= 99;
执行语句--每次执行完一次都要执行的语句
i++;
其中,i++的意思是i = i + 1;也就是i += 1。同理,i--也是那么写的。
也就是说,程序在for循环前,会申请一个存放变量i的小盒子,且让他等于0。每次执行完for中的语句,就会将i+1,执行完i+1,就会判断i是否小于等于99。如果小于等于99,则继续执行循环,如果不满足,则跳出循环,不再执行。从0到99,需要加100次,所以这个循环会执行100次。
如果是使用i--,那么可以for(int i=100;i>=0;i--)。如果写成了for(int i=0;i<=100;i--)就变成了一个死循环,所以在每一次写完for循环,都需要自己看一看是不是i会达到循环条件。
小试牛刀--输出1~100内所有的整数:
答案
#include <iostream> using namespace std; int main() { for(int i = 1; i <= 100; i++){ cout<<i<<endl; } return 0; }
先别急着往下看,不妨把for的初始条件,循环条件和执行语句修改一下,尝试几次。
这个是输出1-100中所有数字的程序,如果想要输出所有的偶数又该怎么办呢?
聪明的你一定想到了之前学过的if语句,就像是这样---
#include <iostream> using namespace std; int main() { for (int i = 1; i <= 100; i++) { if(i%2==0){ cout << i << endl; } } return 0; }
但是,有没有什么不用if就可以实现的方法呢?答案当然是有的。注意for循环中的三个语句分别是什么?
1-100内的所有偶数是有规律的分布,也就是每隔1个分布,而上面的i是+1,我们如果让i初始为2,每次加上2,那么就可以保证每次输出的都是偶数了。
#include <iostream> using namespace std; int main() { for (int i = 2; i <= 100; i = i + 2) { cout << i << endl; } return 0; }
就像是上面这样。
还记得等差数列求和吗?现在我们来不用公式,用最笨的连加法实现1-100的数字和。
思路:申请一个sum小盒子用于存放总和,并初始化为0,之后一个for循环,i从1到100,并且每次都把i的值加入进sum,也就是说sum会从1加到100
来规矩,写在这里
答案
#include <iostream> using namespace std; int main() { int sum=0; for(int i=1;i<=100;i++){ sum+=i; } cout<<sum<<endl; return 0; }
当然,如果想要计算从n加到m的和,就可以
#include <iostream> using namespace std; int main() { int n,m, sum = 0; cin >> n >> m; for(int i = n; i <= m; i++){ sum += i; } cout << sum << endl; return 0; }
小节:for用途广泛,可以用于输出大量相同或规律字符,可以计算连加,连乘,之后还会遇到用for来输入多组数据的,比如下节的第一题:
for和if等的结合
绕来绕去,还是绕回了if。if没学好的同学可以现在回去再复习一下,一边学一边复习我也不会知道的。不多说了,老规矩,看题:
输入一个n,表示下面要输入n个数字。请输出这n个数字中有多少可以整除3;
嗯??啥东西?
首先,要输入n次,这里需要一个循环。
其次,需要一个用于计数的变量cnt。
再次,每次输入后,都需要用一个if来判断刚刚输入的是不是可以整除3。
所以,大致框架是:
for(i → n){ int x; cin> > x; if(x % 3 == 0){ cnt ++; } }
当然,我这个for循环写的不对,只是表示一下。不懂%是什么意思的请翻到我之前的文章看一看。
我都提示到这个地步了,就自己写一下叭!
答案
#include <iostream> using namespace std; int main() { int n; cin >> n; int cnt = 0; for(int i = 1; i <= n; i++){ int x; cin >> x; if( x % 3 == 0){ cnt++; } } cout << cnt; return 0; }
第二题:for和if和if结合进阶版:
我手上又有n个数字,请你在不排序的前提下,输出最小值
嗯?这又是个什么玩意儿?
提示一下思路:可以定义一个min变量储存最小值,并让他的初始值等于第一个输入的数字,当有数字比min小时,min就等于这个数字。
也就是说,要先判断i是不是等于1,如果i等于1,就让min=temp,否则进行判断,所以这一题是for套if-else套if。
这样就不难了吧!快写!
答案
#include <iostream> using namespace std; int main() { int n; cin >> n; int min; for (int i=1;i<=n;i++) { int temp; cin >> temp; if(i==1){ min=temp; }else{ if(temp<min){ min=temp; } } } cout << min; return 0; }
本次最后一个小知识点:
四舍五入
还记得我们之前学过的double型嘛,如果我们写10/3.0,结果就是3.333333,如果此时我们只需要四舍五入到3位小数怎么办嘞?这时候就需要用到c++一个很有趣的四舍五入的函数了:
这里引入一个新的头文件:<iomanip>,他和<iostream>一样,是写在#include 后面的,用来告诉程序需要用到哪些函数的。
在iomanip这个头文件中,四舍五入的函数是这样的用的:
比如我想输出四舍五入3位后的10/3.0,就这样写:
cout<<fixed<<setprecision(3)<<10/3.0;
对于为什么这样写,不需要了解太多。之后会有更深入的了解。
setprecision()括号中的数字表示需要四舍五入的位数,需要想要四舍五入到小数点后三位,就写下3.
前面的fixed和setprecision(3)都是不需要带有引号的,这一点和endl一样,如果带有引号,就会直接被输出了。
当然,只要在程序中这样写过了,后面所有的小数都是四舍五入到3位数的。比如:
cout<<fixed<<setprecision(3)<<10/3.0<<endl; cout<<10/3.0;
结果是
3.333 3.333
第二个cout语句虽然没有写<<fixed<<setprecision(3),但是他依旧是四舍五入到第三位的。
好啦今天的内容就那么多,下面就是最喜欢的作业部分了
之前给的作业似乎没有一个人在评论区交的,或许还是因为我的评论区写c++代码有bug吧。
作业:
计算利率,输入n,m两个数字。 已知小于手上有n元钱,银行的月利率是0.0028,请输出存m个月后的总金额(保留四位小数) 提示: 如果小于手上有100月, 存一个月后: n=100*(1+0.0028) 存两个月后: n=100*(1+0.0028)*(1+0.0028) 懂了吧
作业答案:
#include <iostream> #include <iomanip> using namespace std; int main() { double n; int m; cin>>n>>m; for(int i=1;i<=m;i++) n*=(1+0.0028); cout<<fixed<<setprecision(4)<<n; return 0; }