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

本文所有代码均在Vscode中编译通过


本节目录:

    1° double

    2° long long

    3° bool

    4° 模运算

 

 

double

上次一起初步了解了简单的变量,但是变量这个坑很大,需要更加仔细地学习。

int型的小盒子可以给整数居住,带有小数点的数字就不高兴了,他们没地方住了,于是,就有了double型。

double型可以居住小数,当我们想要用程序计算很准确的数值时,就会用到它。比如这个时候:

已知一个圆半径为r,请计算此圆的面积~

如果此时,我们的半径r是一个小数,用如下的程序执行,就只会取它整数位的数字运算。比如输入1.5,返回结果却是3.14。

#include <iostream>
using namespace std;

int main(){
    int r;
    cin>>r;
    cout<<3.14*r*r;
    return 0;
}

所以,我们需要把int改为double:

#include <iostream> 
using namespace std; 

int main(){ 
    double r; 
    cin>>r; 
    cout<<3.14*r*r; 
    return 0; 
}

此时再输入1.5,结果就是7.065了。

 

 

Long long

#include <iostream> 
using namespace std; 

int main(){ 
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

还记得这个计算器程序吗?这个程序可以满足日常的需要,但是当数字过大的时候,似乎就不能正常运算了。

原来,int型的小盒子是有范围的,当整数过大时,就住不下了,具体的范围是(-2147483648,2147483647),也就是2^32-1。这个数据也不是最准确的,它受限于操作系统的位数。

一个高级语言怎么能受限制于这个呢?于是,就有了给大数居住的变量类型--long long,一听名字就知道很long。他的范围是(-2^64,2^64-1)

把上面的int换成long long再试一试,这样就可以计算大于2^32-1的数据了。但是它依旧有缺陷,也就是不能计算大于2^64的数据。

至于那么大的数据怎么计算,也不是没有办法,在后续的算法系列中,我会讲到高精度算法,这样就可以计算几十位,几百位甚至上千位的数据了,技术好一点上万位也没有问题。

 

 

bool

布尔?摩尔?傻傻分不清?我学过布尔型再去学化学的时候,也是傻傻分不清,此布尔非彼摩尔,布尔也不是布尔什维克,作为一个文科没学好的理科生,布尔什维克是啥我都不知道。对不起。

布尔型,和int,double,long long一样,是问程序要小盒子用的,不过布尔型很特殊,它是用来表示是和否的。

众所周知,计算机都是二进制的,也就是0和1,在c++中,0表示否,非零(1)表示是。而布尔型,就是来储存是和否的。

它和int什么的一样,也是一样的使用方法,比如~

bool is_ture;

让数字住进去的方法也是一模一样的,比如这样

is_true = 1;
is_true = 0;
is_true = true;
is_true = false;

诶?聪明的你一定想到了,如果赋给它一个不是1和0的数字会怎么样?上文讲到,0表示否,非零(1)表示是,也就是说,除了0以外所有的数字住进去,表示的都是 是。

 

 

模运算

在数学中有加减乘除四则运算,在程序中也不例外。但是,我们还有另外一个运算------模运算,听起来十分的高大上。其实,他就是"取余",也就是数学中的mod。如果没学过mod也没关系,我来举个栗子,我这里有10个栗子,分给3个小盆友,那么还剩1个栗子,所以,10对3取余结果为1。这就是取余。

那么我们在程序中怎么表示取余呢?

我们引入一个新的符号------'%'。它的用法和+-/一样。同时,他和和/的优先级相同。

#include <iostream>
using namespace std;

int main(){
    cout<<10%3<<endl;
    return 0;
}

编译运行,神奇的结果'1'就出现了!

似乎你并不明白这个模运算有什么作用,别急,他的作用大了去了。先来看一道题:

请听题:

我这里有一个三位数n(100≤n≤999),请计算它各个位上的数字的和。

嗯?这是什么?仔细分析一下。

我只要知道它各个位上的数字,就可以知道他们的和了。

首先,我们要知道它的个位数,先想一想怎么用模运算获得它个位数?

如果减去了个位数,剩下的数字一定可以被10整除,比如561,变成了560,365变成了360。那么我们就可以把561%10,结果就是1,也就是个位数。形象一点就是561个糖果分给10个小朋友,一个小朋友有56个,还剩一个就是561的个位数。(一个人56颗糖,会得糖尿病吧。)

所以,我们可以让n%10,这样的结果就是它的个位数了。先试着申请一个int型的小盒子,让n住进小盒子,再申请一个叫做a的小盒子,用于储存n的个位数。知道你一定不会自己写,输入框给你准备好了,就在这里写吧。写错了也没有关系,没人能看见。

以下是答案
#include <iostream>
using namespace std;

int main(){
    int n;
    int a;
    cin >> n;
    a = n % 10;
    cout << a;
    return 0;
}

我们继续算他的十位数,小于一拍脑袋,直接取余100不就好了,旁边的小鹿看不下去了,提示小于这样结果就是一个两位数了,那么怎么办呢?

我们可以先让n除以10,由于n是int型的,所以结果不会带小数点,这样个位数就成功的没有了,再让他对10取余,结果就是n的十位数了。

比如之间的561,在程序中除以十就变成了56,再分给十个小朋友,一个人5块,剩六个,就是原来数字的十位数了。

现在我们在int a;的下一行再申请一个叫做b的小盒子,我们用b来储存n十位数字,尝试写出b为n十位数的程序吧。

别偷看答案!

以下是答案
#include <iostream>
using namespace std;

int main(){
    int n;
    int a;
    int b;
    cin>>n;
    a = n % 10;
    n = n / 10;
    b = n % 10;
    cout << a;
    cout << b;
    return 0;
}

上面的代码看着有些啰嗦,我们把它简化一下。

#include <iostream> 
using namespace std; 

int main(){
    int n, a, b; 
    cin >> n; 
    a = n % 10; 
    n /= 10; 
    b = n % 10;
    cout << a << b; 
    return 0; 
}

这里拓展一下,有时候看到自己的代码很啰嗦,可以这样简化:

int m;             
int n;              
   ||
int m,n;
//同理,doule,long long也可以这样化简

cin>>m;
cin>>n;
    ||
cin>>m>>n;
//同理,cout也可以这样化简

m=m+10;
   ||
m+=10;
//同理,+-*/%都可以这样化简

那么言归正传,个位数和十位数都解决了,百位数就简单了。直接再次n/10就行了啊。前面说过int型会忽略小数点。

那么自己修改一下代码,尝试编译运行

最终你的代码应该是酱紫的~

#include <iostream> 
using namespace std; 

int main(){ 
    int n, a, b,c; 
    cin >> n; 
    a = n % 10; 
    n /= 10; 
    b = n % 10; 
    c = n / 10;
    cout << a + b + c; 
    return 0; 
}

简化一下:

#include <iostream> 
using namespace std; 

int main(){ 
    int n; 
    cin >> n; 
    cout << n % 10 + ( n / 10 ) % 10 + n/100; 
    return 0; 
}

写完了一个那么长代码,是不是超级超级有成就感呢?

 

 

今天的作业:用布尔型实现一个判断。输入两个参数a,b,输出a mod b的值。

作业答案:

抱歉,只有登录并在本站任一文章发表评论才能阅读隐藏内容
点赞
  1. TroubleShooter.exe说道:
    我觉得很好
  2. 陈俊泽说道:
    我觉得超级棒
  3. cjz说道:
    我期待下一篇
  4. 她脚踝银铃响了说道:
    通俗易懂

发表评论