JavaRush /Blog Java /Random-VI /Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4)
Masha
Mức độ

Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4)

Xuất bản trong nhóm
cs50 bằng tiếng Nga tài liệu bổ sung Nhiệm vụ tuần 1

Mục tiêu tuần đầu tiên

  • Làm quen với các lệnh Linux cơ bản
  • Tìm hiểu cú pháp C cơ bản và giải quyết một số vấn đề
  • Bắt đầu suy nghĩ rõ ràng hơn =)
IDE CS50
Để hoàn thành nhiệm vụ, CS50 cung cấp IDE (Môi trường phát triển tích hợp) trên đám mây. Để sử dụng nó, hãy tạo một tài khoản trên nền tảng edX và đăng ký khóa học ban đầu . Sau đó:
1. Vào cs50.io, chọn edX trong danh sách, nhập thông tin đăng nhập và mật khẩu của bạn, nhấp vào Gửi 2. Nhập thông tin tài khoản edX của bạn, nhấp vào Quay lại ID.CS50.NET . cs50.io 3. Chúng tôi đang chờ: không gian ảo của bạn đang được tạo. không gian ảo cs50 4. Xong! cs50 ide
Dòng lệnh và khởi chạy CS50 IDE
Ở cuối cửa sổ CS50 IDE, trong tab Terminal có cửa sổ terminal hoặc bảng dòng lệnh. Bạn có thể nhập các lệnh chuỗi tại đây: bạn có thể thực hiện tương tự như với giao diện cửa sổ, chẳng hạn như khởi chạy ứng dụng, xóa và tạo tệp, cài đặt phần mềm. Nếu bạn chưa bao giờ làm việc với dòng lệnh, phương pháp này có thể có vẻ cồng kềnh: bạn phải nhớ các lệnh và gõ chúng thay vì nhấp vào biểu tượng và nút. Ở một mức độ nào đó điều này đúng, khi đó giao diện cửa sổ đã được phát minh. Tuy nhiên, dòng lệnh có sẵn trong tất cả các hệ điều hành và quản trị viên rất thích nó. Và tất cả là vì đôi khi bạn không thể sống thiếu nó. Trong cửa sổ IDE trong terminal, bạn sẽ thấy một dòng bí ẩn: username:~/workspace $ thay cho “username”, sẽ có một tên được tạo tự động (dựa trên dữ liệu đăng ký của bạn). Bấm vào cửa sổ terminal, gõ: update50 Nhấn Enter. Lệnh yêu cầu hệ thống cập nhật. Bạn sẽ thấy các dòng xuất hiện trong terminal mô tả quá trình cài đặt. Đừng đóng CS50 IDE cho đến khi bạn thấy Cập nhật hoàn tất! . Sau đó, dòng mặc định sẽ xuất hiện trở lại, dòng có tên của bạn.
Làm việc trong IDE
Hãy tạo một thư mục nơi các tập tin của bạn sẽ được lưu trữ. Nhấp chuột phải vào ~/workspace (thư mục gốc của bạn) ở góc trên cùng bên trái của CS50 IDE , chọn Thư mục mới . Đổi tên thư mục pset1 (nếu viết sai tên, hãy nhấp chuột phải vào thư mục của bạn và chọn Rename ). cs50 ide đổi tên thư mục Sau đó nhấp chuột phải vào thư mục pset1 và chọn New File . Xuất hiện file Untilted chúng ta đổi tên là hello.txt nhé . cs50 ide Nhấp đúp chuột vào hello.txt. Trong CS50 IDE, bạn sẽ thấy một tab mới và một trường ở bên phải nơi bạn có thể nhập. Nếu bạn đã thực hiện việc này, hãy chú ý đến biểu tượng dấu hoa thị (*) xuất hiện trước tên tệp trên tab - một chỉ báo cho biết các thay đổi đã được thực hiện đối với tệp nhưng chưa được lưu. Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 1 Lưu tệp bằng cách đi tới *File > Save hoặc sử dụng lệnh + S (trên máy Apple) hoặc Ctrl + S (trên PC). Dấu hoa thị sẽ biến mất. Hãy kiểm tra xem tập tin có ở đúng vị trí không. Hãy thực hiện việc này bằng dòng lệnh, đã đến lúc làm quen với nó :). Như trước đây, dòng hoạt động trong thiết bị đầu cuối trông như thế này: username:~/workspace $ Không gian làm việc - thư mục làm việc hiện tại (thư mục đang mở trong môi trường làm việc). Dấu ngã (~) cho biết thư mục gốc (không gian làm việc nằm trong đó). Lưu ý rằng không gian làm việc trong thiết bị đầu cuối giống với biểu tượng ~/workspace ở góc trên cùng bên trái của IDE CS50. Hãy cùng luyện tập. Nhấp vào bất kỳ đâu trong thiết bị đầu cuối và nhập dòng lệnh ls và nhấn Enter. Hai chữ cái viết thường này - viết tắt của "list" - sẽ hiển thị danh sách các tệp và thư mục nằm bên trong thư mục không gian làm việc hiện tại. Trong số những thứ khác, bạn sẽ thấy pset1 bạn đã tạo ! Bây giờ hãy mở thư mục của chúng tôi bằng lệnh. Chúng tôi gõ cd pset1 hoặc chi tiết hơn: cd ~/workspace/pset1 Lệnh cd (thay đổi thư mục) thay đổi thư mục hoạt động, trong trường hợp của chúng tôi là ~/pset1 Dòng hoạt động đã thay đổi thành username:~/workspace/pset1 $ Điều này xác nhận rằng bạn hiện đang ở trong thư mục ~/workspace/pset1 (dòng này là viết tắt của “Tôi đang ở pset1 bên trong không gian làm việc thư mục nằm trong thư mục gốc, được ký hiệu là ~"). Bây giờ gõ ls Bạn sẽ thấy tệp hello.txt ! Nếu bạn nhấp vào tên trong thiết bị đầu cuối, sẽ không có gì xảy ra: đó là văn bản và nó không cung cấp thông tin hoạt động liên kết, nhưng nó xác nhận rằng hello.txt là nơi cần có. Type cd Nếu bạn chỉ viết chính lệnh cd mà không cung cấp đối số (nghĩa là tên của thư mục mà nó sẽ chuyển đến), nó sẽ trả về cho bạn vào thư mục gốc mặc định, do đó bạn sẽ thấy hình ảnh sau trên dòng hoạt động: username:~ $ Để quay lại thư mục pset1, hãy quay số cd workspace và nhấn Enter. Sau đó cd pset1 nhập lại. Bạn cũng có thể thay thế hai lệnh này bằng một lệnh xác thực hơn: cd workspace/pset1
Chào c!
Cuối cùng, thời khắc này đã đến! Hãy bắt đầu lập trình. Trong thư mục pset1 của chúng tôi trong IDE, hãy tạo một tệp có tên hello.c (bắt buộc phải có phần mở rộng), mở nó trong một tab mới (chúng tôi nghĩ bạn nhớ cách thực hiện việc này từ đoạn trước). QUAN TRỌNG! Các chữ cái phải viết thường, Linux phân biệt chữ hoa chữ thường. Hello.c và hello.c là các tệp khác nhau. Ở bên phải cửa sổ CS50 IDE, nhập chính xác văn bản giống như bạn thấy bên dưới. Có, bạn có thể sao chép nó, nhưng sẽ hữu ích hơn khi gõ nó. Các chữ cái có màu khác nhau vì CS50 IDE có tô sáng cú pháp. Nó làm nổi bật các khối văn bản bằng màu sắc để dễ đọc hơn. Màu sắc không được lưu trong tệp; chúng chỉ hiển thị trong IDE. Nếu chúng ở đó thì IDE hiểu C và bạn đã chỉ ra rằng đó là C trong phần mở rộng tệp (*.c). Nếu bạn gọi cùng một tệp hello.txt thì văn bản sẽ có một màu. Hãy đảm bảo rằng bạn đã gõ mọi thứ chính xác như trong ví dụ, nếu không bạn sẽ mắc phải lỗi đầu tiên =). Một lần nữa chúng tôi thu hút sự chú ý của bạn đến sự khác biệt giữa chữ thường và chữ hoa. Ký tự \n di chuyển con trỏ sang dòng tiếp theo và văn bản được nhập tiếp theo sẽ không dính vào đầu ra của chương trình. Ồ vâng, và đừng quên dấu chấm phẩy (;). Đây là dấu phân cách quan trọng cho các câu lệnh chương trình; C sẽ không muốn làm việc nếu không có chúng. Bấm Tệp > Lưu (hoặc lệnh- hoặc Ctrl-s). Bạn để ý dấu hoa thị phía trước tên file đã biến mất? Nếu có thì những thay đổi đã được lưu. Nhấp vào bất kỳ đâu trong cửa sổ terminal bên dưới mã của bạn và đảm bảo bạn đang ở bên trong ~/workspace/pset1 (nếu không, hãy nhấp vào cd và nhấn Enter, sau đó cd không gian làm việc/pset1 và Enter lần nữa). Dòng hoạt động của bạn sẽ trông như thế này: Hãy đảm bảo rằng tệp hello.c nằm chính xác ở vị trí cần có. Nhập và nhấn Enter. Bạn có thấy hello.c không? Nếu không, hãy quay lại một vài bước và tạo lại tệp trong thư mục mong muốn. ... Bây giờ đến khoảnh khắc trang trọng: chúng ta bắt chéo ngón tay và... chúng ta gõ: và với những ngón tay đan chéo, chúng ta nhấn Enter. Chính xác là xin chào, không phải xin chào.c. Nếu tất cả những gì bạn nhìn thấy trước mặt sau hành động này là dòng hoạt động thứ hai, trông giống hệt dòng trước đó thì mọi thứ đều hoạt động! Mã nguồn của bạn đã được dịch sang mã máy hoặc mã đối tượng (nghĩa là theo chuỗi 0 và 1). Bây giờ mã này có thể được thực thi (nghĩa là chương trình có thể chạy được!). Để thực hiện việc này, gõ: trong dòng lệnh, nhấn Enter. Nếu bạn không thay đổi văn bản nằm giữa các "", bạn sẽ thấy bên dưới: Nếu bây giờ bạn nhập lệnh và nhấn Enter, bạn sẽ thấy một tệp hello mới, cùng với hello.c và hello.txt. Lời chào đầu tiên phải có dấu hoa thị sau tên, điều này báo hiệu rằng đây là tệp thực thi, tức là tệp mà bạn khởi chạy chương trình. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Lỗi?
Nếu sau lệnh make mà bạn thấy lỗi thì đã đến lúc gỡ lỗi lần đầu tiên! Những dòng chữ như “tuyên bố dự kiến” có nghĩa là bạn đã mắc lỗi đánh máy ở đâu đó. Kiểm tra lại mã ở trên, chỉ cần thật cẩn thận về tất cả các chi tiết. Chú ý! Mô tả lỗi được cung cấp bằng tiếng Anh. Nếu không rõ, hãy sử dụng công cụ tìm kiếm, Google Dịch hoặc đặt câu hỏi trong phần nhận xét. Khi bạn đã sửa lỗi, đừng quên lưu mã của mình bằng Tệp > Lưu (hoặc lệnh- hoặc Ctrl-s), nhấp lại vào bên trong cửa sổ terminal và nhập make hello (Chỉ cần đảm bảo rằng bạn đang ở ~ /workspace/pset1 trước). Nếu không còn lỗi, hãy chạy chương trình bằng cách gõ lệnh, ./hello về lý thuyết, cụm từ quý giá sẽ xuất hiện trước mặt bạn, kèm theo dấu ngoặc kép của toán tử printf, ra lệnh “in”. Nếu cửa sổ terminal có vẻ quá nhỏ, hãy nhấp vào biểu tượng dấu cộng (+) được khoanh tròn bên cạnh hello.c.
Kiểm tra tính đúng đắn
Ứng dụng check50 được tích hợp vào CS50 IDE. Nó hoạt động từ dòng lệnh và kiểm tra lỗi của một số chương trình. Nếu bạn chưa ở đó, hãy chuyển đến thư mục ~/workspace/pset1 bằng cách chạy lệnh trong terminal: cd ~/workspace/pset1 Bây giờ chạy ls bạn sẽ thấy ít nhất một tệp hello.c. Đảm bảo tên tệp trông giống như thế này chứ không phải Hello.c hoặc hello.C. Bạn có thể đổi tên tệp bằng cách chạy lệnh mv source destination nguồn - tên tệp hiện tại, đích - tên tệp mới. mv (từ tiếng Anh) là một tiện ích đổi tên. Nếu vô tình đặt tên file là Hello.c, bạn gõ dòng: mv Hello.c hello.c Sau khi chắc chắn rằng tên file chính xác là hello.c, hãy gọi chương trình kiểm tra check50. Xin lưu ý rằng 2015.fall.pset1.hello là mã định danh duy nhất cho vấn đề “hello world”. check50 2015.fall.pset1.hello hello.c Nếu chương trình được thực thi chính xác, bạn sẽ thấy: Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 2 Mặt cười màu xanh lá cây có nghĩa là bài kiểm tra đã vượt qua. Bạn cũng có thể thấy URL ở cuối đầu ra check50, nhưng nó chỉ dành cho nhân viên (tuy nhiên, nếu bạn quan tâm, hãy xem thử!). check50 chạy 3 bài kiểm tra: liệu tệp hello.c có tồn tại hay không, liệu hello.c có biên dịch hay không và liệu ứng dụng có tạo ra dòng có nội dung "hello, world\n" hay không. Nếu bạn thấy biểu tượng cảm xúc màu đỏ buồn thì có nghĩa là bạn đã gặp lỗi. :( 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 Ở đây check50 không tìm thấy hello.c và biểu tượng mặt cười màu đỏ cho biết bạn đã nhầm tên hoặc tải tệp lên sai vị trí. Biểu tượng cảm xúc “trung lập” màu vàng có nghĩa là bài kiểm tra không chạy. Và họ có thể bắt đầu từ đâu nếu chương trình không tìm thấy tệp cần kiểm tra? Đây là một tùy chọn khác sẽ bật lên nếu bạn thay đổi văn bản mà hàm printf() sẽ xuất ra: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 báo cáo rằng dòng hello, world\n đã được mong đợi, nhưng lại xuất hiện một dòng khác. check50 không tính điểm khi hoàn thành khóa học nhưng kiểm tra xem kết quả của bài tập có khác với mong đợi hay không. Và nó cho phép bạn xác minh điều này trước khi xác nhận tính chính xác của nhiệm vụ trong khóa học (chúng tôi sẽ cho bạn biết cách thực hiện việc này sau).
Khái niệm cơ bản về C: So sánh với Scratch
Xin chào thế giới trong Scratch và C:
Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 3 #include int main(void) { printf("hello, world\n"); }
  • Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 4đại diện cho hàm in các "chữ" của một sprite thành bong bóng truyện tranh trong Scratch, có một hàm printf trong C thực hiện điều tương tự, chỉ khác là không có phim hoạt hình.
  • chính - trong tiếng Anh - “chính”. Điểm đầu vào của chương trình. Giống như Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 5.
Chu kỳ vô tận
Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 6 được dịch sang C: while (true) { printf("hello, world\n"); } while (true) thực hiện điều tương tự: vòng lặp tiếp tục công việc của nó trong khi (while) giá trị là true (biểu thức Boolean “true” hoặc “one”). Vòng lặp này sẽ chạy vô tận.
Vòng lặp hiển thị một cụm từ trên màn hình 10 lần
Scratch Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i là một biến đếm; giá trị của nó được thay đổi bởi toán tử tăng i++, tăng nó lên 1 ở mỗi lần lặp của vòng lặp. Ban đầu, i được gán giá trị 0 bằng toán tử gán =. Chú ý! Giống như trong Java, đẳng thức trong C được biểu thị bằng ==, toán tử gán =. Nghĩa là, a = 5 có nghĩa là biến a đã được gán giá trị 5, và (a= =5) có nghĩa là biểu thức Boulogne (nếu a bằng 5 thì biểu thức đó đúng, nếu không bằng thì sai) . Vòng lặp sẽ dừng khi tôi “tăng” lên 9. Dễ dàng tính toán, vòng lặp sẽ được thực hiện 10 lần. Vì vậy, nếu bạn cần lặp lại điều gì đó với số lần nhất định, trong C bạn xác định vòng lặp for (int i = 0; i < 10; i++). Một ví dụ khác: Tài liệu bổ sung bài giảng CS50: Tuần 1 (bài 3 và 4) - 8 Và điều tương tự được dịch sang C: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • bộ đếm lưu trữ giá trị trong C và Scratch. Trong C chúng ta đặt int counter = 0 thay vì Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • Chúng tôi đánh dấu loại biến là int để làm rõ: i là một số nguyên (từ số nguyên tiếng Anh, toàn bộ).
  • %i chúng ta sử dụng trong printf ở dòng thứ tư là một phần giữ chỗ yêu cầu chúng ta in số nguyên thập phân, giống như chúng ta yêu cầu printf thay thế phần giữ chỗ bằng giá trị mà biến đếm lấy.
Biểu thức Boolean
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 Nó giống như (x < y) ((x < y) && (y < z))
Điều kiện
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 Và tương đương với từ “chết tiệt”: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 Thế còn cụm từ khó hiểu đầu tiên thì sao? Thông tin thêm về điều này sau, trong phần “Thư viện”. #include
Câu điều kiện
Những người này kiểm tra xem một số điều kiện (một biểu thức logic, một câu hỏi chỉ có thể trả lời bằng “có” hoặc “không”) có đúng hay không và nếu đúng thì họ thực hiện một số hành động gắn liền với điều kiện này. Một ví dụ trong cuộc sống: nếu trời mưa (giả sử trời mưa) và tôi ở bên ngoài (tôi ở bên ngoài khi trời mưa), tôi mở ô. if (condition) { //исполнить, если meaning истинно } Một lựa chọn phức tạp hơn: nếu điều kiện được đáp ứng, hãy thực hiện một hành động; nếu không, hãy thực hiện một hành động khác. if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } Ví dụ: nếu bạn trên 18 tuổi, hãy chấp nhận quyền truy cập. Nếu thấp hơn sẽ không được duyệt. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
Toán tử lựa chọn
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } Ví dụ: nếu n = 50 thì in ra "CS50 là Nhập môn Khoa học Máy tính I", nếu n = 51 thì in ra "CS51 là Nhập môn Khoa học Máy tính II", nếu không thì in ra "Xin lỗi, tôi không quen với lớp đó!" 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; }
Chu kỳ
while: kiểm tra điều kiện, sau đó thực hiện hành động trong khi điều kiện đúng while (condition) { // выполнять, пока истина } do/while khác ở chỗ lần đầu tiên nó thực hiện hành động mà không kiểm tra điều kiện và sau đó chỉ kiểm tra nó. Nếu điều kiện đúng, nó sẽ lặp lại hành động cho đến khi điều kiện trở thành sai. do { ) // выполнять, пока истина } while (condition); Vòng lặp for lặp lại một hành động với số lần xác định. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 Các vòng lặp có thể được lồng vào nhau. Trong trường hợp này, tại mỗi bước của vòng lặp bên ngoài, vòng lặp bên trong sẽ được thực thi hoàn toàn. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
Các kiểu dữ liệu cơ bản trong C
основные типы данных в C
Thư viện C
Có lẽ bạn đã tự hỏi dòng đầu tiên của chương trình C có nghĩa là gì: Vai trò của nó là gì và liệu có thể thực hiện được nếu không có nó không? Dòng #include thực hiện một điều rất quan trọng: nó bao gồm các thư viện mã đã được viết sẵn vào chương trình của bạn. Tên của thư viện được kết nối được đặt trong dấu ngoặc nhọn (<>) và có phần mở rộng (.h). Nếu không có thư viện thì bất kỳ hành động nào, thậm chí là hành động cơ bản nhất, sẽ phải được mô tả đi mô tả lại nhiều lần. Thư viện chúng tôi đã kết nối#include chứa các hàm vào/ra. Chính điều này cho phép chúng ta sử dụng hàm printf() để in ra màn hình. Nghĩa là, nếu chúng ta không viết dòng #include , nhưng để lại hàm printf() trong phần nội dung của chương trình; khi chúng tôi cố chạy nó, chúng tôi sẽ gặp lỗi! Bởi vì không có thư viện này trình biên dịch sẽ không biết printf() là gì. Có những thư viện tiêu chuẩn, chúng tạo nên từ vựng của ngôn ngữ. Hàm printf() không được tích hợp sẵn trong máy tính nhưng nó được đưa vào thư viện tiêu chuẩn C. Tức là trước đó một số lập trình viên đã viết nó và đưa nó vào thư viện. Bây giờ những người khác có thể sử dụng nó mà không cần phải phát minh lại bánh xe. Để trình biên dịch “hiểu” được nó, chúng ta kết nối . Có các thư viện tiêu chuẩn khác được sử dụng trong quy trình CS50. Ví dụ: một thư viện các chuỗi mô tả các thao tác với chuỗi (xác định độ dài, phép cộng, v.v.). So với các ngôn ngữ lập trình phổ biến khác, số lượng thư viện C tiêu chuẩn rất ít. Nhưng có những thư viện tự viết, thường có tính chuyên môn cao hơn. Vâng, thư viện được tạo riêng cho sinh viên CS50. Đã đến lúc cần lưu ý quan trọng: ngoài việc viết chương trình và giải quyết vấn đề bằng mã của riêng bạn, một nhà phát triển giỏi còn có một kỹ năng quan trọng khác: kiến ​​thức về các công cụ đã được viết và khả năng sử dụng chúng (thư viện của người khác) để không lãng phí thời gian để phát minh lại “bánh xe”. Vì vậy, nếu bạn đang trong quá trình giải quyết một vấn đề tẻ nhạt hoặc phức tạp có vẻ khá phổ biến, hãy học cách tự hỏi bản thân câu hỏi: “Có phải người khác đã viết ra giải pháp này không?” Rất có thể trường hợp này xảy ra và bạn có thể tìm thấy chức năng này trong thư viện hiện có. Về mặt kỹ thuật, thư viện là một tệp nhị phân được tạo bằng cách kết hợp một tập hợp các tệp đối tượng bằng trình liên kết. Tệp đối tượng là những tệp có phần mở rộng (*.o) mà bạn nhận được khi biên dịch ứng dụng.
Cấu trúc của thư viện 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
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION