[CS50]Week1-CS50筆記整理

Ken
5 min readJul 22, 2020

--

CS50 Week1

筆記整理

Scratch vs C

在Week 0的課中介紹了Scratch,它能夠讓不懂程式的新手用拖拉方塊的方式來打造自己的程式,完全不用擔心自己不懂程式語言的困擾只需要把邏輯的部分想清楚即可。

而這周的課程馬上就介紹了C這個程式語言,似乎資工系的學生都有多少接觸過這個語言,一直很想看看這個語言到底有什麼特別的地方但目前Ruby都還沒學好還是先擱著吧。

Hello World

學程式不免俗地一開始都會先印出"Hello World",可以看到用Scratch非常簡單的拉出2個方塊輸入文字就結束了。

C程式碼的部分:

int main(void)就代表Scratch中的小綠旗

printf就代表say的方塊

#include <stdio.h> 這行是把 main、printf...的函式引入這樣才能正常運作

原始碼、編譯器、機械碼

寫完了但還無法執行它,這裡的程式碼是給人看的原始碼(source code)而電腦只看得懂二進位指令因此需要編譯器(compiler)將其翻譯成機械碼(machion code),電腦才能夠執行它。

一般我們所寫的程式碼電腦是看不懂的,中間還得要經過編譯的過程才能轉換成電腦看得懂的語言。

輸入指令編譯過後在輸入 ”./hello” 就能夠印出hello world囉

if …else

用if...else...來使三種不同的情況輸出相對應的文字,因為也只有三種情況,(x < y)、(x > y)、(x == y),所以最後一個條件是可以直接用else的沒有必要再用else if 。

while loop

想要印出50次"hello, world"難道要傻傻地寫50次printf("hello, world")嗎? 當然不用! 可以使用while迴圈。

一開始先設定一個變數i為0

接著設定條件(i < 50),在這個條件之下也就是說i只要小於50,while就會一直不斷執行{}裡的程式碼。

在{}裡輸入printf(“hello, world”),最重要的是要加上i ++這樣每次執行i都會加一這樣一來0加到49也就是我們要的50次了

for loop

效果跟while很像

首先在()中設定變數 i也就是 int i = 0; 接著是條件 i < 50; 最後是每次執行對i做的事情 i++

接著在{}中寫入要執行的程式

這樣一來就能達到跟while一樣的效果了。

“=”的作用

"x = y" 在程式中代表的是將y指派(assgin)給x,而非數學中x的值等於y的值。

程式碼越短越好嗎?

這裡提到就算程式碼的效果是一樣的但可讀性是需要被重視的,就像寫文章一樣。

製作自己的function

但若是把function放在執行它的位置的下面就會出錯,但總會希望執行的程式碼放在最上面才容易理解這個檔案在做什麼的。

再執行function的前面call它就行了

資料型態大小各不同

1除於10不就是等於0.1嗎? 在這裡指定要取小數點後50位不是應該要出現0.1000000….0嗎?

在這裡的x和y都是浮點數float,而浮點數的大小是4位元他到小數點第8位之後就開始不準了。

overflow

用for迴圈讓i一開始等於1且讓他不斷執行沒有設條件每次執行都讓i乘以2並印出來

結果在1073741824的下一個本來應該是2147483648但結果並不是之後也開始都是錯誤的數字,原因也在於int這個資料型態的空間有限一旦超過它便開始出錯。

在課中也提到跟overflow有關的議題

Y2K問題

2038年問題

波音787 overflow

--

--

Ken
Ken

Written by Ken

一位喜歡貓的廚師,轉職工程師目前使用Ruby,偶爾分享些有趣的文章

No responses yet