C++零基础新手入门(五)

本文所有代码均在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;
}

 

 

点赞

发表评论