[Bermain muzik] SPEAKER: Baiklah. Jadi mari kita bercakap tentang lain Perkara itu jenis yang unik kepada C, yang merupakan jenis data dan pembolehubah. Apabila saya katakan yang unik untuk C, saya benar-benar hanya bermakna dalam konteks, jika anda telah programmer untuk masa yang lama, Anda mungkin tidak bekerja dengan jenis data jika anda menggunakan moden bahasa pengaturcaraan. Bahasa moden seperti PHP dan JavaScript, yang kita juga akan melihat sedikit kemudian di dalam kursus ini, anda sebenarnya tidak perlu nyatakan jenis data bagi pembolehubah apabila anda menggunakannya. Anda hanya mengisytiharkan dan mula menggunakannya. Jika ia integer, ia tahu ia adalah bilangan bulat. Jika ia watak, ia tahu ia bersifat. Jika ia satu perkataan, ia tahu ia adalah satu tali, kononnya. Tetapi dalam C, yang merupakan bahasa yang lebih tua, kita perlu untuk menentukan data jenis setiap pemboleh ubah yang kita buat kali pertama yang kita gunakan pembolehubah itu. Jadi C dilengkapi dengan beberapa terbina dalam jenis data. Dan mari kita membiasakan diri dengan beberapa daripada mereka. Dan kemudian selepas itu kami juga akan bercakap sedikit mengenai beberapa jenis data bahawa kita telah ditulis untuk anda, supaya anda boleh menggunakannya dalam CS50. Yang pertama adalah int. Jenis int data adalah digunakan untuk pembolehubah yang akan menyimpan nilai integer. Jadi 1, 2, 3, negatif 1, 2, 3, dan sebagainya. Bilangan bulat, yang adalah sesuatu yang anda harus ingat untuk kuiz, sentiasa mengambil empat bait memori, yang adalah 32 bit. Terdapat lapan bit dalam satu bait. Jadi ini bermakna bahawa pelbagai nilai-nilai yang integer boleh menyimpan adalah terhad oleh apa yang boleh muat dalam 32 bit bernilai maklumat. Sekarang kerana ia ternyata, sudah lama memutuskan bahawa kita akan berpecah yang pelbagai 32 bit ke dalam bilangan bulat negatif dan bilangan bulat positif, setiap babak mendapat julat. Oleh itu, julat nilai yang diwakili dengan pelbagai integer daripada negatif 2 kepada kuasa 31 2 hingga kuasa 31 tolak 1, menyebabkan anda juga perlu tempat untuk 0. Jadi, pada asasnya separuh daripada nilai yang mungkin anda boleh menyesuaikan int adalah negatif, setengah adalah positif. Dan kira-kira di sini, ini adalah kira-kira negatif 2 bilion kepada kira-kira positif 2 bilion. Memberi atau mengambil masa beberapa ratus juta. Jadi itulah yang anda boleh muat dalam satu pembolehubah integer. Sekarang kita juga mempunyai sesuatu dipanggil integer tidak ditandatangani. Sekarang ints tidak ditandatangani bukan adalah jenis berasingan berubah-ubah. Sebaliknya, tidak ditandatangani adalah apa yang dipanggil pusingan kelayakan. Ia mengubah data jenis integer sedikit. Dan dalam kes ini, apa yang tidak ditandatangani ertinya- dan anda juga boleh menggunakan tidak ditandatangani jenis data yang lain, integer bukan satu-satunya. Apa yang berkesan tidak adalah beregu julat nilai-nilai positif yang integer boleh mengambil di perbelanjaan tidak lagi membenarkan anda untuk mengambil nilai-nilai negatif. Jadi jika anda mempunyai nombor yang anda tahu akan mendapatkan lebih tinggi daripada 2 bilion tetapi kurang daripada 4 bilion, untuk example-- yang adalah 2 hingga 32 yang kuasa- anda mungkin mahu menggunakan int tidak ditandatangani jika anda tahu nilai anda tidak akan menjadi negatif. Kadang-kadang anda akan mempunyai digunakan untuk pembolehubah tidak ditandatangani dalam CS50, itulah sebabnya saya menyebut di sini. Tetapi sekali lagi, julat nilai yang boleh mewakili dengan integer tak bertanda sebagai untuk t integer biasa, adalah 0 2 kuasa 32 tolak 1, atau kira-kira 0-4000000000. Jadi, anda telah berkesan dua kali ganda pelbagai positif bahawa anda boleh muat, tetapi anda sudah meninggalkan semua nilai-nilai negatif. Sekarang sebagai diketepikan, tidak ditandatangani bukan satu-satunya kelayakan agar kita dapat melihat untuk jenis data yang berubah-ubah. Terdapat beberapa perkara yang dipanggil pendek dan panjang dan malar. Const kita akan melihat sedikit sedikit kemudian dalam perjalanan. Pendek dan panjang, kami mungkin tidak akan. Tetapi hanya tahu bahawa ada adalah kelayakan lain. Tidak ditandatangani bukan satu-satunya. Tetapi ia adalah satu-satunya kami akan bercakap tentang sekarang. Begitu tepat sekali. Oleh itu, kita telah dilindungi integer. Apa seterusnya? Aksara. Jadi aksara yang digunakan untuk pembolehubah yang akan menyimpan aksara tunggal. Char pendek untuk watak. Dan kadang-kadang anda mungkin mendengar yang menyebutnya sebagai kereta. Jadi aksara sentiasa mengambil salah satu bait memori, yang hanya 8 bit. Jadi ini bermakna bahawa mereka hanya boleh muat nilai-nilai dalam lingkungan negatif 2 kuasa yang ketujuh, atau negatif 128, untuk 2 kuasa 7 tolak 1, atau 127. Terima kasih kepada ASCII, ia sebulan yang lalu telah memilih cara yang untuk memetakan nombor-nombor positif daripada 0-127 untuk pelbagai watak bahawa semua wujud pada keyboard kita. Jadi seperti yang kita akan lihat kemudian dalam kursus ini, dan anda akan mungkin datang untuk menghafal beberapa titik, modal A, untuk example-- modal watak A-- maps kepada bilangan 65. Dan sebab itulah kerana itulah apa yang ia telah diberikan oleh piawaian ASCII. Huruf kecil adalah 97. Watak 0 untuk apabila anda sebenarnya menaip watak, tidak mewakili bilangan sifar, adalah 48. Anda akan belajar pasangan ini sebagai anda pergi. Dan anda pasti akan datang ke perlukan mereka sedikit kemudian dalam CS50. Seterusnya jenis data utama terapung nombor mata. Jadi nombor titik terapung adalah juga dikenali sebagai nombor nyata. Mereka pada dasarnya nombor yang mempunyai titik perpuluhan di dalamnya. Mata yang terapung seperti bilangan bulat juga yang terkandung dalam 4 bait ingatan. Sekarang tidak ada carta di sini. Tidak ada garis nombor, kerana menerangkan pelbagai apungan tidak betul-betul jelas atau intuitif. Cukup untuk mengatakan anda mempunyai 32 bit untuk bekerja dengan. Dan jika anda mempunyai sejumlah seperti pi, yang mempunyai bahagian integer 3, dan terapung yang bahagian mata, atau sebahagian perpuluhan 0,14159, dan sebagainya, anda perlu dapat mewakili semua kitab itu bahagian integer dan bahagian perpuluhan. Jadi, apa yang anda berfikir bahawa mungkin bermakna? Satu perkara ialah jika perpuluhan sebahagian mendapat lebih panjang dan lebih lama, jika saya mempunyai yang sangat besar bahagian integer, aku jangan dapat menjadi seperti tepat dengan bahagian perpuluhan. Dan itu benar-benar had apungan. Pelampung mempunyai masalah ketepatan. Kami hanya mempunyai 32 bit untuk bekerja dengan, jadi kami hanya boleh begitu tepat dengan bahagian perpuluhan kami. Kita tidak boleh semestinya mempunyai perpuluhan sebahagian tepat kepada 100 atau 200 digit, kerana kita hanya mempunyai 32 bit untuk bekerja dengan. Jadi itu adalah satu had apungan. Kini nasib baik ada jenis data lain yang dipanggil dua kali, yang agak berkaitan dengan masalah ini. Beregu, seperti kereta berhias, juga digunakan untuk menyimpan nombor nyata, atau titik terapung nilai-nilai. Perbezaannya ialah beregu adalah ketepatan berganda. Mereka boleh memuatkan 64 bit data, atau lapan bait. Apa maksudnya? Baik, ia bermakna kita boleh menjadi lebih banyak tepat dengan titik perpuluhan. Daripada perlu pi tujuh tempat-tempat yang mungkin, dengan apungan, kita mungkin boleh mempunyai hingga 30 tempat. Jika itu yang penting, anda mungkin mahu menggunakan dua daripada apungan. Pada asasnya, jika anda berada mengusahakan apa-apa di mana mempunyai tempat yang benar-benar panjang perpuluhan dan banyak ketepatan adalah penting, anda mungkin ingin menggunakan overfloat berganda. Sekarang untuk kebanyakan kerja anda dalam CS50, apungan sudah memadai. Tetapi tahu bahawa beregu wujud sebagai cara untuk agak menangani ketepatan masalah dengan memberi anda tambahan 32 bit untuk bekerja dengan untuk nombor anda. Sekarang ini bukanlah satu jenis data. Ini adalah jenis. Dan ia dipanggil tidak sah. Dan saya bercakap mengenainya di sini kerana kita ada mungkin dilihat beberapa kali sudah dalam CS50. Dan anda mungkin tertanya-tanya apa itu semua kira-kira. Jadi tidak sah adalah jenis. Ia tidak wujud. Tetapi ia bukan satu jenis data. Kita tidak boleh membuat pembolehubah jenis tidak sah dan menetapkan nilai kepadanya. Tetapi fungsi, sebagai contoh, boleh mempunyai jenis pulangan tidak sah. Pada asasnya, jika anda melihat fungsi yang mempunyai jenis pulangan tidak sah, ia bermakna ia tidak mengembalikan nilai. Bolehkah anda memikirkan yang sama fungsi yang kami telah digunakan setakat ini dalam CS50 yang tidak mengembalikan nilai? Printf adalah satu. Printf tidak sebenarnya kembali apa-apa kepada anda. Ia mencetak sesuatu kepada menyaring, dan ia pada dasarnya kesan sampingan daripada apa printf tidak. Tetapi ia tidak memberi anda nilai yang kembali. Anda tidak menangkap hasil dan stor dalam beberapa pembolehubah untuk menggunakannya di kemudian hari. Ia hanya mencetak sesuatu untuk skrin dan anda selesai. Oleh itu, kita mengatakan bahawa printf adalah fungsi tidak sah. Ia mengembalikan apa-apa. Senarai di perimeter fungsi juga boleh menjadi tidak sah. Dan anda juga telah melihat bahawa agak sedikit dalam CS50 juga. Sah utama Int. Adakah itu membunyikan loceng? Pada asasnya apa yang bermakna adalah bahawa utama tidak mengambil apa-apa parameter. Tidak ada hujah bahawa Dapatkan berlalu ke dalam utama. Sekarang kemudian kita akan melihat bahawa terdapat cara untuk lulus hujah ke dalam utama, tetapi setakat ini apa yang kita ada dilihat adalah tidak sah utama int. Utama hanya tidak mengambil apa-apa hujah. Dan supaya kita menentukan bahawa dengan mengatakan tidak sah. Kami hanya yang sangat yang jelas tentang hakikat bahawa ia tidak mengambil apa-apa hujah. Jadi buat masa ini, cukuplah untuk mengatakan tidak sah yang pada dasarnya hanya perlu bertindak sebagai pemegang tempat yang untuk anda kerana memikirkan kerana apa-apa. Ia tidak benar-benar melakukan apa-apa. Tidak ada nilai pulangan sini. Tidak ada parameter di sini. Ia adalah tidak sah. Ia kompleks lebih sedikit daripada itu. Tetapi ini sudah memadai untuk bahagian yang lebih baik kursus. Dan mudah-mudahan sekarang anda mempunyai sedikit sedikit lebih kepada konsep apa yang tidak sah adalah. Jadi mereka adalah lima jenis anda akan pertemuan yang terbina dalam untuk C. Tetapi dalam CS50 kami juga mempunyai perpustakaan. CS50.h, yang anda boleh termasuk. Dan yang akan memberikan anda dengan dua jenis tambahan bahawa anda mungkin akan dapat untuk digunakan pada tugasan anda, atau hanya bekerja secara amnya pengaturcaraan. Yang pertama ini adalah bool. Jadi jenis data Boolean, bool, digunakan untuk pembolehubah yang akan menyimpan nilai Boolean. Jika anda pernah mendengar istilah ini sebelum ini, anda mengetahui bahawa Boolean yang Nilai mampu sahaja memegang dua nilai yang berbeza berbeza. Benar dan palsu. Sekarang ini kelihatan agak asas, bukan? Ia adalah jenis kejutan ini tidak wujud dalam C kerana ia terbina dalam. Dan dalam banyak bahasa moden, sudah tentu, Booleans adalah standard jenis data lalai. Tetapi dalam C, mereka benar-benar tidak. Tetapi kita telah membuat untuk anda. Jadi, jika anda merasa perlu untuk mewujudkan pembolehubah yang jenis adalah bool, hanya pastikan anda # include CS50.h pada awal program anda, dan anda akan dapat mewujudkan pembolehubah jenis bool itu. Jika anda terlupa untuk # include CS50.h, dan anda mula menggunakan pembolehubah Boolean-jenis, anda mungkin menghadapi beberapa masalah apabila anda menyusun program anda. Jadi hanya berada di mencari untuk itu. Dan mungkin anda hanya boleh menetapkan masalah dengan pound termasuk CS50.h. Yang lain jenis data utama yang kita menyediakan untuk anda di perpustakaan CS50 adalah tali. Jadi apa rentetan? Rentetan adalah benar-benar hanya kata-kata. Mereka koleksi watak. Mereka kata-kata. Mereka ayat. Mereka perenggan. Mungkin buku keseluruhan, walaupun. Yang singkat untuk masa yang lama siri watak. Jika anda perlu menggunakan tali, sebagai contoh, untuk menyimpan kata, hanya pastikan untuk memasukkan CS50.h pada awal program anda supaya anda boleh menggunakan jenis tali. Dan kemudian anda boleh membuat pembolehubah yang jenis data adalah tali. Sekarang di kemudian hari dalam perjalanan, kita juga akan melihat bahawa itulah bukan keseluruhan cerita, sama ada. Kami akan menghadapi perkara dipanggil struktur, yang membolehkan anda untuk kumpulan apa yang mungkin integer dan rentetan ke dalam satu unit. Dan kita boleh menggunakan bahawa untuk beberapa tujuan, yang mungkin sangat berguna di kemudian hari dalam perjalanan. Dan kita juga akan belajar mengenai jenis ditakrifkan, yang membolehkan anda untuk membuat jenis data anda sendiri. Kami tidak perlu bimbang tentang itu buat masa sekarang. Tetapi hanya tahu bahawa itulah sesuatu di kaki langit, bahawa ada banyak lagi untuk keseluruhan ini jenis perkara daripada saya memberitahu anda hanya sekarang. Jadi sekarang kita telah belajar sedikit mengenai data asas jenis dan jenis data CS50, mari kita bercakap tentang bagaimana untuk bekerja dengan pembolehubah dan membuat mereka menggunakan ini jenis data dalam program-program kami. Jika anda ingin membuat pembolehubah, semua yang anda perlu lakukan adalah dua perkara. Pertama, anda perlu memberikan jenis. Perkara kedua yang perlu lakukan adalah memberikan nama. Sebaik sahaja anda telah melakukan itu dan menampar seorang koma bernoktah di hujung talian itu, anda telah membuat pembolehubah. Jadi di sini adalah dua contoh. Nombor Int; surat char ;. Apa yang telah saya lakukan di sini? Saya telah membuat dua pembolehubah. Yang pertama, pembolehubah ini Nama nombor. Dan bilangan mampu memegang integer menaip nilai, kerana jenis adalah int. Surat adalah pembolehubah lain yang boleh memegang watak-watak kerana jenis data adalah char. Cukup mudah, bukan? Jika anda mendapati diri dalam keadaan di mana anda perlu membuat beberapa pembolehubah dari jenis yang sama, anda hanya perlu untuk menentukan nama jenis sekali. Kemudian hanya menyenaraikan seberapa banyak pembolehubah jenis itu yang anda perlukan. Jadi saya boleh bagi contoh, di sini di baris ini pertiga daripada kod, mengatakan ketinggian int ;, barisan baru. Lebar Int ;. Dan yang akan bekerja juga. Saya masih mendapat dua pembolehubah dipanggil ketinggian dan lebar, setiap yang integer. Tetapi saya dibenarkan, perkara yang perlu C sintaksis, menyatukan ke dalam satu baris. Ketinggian Int, lebar; Ia adalah perkara yang sama. Saya telah membuat dua pembolehubah, satu dipanggil ketinggian satu dipanggil lebar, kedua-duanya mampu pegangan Nilai jenis integer. Begitu juga di sini, saya boleh membuat tiga mata yang terapung sekaligus. Saya mungkin boleh mencipta pembolehubah dipanggil punca kuasa dua 2-- yang mungkin akan akhirnya memegang point-- terapung bahawa perwakilan dataran akar 2-- punca kuasa dua 3, dan pi. Saya boleh melakukan ini tiga barisan yang berasingan. Float, punca kuasa dua 2; Float punca kuasa 3; terapung pi; dan yang akan bekerja juga. Tetapi sekali lagi, saya hanya boleh menyatukan ini ke dalam satu baris kod. Membuat perkara yang sedikit lebih pendek, bukan sebagai clunky. Sekarang secara umum, ia adalah reka bentuk yang baik untuk hanya mengisytiharkan pembolehubah apabila anda memerlukannya. Dan kita akan bercakap sedikit sedikit lebih lanjut mengenai itu kemudian dalam perjalanan apabila kita membincangkan skop. Jadi tidak semestinya perlu membuat semua pembolehubah anda pada awal program ini, yang sesetengah orang mungkin telah dilakukan masa lalu, atau memang satu perkara biasa amalan pengekodan tahun yang lalu apabila bekerja dengan C. Anda mungkin hanya ingin membuat betul berubah apabila anda memerlukannya. Baiklah. Oleh itu, kita telah mencipta pembolehubah. Bagaimana kita menggunakannya? Selepas kami mengisytiharkan berubah-ubah, kita tidak perlu untuk menentukan jenis data pembolehubah itu lagi. Malah, jika anda berbuat demikian, anda mungkin berakhir dengan beberapa kesan pelik yang kita jenis akan menyembunyikan buat masa ini. Tetapi memadai untuk mengatakan, perkara pelik akan untuk mula berlaku jika anda secara tidak sengaja semula mengisytiharkan-pembolehubah dengan nama yang sama lagi dan lagi. Jadi di sini saya mempunyai empat baris kod. Dan saya mempunyai beberapa Komen sana hanya menunjukkan apa yang berlaku di setiap baris hanya untuk membantu anda mendapat terletak dalam apa yang sedang berlaku. Nombor Jadi int ;. Anda melihat bahawa sebelum ini. Itu satu pengisytiharan pembolehubah. Saya kini telah mencipta pembolehubah dipanggil nombor itu mampu memegang nilai integer-jenis. Saya telah diisytiharkan itu. Barisan seterusnya saya memberikan nilai kepada nombor. Nombor sama 17. Apa yang berlaku di sana? Saya meletakkan jumlah 17 dalam pembolehubah itu. Jadi, jika saya pernah kemudian mencetak apa kandungan jumlah yang di kemudian hari, mereka akan memberitahu saya ia adalah 17. Jadi saya telah mengisytiharkan pembolehubah, dan kemudian saya telah diberikan itu. Kita boleh mengulangi proses tersebut lagi dengan surat char ;. Itulah perisytiharan. Surat sama ibu H. Itulah tugasan. Cukup mudah juga. Sekarang proses ini mungkin seolah-olah jenis bodoh. Mengapa kami lakukan ini dalam dua baris kod? Adakah terdapat cara yang lebih baik untuk melakukannya? Malah, ada. Kadang-kadang anda mungkin melihat ini dipanggil pengawalan. Ia adalah apabila anda mengisytiharkan pembolehubah dan menetapkan nilai pada masa yang sama. Ini sebenarnya yang cukup perkara biasa yang perlu dilakukan. Apabila anda membuat pembolehubah, anda biasanya mahu ia mempunyai beberapa nilai asas. Walaupun ia adalah 0 atau sesuatu. Anda hanya anda memberikan nilai. Anda boleh memulakan pembolehubah. Int jumlah bersamaan 17 adalah sama seperti dua baris pertama kod ke atas. Surat Char sama h adalah sama seperti yang baris ketiga dan keempat dari kod di atas. Mengenai restoran paling penting di sini apabila kita mengisytiharkan dan memberikan pembolehubah adalah selepas kami telah diisytiharkan, notis Saya tidak menggunakan jenis data lagi. Saya tidak mengatakan jumlah int bersamaan 17 pada baris kedua kod, sebagai contoh. Saya hanya berkata jumlah bersamaan 17. Sekali lagi,-mengisytiharkan semula pembolehubah selepas anda telah mengisytiharkan ia boleh membawa kepada beberapa akibat pelik. Jadi hanya berhati-hati itu. Saya Doug Lloyd. Dan ini adalah CS50.