noip(全国青少年信息学奥林匹克联赛)自学NOIP(C++)NOIP

C++(竞赛)【4】

2019-07-14  本文已影响10人  C入禅

<-上一篇 下一篇->


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


简单的计算操作

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

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

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

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

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


效果图

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

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范围
上一篇 下一篇

猜你喜欢

热点阅读