- เป้าหมายในสัปดาห์แรก
- IDECS50
- อัพเดตบรรทัดคำสั่งและเวิร์กเบนช์
- ทำงานที่ IDE
- สวัสดีซี!
- แมลง?
- การตรวจสอบความถูกต้อง: การทดสอบ check50
- พื้นฐาน C: เปรียบเทียบกับ Scratch
- ประเภทข้อมูลพื้นฐานในภาษาซี
- ห้องสมุดซี
- สวัสดี C อีกครั้ง: การวิเคราะห์ไวยากรณ์ของโปรแกรมที่ง่ายที่สุด
- เพิ่มเติมเล็กน้อยเกี่ยวกับ I/O ใน C
- การป้อนข้อมูลที่ผ่านการตรวจสอบแล้ว: ฟังก์ชันพิเศษของไลบรารี cs50.h
- ภารกิจที่ 1. การคำนวณการใช้น้ำอย่างชาญฉลาด
- ภารกิจที่ 2 มาริโออยู่กับเรา!
- ภารกิจที่ 3 ถึงเวลารับการเปลี่ยนแปลง
- วิธีตรวจสอบรหัสของคุณและรับเครื่องหมาย
- ทรัพยากรรหัส
- วรรณกรรมเพิ่มเติม
การป้อนข้อมูลที่ผ่านการตรวจสอบแล้ว: ฟังก์ชันพิเศษของไลบรารี cs50.h
เพื่อให้หลักสูตรนี้สะดวกยิ่งขึ้น เราได้พัฒนาไลบรารีพิเศษ CS50 ซึ่งมีฟังก์ชันที่มีประโยชน์มากสำหรับการประมวลผลข้อมูลที่ผู้ใช้ป้อนโดยเฉพาะ-
GetString()
อ่านสตริงที่ผู้ใช้ป้อน -
GetInt()
อ่านสตริงที่ผู้ใช้ป้อนและตรวจสอบว่ามีจำนวนเต็มหรือไม่ -
GetFloat()
อ่านสตริงที่ผู้ใช้ป้อนและตรวจสอบว่ามีหมายเลขทศนิยมหรือไม่ -
GetLongLong()
อ่านสตริงที่ผู้ใช้ป้อนและตรวจสอบว่ามีจำนวนจริงที่ยาวหรือไม่
ภารกิจที่ 1. การคำนวณการใช้น้ำอย่างชาญฉลาด

water.c
ใน~/workspace/pset1
. โปรแกรมควรนับจำนวนขวดที่ใช้อาบน้ำขึ้นอยู่กับเวลา นั่นคือ:
- โปรแกรมจะถามผู้ใช้ถึงจำนวนนาทีที่ใช้ในการอาบน้ำ
- ผู้ใช้ป้อนจำนวนเต็มบวก
- โปรแกรมแสดงจำนวนขวดที่ผู้ใช้ใช้
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
เพื่อความง่าย คราวนี้เราจะถือว่าผู้ใช้ป้อนจำนวนนาทีอย่างถูกต้องเสมอ นั่นคือ เราไม่ได้ตรวจสอบว่าตัวเลขที่ป้อนเป็นจำนวนบวกและจำนวนเต็มหรือไม่ ต่อไปเราจะเรียนรู้วิธีการเขียนเช็ค แต่ตอนนี้ก็เพียงพอแล้ว เพื่อตรวจสอบว่าโปรแกรมทำงานอย่างถูกต้องcheck50,
คุณต้องป้อนบรรทัดต่อไปนี้ในเทอร์มินัล:
check50 2015.fall.pset1.water water.c
และถ้าคุณต้องการดูว่าโปรแกรมwater
ที่เขียนโดยเจ้าหน้าที่ประจำหลักสูตรทำงานอย่างไร ให้รันคำสั่งต่อไปนี้:
~cs50/pset1/water
ภารกิจที่ 2 มาริโออยู่กับเรา!

mario.c
ใน~/workspace/pset1
. โปรแกรมของเราจะวาดครึ่งปิรามิดคล้ายกับที่คุณเห็น แต่โดยตรงในคอนโซลโดยไม่มีกราฟิก: แต่ละบล็อกจะประกอบด้วยไอคอนแฮช (#) แม้ว่าคุณจะยังไม่รู้ว่าต้องทำอย่างไร แต่เชื่อฉันสิ: มันง่าย เพื่อให้ปัญหาน่าสนใจยิ่งขึ้น เราจะเพิ่มความสามารถในการกำหนดความสูงของครึ่งปิรามิดโดยใช้จำนวนเต็มที่ไม่เป็นลบตั้งแต่ 0 ถึง 23 ความสูงของปิรามิดในภาพถือว่าอยู่ในตำแหน่งที่สูงที่สุด นั่นคือเท่ากับ 8 หากผู้ใช้กรอกหมายเลขผิดต้องขอให้เขาทำใหม่อีกครั้งหนึ่ง จากนั้นสร้าง (โดยใช้ printf ปิรามิด) ดูแลจัดมุมซ้ายล่างของครึ่งปิรามิดให้ตรงกับขอบด้านซ้ายของหน้าต่างเทอร์มินัล ดังตัวอย่างด้านล่าง ข้อความที่ขีดเส้นใต้คือข้อความที่ผู้ใช้ป้อนเอง
username:~/workspace/pset1 $ ./mario
height: 8
##
###
####
#####
######
#######
########
#########
โปรดสังเกตว่าคอลัมน์ขวาสุดสองคอลัมน์มีความสูงเท่ากัน ยังไม่คุ้มที่จะสร้างท่อ เมฆ และมาริโอเอง =) อย่างน้อยก็เพื่องานนี้ หากผู้ใช้ป้อนข้อมูลไม่ถูกต้อง (ไม่ได้ใส่ตัวเลข หรือ ใส่ตัวเลขที่น้อยกว่า 1 หรือมากกว่า 23) โปรแกรมควรขอให้เขาป้อนข้อมูลอีกครั้ง ดังตัวอย่างด้านล่าง โดยที่ข้อความที่ขีดเส้นใต้คือว่าอะไร ผู้ใช้เข้ามาจากแป้นพิมพ์ หากต้องการอ่านสตริงที่ป้อน ให้ใช้GetInt
. สามารถช่วยตรวจสอบอินพุตที่ไม่ถูกต้องได้ แต่ไม่ใช่ในทุกกรณี
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
ในการคอมไพล์โปรแกรม ให้ป้อนบรรทัดในเทอร์มินัล:
make mario
หรือเวอร์ชันที่โปร่งใสกว่าแต่ยาวกว่า:
clang -o mario mario.c -lcs50
หลังจากนั้นให้รันโปรแกรมเพื่อดำเนินการ:
./mario
หากคุณต้องการตรวจสอบว่าโปรแกรมทำงานอย่างถูกต้อง ให้รันcheck50
:
check50 2015.fall.pset1.mario mario.c
และถ้าคุณต้องการเล่นกับมาริโอเวอร์ชั่นผู้ช่วยหลักสูตร ให้พิมพ์บรรทัดต่อไปนี้:
~cs50/pset1/mario
ภารกิจที่ 3 ถึงเวลารับการเปลี่ยนแปลง

greedy.c
ในไดเรกทอรีของคุณ ให้ไว้: เหรียญในสกุลเงิน 25, 10, 5, 1 เซ็นต์โปรแกรมควร:~/workspace/pset1
- ถามผู้ใช้ว่าจะแจกเงินจำนวนเท่าใด
- คำนวณจำนวนเหรียญขั้นต่ำที่คุณสามารถทำได้
GetFloat
จากไลบรารี CS50 สำหรับอินพุต และprintf
จากไลบรารี I/O มาตรฐานสำหรับเอาต์พุต นอกจากนี้โปรแกรมจะต้องตรวจสอบความถูกต้องของอินพุตด้วย เราขอให้คุณใช้GetFloat
เพื่อให้ผู้ใช้สามารถป้อนค่าเป็นดอลลาร์และเซนต์โดยคั่นด้วยจุด ตัวอย่างเช่น หากเราเป็นหนี้ $9.75 ผู้ใช้ควรป้อน 9.75 แต่ไม่ใช่ $9.75 หรือ 975 คุณต้องแน่ใจว่าผู้ใช้ป้อนตัวเลขที่เหมาะสม GetFloat
สมมติว่าไม่เป็นลบ ฟังก์ชัน เองจะไม่ช่วยในเรื่องนี้ หากผู้ใช้ป้อนข้อมูลไม่ถูกต้อง คุณต้องขอให้เขาทำซ้ำและรันโปรแกรมด้วยข้อมูลที่ถูกต้องเท่านั้น ระวังความไม่ถูกต้องที่มีอยู่ในตัวเลขทศนิยม ตัวอย่างเช่น 0.01 ไม่สามารถแสดงเป็นfloat
. ลองใช้เอาต์พุตที่จัดรูปแบบ เช่น มีทศนิยม 50 ตำแหน่ง โดยใช้โค้ดด้านล่าง:
float f = 0.01;
printf("%.50f\n", f);
อย่างไรก็ตามก่อนที่จะนับสิ่งใด ๆ จะต้องแปลงจำนวนเงินทั้งหมดเป็นเซนต์ (และในเวลาเดียวกันก็แปลงจากเป็นfloat
) int
ซึ่งจะช่วยหลีกเลี่ยงข้อผิดพลาดและความยากลำบากมากมาย เพื่อให้แน่ใจว่าเครื่องวิเคราะห์โค้ดอัตโนมัติของเราสามารถตรวจสอบปัญหาของคุณได้อย่างถูกต้อง ตรวจสอบให้แน่ใจว่าบรรทัดสุดท้ายของผลลัพธ์ของโปรแกรมของคุณไม่มีข้อมูลอื่นใดนอกจากจำนวนเหรียญขั้นต่ำ: จำนวนเต็มที่มี \n ตามหลัง (ผู้ที่เรียนรู้ JavaRush ตระหนักดีถึงสิ่งที่เรากำลังพูดถึงที่นี่ =)) ด้านล่างนี้เป็นตัวอย่างผลลัพธ์ของโปรแกรมของคุณควรมีลักษณะดังนี้
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
เมื่อพิจารณาถึงธรรมชาติของจำนวนจุดลอยตัว คุณสามารถละเว้นศูนย์และป้อนตัวเลขดังกล่าวในรูปแบบ .41 ได้ แน่นอนว่าผู้ใช้ที่ต้องการตรวจสอบโปรแกรมว่ามีความเป็นไปได้ในการป้อนข้อมูลที่ไม่ถูกต้องทั้งหมดควรเห็นดังนี้:
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
ตามข้อกำหนดเหล่านี้และตัวอย่างที่คุณเห็นด้านบน โค้ดของคุณน่าจะมีการวนซ้ำบางประเภท หากขณะทดสอบแอปพลิเคชัน คุณพบว่าการวนซ้ำไม่หยุด คุณสามารถขัดจังหวะการทำงานของโปรแกรมได้ด้วยการกด Ctrl-c (บางครั้งหลายครั้ง) คุณรู้วิธีคอมไพล์และรันโปรแกรมอยู่แล้ว หากคุณต้องการตรวจสอบว่าโปรแกรมของคุณทำงานอย่างถูกต้องหรือไม่ โดยใช้ยูทิลิตี้check50
ให้ป้อนบรรทัดต่อไปนี้ในเทอร์มินัล:
check50 2015.fall.pset1.greedy greedy.c
และถ้าคุณต้องการเล่นกับโปรแกรมนี้ที่จัดทำโดยผู้ช่วยหลักสูตรให้เขียนคำสั่งต่อไปนี้:
~cs50/pset1/greedy
วิธีตรวจสอบรหัสของคุณและรับเครื่องหมาย
-
ตัวเลือกที่ 1
หากเป็นสิ่งสำคัญสำหรับคุณที่จะต้องตรวจสอบความถูกต้องของรหัสและไม่ได้รับเกรดสุดท้ายคุณสามารถตรวจสอบและแก้ไขได้โดยใช้คำสั่ง
check50 2015.fall.pset1.name name.c
เข้าไปในบรรทัดเทอร์มินัลของ CS50 IDE หรือไม่
name
ชื่อไฟล์งานของคุณอยู่ที่ไหน -
ตัวเลือกที่ 2
หากคุณต้องการได้เกรด (โดยพื้นฐานแล้วเหมือนกับการรันเช็ค 50 แต่ด้วยการจำผลลัพธ์และกรอกแบบฟอร์มเป็นภาษาอังกฤษบางส่วน ให้ทำตามขั้นตอนเหล่านี้:
-
ขั้นตอนที่ 1 จาก 2
- เมื่อแอปพลิเคชันพร้อม ให้เข้าสู่ระบบ CS50 IDE
- ที่มุมซ้ายบนของ CS50 IDE ภายในไฟล์เบราว์เซอร์ ไม่ใช่หน้าต่างเทอร์มินัล คลิกซ้ายหรือคลิกขวาที่ไฟล์ hello.c ของคุณ (ไฟล์ที่อยู่ในไดเร็กทอรี pset1) แล้วคลิกดาวน์โหลด คุณควรพบว่าเบราว์เซอร์โหลด hello.c แล้ว
- ทำซ้ำสำหรับน้ำค.
- ทำซ้ำสำหรับ mario.c
- ทำซ้ำสำหรับ gredy.c
- ในแท็บหรือหน้าต่างแยกต่างหาก ให้เข้าสู่ระบบ CS50ส่ง
- คลิกส่งที่มุมซ้ายล่างของหน้าต่าง
- ใต้ Problem Set 1 ในหน้าต่างที่ปรากฏขึ้น ให้คลิกที่ Upload New Submission
- ในหน้าต่างที่ปรากฏขึ้น คลิกเพิ่มไฟล์... หน้าต่างชื่อ Open Files ควรปรากฏขึ้น
- นำทางไปยังตำแหน่งที่ดาวน์โหลด hello.c โดยปกติจะอยู่ในโฟลเดอร์ดาวน์โหลดหรือในโฟลเดอร์ที่กำหนดให้คุณเป็นค่าเริ่มต้นสำหรับการดาวน์โหลด เมื่อคุณพบ hello.c แล้ว ให้คลิกที่มันหนึ่งครั้งเพื่อทำเครื่องหมาย จากนั้นคลิก เปิด
- คลิกเพิ่มไฟล์... อีกครั้ง จากนั้นหน้าต่างเปิดไฟล์จะปรากฏขึ้นอีกครั้ง
- ตอนนี้ค้นหาไฟล์ water.c ในลักษณะเดียวกัน คลิกที่มันจากนั้นคลิกเปิด (หรือ "เปิด")
- ตอนนี้ค้นหา mario.c และยังคลิกเปิดในลักษณะเดียวกัน
- ทุกอย่างเหมือนกันกับไฟล์ greedy.c
- คลิกเริ่มอัปโหลดเพื่อเริ่มอัปโหลดไฟล์ของคุณไปยังเซิร์ฟเวอร์ CS50
- บนหน้าจอที่ปรากฏขึ้น คุณจะเห็นหน้าต่างชื่อไม่มีไฟล์ที่เลือก หากคุณเลื่อนเคอร์เซอร์ไปทางซ้ายของหน้าจอ คุณจะเห็นรายการไฟล์ที่คุณดาวน์โหลด คลิกที่แต่ละรายการเพื่อยืนยันเนื้อหาของแต่ละรายการ (ไม่จำเป็นต้องคลิกปุ่มหรือไอคอนอื่น) หากคุณแน่ใจว่าคุณพร้อมที่จะส่งไฟล์เพื่อตรวจสอบถือว่าเสร็จสิ้นแล้ว! หากคุณต้องการตรวจสอบโค้ดของคุณอีกครั้งด้วยตนเองหรือแก้ไขสิ่งใด ให้กลับไปที่การส่ง CS50 และทำซ้ำขั้นตอนเหล่านี้ คุณสามารถส่งซ้ำได้หลายครั้งตามที่คุณต้องการ เฉพาะการส่งล่าสุดเท่านั้นที่จะได้รับการประเมิน
-
-
ขั้นตอนที่ 2 จาก 2 (ไม่จำเป็นสำหรับการประเมิน หาก =))
ตอนนี้ไปที่https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50xซึ่งคุณจะพบแบบฟอร์มพิเศษ ในนั้นคุณต้องตอบคำถามเชิงทฤษฎีหลายข้อแล้วคลิกส่งใต้คำถามเหล่านั้น
- เอาล่ะ น่าจะเห็นอันนี้มา! เพียงไม่กี่ประโยค ห้องสมุดคืออะไร? * (อธิบายสั้นๆ ว่าห้องสมุดคืออะไร)
- ในเวลาเพียงไม่กี่ประโยค
#include <cs50.h>
เมื่อคุณเขียนมันลงบนบางโปรแกรมจะมีบทบาทอย่างไร? *(บทบาทของบรรทัด #include <cs50.h> ที่ปรากฏที่ด้านบนของบางโปรแกรมคืออะไร?) - คุณจะบอกว่าคุณใช้เวลากับ Problem Set 0: Scratch ประมาณกี่ชั่วโมง
- คุณจะบอกว่าคุณใช้เวลากับชุดปัญหา 1: C ประมาณกี่ชั่วโมง
- คุณมีความคิดเห็นอย่างไรกับ CS50x จนถึงตอนนี้? *(ความคิดเห็นของคุณเกี่ยวกับ CS50 ในขณะนี้ เลือกตัวเลือกที่ชอบหรือไม่ชอบ)
- คุณเคยขอความช่วยเหลือจากเพื่อนร่วมชั้นหรือเจ้าหน้าที่ผ่านกลุ่ม Facebook ของ CS50s ที่ http://www.facebook.com/groups/cs50 หรือไม่? *(ได้สอบถามนักศึกษาหรือผู้ช่วยคนอื่นๆ ในกลุ่ม facebook บ้างแล้ว)
- คุณเคยขอความช่วยเหลือจากเพื่อนร่วมชั้นหรือเจ้าหน้าที่ผ่าน Subreddit ของ CS50 ที่ http://www.reddit.com/r/cs50 *(คุณได้ขอความช่วยเหลือจากนักเรียนหรือผู้ช่วยคนอื่น ๆ ผ่าน Subreddit บ้างไหม)
- คุณเคยขอความช่วยเหลือจากเพื่อนร่วมชั้นหรือเจ้าหน้าที่ผ่านทาง Twitter โดยใช้ @cs50 หรือ #cs50 หรือไม่? *(คุณได้ขอความช่วยเหลือจากนักเรียนหรือ TA คนอื่นๆ บน Twitter โดยใช้ @cs50 หรือ #cs50)
ทรัพยากรรหัส:
-
การบรรยายครั้งที่สาม
-
บรรยายครั้งที่สี่
GO TO FULL VERSION