SCAU学习笔记 - 校科联自科二面通关指南
写在前面
Ciallo~(∠・ω< )⌒☆ 相信点开这篇文章的25级新生们大概率也是在参观了我们学校的创客空间之后对校科联这个组织心生向往,从军训结束到十一假期结束,你就得学超级多东西,因为想进自科的人大有人在,所谓的“零基础也能进”不能说百分百纯谎言吧,只能说零基础想进真的是很困难的
学长我作为栽在算法三面的卑微老灯(据野史记载还是因为长得丑被yss刷掉的) 在上面的简单劝退之外,还是希望各位小朋友不要跟我一样盲目学习,故写此通关自科系列。
系列分为两部分,这一部分是到二面为止的内容,下一部分则是三面算法方向的内容(其他方向我也不会),具体而言你需要在十一前最后一个周末掌握大部分才能通关,到时候是集中在教四的大教室进行一次闭卷考试的形式(至于一面其实除非你骂面试官基本都能过 ,甚至面试官都是招的志愿者,说不定你还能碰到我 )
那么具体要学习哪些东西呢,其实基本上你只需要把C语言的语法知识掌握扎实就足以通过了,但是以往年经验,二面题会有很多坑,所以为了弥补你在前面掉坑丢的分,我们姑且还是需要再掌握一些简单的算法和数据结构相关知识的,你可以点击蓝色链接提前解锁窝农后续对应专业课的学习,也可以在本文直接对这几个模块进行简单的速通
顺带一提,作为某不知名前任部长的acm队友和某不知名现任部长的每日出勤任务npc,Swan大人这里姑且有一些往年真题,后面会穿插在正文中作为例题给各位看一看
好了,前面废话说的已经很多了,让我们直接开始正文部分吧
C语言语法基础
这一部分一般是出现在试卷的前15或20道选择题,第一道程序改错,第一道程序设计题,这部分的分是必须优先拿满的,理论上拿满已经足够你通过自科二面的笔试的了,不要纠结于按顺序写完题目,优先把这些题写完
好了,现在你可以掏出学校开学时发的陈湘骥老师编写的《高级程序语言设计》开始学习了
变量
变量类型
为了速通,在这里,我们只需要知道int
、long long
和long
这些都属于整数类型,顾名思义,就是只能存整数,在一个代码里面这些类型的变量始终为整数,就算用了除法操作,也会默认向下取整
而double
和float
属于实数类型,他们允许存储带小数点的数
至于bool
则是只有是和否两种类型的变量,他的名字就叫布尔型
还有一些数据类型比如enum
枚举类型,在开发的时候比较常用
注意,string
是C++的数据类型,不是C语言数据类型!
例1(2024年二面)
这题就是很裸地在考我们上面刚说的概念,很明显选D
赋值操作
C语言中首先大家都完全能看懂的赋值操作就是一个变量等于一个算式这种形式,如a=1+1
、b=2
、c=2.0
特殊地,我们允许有i+=2
这样的形式,其实意思也就是i=i+2
,而如果对i加1的话还可以更简便地写为i++
或++i
,这两种写法略有不同,但是自科很喜欢考,我们放在后面细说,先看几道简单的例题
例2(2024年二面)
我们一行一行来看这个代码
首先,int pad=5
是定义了一个叫pad的int类型变量,初始值为5
接下来,pad++
是我们上面说的pad=pad+1
的简写,所以这个时候pad变成了6
再然后,pad+=3
也就是pad=pad+3
,现在pad的值是9
接下来,printf
可以看成一个固定格式,就是在这个时候输出pad的值,所以输出为9,选D
至于后面的pad-=2
,确实是pad=pad-2
进行了这样的操作,但是只是在代码内部改变了pad的值,并没有输出,注意题目问的是输出结果而不是pad的值,所以不是7
然后,我们来讲讲i++
和++i
的区别,其实如果他们单独出现并加上一个分号那么其实是毫无区别的,区别在于出现了a=i++
这样的组合式子,首先你要知道他是合法的,所以那种选错题不要选他
对于a=i++
,其实是两步式子合在一起的简写,分别是a=i
和i++
;而a=++i
则操作顺序相反,我们来看一个例子
int i = 5;
int result = i++; // result 是 5,i 变成 6
//-------------------------分界线---------------------------//
int i = 5;
int result = ++i; // result 是 6,i 变成 6
例3(2023年二面)
那么我们分析的话就是说sum=pad=5
,那么sum和pad自然就都是5
接下来pAd=sum++
,也就是说现在pAd是5,sum是6,接下来的两次++操作自然就把pAd变为了7
**但是!**注意在C语言里面的变量名我们是区分大小写的,所以pAd和pad其实不是一个东西,最后输出的pad的值那就应该仍然输出5
在C语言中,除了代火熟悉的加减乘,还有一些特殊的运算。首先就是C语言的除法操作,如果是对上面说的实数型变量进行除法,那么一切正常,但是对于整数型变量的除法是固定只保留整数部分的,并非四舍五入。
除此之外就是取余运算%
,顾名思义,a%b
计算的结果就是a整除b之后得到的余数。
然后就到了判断运算,即类似3>4
的式子,这个式子很明显是错误的,所以在C语言中计算的结果为0,相反地,4>3
的结果为1。特殊地,我们需要知道==
两个等号连起来代表的是判断的等于符号,即4==4
计算的结果为1,4==5
计算的结果为0;而!=
表示不等于的意思,即4!=5
返回的结果为1。
有的时候还需要注意这些符号之间的运算顺序,翻开高程课本的附录部分就有,没有括号的情况下记得按规定的运算顺序计算。
例4(2024年二面)
我们一个一个来看,a%b=2,然后就是2/d=2,答案就选A
对于B,首先b-d=1,所以1==2
的计算结果应该是0,所以x=0
对C,注意我们是整数型变量,所以3/2=1
,不要四舍五入
对D,首先计算b>d
也就是3>1
,计算的结果为1,所以x=c+1=3
还有一些运算符,没有考察过计算,但是会考察定义,!
运算符是取非,具体来说!0=1
,!9=0
,任意正数取非都是0,任意非正数取非都是1,属于逻辑运算符。还有按位运算系列,也就是^
,&
和|
,具体计算规则我们本文就不详细介绍了,只需要知道他们是类似于加减乘除的运算符即可。
例5(20204年二面)
注意<
和之前提到的==
之类的属于关系运算符,和逻辑运算符要做区分
赋值合法性
遵循一个原则,那就是赋值等号左边只能是变量,不能是数字或者计算式
例6(2024年二面)
首先A是合法的,我们来看其他几个选项的问题都出在哪里
对B,我们看到第二个等号的左边是一个式子a=b
,所以不合法
对C,我们看到第二个等号(这里我们默认值单等号)左边是b==c
,我不管他算出来是1还是0,反正是个数字,所以不合法
对D,等号左边是a+b
,我也不管他算出来是多少,反正是个式子,不合法
例7(2023年二面)
首先A是合法的,所以我们不多说
对B,两个等号左边都是变量,所以是合法的,但是没加分号,C语言语句后面必须加分号,所以坑点在这里,C也与B同理
对D,则是因为将数字强制转化为int类型的时候这个int也要用括号括起来k=(int)(a+b)
接下来我们需要了解到的是赋值操作也是有返回值(可以理解为运算结果)的,比如z=4
除了能把z变成4,混杂在式子里面还可以算出4的答案,即a=(b=4)
那么最后a也等于4
还值得一提的就是逗号表达式,就是无脑选括号里面最后一个数作为返回值
例8(2023年二面)
对A,结果就是y,也就是12
对B,首先计算z=x
,返回的结果应该是11,所以就变成了(11,12)
,结果为12
对C,先计算(x,y)
,结果为12,然后计算z=12
,结果为12
对D,先计算x==y
,结果为0,然后计算z=0
,结果为0