【交作業】CS50 - week 1

文章推薦指數: 80 %
投票人數:10人

第一週的作業,我認為對沒寫過程式的初學者,單單是上完Week 1 的內容, ... #include #include void print(int n); int ... 【交作業】CS50-week1 作業 第一週的作業,我認為對沒寫過程式的初學者,單單是上完Week1的內容,還是有點勉強,但也沒有不好,有難關才有想解決的動力。

(應該吧) 2017年學到Week4,但因為種種因素就放棄了。

過了兩年決定重頭開始,加上之前寫的筆記,算是比當時更清楚了課程內容。

而且看到兩年前交的作業,發現那時連Week1的作業都寫的慘不忍睹(雖然現在也是,但當時更糟),看到這麼久沒寫程式,還能有進步的自己是蠻開心的! 來這裡寫Week1作業:ProblemSet1 Mario(lesscomfort) 目的:使印出任意高度、由#組成的金字塔。

#include #include voidprint(intn); intmain(void) { inti; do { i=get_int("height:"); }while(i<1||i>8); print(i); } voidprint(intn) { for(inti=0;i=n-i) { printf("#"); }else { printf(""); } } printf("\n"); } } Mario加強版(morecomfort) 目的:使印出任意高度、由#組成的雙邊金字塔。

#include #include voidprint(intn); intmain(void) { inti; do { i=get_int("height:"); }while(i<1||i>8); print(i); } voidprint(intn) { for(inti=0;i=n-i) { printf("#"); } else { printf(""); } //right if(j==n) { printf(""); inth=j; while(h>0) { if(h #include #include intchange(intn); intmain(void) { floatn=get_float("Changeowed:"); intcents=round(n*100); printf("%i\n",change(cents)); } intchange(inttotal) { intn=0; while(total>0) { if(total>=25) { n+=round(total/25); total=total%25; } elseif(total>=10) { n+=round(total/10); total=total%10; } elseif(total>=5) { n+=round(total/5); total=total%5; } elseif(total>=1) { n+=round(total/1); total=total%1; } } returnn; } Credit 目的:用公式驗算信用卡卡號,並查證出是哪種卡別 感想:不算很難,但過程有點麻煩 學到 怎麼取數字的個數 太長的數字要用longorlonglong 如何取前幾位數or後幾位數 /* AmericanExpress:15digit,startwith34,37 MasterCard:16digit,startwith51,52,53,54,55 Visa:13or16digit,startwith4 1.先算出幾位數 2.等於16,看開頭是不是等於51-55,或者為4 3.等於15,看開頭是不是等於34or37 3.等於13,看開頭是不是等於4 ----- 測試: 1.基數位*2(如果超過10,個位數跟十位數相加) 2.相加結果n 3.偶位數相加再加上n 4.n如果為10的倍數,卡片號碼就成立 */ #include #include #include intcheck(longtotal); intcount(longn); stringcard_type(longn,inti); strings_invalid="INVALID"; intmain(void) { longn=get_long("card:"); inti=count(n); if(check(n)%10==0) { printf("%s\n",card_type(n,i)); } else { printf("%s\n",s_invalid); } } //驗證卡號 intcheck(longtotal) { intamount=0; while(total>=1) { //步驟3.偶位數相加 inteven=total%10; amount+=even; total=round(total/10); //步驟1,2.基數位相加 intodd=(total%10)*2; if(odd>=10) { odd=(odd%10)+round(odd/10); } amount+=odd; total=round(total/10); } //printf("total:%i\n",amount); returnamount; } //先算有幾位數 intcount(longn) { inti=0; while(n>=1) { n=n/10; i++; } returni; } //判斷為哪種卡 stringcard_type(longn,inti) { //先算出前兩個數字 while(n>=100) { n=round(n/10); } //判斷 switch(i) { case16: if(round(n/10)==4) { return"VISA"; } elseif((n>=51)&&(n<=55)) { return"MASTERCARD"; } returns_invalid; case15: if(n==34||n==37) { return"AMEX"; } returns_invalid; case13: if(round(n/10)==4) { return"VISA"; } returns_invalid; default: returns_invalid; } } Writtenon April 3rd , 2019 byYakimshu Feelfreetoshare! Youmayalsoenjoy: 【交作業】CS50-week2 【筆記】CS50-week2助教課總整理 【心得】CS50-week4 【筆記】CS50-week2編譯、陣列、加密、排序法(2019年更新) 【筆記】CS50-week1(2019年更新) 【筆記】CS50-week0(2019年更新) 【心得】CS50-課程介紹



請為這篇文章評分?