百合文库
首页 > 网文

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

2023-04-02编程Ccpp 来源:百合文库
放学后,刹那直奔部室,开门,便见到恼羞成怒却又有些梨花带雨的凛音以及旁边笑岔气的久远。见刹那进了部室,久远补刀:
“刹那啊,你说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
“看看上面这些数能不能正确输出结果哟~”
刹那和久远高高兴兴地走出了活动部室。
凛音依旧在那跪搓衣板。

猜你喜欢