>> [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]