3-bo‘lim
Dastur tuzilishi va sintaksis
Sarlavha fayllari, main funksiyasi, blok va buyruq tushunchasi, izohlar, kalit so'zlar va nom qo'yish qoidalari.
Ushbu bo‘lim mundarijasi
C dasturi qat'iy tuzilishga ega. Bu bo'limda shu tuzilishning har bir qismini ko'rib chiqamiz.
Dasturning umumiy skeleti #
#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: 12
Maksimal baho: 100
#include - sarlavha fayllari #
#include <stdio.h> /* tizim kutubxonasi - burchakli qavs */
#include "mening.h" /* o'z faylingiz - qo'shtirnoq */
| Sarlavha | Nima beradi |
|---|---|
stdio.h | printf, scanf, fayl funksiyalari |
stdlib.h | malloc, free, atoi, rand, exit |
string.h | strlen, strcpy, strcmp |
math.h | sqrt, pow, sin, fabs |
ctype.h | isdigit, isalpha, toupper |
time.h | time, 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:
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.
int main(void) {
/* dastur shu yerda ishlaydi */
return 0;
}
Buyruq qatori argumentlarini qabul qiladigan shakli ham bor:
int main(int argc, char *argv[]) {
/* argc - argumentlar soni, argv - ularning ro'yxati */
return 0;
}
void main() deb yozmangEski 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:
int yosh = 25;
printf("Salom\n");
yosh = yosh + 1;
Blok - jingalak qavs ichidagi buyruqlar guruhi:
{
int a = 5;
int b = 10;
printf("%d\n", a + b);
}
#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;
}
Ichkarida: 1 2
Tashqarida: 1
Izohlar #
/* 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
Yomon izoh nima qilinayotganini takrorlaydi:
i = i + 1; // i ni bittaga oshiramiz
Yaxshi izoh nima uchun qilinayotganini tushuntiradi:
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:
int main(void){int a=5;printf("%d",a);return 0;}
int main(void) {
int a = 5;
printf("%d", a);
return 0;
}
Lekin ikkinchisini odam o'qiy oladi. Doim shunday yozing.
Ikkita keng tarqalgan uslub bor:
/* 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 #
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
short | signed | sizeof | static |
struct | switch | typedef | union |
unsigned | void | volatile | while |
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.
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 */
#include <stdio.h>
int main(void) {
int yosh = 25;
int Yosh = 40;
printf("yosh = %d, Yosh = %d\n", yosh, Yosh);
return 0;
}
yosh = 25, Yosh = 40
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 #
| Uslub | Misol | Qayerda ishlatiladi |
|---|---|---|
snake_case | talaba_soni | O'zgaruvchi va funksiya - C da odatiy |
UPPER_CASE | MAKS_BAHO | Doimiylar va makroslar |
PascalCase | TalabaMalumoti | Struktura turlari |
#define MAKS_TALABA 50 /* doimiy */
int talabalar_soni = 0; /* o'zgaruvchi */
int ortacha_hisobla(void); /* funksiya */
To'liq misol #
#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;
}
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.
- Yuqoridagi QQS dasturini yozib ishga tushiring.
QQS_FOIZIni 15 ga o'zgartiring va natijani ko'ring.- Ikkita o'zgaruvchi yarating:
narxvaNarx. Ular boshqa-boshqa ekanini isbotlang. - Blok ichida o'zgaruvchi yaratib, blokdan tashqarida ishlatishga urinib ko'ring.
- Kompilyator qanday xato berishini yozib oling.
gcc -Ebilan preprotsessor natijasini ko'ring.- Kodni bitta qatorga siqib yozing va u ishlashini tekshiring.
- So'ng uni chiroyli formatlab qayta yozing.
- Har bir kalit so'zni bir marta o'qib chiqing - qaysilari tanish?
- 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
mainfunksiyasi bo'ladi va uintqaytaradi. - 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 uchunUPPER_CASE.
Keyingi bo'limda o'zgaruvchilar va ma'lumot turlarini o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.