3-bo‘lim

Dastur tuzilishi va sintaksis

Sarlavha fayllari, main funksiyasi, blok va buyruq tushunchasi, izohlar, kalit so'zlar va nom qo'yish qoidalari.

🕑 14 daqiqa o‘qish 📄 775 so‘z 👁 3 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Dasturning umumiy skeleti
  2. #include - sarlavha fayllari
  3. main funksiyasi
  4. Buyruq va blok
  5. Izohlar
  6. Bo'sh joy va formatlash
  7. C ning 32 ta kalit so'zi
  8. Nom qo'yish qoidalari
  9. Nom qo'yish uslubi
  10. To'liq misol
  11. Xulosa

C dasturi qat'iy tuzilishga ega. Bu bo'limda shu tuzilishning har bir qismini ko'rib chiqamiz.

Dasturning umumiy skeleti #

C faylining tartibi 1. Sarlavha fayllari #include <stdio.h> 2. Doimiylar va makroslar #define MAKS 100 3. Funksiya prototiplari int qoshish(int a, int b); 4. main funksiyasi int main(void) { ... } 5. Boshqa funksiyalar
Bu tartib majburiy emas, lekin barcha C dasturchilari shunday yozadi
C
#include <stdio.h>

#define MAKS_BAHO 100

int qoshish(int birinchi, int ikkinchi);

int main(void) {
    int natija = qoshish(7, 5);

    printf("Natija: %d\n", natija);
    printf("Maksimal baho: %d\n", MAKS_BAHO);

    return 0;
}

int qoshish(int birinchi, int ikkinchi) {
    return birinchi + ikkinchi;
}
Natija
Natija: 12
Maksimal baho: 100

#include - sarlavha fayllari #

C
#include <stdio.h>     /* tizim kutubxonasi - burchakli qavs */
#include "mening.h"    /* o'z faylingiz - qo'shtirnoq */
SarlavhaNima beradi
stdio.hprintf, scanf, fayl funksiyalari
stdlib.hmalloc, free, atoi, rand, exit
string.hstrlen, strcpy, strcmp
math.hsqrt, pow, sin, fabs
ctype.hisdigit, isalpha, toupper
time.htime, clock
#include aslida nima qiladi?

Preprotsessor shu qatorni butun faylning matni bilan almashtiradi. Ya'ni #include <stdio.h> yozganingizda, kompilyatsiyadan oldin sizning faylingiz boshiga stdio.h ning butun mazmuni ko'chiriladi.

Buni o'z ko'zingiz bilan ko'rishingiz mumkin:

Terminal
gcc -E salom.c | wc -l

Natija bir necha ming qator bo'ladi - siz yozgan 6 qator emas.

main funksiyasi #

Har bir C dasturida aynan bitta main bo'lishi shart.

C
int main(void) {
    /* dastur shu yerda ishlaydi */
    return 0;
}

Buyruq qatori argumentlarini qabul qiladigan shakli ham bor:

C
int main(int argc, char *argv[]) {
    /* argc - argumentlar soni, argv - ularning ro'yxati */
    return 0;
}
void main() deb yozmang

Eski kitoblarda void main() uchraydi. Bu standartga zid.

main doim int qaytarishi kerak - operatsion tizim shu qiymatga qarab dastur muvaffaqiyatli tugaganini biladi.

Buyruq va blok #

Buyruq (statement) - nuqtali vergul bilan tugaydigan bitta amal:

C
int yosh = 25;
printf("Salom\n");
yosh = yosh + 1;

Blok - jingalak qavs ichidagi buyruqlar guruhi:

C
{
    int a = 5;
    int b = 10;
    printf("%d\n", a + b);
}
C
#include <stdio.h>

int main(void) {
    int tashqi = 1;

    {
        int ichki = 2;          /* faqat shu blok ichida yashaydi */
        printf("Ichkarida: %d %d\n", tashqi, ichki);
    }

    /* bu yerda "ichki" endi mavjud emas */
    printf("Tashqarida: %d\n", tashqi);

    return 0;
}
Natija
Ichkarida: 1 2
Tashqarida: 1

Izohlar #

C
/* Bu ko'p qatorli izoh.
   U bir necha qatorga cho'zilishi mumkin. */

// Bu bir qatorli izoh (C99 dan beri)

int yosh = 25;   // qator oxiridagi izoh
Yaxshi izoh nima yozadi?

Yomon izoh nima qilinayotganini takrorlaydi:

C
i = i + 1;   // i ni bittaga oshiramiz

Yaxshi izoh nima uchun qilinayotganini tushuntiradi:

C
i = i + 1;   // sarlavha qatorini o'tkazib yuboramiz

Kod nima qilishini o'zi aytadi. Izoh esa sabab va qarorlarni yozadi.

Bo'sh joy va formatlash #

C uchun bo'sh joy va yangi qatorlar ahamiyatsiz. Bu ikkalasi bir xil:

C
int main(void){int a=5;printf("%d",a);return 0;}
C
int main(void) {
    int a = 5;
    printf("%d", a);
    return 0;
}

Lekin ikkinchisini odam o'qiy oladi. Doim shunday yozing.

Qavs uslublari

Ikkita keng tarqalgan uslub bor:

C
/* K&R uslubi - ochuvchi qavs shu qatorda */
int main(void) {
    return 0;
}

/* Allman uslubi - ochuvchi qavs yangi qatorda */
int main(void)
{
    return 0;
}

Ikkalasi ham to'g'ri. Muhimi - bitta uslubni tanlab, unga sodiq qolish. Ushbu darslikda K&R uslubi ishlatiladi.

C ning 32 ta kalit so'zi #

autobreakcasechar
constcontinuedefaultdo
doubleelseenumextern
floatforgotoif
intlongregisterreturn
shortsignedsizeofstatic
structswitchtypedefunion
unsignedvoidvolatilewhile
Butun til - 32 ta so'z

Bu ro'yxatni ko'rib chiqing. Bir necha soatda hammasini yodlash mumkin.

C ning kuchi kalit so'zlar sonida emas - ularni qanday birlashtirishingizda. Shuning uchun til kichik bo'lsa ham, unda operatsion tizim yozish mumkin.

Nom qo'yish qoidalari #

O'zgaruvchi va funksiya nomi:

  • harf yoki pastki chiziq bilan boshlanadi (_);
  • ichida harf, raqam va pastki chiziq bo'lishi mumkin;
  • raqam bilan boshlanmaydi;
  • kalit so'z bo'lishi mumkin emas;
  • katta va kichik harf farqlanadi.
C
int yosh;          /* to'g'ri */
int _hisob;        /* to'g'ri */
int talaba_soni;   /* to'g'ri */
int Yosh;          /* "yosh" dan boshqa o'zgaruvchi! */

/* int 2chi;       XATO: raqam bilan boshlanadi */
/* int talaba soni; XATO: ichida probel bor */
/* int return;     XATO: kalit so'z */
C
#include <stdio.h>

int main(void) {
    int yosh = 25;
    int Yosh = 40;

    printf("yosh = %d, Yosh = %d\n", yosh, Yosh);
    return 0;
}
Natija
yosh = 25, Yosh = 40
Registr farqlanadi

yosh, Yosh va YOSH - bu uchta boshqa-boshqa o'zgaruvchi.

Bu eng ko'p uchraydigan boshlang'ich xatolardan biri. Kompilyator sizga «e'lon qilinmagan o'zgaruvchi» deydi va siz uni ekranda ko'rib turasiz - lekin harflar registri boshqacha.

Nom qo'yish uslubi #

UslubMisolQayerda ishlatiladi
snake_casetalaba_soniO'zgaruvchi va funksiya - C da odatiy
UPPER_CASEMAKS_BAHODoimiylar va makroslar
PascalCaseTalabaMalumotiStruktura turlari
C
#define MAKS_TALABA 50          /* doimiy */

int talabalar_soni = 0;         /* o'zgaruvchi */

int ortacha_hisobla(void);      /* funksiya */

To'liq misol #

C
#include <stdio.h>

#define QQS_FOIZI 12

/* Narxga qo'shilgan qiymat solig'ini qo'shadi. */
double soliq_bilan(double narx);

int main(void) {
    double mahsulot_narxi = 250000.0;
    double yakuniy_narx = soliq_bilan(mahsulot_narxi);

    printf("Narx:        %.2f so'm\n", mahsulot_narxi);
    printf("QQS (%d%%):   %.2f so'm\n", QQS_FOIZI, yakuniy_narx - mahsulot_narxi);
    printf("Jami:        %.2f so'm\n", yakuniy_narx);

    return 0;
}

double soliq_bilan(double narx) {
    return narx + narx * QQS_FOIZI / 100.0;
}
Natija
Narx:        250000.00 so'm
QQS (12%):   30000.00 so'm
Jami:        280000.00 so'm
%% nima?

printf da foiz belgisini chiqarish uchun uni ikki marta yozish kerak: %%. Chunki bitta % format belgisining boshlanishi hisoblanadi.

Amaliy topshiriq
  1. Yuqoridagi QQS dasturini yozib ishga tushiring.
  2. QQS_FOIZI ni 15 ga o'zgartiring va natijani ko'ring.
  3. Ikkita o'zgaruvchi yarating: narx va Narx. Ular boshqa-boshqa ekanini isbotlang.
  4. Blok ichida o'zgaruvchi yaratib, blokdan tashqarida ishlatishga urinib ko'ring.
  5. Kompilyator qanday xato berishini yozib oling.
  6. gcc -E bilan preprotsessor natijasini ko'ring.
  7. Kodni bitta qatorga siqib yozing va u ishlashini tekshiring.
  8. So'ng uni chiroyli formatlab qayta yozing.
  9. Har bir kalit so'zni bir marta o'qib chiqing - qaysilari tanish?
  10. Chegirma foizini hisoblaydigan funksiya qo'shing.

Xulosa #

  • C fayli tartibi: sarlavhalar → makroslar → prototiplar → main → funksiyalar.
  • #include - preprotsessor buyrug'i, u faylning butun matnini ko'chiradi.
  • Har bir dasturda aynan bitta main funksiyasi bo'ladi va u int qaytaradi.
  • Buyruq nuqtali vergul bilan tugaydi, blok jingalak qavs ichida.
  • Blok ichida yaratilgan o'zgaruvchi faqat shu blokda yashaydi.
  • Bo'sh joy ahamiyatsiz, lekin formatlash o'quvchi uchun muhim.
  • Tilda atigi 32 ta kalit so'z bor.
  • Nomlarda katta va kichik harf farqlanadi.
  • C da odatiy uslub: o'zgaruvchilar uchun snake_case, doimiylar uchun UPPER_CASE.

Keyingi bo'limda o'zgaruvchilar va ma'lumot turlarini o'rganamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.