01 - CS50 Introduction & Computer Basics

01 - CS50 介绍 & 计算机基础概介

  1. 二分法的实例介绍。

  2. scratch:古老的 GUI 编程工具。

哈佛的学习环境是真的好啊...一门课 300 多人学习环境,搭配 20 几位 TA...比国内好些大学的学习氛围好多了...我觉得主要还是老师的激情!比较有 Fire~

1. 算法引入 & 数据存储

1.1. Google 贝叶斯检测算法

Google Mail 的垃圾邮件筛选算法。很有启发性...原来国外真的是有学生主动举手提问的...老师也会耐心解决学生的问题...

1.2. 数据存储

01 的 二进制计算机内部存储方式。比较基础但是够用。甚至还有 ASCII 码...可以说涉猎的很广。

磁盘中的存储:一旦写入就不会被轻易修改和破坏。

1.3. 计算机存储区

text

binary file 二进制存储文件

initialized data

uninitialiized data

heap

👇

👆

stack

堆内存:临时内存...会造成堆栈内存灾难

actually:segmentation fault!

2. 程序设计 & C 语言 与 源代码

基础中的基础,相信没人会睡觉,

2.1. 程序设计

讲解了伪代码的设计。没有直接引入判断结构...循环结构...而是写成一段话...想必埋下了兴趣的种子。

最后是一些简单的程序设计介绍。Printf 了 Hello World!

2.2. C语言源代码

  • 程序块结构...

  • 关于程序缩进...一些尽量要避免的,和一些影响微小的要求。

  • 如何解决程序的精度问题?

2.2.1. 算法结构

变量定义和初始化,命名规则介绍。...以及...强制类型转换

  • 循环结构 loops

    • while

    • for

    • do...while

  • 判断结构

    • if

    • switch

main函数的介绍

2.2.2. C 语言 Strandard Library

  1. printf 输出函数库

  2. math 数学库

很多基本的库都有覆盖讲解。

2.2.3. 哈佛的 CS 50 云主机...

连接远程主机终端。

先进而不乏经典,这是目前看下来最大的感受。

  • 甚至花了 20min 讲解了云主机相关的操作...ssh之类的。我入门的时候完全没人教...

2.3. 编译器

命令行下直接带着编程。

  • 使用的nano工具...后面还会讲到vim...简直遥遥领先啊

  • gcc编译指令gcc hello.c默认会生成a.out

  • ./a.out运行这个文件

  • 冷知识:上面这些操作我这个大二寒假才学会...

  • make穿插讲解了一键编译的make工具,这个我至今还没学...(25/2/19),虽然听说过,我也还没到要用的地步,后面慢慢学吧

Command-line arguments

  • int main(int agrc, char *argv[])

3. 函数

典型的黑盒子比喻。简单而不失风趣。

3.1. 参数 与 返回值

输入 & 输出

input 和 return

  • return 0 通常会代表成功

初步讲解了提升代码的健壮性的思想...

3.2. 函数原型、函数声明、函数定义

  • 函数原型:主要用来进行类型检查,确保函数调用时参数类型和数量的正确性。

    • 函数原型一般写在主函数前/后。

  • 函数声明:告诉编译器函数的接口信息,以便在编译时进行链接。

    • 在复杂的程序中,一般写在文件.h文件中,并会在main或其他.c函数中被引用

  • 函数定义:是函数的具体实现,包含函数体,告诉编译器函数的具体行为。

    • 在复杂的程序中,一般写在文件.c文件中

3.3. 函数的局部变量 和 全局变量

Scope:Each variant has own scope. It depends on how you define it.

经典的例子:swap 函数要传入变量的指针,而不是传入值参副本,这样不会引起任何变化。

3.3.1. 谨慎的使用全局变量

如果你使用其他的 Library,比如谷歌的STL...如果不凑巧谷歌使用了同名的全局变量,那你的程序将会产生不可估量的错误。

4. Array

数组,注意几个问题:

  • 数组的越界访问问题

  • 数组 与 * star 的关系

字符串 和 字符数组、普通数组、数组数组(二维)

字符串的结尾必须是\0

5. 穿插

这门课还会涉及其他的简单代码

Java 和 PHP、C++

讲解了一些基本文件的内容...现在看来有点吊,是逐步演示的,这门课老师真的有用心在备课。讲解真的胸有成足。

5.1. 练习

找了几个简单程序复习上节课讲的循环结构等等,还介绍了人类检查代码的步骤...俗称 debug。

5.2. 学习方法

人们总是浪费很多时间在他们不熟悉的事情上,他们喜欢单打独斗...而不是合作...

  • 专业的事情留给专业的人做就好

  • 同时也要培养自己称为某一领域的专业人才,而不是全才...

Last updated