您的位置:首页 > 其它

网易公开课哈佛大学CS50学习笔记

2016-01-07 20:37 190 查看
网易公开课哈佛大学CS50学习笔记 (原创) 转载请注明出处

 网易公开课哈佛大学CS50听课笔记

2.算法是什么 计算机如何运作? 0,1 8 个比特是一个字节   gcc编译讲解

3.c 语言 编译 与源代码 语法 变量类型  先后次序 bool型  转移字符 

4. 边敲实例边讲解。   

讲解float类型时 printf %f  通过 提供好的资源 c库函数库

   for(int i =0;i<=10;i++)

    {  printf("*");} 错误在哪里?     should print 10 asterisks 实际输出了11个。

     更改  将控制条件 变为i <10;   全新ASCLL表的讲法  

                                   输入代码 for(int i =65;i<65 +26;i++)

                                          printf("\n");

                                两个i ,printf中第一个i 当做char 数据, 则第一行输出则是

     A: 65

     B: 66

     C: 67               这样就直观明了的说明了对应关系。

 另一方面  通过 使用

 这个代码 int main(int arc, char *argv[])

      {

        for(char c = 'A';c<='Z';c=(char)((int)c+1))//引入优先级的部分 c先转化为数字再+1

         printf("%c: %d\n", c,(int) c);

       }  

     输出结果 battleship 

   1 2 3 4 5 6 7 

A  0 0 0 0 0 0 0

B  0 0 0 0 0 0 0

C  0 0 0 0 0 0 0

D  0 0 0 0 0 0 0

E  0 0 0 0 0 0 0

F  0 0 0 0 0 0 0

G  0 0 0 0 0 0 0     显示数据界面   图形界面的实例   把小船放进洞里

外层循环  一个一个是由内层输出的 当输入完一行 再输入下一行时 由外层调控。

#include <unistd.h>   sleep();

%%是百分比的意思

 .swap()调用 可以使用全局变量。 通过例子 printf a b 与x y 产生结果 

CS50第6课总结  教授David 在课堂上播放YOUTUBE 中一个发射失败的火箭 失败原因仅仅

是一行代码中 64位比特整数转换为一个16比特的有符号整数引发溢出导致 引出话题

对转义字符/r 与换行符的/n的解释极佳

#include <stdio.h>

#include <unistd.h>

int main(void)

{

for(int i=0;i<=100;i++)

{

printf("进度更新  %d%%\r",i);

fflush(stdout);

sleep(1);

}

printf(" ");

}

第7课

  歌谣打印的例子    

for 与while 与那个好? 

for 按规则行事  需要人工行事 而while 不需要 

for 填鸭式 初始条件 

bottle  if(i>1)

           S1=“bottle”

 else  

     S1="bottles"

   引入三目运算符

 string s1 =(i==1)? "bottle":"bottles";

i==1  冒号等于else。      优化方法   还可以写入一个函数中

 逻辑相关的放入一个函数

  while()内部为真  false =0  

     while(n)

         chorus(n- -);   void

 chorus (int b)

                 b的值 何时改变?

 数组 一块连续的内存分配      一次性接受用户数据存储在一个地方

预先写死 一个变量 宏 #define quizzes 2 

    用quizzes 表示

   float grades[quizzes],   flouat sum, sum 在另一部份

grades[i]=getint();   第i的值从输入读入

 array  argv 每个单词(字符串)都是从用户输入

  本质是字符串  string 

 String.h    strlen

 array传入的是存储空间的第一个地址

 返回值NULL 计算机返回内存的第一个值 不能碰 null 特殊的标记符 表示坏了 不是的话说明是字符串 

 HELLO 5个字符 最后 标记\0 共5个字符 第6个 为空 访问后面的0

反复运行后面  当出现越界访问错误  内存越界 则访问到了操作系统的内存  segment 段错误  

如果 不用%c 访问 用%d显示的 为0 

游戏 低层次语法外 技巧  纸的后面装50的纸 查找的方法 

最慢7步 n步走,  优化?   解释 第二个数组 假设是有序的

怎样找? 

 线性搜索   若不知道数字是什么  124 向前或向后 向后 124小一些   丢掉一半   再跳中间部分   知道左边的又有小数 则相当于边的都为以知 

 先排序在查找

第八课

二进制文件    

GCC中编译

GDB 加入标志 make 自动编译   gdb buggy3 GDB 提示 run 

正常返回时 0   break 找断点 0x 16进制。run 21  显示的尚未执行的21 next 执行一下一个 (gdb) print x

(gdb)printf y

(GDB)  continue 断开断点  

(gdb) step  dive into function   run

例子  8个人 每人拿一个数字 两人 交换  i++ 不用交换 i++

回溯法    遍历完之后    冒泡效率太差。  检查冗余 时 迭代之后

做计数器 每次加1. 再循环中依然不能loop  8个数中 64步  最坏N*N  情况时 消耗资源多

方法2  先假定一个数是最小 依次比较  数组固定大小是不变的

8个位置 怎样交换 移动  一个变量  只有相互交换 这样空间不会边

2  记住3 与6交换  找小的 再次找到比他 做交换。

这个步骤 的  寻找最佳位置 选择排序  每一次排序寻找最小或最大的做交换。 考虑N个值 8找1 7找2 6找5 所以是 1加到8的总和

N(n+1)/2     单数字极大时 优势就可忽略 O(n2) 最坏情况

Ω符号是最好的情况  Θ表示最好与最坏相同。                                                      (持续更新。。。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: