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(数据类型):boolchardoublefloatintlongstring
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
|
|
- 这么一个简单的小程序,竟然写了一小时,还错了好几次,除了体现自己能力的不足,有几个地方要特别注意。
- 多考虑边界条件。
- 涉及逻辑判断的时候,要多想一下,再更仔细一点。