[Bermain muzik] ZAMYLA CHAN: Adakah anda lebih menerima $ 10000000 sekarang atau menerima beberapa sen setiap hari dalam bulan ini, di mana setiap hari berikutnya, anda menerima dua kali ganda jumlah beberapa sen anda diterimanya sehari sebelum ini? Dalam beberapa sen, kita akan membuktikan mengapa anda perlu pastinya mengambil beberapa sen. Tugas anda adalah untuk menulis pennies.c-- satu program yang pertama meminta pengguna bagaimana beberapa hari terdapat dalam bulan dan kemudian bertanya berapa sen pengguna akan menerima pada hari pertama. Program ini maka harus mengira jumlah pengguna yang akan mempunyai terkumpul pada akhir bulan dan memaparkannya. Kami boleh memecahkan program ini sehingga ke dalam beberapa tugas. Kita perlu segera untuk pelbagai input pengguna - hari dan bulan, dan beberapa sen pada hari pertama. Kita perlu untuk mengesan berapa banyak wang pengguna mempunyai dan mengemaskini setiap hari, dua kali ganda jumlah beberapa sen yang mereka terima. Dan akhirnya, kita mencetak mereka jumlah akhir, dalam dolar. Mari kita input pengguna menangani pertama. Saya akan membuka apples.c, program pendek yang memperkatakan dengan input dan output. Di bahagian atas di sini, saya telah dimasukkan beberapa satu perpustakaan yang saya perlukan - Perpustakaan CS50 dan standard I / O perpustakaan. Saya mencetak segera menggunakan fungsi printf dari perpustakaan standard I / O. Tetapi sebenar menyebabkan pengguna yang berlaku di baris berikutnya dengan ini Fungsi GetInt di perpustakaan CS50. GetInt mendapat input daripada pengguna dan memastikan bahawa input adalah integer. Jadi saya menyimpan input pengguna ke dalam integer i, tolak 1 dari i, dan kemudian mencetak nilai baru jika i. Selepas menyusun apples.c menggunakan arahan "membuat epal," Saya mempunyai epal fail boleh laku. Berjalan itu, saya akan input 1. Program ini memberitahu saya bahawa Saya mempunyai 0 epal kiri. Dan sebagainya yang bekerja seperti yang diharapkan. Jadi mari kita menjalankan ini lagi dan input negatif 1. Sekarang, yang mempunyai jumlah yang negatif epal tidak benar-benar masuk akal, tetapi program menerima, kerana negatif 1, baik, ia adalah integer. Dan kini program atau raksasa di dalam program makan yang negatif epal, dan kini saya mempunyai negatif 2 epal. Hm, supaya satu pengajaran - walaupun fungsi GetInt dan fungsi yang berkaitan, seperti GetFlow atau GetString mendapat hak jenis data, anda perlu memastikan bahawa input membuat rasa untuk program anda. Dalam beberapa sen, ia tidak akan berbuat demikian dengan segera untuk integer, anda perlu membuat memastikan bahawa input pengguna integer yang masuk akal memandangkan konteks. Bulan hanya boleh mempunyai 28, 29, 30, atau 31 hari. Kami mahu terus menuntut integer yang sah. Jika mereka input luar integer kami batas yang diterima, kami akan meminta mereka lagi dan lagi, sehingga anda memberi kita integer yang sah. Ingat "ulangi sehingga" menghalang dalam Scratch? Anda boleh membuat binaan yang sama dalam C menggunakan "manakala" gelung atau "do-manakala" gelung. Struktur gelung sementara mempunyai keadaan yang mesti dipenuhi untuk badan gelung untuk melaksanakan. Ini perlu melihat sedikit sama, kerana keadaan ini adalah sama seperti Blok awal dengan sudut dan masuk ke dalam kurungan daripada "manakala" gelung. Jadi keadaan yang akan memeriksa sama ada integer adalah dalam batas-batas yang sesuai. Anda boleh segera menggunakan GetInt integer dan kemudian melaksanakan "manakala" anda gelung, mengulangi segera dan percetakan arahan, manakala input adalah tidak sah. Satu lagi cara untuk memastikan input pengguna yang betul adalah dengan menggunakan "do-manakala" gelung, yang sangat serupa dengan gelung Walaupun. The "do-manakala" gelung melaksanakan kod di dalam orang-orang yang badan dan kemudian cek sama ada keadaan itu dipenuhi atau tidak. Ini amat berguna untuk mendapatkan input pengguna, kerana anda tahu bahawa anda perlu untuk meminta mereka sekurang-kurangnya sekali. Jika keadaan ini tidak dipenuhi, program akan melaksanakan baris selepas anda "do-manakala" gelung. Jika keadaan itu dipenuhi walaupun, gelung akan mengulangi A "do-manakala" gelung untuk mengesahkan pengguna input akan melihat sesuatu seperti ini. Saya mengisytiharkan n ubah, GetInt, dan kemudian mengulangi sehingga n adalah sah. Dan proses ini, saya menjelaskan, telah menggunakan jenis integer-data yang anda akan digunakan untuk hari-hari bulan. Tetapi kita tahu bahawa jumlah beberapa sen akan tumpukan dengan cepat, jadi untuk menyimpan nombor yang lebih besar, menggunakan jenis data LongLong, tetapi ingat yang sama prinsip pengesahan terpakai. Awesome, jadi apabila kita mempunyai dua sah input daripada pengguna - hari dalam bulan dan beberapa sen pada hari pertama - kita boleh bergerak ke depan sebahagian daripada program ini. Pada hari pertama, pengguna bermula dengan namun banyak beberapa sen mereka dinyatakan dan jumlah sen yang mereka menerima pada hari berikutnya adalah dua kali ganda. Jadi masuk akal untuk mengesan kedua-dua jumlah - berapa banyak wang yang pengguna mempunyai dan bagaimana banyak beberapa sen mereka akan diberikan. Sekarang, melakukan sesuatu untuk 28 hingga 31 hari berulang-ulang, jadi mari kita menggunakan "untuk" gelung untuk melelar sepanjang hari dalam bulan, mengemaskini jumlah dan sen berjumlah setiap masa. "Untuk" sintaks gelung mengandungi berikut - satu pengawalan, keadaan, dan kemas kini. "Untuk" anda gelung akan memulakan berubah-ubah, apabila ia pertama memasuki gelung. Jika keadaan itu dipenuhi, badan gelung akan melaksanakan. Selepas itu, kemas kini akan melaksanakan. Jika keadaan ini masih dipenuhi, gelung akan melaksanakan dan mengemas kini, dan ulangi, selagi keadaan anda dinilai sebagai benar. Berikut adalah gelung "untuk" yang membahagikan satu integer p oleh 2 sebanyak 10 kali. Perhatikan bagaimana saya mengisytiharkan p integer luar "untuk" gelung saya, supaya integer boleh diakses luar "untuk" gelung. Selepas bulan telah berlalu, sudah tiba masanya untuk memberitahu pengguna berapa banyak wang mereka telah mendapat. Per spec, anda perlu untuk memberitahu pengguna berapa banyak dolar, tidak berapa ramai beberapa sen, mereka. Tetapi setakat ini, anda telah disimpan maklumat tentang jumlah dan beberapa sen menggunakan LongLongs, yang nombor bulat. Terdapat 100 sen kepada $ 1, demikian melainkan jika bilangan sen adalah dibahagikan dengan 100, anda perlu mewakili tempat perpuluhan. The autotype dua kali ganda membolehkan anda untuk melakukan ini. Jadi bagaimana kita menukar daripada mewakili beberapa sen kepada dolar? Mari kita lihat satu pi.c. Program ini mengambil big_pi LongLong dan dibahagikan dengan 100,000, dan mencetak hasil hingga lima tempat perpuluhan. Jika kita mahu untuk memaparkan empat perpuluhan tempat, maka kita hanya boleh menggantikan ini beberapa di sini. Jadi mari kita menyimpan, menyusun pi, dan kemudian melihat hasilnya, yang kita menjangka akan 3,1415 - pertama lima digit pi. Ia tidak walaupun. Dan mengapa? Nah, kerana big_pi adalah LongLong a, yang merupakan nombor bulat, yang tidak akan menjejaki perpuluhan. Pengubahsuaian yang perlu saya membuat adalah di bahagian ini. Saya perlu dibuang ke dua di sini sebelum membahagikan, kerana beregu tidak boleh menyimpan menjejaki tempat perpuluhan. Dan saya akan menambah satu barisan baru di sini untuk format yang lebih baik. Dan di sini kita ada - 3,1416. Anda boleh melihat bahawa ia mencetak 3,1416 bukannya 3,1415 seperti yang diharapkan. Ini kerana ia pusingan semasa proses pembahagian, berbanding dengan hanya Memangkas nilai. Sekarang anda akan dapat untuk mencetak jumlah akhir dengan betul, yang selesai program ini. Tahniah. Nama saya Zamyla. Dan ini adalah beberapa sen. [Bermain muzik]