子曰:“
工欲善其事,必先利其器
。居是邦也,事其大夫之贤者,友其士之仁者。”
看到这里,想必是对ACM感兴趣的。而想要“善其事”,则必然要先了解必要的工具。对于ACM,我指的自然就是编程语言。就目前看来常用的语言有C/C++、JAVA、PASCAL等,其中C/C++就个人而言更为常用,也广泛应用于其它领域,所以这里重点以C/C++作为入门讲解。
然而,正文却依旧不能继续,有一点非常重要。
“语言毕竟只是算法竞赛的工具——尽管这个工具非常重要,却不是核心。”这是刘汝佳《算法竞赛入门经典(第2版)》前言中的一句话。我感觉对于ACM入门者来说非常重要,这也是很多人半途而废的原因之一。可能很多人认为ACM便是研究编程,但是我不得不说,语言入门之后离真正的算法程序还有一段距离。或者说,如果只是为了学习语言,那么ACM可能会让你失望,因为这并不是ACM的本意。甚至于在ACM中的一些常用写法,在做应用项目时可能会进行避免,因为这是两种不同的编程要求。
但我相信,在ACM都能学好,其它领域怎么会学不好呢?
所以人工重要的事情重复三遍。
但我相信,在ACM都能学好,其它领域怎么会学不好呢?
所以人工重要的事情重复三遍。
语言毕竟只是算法竞赛的工具——尽管这个工具非常重要,却不是核心。
语言毕竟只是算法竞赛的工具——尽管这个工具非常重要,却不是核心。
语言毕竟只是算法竞赛的工具——尽管这个工具非常重要,却不是核心。
我个人对C语言的看法,所谓一门“语言”,它有自己的“语法”与“单词”。我们要做的,就是遵循它的语法,用它提供的单词组合成自己“文章”。
而作为一门实用性的学科,我主张还是“学以致用,以用促学”,所以先来看一篇“文章”。
|
|
这段简单的代码展示了C的一些基础结构,下面逐句分析。
第一行“#include<stdio.h>”按照我们的语法喜欢,很明显这句话要分成两部分来看“#include<>”和被尖括号括在里面的“stdio.h”。这一句代表声明一个“stdio.h”的头文件,什么叫头文件……继续看下面。
按照同样的思路,很显然下面是一个 int main(){ }和被大括号括在里面的一些句子。这里的main被称为主函数,程序的开始便是从main()函数为起点的。
什么叫函数?-.-||
数学里的函数见过吧……$f(x)=x+1$ 这个函数是什么意思呢,我们给这个函数一个“参数”x,那么它便会给我们一个“返回值”x+1。比如我们给个参数3,那么它便会告诉我们4,这就是函数。
同样的,对于C语言来说,这些函数我们可以给它们传递参数,它们也会有返回值,而返回值具体是什么,自然也是可以有我们来控制。这就是编程的魅力,就是那种,“想显示什么结果,你说的不算,要看我怎么写”的霸气。
言归正传,对于main()函数而言,我们看到它前面有个int,这就是代表的它的返回值的类型,而具体是什么类型,这将在后面数据类型中详细讲。(PS:int又被称为整型哦~)
那么main()←这个括号呢,就如$f(x)$,这个括号自然是让你传递参数用的,而main函数作为一个特殊的“主”函数,它的参数可以省略不写。
那你想写……那么它的参数形如“int argc,char *argv[]”……
这都是啥啥啥……
-.-所以我不是很想提前说这么多的嘛,你先默认把它理解为空好了。
这样参数的问题也解决了,怎么控制返回值具体是什么呢。看一看main函数括号里面,以小学英语水平,可以明显发现一个单词“return - 返回”,那么就是翻译为返回0。
-0是啥?
-整数嘛。
-所以是什么类型?
-整型嘛。
-所以返回值类型怎么写?
-int嘛。
C语言就是这么简单。 -.-
接下来就只剩下最后一句话了“printf(“I wanna be the guy!")”,很明显也是printf()与“I wanna be the guy!”组合。上面学习了函数的基本结构,那么这个printf后面也是有个括号,它与函数有没有关系。很显然我这么说了,它必然是有的。
按照刚才的理解,括号里面的"I wanna be the guy!“也就是它的参数了,那么这个函数有什么用呢。
print-f继续按照小学英语理解,明显和印刷、打印有关系,所以这个函数也是就把它的参数“I wanna be the guy!”“打印”到屏幕上,这叫格式化输出。当然,具体怎么用,还需要进一步学习。
我们知道,你如果想要用一个函数,你应该先把这个函数定义好。
还是比如你输入x,想让函数返回给你x+1,那么这个函数就应该定义成$f(x)=x+1$。 可以这个printf在哪里定义的呢,为什么写上这一句话,计算机就知道把它的参数打印到屏幕上。这个时候我们再来看程序开头的那一句“#include<stdio.h>”,突然意识到了什么.jpg。
没错,这个被叫做头文件的东西就包含了C语言一些默认的“标准库”,需要的时候只需要先声明你想要用哪些头文件,然后在你的程序里就可以调用它的函数啦(当然不只是函数,还有其他的一些东西)。
声明方法就是#include<头文件名>。
stdio.h就是包含了标准输入输出的一个头文件,也是常用到作为模板的一个头文件。
更多的头文件在后面接触到的时候会继续说。
下面就可以再来重新看一下这个代码了,很显然,这个程序可以完成把“I wanna be the guy!”这句话输出到屏幕的这个任务。
-.-好,问题来了,怎么运行。
这一部分我不是很想详细说,毕竟我感觉讲太详细是件不负责任的事情,因为剥夺了自己探索的乐趣。
所以这里只提供一个下载链接,其余的……
Dev-C++(C++开发工具)V5.11.0中文免费版(不可调试)
接下来,怎么知道自己的程序标不标准,怎么训练自己的编程能力。
这里涉及到ACM常用的一个训练工具,OnlineJudge。
下面是这一个程序的题目,在题解里会详细介绍OJ的用法: