欢迎光临散文网 会员登陆 & 注册

如何用轻小说的方式学C++(三) 天秤(下)

2019-08-03 00:54 作者:汐留楓Channel  | 我要投稿

放学后,刹那直奔部室,开门,便见到恼羞成怒却又有些梨花带雨的凛音以及旁边笑岔气的久远。见刹那进了部室,久远补刀:

“刹那啊,你说100升水和100升油哪个重?”

“诶?水的密度比油大吧,所以肯定水更重啊?”

“然而你的师傅似乎不这么认为。那刹那,100升酱油和100升油哪个重?”

“酱油密度大于水大于油吧,肯定酱油更重啊。”

“你的师傅似乎认为酱油就是油呢。”

“够了!!!闭嘴!!!”凛音咆哮。


“那么我们今天就开始写比较程序吧。”

#include<iostream>

int main() {

    int a,b;

    std::cin>>a>>b;

    if(a>b) {

        std::cout<<a<<">"<<b<<std::endl;

    }

    else if(a==b) {

        std::cout<<a<<"="<<b<<std::endl;

    }

    else {

        std::cout<<a<<"<"<<b<<std::endl;

    }

    return 0;

}

int a,b;

“刹那还记得int是啥吗?”

“整数。”

“对,整数。a和b是定义的变量,专门存整数的。”

“那变量不能存其他的东西吗?”

“C++是一个强类型的语言。无奈,你一旦有int a;后,a只能存整数而不能存其他的东西了。”


“接下来是下一行,和std::cout输出类似,std::cin从黑框框里面读两个整数进来,给a和b,为什么是>>符号就等着以后再说吧。”

(不懂)

“比方说我现在写一些东西,100 200 300 400,就可以把这看成一个流。”

(就当它是这样吧。)

“那我不就可以读入两个整数到a和b了嘛。a是100,b是200。”

“那300和400呢?”

“在缓冲区留着呗,等之后再读数据才会读进来。”

(似懂非懂)


“接下来是今天的核心——if语句。”

“喔喔!”

“刹那有没有曾经后悔过什么?”

“唔——有哟。”

“诶?比如?”

“当初不该好奇打开这个活动部室的门~”

咳——凛音喷出一口老血。

“好了好了开玩笑的啦~这里挺好的,而且还学了不少的东西呢。”

刹那摸了摸梨花带雨的凛音的头。“なでなで”

“嗯...比如说之前不小心游戏氪金氪多了,这个月生活费有点吃紧呢。”

“诶?刹那酱缺多少钱我垫着?”

“啊没事,刚好最近要减肥,少吃点就少吃点吧。”

“咳咳。if的意思就是,如果怎么怎么样,就怎么怎么样。”

“这不是废话吗?”

“if后面跟一对小括号,里面写着一个表达式;后面再跟一对大括号;当且仅当表达式结果不为0的时候执行大括号里面的程序。”

“a>b这种也算表达式吗?”

“说出来你可能不信,a大时表达式值是1,a小于等于时表达式值是0。”

“简单粗暴的1吗?”

“嗯。刹那知道‘非’运算吗?”

“嗯,是那个真的非是假,假的非是真?”

“那么,130的非呢?”

“诶?...0?”

“bingo~那0的非呢?”

“...1?”

“流石吾徒~”

“诶嘿嘿~”


“表达式之后会慢慢说,目前先学 > >= < <= == +-*/ 运算就行了。注意,运算也是有优先级的呢,比如5+3*2是11而不是16哟。个人建议,除去一眼就能看出来的优先级外,其他的都还是用小括号括起来。”

“呃凛音酱啊,这个==是什么东西?为什么有两个等号?”

“流石吾徒~盲生你发现了华点~那我先问,如果要给a赋值应该怎么写?”

“诶托,a=100; 这样?”

“那判断a和100是否相等呢?”

“a=100...哦!!符号冲突了!”

“嗯。所以,以后比较大小的时候可以写100==a哟~把常数写左边。”

“诶?为什么?”

“你写错符号试试?”

“100=a...哦!!不可能给一个常数赋值呢。”


“扯得有点远了,我们回来。第一个if之后,后面又跟着了一个else if对吧?”

“嗯。”

“很简单,如果不满足第一个if却又满足第二个else if后面的表达式条件的话,会执行这个里面。最后的else则表示如果前面的条件都不满足,就执行后面大括号内的语句。”

“else if或者这个else都是必须的吗?”

“不不不。你可以一个else if或者else都不写,也可以一个if一个else if而没有else,亦或若干个else if。但是要注意,你最多只能有一个else。当然,如果你有多个if就相当于是多个分支了。”

(似懂非懂)

“总而言之以后还有复杂的逻辑,到时候再说吧。这一次只有一个if-else if-else。”

(点头)

“那么吾徒哟,写一个找出三个数最大的那个数的程序吧~”

“...诶?”

“不要感觉很难,你先自己仿照着这个程序扩充一下?”

刹那打开编辑器,开始敲起了代码。

#include<iostream>

int main() {

    int a,b,c;

    std::cin>>a>>b>>c;

似乎一切顺利,然而刹那突然犯了难:“凛音酱啊,有没有什么运算可以表示a大于b同时a大于c呢?”

“有的啦~是 && 号。”

“就是 ‘and 与’ 吗?为什么要打两个&号呢?”

“因为有一个按位与用的是一个&号。那个你暂时用不到,你用这个就行。”

“好~”

    if(a>b&&a>c) {

        std::cout<<a<<"最大"<<std::endl;

    }

     else if(b>a&&b>c) {

          std::cout<<b<<"最大"<<std::endl;

    }

     else {

         std::cout<<c<<"最大"<<std::endl;

     }

     return 0;

}

“写好了~”

“嗨~摸摸头。”

“~~~今天可以结束了吗?”

“可惜你的程序是错的~”

“好的谢师傅...诶?错的?”

“你输 1 1 0 进去试试。”


>> g++ 1.cpp

>> ./a.out

1 1 0

0最大


“噗——”刹那喷出一口老血。随后重新看了一下自己的代码,发现了问题。

“那凛音酱,这么改呢?”

     if(a>=b&&a>=c) {

         std::cout<<a<<"最大"<<std::endl;

     }

     else if(b>=a&&b>=c) {

         std::cout<<b<<"最大"<<std::endl;

     }

“这次就对了。”

“~诶凛音酱你这里的程序...”

“啊,是另一个写法,你可以看一下。”

#include<iostream>

int max(int a,int b) {

     if(a>b) return a;

     else return b;

}

int main() {

     int a,b,c;

     std::cin>>a>>b>>c;

     std::cout<<max( max(a,b) , c)<<"最大"<<std::endl;

     return 0;

}

“等等凛音酱,你这个程序...信息量有点大。”

“我还没用a>b?a:b呢。”

旁边的久远看不下去,上来就用纸扇狠狠扇了凛音一巴掌:“学了点东西就开始跳,你给我来个编译时期堆排序啊?”

凛音(土下座):“我错了~”

“跪搓衣板到我讲完这个程序。”

“诶?!”


久远:“那么我来系统地解释一下这里。刹那你知道过程的吧。”

“嗯,之前讲过。”

“和main一样,max就是个过程。输入两个整数a和b,输出较大的那一个。”

“我看max后面的大括号里面有两个东西,是参数吧?”

“对。”

“叫a和b的参数?”

“这里的参数你可以这么理解。我们都学过函数。f(x)=2x+3的话,那么f(3x+1)=2(3x+1)+3=6x+5,用实际参数替换形式参数。”

(懵逼)

“很显然。max(a,b)不是会得到一个更大的那个数对吧?”

“对。”

“这个更大的数作为a,而c作为b,再次调用max过程。”

(似懂非懂)

旁边的凛音用怨念的眼神盯着刹那,明显是搓衣板跪不住了。

然而并没有什么卯月。

“简而言之就是替换。”

“替换?”

“我举这么个例子:”

int div(int x,int y) {

    return x/y;

}

int main() {

    int x=100,y=200;

    div(y,x);

    return 0;

}

“刹那你认为div(y,x)结果是多少?”

“呃,y到上面是x,x到上面是y,那div(y,x)=div(200,100)=2吧?”

“对,就是这么换的。”

“哦!”(光然大语)

“等等——if语句的小括号以及表达式之后,不是要大括号吗?”

“要怪就怪你的师傅吧。准确而言,后面是跟一条语句的,所以可以直接写一条‘return a;’。当有多条语句的时候,则使用大括号,将这多条语句‘打包’成复合语句,也就是有多行(当然单行也行的)的时候需要使用大括号。”

“诶,还挺自由的呢。”

“就是太自由了才会有一堆破事呢。”

“诶?”

“比如过于自由,写出诸如:”

int expression1=0,expression2=1,var1=0,var2=0;

if(expression1)

    var1=100;

    if(expression2)

        var2=200;

“这样下来后var1和var2分别是多少?”

“呃,expression1是0,所以不会执行到里面的语句...所以最后都是0?”

“No No No,这其实是两个并排的if,所以var2最后是200。”

“诶?”

“但是打上括号以后就不一样了:”


if(expression1)  {

    var1=100;

    if(expression2)

        var2=200;

}


“这个样子的话就和你说的是一样的,不会执行到里面的语句。”

“哦哦哦。”

“那么,今天的作业。”

“哦...诶?”

“再不搞快点你的凛音酱的腿就要废了哟~”

“诶好好,作业是什么?”

“输入3个数,输出从大到小顺序的结果。”

“诶不是挺简单的吗?”

“p.s.:写完程序以后试一下这些数:”

3 3 3

3 3 2

3 3 4

2 3 3

4 3 3

3 3 2

3 3 4

“看看上面这些数能不能正确输出结果哟~”


刹那和久远高高兴兴地走出了活动部室。

凛音依旧在那跪搓衣板。

如何用轻小说的方式学C++(三) 天秤(下)的评论 (共 条)

分享到微博请遵守国家法律