JavaRush /จาวาบล็อก /Random-TH /เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรร...
Masha
ระดับ

เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4)

เผยแพร่ในกลุ่ม
cs50 ในวัสดุเพิ่มเติมของรัสเซีย ภารกิจสัปดาห์ที่ 1

เป้าหมายในสัปดาห์แรก

  • ทำความคุ้นเคยกับคำสั่ง Linux พื้นฐาน
  • เรียนรู้ไวยากรณ์ C พื้นฐานและแก้ไขปัญหาเล็กน้อย
  • เริ่มคิดให้ชัดเจนมากขึ้น =)
IDECS50
เพื่อให้งานเสร็จสมบูรณ์ CS50 เสนอ IDE (Integrated Development Environment) ในระบบคลาวด์ หากต้องการใช้งาน ให้สร้างบัญชีบนแพลตฟอร์ม edX และลงทะเบียนสำหรับหลักสูตรเดิม หลังจากนั้น:
1. ไปที่ cs50.io เลือก edX จากรายการ ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่านของคุณ คลิกส่ง 2. ป้อนข้อมูลบัญชี edX ของคุณ คลิกกลับไปที่ ID.CS50.NET cs50.io 3. เรากำลังรอ: พื้นที่เสมือนของคุณกำลังถูกสร้างขึ้น พื้นที่เสมือน cs50 4. เสร็จแล้ว! cs50 ไอดี
บรรทัดคำสั่งและเรียกใช้ CS50 IDE
ที่ด้านล่างของหน้าต่าง CS50 IDE ในแท็บ Terminal จะมีหน้าต่างเทอร์มินัลหรือแผงบรรทัดคำสั่ง คุณสามารถป้อนคำสั่งสตริงได้ที่นี่: คุณสามารถทำสิ่งเดียวกันกับอินเทอร์เฟซหน้าต่างได้ เช่น เปิดแอปพลิเคชัน ลบและสร้างไฟล์ ติดตั้งซอฟต์แวร์ หากคุณไม่เคยใช้งานบรรทัดคำสั่งมาก่อน วิธีการนี้อาจดูยุ่งยาก คุณต้องจำคำสั่งแล้วพิมพ์แทนการคลิกที่ไอคอนและปุ่ม สิ่งนี้เป็นจริงในระดับหนึ่งจากนั้นอินเทอร์เฟซของหน้าต่างก็ถูกประดิษฐ์ขึ้น อย่างไรก็ตาม บรรทัดคำสั่งมีให้ใช้งานในทุกระบบปฏิบัติการและผู้ดูแลระบบก็ชอบมัน และทั้งหมดเป็นเพราะบางครั้งคุณไม่สามารถอยู่ได้โดยปราศจากมัน ในหน้าต่าง IDE ในเทอร์มินัล คุณจะเห็นบรรทัดลึกลับ: ชื่อผู้ใช้:~/workspace $ แทนที่ “ชื่อผู้ใช้” ซึ่งจะมีชื่อที่สร้างขึ้นโดยอัตโนมัติ (ขึ้นอยู่กับข้อมูลการลงทะเบียนของคุณ) คลิกที่หน้าต่างเทอร์มินัล พิมพ์: update50 กด Enter คำสั่งขอให้ระบบอัพเดต คุณจะเห็นบรรทัดปรากฏในเทอร์มินัลที่อธิบายกระบวนการติดตั้ง อย่าปิด CS50 IDE จนกว่าคุณจะเห็นการอัปเดตเสร็จสมบูรณ์! . หลังจากนี้ บรรทัดเริ่มต้นจะปรากฏขึ้นอีกครั้ง ซึ่งเป็นบรรทัดที่มีชื่อของคุณ
ทำงานที่ IDE
มาสร้างโฟลเดอร์ที่จะจัดเก็บไฟล์ของคุณกัน คลิกขวา~/workspace (ไดเรกทอรีรากของคุณ) ที่มุมซ้ายบนของCS50 IDEเลือกNew Folder เปลี่ยนชื่อโฟลเดอร์pset1 (หากคุณสะกดชื่อผิด ให้คลิกขวาที่โฟลเดอร์ของคุณแล้วเลือกเปลี่ยนชื่อ ) cs50 ide เปลี่ยนชื่อโฟลเดอร์ จากนั้นคลิกขวาที่ โฟลเดอร์ pset1และเลือกNew File ไฟล์ Untilted ปรากฏขึ้น มาเปลี่ยนชื่อเป็นhello.txt กันดี กว่า cs50 ไอดี ดับเบิลคลิกที่ hello.txt ใน CS50 IDE คุณจะเห็นแท็บใหม่และฟิลด์ทางด้านขวาที่คุณสามารถพิมพ์ได้ หากคุณดำเนินการนี้แล้ว ให้ใส่ใจกับเครื่องหมายดอกจัน (*) ที่ปรากฏหน้าชื่อไฟล์บนแท็บ ซึ่งเป็นตัวบ่งชี้ว่ามีการเปลี่ยนแปลงกับไฟล์ แต่ไม่ได้บันทึก เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 1 บันทึกไฟล์โดยไปที่*ไฟล์ > บันทึกหรือใช้คำสั่ง + S (บนเครื่อง Apple) หรือCtrl + S (บนพีซี) เครื่องหมายดอกจันควรหายไป ตรวจสอบว่าไฟล์อยู่ในตำแหน่งที่ควรอยู่หรือไม่ มาทำสิ่งนี้โดยใช้บรรทัดคำสั่งถึงเวลาทำความคุ้นเคยแล้ว :) เช่นเดียวกับก่อนหน้านี้ บรรทัดที่ใช้งานอยู่ในเทอร์มินัลมีลักษณะดังนี้: username:~/workspace $ พื้นที่ทำงาน - ไดเร็กทอรีการทำงานปัจจุบัน (ไดเร็กทอรีที่เปิดในสภาพแวดล้อมการทำงาน) เครื่องหมายทิลเดอ (~) ระบุไดเรกทอรีราก (พื้นที่ทำงานอยู่ในนั้น) โปรดทราบว่าพื้นที่ทำงานในเทอร์มินัลจะเหมือนกับไอคอน ~/workspace ที่มุมซ้ายบนของ CS50 IDE มาฝึกกันเถอะ คลิกที่ใดก็ได้ในเทอร์มินัลแล้วพิมพ์บรรทัดคำสั่ง ls แล้วกด Enter ตัวอักษรพิมพ์เล็กสองตัวนี้ - ย่อมาจาก "list" - จะแสดงรายการไฟล์และโฟลเดอร์ที่อยู่ในไดเร็กทอรีพื้นที่ทำงานปัจจุบัน เหนือสิ่งอื่นใด คุณจะเห็นpset1 ที่คุณสร้างขึ้น ! ตอนนี้เรามาเปิดโฟลเดอร์ของเราโดยใช้คำสั่ง เราพิมพ์ cd pset1 หรือมากกว่านั้นอย่างละเอียด: cd ~/workspace/pset1 คำสั่ง cd (เปลี่ยนไดเร็กทอรี) เปลี่ยนไดเร็กทอรีที่ใช้งานอยู่ ในกรณีของเราเป็น บรรทัดที่ ~/pset1 ใช้งานได้เปลี่ยนเป็น username:~/workspace/pset1 $ สิ่งนี้ยืนยันว่าตอนนี้คุณอยู่ในไดเร็กทอรี ~/workspace/pset1 (บรรทัดย่อมาจาก "ฉันอยู่ใน pset1 ภายในเวิร์กสเปซ โฟลเดอร์ซึ่งอยู่ในโฟลเดอร์รูทซึ่งแสดงด้วย ~") ตอนนี้พิมพ์ ls คุณจะเห็นไฟล์hello.txt ! หากคุณคลิกที่ชื่อในเทอร์มินัลจะไม่มีอะไรเกิดขึ้น: มันเป็นข้อความและไม่ได้ให้การใช้งาน link แต่เป็นการยืนยันว่า hello.txt อยู่ในตำแหน่งที่ควรอยู่ พิมพ์ cd หากคุณเขียนเพียงคำสั่ง cd เอง แต่ไม่ได้ระบุอาร์กิวเมนต์ (นั่นคือ ชื่อของโฟลเดอร์ที่ควรจะไป) มันจะส่งคืนให้คุณ ไปยังไดเร็กทอรีรากเริ่มต้น ดังนั้นคุณจะเห็นภาพต่อไปนี้ในบรรทัดที่ใช้งานอยู่: username:~ $ หากต้องการกลับไปที่โฟลเดอร์ pset1 ให้กดหมายเลข cd workspace และกด Enter จากนั้น cd pset1 ป้อนอีกครั้ง คุณยังสามารถแทนที่คำสั่งทั้งสองนี้ด้วยคำสั่งเดียวที่เชื่อถือได้มากกว่า: cd workspace/pset1
สวัสดีซี!
ในที่สุดช่วงเวลานี้ก็มาถึง! มาเริ่มเขียนโปรแกรมกัน ภายในโฟลเดอร์ pset1 ของเราใน IDE ให้สร้างไฟล์ชื่อhello.c (จำเป็นต้องมีนามสกุล) เปิดในแท็บใหม่ (เราคิดว่าคุณจำวิธีการทำเช่นนี้ได้จากย่อหน้าก่อนหน้า) สำคัญ! ตัวอักษรจะต้องเป็นตัวพิมพ์เล็ก Linux คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ Hello.c และ hello.c เป็นไฟล์ที่แตกต่างกัน ที่ด้านขวาของหน้าต่าง CS50 IDE ให้พิมพ์ข้อความเดียวกันกับที่คุณเห็นด้านล่างทุกประการ ใช่ คุณสามารถคัดลอกได้ แต่การพิมพ์จะมีประโยชน์มากกว่า ตัวอักษรมีสีต่างกันเนื่องจาก CS50 IDE มีการเน้นไวยากรณ์ โดยไฮไลต์บล็อกข้อความด้วยสีเพื่อให้อ่านง่ายขึ้น สีจะไม่ถูกบันทึกในไฟล์ แต่จะมองเห็นได้ใน IDE เท่านั้น หากอยู่ที่นั่น แสดงว่า IDE เข้าใจ C และคุณระบุว่าเป็น C ในนามสกุลไฟล์ (*.c) หากคุณเรียกไฟล์เดียวกันว่า hello.txt ข้อความจะเป็นสีเดียว ตรวจสอบให้แน่ใจว่าคุณพิมพ์ทุกประการตามตัวอย่าง ไม่เช่นนั้นคุณจะตรวจพบจุดบกพร่องแรก =) เราขอดึงความสนใจของคุณไปที่ความแตกต่างระหว่างอักษรตัวพิมพ์เล็กและตัวพิมพ์ใหญ่อีกครั้ง อักขระ \n เลื่อนเคอร์เซอร์ไปที่บรรทัดถัดไป และข้อความที่ป้อนถัดไปจะไม่ติดกับผลลัพธ์ของโปรแกรม ใช่แล้ว และอย่าลืมเครื่องหมายอัฒภาค (;) นี่เป็นตัวคั่นที่สำคัญสำหรับคำสั่งโปรแกรม C จะไม่ทำงานหากไม่มีคำสั่งเหล่านี้ คลิกไฟล์ > บันทึก (หรือ command- หรือ Ctrl-s) สังเกตว่าเครื่องหมายดอกจันหน้าชื่อไฟล์หายไป? หากใช่ แสดงว่าการเปลี่ยนแปลงได้รับการบันทึกแล้ว คลิกที่ใดก็ได้ในหน้าต่างเทอร์มินัลด้านล่างโค้ดของคุณ และตรวจสอบให้แน่ใจว่าคุณอยู่ใน~/workspace/pset1 (หากคุณไม่ใช่ ให้คลิก cd แล้วกด Enter จากนั้น cd workspace/pset1 แล้ว Enter อีกครั้ง) บรรทัดที่ใช้งานอยู่ของคุณควรมีลักษณะดังนี้: ตรวจสอบให้แน่ใจว่า ไฟล์ hello.cอยู่ในตำแหน่งที่ควรอยู่ พิมพ์ และกด Enter คุณเห็น hello.c ด้วยหรือเปล่า? ถ้าไม่เช่นนั้น ให้ย้อนกลับไปสองสามขั้นตอนและสร้างไฟล์ในไดเร็กทอรีที่ต้องการอีกครั้ง ... ถึงเวลาอันศักดิ์สิทธิ์แล้ว: เราไขว้นิ้วและ... เราพิมพ์: และด้วยการไขว้นิ้วเราจึงกด Enter สวัสดี ไม่ใช่ hello.c หากสิ่งที่คุณเห็นอยู่ตรงหน้าคุณหลังจากการกระทำนี้คือบรรทัดที่สองที่ใช้งานอยู่ ซึ่งดูเหมือนบรรทัดก่อนหน้าทุกประการ แสดงว่าทุกอย่างทำงานได้! ซอร์สโค้ดของคุณได้รับการแปลเป็นโค้ดเครื่องหรืออ็อบเจ็กต์แล้ว (นั่นคือ ในลำดับ 0 และ 1) ตอนนี้โค้ดนี้สามารถดำเนินการได้ (นั่นคือสามารถรันโปรแกรมได้!) เมื่อต้องการทำเช่นนี้ ให้พิมพ์: ในบรรทัดคำสั่ง ให้กด Enter หากคุณไม่ได้เปลี่ยนข้อความที่อยู่ระหว่างเครื่องหมาย "" คุณจะเห็นด้านล่าง: หากคุณพิมพ์คำสั่ง แล้วกด Enter คุณจะเห็นไฟล์ hello ใหม่ พร้อมด้วย hello.c และ hello.txt สวัสดีอันแรกควรมีเครื่องหมายดอกจันหลังชื่อ ซึ่งเป็นสัญญาณว่านี่เป็นไฟล์ปฏิบัติการ นั่นคือไฟล์ที่คุณใช้เปิดโปรแกรม #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
แมลง?
หากหลังจากคำสั่ง make คุณเห็นข้อผิดพลาด แสดงว่าถึงเวลาสำหรับการดีบักครั้งแรก! คำจารึกเช่น "การประกาศที่คาดหวัง" หมายความว่าคุณพิมพ์ผิดที่ไหนสักแห่ง ตรวจสอบโค้ดด้านบนอีกครั้ง เพียงระมัดระวังรายละเอียดทั้งหมดให้มาก ความสนใจ! คำอธิบายข้อผิดพลาดมีให้เป็นภาษาอังกฤษ หากไม่ชัดเจนให้ใช้เครื่องมือค้นหา Google Translate หรือถามคำถามในความคิดเห็น เมื่อคุณแก้ไขข้อผิดพลาดแล้ว อย่าลืมบันทึกโค้ดของคุณโดยใช้File > Save (หรือ command- หรือ Ctrl-s) คลิกด้านในของหน้าต่างเทอร์มินัลอีกครั้งแล้วพิมพ์ make hello (เพียงตรวจสอบให้แน่ใจว่าคุณอยู่ใน ~ /workspace/pset1 ก่อน ) หากไม่มีข้อผิดพลาดอีก ให้รันโปรแกรมโดยพิมพ์คำสั่ง ./hello ตามทฤษฎีแล้ว วลีที่มีค่าควรปรากฏอยู่ตรงหน้าคุณ โดยอยู่ในเครื่องหมายคำพูดของตัวดำเนินการ printf ซึ่งคำสั่ง “พิมพ์” หากหน้าต่างเทอร์มินัลดูเล็กเกินไป ให้คลิกที่ไอคอนเครื่องหมายบวก (+) ในวงกลมถัดจาก hello.c
กำลังตรวจสอบความถูกต้อง
แอปพลิเคชัน check50 มีอยู่ใน CS50 IDE ทำงานจากบรรทัดคำสั่งและตรวจสอบข้อผิดพลาดบางโปรแกรม หากคุณยังไม่ได้ไปที่นั่น ให้ไปที่ไดเร็กทอรี ~/workspace/pset1 โดยรันคำสั่งในเทอร์มินัล: cd ~/workspace/pset1 ตอนนี้รันแล้ว ls คุณจะเห็นไฟล์ hello.c เป็นอย่างน้อย ตรวจสอบให้แน่ใจว่าชื่อไฟล์มีลักษณะเช่นนี้ และไม่ใช่ เช่น Hello.c หรือ hello.C คุณสามารถเปลี่ยนชื่อไฟล์ได้โดยการรันคำสั่ง mv source destination แหล่ง - ชื่อไฟล์ปัจจุบัน ปลายทาง - ชื่อไฟล์ใหม่ mv (จากการย้ายภาษาอังกฤษ) เป็นยูทิลิตี้การเปลี่ยนชื่อ หากคุณตั้งชื่อไฟล์ Hello.c โดยไม่ได้ตั้งใจ ให้พิมพ์บรรทัด: mv Hello.c hello.c หลังจากตรวจสอบให้แน่ใจว่าไฟล์นั้นถูกเรียกว่า hello.c ทุกประการ ให้เรียกใช้โปรแกรมตรวจสอบ check50 โปรดทราบว่า 2015.fall.pset1.hello เป็นตัวระบุเฉพาะสำหรับปัญหา "สวัสดีชาวโลก" check50 2015.fall.pset1.hello hello.c หากโปรแกรมทำงานอย่างถูกต้อง คุณจะเห็น: เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 2 ใบหน้ายิ้มสีเขียวหมายถึงผ่านการทดสอบ คุณยังสามารถดู URL ที่ด้านล่างของเอาต์พุต check50 ได้ แต่สำหรับพนักงานเท่านั้น (แต่หากคุณสนใจ ลองดูเลย!) check50 รันการทดสอบ 3 ครั้ง: มีไฟล์ hello.c อยู่หรือไม่, คอมไพล์ hello.c หรือไม่ และแอปพลิเคชันสร้างบรรทัดที่ระบุว่า "hello, world\n" หรือไม่ หากคุณเห็นอีโมติคอนสีแดงเศร้า แสดงว่าคุณมีข้อบกพร่อง :( hello.c exists \ expected hello.c to exist :| hello.c compiles \ can't check until a frown turns upside down :| prints "hello, world\n" \ can't check until a frown turns upside down ที่นี่ check50 ไม่พบ hello.c และสไมลี่สีแดงบ่งบอกว่าคุณทำชื่อผิดหรืออัพโหลดไฟล์ผิดที่ อีโมติคอนสีเหลือง “เป็นกลาง” หมายความว่าการทดสอบไม่ได้ดำเนินไป และจะเริ่มได้ที่ไหนหากโปรแกรมไม่พบไฟล์ที่ต้องตรวจสอบ? นี่เป็นอีกตัวเลือกหนึ่งที่จะปรากฏขึ้นหากคุณเปลี่ยนข้อความที่ฟังก์ชัน printf() ควรส่งออก: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 รายงานว่าบรรทัดสวัสดี world\n คาดว่าจะเกิดขึ้น แต่มีอย่างอื่นปรากฏขึ้น check50 ไม่นับคะแนนเมื่อจบหลักสูตร แต่จะตรวจสอบว่าผลลัพธ์ของงานแตกต่างจากที่คาดหวังหรือไม่ และช่วยให้คุณสามารถตรวจสอบสิ่งนี้ก่อนที่จะยืนยันความถูกต้องของงานภายในหลักสูตร (เราจะแจ้งให้คุณทราบถึงวิธีการดำเนินการในภายหลัง)
พื้นฐาน C: เปรียบเทียบกับ Scratch
สวัสดีชาวโลกใน Scratch และ C:
เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 3 #include int main(void) { printf("hello, world\n"); }
  • เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 4แสดงถึงฟังก์ชันที่พิมพ์ "คำ" ของสไปรท์ลงในฟองการ์ตูนใน Scratch มีฟังก์ชัน printf ในภาษา C ที่ทำสิ่งเดียวกัน แต่ไม่มีการ์ตูนเท่านั้น
  • main - เป็นภาษาอังกฤษ - "main" จุดเข้าสู่โปรแกรม เหมือนกับเอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 5.
วงจรที่ไม่มีที่สิ้นสุด
เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 6 แปลเป็น C: while (true) { printf("hello, world\n"); } ในขณะที่ (จริง) ทำสิ่งเดียวกัน: การวนซ้ำยังคงทำงานต่อไปในขณะที่ (ในขณะที่) ค่าเป็นจริง (นิพจน์บูลีน "จริง" หรือ "หนึ่ง") วงจรนี้จะดำเนินไปไม่รู้จบ
วนซ้ำที่แสดงวลีบนหน้าจอ 10 ครั้ง
Scratch เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i เป็นตัวแปรตัวนับ ค่าของมันถูกเปลี่ยนแปลงโดยตัวดำเนินการส่วนเพิ่ม i++ โดยเพิ่มขึ้น 1 ในแต่ละการวนซ้ำของลูป เริ่มแรก i ได้รับการกำหนดให้เป็น 0 โดยใช้ตัวดำเนินการกำหนด = ความสนใจ! เช่นเดียวกับใน Java ความเท่าเทียมกันในภาษา C จะแสดงด้วย == ตัวดำเนินการมอบหมาย = นั่นคือ a = 5 หมายความว่าตัวแปร a ได้รับการกำหนดให้เป็นค่า 5 และ (a= =5) หมายถึงนิพจน์บูโลญจน์ (หาก a เท่ากับ 5 นิพจน์นั้นจะเป็นจริง หากไม่เท่ากันจะเป็นเท็จ) . การวนซ้ำจะหยุดเมื่อฉัน "เติบโต" เป็น 9 ง่ายต่อการคำนวณ การวนซ้ำจะถูกดำเนินการ 10 ครั้ง ดังนั้น หากคุณต้องการทำซ้ำบางสิ่งตามจำนวนที่กำหนด ในภาษา C คุณจะกำหนด for loop (int i = 0; i < 10; i++) อีกตัวอย่างหนึ่ง: เอกสารเพิ่มเติมสำหรับการบรรยาย CS50: สัปดาห์ที่ 1 (การบรรยายที่ 3 และ 4) - 8 และสิ่งเดียวกันนี้แปลเป็น C: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • ตัวนับเก็บค่าเป็น C และ Scratch ใน C เราตั้งค่า int counter = 0 Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9แทน
  • เราทำเครื่องหมายประเภทของตัวแปรเป็น int เพื่อความชัดเจน: i เป็นจำนวนเต็ม (จากจำนวนเต็มภาษาอังกฤษ คือ ทั้งหมด)
  • เครื่องหมาย %i ที่เราใช้ใน printf ในบรรทัดที่ 4 คือตัวยึดตำแหน่งที่บอกให้เราพิมพ์จำนวนเต็มฐานสิบ เช่นเดียวกับที่เราบอกให้ printf แทนที่ตัวยึดตำแหน่งด้วยค่าที่ตัวแปรตัวนับใช้
นิพจน์บูลีน
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 มันก็เหมือนกับ (x < y) ((x < y) && (y < z))
เงื่อนไข
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 และสิ่งที่เทียบเท่ากับ "อึ": Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 แล้ววลีแรกที่เข้าใจยากล่ะ? ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลังในส่วน "ห้องสมุด" #include
คำสั่งแบบมีเงื่อนไข
คนเหล่านี้จะตรวจสอบว่าเงื่อนไขบางอย่าง (นิพจน์เชิงตรรกะ คำถามที่สามารถตอบได้เพียง "ใช่" หรือ "ไม่") เป็นจริงหรือไม่ และหากเป็นเช่นนั้น พวกเขาจะดำเนินการบางอย่างที่เชื่อมโยงกับเงื่อนไขนี้ ตัวอย่างจากชีวิต: ถ้าฝนตก (สมมติว่าฝนตก) และฉันอยู่ข้างนอก (ฉันอยู่ข้างนอกเมื่อฝนตก) ฉันจะกางร่ม if (condition) { //исполнить, если meaning истинно } ตัวเลือกที่ซับซ้อนกว่า: หากตรงตามเงื่อนไข ให้ดำเนินการ ถ้าไม่ตรง ให้ดำเนินการอื่น if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } ตัวอย่าง: หากคุณอายุเกิน 18 ปี ให้อนุมัติการเข้าถึง หากน้อยกว่านั้นจะไม่ได้รับการอนุมัติ Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
โอเปอเรเตอร์การเลือก
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } ตัวอย่าง: ถ้า n = 50 ให้พิมพ์ "CS50 คือ Introduction to Computer Science I" ถ้า n = 51 ให้พิมพ์ "CS51 is Introduction to Computer Science II" หรือพิมพ์ "ขออภัย ฉันไม่คุ้นเคยกับชั้นเรียนนั้น!" switch (n) { case 50: printf("CS50 is Introduction to Computer Science I\n"); break; case 51: printf("CS51 is Introduction to Computer Science II\n"); break; default: printf("Sorry, I'm not familiar with that class!\n"); break; }
รอบ
while: ตรวจสอบเงื่อนไข จากนั้นจึงดำเนินการในขณะที่เงื่อนไขเป็นจริง while (condition) { // выполнять, пока истина } do/ while แตกต่างในครั้งแรกที่ดำเนินการโดยไม่ตรวจสอบเงื่อนไข จากนั้นจึงตรวจสอบเท่านั้น หากเงื่อนไขเป็นจริง มันจะทำซ้ำการกระทำจนกว่าเงื่อนไขจะเป็นเท็จ do { ) // выполнять, пока истина } while (condition); for loop ทำซ้ำการกระทำตามจำนวนครั้งที่ระบุ Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 Loop สามารถซ้อนกันภายในกันและกันได้ ในกรณีนี้ ในแต่ละขั้นตอนของลูปด้านนอก ลูปด้านในจะถูกดำเนินการอย่างสมบูรณ์ Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
ประเภทข้อมูลพื้นฐานในภาษาซี
основные типы данных в C
ห้องสมุดซี
คุณอาจสงสัยแล้วว่าบรรทัดแรกของโปรแกรม C หมายถึงอะไร: บทบาทของมันคืออะไร และเป็นไปได้ไหมหากไม่มีมัน? บรรทัด #include ทำหน้าที่สำคัญมาก: ประกอบด้วยไลบรารีของโค้ดที่เขียนไว้แล้วลงในโปรแกรมของคุณ ชื่อของไลบรารีที่เชื่อมต่อจะอยู่ในวงเล็บมุม (<>) และมีนามสกุล (.h) หากไม่มีห้องสมุด แม้แต่การกระทำขั้นพื้นฐานที่สุดก็จะต้องอธิบายซ้ำแล้วซ้ำอีกทุกครั้ง ห้องสมุดที่เราเชื่อมต่อ#include มีฟังก์ชันอินพุต/เอาท์พุต ซึ่งช่วยให้เราใช้ฟังก์ชัน printf() เพื่อพิมพ์ลงบนหน้าจอได้ นั่นคือถ้าเราไม่ได้เขียนบรรทัด #include แต่ทิ้งฟังก์ชัน printf() ไว้ในเนื้อหาของโปรแกรม เมื่อเราพยายามเรียกใช้ เราจะได้รับข้อผิดพลาด! เพราะหากไม่มีไลบรารี่นี้ คอมไพลเลอร์จะไม่รู้ว่า printf() คืออะไร มีห้องสมุดมาตรฐานที่ประกอบขึ้นเป็นคำศัพท์ของภาษา ฟังก์ชัน printf() ไม่ได้มีอยู่ในคอมพิวเตอร์แต่รวมอยู่ในไลบรารี C มาตรฐาน นั่นคือโปรแกรมเมอร์บางคนเคยเขียนฟังก์ชันนี้และรวมไว้ในไลบรารี ขณะนี้ผู้อื่นสามารถใช้งานได้โดยไม่ต้องสร้างล้อขึ้นมาใหม่ เพื่อให้คอมไพเลอร์ "เข้าใจ" เราก็เชื่อมต่อกัน . มีไลบรารีมาตรฐานอื่นๆ ที่ใช้ในกระบวนการ CS50 ตัวอย่างเช่น ไลบรารีของสตริง ซึ่งอธิบายการดำเนินการด้วยสตริง (การกำหนดความยาว การบวก ฯลฯ) เมื่อเปรียบเทียบกับภาษาโปรแกรมยอดนิยมอื่นๆ จำนวนไลบรารี C มาตรฐานมีน้อยมาก แต่มีห้องสมุดที่เขียนขึ้นเองซึ่งส่วนใหญ่มักมีความเชี่ยวชาญสูงมากกว่า ใช่แล้ว ห้องสมุด ถูกสร้างขึ้นโดยเฉพาะสำหรับนักเรียน CS50 ถึงเวลาจดบันทึกสำคัญ:นอกเหนือจากการเขียนโปรแกรมและการแก้ปัญหาโดยใช้โค้ดของคุณเองแล้ว Developer ที่ดียังมีทักษะที่สำคัญอีกประการหนึ่งคือ ความรู้เกี่ยวกับเครื่องมือที่เขียนไว้แล้ว และความสามารถในการใช้งาน (ไลบรารีของผู้อื่น) เพื่อให้เป็น เพื่อไม่ให้เสียเวลาในการคิดค้น “กงล้อ” ใหม่ ดังนั้น หากคุณกำลังแก้ไขปัญหาที่น่าเบื่อหรือซับซ้อนซึ่งดูเหมือนเป็นเรื่องปกติ ให้เรียนรู้ที่จะถามตัวเองว่า “มีคนอื่นเป็นคนเขียนวิธีแก้ปัญหานี้หรือเปล่า?” มีโอกาสดีที่เป็นกรณีนี้ และคุณสามารถค้นหาฟังก์ชันนี้ได้ในไลบรารีที่มีอยู่ ในแง่เทคนิค ไลบรารีคือไฟล์ไบนารี่ที่สร้างขึ้นโดยการรวมคอลเลกชันของไฟล์อ็อบเจ็กต์โดยใช้ตัวเชื่อมโยง ไฟล์อ็อบเจ็กต์คือไฟล์ที่มีนามสกุล (*.o) ที่คุณได้รับเมื่อคอมไพล์แอปพลิเคชัน
โครงสร้างของไลบรารี C
Когда программист пишет библиотеку, code распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит code, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та or иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку: less /usr/include/stdio.h Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 15 Whatбы выйти из less, нажмите q на клавиатуре. Заголовочный файл не содержит code функций, что служит примером очень важного понятия — сокрытия данных or инкапсуляции. Пользователю системы незачем знать «внутренности» библиотек, ему достаточно, чтобы она работала. Если вы прошерстите stdio.h, то не найдете там реализации printf(), хотя How её использовать, вы уже знаете. Это сделано для того, чтобы защитить данные от вмешательства, которое порой может плохо отразиться на системе. Так, если кто-то изменит реализацию функции printf() в библиотеке, это отразится на всех тех программах, которые её используют. Любознательным будет интересно, где спрятана реализация. Согласно конвенции (соглашения, принятые в мире программирования) такой code хранят в файле с расширением (*.c). После компиляции библиотеки на основе двух файлов с одинаковым именем, но разным расширением создается an objectный файл, который собран так, чтобы создать файл с двоичным codeом библиотеки. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 16 Author библиотеки передает программисту, который хочет её использовать, два file — с двоичным codeом, а также заголовочный файл. Таким образом, файл с исходным codeом программисту не нужен. Точнее, он может быть нужен, если программист хочет что-то поменять в самой библиотеке и перекомпorровать её под собственные нужды. Whatбы воспользоваться функциями библиотеки в своей программе нужно проделать следующее: 1. Включить заголовочный файл в программу с помощью строки #include В случае стандартных библиотек достаточно указать Name библиотеки в угловых скобках: #include <Name_библиотеки.h> Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом: #include “Name_библиотеки.h” 2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, How мы говорor выше, заголовочный файл не содержит реализации элементов библиотеки. Whatбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50: clang hello –lcs50 Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода . Программы в C состоят из функций, а те — из операторов и переменных. Функция — это кусок codeа, в котором уже есть or подаются Howие-то данные, а Howие-то данные получают в результате её исполнения. Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на самое себя, и результат этого умножения она выдает на выходе. int sqr(int a) { return a*a; } int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это How переменная в уравнении. То есть, если мы хотим узнать квадрат числа 5, то мы вызовем нашу функцию в виде sqr(5) и получим результат 25. int — тип данных (от англ. integer — целые числа). Наша функция написана так, что мы не можем вызвать её с аргументом a = 5.5. Такая попытка выдаст ошибку, поскольку 5.5 — число дробное, а наше число должно быть целым. int перед именем функции означает тип, который должна эта функция возвращать. Он не обязательно совпадает с типом аргумента. Пример: функция, которая отнимает от целого числа 0.5: double bit_less(int a) { double b; b = a – 0.5; return b; } int main (void) — название главной функции. В одной программе может быть много функций, но, чтобы начать её выполнять, нужна функция под названием main. Слово void в скобках означает, что у этой функции нет аргументов. Внимание! main всегда возвращает int, но return для неё не обязателен. Пример функции не возвращающей значения: void sayhello(void) { printf(“hello everyone!\n”); } При вызове функции в главной программе, она выведет приветствие. Давайте напишем одну программу, в которой будет несколько функций. Тех, что мы уже создали выше. Две созданные нами функции вызовем через главную функцию main(). В C, How и любом языке, есть такой элемент, How комментарий or примечание в коле программы, предназначенное не для компьютера, а для понимания людей. Например, описание, что именно делает code. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) codeе очень сложно. //пример однострочного комментария /** а это – многострочного **/ #include //функция возведения в квадрат числа a int sqr(int a) { return a*a; } //выводит приветствие void test(void) { printf ("hello everyone!\n"); } //главная функция int main(void) { test(); printf("%d\n", sqr(5)); } Почти всё, что есть в этой программе вы уже видели. Две функции — возведения в квадрат и приветствия и главная функция main, где мы последовательно вызываем эти две функции. В результате выполнения программы у нас сначала выведется приветствие, на следующей строке — квадрат 5. Обратите внимание, функция test() вызывается с пустыми скобками, потому что её аргументы определены How void.
Еще немного о вводе/выводе в C
Вы, наверное, уже успели заметить странные символы %d и %f в скобках оператора printf. Дело в том, что функция printf выводит данные в следующем обобщенном виде: рrintf ("управляющая строка", аргумент1, аргумент2,...); Управляющая строка содержит компоненты трех типов:
  • символы, которые выводятся на экран дисплея;
  • спецификаторы преобразования, которые вызывают вывод на экран очередного аргумента из последующего списка;
  • управляющие символьные константы.
Спецификатор преобразования начинается со знака % и заканчивается символом, задающим преобразование. Некоторые из таких символов:
  • с: meaningм аргумента является символ;
  • d or i: десятичное целое число;
  • f: десятичное число с плавающей точкой;
  • s: строка символов.
То есть, %d означает, что на экране появится целое десятичное, а %f — десятичное с плавающей запятой. What если нам нужно, чтобы пользователь ввёл данные с клавиатуры? Для этого можно использовать функцию scanf( ), прототип которой также лежит в библиотеке stdio. Whatбы считать с экрана вещественное число, в программе нужно написать строку scanf("%d", &a); Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 17
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION