C++ Sintaksis Reja


Download 32.6 Kb.
bet1/3
Sana04.02.2023
Hajmi32.6 Kb.
#1166571
  1   2   3
Bog'liq
C sintaksisi

C++ Sintaksis

Reja













































Eng oddiy dastur


C++ da ikkita raqam qo'shadigan eng oddiy dastur quyidagicha ko'rinadi:
#include

using namespace std;


int main() {


int a, b;
cin >> a >> b;
int s = a + b;
cout << s << endl;
return 0;
}
Keling, uni satr satrga ajratamiz.
#include
(Bu erda burchak qavslari belgilardan kichik va kattaroqdir.)
a bilan boshlanadigan qatorlar #C++ da kompilyator direktivalari (yoki aniqrog'i, preprotsessor direktivalari ) deb ataladi . Deyarli barcha boshqa til konstruktsiyalaridan farqli o'laroq, ular alohida satrda yozilishi kerak.
Direktiv , qo'pol qilib aytganda, klaviatura kiritish va ekran chiqishi bilan ishlash qobiliyatini bog'laydi. Birinchi taxmin sifatida, C++ tilidagi direktiva python va paskal tillarida o'xshash - bu sizga dasturda ba'zi qo'shimcha funktsiyalar va konstruktsiyalardan foydalanish imkoniyatini beradi.#include #includeimportuses
Shu bilan birga, C ++ da, python va paskaldan farqli o'laroq, sukut bo'yicha dastur uchun juda kam narsa mavjud. Deyarli barcha funktsiyalar, ma'lumotlar turlari va boshqalar, juda oddiy to'plamdan tashqari, o'zlarining #include. Xususan, hatto importpython-da va paskalda ham mavjud bo'lmagan klaviatura kiritish usesuchun alohida #include.
Undan keyin keladigan narsa sarlavha fayli#include deb ataladi . Python va paskalda shunga o'xshash vaziyatda qo'llaniladigan "modul" atamasini ishlatish shart emas; C++ da modullar butunlay boshqacha (va aslida faqat C++ 20 dan boshlab mavjud).
Eslatma
Shuni ta'kidlash kerakki, kompilyator direktivasi #includejuda oddiy ma'noga ega: u ko'rsatilgan faylning mazmunini oladi (bizning holimizda iostream, standart kompilyator paketiga kiritilgan) va uni oddiygina dasturingizdagi joyga kiritadi (qo'shadi). direktiv qaerda yozilgan. Bular. notation kompilyatorga "fayl mazmunini xuddi hozirgi faylning joriy joyida yozilgandek o'qing, so'ngra joriy faylni o'qing " degan ma'noni anglatadi. Shunga ko'ra, sarlavhalar standart sarlavha faylida tasvirlangan#include iostreamiostreamklaviatura va ekran bilan ishlash uchun zarur bo'lgan funksiyalar, ma'lumotlar turlari va boshqalar. U yerda funksiyalarning toʻliq kodi emas, balki faqat sarlavhalar tasvirlangan boʻlishi mumkin (kod allaqachon tayyor kutubxonalarda tuzilgan boʻlishi mumkin), lekin aynan sarlavhalar kompilyatorga dasturingizni yanada kompilyatsiya qilishi kerak. Aslida, shuning uchun turdagi fayllar iostreamsarlavhali fayllar deb ataladi va ko'pincha kengaytmaga ega .h (sarlavha - sarlavha so'zidan).
Aslida, direktiva #includenafaqat sarlavhali fayllarni, balki boshqa fayldan kod kiritish kerak bo'lgan boshqa joylarda ham ishlatilishi mumkin. Ammo buni qilish kerak emas, faqat juda kamdan-kam hollarda, yaqin kelajakda kerak bo'lishi dargumon.
Shuni ham ta'kidlaymanki, direktivaning mavjudligining #includeo'zi C++ tili (aniqrog'i, direktiv meros bo'lib qolgan C tili) juda qadimiy dasturlash tili ekanligini ko'rsatadi. Boshqa fayllardan kodni qandaydir tarzda kiritish zarurati dasturlash tillari paydo bo'lishida paydo bo'lganligi aniq va dasturning hozirgi joyiga boshqa fayl kodini oddiygina ahmoqona kiritadigan konstruktsiyalar qilishning eng oddiy usullaridan biri ekanligi aniq. bu va ayni paytda juda kuchli yo'l. Zamonaviyroq tillarda modul kabi tizimlar mavjud bo'lib, ular bir tomondan murakkabroq (kompilyatorda amalga oshirish nuqtai nazaridan), lekin ikkinchi tomondan, aniqroq va bir qator afzalliklarga ega; #includeZamonaviy tillardagi turdagi konstruktsiyalar faqat ba'zi oddiy belgilash tillarida yoki shunga o'xshash tillarda, tilning o'zi juda sodda bo'lsa, topiladi.
Keling, keyingi qatorga o'tamiz.
using namespace std;
Bu qator, ular aytganidek, nom maydonini (nomlar maydoni) o'z ichiga oladi std. Usiz ko'plab standart funktsiyalar, turlar, o'zgaruvchilar va boshqalar. prefiks bilan yozish kerak bo'ladi std::, masalan, std::cino'rniga yozing cin( cindasturda keyinroq ko'rib chiqamiz). Buyruq sizga hech qanday yangi funksiyalardan foydalanishga ruxsat bermaydi (farqli o'laroq ), u faqat kiritilgan funksiyalarga kirish usulini o'zgartiradi.using namespace#include
Buyruqlar jiddiy C++ dasturlarida tavsiya etilmaydi , ammo kichikroq dasturlarimizda ular yaxshi.using namespace
Nom maydonlari nima ekanligini to'liq tushunishingiz shart bo'lmasa-da, faqat ushbu buyruqni eslab qoling yoki quyidagi eslatmani o'qing.
Eslatma
Barcha funktsiyalar, turlar, o'zgaruvchilar va boshqalar. (bundan keyin, soddaligi uchun men faqat funktsiyalar haqida gapiraman) C ++ da nomlar bo'shliqlari bo'ylab taqsimlanadi. Dasturda shunchaki e'lon qilishingiz mumkin bo'lgan barcha funktsiyalar ketadigan global nomlar maydoni mavjud; shuningdek, siz yangi funksiyalarni yozganingizda, ularni qandaydir nomlar maydoniga aniq qo'shishingiz mumkin. Bundan tashqari, agar sizning kodingiz nomlar maydonida bo'lsa, u faqat o'sha nomlar maydonidagi funktsiyalarga, shuningdek global nomlar maydonidagi funktsiyalarga (shuningdek, aslida ota-ona nomlaridagi funktsiyalarga) bevosita kirishi mumkin - chunki bo'shliqlar nomlarining tuzilishi daraxt). Agar siz boshqa nom maydonidan funktsiyani chaqirishingiz kerak bo'lsa, siz funktsiyadan oldin nom maydoni nomi va ikki nuqta qo'yishingiz kerak, masalan, funnom maydonidan otherfunksiya deb ataladi other::fun.
Bularning barchasi python tilidagiga o'xshaydi, masalan, yozsangiz, kvadrat ildiz funktsiyasini oddiy deb atay olmaysiz , lekin yozishingiz kerak .import mathsqrtmath.sqrt
Bu juda oddiy maqsad bilan amalga oshirildi: har qanday dasturlash tili uchun juda ko'p sonli kutubxonalar mavjud va har bir kutubxonada juda ko'p funktsiyalar mavjud. Albatta, turli kutubxonalar bir xil nomdagi funktsiyalarga ega bo'lishi mumkin, masalan, fayl kutubxonasi faylni openochish funktsiyasiga ega bo'lishi mumkin va tarmoq kutubxonasi open, masalan, ba'zi saytlarga ulanishni ochish funktsiyasiga ega bo'lishi mumkin.
Shunga ko'ra, agar sizning dasturingiz ushbu kutubxonalarning ikkalasi bilan ishlashi kerak bo'lsa va siz dastur kodini kiritsangiz open, kompilyator sizga qaysi funktsiyalar kerakligini tushunmasligi mumkin. Ushbu muammoni hal qilish uchun har bir kutubxonaning kodi o'z nom maydoniga joylashtiriladi va keyin nomlar maydonini aniq ko'rsatib, kompilyatorga qaysi funktsiya kerakligini aytishingiz mumkin.
Xususan, C++ standart kutubxonasidan deyarli barcha funksiyalar (turli qo‘shimcha kutubxonalardan emas, ya’ni har qanday kompilyatorga kiritilgan funksiyalar) std. Shunga ko'ra, agar siz yozgan bo'lsangiz , u holda siz klaviatura va ekran bilan ishlash qobiliyatini yoqdingiz, ammo tegishli funktsiyalar va o'zgaruvchilarga , masalan, orqali kirish kerak .#include std::std::cin
Boshqa tomondan, konstruktsiya nomlar maydoni nomini aniq ko'rsatmasdan, ko'rsatilgan nomlar maydonidagi funktsiyalardan foydalanishga imkon beradi. Xususan, yozish orqali siz standart funktsiyalardan prefikssiz foydalanishingiz mumkin .using namespaceusing namespace std;std::
Jiddiy dasturlarda konstruksiyadan foydalanish tavsiya etilmaydi - chunki u bir xil funktsiya nomlari muammolarini qaytaradi, ular uchun nomlar bo'shliqlari endigina ixtiro qilingan. Ammo bizning kichik dasturlarimizda siz funktsiya nomlarida chalkashliklarga duch kelishingiz dargumon, shuning uchun siz odatda yozishingiz mumkin. (Muammolar mavjud bo'lsa-da; masalan, esimda, ba'zi kompilyatorlar funksiyasiga ega . Agar siz yozsangiz , unda siz o'zgaruvchini nomlay olmaysiz . Lekin bular faqat alohida kompilyatorlar kabi ko'rinadi va bizning dasturlarimizda bunday hollarda o'zgaruvchining nomini o'zgartirish osonroq.)using namespaceusing namespace std;std::y1using namespace std;y1
Shuni ham ta'kidlash joizki, boshqa ko'pgina tillarda (aslida modul haqida aniq tushuncha mavjud bo'lsa ), nom maydonlari va modullar bir xil, modul nomi va nom maydoni bir xil va siz modul va nom maydonini bir xil buyruq bilan o'z ichiga oladi (yoki kiritmaydi). Masalan, pythonda siz yozishingiz mumkin , keyin yozishingiz mumkin yoki yozishingiz va keyin shunchaki yozishingiz mumkin ; shu ma'noda , ning qandaydir analogidir va bilan birlashtirilgan analogidir . Va shuning uchun boshqa ko'plab dasturlash tillarida nomlar maydonining alohida tushunchasi oddiygina mavjud emas; nom maydonlari faqat modullardir.import mathmath.sqrtfrom math import *sqrtimport math#includefrom math import *#includeusing namespace
Va C++ da bir-biridan mustaqil bo'lgan ikkita tushuncha mavjud: nomlar maydoni va sarlavha fayllari va ular qandaydir tarzda bog'lanishi shart emas. Turli nomlar bo'shliqlarining funktsiyalari bitta sarlavha faylida aniqlanishi mumkin (garchi bu odatiy bo'lmasa-da) va aksincha, bitta nom maydonining funktsiyalari ko'plab sarlavha fayllari bo'ylab tarqalishi mumkin va keyin ular alohida kiritilishi kerak #include. Bundan tashqari, hatto C++ 20 modullari ham boshqa tillardagi kabi bilvosita yangi nom maydonlarini yaratmaydi - hatto modulli C++ 20 da ham nomlar maydoni avvalgidek ishlatiladi.
"Nomlar maydoni" atamasining o'zi g'alati tuyulishi mumkin va aslida bu, albatta, inglizcha nomlar maydonidan olingan kuzatuv qog'ozi, lekin aslida ma'no aniq: bu qandaydir "bo'sh joy", "nomlar" mavjud bo'lgan maydon. jonli - funktsiyalar, o'zgaruvchilar, turlar va boshqalar nomlari. Shunga ko'ra, C ++ da joylashgan barcha nomlar bu bo'shliqlar, bir-biri bilan kesishmaydigan maydonlar bo'ylab taqsimlanadi. Va har bir bunday bo'shliq "nomlar maydoni" deb ataladi.
Keyingi qator (ish bo'yicha ko'proq matn va kamroq eslatmalar davom etadi):
int main() {
mainBu qator argumentlarni qabul qilmaydigan va turdagi qiymatni qaytaradigan funktsiyani belgilaydi int(bu butun sonlar uchun eng standart ma'lumotlar turi). Bu paskalda yoki pythonda yozishning ekvivalenti (faqat pythondan farqli o'laroq, C++ da siz qaytariladigan qiymat qanday turdagi bo'lishini aniq ko'rsatishingiz kerak, bizning holatlarimizda bu ).function main:integerdef main():int
C++ tilida python, pascal va boshqa koʻpgina tillardan farqli oʻlaroq, hech qanday funksiyadan tashqarida yozilgan “asosiy dastur kodi” tushunchasi mavjud emas. Har qanday (yaxshi, deyarli har qanday) bajariladigan C++ kodi qandaydir funksiyaning bir qismi bo'lishi kerak va bu erda eng asosiy dastur kodi - u maxsus nomli funktsiya ichida yozilishi kerak main. Boshqacha qilib aytganda, C++ dasturi ishga tushganda, funksiya chaqiriladi main. U har qanday C++ dasturida bo'lishi kerak, u aynan bitta bo'lishi kerak va u yuqorida yozilganidek hech qanday parametrlarni olmasligi kerak (garchi aslida u ma'lum parametrlarni qabul qilishi mumkin bo'lgan variant mavjud - ular buyruq qatori parametrlarini o'tkazish uchun ishlatiladi , - lekin sizga bu hali kerak emas) va qaytishingiz kerak int(bu haqda quyida gaplashamiz).
Umuman olganda, biz quyida funktsiyalar sintaksisi haqida ham gaplashamiz, hozircha asosiy dastur kodi shunday qatordan boshlanishi kerakligini yodda tuting.
Bu yerda ochiladigan jingalak qavs funksiya kodi boshlanganligini bildiradi. U mos keladigan yopilish jingalak qavsgacha davom etadi ( paskalda begin/ o'xshash end; pythondan farqli o'laroq, C++ da kompilyator uchun chekinish muhim emas).
int a, b;
Bu satr ikki turdagi o'zgaruvchilarni e'lon qiladi int, o'zgaruvchilar nomlanadi ava b. Sizga shuni eslatib o'tamanki, intbu butun sonlar uchun eng ko'p qo'llaniladigan ma'lumotlar turi, biz quyida mavjud ma'lumotlar turlari haqida ko'proq gaplashamiz. Shuni ta'kidlash kerakki, bunday yozuv bilan o'zgaruvchilarda aniq nima yozilishiga kafolat yo'q avab. Ular har qanday qiymatlarni o'z ichiga olishi mumkin; xususan, u erda nollarning yozilishi hech qanday kafolatlanmagan. Ba'zi kompilyatorlar barcha o'zgaruvchilarni nolga qo'yadi, ammo boshqa kompilyatorlar buni qilmaydi. Darhaqiqat, ba'zi hollarda ishga tushirilmagan o'zgaruvchidan foydalanish aniqlanmagan xatti-harakatlardir (pastga qarang), ya'ni. bu holda dastur umuman o'zini xohlaganicha tutishi mumkin. Shuning uchun, har doim, agar siz uchun o'zgaruvchilarni ishga tushirish muhim bo'lsa, ular nimaga teng bo'lishi kerakligini aniq ko'rsating (quyida batafsilroq). Bizning holatda, bu hali muhim emas, chunki biz bu o'zgaruvchilarni klaviaturadan kiritamiz.
cin >> a >> b;
Biz o'zgaruvchilarni klaviaturadan kiritamiz a. bJuda noodatiy sintaksisga e'tibor bering. O'zgaruvchi cin- bu klaviaturadan kirish oqimi deb ataladigan narsa (konsol kiritishidan), ikkita "ko'proq" belgisi ma'lumotlar harakati yo'nalishini ko'rsatadigan o'qga o'xshaydi: cindan avagacha b. Shunday qilib, siz o'zgaruvchilarning istalgan sonini kiritishingiz mumkin, shunchaki qo'shimcha >>va o'zgaruvchining nomini qo'shing.
C++ tilida klaviaturadan kiritish shunday tartibga solinganki, birinchi taxmin sifatida raqamlar bo'sh joy yoki yangi qatorlar bilan ajratilishi muhim emas. Yozuv, yuqorida yozilganidek, klaviaturadan raqamni sanab, birinchi qo'shimcha bo'shliqlarni yoki agar mavjud bo'lsa, qatorlarni o'tkazib yuboradi, so'ngra boshqa raqamni sanab, yana bo'sh joylarni va uning oldidagi qatorlarni o'tkazib yuboradi.
Eslatma
Bu “oqimli” kiritish, albatta, Python’ning orqali kiritishiga qaraganda ancha qulayroqdir input(), bu yerda har safar qaysi qatorga qancha raqam kiritilganligini o‘ylab ko‘rishingiz kerak. Python-da oqimli kirish aniq yo'qligi ajablanarli bo'lishi mumkin, ammo bu ajablanarli emas: haqiqiy hayotda oqimli kiritish kamdan-kam hollarda kerak bo'ladi; Bunday vaziyatlarda sizda faqat bo'shliqlar yoki yangi qatorlar bilan ajratilgan raqamlar mavjud, ammo haqiqiy hayotda ular juda kam uchraydi.
int s = a + b;
Biz yangi o'zgaruvchini, sshuningdek, turini yaratamiz intva darhol raqamlar yig'indisini ava unga yozamiz b. O'zgaruvchini yaratishda unga kerakli qiymatni shu tarzda darhol yozishingiz mumkin. Belgining o'ng tomonida, =albatta, har qanday ibora bo'lishi mumkin, shu jumladan faqat raqam, agar bizga qanday raqam kerakligini darhol bilsak (ya'ni, siz, masalan, o'zgaruvchiga nol yozmoqchi bo'lsak, yozishingiz mumkin) .int cnt = 0;
Umuman olganda, C++ da barcha o'zgaruvchilar yaratilgandan so'ng darhol ishga tushirilishi tavsiya etiladi, klaviaturadan kiritish kabi maxsus holatlar bundan mustasno. Xususan, shuning uchun o'zgaruvchilarni faqat ularga kerak bo'lgan paytda yaratish tavsiya etiladi. Paskaldan ko'chib o'tadigan odamlar barcha kerakli o'zgaruvchilarni funksiya boshida bir vaqtning o'zida e'lon qilishni yaxshi ko'radilar - bu shart emas. Har bir o'zgaruvchini faqat kerak bo'lganda e'lon qiling; masalan, bu erda biz o'zgaruvchini sfaqat kerak bo'lganda e'lon qilamiz. Shu bilan birga, ko'pincha bunday vaziyatlarda biz darhol o'zgaruvchiga mazmunli qiymat yozishimiz mumkin va agar biz funktsiyaning boshida e'lon qilgan bo'lsak, unda bu imkonsiz bo'lar edi (bizning misolimizda, agar biz o'zgaruvchini sboshida e'lon qilgan bo'lsak) funktsiya haqida, keyin biz avval u erda hech qanday mazmunli narsa yoza olmadik.)
cout << s << endl;
Javobni ekranda ko'rsatamiz. Bu erda coutekranga chiqish uchun mas'ul bo'lgan o'zgaruvchi (konsol chiqishi) va bu safar ma'lumotlar harakati yo'nalishini aniq ko'rsatuvchi kamroq belgilar ishlatiladi: sdan cout. Keyinchalik , biz chiqaramiz endl- bu maxsus o'zgaruvchi bo'lib, uning chiqishi cout chiziqning uzilishiga olib keladi. (Aslida, men quyida yozganimdek, dan foydalanmaslik kerak endl, bu juda sekin. Lekin boshlanuvchilar uchun va umuman, chiqish ma'lumotlari miqdori unchalik katta bo'lmagan dasturlarda endlyozish juda mumkin.) (Men ham Shuni esda tutingki, ushbu dasturda chiziq tasmasi haqiqatan ham kerak emas, chunki biz baribir boshqa ma'lumotlarni chiqarmoqchi emasmiz. Agar boshqa biror narsani chiqarishimiz kerak bo'lsa, ha, chiziq tasmasi mantiqiy bo'lishi mumkin, aks holda bu haqiqatan ham kerak emas.)
return 0;
Boshqa tillarda bo'lgani kabi, buyruq returnfunktsiyani tugatish va belgilangan qiymatni qo'ng'iroq saytiga qaytarishni anglatadi. Lekin bu erda biz asosiy funktsiyadamiz, mainshuning uchun bu buyruq dasturni tugatadi.
Va bu erda nol butun dasturning qaytish kodi (chiqish kodi) bo'ladi. Umuman olganda, barcha operatsion tizimlarda umumiy qabul qilingan konventsiya mavjud bo'lib, har bir ishga tushirilgan dastur operatsion tizimga maxsus raqamni - qaytarish kodi deb ataladi - bu dastur muvaffaqiyatli tugallangan yoki bajarilmaganligini ko'rsatadi, shuning uchun ushbu dasturni kim ishga tushirgan bo'lsa ( OSning o'zi yoki qanday - yoki boshqa dastur) qo'ng'iroq muvaffaqiyatli bo'lganligini tushunishi mumkin. Bundan tashqari, umumiy konventsiyaga ko'ra, nolga teng bo'lgan qaytarish kodi dasturning muvaffaqiyatli yakunlanganligini anglatadi, nolga teng bo'lmagan kod esa qandaydir xatolik yuz berganligini anglatadi.
Masalan, Code::Blocks dastur oynasida u tugagandan so'ng qaytarish kodini - chiqish kodini yozadi. Xuddi shunday, test tizimlari dasturingizning qaytish kodini tahlil qiladi va agar u nolga teng bo'lmasa, test natijasini "ish vaqti xatosi" yoki "nol bo'lmagan qaytarish kodi" ga o'rnating (ular bir xil).
Mana C++ returnfunksiyasidagi buyruq bo'lib main, dasturingiz qaysi qaytarish kodini qaytarishi kerakligini belgilaydi. Biz yozamiz : bu dastur muvaffaqiyatli yakunlanganligini anglatadi. Masalan, biz yozishimiz mumkin edi, keyin dasturni boshqargan kishi nimadir noto'g'ri bo'lganini tushunishi mumkin edi. Xususan, agar test tizimidagi ba'zi testlarda siz bilan yakunlansangiz, "ish vaqti xatosi" yoki "nol bo'lmagan qaytarish kodi" kabi test natijasini olasiz.return 0return 1mainreturn 1
Boshqa dasturlash tillarida, albatta, qaytarish kodi tushunchasi ham mavjud, masalan, faqat python va paskal tillarida, agar bajarilish asosiy kodning oxiriga yetgan bo'lsa, qaytarish kodi shunday bo'ladi, deb ishoniladi. nol. Ammo, ehtimol, siz qaytarish kodini aniq ko'rsatish zaruratini qondirdingiz - masalan, qurilishda sys.exit(0)nol faqat dasturni tugatish kerak bo'lgan qaytarish kodidir.
Va aynan shuning uchun funktsiya maintype ni qaytarishi kerak int, shuning uchun funktsiya sarlavhasi ga o'xshaydi .int main() {
Eslatma
Aslida, endi mainsiz funktsiyada maxsus yozishingiz shart emas - keyin u nolga qaytadi. (Ammo funktsiya hali ham sifatida emas, deb belgilanishi kerak .) Lekin har doim ni aniq yozish yaxshidir , xususan, agar siz aniq yozmagan bo'lsangiz, ko'plab eski kompilyatorlar tasodifiy qaytarish kodini yaratishi mumkin . Qaytgan boshqa funktsiyalarda yozmaslik mumkin emas .return 0intvoidreturn 0return 0intreturn
}
Va nihoyat, dasturning oxirgi qatori funksiya kodi maintugaganligini bildiruvchi yopilgan jingalak qavsdir. Bu Paskalga o'xshaydi end.

Download 32.6 Kb.

Do'stlaringiz bilan baham:
  1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling