Harvard CS50 学习笔记(一)
目录
摘要
Harvard CS50 学习笔记(一)。
1 C
1.1 Lecture
1.1.1 IDE
- CS50 用了网页版VS Code 解决学生的环境问题,非常聪明的做法。我觉得这可能是之后的趋势,云开发。因为本地开发也要连服务器,不如直接服务器开发,一个账户一个终端,互不影响,不担心代码丢失,也无所谓电脑,有浏览器就行,也不用下载不用安装,还省空间,甚至不用买高配电脑了,就像Windows的Office套件一样。搜了一下,现在不少人已经在做了。
|
|
- 要引入
Header Files
(头文件),类似于Java
中的包。#include <stdio.h>
(stdio = standard io
) - 返回值,
main()
(主)方法(函数),参数,老生常谈。 C
中默认没有string
(字符串)类型。C
中get string()
函数输出变量需要使用%s
(占位符)。
1.1.2 Data Types
C
中的一些data types
(数据类型):bool
char
double
float
int
long
string
1.1.3 Formating Output
C
中的一些输出格式化:%c
——char
%f
——float
/double
%i
——int
%li
——long
%s
——string
1.1.4 Operators
operators
(运算符),variables
(变量),syntactic sugars
(语法糖),comment
(注释),condition
(条件),loop
(循环),老生常谈。
- 一个
int
占4 bytes
(字节),即32 bits
(比特)。1 byte = 8 bits
,范围为-255到255。超出范围会导致溢出。
1.1.5 Conditionals
- 使用大括号的
if
,不是函数,是programing construct
,是 a feature of C language。
1.1.6 Key Words
-
C
中常量有关键字,const
。 -
顺便想了一下
Java
中的常量如何定义,有接口,枚举,类变量三种方式。- 接口:不要用!What is the use of interface constants?
- 枚举:可以用,维护要注意。有类内枚举这种方式,看情况。
- 类变量:可以专门搞一个final的类,感觉有点大材小用。
1.1.7 Other Thoughts
- 从这两节课可以看出编程及其语言的关键部分:(I would call them cornerstones)
- 变量(数据类型)。
- 运算。
- 条件。
- 循环。
- C 是面向过程的语言,编译从上到下执行,所以需要声明函数,如果该函数的实现在主函数之后。
- 浮点数精度问题。
1.2 Shorts
1.2.1 Data Types and Variables
1.2.1.1 int
int
是用于储存整数的数据类型。int
占4 bytes
(字节),即32 bits
(比特)。
unsigned
关键字可将正数范围扩大一倍,并舍弃负数范围。
1.2.1.2 char
char
是用于储存单个字符的数据类型。char
占1 byte
(字节),即8 bits
(8比特),范围从-128
到127
。
1.2.1.3 float
float
是用于储存浮点型的数据类型。float
占4 bytes
(字节),即32 bits
(比特)。floatl
类型有精度问题,因为其只占占4 bytes
(字节),即32 bits
(比特),如果整数部分很多,小数部分就变少,因为总的空间是有限的。
1.2.1.4 double
double
也是用于储存浮点型的数据类型,但范围更大。double
占8 bytes
(字节),即64 bits
(比特)。
1.2.1.5 void
void
是一个类型,但不是数据类型。- 函数可以返回
void
,也就是什么都不返回。 - 函数的参数也可以为
void
,也就是没有参数。
1.2.1.6 Primitive Types
- 以上就是
C
中的5
种primitive types
(基本类型)。
1.2.1.7 bool
- 布尔型,只有
true
和false
两个值。 - 非基本类型,要手动处理,课程已处理好。
1.2.1.8 string
- 字符串,用于储存一串字符的类型。
- 非基本类型,要手动处理,课程已处理好。
1.2.1.9 Other Types
- 还有其他类型,例如
structs
,typedefs
等。
1.2.1.10 Declare Variables
- 类型 +名字 ——> 声明变量。
- 多个变量可以一起声明(不要这么做)。
- 需要的时候再声明。
1.2.1.11 Using Variables
- 给变量赋值。
- 声明 + 赋值 ——> 初始化变量。
1.2.2 Operators
1.2.2.1 Arithmetic Operators
- 数学运算符。
- 加减乘除取余。
- 简写。
1.2.2.2 Boolean Expressions
- 布尔表达式。
- 非零为true,零为false。
- 逻辑运算符与关系运算符。
1.2.2.3 Logical Operators
- 与。
- 或。
- 非。
1.2.2.4 Relational Operators
- 大于、小于、等于、大于等于、小于等于。
- 等于,不等于。
1.2.3 Conditional Statements
- 条件表达式。
1.2.3.1 If
1.2.3.2 Switch
- 注意类型与
break
。
- 没有
break
,之后的会全部执行。
1.2.3.3 Ternary Operator
- 三元表达式(少用,不好阅读,JDK源码出现过三元表达式错误)。
1.2.3.4 Summary
- 三种条件表达式。
1.2.4 Loops
- 循环。
1.2.4.1 While
infinite loop
(死循环)。
while
循环。
1.2.4.2 Do While
- 先做一次再判断循环。
1.2.4.5 For
for
循环。
1.2.4.6 Summary
- 一般来说,
while
循环用于未知次数;do while 循环用于先做一次的情况;for
循环用于已纸次数。
1.2.5 Command Line
- 拷贝含子文件夹的文件夹,需要加 -r。
1.3 Lab1
1.3.1 Hello
|
|
1.3.2 Population
|
|
1.4 Problem Set 1
1.4.1 Mario
|
|
1.4.2 Credit
|
|
- 这么一个简单的小程序,竟然写了一小时,还错了好几次,除了体现自己能力的不足,有几个地方要特别注意。
- 多考虑边界条件。
- 涉及逻辑判断的时候,要多想一下,再更仔细一点。