Bu sözlərin hamısı açar söz olduğundan kiçik hərf ilə yazılmalıdır.
Elan nümunələri:
int x;
unsigned long int a;
double MFCS;
signed short total
Tip ifadə edən açar sözlərin yazılmasından sonra eyni tipə malik birdən çox dəyişənin elanı zamanı adların arasına vergül qoyulur. Elan etmə yenə nöqtəli vergül ilə bitməlidir. Məsələn, unsigned char ch1, ch2, ch3, ch4;
float FL1, Fl2;
unsigned total, subtotal;
Fərqli tiplərlə bağlı elanlar vergüllərlə bir-birindən ayrıla bilməz. Məsələn,
long x, int y; /* error */
signed və unsigned sözləri tip ifadə edən açar söz olmadan tək istifadə edilə bilərlər. Bu vəziyyətdə int növdən bir dəyişənin elanının edildiyi qəbul edilir:
signed x, y;
ilə
signed int x, y;
tamamilə eyni mənadadır.
Elan əməliyyatında, tip ifadə edən açar söz birdən çoxdursa, bunların yazılış sırası əhəmiyyətli deyil, amma oxunaqlıq baxımından əvvəl işarə ifadə edən açar sözün, sonra tip ifadə edən açar sözün istifadə edilməsi ənənə halını almışdır. Məsələn:
signed long int x;
signed int long x;
long signed int x;
long int signed x;
int long signed x;
int signed long x;
hamısı etibarlı elanlardır. Amma yuxarıdakı elanda birinci yazılış forması oxunaqlıq baxımından seçilməlidir.
C/C++ dilində, ümumiyyətlə, dəyişənlər 3 yerdə elan edilə bilər:
1. Blokların daxilində.
2. Bütün blokların xaricində.
3. Funksiyanın parametr dəyişəni kimi funksiya mötərizələrinin içərisində.
Funksiya mötərizələri içərisində edilən elanlar müəyyən sintaksis qaydasına uyğunlaşdırılır, bu elanlar funksiyalar mövzusunda araşdırılacaq.
Əgər C dilində elan blokların daxilində ediləcəksə, onda elan əməliyyatı blokların ilk əməliyyatı olmalıdır. Elanın mütləq əsas blokun əvvəlində edilməsi kimi bir zərurət yoxdur. Əgər iç-içə bloklar varsa, içdəki hər hansı bir blokun əvvəlində də (o blokun ilk əməliyyatı olmaq şərti ilə) elan edilə bilər. Məsələn:
{
int var1, var2;
char ch1, ch2, ch3;
var1 = 20;
float f; /* error */
}
Yuxarıdakı nümunədə var1, var2, ch1, ch2, ch3 dəyişənlərinin təyin olunma yerləri doğrudur. Ancaq f dəyişəni səhv yerdə elan olunmuşdur. Çünki elan əməliyyatından əvvəl başqa bir əməliyyat (mənimsətmə) iştirak etmişdir. Bu vəziyyət səhv meydana gəlməsinə səbəb olur. Həmin proqram fraqmenti aşağıdakı şəkildə yazılmalıdır:
{
int var1, var2;
char ch1, ch2, ch3;
var1 = 10;
{ float f; }
}
Bu halda artıq f dəyişəni də öz blokunun əvvəlində (ilk əməliyyat olaraq) təyin olunmuşdur.
C++ dilində isə blok içində elan edilən dəyişənlərin, blokların ilk əməliyyatları kimi elanı zəruri deyil. Yəni C++ da dəyişənlər blokların içində hər hansı bir yerdə elan edilə bilərlər.
C/C++ dilində qlobal dəyişənlər də mövcuddur. Əgər dəyişən main () xaricində elan olunubsa, o, qlobal dəyişən adlanır. Bu halda proqram buraxılarkən ona sıfır qiymət mənimsədilir.
3.4. Konstantlar (Sabitlər)
Proqramlaşdırma dillərində verilənlər sabitlər şəklində də göstərilə bilər. Onlar
const int intVal=17;
kimi elan olunurlar.
Misal 3.1. ifadəsini hesablayan proqram.
#include <stdio.h>
main()
{
const float b=3.14;
float x, a;
scanf(“%f”,&x);
a= b*x*x;
printf(“a = %f”, a);
return 0;
}
Simvol sabitlər apostrof daxilində yazılmış bir simvoldan ibarət olurlar: “ q”, “2”, “.” Və s.
Const char sym=”m”;
Xüsusi simvollar da simvol konstantlar bölməsinə daxildirlər.
Literal sabitlər (literallar) – bilavasitə proqramın mətnində daxil edilən qiymətlərdir. Belə ki, proqramın kompilyasiyasından sonra literalların qiymətini dəyişmək mümkün olmadığından onları sabitlər də adlandırırlar.
İstənilən sabitin emalı üçün kompilyator minimal diapazonlu qiymətə malik mümkün verilənlər tipindən istifadə edir, yəni verilən sabitin saxlanması üçün yaddaşın mümkün minimal həcmini tutur.
Məsələn, 1257 və ya -251 ədədlərinin daxil edilməsi üçün int tip istifadə olunacaq. Lakin əgər sabitə elan olunduğu qədər yaddaş ayrılması (faktiki olaraq tutduğu qədər yox) tələb olunursa, onun uzunluğunu aşkar olaraq göstərmək lazımdır. Bunun üçün L hərfi istifadə olunur. Ədəddən sonra U hərfinin göstərilməsi isə onun işarəsiz olduğunu göstərir. Double tip sabitlərə f və ya F hərflərinin əlavəsi zamanı onlar float tip, l və ya L hərfi əlavə olunduqda isə long double tip olurlar.
C/C++ dilində ədədi və simvol tiplərdən savayı sətir sabitləri də istifadə olunur.
Sətir sabitlər – dırnaq işarəsi daxilində yerləşən ASCII kodunun simvollarından ibarətdir.
Qeyd edək ki, C/C++ dilində əsasən aşağıdakı standart sabitlərdən istifadə olunur:
e ədədi | M_E |
π ədədi | M_Pİ |
π/2 ədədi | M_Pİ_2 |
π/4 ədədi | M_Pİ_4 |
lge | M_LOG10E |
ln2 | M_LN2 |
Fadələr
Ifadə - qiymətə malik olan proqram fraqmentidir: adətən, bu proqram buraxılan zaman hesablanmalı olan qiymətdir. Məsələn, > . Bu halda ifadə literallardan(ədədlərdən), operatorlardan (/ və +) və kiçik mötərizədən ibarətdir. Mürəkkəb ifadələrdə mötərizələr iç-içə ola bilərlər (bu o deməkdir ki, bir alt ifadə digər altifadənin daxilində yerləşir). Məsələn, .
Dəyişən = ifadə dəyişənə ifadənin qiymətini mənimsətmək deməkdir. Bu zaman əvvəlcə ifadənin qiyməti hesablanır və bu qiymət sol tərəfdəki dəyişənin qiyməti olur.
Yadda saxlamaq lazımdır ki, “=” işarəsi mənimsətmə işarəsidir, bərabərlik işarəsi deyil. Mənimsətmə ifadə olur. Bu qaydaya görə i=(j=k) da ifadə olur, belə ki, j=k ifadədir və konkret qiymətə malikdir. Mötərizəni yazmamaq olar, onda i=j=k ifadəsi k qiymətini i və j dəyişənlərinə mənimsədir, i=j=k=12 ifadəsi isə 12 qiymətini hər üç dəyişənə mənimsədir.
Məllər
İfadələr qurularkən tətbiq edilən əməllərin növləri bunlardır:
- Hesabi,
- Münasibət,
- Məntiqi və mərtəbə,
- Inkrement və dekrement,
- Mənimsətmə.
1) Hesabi əməllər:
*- vurma;
/ - bölmə;
+- toplama;
- - çıxma;
%- tam bölmədə qalığı götürmə.
Bölmədən başqa bütün əməllər ənənəvi qaydada yerinə yetirilir. Bölmə əməlinin xüsusiyyəti ondadır ki, əgər hər iki operand tamdırsa, onda nəticə tam qiymət olur. Həqiqi qiymət almaq üçün heç olmazsa bir operand həqiqi tipə malik olmalıdır. Belə ki, 9/5=1; 9/5.0=1.8; 9%5=4.
Hesabi operatorların üstünlük dərəcəsi belədir:
a) yüksək: - (unar minus),
b) orta: *, /, % (vurma, bölmə, qalığı götürmə),
c) aşağı: +, - (toplama, çıxma).
Yadda saxlamaq lazımdır ki, proqramlaşdırma dilində bütün əməlləri aşkar şəkildə göstərmək lazımdır. Bu, əsasən vurma əməlinə aiddir, belə ki, riyaziyyatda onu yazmamaq olar, proqramlaşdırmada isə yox! Məsələn, ab yazılışı proqramlaşdırmada identfikator kimi başa düşülür. Hesabi operatorlar binar operatorlardır, çünki onlar iki operand üzərində əməliyyatı yerinə yetirirlər.
Aşağıda riyazi ifadənin C/C++ dilində yazılışına aid nümunə verilmişdir:
Riyazi ifadə: ;
C/C++ dilində yazılışı:
2) Münasibət əməlləri müqayisə üçün istifadə olunur:
< - kiçik;
<= - kiçik və ya bərabər;
> - böyük;
>= - böyük və ya bərabər;
= = - bərabər;
!= - bərabər deyil.
Məsələn,
#include <stdio.h>
#include <conio.h>
main(){
int b;
b=5>2; // b doğru qiymət alır;
printf("b=%i\n",b);
b=7<4; // b yalan qiymət alır;
printf("b=%i\n",b);
getch();
}
Nəticədə
alınır.
Münasibət, məntiqi və bitlər (mərtəbə) üzərində əməllərin nəticəsi məntiqi tip olur. Lakin C/C++ dilində true və false qiymətləri alan standart məntiqi tip yoxdur. Burada məntiqi qiymətlər olaraq tamqiymətli qiymətlər istifadə olunur, belə ki, sıfır yalan kimi, sıfırdan fərqli istənilən qiymət isə - doğru kimi başa düşülür.
Qeyd edək ki, “= =” münasibət işarəsini “=” mənimsətmə işarəsi ilə qarışdırmaq olmaz, belə ki, bu səhvə gətirib çıxara bilər.
3) Məntiqi əməllərə aşağıdakılar daxildir:
məntiqi “və” (&&),
məntiqi “ və ya” (||),
məntiqi inkar (!).
Məntiqi əməllər bir neçə şərti ifadələri birləşdirdikdə istifadə olunur.
Məntiqi əməllər aşağıdakı xassələrə malikdirlər;
U1 və U2 – iki şərti ifadələrdirsə, onda:
- əgər hər iki ifadə eyni zamanda doğrudursa, U1&&U2 - doğrudur;
6>2 && 7>5 - doğrudur;
6>2 && 7<5 - yalandır;
- əgər ifadələrdən heç olmasa biri doğrudursa, U1 || U2 -doğrudur;
6>2 || 7>5 - doğrudur;
6>2 || 7<5 - doğrudur;
6<2 || 7<5 - yalandır;
- U1- yalan olduqda,!U1 - doğrudur;
- U1 - doğru olduqda,!U1 - yalandır;
! (6>2)- yalandır;
! (6<2)- doğrudur.
Mərtəbələr (bitlər) üzərində əməllər float və double tip dəyişənlərə tətbiq oluna bilməz. Belə əməllərə aşağıdakılar aiddir:
“ və” (&),
“ və ya “ (|),
mərtəbəli inversiya (-),
“ yoxetmə və ya “ (^),
sola yerdəyişmə (<<),
sağa yerdəyişmə (>>).
Misal 3.2.
C/C++ dilində riyaziyyatda rast gəlinməyən iki əməl var:
inkrement (++) və dekrement (--). İnkrement əməliyyatı operanda 1 əlavə edir, dekrement isə operanddan 1 çıxır:
i++ ó i=i+1;
i - - ó i=i-1.
j=i++
yazısı
j=i; i++
yazısına ekvivalentdir;
j=++i
yazısı isə
i=i+1; j=i;
yazısına ekvivalentdir.
Məsələn, S=a + b ++; yazısı o deməkdir ki, a+b- ni tapıb nəticəni S-ə mənimsətməli və onu 1 vahid artırmalı.
S=a+++b; yazısı o deməkdir ki, b-ni 1 vahid artırmalı, a və b – ni toplamalı, nəticəni S - ə mənimsətməli.
C/C++ dilində mənimsətmə əməli adi haldan əlavə qeyri ənənəvi göstərilişə malikdir. Məsələn, x=x+15 əməlinin yerinə yetirilməsi x dəyişəninin ünvanının 2 dəfə hesablanmasına gətirir: ilkin qiymətin tapılması üçün və alınan nəticənin köçürülməsi üçün.
Bu çatışmazlığı x+=15 yazmaqla aradan qaldırmaq olar.
“+ =” simvolu da mənimsətmə əməli adlanır və o, kompilyatora x - ə 15 qiymətini əlavə edib nəticəni x-də yadda saxlamaq göstərişi verir.
Mənimsətmə əməlinin tam yığımı:
*=, /=, +=, -=, %=, <<=, >>=, &=, ^=, \=.