Məzmuna keç
Educora
Başlanğıc15 dəq2 / 8

Dəyişənlər, tiplər və operatorlar

C-də dəyişən elan etməyi, int, float, double və char tiplərini, sizeof operatorunu, sabitləri, tam bölməni, qalığı və tip çevrilməsini öyrən.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Müxtəlif tipli dəyişənlər elan etmək və onlara qiymət mənimsətmək
  • sizeof ilə tipin yaddaşda neçə bayt tutduğunu öyrənmək
  • const və #define ilə sabitlər yaratmaq
  • Tam bölmə, % qalığı və tip çevrilməsi ilə düzgün hesablamaq

Market kassası alınan malların sayını, qiymətini və ümumi məbləği yadda saxlamalıdır. Proqramlar da məlumatı dəyişənlərdə saxlayır. Amma C dili sərtdir: hər dəyişən üçün əvvəlcədən onun tipini — yəni orada tam ədəd, kəsr ədəd, yoxsa simvol saxlanacağını bildirmək lazımdır. Bunun müqabilində C yaddaşdan çox qənaətlə istifadə edir və çox sürətlə işləyir.

Dəyişənlər və əsas tiplər

Tərif
Dəyişən

Yaddaşda adı və tipi olan yer. Tip orada hansı qiymətlərin saxlana biləcəyini və neçə bayt yer ayrılacağını müəyyən edir.

Dəyişən belə elan olunur: əvvəl tip, sonra ad, istəyə görə = işarəsi ilə başlanğıc qiymət və sonda ;. Adlar hərflərdən, rəqəmlərdən və _ simvolundan ibarət ola bilər, amma rəqəmlə başlaya bilməz. age və Age iki fərqli dəyişəndir. Elandan sonra dəyişənə yeni qiymət mənimsətmək olar — bu zaman tip yenidən yazılmır.

C
#include <stdio.h>

int main(void) {
    int apples = 7;
    double price = 0.85;
    char size = 'L';
    printf("Apples: %d\n", apples);
    printf("Price: %.2f AZN\n", price);
    printf("Total: %.2f AZN\n", apples * price);
    printf("Size: %c\n", size);
    apples = apples + 3;
    printf("Now: %d apples\n", apples);
    return 0;
}
Gözlənilən nəticə
Apples: 7
Price: 0.85 AZN
Total: 5.95 AZN
Size: L
Now: 10 apples
TipNə saxlayırAdi ölçüprintf
inttam ədəd, təxminən −2,1 milyarddan +2,1 milyarda qədər4 bayt%d
floatkəsr ədəd, təxminən 6–7 dəqiq rəqəm4 bayt%f
doublekəsr ədəd, təxminən 15–16 dəqiq rəqəm8 bayt%f
charbir simvol (əslində kiçik tam ədəd)1 bayt%c
Ölçülər müasir kompüterlər üçün adi qiymətlərdir; standart yalnız char-ın həmişə 1 bayt olduğuna zəmanət verir.

Kəsr ədədlər üçün adətən double seçilir: o, float-dan iki dəfə çox yer tutur, amma xeyli dəqiqdir. Tipin neçə bayt tutduğunu sizeof operatoru göstərir. Onun nəticəsi xüsusi size_t tipindədir və %zu ilə çap olunur.

C
#include <stdio.h>

int main(void) {
    printf("char:   %zu byte\n", sizeof(char));
    printf("int:    %zu bytes\n", sizeof(int));
    printf("float:  %zu bytes\n", sizeof(float));
    printf("double: %zu bytes\n", sizeof(double));
    return 0;
}
Gözlənilən nəticə
char:   1 byte
int:    4 bytes
float:  4 bytes
double: 8 bytes
Adi 64 bitlik kompüterdə (Windows, Linux, macOS) nəticə belədir.
İnteraktiv
Simulyasiya yüklənir…
1 bayt = 8 bit. Bitləri dəyiş və 1 baytda 0-dan 255-ə qədər ədəd yaza bildiyini gör. 4 baytlıq int isə 32 bitdən ibarətdir.

char əslində kiçik tam ədəddir: kompüter hər simvolu kodu ilə saxlayır. ASCII cədvəlində 'A' hərfinin kodu 65, 'B'-nin kodu 66-dır. Ona görə simvolu %d ilə çap etsən, onun kodunu görəcəksən, simvola 1 əlavə etsən isə növbəti hərfi alacaqsan.

C
#include <stdio.h>

int main(void) {
    char letter = 'A';
    printf("%c has code %d\n", letter, letter);
    printf("Next letter: %c\n", letter + 1);
    return 0;
}
Gözlənilən nəticə
A has code 65
Next letter: B

Sabitlər

Bəzi qiymətlər proqram boyu dəyişməməlidir: π ədədi, maksimal bal, ƏDV dərəcəsi. Onları iki yolla sabit etmək olar. const açar sözü dəyişəni yalnız oxunan edir: ona yeni qiymət vermək istəsən, kompilyator xəta verəcək. #define isə preprosessor əmridir: kompilyasiyadan əvvəl mətndə adı sadəcə qiymətlə əvəz edir. Sabitlərin adlarını adətən böyük hərflərlə yazırlar.

C
#include <stdio.h>
#define MAX_SCORE 100

int main(void) {
    const double PI = 3.14159;
    double r = 2.0;
    int score = 87;
    printf("Circle area: %.2f\n", PI * r * r);
    printf("Missing points: %d\n", MAX_SCORE - score);
    return 0;
}
Gözlənilən nəticə
Circle area: 12.57
Missing points: 13
PI = 3.0; sətrini əlavə etsən, proqram kompilyasiya olunmayacaq.

Hesab operatorları və tam bölmə

C-də +, -, *, / və % operatorları var. Ən vacib incəlik: iki tam ədəd bölünəndə nəticə də tam olur — kəsr hissə sadəcə atılır, yuvarlaqlaşdırılmır. % operatoru isə bölmənin qalığını verir və yalnız tam ədədlərlə işləyir. Operandlardan ən azı biri kəsr ədəddirsə, bölmə adi qaydada aparılır.

C
#include <stdio.h>

int main(void) {
    int a = 17, b = 5;
    printf("%d + %d = %d\n", a, b, a + b);
    printf("%d - %d = %d\n", a, b, a - b);
    printf("%d * %d = %d\n", a, b, a * b);
    printf("%d / %d = %d\n", a, b, a / b);
    printf("%d %% %d = %d\n", a, b, a % b);
    printf("17.0 / 5 = %f\n", 17.0 / 5);
    return 0;
}
Gözlənilən nəticə
17 + 5 = 22
17 - 5 = 12
17 * 5 = 85
17 / 5 = 3
17 % 5 = 2
17.0 / 5 = 3.400000

Tip çevrilməsi və qısa operatorlar

Tutaq ki, Murad 7 manatı 2 dosta bölmək istəyir. 7 / 2 nəticəni 3 verəcək. Düzgün cavab üçün qiymətlərdən birini tip çevrilməsi (cast) ilə double-a çevirmək lazımdır: (double) 7 / 2. Diqqət: (double) (7 / 2) yazsan, əvvəl tam bölmə aparılacaq və 3.0 alınacaq. Əks istiqamətdə (int) 9.99 kəsr hissəni atır və 9 verir.

C
#include <stdio.h>

int main(void) {
    int total = 7, people = 2;
    printf("%d\n", total / people);
    printf("%.1f\n", (double) total / people);
    printf("%.1f\n", (double) (total / people));
    printf("%d\n", (int) 9.99);
    int count = 10;
    count += 5;
    count++;
    printf("%d\n", count);
    return 0;
}
Gözlənilən nəticə
3
3.5
3.0
9
16
count += 5 — count = count + 5 deməkdir, count++ isə dəyişəni 1 artırır.

Əsas fikirlər

  • Hər dəyişənin tipi var: int tam ədəd, double və float kəsr ədəd, char bir simvol saxlayır.
  • sizeof tipin baytla ölçüsünü verir və %zu ilə çap olunur; sizeof(char) həmişə 1-dir.
  • const dəyişəni dəyişməz edir, #define isə kompilyasiyadan əvvəl adı qiymətlə əvəz edir.
  • İki tam ədədin bölünməsi tam nəticə verir: 17 / 5 = 3, 17 % 5 = 2.
  • Kəsr nəticə üçün bölmədən əvvəl cast et: (double) a / b.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
int a = 17, b = 5; olarsa, a / b nəyə bərabərdir?