2016年12月14日 星期三

CS50 Week 1

Lecture

使用Could 9來教學基本的C語言

Could 9是一個線上的IDE平台,這樣的做法就是讓大家有統一的平台

非常適合用來做教學。

C語言的部分就是從

#include <stdio.h>

void main {
     print("Hello word!");
}

講解得非常詳細,若是有C語言底子的可以跳過這段。

不過最後有很酷的程式,我錄製成影片給大家觀賞


Lecture continued

在我們的認知中,我們知道1/10 = 0.1

但是我們用C去撰寫且編譯時,出來的結果卻是很不一樣唷


This is a amazing!!

OK,回到正題,這次講到關於變數型態的重要性,避免溢出(overflow)

若變數型態沒有設定好,就會發生一些非常簡單卻非常致命傷的問題。

在演講中舉例到,美國的愛國者飛彈是地對空飛彈系統,

當初是為了攔截伊拉克的飛毛腿飛彈所研製出來,

由於飛彈系統時鐘暫存器設計為24 位,精度也只限於24位的精度。

這個精度誤差漸漸放大,100小時後,飛彈的時鐘已經偏差了三分之一秒,

相等於600公尺距離誤差。

由於這個時間誤差,縱使雷達系統偵察到飛毛腿飛彈並預計了它的彈道,

系統卻找不到實際上來襲的飛彈。

Walkthroughs

這邊的練習一樣是把這週演講中的程式碼在拿來複習一次

首先當然是

Hello-0.c


Hello-1



Hello-2



Adder


Condition-0


Condition-1


Nonswitch


Switch


Positive


F2C


Sizeof

Section

Command line 

這部影片是講到用終端機(MaxOS, Linux)的指令,

關於指令當然首推鳥哥的私房菜

因為MaxOS跟Linux都是基於Unix開發出來的,

或許有些不同,但是大致上普遍的指令都是相同。

影片有用到的指令為ls, cd, pwd, mkdir, cp, rm, mv,

有講到mkdir,但是沒有講到如何建立檔案,建立檔案的指令為touch filename。

Data type

再次講解資料型態的部分,不過這個影片講得比較詳細。

Operator

講述如何在程式裡做加減乘除的運算,以及布林運算。

Conditional statements

詳細講解if else跟switch的用法和不同。

Loops

詳述for, while, do while的用法。

Shorts

Boolean values

詳述布林運算。

Compliers

Rob Bowden感覺是個相當宅的屁孩講述當C語言程式進行編譯時的原理,

個人覺得了解這個部分,對未來寫程式會更有概念了解程式語言是怎麼運作的。

Functions

講述Function裡各個關鍵字的定義,以及不同的建構值。

Libraries

#include <stdio.h>在C語言就是這樣引用一個Library,

Library的好處就是在於可以被任何.c或.h同時使用,也講到如何鏈接Library

當在terminal輸入make filename時,會出現一些訊息,這邊舉例make adder其結果如下:

clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wshadow    adder.c  -lcs50 -lm -o adder

其中-lcs50就是鏈接cs50 library。

Loops
再次講到迴圈...。

Make, Clang
講解當在要compile時,輸入make filename後,所產生的訊息

clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wshadow    adder.c  -lcs50 -lm -o adder

對各個option講解如下:

-o : 更改compiled filename。

-ggdb3 : 顯示哪一行發生錯誤。 

-Wall -Werror : 顯示是什麼的錯誤訊息。

-l : 鏈接Library。

因此,說明make是多麼方便的指令

Precedence
這邊講到程式裡運算的優先權,當然就是跟一般數學的加減乘數是一樣的

只不過多了指標的運算如下:



Style
講了三個要注意的事項
  1. 註解
  2. 程式的排列
  3. 變數的命名
多重註解用在說明函數或是整個程式,而單行註解最好越簡短越好;

程式的排列也是為了讓不管是自己或是別人閱讀程式,都可以輕易閱讀;

變數的名稱也是如此。

參考例子如下:


Typecasting
解說int與float、double和long long之間的轉換

Variables
變數的命名方式,以及如何應用

Problem set

沒有留言:

張貼留言