[Powered by Google Translate] DAVID J. Malan: Được rồi, đây là CS50 và đây là
kết thúc Tuần 1, vì vậy các card nghiên cứu và tổng số
bạn cùng lớp mà bạn có trong năm nay là 745.
Và chúng tôi đang rất vui mừng khi có rất nhiều bạn trong khóa học
học kỳ này, nhưng ngay cả khi khóa học này là rất lớn,
nhận ra rằng đó là những điều này như bữa ăn trưa Thứ Sáu, như
giờ, 15-người phần, và do đó, ra mà
thực sự có nghĩa là để tạo ra thân mật hơn
môi trường.
Vì vậy, mặc dù chúng ta có thể thu thập một lần hoặc hai lần một tuần, ở đây ở
Sanders, biết rằng có rất nhiều kinh nghiệm của bạn trong khóa học này
sẽ có rất nhiều tay cùng với các bạn cùng lớp của bạn
và các nhân viên giảng dạy.
>> Vì vậy, ở đây chúng tôi đi, Fall 2012.
Vì vậy, nhớ lại rằng lần cuối cùng chúng tôi đã kết thúc vào một lưu ý của
sự thiếu chính xác, nói về các đại diện của số.
Và chúng ta nhìn một trong những thất bại đã xảy ra, trong
thế giới thực, khi nó đến hiểu nhầm
máy tính làm việc như thế nào.
Vâng, hôm nay chúng ta sẽ xem xét lại một một trong những ý tưởng
cũng như tiếp tục cuộc thảo luận của chúng tôi của khách hàng CS50
và C và những gì nó có nghĩa là thực sự cho chương trình.
Nhưng trước tiên, chỉ cần một vài thông báo cơn lốc.
>> Phần bắt đầu vào chủ nhật này, và tuần đầu tiên luôn luôn là một
bit của một sự khởi đầu nhanh chóng, bởi vì chúng tôi chỉ có trong
phần hình thức của bạn.
Chúng tôi đang làm như vậy, bây giờ, với các nghiên cứu sinh giảng dạy, bây giờ
rằng họ biết lịch trình của họ, do đó, chúng tôi đang hướng tới,
Sáng thứ bảy, theo dõi với bạn với trang web của bạn
phân công, TF.
Nhận ra rằng họ sẽ bắt đầu vào ngày hôm sau, Chủ Nhật
hoặc thứ hai hoặc thứ ba.
Và sau đó chúng tôi sẽ đáp ứng phần thay đổi khi chúng phát sinh
trong những ngày tới.
Giờ làm việc, trong khi đó, một lần nữa, tối nay, 8 AM đến 11, trong
Annenberg, cũng như tối mai.
Mặc dù các bộ vấn đề nói chung là do vào thứ Năm
vào buổi trưa, nhận ra bạn có đến năm ngày muộn để chi tiêu,
do đó sự sẵn có của giờ làm việc vào các ngày thứ Năm, nếu
tiền mặt trong một trong những ngày cuối năm, do đó, trình
một cái gì đó vào thứ sáu.
Chúng tôi đề nghị rằng Scratch là một trong những niềm vui hơn, trong số các
vấn đề quan trọng thấp hơn bộ.
Và tôi sẽ treo lên những ngày cuối năm, chiến lược, chỉ cần
cho sau này trong học kỳ khi cuộc sống bắt đầu nhận được trong cách
với midterms và các lớp khác.
Vấn đề Set 1, trong khi đó, sẽ được đăng trên của khóa học
trang web vào thứ sáu này, như sẽ được đi bộ của khóa học
thông qua các video sẽ được quay tại 2:30 PM ngày thứ Sáu
và sau đó được đăng trực tuyến vào ngày hôm sau.
>> Vì vậy, chúng tôi đã kết thúc vào hôm thứ Hai.
Tôi muốn - trên thực tế, một trong những lưu ý ở đây.
Bởi vì các lớp học - bởi vì Sanders không chính xác cho vay
riêng của mình để trở lại bình thường Q & A và ... khủng khiếp, chúng tôi
sẽ cố gắng một chút gì đó mới trong năm nay, theo đó
nếu bạn không cảm thấy thoải mái nâng cao tay của bạn hoặc bạn chỉ cần
không muốn nâng cao tay của bạn trong một căn phòng như thế này,
chúng ta sẽ có một số các nghiên cứu sinh giảng dạy và CA
Manning cs50.net/discuss trong bài giảng.
Vì vậy, nếu bạn có một câu hỏi vì tôi đã hoàn toàn
không rõ ràng về một cái gì đó hoặc bạn đang tò mò về một số
chủ đề, hãy thử đăng nó ở đó.
Thẻ nó với một nhãn Bài giảng, và chúng tôi sẽ làm tốt nhất của chúng tôi
ngày hôm nay và tuần tới - we'll cố gắng này ra sân
bằng điện tử, trực tuyến, hoặc nếu nó cảm thấy như chúng ta nên
thực sự giải quyết hàng loạt, một trong các nghiên cứu sinh giảng dạy hoặc
CA sẽ nâng cao tay của họ và yêu cầu
nặc danh vào thay cho bạn.
Vì vậy, chúng tôi sẽ cung cấp cho một thử và xem như thế nào các công trình này.
Tuy nhiên, tất cả các phương tiện, tiếp tục nâng cao tay như bạn muốn.
>> Vì vậy, thời gian qua, chúng tôi tiết lộ rằng 10% hoặc một phần mười là không, trong
thực tế, 0,1, giống như bạn đã được giảng dạy nhiều năm trước đây.
Đó là trong thực tế, một giá trị như thế này.
Nhưng đó không hoàn toàn đúng, phải không?
Chúng tôi chỉ có hạn chế này trong máy tính, theo đó, nếu bạn
chỉ có một số lượng hữu hạn của bộ nhớ, RAM, hoặc nhiều hơn
đặc biệt bit, tốt, có chỉ có một số hữu hạn
điều bạn có thể đại diện.
Ví dụ, nếu chúng ta có con số không, và chúng tôi muốn
đại diện trong hệ nhị phân, sử dụng tám bit, nơi một chút,
một lần nữa, là một số không hoặc một trong một, chúng tôi có thể
đại diện cho nó là 00.000.000.
Và đó là điều không cần thiết ít tiết.
Cũng giống như trong hệ thống số thập phân trong thế giới thực,
nói chung, nếu bạn muốn viết số 123 số, chúng tôi
con người có thể không viết 00000123 mặc dù,
chức năng, đó là cùng một số chính xác.
Chúng tôi chỉ cần thả số không hàng đầu thế giới, do đó, để nói chuyện.
>> Trong hệ nhị phân, chúng ta có thể làm như vậy.
Nhị phân và số không, zero và nhị phân chỉ là bằng không.
Bạn chỉ cần một chút.
Nhưng một lần nữa, các đơn vị phổ biến nhất của biện pháp trên thế giới
của máy tính là byte, tám bit.
Chỉ vì một chút, khá vô dụng.
Tám bit, không terribly hữu ích, nhưng ít nhất nó nhiều hơn
hữu ích hơn một đơn vị đo lường.
Vì vậy, với tám bit, chúng ta thường sẽ đại diện cho nhị phân.
Vì vậy, ở đây chúng tôi có những con số không, một, hai, và sau đó, như
Nate đã làm trong video của chúng tôi vào thứ Tư tuần trước, chúng tôi có thể tiếp tục
đếm lên đến bảy, tám.
Và sau đó nếu chúng ta sử dụng bit hơn và nhiều hơn nữa, chúng tôi
có thể đếm lên đến vô cùng.
Nhưng nếu bạn chỉ có một số hữu hạn các bit, như là
trường hợp trong bất kỳ hệ thống máy tính, hoặc thậm chí tên lửa
hệ thống, tốt, thực sự bạn chỉ có một
hữu hạn số lượng chính xác.
Vì vậy, nếu bạn muốn để đại diện cho số như 0,1,,
máy tính có để chọn và chọn.
Và nếu nó chỉ có một số hữu hạn các số nó có thể
đại diện, nó có thể đến gần 0.1 cho bạn, nhưng nó có thể không
nhất thiết phải cung cấp cho bạn chính xác giá trị mà bạn muốn.
Và đây chỉ là một trong những thách thức của máy tính,
bên dưới mui xe, may mắn.
>> Khi chúng ta tiến xa hơn trong học kỳ, các cấp độ thấp hơn
chi tiết trở nên thú vị ít hơn nhiều, nhưng chắc chắn
áp dụng những ý tưởng này có thể có một số rất thực tế trên thế giới
phân nhánh.
Một là một niềm vui bit.
Có bao nhiêu bạn đã thấy Văn phòng không gian phim tuyệt vời?
Nếu bạn chưa có, đó là không chính thức của bạn
bài tập về nhà trong tuần.
Tuy nhiên, trong không gian văn phòng, hai người đàn ông trong bộ phim đó
lợi thế chính của ý tưởng này, nhưng họ thực sự đã đánh cắp
nó từ một bộ phim khác mà bạn có thể có
nhìn thấy, thậm chí nhiều năm trước.
Vì vậy, hãy để tôi cung cấp cho bạn một vài giây của đoạn trailer này từ
bộ phim này tuyệt vời và điều này là rất nhiều
học tập có liên quan.
>> [Lượt MOVIE]
Thật sự tôi đang được thúc đẩy.
Tôi có thể một chương trình virus sẽ rip
đặt thời gian lớn.
Vâng, nó hoạt động như thế nào?
Mỗi khi có một giao dịch ngân hàng nơi lãi suất là
tính toán, có hàng ngàn một ngày, máy tính kết thúc
với các phân số của một phần trăm.
Nhưng tôi sẽ không làm bất cứ điều gì bất hợp pháp.
Bất hợp pháp? Samir, đây là nước Mỹ.
Bạn có thề có Chúa.
Nếu không có ai biết về việc này nhưng chúng tôi, tất cả các quyền? Không có thành viên trong gia đình, không có
bạn gái, không ai.
[Không nghe được].
Đừng lo lắng, người đàn ông, tôi sẽ không nói cho ai biết hoặc.
[Video kết thúc]
>> Được rồi, như vậy có lẽ tôi thấy bộ phim này tốt hơn so với hầu hết
người dân ở đây, nhưng trong bất kỳ trường hợp nào, virus mà họ
cố gắng tạo ra -
và trong các bộ phim, bất cứ lúc nào họ muốn gọi cái gì đó của một virus,
nó thường không thực sự là một virus.
Nó chỉ là một chương trình mà ai đó đã viết để làm một cái gì đó.
Và trong trường hợp này, những kẻ đang cố gắng để viết một chương trình
đã lợi dụng công ty của họ được gọi là Innotech của
hệ thống máy tính, theo đó, máy tính, ngay cả khi nó
đến tiền bạc, có thể không nhất thiết phải
đại diện cho tiền chính xác.
Vì vậy, mặc dù bạn có thể có 0,10 USD trong tài khoản ngân hàng của bạn,
0,10, tốt, máy tính thực sự có thể nghĩ rằng bạn có
này nhiêu xu trong tài khoản ngân hàng của bạn.
Và như vậy những kẻ tham vọng để làm - và họ
đánh cắp ý tưởng, nó quay ra từ Superman III,
Richard Pryor đã làm những điều tương tự - họ cơ bản
viết chương trình mong muốn tất cả các dấu
số, tất cả, nhỏ xíu, nhỏ xíu, phân số nhỏ bé
đồng xu, và hút những người ra để con người chỉ
suy nghĩ, oh, nó chỉ có $ 0,10 ở đó, nhưng tất cả những người
số dấu cuối cùng thêm lên.
Vì vậy, một ý tưởng tuyệt vời và nó phản tác vui nhộn trong đó
đặc biệt là phim.
>> Nhưng trong thế giới thực, cũng có nhiều liên quan đến
tác động của các loại của sự vật.
Và một trong những lý do để nhảy vào lĩnh vực máy tính
khoa học là, một lần nữa, ứng dụng của nó chưa đến
khoa học kỹ thuật một mình, nhưng chỉ để
các lĩnh vực khác như là tốt.
Vì vậy, đây là một cái nhìn vẻ ít hơn những gì có thể đi sai, nhưng
nó cũng khá mở mắt, tôi nghĩ rằng, khi nói đến
sự hiểu biết chính xác làm thế nào công nghệ có mặt ở khắp nơi như
máy tính và lập trình hay những ngày này,
trong các hình thức của phần mềm.
Vì vậy, clip này tiếp theo là chỉ khoảng sáu phút, tiếp tục
nơi chúng tôi rời đi thời gian qua, nhưng cho phép chúng tôi để tìm một chút
sâu hơn tại một trong những những vấn đề này.
Hãy để tôi bỏ qua nơi chúng tôi rời đi,
ở ngay đây.
Và chúng tôi có phần hai của hai, cho khoảng sáu phút ở đây.
>> [Phim chơi]
Cản công nghệ tên lửa hiện đại.
Trong năm 1991, với sự khởi đầu của Chiến tranh vùng Vịnh đầu tiên, Patriot
tên lửa có kinh nghiệm tương tự với kiểu
vấn đề chuyển đổi số.
Và kết quả là, 20 người, 20 lính Mỹ, đã thiệt mạng
và khoảng 100 người khác bị thương, khi Patriot, được cho là
để bảo vệ chống lại các tên lửa Scud đến,
không bắn tên lửa.
>> Khi Iraq xâm lược Kuwait và Mỹ đã phát động một sa mạc
Cơn bão trong đầu năm 1991, Patriot pin tên lửa
triển khai để bảo vệ Ả-rập Xê-út và Israel từ Iraq
Scud tên lửa tấn công.
Patriot là một hệ thống bề mặt-đối-không tầm trung,
sản xuất bởi công ty Raytheon.
Kích thước của bản thân đánh chặn Patriot, nó về
khoảng 20 feet dài và nặng khoảng 2.000 kg.
Và nó mang một đầu đạn hạt nhân của khoảng - Tôi nghĩ rằng nó là khoảng
150 kg.
Và chính nó là đầu đạn nổ cao, trong đó có
mảnh vỡ xung quanh nó.
Vỏ của đầu đạn được thiết kế hành động như buckshot.
Các tên lửa được thực bốn mỗi thùng chứa và
vận chuyển bằng một trailer bán.
>> Hệ thống chống tên lửa Patriot đi lại ít nhất là để
20 năm nay.
Ban đầu nó được thiết kế như là một tên lửa phòng không
bắn hạ máy bay địch, trong chiến tranh vùng Vịnh đầu tiên.
Khi cuộc chiến tranh đến cùng, quân đội muốn sử dụng nó để bắn
giảm tên lửa Scud, không máy bay.
Không quân Iraq đã không quá nhiều của một vấn đề, nhưng quân đội
lo lắng về tên lửa Scud.
Và do đó, họ đã cố gắng để nâng cấp Patriot.
Chặn một tên lửa của đối phương đi du lịch tại MACH 5 sẽ
đủ thách thức.
Nhưng khi Patriot được đưa vào phục vụ, quân đội
đã không nhận thức của một sửa đổi Iraq đã làm cho họ
Tên lửa Scud gần như không thể đạt.
>> Những gì xảy ra là tên lửa Scud đã được
đến là không ổn định.
Họ lắc lư.
Lý do cho điều này là người Iraq, để nhận được 600
km của một tên lửa tầm xa 300 km, đã
trọng lượng đầu đạn phía trước và
thực hiện các đầu đạn hạt nhân nhẹ hơn.
Vì vậy, bây giờ của Patriot cố gắng để đến lúc các tên lửa Scud, và hầu hết các
thời gian, phần lớn thời gian, nó sẽ
chỉ cần bay của tên lửa Scud.
Một khi các nhà khai thác hệ thống Patriot nhận ra Patriot
đã bỏ lỡ mục tiêu của nó, họ phát nổ đầu đạn Patriot.
Để tránh thương vong có thể xảy ra, nó đã được cho phép
rơi xuống mặt đất.
Đó là những gì hầu hết mọi người đã thấy, như quả cầu lửa lớn trên bầu trời,
và hiểu lầm như chặn đầu đạn tên lửa Scud.
>> Mặc dù, trong bầu trời đêm, Patriots xuất hiện để được
tên lửa Scud phá hủy thành công, tại Dhahran, có thể là không có
sai lầm về hiệu quả của nó.
, Hệ thống radar của Patriot bị mất theo dõi của một
đến tên lửa Scud và không bao giờ đưa ra do
một lỗ hổng phần mềm.
Đó là người Israel là người đầu tiên phát hiện ra rằng còn
hệ thống, càng có nhiều sự khác biệt thời gian đã trở thành,
do một đồng hồ được nhúng vào trong máy tính của hệ thống.
Khoảng hai tuần trước khi thảm kịch tại Dhahran,
Israel báo cáo của Bộ Quốc phòng
hệ thống đã mất thời gian.
Sau khoảng tám giờ chạy, họ nhận thấy rằng
hệ thống đã trở nên đáng chú ý ít chính xác hơn.
Bộ Quốc phòng trả lời bằng cách nói cho tất cả các
pin Patriot, không rời khỏi hệ thống
cho một thời gian dài.
Họ không bao giờ nói một thời gian dài - 8 tiếng, 10
giờ, 1.000 giờ.
Không ai biết.
>> Pin Patriot đóng tại doanh trại tại Dhahran
đồng hồ nội bộ và thiếu sót của nó đã trên 100 giờ
đêm tháng hai 25.
Nó theo dõi thời gian với độ chính xác khoảng 1/10 của một giây.
1/10 thứ hai là một số thú vị bởi vì
nó không thể được thể hiện trong hệ nhị phân, chính xác, có nghĩa là
nó không thể được thể hiện một cách chính xác trong bất kỳ
máy tính kỹ thuật số hiện đại.
Thật khó để tin tưởng.
Tuy nhiên, sử dụng điều này như là một ví dụ.
>> Hãy lấy số 1/3.
Thứ ba không thể được thể hiện trong thập phân, chính xác.
Một phần ba là 0,333 xảy ra vô cùng.
Không có cách nào để làm điều đó với độ chính xác tuyệt đối trong số thập phân.
Đó là chính xác cùng một loại vấn đề đã xảy ra trong
Patriot.
Còn hệ thống chạy, các lỗi tồi tệ hơn thời gian đã trở thành.
Sau 100 giờ hoạt động, các lỗi trong thời gian chỉ
khoảng 1/3 của một giây.
Tuy nhiên, về nhắm mục tiêu một tên lửa đi du lịch tại MACH 5,
nó dẫn đến một lỗi theo dõi của hơn 600 mét.
Nó sẽ là một lỗi gây tử vong cho các binh sĩ tại Dhahran.
>> Gì đã xảy ra là một vụ phóng tên lửa Scud được phát hiện cảnh báo sớm
vệ tinh và họ biết rằng các tên lửa Scud được đến của họ
chung hướng.
Họ không biết nơi nó đã đến.
Bây giờ nó đã lên đến các thành phần radar của Patriot
hệ thống, bảo vệ Dhahran, để xác định vị trí và theo dõi các
tên lửa của kẻ thù đến.
Radar là rất thông minh.
Bạn thực sự có thể theo dõi vị trí của tên lửa Scud và sau đó
dự đoán nó có lẽ sẽ là thời gian tiếp theo
radar gửi một xung.
Điều đó đã được gọi là cửa phạm vi.
Sau đó, một khi Patriot quyết định đủ thời gian đã qua đi
sao và kiểm tra vị trí tiếp theo cho việc này được phát hiện
đối tượng, nó đi lại.
Vì vậy, khi nó đã đi đến chỗ sai, sau đó không thấy có
phản đối, và nó quyết định rằng không có đối tượng.
Đó là một phát hiện sai và xuống theo dõi.
>> Scud đến biến mất khỏi màn hình radar.
Và giây sau, nó đâm sầm vào doanh trại. Tên lửa Scud
giết chết 28 và là người cuối cùng bị sa thải trong quá trình
chiến Cuộc Chiến Tranh Vùng Vịnh đầu tiên.
Thật thảm thương, phần mềm cập nhật đến Dhahran
ngày hôm sau.
Và các lỗ hổng phần mềm đã được cố định, đóng cửa một chương trong
lịch sử khó khăn của tên lửa Patriot.
PATRIOT thực sự là một từ viết tắt cho "Theo dõi mảng Phased
Đánh chặn của mục tiêu. "
>> Tất cả, phải để một kết quả buồn nhiều hơn nữa không phải là khá
sự hiểu biết thế giới này.
Và, thực sự, takeaway từ bộ phim là các giải pháp
có được khởi động lại hệ thống phòng thủ tên lửa của bạn
mỗi một lần trong một thời gian.
Và như vậy một lần nữa, một trong những mục tiêu của khóa học này, chắc chắn
trên một quy mô khiêm tốn hơn so với các ứng dụng này, là để
tất cả mọi người thực sự mở mắt chính xác làm thế nào để bạn đi về
máy làm làm những gì bạn muốn họ làm và làm thế nào bạn đi
về làm điều đó một cách chính xác, trong khi trên đường đi làm
tốt, thanh lịch, và vv.
Và như vậy ngày hôm nay, chúng ta hãy đi sâu vào hơn một chút về điều này, nhưng
do đó chúng tôi không đi quá nhanh, đặc biệt là đối với những người kém
thoải mái, nhưng cũng vì thế mà chúng ta có thể giữ lại sự quan tâm của
những người thoải mái hơn, chúng ta hãy nhanh chóng bắt đầu với một chút
bản tóm tắt về một số những ý tưởng này.
Và một lần nữa, hãy hỏi đi, cả hai cá nhân hoặc online, nếu bạn có
câu hỏi vì vậy chúng tôi có thể giữ cho tất cả mọi người trên cùng một trang.
>> Vì vậy, các gia dụng CS50, nhanh chóng bước trở lại,
, theo cách của bạn?
OK nếu bạn không có ý tưởng gì những từ có thể là.
[Không nghe được]
Được rồi, do đó, một giao diện phổ quát cho -
rằng tất cả chúng ta đều có thể chia sẻ.
Chắc chắn rồi.
Vì vậy, chúng ta có thể, ví dụ, hãy nói với bạn đi đến một số
trang web, tải về phần mềm này cho hệ điều hành Mac OS.
Tải về phần mềm cho Windows, cấu hình
theo cách này và đó.
Nhưng thực tế là sau đó chúng tôi chạy vào vô số kỹ thuật
hỗ trợ vấn đề này.
Và cũng có những ngày này, nhiều những gì đang được thực hiện ở phía máy chủ,
trong thế giới của máy tính, đặc biệt là khi nói đến
phát triển web và các ứng dụng dựa trên web, thực sự là
thực hiện khá thường xuyên trên máy tính của Unix hoặc Linux, như trái ngược với
Máy Mac hoặc máy tính Windows.
>> Vì vậy, một trong những mặt tích cực, sau đó, sử dụng điều này được gọi là
CS50 gia dụng là tất cả chúng ta đều sẽ có cùng một môi trường.
Vì vậy, tất cả mọi người trên cùng một trang không có vấn đề phần cứng nào
đến trường với nhưng cũng sẽ được thâm nhập chính xác
cùng một môi trường mà bạn sẽ sử dụng đối với
học kỳ cuối cùng để phát triển web, cũng như trong
tương lai cho các ứng dụng thế giới thực của nó.
Vì vậy, cụ thể, gia dụng CS50 là một mảnh miễn phí của
phần mềm cho phép bạn chạy các hệ điều hành khác,
Linux, trong trường hợp này, trên máy tính của riêng bạn, trong một cửa sổ.
Bây giờ bạn có thể không chỉ cần tải về thiết bị.
Bạn cần một chương trình để chơi hoặc chạy các thiết bị.
Và đó là phần của phần mềm thường được biết đến như một
hypervisor.
Hypervisors đến trong hình thức của sản phẩm như VMware,
Virtual Box, Parallels.
Tất cả các loại của các công ty phần mềm, cả hai miễn phí và
thương mại, như nhau.
Những gì bạn sẽ thấy trong vấn đề Set 1 là hướng dẫn về cách
có được phần mềm miễn phí nào đó để
chạy gia dụng CS50.
Và một khi bạn làm, bạn sẽ có trong một cửa sổ trên máy Mac hoặc máy PC của bạn,
một môi trường máy tính để bàn trông khá như thế này,
nó có một điều giống như menu Start trong
góc dưới cùng bên trái tay.
Nó có một thư mục Home, hoặc thư mục Home, phía trên bên trái
ở đó, một thùng rác, và vv.
Vì vậy, chúng tôi sẽ tách các chi tiết cần thiết khi chúng ta đi.
>> Nhưng bây giờ chúng ta hãy bắt đầu nhảy vào C.
Vì vậy, C là ngôn ngữ lập trình này, tinh thần tương tự
Đầu, nhưng ít đồ họa, nhưng trớ trêu thay, đến nay
mạnh mẽ hơn khi bạn hiểu biết với nó.
Vì vậy, trong C, chúng ta viết chương trình bằng cách viết mã nguồn, đó là
cú pháp này giống như tiếng Anh, tương tự như vớ
chứng minh rằng chúng tôi đã làm thời gian qua cho phép bạn
thể hiện chính mình khá chính xác, nếu
arcanely, máy tính.
>> Vì vậy, những loại sản phẩm phần mềm bạn thực sự cần
để viết các chương trình trong một ngôn ngữ như C, dựa trên của chúng tôi
cuộc trò chuyện vào hôm thứ Hai?
[Không nghe được]
OK, bạn chỉ cần một trình soạn thảo văn bản.
Bạn không cần bất kỳ phần mềm đặc biệt
cho mỗi gia nhập để viết chương trình.
Bạn chỉ cần một trình soạn thảo văn bản như Notepad, trên Windows,
TextEdit trên máy Mac, hoặc một cái gì đó gọi là gedit, trong thế giới của
Linux, mà chúng ta sẽ sử dụng ở đây.
Và đó là nó, để viết các chương trình.
>> Tuy nhiên, văn bản chỉ là một phần của phương trình.
Sau đó, bạn cần để chạy chúng.
Nhưng để chạy chương trình -
bạn không thể chạy mã nguồn.
Thay vào đó bạn phải làm những gì nó đầu tiên?
Yeah.
DAVID J. Malan: Bạn cần phải
biên dịch nó.
Và, một người khác, biên dịch mã nguồn có nghĩa là -
[Không nghe được]
DAVID J. Malan: Chính xác.
Dịch nó cho số không và những người thân.
Bởi vì tất cả chúng ta, những ngày này, có máy tính có CPU,
hầu như tất cả trong số đó được thực hiện bởi một công ty được gọi là Intel, và
Intel Inside, có nghĩa là có này bên trong bộ não của bạn
máy tính, được gọi là CPU.
Và một trong những điều mà bộ não mà không, nó biết
làm thế nào để hiểu được mô hình của số không và những người thân.
Nó biết vùng của các bit đại diện cho Ngoài ra,
mô hình đại diện cho subtractions, những gì mô hình của
bit đại diện cho in ấn, và tạo ra một âm thanh âm thanh.
>> Vì vậy, trong ngắn hạn, CPU, cùng với hệ điều hành,
mà là một phần của phần mềm chạy trên đầu trang của CPU,
do đó, để nói chuyện.
Cùng với nhau, hai mảnh biết làm thế nào để chạy chương trình
con người chúng ta.
>> Vì vậy, nếu tôi đi vào cụ CS50 ở đây, tôi cần phải mở
lên một trình soạn thảo văn bản và tôi có thể truy cập
trong một vài cách khác nhau.
Tôi có thể đi vào Menu, Lập trình,
và sau đó tôi có thể chọn -
nope, không phải là menu.
Tôi có thể đi đến Phụ kiện / gedit vào đây để mở
thưa trình soạn thảo văn bản của tôi.
Hoặc đơn giản hơn, tôi có thể nhấp vào biểu tượng nhỏ ở phía dưới
góc trái.
Và bây giờ tôi có được môi trường này ở đây.
Nó khá gợi nhớ của một trình soạn thảo văn bản đơn giản, chỉ với
một hoặc hai sự khác biệt.
Trong đầu trang, nơi con trỏ đang nhấp nháy, đây là nơi
Tôi có thể bắt đầu viết mã của tôi.
Ở phía dưới được điều này được gọi là cửa sổ terminal.
Và những gì loại những điều tôi có thể làm trong
được gọi là thiết bị đầu cuối cửa sổ?
[Không nghe được]
>> Được rồi, vì vậy tôi sẽ chạy các lệnh.
Và một số các lệnh chúng tôi chạy trên một chút
khó hiểu lúc đầu, nhưng ls cho danh sách, cd cho thư mục thay đổi,
rm, loại bỏ.
Vì vậy, nó là loại một cách trường học cũ-điều hướng của bạn
máy tính, bằng cách sử dụng duy nhất của bạn bàn phím và các lệnh văn bản,
và không, nói chung, bằng cách sử dụng một con chuột.
Nhưng chúng ta sẽ thấy, trước khi dài, điều này thực sự mang lại cho chúng ta một
điện năng ít hơn và ít chính xác hơn mà để
diễn đạt mình.
Và sau đó ở bên trái, chúng ta chỉ cần đi xem,
khi chúng ta bắt đầu phần mềm văn bản, một bản tóm tắt ít
chương trình mà chúng tôi đã viết ở trên cùng bên trái.
Nhưng chúng ta sẽ thấy rằng một lần nữa trước khi dài.
>> Vì vậy, chúng ta hãy làm một cái gì đó khá đơn giản ở đây.
Hãy để chúng tôi đi trước và đi vào File, Save, và tôi chỉ
bấm trên jharvard đây, hơn ở bên trái, và
jharvard là, một lần nữa, tên cho thư mục nhà của tôi,
các tập tin cá nhân, tôi, bây giờ là John Harvard, như tất cả các bạn
sẽ sớm được John Harvard trong môi trường này.
Anh ta có thư mục này, My Documents và vân vân,
mà tôi muốn để tiết kiệm, bây giờ, tập tin này.
Vì vậy, tôi sẽ gọi nó là hello.c. Sau đó, tôi sẽ đi
trước và nhấn Save, và bây giờ những gì tôi có ở đây là một tab
gọi là hello.c, giống như một dạng khác của trình biên tập.
>> Vì vậy, bây giờ hãy để tôi đi trước và bắt đầu viết một chương trình.
int main (void).
Và sau đó tôi đã làm thời gian qua, printf, in định dạng
("Hello, thế giới!"
);
Gần như hoàn thành.
Nhưng tôi là thiếu một vài chi tiết.
Những gì là mất tích từ chương trình này mà tôi thực sự cần thiết cho
nó thực sự biên dịch?
Yeah.
[Không nghe được?
>> DAVID J. Malan: Yeah, vì vậy tôi cần phải bao gồm các tiêu chuẩn
I / O thư viện.
Vì vậy, điều này cần phải đi trên chính, vì vậy tôi chỉ cần đi để
làm cho một số phòng cho nó ở đó.
Và tôi sẽ làm # include.
Và nhận thấy các dấu ngoặc góc cạnh.
Và như một sang một bên, gedit là một ít với người dùng thân thiện, nếu
đôi khi một chút bối rối, nó sẽ cố gắng để giúp đỡ
mắt thấy những dòng với những gì.
Vì vậy, thực tế là con trỏ của tôi là ngay bên cạnh này góc cạnh
khung, nhận thấy làm thế nào nó làm nổi bật các góc cạnh khác
khung cộng với một trong những điều này.
Và đó là chỉ để thu hút sự chú ý của tôi thực tế mà tôi
có tính đối xứng.
Và đối xứng trong lập trình nói chung là một điều tốt.
Tương tự như vậy, nếu tôi di chuyển con trỏ chuột của tôi đến cùng, nhận thấy như thế nào
dấu ngoặc nhọn xếp hàng để cho thấy rằng, có, tôi có một mở
và một khép kín, do đó, để nói chuyện.
>> Được rồi, và tôi có thể làm một điều khác.
Nó không phải là tuyệt đối cần thiết, nhưng thực hành tốt, để nói
trở về 0.
Và trở về 0 làm những gì cho chúng ta đây?
Hoặc có nghĩa gì?
[Không nghe được]
DAVID J. Malan: Nhưng không có gì sai.
Và thẳng thắn nó khó khăn cho nhiều để đi sai trong một
chương trình này ngắn.
Vì vậy, tôi chỉ là siêu rõ ràng rằng tất cả là tốt.
I, con người, khi tôi chạy chương trình này, có thể sẽ không bao giờ
thấy 0.
Nói chung, những con số này đang được trở về từ chính
chỉ nuôi đầu cho con người khi
điều gì sai trái.
Và bạn nhận được một cửa sổ pop up nói lỗi hệ thống, một,
hai, ba, hoặc bất cứ số lượng là
đã thực sự trở lại.
Vì vậy, bất cứ điều gì khác sai với điều này?
[Không nghe được]
>> DAVID J. Malan: Vì vậy, đây không phải là một sai lầm rất nhiều chức năng
nhưng một một thẩm mỹ.
Tôi có lẽ nên đặt trong một ký tự xuống dòng có tại
kết thúc chuỗi này để chúng tôi thực sự di chuyển con trỏ đến
dòng tiếp theo, và chương trình chỉ trông đẹp hơn một chút.
>> Vì vậy, bây giờ hãy để tôi đi xuống vào cửa sổ thiết bị đầu cuối của tôi
và phóng trở lại.
Và điều này ở đây, nó được gọi là dấu nhắc.
Nó chỉ nhắc nhở tôi tôi là ai, jharvard @ thiết bị,
máy là tên của máy tính tôi đang trên.
Trong ngoặc đơn là dấu ngã, các biểu tượng squiggle
đại diện cho những gì?
Khán giả: Trang chủ thư mục.
DAVID J. Malan: Trang chủ thư mục.
Vì vậy, đó chỉ là một ký hiệu viết tắt cho rằng bạn đang ở trong
thư mục cá nhân của bạn nơi mà tất cả các tập tin của bạn theo mặc định.
Vì vậy, bây giờ, ở đây, tôi có thể gõ ls cho danh sách.
Và điều duy nhất tôi thấy ở đây vào lúc này là hello.c.
Và đó là tốt bởi vì tôi chỉ viết này.
>> Vì vậy, hãy để tôi đi trước và ta có làm cho xin chào.
Và thông báo tôi không gõ làm hello.c.
Thay vào đó, tôi chỉ cần bạn gõ tên cơ sở của tập tin, hello.
Và thực hiện, như chúng ta thấy hôm thứ hai, sẽ chỉ suy luận rằng tôi muốn
c tập tin.
Vì vậy, bây giờ tôi đã đánh máy làm cho xin chào.
Bây giờ tôi thấy lệnh này khá dài và sẽ tiếp tục
nhìn thấy điều này một lần nữa và một lần nữa.
Tuy nhiên, để được rõ ràng, kêu vang, từ chỉ xuất hiện,
đó là trình biên dịch thực tế.
Thực hiện chỉ là một tiện ích xây dựng.
Nó chỉ là một chương trình thân thiện với người sử dụng tiết kiệm cho tôi, trong
dài hạn, từ việc để loại ra vô cùng tẻ nhạt dài
lệnh như thế.
Vì vậy, bạn có thể chạy Clang tay.
Bạn có thể gõ tất cả điều đó bằng tay.
Chỉ nhận được rất tẻ nhạt.
Và do đó hãy chỉ là một chương trình đơn giản hóa cuộc sống của chúng ta và
chạy lệnh phức tạp hơn đối với chúng tôi.
>> Được rồi, vì vậy bây giờ những tập tin tôi cần phải có
trong thư mục hiện tại của tôi?
Không chỉ hello.c, nhưng cũng hello.
Vì vậy, nếu tôi muốn chạy xin chào, nhớ lại rằng, nói đến dấu chấm dấu gạch chéo,
có nghĩa là dấu chấm đi vào thư mục hiện hành, bất cứ nơi nào bạn
, và sau đó chạy chương trình hello, và thực sự, bây giờ,
Tôi có thế giới hello.
Được rồi, bất kỳ câu hỏi về quy trình làm việc hoặc cú pháp của
những gì chúng tôi đã làm?
>> Được rồi, do đó, chúng ta hãy xem những thứ lên một mức nữa.
Vì vậy, điều này đã được underwhelming chỉ cần viết một chương trình mà chỉ có
bao giờ nói hello, thế giới.
Vì vậy, chúng tôi thay đổi nó, vào hôm thứ Hai, để nói rằng, hello, David.
Đó là một chút cá nhân, nhưng chỉ là khó khăn mã hóa như
phiên bản đầu tiên.
Vì vậy, không phải tất cả những gì hấp dẫn.
Nhưng tồn tại, trong C, chức năng chắc chắn bên cạnh
in ấn, chức năng, cho phép bạn có được đầu vào của người dùng.
Và cách chúng tôi đã làm điều này, các ngày khác, là như sau.
Trước khi tôi thực sự in ra một cái gì đó, tôi lần đầu tiên có
một cái gì đó từ người sử dụng.
Vì vậy, hãy để tôi làm điều này một lần nữa.
>> String s, với s là chỉ là một tên tùy ý, ở đây, đối với một
chuỗi, bằng GetString.
Vì vậy, những gì đã được getString?
Nó rõ ràng được một chuỗi, dựa vào tên của nó.
Nhưng nó là gì, kỹ thuật hơn?
Đó là một chức năng.
Vì vậy, đó là một chức năng mà không đi kèm với C cho mỗi gia nhập.
CS50 nhân viên viết này.
Và vì vậy sử dụng này, bạn có thể không chỉ bao gồm stdio.h,
Bạn cũng cần phải bao gồm những gì?
Yeah.
Vì vậy, cs50.h, mà chỉ là một tập tin, chúng tôi đã viết một vài năm trước đây.
Chúng tôi cài đặt nó trên thiết bị cho bạn cùng với
tất cả các tập tin tiêu chuẩn.
Và do đó, trong những tuần lễ đầu tiên của lớp học, chúng tôi sẽ sử dụng
điều này chỉ để đơn giản hóa quá trình làm rất cơ bản
những thứ như nhận được người dùng nhập vào.
Bởi vì như chúng ta sẽ thấy trong vài tuần tới, người sử dụng đầu vào trong một
ngôn ngữ như C là thực sự đáng ngạc nhiên phức tạp,
đặc biệt là bởi vì bạn không biết trước, thông thường, làm thế nào
nhiều công cụ mà người dùng đang gõ.
Và khi bạn không biết bao nhiêu dữ liệu để mong đợi, bạn không
biết bao nhiêu bộ nhớ để cấp phát.
Và nếu bạn thực sự có một người sử dụng đối nghịch ai đang cố gắng
để hack vào hệ thống của bạn, phá hủy máy tính của bạn, tốt,
nói chung là phương pháp đầu tiên của cuộc tấn công, cũng giống như tôi đã làm trên
Thứ hai, gõ cả một chuỗi dài các ký tự ngẫu nhiên,
nhấn Enter, và xem những gì phá vỡ.
Bởi vì nhìn chung, nếu một phá vỡ chương trình, gợi ý tại
một lỗ hổng bảo mật, có khả năng.
Nó chắc chắn gợi ý bạn, các lập trình viên, đã thực hiện việc
sai lầm, nhưng nhiều nguy hiểm, bạn có thể thực hiện một
sai lầm liên quan đến an ninh, và nói chung chúng ta sẽ thấy
đó là cách mà máy đang bị tổn hại cho đến ngày nay, cả hai
trong thế giới của các trang web và các chương trình ở
dòng lệnh, như thế này.
>> Được rồi.
Vì vậy, string s bằng getString.
Vì vậy, cụ thể bây giờ, dòng 6 làm gì ở đây?
Vì vậy, các chức năng bên phải được chuỗi,
có nhiều đối số?
Okay.
Vì vậy, không có.
Một sanity ít kiểm tra.
Một tham số, một lần nữa, chỉ là một đầu vào đến một chức năng để thay đổi
hành vi của nó mặc định trong một số cách.
Nhưng trong trường hợp này, tôi không muốn thay đổi
hành vi của GetString.
Tôi chỉ muốn nhận được một chuỗi.
Vì vậy, tôi đặt không có gì trong dấu ngoặc đơn, và sau đó tôi đặt một
dấu chấm phẩy demarking cuối các dòng mã.
Bây giờ, các dấu bằng không có nghĩa là bằng nhau, cho mỗi gia nhập.
Nó có nghĩa là phân công, có nghĩa là đặt những gì được
kết quả trên bên phải của bất cứ điều gì là bên trái.
>> Vì vậy, bên trái, chúng ta nói rằng chúng tôi đã tuyên bố một
chuỗi gọi là s.
Và cụ thể hơn, chúng tôi đã phân bổ bộ nhớ bên trong của
mà chúng tôi sẽ đặt các bit đại diện cho một chuỗi các
ký tự.
Nhưng hôm nay, chúng tôi đã phân bổ
hoặc bị tuyên bố là một chuỗi.
Được rồi.
Vì vậy, bây giờ khi tôi đã làm điều này, tôi muốn cắm vào giá trị của
s, không phải giá trị của David.
Vì vậy, đây là sai tại sao?
Vì vậy, đây chỉ là theo nghĩa đen là s mã hóa cứng.
Đó là nói "hello, s," mà không phải là những gì tôi muốn.
Vì vậy, tôi có thể làm điều này.
Dấu phần trăm là một giữ chỗ, nhưng bây giờ tôi cần phải
đi vào in một đối số thứ hai.
Nhớ lại rằng đối số chức năng được phân cách bằng
dấu phẩy, dấu phẩy ở đây tôi đặt sau lá thư.
Và trong bối cảnh này, s là biến, và printf,
khi nhận được hai yếu tố đầu vào -
chuỗi trên bên trái và tên của người biến trên bên phải -
nó sẽ cắm sau vào trước đây cho chúng ta, và
chỉ cần in ra một chuỗi đẹp đẹp có chứa
bất cứ điều gì mà chúng tôi gõ.
>> Vì vậy, hãy thử này.
Sẽ đi trước và thu nhỏ, trở lại
cửa sổ thiết bị đầu cuối của tôi.
Phóng to ở phía dưới đây.
Nhập lại làm cho xin chào.
Clang dường như đã được chạy lại.
Tôi sẽ gõ / hello, Enter.
Dường như không có gì xảy ra được nêu ra, nhưng đó là tại dấu nhắc
tôi có thể gõ một cái gì đó như Nate, Enter, và bây giờ chúng tôi có
Xin chào, Nate.
Và tôi có thể làm điều đó một lần nữa với Rob, và vv.
Vì vậy, hy vọng chương trình này được hành xử như tôi dự định.
>> Bây giờ, không phải tất cả người dùng thân thiện.
Tôi đã không có ý tưởng những gì đang được mong đợi của tôi.
Vì vậy, chúng tôi chắc chắn có thể làm sạch này lên một chút.
Hãy để tôi trở lại lên ở đây, và thay vì chỉ lặn trong và
yêu cầu người dùng cho một chuỗi, hãy để tôi rõ ràng cho
người dùng những gì tôi mong đợi.
Vì vậy, printf ("Nhập một chuỗi:"
);
Vì vậy, không có biến ở đây.
Không có dấu phần trăm.
Chỉ cần các cụm từ tiếng Anh đơn giản.
Hãy để tôi bây giờ đi đến phía dưới đây và chạy lại chương trình của tôi.
Tuy nhiên, có vẻ như không có gì đã thay đổi.
Tại sao?
Tôi phải biên dịch lại nó.
Vì vậy, dễ dàng sai lầm để thực hiện.
Nhưng bạn phải không chỉ lưu các tập tin, nhưng
biên dịch lại chương trình.
Và như vậy nếu tôi chạy lại làm cho hello, bây giờ Clang chạy.
Bây giờ tôi có thể chạy / hello. Và bây giờ tôi thấy "Nhập một chuỗi:".
Okay.
Bây giờ nó là một chút thân thiện với người sử dụng.
Nate, Enter, hello, Nate.
>> Vâng, hãy thử một lần nữa và bắt đầu suy nghĩ
về trường hợp góc.
Vì vậy, giống như Scratch, bạn đang khuyến khích hoặc đang
khuyến khích trong spec để loại suy nghĩ về những gì có thể đi
sai lầm nếu bạn không lường trước tất cả những gì người dùng có thể làm.
Bugs, do đó, có thể xảy ra.
Vì vậy, nhập vào một chuỗi -
một trường hợp góc ở đây là gì?
Một kịch bản mà tôi, các lập trình viên, có thể không có gì
dự đoán?
Yeah.
Okay.
Vì vậy, những gì nếu tôi nhập vào một số như thế này?
Được rồi.
Vì vậy, nó vẫn hoạt động.
Gramatically làm cho không có ý nghĩa.
Nhưng ít nhất chương trình hoạt động.
>> Một trường hợp góc khác là gì?
Cái gì tôi đã không mong đợi.
Yeah?
Okay.
Vì vậy, chúng ta có thể làm một cái gì đó giống như một số thực sự, thực sự lớn.
Vì vậy, chúng ta hãy làm điều này ở đây.
Hãy để tôi thu nhỏ cho một thứ hai, hãy để tôi làm nổi bật.
Không thể sao chép và dán xuống đây.
Được rồi.
Vì vậy, tôi không thể sao chép và dán trong cửa sổ này thiết bị đầu cuối, do đó, chúng tôi sẽ
chỉ mô phỏng nó.
Hãy để tôi thu nhỏ, sẽ để bọc.
Tôi sẽ không để làm điều này quá lâu, bởi vì nó sẽ không
thực sự phá vỡ trong chương trình này.
Nhưng nó có thể.
Enter.
Nhưng nó đã không.
Được rồi.
Nhưng đó là một trường hợp góc chính hãng.
Và lý do duy nhất mà cư xử một cách chính xác, do đó, để
nói, là bởi vì CS50 chức năng GetString thực sự là
thiết kế bên dưới mui xe, như chúng ta sẽ thấy trong vài tuần,
tự động phân bổ RAM nhiều hơn và nhiều hơn nữa, nhiều hơn và nhiều hơn nữa
bộ nhớ từ hệ điều hành, khi nó nhận ra, wow,
bạn đã thực sự gõ vào một cái gì đó khá dài.
Bây giờ, đây là một chút của một lời nói dối.
Nếu chúng ta thực sự dừng lại cho khá trong một và tôi gõ vào
một cái gì đó giống như 5 tỷ ký tự bàn phím
ở đây, hoặc thực sự nhấn copy-paste khá một chút, chúng ta hoàn toàn có thể
có thể gây ra các chương trình sụp đổ.
Chỉ cần một chút khó khăn hơn để mô phỏng với một hữu hạn
lượng thời gian.
>> Một trường hợp góc khác chúng ta có thể thử là gì?
Yeah?
Yeah.
Vì vậy, tại sao chúng ta không trả lời gì cả?
Vì vậy, chúng tôi thực sự có để có một số hành động, bởi vì nếu không
chương trình sẽ ngồi ở đó nhấp nháy tất cả các ngày.
Nhưng nếu tôi chỉ cần nhấn Enter -
OK, bây giờ, vẫn có vẻ sai.
Đã không sụp đổ, nhưng có lẽ bây giờ có một cơ hội để
bắt đầu thực hiện một chương trình chặt chẽ hơn
mà thực sự kiểm tra.
Và nếu các chuỗi, câu, từ mà tôi
gõ vào có chiều dài 0, tốt, có lẽ tôi nên la mắng
người sử dụng, hoặc nói cho anh ta hoặc cô nhập vào một chuỗi một lần nữa, để
chúng ta thực sự có được những gì trông giống như hành vi đúng và không
chỉ cần hoàn thành giám sát trên một phần của tôi.
>> Câu hỏi trong trở lại?
Số thập phân.
Vì vậy, chúng ta có thể cố gắng đó, quá.
1,10000005.
Có vẻ như đó là sẽ chỉ làm việc thực sự ổn.
Và đó thực sự là dự kiến.
Mặc dù chúng tôi có thể đã gõ con số đó, hoặc một
lớn hơn số trước đó, nhận ra rằng khi chúng tôi đang gõ người dùng
đầu vào và chúng tôi đang sử dụng chức năng GetString, không
vấn đề nếu những gì tôi là đánh máy trông giống như một số.
Nhớ lại rằng theo ASCII, tất cả mọi thứ trên của bạn
bàn phím có một số giá trị có thể được ánh xạ tới một
nhân vật, một char.
Vì vậy, trong trường hợp này, mặc dù tôi có thể gõ một số,
máy tính sẽ nghĩ về nó, do đó, để nói chuyện, như là một chuỗi -
cái gì đó trông giống như một số, nhưng là
không thực sự là một con số.
Nhưng đó là thực sự là một segue hoàn hảo, bởi vì bây giờ chúng tôi có thể
thực sự chuyển đổi sang chương trình bằng văn bản
sử dụng các loại dữ liệu khác nhau.
>> Vì vậy, bên cạnh việc sử dụng các ký tự, hay đúng hơn, bên cạnh việc sử dụng dây,
nhận ra rằng chúng tôi có các loại dữ liệu trong C cũng như trong
ngôn ngữ khác.
Char A, như tên cho thấy, chỉ là một nhân vật duy nhất.
Float là một giá trị dấu chấm động, và đó chỉ là một fancy
cách nói rằng một số thực - cái gì đó có một số thập phân
điểm trong nó với một số con số bên trái và / hoặc phải.
Int là một số nguyên, mà chỉ là một số giống như 123.
Và bây giờ thú vị hơn là những thứ như đôi.
Chúng tôi đã nói rằng một đôi là thời gian qua?
Là 64, phải.
Vì vậy, trong khi thường float là 32-bit
vì vậy nó lâu dài trong bộ nhớ, nó sử dụng 32 số không và những người
đại diện cho các giá trị - một đôi có nghĩa là hai lần mà,
có nghĩa là bạn có thể đại diện cho số lớn hơn, hoặc
bạn có thể đại diện cho số chính xác hơn.
Vì vậy, bạn có thể có số lượng nhiều hơn sau khi các điểm thập phân, nhưng
như anh chàng nói trong đoạn video, thậm chí một cái gì đó đơn giản
khái niệm như 1/3 không thể được đại diện chính xác bởi một
máy tính, bởi vì cuối cùng bạn chạy ra khỏi các bit, và
do đó bạn chỉ có thể làm .33333333 rất nhiều lần,
thời điểm đó bạn chỉ có thể nói tôi là đại diện
không gian, tôi chỉ cần gọi nó là một ngày và trình bày nó
phần nào không chính xác như thế.
Và một long long -
ngu ngốc tên, nhưng nó là bởi vì có một kiểu dữ liệu được biết đến như là một
trong C tình cờ thường là 32 bit, giống như một
int là 32 bit, nhưng một lâu dài là
nói chung là 64 bit.
Vì vậy, nó chỉ có nghĩa là bạn có thể đại diện lớn hơn
số hơn này.
>> Được rồi.
Vì vậy, nếu chúng ta thực sự muốn bắt đầu đại diện cho điều gì đó, chúng tôi
có thể cần nhiều loại tinh vi, và
đó là lý do tại sao chúng tôi có chuỗi.
Vì vậy, trong các thư viện CS50, tập tin gọi là cs50.h, chúng tôi đã
thực sự tuyên bố một kiểu dữ liệu, do đó, để nói chuyện, gọi là chuỗi,
nhưng chuỗi không thực sự tồn tại.
Đây là, một lần nữa, một trong các lớp chúng tôi đang đi để gọt vỏ
trở lại trong một hoặc hai tuần và ném nó đi, và thực sự
nhìn bên dưới mui xe tại một chuỗi thực sự là, và
nó được trình bày như thế nào.
Chúng tôi cũng sẽ nhìn vào giá trị Boolean.
>> Vì vậy, một bool trong bối cảnh của Scratch là gì?
Đó là đúng hay sai.
Vì vậy, nó chỉ là một giá trị đó là đúng hay sai, hoặc tắt, 1 hoặc
0, tuy nhiên bạn muốn để xem trên thế giới.
Vì vậy, trong C, nhờ thư viện CS50, mà lần lượt
bao gồm một thư viện bên dưới mui xe, chúng tôi có
truy cập vào một kiểu dữ liệu đó được gọi là bool, mà sẽ
nghĩa là cho phép chúng ta gán các giá trị đúng hay sai để
những thứ trong một chương trình.
>> Vì vậy, chúng ta hãy đi trước đây và viết một chương trình nhỏ mà
làm một cái gì đó liên quan đến số thay vì.
Vì vậy, hãy để tôi quay trở lại để gia dụng CS50, hãy để tôi đi trước và
tạo ra một tập tin mới ở đây gọi là -
chúng ta hãy chỉ nói điều gì đó đơn giản, giống như math.c.
Được rồi.
Và bây giờ đi lên phía trên cùng của chương trình của tôi, tôi
sẽ làm thông thường -
# Bao gồm , vì vậy mà tôi có thể sử dụng
printf, int main (void) -
chúng tôi sẽ trở lại, cuối cùng, int có nghĩa là gì
ở đây, khoảng trống có nghĩa là những gì ở đây, nhưng bây giờ, chỉ cần biết rằng
bạn phải bắt đầu các chương trình như thế này.
Bây giờ tôi sẽ đi trước và nói một chút gì đó
khác nhau - printf ("Hãy cho tôi một số:
);
Sau đó, tôi sẽ làm int n = getInt, bởi vì nó
lượt ra getInt là một chức năng trong thư viện CS50
bên cạnh GetString.
Và bây giờ tôi sẽ làm điều gì đó ngu ngốc, giống như "cảm ơn
% d ", cho số thập phân số nguyên, và sau đó bằng dấu phẩy n, và
sau đó trở về 0.
Vì vậy, một lần nữa, trở về 0 không có gì để làm với số tôi
yêu cầu người dùng.
Chỉ cần biểu vào cuối rằng tất cả, có lẽ, là tốt.
>> Vì vậy, hãy để tôi đi xuống vào cửa sổ thiết bị đầu cuối của tôi ở đây.
Hãy để tôi gõ toán, nhập.
Và cái gì là sai.
Làm cho toán học đã không làm việc.
Đây là lần đầu tiên các thông báo lỗi của chúng tôi.
Tại sao?
Một chút khó hiểu, nhưng -
Yeah.
Vì vậy, cs50.h.
Vì vậy, một lần nữa, đặc biệt là đầu vào, bạn sẽ viết đầu tiên của mình
chương trình cho pset 1 trong các phần, trong giờ làm việc, và
thẳng thắn, nó sẽ được áp đảo đôi khi những điều này
thực sự nói.
Nhưng bạn sẽ nhận ra rất nhanh chóng, họ bắt đầu giảm
thành các nhóm theo đó một trong những điều này có nghĩa là bạn đã để lại một
# bao gồm ở trên cùng của tập tin.
Và Clang, trình biên dịch, thông báo cho bạn điều này bằng cách
nói, khá fancifully, ngầm khai báo
getInt chức năng không hợp lệ.
>> Được rồi.
Vì vậy, điều đó không có nghĩa là gì?
Nó chỉ có nghĩa là bạn đã ngầm tuyên bố getInt trong
ý nghĩa là bạn đã không khai báo rõ ràng.
Để khai báo rõ ràng int, bạn phải dạy
Clang rằng nó tồn tại.
Và giải pháp rất đơn giản cho rằng là để dạy cho nó bằng cách
bao gồm cả tập tin khác, cs50.h,
trên cùng của tập tin của bạn.
Bởi vì theo nghĩa đen, những gì # bao gồm không là nó cho Clang
khá nhiều để đi tìm tập tin được gọi là cs50.h, sao chép,
tự động dán vào phía trên cùng của chương trình của tôi cho tôi,
và sau đó chuyển đổi mã nguồn cho số không và những người thân.
Nhưng đó rõ ràng là sẽ rất tẻ nhạt nếu con người chúng ta có
để đi sao chép và dán các tập tin lớn tất cả các thời gian,
để # bao gồm chỉ làm tất cả những điều đó tự động mà không
lẫn lộn mã của tôi với thư viện của người khác.
Và một thư viện chỉ là một tập tin có chứa chức năng và
những thứ khác mà người khác đã viết, rằng chúng ta là
tận dụng vì lợi ích riêng của chúng tôi.
>> Được rồi.
Hãy thử lại.
Làm cho toán học.
Enter.
Tốt.
Vì vậy, có vẻ như đã làm việc.
Vì vậy, hãy để tôi bây giờ chạy toán; / toán học.
Nhập mang lại cho tôi một số, 123.
Cảm ơn bạn đã cho 123.
Bây giờ chúng ta hãy thử một trường hợp góc khác.
Một chuỗi là khá hào phóng, bởi vì một
chuỗi có thể được bất cứ điều gì.
Có thể xem như số, trông giống như
nhân vật, giống như lời.
Nhưng một int là một int.
Vì vậy, bây giờ nếu tôi là người sử dụng khó khăn, và nó nói rằng "Hãy cho tôi
một con số "điều gì sẽ xảy ra nếu tôi cố gắng làm một cái gì đó như 0,1?
Vâng, đó là một con số, và nó phù hợp với các
ngữ pháp tôi sử dụng ở đây, nhưng bên dưới mui xe, tôi
Tất nhiên bằng cách sử dụng các getInt chức năng.
>> Vì vậy, chúng ta hãy xem những gì xảy ra.
Enter, thử lại.
Được rồi.
Hãy để tôi được khó khăn và chỉ cần nhấn Enter lần nữa.
Enter, Enter.
Vì vậy, bây giờ có vẻ như getInt đó là nhiều hơn một chút
mạnh mẽ hơn GetString.
Chúng tôi, các nhân viên, thực hiện theo cách như vậy mà nếu chúng tôi nhận thấy
bạn đã không cho chúng tôi một int và int một là một số thập phân
có chứa số không, những người thân, hai, ba, bốn chân, fives, sixes,
bảy, Tám, hoặc nines.
Và đó là nó.
Không có điểm thập phân, không có ký tự, không có dấu chấm câu.
Dường như chúng ta phải hợp tác.
Vì vậy, hãy để tôi thử bốn, năm, sáu, và được tôi thông qua.
Vì vậy, thực sự, là hậu môn ở đây, có lẽ tôi nên nói "Hãy cho tôi
một số nguyên "để truyền đạt cho người sử dụng
chính xác những gì tôi dự định.
>> Bây giờ chúng ta hãy suy nghĩ về bên dưới mui xe.
Chúng tôi sẽ không tìm cách cs50.h được thực hiện ngày hôm nay,
rằng thư viện.
Nhưng nếu nó giữ nói thử lại, thử lại, thử lại, lập trình
xây dựng tôi có lẽ là sử dụng bên dưới mui xe để
thực hiện điều đó?
Vì vậy, chỉ cần một vòng lặp, phải không?
Một trong những ý tưởng đơn giản nhất mà chúng ta thấy trên Scratch.
Các giới hạn xây dựng, Lặp lại xây dựng.
Có lẽ, trong chương trình này, bên dưới mui xe, thậm chí
mặc dù nó được viết bằng C và không đầu, nó làm
cái gì gọi là tương đương để mãi mãi nếu người dùng có không
gõ vào một số nguyên, thử lại, thử lại, thử lại, thử lại, do đó,
sau đó cuối cùng khi chúng tôi có một số nguyên, sau đó bạn
thoát ra khỏi vòng lặp đó.
>> Vì vậy, những gì các chức năng khác chúng ta có thể sử dụng trong thư viện CS50?
Vâng, loại những người rõ ràng, ít nhất là dựa trên
kiểu dữ liệu mà chúng ta đã biết tồn tại.
Chúng tôi thực hiện GetString, getInt, nhưng trong suốt
tuần đầu tiên của thuật ngữ này, bạn cũng có thể sử dụng GetFloat và
GetDouble và GetLongLong để có được chính xác
các loại dữ liệu mà bạn muốn.
Bởi vì các chi tiết quan trọng ở đây là không giống như một số ngôn ngữ,
như Python và Ruby, nơi mà bạn không nhất thiết phải
khai báo kiểu dữ liệu của một biến -
bạn không có để bảo máy tính loại công cụ
bạn đang đi để đưa vào biến -
trong C, bạn có bao giờ chính xác như vậy.
Vì vậy, nếu bạn muốn một biến gọi là n, một đoạn lưu trữ
trong trường hợp này xảy ra là 32 bit theo quy ước, bạn
phải nói với máy tính mà các bit
đi để lưu trữ một số -
không phải là một nhân vật, không phải là một chuỗi, không một phao.
Và điều này giải quyết vấn đề, chúng tôi có hiệu quả
chạy vào tuần trước.
Nếu chúng ta sử dụng số không và những con số đại diện cho không chỉ
số nhưng A và B và Cs, làm thế nào trên thế giới là một
máy tính để biết rằng mô hình này của các bit thực sự
đại diện cho số 65, như trái ngược với đại diện
chữ A, mà tình cờ, theo
ASCII, thu hồi, tương đương 65?
>> Vì vậy, các kiểu dữ liệu cung cấp bối cảnh vào máy tính, do đó,
mà nó biết nếu các bit này nên được hiểu như là một
int hoặc như là một chuỗi.
Mọi câu hỏi, sau đó, về điều này?
Yeah?
DAVID J. Malan: Tốt câu hỏi.
Nếu chúng ta đưa ra stdio.h, chúng tôi lưu tập tin -
hãy để tôi đi xuống cửa sổ thiết bị đầu cuối và chạy làm cho toán học, zoom
và nhập -
bây giờ tôi nhận được một lỗi khác nhau, bởi vì tôi ngầm
tuyên bố những gì chức năng hiện nay?
Printf.
Vì vậy, bây giờ tôi đã tạo ra một vấn đề mới, sự giải quyết
về cơ bản là giống nhau.
Tôi cần phải đặt nó trở lại.
Khán giả: không nghe được]
DAVID J. Malan: Oh.
Vì vậy, nếu tôi đưa ra -
Được rồi, yeah.
Vì vậy, nếu tôi loại bỏ bao gồm I / O tiêu chuẩn thư viện
ở đây, và sau đó bạn nói nếu tôi nhận được thoát khỏi printf,
thoát khỏi printf?
Vâng.
Nên làm việc này, bởi vì tôi không sử dụng bất kỳ - tả.
Tôi đã nói dối?
Oh, okay.
Điều này sẽ không làm việc vì một lỗi mới, chúng tôi chỉ giới thiệu.
Và một trong những điều này là một chút tự giải thích.
>> Vấn đề là gì?
Không sử dụng biến n.
Vì vậy, lỗi này là kết quả đã cấu hình
thiết bị đặc biệt pedantic, để thực sự la mắng
bạn cho mỗi sai lầm có thể, ngay cả khi đó là loại
một sai lầm không gây tử vong như thế này - là nó thực sự lớn
đối phó mà tôi phân bổ một int, đặt một số trong nó, và sau đó
đã không làm gì với nó?
Vì vậy, chức năng, không có.
Đó không phải đi để phá vỡ chương trình.
Nó chỉ là loại ngu ngốc, phải không?
Không có giá trị đã yêu cầu con số đó, lưu trữ
nó trong một biến, nếu bạn không bao giờ làm bất cứ điều gì
với nó, cho dù in hoặc lưu nó.
Vì vậy, trong trường hợp này, Clang được thừa nhận là nhiều, và
nó nói rằng không sử dụng biến n.
>> Vì vậy, chúng tôi có thể sửa lỗi này nếu chúng ta thực sự muốn.
Nhưng một lần nữa, điều này không phải là tốt chương trình tại.
Vì vậy, tôi chỉ có thể làm điều này -
đi xuống đây, hãy để tôi xóa màn hình, làm cho toán học.
Điều đó làm việc.
Bây giờ tôi có thể chạy chương trình toán học của tôi, có đầu vào -
tốt, đó là xấu.
Mất đầu vào, và đó là tất cả nó, trong trường hợp này.
>> Vì vậy, trên thực tế, chúng ta hãy thử một trong những trường hợp góc khác mà chúng tôi
đã không nghĩ đến trước đó.
Trong trường hợp này - ở đây, chúng ta hãy quay trở lại đó là một
ít thân thiện với người sử dụng.
Hãy để tôi đi trở lại đây và chạy làm cho toán học một lần nữa.
Whoops, tôi đã làm gì sai?
Quay trở lại tiếp tục.
Okay.
Bây giờ chúng ta đang trở lại tình trạng ban đầu, nơi mà tất cả
là hy vọng tốt.
Và bây giờ nếu tôi chạy toán học, 123 dường như làm việc.
Nhưng điều này không phải là thực sự là một bằng chứng có hiệu quả, để chỉ nói
okay, mà các công trình.
789, mà các công trình.
Thời gian nộp.
Bởi vì có trường hợp góc khác ở đây.
Một chuỗi không thực sự cung cấp cho chúng tôi gặp khó khăn nhiều bằng cách gõ một
toàn bộ rất nhiều nhân vật.
Nhưng điều gì sẽ xảy ra nếu tôi gõ trong này?
Đánh số 1 rất nhiều toàn bộ, toàn bộ rất nhiều ở đây -
tất cả các quyền, nó nhận được một chút nhàm chán, vì vậy tôi sẽ
dừng lại ở đây, và tôi sẽ nhấn Enter.
>> Cái quái gì vừa xảy ra?
Vì vậy, điều này thực sự có thể được giải thích.
Vì vậy, đã làm nó mất nó như nhị phân?
Một ý nghĩ tốt, nhưng không có, nó không phải là thực tế là nó đã
như nhị phân, bởi vì thực tế, đó chỉ là loại một
sự trùng hợp ngẫu nhiên.
Chúng ta có thể làm điều này một lần nữa.
Vì vậy, không có 2 trong hệ thống nhị phân, đó là
có thể đủ anyway.
Enter.
Vì vậy, đó không phải là vấn đề.
Những gì khác?
Chính xác.
>> Vì vậy, nghĩ lại những gì một int thực sự là.
Đó là 32 bit chung được giải thích
như là một số.
Nếu bạn có 32 bit, điều đó có nghĩa là mỗi bit có thể
0 hoặc 1, 0 hoặc 1
Vì vậy, đó có nghĩa là có hai khả năng để bit này,
hai khả năng cho điều này, hai khả năng này
bit - vì vậy đó là 2 lần 2 lần -
vì vậy đó là 2 đến 32 sức mạnh là tổng số của
hoán vị của số không và những người thân nếu bạn có 32
placeholders, số không hoặc những người thân, trước mặt bạn.
Vì vậy, nếu tôi có 2 đến 32, toán học, đó là những gì?
Vì vậy, nó rất nhiều.
Đó là 4 tỷ đồng, cho hay phải mất.
Và 4 tỷ dường như không được những gì đã được in ra ở đây.
Trong thực tế, điều này có vẻ gần gũi hơn đến 2 tỷ đồng.
Nhưng điều này không phải là một sự trùng hợp ngẫu nhiên.
Thực tế rằng các máy tính đã bị hiểu sai số lượng lớn của tôi,
của tôi chuỗi rất lớn của những người thân và sau đó trình tự của hai,
là khoảng 2 tỷ đồng, được giải thích như thế nào?
Có một nắp trên int.
Có một chắc chắn là một giá trị tối đa mà bạn có thể đại diện.
Nhưng nó thường là 4 tỷ đồng, phải không?
Nếu 2 đến số 32 là khoảng 4 tỷ đồng, mà có vẻ như
đó là số lượng lớn nhất.
Vì vậy, không phải là một phần còn lại, nhưng suy nghĩ tốt.
Số âm.
Vì vậy, nếu bạn có 4 tỷ những điều có thể bạn có thể
đại diện với sự hoán đổi này khác nhau của 32 số 0 và
1s, tốt, nó đứng vào lý do con người chúng ta có thể muốn
đại diện cho không chỉ là số nguyên dương
nhưng tiêu cực số nguyên.
Và quả thực, đó là giả định rằng C làm cho.
Vì vậy, với 32 bit, bạn có thể đại diện cho khoảng tiêu cực 2
tỷ tất cả các cách để tích cực 2 tỷ.
Và do đó, trong trường hợp này, những gì chúng tôi đang thực sự nhìn thấy chỉ là
rìa của năng lực của một số nguyên của chúng tôi, và chúng tôi có, vì vậy
để nói chuyện, tràn một số nguyên.
Chúng tôi đã cố gắng để nhồi nhét các bit thêm vào nó hơn là thực sự có thể phù hợp.
Vì vậy, kết quả cuối cùng là chúng tôi về cơ bản có tất cả 1 bit.
Chúng tôi đã lộn tất cả các bit của chúng tôi về, chúng tôi đã cố gắng để đại diện cho
số lượng lớn nhất có thể, nhưng nó rõ ràng không phải là gần
đủ lớn để đại diện cho hai điều tôi vừa gõ.
Yeah?
Khán giả: không nghe được]
>> DAVID J. Malan: Tốt câu hỏi.
Tại sao chúng ta không thể đại diện cho rằng tiêu cực
đăng nhập như là nhân vật chỉ là một?
Vì vậy, chúng tôi hoàn toàn có thể, và sau đó chúng tôi có thể tiết kiệm
thêm một chút.
Nhưng bạn vẫn sẽ có đại diện cho rằng dấu gạch ngang, và
đó là sẽ chi phí cho bạn ít nhất là một cái gì đó,
có lẽ là một chút.
Vì vậy, có, chúng tôi có thể có 32 bit được sử dụng cho số lượng của chúng tôi, nhưng bây giờ
chúng ta cần một chút khác được sử dụng để dash của chúng tôi
biểu tượng, dấu trừ.
Vì vậy, bây giờ chúng tôi có 33 giá trị bit, mà chúng ta có thể làm, nhưng nó
không phải là cách nó được thực hiện.
Chúng tôi đã thực hiện một bản án năm cuộc gọi trước đây, 32 bit là sắp xếp của
đơn vị đo lường ở đây.
Vì vậy, chúng ta sẽ sử dụng một trong những bit hiệu quả
đại diện tiêu cực, và 31 bit để đại diện cho số lượng.
Các câu hỏi khác?
Được rồi.
Đó là rất nhiều.
Tại sao chúng ta không đi trước và đi nghỉ năm phút của chúng tôi ở đây?
>> Được rồi.
Vì vậy, một lần nữa, không nhấn mạnh quá mức các ứng dụng toán học
của chương trình, chúng ta hãy chỉ nhổ một ví dụ này
trước khi chúng tôi di chuyển vào cấu trúc khác, chỉ vì nó
sẽ minh họa một vài điểm chung ngại về một số
những vấn đề cơ bản khi nói đến các chương trình bằng văn bản.
Trong trường hợp này, biểu thức số học có một số
thú vị liên quan đến cú pháp.
>> Vì vậy, đây chỉ là một công thức mà chúng ta có thể chuyển đổi
nhiệt độ từ Fahrenheit sang Celsius.
Nếu bạn không nhớ, đây chỉ là công thức.
Vì vậy, nếu chúng ta cắm Fahrenheit giá trị của 32 độ, đó là
đông lạnh, đó là sẽ là 32 trừ đi 32 là 0, và thực sự,
0 trong C cũng đóng băng.
Như vậy nhanh chóng kiểm tra sanity có - đó là công thức quen thuộc.
Hãy để tôi đi qua thiết bị, mặc dù, và bắt đầu
viết một chương trình được gọi là, như, f2c; "Fahrenheit
C dot c ".
Và ở đầu ở đây, tôi sẽ bắt đầu bằng # include
stdio.h, và tôi sẽ làm int main (void), và
một lần nữa, chúng tôi sẽ trở lại trong tương lai như int có nghĩa là gì
có và những gì trống có nghĩa là có.
Và bây giờ hãy để tôi đi trước và thực hiện một chương trình mà
cơ bản thực hiện điều này chuyển đổi cho chúng tôi.
>> Vì vậy, printf, hãy nói, nhiệt độ trong Fahrenheit.
Và sau đó cho tôi đi trước và nhận được giá trị từ người sử dụng.
Loại giá trị tôi sẽ nhận được từ người sử dụng nếu tôi muốn
họ để cho tôi một nhiệt độ trong Fahrenheit?
Yeah?
Những gì bạn sẽ đề nghị?
Yeah.
Vì vậy, float cảm thấy khá hợp lý.
Chúng tôi có, một lần nữa, chỉ cần một vài lựa chọn mà
chúng ta đã thấy cho đến nay.
Chúng tôi có những thứ như char, float, double, int, lâu dài,
bool, string.
Vì vậy, trong số này, float cảm thấy khá hợp lý.
Chúng ta có thể sử dụng một bên phải, double, bởi vì nếu chúng ta thực sự muốn
đại diện cho nhiệt độ của một con người -
98,60000 -
chúng ta có thể sử dụng 64 bit để làm điều đó, nhưng nó cảm thấy như
quá mức cần thiết cho nhiệt độ.
Vì vậy, hãy chỉ cần đi với phao.
Bây giờ tôi cần một biến.
Chỉ cần để giữ cho mọi thứ đơn giản, tôi sẽ gọi nó là f, nhưng tôi
có thể chỉ là một cách chính xác gọi nó là nhiệt độ,
nhưng cả hai là tốt.
Vì vậy, float f = GetFloat.
Ngay sau khi tôi đã quyết định sử dụng GetFloat, mặc dù, tôi
cần phải thực hiện một điều chỉnh.
Yeah.
Vì vậy, chúng ta cần phải # bao gồm , nếu không trình biên dịch là
sẽ hét vào mặt chúng tôi.
Bây giờ tôi có một phao, cho tôi đi trước và làm
chuyển đổi.
>> Vì vậy, trước tiên để tôi cũng có được thành thói quen ở đây
cho ý kiến ​​mã của tôi.
Vì vậy, một lần nữa, bình luận chỉ là một ký hiệu để con người đó là
không phải là một phần của chương trình cho mỗi gia nhập, nhưng nó, giúp bạn
hiểu những gì bạn đã làm sáng hôm sau, hoặc năm tới
tháng, nó giúp giáo viên giảng dạy của bạn hiểu những gì bạn đã làm
hoặc những gì bạn có ý định làm, vì vậy nó
nói chung là rất tốt thực hành.
Mỗi vài dòng mã, viết chú thích cho
bản thân hoặc đồng nghiệp của bạn.
Vì vậy, ở đây, tôi sẽ nói, "Hãy hỏi người dùng cho nhiệt độ".
Không phải là một câu hoàn chỉnh, chỉ là một cụm từ ngắn.
Tuy nhiên, ý tưởng đằng sau ý kiến ​​trong C là của bạn
ý kiến ​​nên trao quyền cho bạn - hoặc, nói rằng, một TF hoặc một đồng nghiệp -
khi chỉ lướt qua chương trình của bạn và biết chính xác những gì nó làm, bằng cách không
rất nhiều đọc mã, nhưng bằng cách đọc các ý kiến,
nên gọn gàng và rõ ràng.
Được rồi, vì vậy bây giờ hãy để tôi đi trước và nói, "Chuyển đổi
Fahrenheit thành độ Celsius. "Vì vậy, tôi sẽ đi trước và làm,
chúng ta hãy nói, nổi c.
Chúng tôi sẽ giữ C như là một giá trị dấu chấm.
>> Và hãy để tôi mất một đâm lúc này.
Công thức là, một lần nữa, ở đây.
Khi 5/9 lần F trừ đi 32.
Vì vậy, hãy làm điều này.
Như vậy 5 chia cho 9, trừ -
tả, tôi sai lầm rồi.
Times.
Vì vậy, 5/9 lần F trừ đi 32.
Vì vậy, F trừ đi 32, dấu chấm phẩy.
Và bây giờ, ở đây, tôi sẽ đi trước
và nói, in kết quả.
Và phần này dễ dàng. Printf.
Làm thế nào để tôi đi về in ấn này?
Vâng, tôi có thể nói "Con số này trong C là% f \ n",
chỉ dành cho một số thẩm mỹ.
Và sau đó những gì giá trị để tôi muốn cắm ở đây như là printf của
đối số thứ hai?
Okay.
Vì vậy, chỉ cần c.
Vì vậy, chúng tôi sẽ bắt đầu với điều này và sau đó chỉ cần trở về 0.
Một lần nữa, nó không có gì để làm với toán học.
Nó chỉ có nghĩa là tất cả là tốt.
>> Bây giờ, là này, chương trình này có đúng không?
Được rồi.
Vì vậy, tôi đã thực hiện một số sai lầm.
Thậm chí nếu bạn không có ý tưởng lập trình là gì, bạn có thể sắp xếp
của suy luận trở lại trường lớp những gì
sai lầm ở đây có thể được.
Một trong những người đầu tiên là gì?
Khán giả: không nghe được]
DAVID J. Malan: Yeah.
Vì vậy, chúng tôi đang thiếu dấu ngoặc đơn.
Đó là cố ý mà tôi đã làm dấu ngoặc đơn trong bài phát biểu
trượt ở đây, bởi vì có thực sự là khái niệm về trật tự
hoạt động, hoặc ưu tiên, theo đó một số hoạt động -
nhân -
có cao hơn ràng buộc, có ưu tiên cao hơn, so với những thứ
như cộng hoặc trừ.
Vì vậy, chúng tôi đã làm điều này trong nhiều năm chỉ để làm cho rõ ràng chính xác
hoạt động toán học gì nên được thực hiện đầu tiên.
Vì vậy, tôi có lẽ nên bắt chước chính xác này.
Nếu không, các máy tính có lẽ sẽ cố gắng để làm
một cái gì đó giống như chia 5 cho 9, sau đó nhân F, sau đó trừ đi
32 từ toàn bộ điều.
Mà không phải là, trên thực tế, những gì chúng tôi muốn làm.
Vì vậy, hãy nghi tạm.
Hãy thêm dấu ngoặc đơn của tôi ở đây, dấu ngoặc đơn ở đây.
Chúng ta hãy đặt này ở đây.
Ở đây, tôi chỉ nhận thấy một sai lầm tôi đã thực hiện trên đường đi.
Yeah?
Khán giả: không nghe được]
>> DAVID J. Malan: Ah.
Tốt.
Vì vậy, chúng tôi thực sự có cùng một số nguyên
vấn đề phân chia từ trước.
Tôi có chính xác đó, hãy xem những gì các triệu chứng.
Nhưng chúng ta sẽ phải sửa một
khác sai lầm ở đây.
Yeah?
Khán giả: không nghe được]
DAVID J. Malan: Có.
Vì vậy, sai lầm ngu ngốc, tôi đã thực hiện, nhưng vô cùng quan trọng.
Các máy tính sẽ không chỉ nhắm mắt làm ngơ và để cho
tôi sử dụng F vốn, khi tôi thực sự tuyên bố biến
như là một f chữ thường ở đây, ở dòng thứ 8.
Vì vậy, tôi cần phải sửa trong dòng vốn của tôi 11, trong đó một
lúc trước là một F vốn do nhầm lẫn.
Điều gì về việc ở đây?
Điều này phải là chữ thường là tốt?
Nó phải được, nhưng đó là một sự trùng hợp ngẫu nhiên.
Đó% f không có gì để làm với biến.
Vì vậy, chỉ cần là siêu rõ ràng ở đây, hãy để tôi đi trước và
đổi tên này, một thời gian ngắn, "nhiệt độ". Hãy để tôi đổi tên
"nhiệt độ". Hãy để tôi không thay đổi tên này.
Bởi vì, một lần nữa,% f trên toàn cầu có nghĩa là, "nổi giá trị điểm."
Không có gì để làm với biến của tôi.
Nhưng "nhiệt độ" tất cả các nơi chỉ là một chút dài dòng,
vì vậy tôi sẽ quay trở lại s chữ thường của tôi "f".
>> Bây giờ, hãy để tôi đi xuống cửa sổ của tôi ở đây.
Hãy f2c -
đó là, một lần nữa, tên tùy ý
đã cung cấp cho tập tin này.
Dường như đã biên soạn.
Hãy để tôi chạy f2c.
Enter.
Nhiệt độ trong Fahrenheit - chúng ta hãy làm một điều dễ dàng.
32.
OK, chính xác.
Nhưng, nếu tôi bây giờ làm 212 sôi
damn.
Được rồi.
Vì vậy, rõ ràng là không chính xác, nếu TF của bạn cố gắng
ít nhất là hai giá trị.
Vì vậy, vấn đề ở đây là những gì?
Vâng, bạn đã đặt ngón tay của bạn về vấn đề này là gì.
Nhưng tại sao lại là trường hợp?
Ở đây, khi tôi đang làm toán học của 5 chia cho 9.
Vì vậy, khái niệm, đó là hoàn toàn chính xác.
Hoàn toàn phù hợp với công thức.
Nhưng máy tính chỉ làm chính xác những gì bạn
nói cho họ biết phải làm gì.
Và những gì chúng ta đang có hiệu quả cho máy tính ở đây là
phân chia các nguyên 5 số nguyên 9
và đưa cho tôi kết quả.
Vấn đề là, mặc dù, khi bạn phân chia bằng cách sử dụng dữ liệu
loại, đầu ra là các dữ liệu cùng loại như các yếu tố đầu vào.
Và như vậy nếu hai yếu tố đầu vào là cả hai ints, sản lượng sẽ
là một int.
Và như vậy 5 chia cho 9 là điểm một cái gì đó.
Tuy nhiên, số nguyên gần nhất để chỉ một cái gì đó là những gì?
Vì vậy, nó thực sự là 0.
Vì vậy, như chúng ta đã thảo luận Thứ hai, tất cả mọi thứ sau khi thập phân
điểm được cắt ngắn.
Nó chỉ được vứt bỏ.
Vì vậy, đây là một sai lầm hoàn toàn, bởi vì tôi có thể cũng chỉ
nhân tất cả mọi thứ bởi 0 ở đây.
>> Bây giờ, tôi có thể sửa lỗi này trong một vài cách.
Tôi có thể làm điều này.
5,0 chia tăng 9,0.
Về mặt kỹ thuật, tôi thậm chí không cần phải làm điều đó.
Nó không đủ để chỉ cần thực hiện một số một phao -
hoặc đôi bằng cách đặt các điểm thập phân ở đây.
Bởi vì những gì xảy ra bây giờ là khi bạn chia một số nguyên
float, hoặc một đôi, máy tính sẽ nhận ra
oh, một trong những người chính xác hơn.
Hãy để tôi sai lầm ở phía bên cung cấp cho bạn độ chính xác hơn so với
bạn dự định.
Vì vậy, nó sẽ chuyển đổi kết quả -
nó sẽ trả về kết quả là một giá trị dấu chấm động.
Vì vậy, mà sẽ làm việc.
Điều này sẽ làm việc.
Và có một cơ chế khác mà chúng ta sẽ thấy trong
lớn hơn chi tiết vào tuần tới.
Bạn có thể thực sự, như một lập trình cho máy tính
để thực sự điều trị một loại dữ liệu như
mặc dù nó là khác.
>> Vì vậy, tôi thực sự có thể làm điều này.
Trong ngoặc đơn, tôi có thể nói một cái gì đó như thế (float), mở
paren, gần paren.
Và đây là những gì được gọi là "đúc". Một lần nữa,
điều này tuần tới.
Nhưng điều này chỉ là cách chương trình nói cho
máy tính, yeah Tôi biết 9 là một số nguyên hay một thời gian dài.
Tôi biết nó không phải là một giá trị dấu chấm.
Nhưng đối xử với nó như thế nào.
Vì vậy, để đúc một kiểu dữ liệu có nghĩa là chuyển đổi
từ một đến khác.
Thành thật mà nói, điều này chỉ là một chút xấu xí, vì vậy tôi sẽ đề nghị chúng tôi đi
sao những gợi ý ban đầu của chỉ cần chuyển đổi
những điều này để nổi các giá trị điểm bằng tay.
Bởi vì bây giờ nó chỉ là siêu rõ ràng những gì đang xảy ra, và
nó không phải là tất cả những gì mất tập trung.
>> Vì vậy, Bây giờ chúng ta hãy quay trở lại vào cửa sổ thiết bị đầu cuối của tôi.
Hãy f2c.
Hãy để tôi đi trước và chạy.
Và, như một sang một bên, bạn nhận được chán gõ các lệnh này
một lần nữa và một lần nữa, nhận ra rằng máy tính, như Linux ở đây,
có xu hướng khá thông minh.
Và nếu tôi nhấn Up, chúng ta có thể đi qua toàn bộ lịch sử của tôi
lệnh, lên và xuống.
Vì vậy, trong trường hợp này ở đây, tôi chỉ có thể đi để chạy f2c.
Tôi bị mắng, bởi vì tôi đã làm điều đó một giây trước đó.
Nó đã được cập nhật.
Vì vậy, bây giờ tôi có thể chạy f2c một lần nữa.
Chúng ta hãy thử 32 Fahrenheit.
Bây giờ chúng ta hãy thử 212 Fahrenheit.
>> Phù.
Dường như để làm việc.
Bây giờ, điều này là tốt, nhưng nó cảm thấy một chút tùy ý
Tôi đang hiển thị sáu số sau khi các điểm thập phân.
Phải không?
Nếu bạn là người thời tiết trên truyền hình, bạn đang loại doofus một
nếu bạn đang đọc nhiệt độ
mức độ chính xác này.
Vì vậy, chúng ta hãy đơn giản hóa này.
Vì vậy, để thực sự đi lên đây, để printf của tôi.
Và yeah, tôi muốn thả nổi.
Nhưng tôi muốn để xác định độ chính xác.
Và tôi sẽ là một gọn gàng ít.
Tôi sẽ nói, cho tôi một điểm sau khi số thập phân.
Vì thế thay vì nói% f, tôi sẽ nói% .1 f.
Và điều này chỉ có nghĩa là cung cấp cho tôi một vị trí
sau dấu thập phân.
Được rồi.
Hãy thử điều này một lần nữa.
Hãy để tôi lại chạy nó sau khi biên dịch.
Và bây giờ tôi gõ 32, và tôi nhận được trở lại một
giá trị gọn gàng hơn.
Và tôi có thể nhập vào, bây giờ, 212, và lấy lại gọn gàng hơn
giá trị.
Và có những thứ khác bạn có thể làm với printf.
Bạn thực sự có thể xác định số lượng nên được làm thế nào rộng.
Nếu bạn muốn có padding vào nó, do đó, bạn có thể phải sắp xếp hoặc
trái-align tất cả các số điện thoại của bạn hoặc
cố gắng để mọi thứ trung tâm.
Vì vậy, nhận ra có những thủ thuật nhỏ bạn có thể làm ở đó.
Nhưng họ chỉ cần đun sôi xuống để mã định dạng,
như chúng tôi có nơi.
>> Vì vậy, về vấn đề này ưu tiên.
Đây là một bảng rất nhàm chán để đi qua phương pháp.
Nhưng nhận ra rằng các tác giả của C đã đến với các
quy tắc xác định các nhà khai thác có cao hơn
ưu tiên, quyền lực ràng buộc hơn, hơn những người khác.
Vì vậy, trong khi ở trường lớp, chúng ta thường biết rằng đó là
nhân và chia, sau đó cộng và trừ,
sau đó một số công cụ khác.
Trong một thế giới của chương trình, có một nhiều
danh sách những thứ lâu hơn.
Và điều này không phải là một cái gì đó giá trị ghi nhớ bây giờ.
Bạn sẽ có được thích nghi với nó trước khi dài.
Nhưng cũng giống như ở trường lớp, dấu ngoặc đơn thường giải quyết
các vấn đề ưu tiên, bằng cách làm cho siêu rõ ràng.
máy tính và con người cũng như những gì được dự định.
Vì vậy, xem xét việc này chỉ là một cheat sheet nhỏ ở đó.
Tuy nhiên, hầu hết những chi tiết chúng tôi sẽ không nhận được một thời gian.
>> Được rồi.
Bây giờ, chúng ta hãy xây dựng và di chuyển đi từ những chút ngớ ngẩn
toán học ví dụ.
Vẫn còn sử dụng các nguyên tắc cơ bản giống nhau, nhưng bắt đầu
thể hiện bản thân mình một chút giống như Scratch.
Vì vậy, trong Scratch, chúng tôi đã có các biểu thức Boolean.
Và trong tiếng Anh, một biểu thức Boolean là gì?
Đúng hay sai.
Đó là cái gì đó để đánh giá đúng hay sai.
1 hoặc 0.
Hoặc tắt.
Bất cứ điều gì bạn muốn gọi nó.
Bây giờ trong Scratch, các mảnh ghép trông như thế này.
Và đó là sự kết hợp, trên dưới cùng có ba
câu đố miếng.
Một kết hợp -
cái gì đó có trống và trống.
Và sau đó hai Boolean biểu thức bên trong của nó.
Vì vậy, bạn có thể biểu thức tổ Boolean để nhận được nhiều hơn
phức tạp biểu thức Boolean.
Ví dụ, nếu nó là thứ Bảy, và nó là tốt đẹp
thời tiết, sau đó đi ra ngoài.
Hoặc một cái gì đó tùy ý như thế.
Vì vậy, bạn có thể tham gia các biểu thức Boolean để đến với một
lớn hơn giá trị thật, có câu trả lời được dựa
những cái nhỏ hơn.
>> Bây giờ, trong C, may mắn thay, lập bản đồ này là
thực sự là khá đơn giản.
Ngoặc đơn giúp làm cho mọi việc rõ ràng ở đây.
& Là những gì có nghĩa là "và". Vậy đó là cách
chúng ta sẽ để chuyển đổi các khối từ Scratch C.
Và đối với các điều kiện, chúng tôi đã thấy trong Scratch, trên bàn tay trái
bên cạnh đó, tôi có thể ngăn xếp chúng tương tự trong C. Nếu x là ít
hơn y, sau đó làm điều này.
Khác nếu x lớn hơn y, sau đó làm điều này.
Khác một cách hợp lý họ phải được bình đẳng, nên nói
rằng chúng bằng nhau.
Vì vậy, bây giờ chúng ta có thể bắt đầu xây dựng những việc này lên.
>> Vì vậy, chúng ta hãy làm một ví dụ.
Hãy để tôi mở một tập tin đó là trên trang web của khóa học mà
Tôi đã viết trước.
Điều đó được gọi là nonswitch.c.
Và chúng ta sẽ thấy lý do tại sao trong một thời điểm.
Vì vậy, trong tập tin này - nonswitch.c -
đầu tiên nhận ra rằng có một bó toàn bộ
ý kiến ​​ở đầu trang.
Đó chỉ là giải thích tên của tập tin, những gì nó
không có gì, và vv.
Và nó dường như thể hiện việc sử dụng các Boolean-ing -
conjoining hai biểu thức.
>> Vì vậy, chúng ta hãy xem chương trình này hoạt động như thế nào.
Tôi bao gồm các tác phẩm của tôi, cs50.h và stdio.h.
Nếu tôi di chuyển xuống, bây giờ, đến chương trình, đó là lâu hơn một chút
hơn, chúng tôi đã viết trước đây, nhưng khá có thể đọc được.
Vì vậy, lần đầu tiên tôi in cho người sử dụng, dòng 18,
"Hãy cho tôi một số nguyên giữa 1 và 10." Vì vậy,
đó là phải có.
Bây giờ tôi nhận được các số nguyên.
Nhưng nhận ra rằng getInt khá đơn giản.
Nó chỉ là để có được một int.
Nó sẽ đảm bảo rằng nó không nhận được một int và không phải là một
chuỗi hoặc một phao.
Nhưng nó sẽ không làm bất kỳ loại kiểm tra ranh giới.
Nó sẽ không để lọc các con số để được giữa một
một số phạm vi.
Vì vậy, chúng ta phải tự mình thực hiện điều đó.
Vì vậy, giống như Scratch, nơi mà tôi có thể làm một kết hợp của
hai biểu thức, tôi có thể làm điều đó trong C như sau.
Nếu n là lớn hơn hoặc bằng 1, và n là ít hơn và
hoặc bằng 3, tôi sẽ để nghị định tùy tiện rất
số là một số lượng nhỏ.
Chỉ vì lợi ích của một tuyên bố.
Khác nếu n là giữa 4 và 6, print "Bạn đã chọn một phương tiện
số. "Khác nếu n là từ 7 đến 10, print" Bạn đã chọn một
số lớn. "Khác in" Bạn chọn một số không hợp lệ. "
Bởi vì một cách hợp lý, sau đó nếu chúng tôi đã
cạn kiệt phạm vi của chúng tôi.
>> Vì vậy, nhận ra điều này không phải là khá như thế nào chúng tôi viết lớn hơn hoặc
bằng trong một lớp học toán.
Phải không?
Bạn thường vẽ nó như thế này, với dòng dưới nó.
Nhưng không có phím trên bàn phím của tôi.
Vì vậy, các biểu tượng trong C để thể hiện lớn hơn hoặc
bằng là hai nhân vật, và biểu tượng cho ít hơn
hoặc bằng là hai nhân vật là tốt.
Được rồi.
Vì vậy, nếu tôi chạy chương trình này, bạn có thể có thể đoán những gì nó
sẽ làm.
Nếu tôi đi trước và thực hiện nonswitch Enter.
Và sau đó chạy nonswitch.
Hãy cho tôi một số từ 1 đến 10.
Tôi sẽ để cho nó 11.
Tôi chọn một số không hợp lệ.
Hãy để tôi thử số 3.
Tôi chọn một số lượng nhỏ.
Vì vậy, khá đơn giản.
>> Nếu tôi muốn thay đổi hành vi của chương trình này và
thay vì làm một cái gì đó một chút khác nhau?
Hãy để tôi đi trước và nói điều này.
Hãy để tôi thoát khỏi tất cả những điều này.
Và cho tôi nói if (n == 42).
Và sau đó tôi sẽ đi trước và nói in "Bạn đã chọn
câu trả lời đúng. "Khác chúng ta sẽ đi trước và nói,
printf ("Bạn đã chọn
câu trả lời sai "); Okay.
Chỉ vì.
>> Bây giờ, một vài điểm chúng ta có thể thực hiện ở đây.
Một, tôi đã không nhập ký hiệu mà bạn sẽ nghĩ là
hợp lý nhất.
Khi tôi muốn kiểm tra bình đẳng, hóa ra bạn không sử dụng
dấu bằng.
Bạn thay vì sử dụng các dấu bằng bằng.
Và tại sao điều đó có thể là, chỉ là trực giác?
Yeah.
Khán giả: không nghe được]
DAVID J. Malan: Chính xác.
Dấu bằng đã được sử dụng để chuyển nhượng.
Có người không thực sự nghĩ rằng điều này thông qua.
Và vì vậy bây giờ, khi nói đến kiểm tra bình đẳng, chúng ta phải
được rõ ràng hơn, và nói bằng bằng.
Một sai lầm rất phổ biến là để làm điều này.
Và, nếu trong giờ hành chính hoặc tuần đôi khi tiếp theo hoặc trong
sau hai tuần bạn làm một cái gì đó như thế này và sau đó
đấu tranh với nó cho 10, 20 phút cố gắng tìm ra
lỗi damn là những gì, nhận ra rằng bạn là một trong những
người đã làm sai lầm này.
Vì vậy, siêu dễ dàng để thực hiện.
Nhưng mục tiêu hiện nay là để tránh khỏi sai lầm này.
Điều này có thể đánh giá, bởi vì đây là những gì thật sự nói?
Nếu n được 42.
Vì vậy, các động từ người sử dụng, bằng lời nói, để diễn tả
khái niệm về việc "được." Vì vậy, nếu n được 42.
Vì vậy, điều đó có nghĩa là gán 42 đến n.
Bây giờ tôi có một biểu thức Boolean trong dấu ngoặc đơn,
trong điều kiện này, giá trị của nó là 42.
Phải không?
Bởi vì nếu bạn đánh giá nó ra bên trong, tổng số
bây giờ, câu trả lời, là 42.
>> Vì vậy, nếu tôi hỏi bạn câu hỏi, "nếu (42)," những gì là
mà thực sự nói gì?
Vâng, biểu thức Boolean chỉ có thể là đúng hoặc sai.
1 hoặc 0.
Hoặc tắt.
Vì vậy, chúng tôi dường như có một trường hợp góc ở đây, theo đó tất cả của một
đột ngột, tôi nói "nếu (42)". Đó không phải là một giá trị Boolean.
Vì vậy, những gì máy tính làm, mặc dù, là nó về cơ bản tương đương
bất cứ điều gì mà không phải là 0 được hiểu là đúng.
1.
Bật.
Họ là tất cả tương đương về mặt chức năng.
Chỉ có giá trị 0, hoặc từ khóa sai, chúng tôi sẽ
cuối cùng thấy, thực sự là sai.
Vì vậy, "nếu (42) thực sự sẽ là sự thật, bởi vì nó không phải là zero.
Vì vậy, để được chính xác hơn ở đây, một giá trị Boolean là thực sự không phải như vậy
nhiều đúng hay sai, nhưng đối với
trường hợp, nếu là 0 hay khác không.
Vì vậy, sai hay không sai.
Và điều đó cho phép chúng tôi bao gồm tất cả các chi tiết
khả năng trong các biểu thức trong ngoặc đơn.
Vì vậy, chúng ta cần phải rất cẩn thận, nói điều này -
if (n == 42).
Đơn giản là vì chúng ta cần phải xác định một bài kiểm tra bình đẳng,
không phải là một nhiệm vụ của một giá trị.
>> Những gì khác là đáng chú ý ở đây?
Những dấu ngoặc nhọn là thực sự không cần thiết.
Tôi đã làm chỉ để được nit-cầu kỳ ở đây.
Nhưng khi bạn có một điều kiện mà chỉ có một dòng
mã, như là một tiện nghi, các lập trình viên không cần phải sử dụng
dấu ngoặc nhọn.
Nó đủ để chỉ indent, vì lý do thẩm mỹ, và
sau đó viết dòng code của bạn.
Chỉ khi bạn muốn viết hai dòng mã -
dụ, else printf ("Tạm biệt!"). Nếu bạn muốn làm
đó, điều này là bị hỏng.
Bạn có thể thụt vào tất cả những gì bạn muốn, nhưng thực tế là bạn có
gõ hai dòng mã mà không cần sử dụng dấu ngoặc nhọn
có nghĩa rằng chương trình này sẽ không chạy một cách chính xác hoặc có thể
thậm chí không biên dịch một cách chính xác.
Vì vậy, bây giờ, phải trung thực, tôi nghĩ rằng chỉ là thói quen tốt nhất
sử dụng dấu ngoặc nhọn, và bạn sẽ thấy rằng họ làm cho
siêu rõ ràng những gì đang xảy ra.
>> Ngoài ra, như một sang một bên - đặc biệt là nếu bạn nằm trong số những người sử dụng
đề nghị sách hoặc các nguồn tài nguyên trực tuyến -
nhận ra rằng có khái niệm về phong cách
lập trình.
Và một số người thực sự thích để đặt nẹp xoăn
ở đây trên một dòng.
Một số người thích làm những điều vô lý,
như đặt vào đây.
Không có câu trả lời sai khi nói đến
phong cách, nhưng điều này là sai.
Nhưng một số người làm điều đó.
[Cười]
DAVID J. Malan: Vì vậy, tôi đề cập đến điều này, đơn giản vì như
bạn đọc lên trên những điều trong sách hoặc trực tuyến, bạn sẽ nhận được
tin nhắn từ các giáo viên khác nhau khác nhau và
khác nhau tác giả.
Và chỉ cần nhận ra rằng, chức năng, chúng
nói chung là tương đương, nhưng được nhất quán.
Vì vậy, trong trường hợp này, chúng tôi sẽ chuẩn hóa trên các xoăn
niềng răng xếp hàng bên trái.
>> Được rồi.
Vì vậy, hãy đi trước và chạy này, và xem những gì sẽ xảy ra
với chương trình này.
Hãy nonswitch.
Sau đó chạy nonswitch.
Cho tôi một số nguyên giữa 0 và vì vậy đó là không có liên quan
nữa, nhưng tôi là chỉ cần tùy tiện nói 42.
Và tôi đã chọn câu trả lời đúng.
Vâng bây giờ, chúng ta hãy thực sự mất điều này theo một hướng khác.
Hóa ra có một số cú pháp khác mà chúng tôi
có thể sử dụng trong một chương trình.
Dưới đây là một đoạn mới của cú pháp đó là chức năng giống nhau,
nhưng chỉ giới thiệu một cách khác để thể hiện bản thân.
Vì vậy, đây là những gì được gọi là "chuyển đổi báo cáo." Và một
chuyển đổi báo cáo hoạt động như sau.
Phải mất, trong dấu ngoặc đơn, một giá trị mà bạn muốn
"Chuyển đổi".
Bạn muốn hành xử một cách khác nhau dựa trên giá trị của nó.
Vì vậy, điều này có nghĩa là chuyển đổi về giá trị của n.
Và điều này có nghĩa gì?
Vâng, nếu n là 1 hoặc 2 hoặc 3, đi trước và in ra "
chọn một số lượng lớn "và sau đó phá vỡ.
Lý do cho nghỉ là cách C hoạt động như
Ngay sau khi nó tìm thấy một trường hợp phù hợp với, nó bắt đầu thực hiện
tất cả các mã bên dưới nó.
Vì vậy, nếu tôi có một dòng mã, như tôi đã làm ở đây trên dòng 27,
được thực hiện.
Nếu tôi thêm một dòng ở đây, nó được thực hiện.
Các dòng khác ở đây, nó được thực hiện.
Chương trình chỉ dừng lại thực hiện những gì bên dưới
áp dụng trường hợp tuyên bố khi tôi rõ ràng
nói "tan vỡ". Vì vậy, sai.
Quyền, trong trường hợp này, như là một kết quả.
Trường hợp 4 hoặc 5 hoặc 6, tương tự như vậy, sẽ
để in ra một thông điệp.
Trong trường hợp này, trung bình số.
Phá vỡ.
Trường hợp 7, 8, 9, 10, nó sẽ in ra "Bạn đã chọn một lớn
số "Break.
Và sau đó có nghĩa là một từ khóa được gọi là "mặc định"
đó là hiệu quả như "khác" xây dựng.
Vì vậy, cú pháp, nhưng trí tuệ,
không có gì ở tất cả ở đây mới.
Nó giống như Scratch.
Nếu, nếu người nào khác, nếu người nào khác, sắp xếp của khối.
>> Vì vậy, đó là phiên bản chuyển đổi của chương trình này.
Nhưng hãy chú ý rằng chúng tôi đã làm nó với số ở đây.
Hãy để tôi mở ra một phiên bản thứ hai, chỉ để hiển thị
một chút gì đó cụ thể hơn.
Vì vậy, ở đây chúng tôi có loại thay thế.
Hóa ra bạn có thể sử dụng thiết bị chuyển mạch không chỉ trên các số nguyên, nhưng trên
ký tự.
Không có trong tất cả các loại dữ liệu, nhưng ít nhất về các nhân vật.
Vì vậy, ở đây, chúng ta có thể làm một cái gì đó như nếu giá trị của C mà
người sử dụng gõ vào, trong dòng 19, bằng cách sử dụng chức năng getchar,
là vốn A hoặc tự chữ thường a, chúng ta hãy giải thích nó như một lớp,
và nói rằng họ đã chọn một lớp tuyệt vời.
Và xuống dọc theo tuyên bố chuyển đổi, chúng tôi đã khác
trường hợp "B" và "C", và vv.
Nhưng chúng ta hãy vòng ra một điều khác.
Và một lần nữa, loại bay qua
một số ví dụ này.
Nhưng nó thực sự để chúng ta có thể áp dụng chúng, bây giờ -
hay thực sự, chỉ cần dịch chúng ngay bây giờ -
đến C.
>> Vì vậy, hãy để tôi đi trước và làm điều này.
Tôi sẽ mở một tập tin mới.
Và tôi sẽ làm include.
Và sau đó tôi sẽ làm int main (void).
Cho tôi lưu tập tin này với một loop.c.
Cũng như một ví dụ.
Và tôi sẽ đi trước và làm những điều sau đây.
Tôi muốn viết một chương trình rất tẻ nhạt.
Vì vậy, 10.
Hãy làm điều này.
9.
Được rồi.
Ngay sau khi bạn bắt đầu làm điều này trong chương trình, bạn
có thể làm gì đó sai trái.
Nhưng chúng tôi sẽ bắt đầu có anyway.
Rất tiếc.
Đó thực sự là sai.
7.
6.
5.
4.
Không có gì sẽ xảy ra khi chúng tôi nhận được là 0.
3.
2.
1.
Okay.
0.
Delete.
>> Được rồi.
Vì vậy, trở về 0.
Vì vậy, chương trình này rõ ràng sẽ làm những gì nó rất
tediously nói nó sẽ làm gì.
Nó sẽ in tất cả những người
giá trị, từ trên xuống dưới.
Vì vậy, hãy để tôi làm cho vòng lặp.
Và sau đó - tả.
Làm cho vòng lặp.
Tôi đã sai trong thư mục.
Và bây giờ cho phép tôi chạy vòng lặp.
Enter.
Woohoo.
Rất tốt đẹp.
Nice, chương trình kéo dài.
>> Được rồi, nhưng bây giờ chúng ta hãy làm điều này tốt hơn.
Cũng giống như Scratch, khi bạn bắt đầu bằng cách sử dụng một vòng lặp
xây dựng, thay vì chỉ cần sao chép và dán tất cả các
mảnh ghép, hãy để tôi giới thiệu điều này.
Vì vậy, trong C, có cấu trúc khác nhau lặp,
một trong số đó trông như thế này.
Một vòng lặp "for" có ba điều, cách nhau bởi hai dấu chấm phẩy.
Và sau đó, bên trong cơ thể của vòng lặp, do đó, để nói chuyện -
công cụ bên trong các dấu ngoặc nhọn -
chúng ta có thể làm điều gì đó một lần nữa và một lần nữa.
Vì vậy, những gì tôi có ở đây trên màn hình, đây là
nghĩa đen chỉ là một nhận xét.
/ / Có nghĩa là ở đây có một lời nhận xét.
Đây không phải là mã.
Đây chỉ là tiếng Anh mô tả, đối với tôi, con người.
>> Vì vậy, khởi tạo, điều kiện, và cập nhật.
Vâng, chúng ta hãy xem cách làm việc này.
Điều này cho phép tôi để viết lại chương trình này như sau.
Cho -
do đó, ở đây có vòng lặp của tôi -
int i -
ở đây có một biến gọi là "i" -
được khởi tạo đến 10.
Vì vậy, có là khởi tạo của tôi.
Tôi muốn làm điều này vòng lặp là "i" là lớn hơn hoặc
bằng 0.
Và mỗi lần lặp của vòng lặp này, tôi muốn
i -.
Vì vậy, chúng ta đã thấy + + vào thứ hai.
- Thì ngược lại.
Nó giảm về giá trị bằng 1.
Bên trong vòng lặp này, tôi thực sự muốn làm điều gì đó.
Vì vậy, tôi sẽ nói điều gì đó giống như printf.
Tôi không muốn nói 10 bây giờ, bởi vì điều này rõ ràng chỉ là
sẽ in giá trị như nhau.
Tôi phải làm gì muốn in thay vào đó, có thể không?
Yeah.
Vì vậy, "i." Vì vậy,% d, i.
>> Vì vậy, tôi sẽ ăn cắp một trong những ý tưởng từ trước đó -
thay thế cho mã định dạng này -
và sau đó xuống đây, ở phía dưới, tôi sẽ trở về 0, chỉ cần
phương pháp tốt.
Nhưng bây giờ, tôi có một chương trình ngắn gọn hơn.
Nó chỉ là một vài dòng, và không phải một số 10 hoặc 11 dòng.
Hãy để tôi đi xuống dấu nhắc của tôi ở đây.
Remake vòng lặp.
Chạy lại vòng lặp.
Và nó xuất hiện để được như vậy.
Bây giờ, chương trình không có gì thú vị hơn.
Nhưng bây giờ tôi có thể gõ một cái gì đó như thế này.
Tôi có thể thay đổi đến 100.
Sau đó tôi có thể biên dịch lại chương trình của tôi.
Và sau đó tôi có thể lại chạy chương trình của tôi.
Và bây giờ nó đi siêu nhanh trên máy tính ngày nay.
Nhưng có tôi có -
và trên thực tế, bộ đệm scrollback của tôi không
thậm chí đi xa.
Hiện chúng tôi đi.
Vì vậy, chúng tôi đã có tất cả 100.
Nhưng thật dễ dàng để làm cho những sai lầm ở đây.
Điều gì sẽ là hành vi mong đợi nếu tôi
vô tình làm điều đó?
Vì vậy, nó cảm thấy như vô hạn.
Vì vậy, chúng ta hãy xem nếu máy tính hoạt động.
>> Vì vậy, hãy để tôi đi trước và làm cho vòng lặp.
Và cho phép tôi chạy vòng lặp.
Vì vậy, chúng ta hãy quay trở lại đó trong thời điểm này chỉ là một.
Chúng tôi sẽ cho chạy đó.
Bởi vì những gì chúng ta nên đếm lên, tối thiểu?
Có lẽ ít nhất 2 tỷ đồng, nếu chúng ta có nhiều bit, và
chúng tôi đang sử dụng các giá trị tích cực.
Vì vậy, chúng ta hãy nhảy trở lại đây.
Bên cạnh các loại của các vòng, chúng tôi có những gì được gọi là trong khi
vòng. Vì vậy, giống như Scratch, bạn đã có giới hạn
khối, và bạn có khối Lặp lại.
Tương tự như vậy, trong C, bạn chỉ cần có những cách khác
thể hiện chính mình.
Vì vậy, bạn có khái niệm về một vòng lặp trong khi cho phép bạn
thể hiện bản thân một chút khác nhau.
Và sau đó bạn có một cái gì đó gọi là vòng lặp do-trong khi,
hoạt động hơi khác nhau là tốt.
Và chúng tôi sẽ trêu chọc những ngoài theo thời gian.
>> Nhưng chúng ta hãy xem xét này cuối cùng ở đây.
Nếu chúng ta đi vào -
vẫn chạy.
Nó khá vô hạn.
Vì vậy, hãy để tôi đi vào tích cực, và hiển thị như thế nào chúng ta có thể thực sự
cai trị người dùng nhập vào một chút hiệu quả hơn.
Đó là một chương trình khá ngắn.
Và ở đây chúng ta có, trong chính, một khai báo int n.
Vì vậy, cho tôi một biến gọi là n. Bây giờ, tôi theo nghĩa đen nói
"Làm". Và sau đó tôi đã có mở xoăn
cú đúp, gần xoăn cú đúp.
Và sau đó thông báo, ngay sau đó, nó nói trong khi n
là nhỏ hơn 1.
Vì vậy, nhận thấy rằng những dòng này -
19 đến 24 -
soạn chung một vòng lặp do-trong khi.
Và một lần nữa, cú pháp, không phải là một ý tưởng mới.
Nó chỉ là một cách khác để Looping, cú pháp.
Vì vậy, điều này không làm gì?
Làm như sau trong khi n là nhỏ hơn 1.
Vì vậy, tôi phải làm gì muốn làm gì?
Tôi yêu cầu bạn cung cấp cho tôi một số nguyên dương.
Sau đó, tôi thực sự cố gắng để có được một số nguyên từ người sử dụng.
Tuy nhiên, về thứ tự của các hoạt động ở đây, bởi vì
trong khi điều kiện là xuống ở đây, tôi sau đó sẽ kiểm tra, n
nhỏ hơn 1?
Vì vậy, giả sử rằng người sử dụng -
sau khi được yêu cầu theo cách này -
loại trong giá trị 0.
Tình trạng này là có được đúng hay sai?
Vâng, nó thực sự là đúng.
Bởi vì n là 0, và 0 là ít hơn 1.
Vì vậy, điều đó không bao hàm những gì?
Làm điều đó một lần nữa.
Chỉ một lần điều kiện đánh giá sai.
Nếu tôi gõ trong 42.
Cũng không có, 42 không phải là nhỏ hơn 1.
Vì vậy vòng lặp này được thực hiện thực hiện.
Và như vậy tại thời điểm đó, chương trình sẽ nói, nhờ
42, trong trường hợp này.
Bây giờ bạn có cách thể hiện bản thân -
Chúng ta không nên chờ đợi điều này để kết thúc.
Nó sẽ mất một thời gian.
Được tiếp tục trong thời gian tới, có lẽ.
>> Nhưng bây giờ, bạn có khả năng để hy vọng để hiểu một
chút hài hước đam mê.
Lời xin lỗi.
Đây không phải là đại diện của sự hài hước trong khoa học máy tính
thế giới, nhưng nó dễ thương.
[Cười] Chúng ta hãy kết thúc vào lưu ý.
Và chúng ta sẽ thấy bạn vào thứ hai.
[Vỗ tay]