เป้าหมายในสัปดาห์แรก
- ทำความคุ้นเคยกับคำสั่ง Linux พื้นฐาน
- เรียนรู้ไวยากรณ์ C พื้นฐานและแก้ไขปัญหาเล็กน้อย
- เริ่มคิดให้ชัดเจนมากขึ้น =)
IDECS50
เพื่อให้งานเสร็จสมบูรณ์ CS50 เสนอ IDE (Integrated Development Environment) ในระบบคลาวด์ หากต้องการใช้งาน ให้สร้างบัญชีบนแพลตฟอร์ม edX และลงทะเบียนสำหรับหลักสูตรเดิม หลังจากนั้น:1. ไปที่ cs50.io เลือก edX จากรายการ ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่านของคุณ คลิกส่ง 2. ป้อนข้อมูลบัญชี edX ของคุณ คลิกกลับไปที่ ID.CS50.NET



บรรทัดคำสั่งและเรียกใช้ CS50 IDE
ที่ด้านล่างของหน้าต่าง CS50 IDE ในแท็บ Terminal จะมีหน้าต่างเทอร์มินัลหรือแผงบรรทัดคำสั่ง คุณสามารถป้อนคำสั่งสตริงได้ที่นี่: คุณสามารถทำสิ่งเดียวกันกับอินเทอร์เฟซหน้าต่างได้ เช่น เปิดแอปพลิเคชัน ลบและสร้างไฟล์ ติดตั้งซอฟต์แวร์ หากคุณไม่เคยใช้งานบรรทัดคำสั่งมาก่อน วิธีการนี้อาจดูยุ่งยาก คุณต้องจำคำสั่งแล้วพิมพ์แทนการคลิกที่ไอคอนและปุ่ม สิ่งนี้เป็นจริงในระดับหนึ่งจากนั้นอินเทอร์เฟซของหน้าต่างก็ถูกประดิษฐ์ขึ้น อย่างไรก็ตาม บรรทัดคำสั่งมีให้ใช้งานในทุกระบบปฏิบัติการและผู้ดูแลระบบก็ชอบมัน และทั้งหมดเป็นเพราะบางครั้งคุณไม่สามารถอยู่ได้โดยปราศจากมัน ในหน้าต่าง IDE ในเทอร์มินัล คุณจะเห็นบรรทัดลึกลับ: ชื่อผู้ใช้:~/workspace $ แทนที่ “ชื่อผู้ใช้” ซึ่งจะมีชื่อที่สร้างขึ้นโดยอัตโนมัติ (ขึ้นอยู่กับข้อมูลการลงทะเบียนของคุณ) คลิกที่หน้าต่างเทอร์มินัล พิมพ์:update50
กด Enter คำสั่งขอให้ระบบอัพเดต คุณจะเห็นบรรทัดปรากฏในเทอร์มินัลที่อธิบายกระบวนการติดตั้ง อย่าปิด CS50 IDE จนกว่าคุณจะเห็นการอัปเดตเสร็จสมบูรณ์! . หลังจากนี้ บรรทัดเริ่มต้นจะปรากฏขึ้นอีกครั้ง ซึ่งเป็นบรรทัดที่มีชื่อของคุณ
ทำงานที่ IDE
มาสร้างโฟลเดอร์ที่จะจัดเก็บไฟล์ของคุณกัน คลิกขวา~/workspace (ไดเรกทอรีรากของคุณ) ที่มุมซ้ายบนของCS50 IDEเลือกNew Folder เปลี่ยนชื่อโฟลเดอร์pset1 (หากคุณสะกดชื่อผิด ให้คลิกขวาที่โฟลเดอร์ของคุณแล้วเลือกเปลี่ยนชื่อ )


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 $
ls
make hello
./hello
hello, world
ls
แมลง?
หากหลังจากคำสั่ง 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 หากโปรแกรมทำงานอย่างถูกต้อง คุณจะเห็น: 
:( 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:

#include
int main(void) { printf("hello, world\n"); }
แสดงถึงฟังก์ชันที่พิมพ์ "คำ" ของสไปรท์ลงในฟองการ์ตูนใน Scratch มีฟังก์ชัน printf ในภาษา C ที่ทำสิ่งเดียวกัน แต่ไม่มีการ์ตูนเท่านั้น
- main - เป็นภาษาอังกฤษ - "main" จุดเข้าสู่โปรแกรม เหมือนกับ
.
วงจรที่ไม่มีที่สิ้นสุด

while (true) { printf("hello, world\n"); }
ในขณะที่ (จริง) ทำสิ่งเดียวกัน: การวนซ้ำยังคงทำงานต่อไปในขณะที่ (ในขณะที่) ค่าเป็นจริง (นิพจน์บูลีน "จริง" หรือ "หนึ่ง") วงจรนี้จะดำเนินไปไม่รู้จบ
วนซ้ำที่แสดงวลีบนหน้าจอ 10 ครั้ง
Scratch
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++) อีกตัวอย่างหนึ่ง: 
int counter = 0; while (true) { printf("%i\n", counter); counter++; }
- ตัวนับเก็บค่าเป็น C และ Scratch ใน C เราตั้งค่า int counter = 0
แทน
- เราทำเครื่องหมายประเภทของตัวแปรเป็น int เพื่อความชัดเจน: i เป็นจำนวนเต็ม (จากจำนวนเต็มภาษาอังกฤษ คือ ทั้งหมด)
- เครื่องหมาย %i ที่เราใช้ใน printf ในบรรทัดที่ 4 คือตัวยึดตำแหน่งที่บอกให้เราพิมพ์จำนวนเต็มฐานสิบ เช่นเดียวกับที่เราบอกให้ printf แทนที่ตัวยึดตำแหน่งด้วยค่าที่ตัวแปรตัวนับใช้
นิพจน์บูลีน

(x < y) ((x < y) && (y < z))
เงื่อนไข


#include
คำสั่งแบบมีเงื่อนไข
คนเหล่านี้จะตรวจสอบว่าเงื่อนไขบางอย่าง (นิพจน์เชิงตรรกะ คำถามที่สามารถตอบได้เพียง "ใช่" หรือ "ไม่") เป็นจริงหรือไม่ และหากเป็นเช่นนั้น พวกเขาจะดำเนินการบางอย่างที่เชื่อมโยงกับเงื่อนไขนี้ ตัวอย่างจากชีวิต: ถ้าฝนตก (สมมติว่าฝนตก) และฉันอยู่ข้างนอก (ฉันอยู่ข้างนอกเมื่อฝนตก) ฉันจะกางร่มif (condition) { //исполнить, если meaning истинно }
ตัวเลือกที่ซับซ้อนกว่า: หากตรงตามเงื่อนไข ให้ดำเนินการ ถ้าไม่ตรง ให้ดำเนินการอื่น if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно }
ตัวอย่าง: หากคุณอายุเกิน 18 ปี ให้อนุมัติการเข้าถึง หากน้อยกว่านั้นจะไม่ได้รับการอนุมัติ 
โอเปอเรเตอร์การเลือก
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 ทำซ้ำการกระทำตามจำนวนครั้งที่ระบุ 

ประเภทข้อมูลพื้นฐานในภาษาซี

ห้องสมุดซี
คุณอาจสงสัยแล้วว่าบรรทัดแรกของโปรแกรม C หมายถึงอะไร: บทบาทของมันคืออะไร และเป็นไปได้ไหมหากไม่มีมัน? บรรทัด #include ทำหน้าที่สำคัญมาก: ประกอบด้วยไลบรารีของโค้ดที่เขียนไว้แล้วลงในโปรแกรมของคุณ ชื่อของไลบรารีที่เชื่อมต่อจะอยู่ในวงเล็บมุม (<>) และมีนามสกุล (.h) หากไม่มีห้องสมุด แม้แต่การกระทำขั้นพื้นฐานที่สุดก็จะต้องอธิบายซ้ำแล้วซ้ำอีกทุกครั้ง ห้องสมุดที่เราเชื่อมต่อ#include
โครงสร้างของไลบรารี C
Когда программист пишет библиотеку, code распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит code, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та or иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку:less /usr/include/stdio.h
Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым.


#include <Name_библиотеки.h>
Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом:
#include “Name_библиотеки.h”
2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, How мы говорor выше, заголовочный файл не содержит реализации элементов библиотеки. Whatбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50:
clang hello –lcs50
Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода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: строка символов.
scanf("%d", &a);
Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат.

GO TO FULL VERSION