老师开始时展示了一个饼干人爱情故事——去年一个学生编写的scratch项目,告诉我们编程要一步一步来最终达成目标而不是直接完成整个项目。老师大致讲解如何编写这样的程序,点出一些核心思想,一步一步从单独的小零件开始,最终搭建出自己瑰丽无比的高楼大厦。
然后老师开始把scratch程序延伸到C程序来,展示给我们一个C的“hello world”的程序,(讲hello world的套路和the c programming language 上的套路好像)告诉我们printf的f是指格式化输出,然后用scratch中的loop联系到c中的while,以及指定循环次数的loop联系到c中的for循环,然后介绍了变量,int类型,布尔表达式,&&,数组等一些概念,并告诉我们需要一个编译器。
老师就在命令行上开始写程序,告诉我们要保存一个.c的文件,再用gcc执行会生成一个a.out文件,然后./a.out说明hello.c是生成在当前文件夹下的,按下回车后就会输出。再回到程序,介绍了头文件,介绍了main函数为程序的起点,介绍了大括号还有转义序列\n等等,并介绍了另外的一些命令行输出方式,-o hello hello.c,以及make hello,这样可以直接./hello按回车完成输出。然后因为每个人的机器不同,写的程序会有很多冗长的步骤,所以老师引出了在服务器上编程。
之后老师开始介绍函数,再给了cs50自己写的一些函数,老师用vim文本编辑器打开了cs云上的一些源代码,介绍了string类型(但是c语言中不是没有string么,只有c++有吧,这个应该是cs50.h里typedef的char*吧),并介绍了占位符。告诉我们一些思想,要用简明扼要的注释描述程序。之后介绍了cs50.h声明的一个封装好的函数GetString,会返回一个string。由一个编译错误告诉我们要在行末尾加上库,也就是 -lcs50。然后再通过比如不输任何字符之类,告诉我们要一丝不苟的检查错误,防止一些疏忽造成的安全问题。
老师接着通过一个同学关于字符串的问题,告诉我们字符串是一系列字符,这些在RAM中储存成一系列的ASCII码,由1和0组成。再通过同学问不同编译器之间的区别,老师向我们介绍了IDE,再稍微介绍了一些makefile。
然后老师介绍了ls,列表命令,列出了文件目录,cd是用来改变目录。
老师再介绍了%c,%lld等占位符和\n,\t(制表符)等转义序列。并举出以前老式打印机的例子,换行(\n)相当于翻纸,回车(\r)相当于将打印字的压印头移到最左边(以前我看翁恺老师讲的C也提到了这个例子),再讲了不同操作系统下,因为标准不同,换行保存在文件中的转义序列可能是\n,\r或是\r\n。
然后讲到字符串中要输出双引号必须前面加反斜杠,要输出反斜杠也是如此。
再介绍了一些数学操作符,+,-,*,/,以及%.然后因为c是直接访问硬件的,所以每个变量都要说明数据类型,这样才能分配相应的空间。一个char8比特也就是1字节,float 4字节,精度是有限的。int 32比特,longlong则是64比特。然后老师解释了c是没有bool类型的。然后解释了string确实是cs50提供的,其实就是char*。其实是一个地址,字符集在存储器中的位置。然后老师给了一张优先级的表。最后老师给了一个中心对称的图案,其实就是一个C语言源代码,最后输出了一个动态的漩涡,结束了这节课。
因为我C很熟悉了,这节课相当于复习,主要是更加熟悉了一些命令行方面的知识。