🔨Pixiv ID:66151276

简单的计算操作


emmm.......写了几天暑假作业,现在整个人都飘了,见谅
还有就是觉得自己只有对着电脑的时候才会平静下来
以上全是废话


上一篇我们就上手实践了一下在C++下的标准输出,但是在实际的题目或者项目中不可能是那么简单~~(弱爆了)~~的输出,我们今天就来看看在C++下的简单计算

  • 我编撰了一道很简单的题目:

题目:我们可爱的emmm.....小茗同学~~(绝对和我的名字没有关系!!!)~~因为在期末考试中的计算题一直出错被数学老师“温柔”的提了一个醒,所以Ta就“自愿”开始练习计算题了,但是我们的小茗同学多么的聪明马上就想到可以找聪明的你为他编写一个可以做A+B的程序(A,B从键盘输入,A,B为整数),那么请你试一试:

输入:1  2
输出:3
  • 题解:
    其实也不是什么大问题,把题目提炼一下:

    就是这一句话就行了,其它的都是废话那我打那么多干啥?
    现在我们开始吧:
    1. 我们应该怎么办呢?
    2. 我们当然是把数字输入进来,然后计算啊!
    3.所以这里我们就可以见到一个新东西“cin>> ”,Ta是C++中的标准输入,在#include<iostream> 里面的,注意不要把“>>”打成了“<<”或者“《《”。
    4.至于加法咋搞?当然是直接搞啊,直接打个+不就行了。

看到这里我相信有人就写出了下面的代码:

#include<iostream>
using namespace std;
int main()
{
	cin>>a>>b;
	cout<<a+b<<endl; 
	return 0; 
 } 

然后我们把这段代码拉出去编译一下,就会得到这个效果:

效果
效果图
  • 看吧直接就炸了,有错!!!为什么?那么我们就按照图片上的标号一个一个来说:
    1.就是那个红了的地方(当然你也可以改个颜色),就是你这段代码编译最开始无法进行的地方(很有可能不是错误点,以后你们会经常遇到)
    2&3.这个就是Dev-c++这个编译器给你的一个错误提示了:


    那神马东西是没有申明?

我们可以把我们输入到计算机内的数据都想象为放在一个个盒子里面,需要的时候拿出来用就叫做调用;而这些盒子就叫做变量;每一个盒子我们都要给TA取一个名字,就叫做变量名,我们还必须告诉计算机这个盒子叫什么,这就叫做定义或者申明,而且不同大小不同款式的盒子还有有姓吧,那就是数据类型,一个人要有名有姓而且还要户口登记,那么一个变量就要有变量名数据类型而且还要变量申明(至于有多少数据类型,我们以后分解,当然你也可以查查资料)

  • 所以我们要用两个int的变量a和b来储存我们输进去的值,还有一个同样为int的变量sum,来储存a+b的值。(当然可以不用sum,但是为了初学理解方便我们还是写一下)
    一些命名规范(不完整后面会有所补充,大家先看着):

1)使用能代表数据类型的前缀。 (如:int_a)
2)名称尽量接近变量的作用。(如:求和:sum)
3)如果名称由多个英文单词组成,每个单词的第一个字母大写。
4)由于库函数通常使用下划线开头的名字,因此不要将这类名字用作变量名。 (如i
5)局部变量使用比较短的名字,尤其是循环控制变量(又称循环位标)的名字。
6)外部变量使用比较长且贴近所代表变量的含义。
7)函数名字使用动词,如Get_char(void)
8)变量使用名词,如iMen_Number

下面就是参考代码(还是扒下来就可以跑的):

/*开头的三行就不用多做解释了,
有问题请看上一篇,
后面就不做解释了。 
*/ 
#include<iostream>
using namespace std; 
int main()
{
	//我们先申明三个变量a,b,sum 
	int a,b,sum;
	//利用cin从键盘读入a,b两个变量的值 
	cin>>a>>b;
	//计算出a+b的值sum 
	sum=a+b;
	//输出sum的值 
	cout<<sum<<endl; 
	return 0; 
} 

运行效果:
输入任意的整数,但是还是有一定的限制的,我们下面来谈
输入
回车!!!!!!
输出


我们算是完成了这一阶段


但是!!!

肯定有非常细心且无聊的小伙伴发现了一个问题,当输入的数据过大就会出问题:(就像下面一样)
错误输入
错误输出
竟然 ——

***算错了!!!!!!***这么大的两个数据加起来居然都是负的!!!

那是为啥?
这就是我上面提过的数据类型了,TA是那么的重要,我们后面的文章(毕竟我们现在在说计算)再聊。现在我们只需要知道int在32位的XP下是(int是有符号的!!!)至于为什么会算出来-2147418114我在后面的文章中会有解释的

  • 你以为这就完了?不不才刚刚开始呢!!!!
    小茗同学的练习册上又不是只有加法,还有减法除法乘法一元二次方程,他要让我们帮他都搞定(有没有想打他的冲动?),冷静冷静,我们慢慢地,一个一个的来,写完再去打他
  1. 减法分析:
    1.我们还是只有两个数据,所以我们直接把+改成-不就好咯。这还不简单
    2.那我就直接放代码了
#include<iostream>
using namespace std; 
int main()
{
	/*我们先申明三个变量a,b,dif
     a,b用来储存从键盘读入的两个变量
     dif用来储存a-b的值
    */
	int a,b,dif;
	//利用cin从键盘读入a,b两个变量的值 
	cin>>a>>b;
	//计算出a-b的值dif 
	dif=a-b;
	//输出dif的值 
	cout<<dif<<endl; 
	return 0; 
} 

输入1
输出1
3-2
看了这一组数据的测试,肯定有一个疑问:减法不像加法全是结果正整数,那么如果遇到了负数改怎么办?直接跑就是了,只要不超出int的范围就行了,

int是有符号的!!!


话不多说我们直接放图:输入2
输出2


  1. 乘法分析:
    1.我们还是只有两个数据,所以我们直接把+改成乘号×不就好咯。这还不简单(一定有人这样想的,而且还有可能上手了,但是一直在键盘上找不到×,最后历经千辛万苦终于在输入法里找到了)那就这样吧关门!放代码!
#include<iostream>
using namespace std;
int main()
{
/*我们先申明三个变量a,b,chengji
     a,b用来储存从键盘读入的两个变量
    chengji用来储存a×b的值
    */
	int a,b,chengji;
       //利用cin从键盘读入a,b两个变量的值 
	cin>>a>>b;
       //计算出a×b的值chengji
	chengji=a×b;
      //输出chengji的值 
	cout<<chengji<<endl;
	return 0;
}

一切都很完美?我们就这么顺利的完成了乘法?不不不,你还是太单纯了,你把代码放到编译器就会得到完美的错误
完美的错误
为啥?因为编译器不认识×!!TA只认识*在计算机里就是×所以我们只需要把代码改成下面这样:

#include<iostream>
using namespace std;
int main()
{
/*我们先申明三个变量a,b,chengji
     a,b用来储存从键盘读入的两个变量
    chengji用来储存a*b的值
    */
	int a,b,chengji;
       //利用cin从键盘读入a,b两个变量的值 
	cin>>a>>b;
       //计算出a*b的值chengji
	chengji=a*b;
      //输出chengji的值 
	cout<<chengji<<endl;
	return 0;
}

在输入和输出的时候依旧要考虑int的范围!!!这一点在以后的竞赛题目中会有非常多的体现。
运行
mrPIjP.jpg
在输入的情况下int依旧能够储存负值的!!!


3.除法分析:
没有什么可说的和上面一样的就是除号 ÷在计算机里面是/就行了。

#include<iostream>
using namespace std;
int main()
{
/*我们先申明三个变量a,b,shang
     a,b用来储存从键盘读入的两个变量
    shang用来储存a/b的值
    */
	int a,b,shang;
       //利用cin从键盘读入a,b两个变量的值 
	cin>>a>>b;
       //计算出a/b的值shang
	shang=a/b;
      //输出shang的值 
	cout<<shang<<endl;
	return 0;
}

我们把代码拿来跑跑看:
结果
mrPTnf.jpg

等等!!

2÷3=2/3=0.66666……这应该是我们正常的运算啊,为什么程序会给我们说答案是0?这不是明摆着坑我们吗?(其实吧我已经想坑小茗很久了)言归正传这是什么原理?计算的Bug?就被我们发现了?醒醒吧,不可能只是程序的数据不够严谨,在数据类型上面出错了!!

int数据类型里叫做整型是用来储存整数的变量盒子)当TA遇到带有小数的数据时,只会读整数部分,小数点后面直接丢掉(那么,丢掉的数据属于什么垃圾?)就会造成数据丢失,会造成程序的逻辑出现错误,所以请小心。下面我会把可以计算小数的代码放在下面:

#include<iostream>
using namespace std;
int main()
{
        /*我们先申明三个变量a,b,sahng
        shang用来储存a/b的值
        a,b用来储存从键盘读入的两个变量
        */
	double a,b,shang;
       //利用cin从键盘读入a,b两个变量的值 
	cin>>a>>b;
       //计算出a/b的值shang
	shang=a/b;
      //输出shang的值 
	cout<<shang<<endl;
	return 0;
}

然后我们就能得到有小数的结果了:
效果
那么这一部分就可以完工了!!!


剩下的就只需要写点题就好了:(我并不建议你们看了我的代码后再去写题,我只是想给大家一个参考的程序)

#include<iostream>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<a+b<<endl;
	return 0;
}

P1421 小玉买文具

#include<iostream>
using namespace std; 
int main()
{
    int a,b,c;
    cin>>a>>b;
    c=a*10+b;
    cout<<c/19<<endl;
    return 0;
}
#include<iostream>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<a+b<<endl;
	return 0;
}

数据类型

在上面我们多次提到了一个东西——数据类型
其实现在要谈的就是TA了

我们可以把我们输入到计算机内的数据都想象为放在一个个盒子里面,需要的时候拿出来用就叫做调用;而这些盒子就叫做变量;每一个盒子我们都要给TA取一个名字,就叫做变量名,我们还必须告诉计算机这个盒子叫什么,这就叫做定义或者申明,而且不同大小不同款式的盒子还有有姓吧,那就是数据类型,一个人要有名有姓而且还要户口登记,那么一个变量就要有变量名数据类型而且还要变量申明(至于有多少数据类型,我们以后分解,当然你也可以查查资料)

这个是我在上一篇文章里就提过的数据类型,下面有一个略微准确的定义:

使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当我们创建一个变量时,就会在内存中保留一些空间。需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。


  • 常量是有类型的数据,变量在某一固定时刻用来存储一个常量,因此也应有相应的类型。如整型变量用来存储整数,实型变量用来存储实数。变量的类型,可以是标准数据类型int、short、long、float、double和char等,也可以是用户自定义的各种类型。(其实吧数据类型就是变量的类型):
    ——(来自《信息学奥数一本通(C++版)》)
  • 对于基本的数据类型我们可以用以下的修饰词进行修饰:
    • signed(带符号)
    • unsigned(无符号)
    • short(短)
    • long(长)

      各操作系统可能会有差异,请用下面的测试程序查看自己电脑的情况:
#include<iostream>  
#include<string>  
#include <limits>  
using namespace std;  
  
int main()  
{  
    cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);  
    cout << "\t最大值:" << (numeric_limits<bool>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;  
    cout << "char: \t\t" << "所占字节数:" << sizeof(char);  
    cout << "\t最大值:" << (numeric_limits<char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;  
    cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);  
    cout << "\t最大值:" << (numeric_limits<signed char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;  
    cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);  
    cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;  
    cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);  
    cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;  
    cout << "short: \t\t" << "所占字节数:" << sizeof(short);  
    cout << "\t最大值:" << (numeric_limits<short>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;  
    cout << "int: \t\t" << "所占字节数:" << sizeof(int);  
    cout << "\t最大值:" << (numeric_limits<int>::max)();  
    cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;  
    cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);  
    cout << "\t最大值:" << (numeric_limits<unsigned>::max)();  
    cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;  
    cout << "long: \t\t" << "所占字节数:" << sizeof(long);  
    cout << "\t最大值:" << (numeric_limits<long>::max)();  
    cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;  
    cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);  
    cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();  
    cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;  
    cout << "double: \t" << "所占字节数:" << sizeof(double);  
    cout << "\t最大值:" << (numeric_limits<double>::max)();  
    cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;  
    cout << "long double: \t" << "所占字节数:" << sizeof(long double);  
    cout << "\t最大值:" << (numeric_limits<long double>::max)();  
    cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;  
    cout << "float: \t\t" << "所占字节数:" << sizeof(float);  
    cout << "\t最大值:" << (numeric_limits<float>::max)();  
    cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;  
    cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);  
    cout << "\t最大值:" << (numeric_limits<size_t>::max)();  
    cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;  
    cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;  
    // << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;  
    cout << "type: \t\t" << "************size**************"<< endl;  
             return 0;  
}

那么概念说这么多也没什么意义,就是大概了解一下有一个大致的框架,剩下的就靠实践来理解了。


  • 接着来解决小茗同学的问题:
    • 现在我们要帮小茗完成后面的更难的一些题目,在题目中出现了有小数点的数,本着帮人帮到底,送佛送到西的原则,我们就帮他解决这个问题吧。
      • 我们还是先来做加法的运算,首先来分析:

在运算上这个的需求和我们之前写过的那个程序是一模一样,怪就怪在TA是有小数的运算: 那我们就直接定义一个可以装小数的变量就行了啊

  • 我们现在来选择类型,稍微选择一下我们可以得到:
  • 那就好了嘛,在没有准确的精度和数据要求时候我们就随意在这三个里面选就是了,建议使用doubleTA比fioat更精确,在相同的范围内所占内存仅为long double的一半,当然还是要注意一些题目的要求不能盲目自信
    那么剩下的就和之前一样了。
    加法:
/*开头的三行就不用多做解释了,
有问题请看上一篇,
后面就不做解释了。 
*/ 
#include<iostream>
using namespace std; 
int main()
{
    //我们先申明三个变量a,b,sum 
    double a,b,sum;
    //利用cin从键盘读入a,b两个变量的值 
    cin>>a>>b;
    //计算出a+b的值sum 
    sum=a+b;
    //输出sum的值 
    cout<<sum<<endl; 
    return 0; 
} 

如果不想定义三个变量也可这样:

/*开头的三行就不用多做解释了,
有问题请看上一篇,
后面就不做解释了。 
*/ 
#include<iostream>
using namespace std; 
int main()
{
    //我们先申明两个变量a,b 
    double a,b;
    //利用cin从键盘读入a,b两个变量的值 
    cin>>a>>b;
    //输出a+b的值 
    cout<<a+b<<endl; 
    return 0; 
} 

这样写是因为c++中的输出语句中是允许有表达式的,看个人喜好而定吧。

  • 剩下的减法,乘法,除法就同理可得了吧
    <就只是把变量的申明从int改为double>
    代码的话还是贴在下面:
    减法:
/*开头的三行就不用多做解释了,
有问题请看上一篇,
后面就不做解释了。 
*/ 
#include<iostream>
using namespace std; 
int main()
{
    //我们先申明两个变量a,b 
    double a,b;
    //利用cin从键盘读入a,b两个变量的值 
    cin>>a>>b;
    //输出a-b的值 
    cout<<a-b<<endl; 
    return 0; 
} 

乘法:

/*开头的三行就不用多做解释了,
有问题请看上一篇,
后面就不做解释了。 
*/ 
#include<iostream>
using namespace std; 
int main()
{
    //我们先申明两个变量a,b 
    double a,b;
    //利用cin从键盘读入a,b两个变量的值 
    cin>>a>>b;
    //输出a*b的值 
    cout<<a*b<<endl; 
    return 0; 
} 

除法:

/*开头的三行就不用多做解释了,
有问题请看上一篇,
后面就不做解释了。 
*/ 
#include<iostream>
using namespace std; 
int main()
{
    //我们先申明两个变量a,b 
    double a,b;
    //利用cin从键盘读入a,b两个变量的值 
    cin>>a>>b;
    //输出a/b的值 
    cout<<a/b<<endl; 
    return 0; 
} 

有问题直接给我发邮件xiemaths@gmail.com或者xyh798061533@163.com
QQ:2385708107
ZWT大佬QQ:1259249107
LYT大佬QQ:1622956497
(周末统一回复,原谅高二狗的苦)