- Müxtəlif tipli dəyişənlər elan etmək və onlara qiymət mənimsətmək
sizeofilə tipin yaddaşda neçə bayt tutduğunu öyrənməkconstvə#defineilə 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
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.
#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;
}Apples: 7 Price: 0.85 AZN Total: 5.95 AZN Size: L Now: 10 apples
| Tip | Nə saxlayır | Adi ölçü | printf |
|---|---|---|---|
int | tam ədəd, təxminən −2,1 milyarddan +2,1 milyarda qədər | 4 bayt | %d |
float | kəsr ədəd, təxminən 6–7 dəqiq rəqəm | 4 bayt | %f |
double | kəsr ədəd, təxminən 15–16 dəqiq rəqəm | 8 bayt | %f |
char | bir simvol (əslində kiçik tam ədəd) | 1 bayt | %c |
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.
#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;
}char: 1 byte int: 4 bytes float: 4 bytes double: 8 bytes
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.
#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;
}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.
#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;
}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.
#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;
}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.
#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;
}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:
inttam ədəd,doublevəfloatkəsr ədəd,charbir simvol saxlayır. sizeoftipin baytla ölçüsünü verir və%zuilə çap olunur;sizeof(char)həmişə 1-dir.constdəyişəni dəyişməz edir,#defineisə 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.
int a = 17, b = 5; olarsa, a / b nəyə bərabərdir?