C++(竞赛)【4】

作者: C入禅 | 来源:发表于2019-07-14 17:01 被阅读10次

<-上一篇 下一篇->


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我在后面的文章中会有解释的

int范围
  • 你以为这就完了?不不才刚刚开始呢!!!!
    小茗同学的练习册上又不是只有加法,还有减法除法乘法一元二次方程,他要让我们帮他都搞定(有没有想打他的冲动?),冷静冷静,我们慢慢地,一个一个的来,写完再去打他
  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
看了这一组数据的测试,肯定有一个疑问:减法不像加法全是结果正整数,那么如果遇到了负数改怎么办?直接跑就是了,只要不超出int的范围就行了,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[1]的范围!!!这一点在以后的竞赛题目中会有非常多的体现。

运行
在输入的情况下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;
}
我们把代码拿来跑跑看: 结果

等等!!

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;
}

真的完了,转下一篇吧。。。


关注我的专题我们一起努力


<-上一篇 下一篇->


  1. int范围

相关文章

  • C++(竞赛)【4】

    <-上一篇 下一篇-> emmm.......写了几天暑假作业,现在整个人都飘了,见谅还有就是觉得自己只有对...

  • 用快速幂运算求斐波那契,时间复杂度降到O(logn)

    思路来自《挑战程序设计竞赛》 可运行的C++代码如下

  • C++(竞赛)【11】

    <- 程序调试 小的点【4.终章】 Aout 学习笔记那些事情: 上课笔记不好,下课学到你娃哭。这大概是我在高中混...

  • C++(竞赛)【12】

    <- 简单笔记攻略 Markdown简单入门操作 环境需求: 我们需要一些Markdown的编译器: 线上:1.简...

  • C++(竞赛)【14】

    <- while的循环体系【1】 while的循环体系【2】 我们之前的while是用结果来限制循环次数的,那么问...

  • C++(竞赛)【8】

    <- switch 趣谈 大战Dev-C++ -> 小的点【1】 之前的东西已经学的有一点了,但是有很多...

  • C++(竞赛)【9】

    <-注释略解 小的点【2】 想必大家都对信息学奥赛要求的编译器丑哭了吧,(而且非常不好用),我们平时还可以用VS来...

  • C++(竞赛)【7】

    <-if 那些事 程序的控制结构【1.2】 switch语句的开心时光: 有了上一篇的快乐想都不想,今天一定是sw...

  • C++(竞赛)【15】

    <- while的循环体系【2】 while的亲兄弟啊——do-while【1】 前面我们刚刚看了while的一系...

  • C++(竞赛)【16】

    <-while的亲兄弟啊 循环的嵌套 终于要结束这该死的循环了,是不是很兴奋?先兴奋一下吧(我才不会告诉你前面只是...

网友评论

    本文标题:C++(竞赛)【4】

    本文链接:https://www.haomeiwen.com/subject/wgcikctx.html