1. Sissejuhatus
C-keelt kasutatakse laialdaselt erinevates valdkondades, nagu süsteemiprogrammeerimine ja manussüsteemide arendus. Nende hulgas onvõrdlusoperaatoridoluline element loogilistes otsustes, näiteks tingimuslausete ja tsüklite juhtimisel.
Selles artiklis selgitame üksikasjalikult C-keele võrdlusoperaatoreid. Toome algajatele mõeldud põhikasutuse juhised, praktilised koodinäited ja tähelepanekud, mis on kasulikud nii programmeerimist alustavatele kui ka oma põhiteadmisi värskendavatele lugejatele.
2. Mis on võrdlusoperaator?
Võrdlusoperaatori määratlus
Võrdlusoperaator on operaator, mis võrdleb kahte väärtust ja tagastab tulemuseks tõene (1) või väär (0). Seda kasutatakse programmi sees tingimuste hindamiseks ning see on asendamatu tingimuslausete (if
või switch
) ja korduslausete (while
või for
) puhul.
Võrdlusoperaatori kasutusalad
Võrdlusoperaatorid on kasulikud järgmistes olukordades:
- Tingimuslik haru: täidab koodi ainult siis, kui tingimus on täidetud.
- Kordus: kordab sama toimingut seni, kuni tingimus kehtib.
- Kasutaja sisendi kontroll: kontrollib, kas sisestatud väärtus vastab tingimusele.
Näide:
int a = 10, b = 20;
if (a < b) {
printf("a on väiksem kui b\n");
}
Selles koodis võrreldakse a
ja b
ning kui tingimus on tõene, kuvatakse sõnum.
3. C-keele võrdlusoperaatorite loend
Peamised võrdlusoperaatorid ja nende funktsioonid
Allolevas tabelis on kokku võetud C-keeles kasutatavad võrdlusoperaatorid.
Operaator | Tähendus | Näide | Tulemus |
---|---|---|---|
== | Võrdne | a == b | Tõene või väär |
!= | Ei ole võrdne | a != b | Tõene või väär |
> | Suurem kui | a > b | Tõene või väär |
< | Väiksem kui | a < b | Tõene või väär |
>= | Suurem või võrdne | a >= b | Tõene või väär |
<= | Väiksem või võrdne | a <= b | Tõene või väär |
Lihtne näide
Alljärgnev on võrdlusoperaatorite põhiline kasutusnäide.
int x = 15, y = 20;
// Kas on võrdsed
if (x == y) {
printf("x on võrdne y-ga\n");
} else {
printf("x ei ole võrdne y-ga\n");
}
// Kas on väiksem
if (x < y) {
printf("x on väiksem kui y\n");
}
// Kas on suurem või võrdne
if (x >= 10) {
printf("x on vähemalt 10\n");
}
Nagu näha, saab võrdlusoperaatoreid kasutada paindlikult erinevate tingimuste hindamiseks.
4. Iga operaatori detailid ja koodinäited
4.1 Võrdne (==) ja mitte võrdne (!=)
== (võrdne) operaator võrdleb, kas kaks väärtust on võrdsed. Tulemuseks on tõene (1) või väär (0).
!= (mitte võrdne) kontrollib, kas kaks väärtust ei ole võrdsed.
Koodinäide:
#include <stdio.h>
int main() {
int a = 10, b = 20;
// Võrdlus: kas on võrdsed
if (a == b) {
printf("a on võrdne b-ga\n");
} else {
printf("a ei ole võrdne b-ga\n");
}
// Võrdlus: kas ei ole võrdsed
if (a != b) {
printf("a ei ole võrdne b-ga\n");
}
return 0;
}
Väljund:
a ei ole võrdne b-ga
a ei ole võrdne b-ga
Oluline:
- Ära aja segamini
==
ja=
. ==
on võrdlusoperaator (kontrollib väärtuste võrdsust).=
on omistusoperaator (määrab väärtuse).
4.2 Suurusvõrdlus (>, <, >=, <=)
Suuruste võrdlemiseks kasutatakse järgmisi nelja operaatorit:
Operaator | Tähendus | Näide |
---|---|---|
> | Suurem kui | a > b |
< | Väiksem kui | a < b |
>= | Suurem või võrdne | a >= b |
<= | Väiksem või võrdne | a <= b |
Koodinäide:
#include <stdio.h>
int main() {
int x = 15, y = 10;
if (x > y) {
printf("x on suurem kui y\n");
}
if (x < y) {
printf("x on väiksem kui y\n");
}
if (x >= 15) {
printf("x on vähemalt 15\n");
}
if (y <= 10) {
printf("y on maksimaalselt 10\n");
}
return 0;
}
Väljund:
x on suurem kui y
x on vähemalt 15
y on maksimaalselt 10
Oluline:
- Suurusvõrdlust kasutatakse tihti tingimuslausete ja tsüklite puhul.
- Kasulik ka funktsioonide sees vahemiku kontrollimiseks.
5. Võrdlusoperaatorite prioriteet ja assotsiatiivsus
5.1 Operaatorite prioriteet
Võrdlusoperaatoreid kasutades tuleb mõista nende prioriteeti ja assotsiatiivsust.
Võrdlusoperaatoritel on järgmine prioriteet (kõrgeimast madalaimani):
- Aritmeetikaoperaatorid (
+
,-
,*
,/
,%
) - Võrdlusoperaatorid (
>
,<
,>=
,<=
) - Võrdsusoperaatorid (
==
,!=
) - Loogikaoperaatorid (
&&
,||
)
Hindamine toimub selles järjekorras.
Näide:
if (a + b > c * d) {
printf("Avaldis on tõene\n");
}
Selles näites arvutatakse esmalt a + b
ja c * d
, seejärel tehakse >
võrdlus.
5.2 Assotsiatiivsus
Assotsiatiivsus määrab, mis järjekorras hinnatakse sama prioriteediga operaatoreid.
- Võrdlusoperaatorid hinnatakse vasakult paremale.
Näide:
if (a > b && b < c) {
printf("Tingimus on täidetud\n");
}
Siin hinnatakse kõigepealt a > b
ja selle tulemus läheb &&
vasakule poolele.
6. Tähelepanekud ja tüüpilised vead
6.1 Omistus- ja võrdlusoperaatori segiajamise oht
Algajatel juhtub tihti, et aetakse segamini =
ja ==
.
Vale kood:
if (a = b) { // määrab a väärtuseks b
printf("Võrdne\n");
}
Selles koodis omistatakse a
-le väärtus b
ja tulemus (kui pole 0) loetakse tingimuseks „tõene“.
Õige kood:
if (a == b) { // võrdleb a ja b
printf("Võrdne\n");
}
Vea vältimine:
Seda segiajamist aitab vältida nn. „Yoda stiil“:
if (10 == a) { // Yoda stiil
printf("Võrdne\n");
}
Selle vormingu puhul annab =
kasutamine kompileerimisvea, mis välistab vea tekkimise.
6.2 Silumisel olulised punktid
Et vältida võrdlusoperaatoritega seotud tüüpilisi vigu, pea meeles:
- Ära aja segamini omistus- ja võrdlusoperaatorit.
- Kontrolli alati, et
=
ja==
oleksid õigesti kasutatud.
- Luba IDE hoiatused.
- Seadista IDE nii, et kõik hoiatused kuvatakse ja võimalikud vead avastatakse varakult.
- Kasuta silumisvahendeid.
- Kontrolli muutujate väärtusi Visual Studio Code’i, Code::Blocks’i vms tööriistaga.
- Kasuta üksusteste.
- Testi tingimuslauseid enne kasutamist, et vältida loogikavigu.
7. KKK (Korduma kippuvad küsimused)
K1: Millele pöörata tähelepanu, kui kasutada võrdlusoperaatoreid mitme tingimusega?
V: Kui kasutad mitut tingimust, kasuta sulge, et määrata avaldise hindamise järjekord selgelt.
Näide:
int a = 5, b = 10, c = 15;
// Ohutu tingimuse hindamine sulgudega
if ((a < b) && (b < c)) {
printf("a on väiksem kui b ja b on väiksem kui c\n");
}
Oluline:
- Sulgude kasutamine parandab loetavust ja vähendab vigade riski.
- Keerukate tingimuste puhul väldi sõltumist ainult operaatorite prioriteedist — kasuta sulge.
K2: Kuidas võrrelda sõnesid C-keeles?
V: C-keeles käsitletakse sõnesid massiivina, seega ei saa neid võrrelda otse võrdlusoperaatoritega. Selleks kasuta funktsiooni strcmp
.
Näide:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apple";
// Sõne võrdlemine
if (strcmp(str1, str2) == 0) {
printf("Sõned on võrdsed\n");
} else {
printf("Sõned ei ole võrdsed\n");
}
return 0;
}
Väljund:
Sõned on võrdsed
Oluline:
strcmp
tagastab 0, kui sõned on võrdsed.- Kui soovid võrrelda suur- ja väiketähti eirates, kasuta
strcasecmp
(vajab süsteemi tuge).
K3: Kuidas vältida levinud vigu silumisel?
V: Võrdlusoperaatoritega seotud vigade vältimiseks järgi neid samme:
- Väldi omistus- ja võrdlusoperaatori segiajamist.
- Luba IDE hoiatused.
- Kasuta silumisvahendeid.
- Kirjuta üksustestid.
8. Kokkuvõte ja kontrollküsimused
Kokkuvõte
C-keele võrdlusoperaatorid on olulised tööriistad tingimuslausete ja tsüklite juhtimiseks. Selles artiklis selgitasime üksikasjalikult iga operaatori kasutamist, näiteid, prioriteete ja tüüpilisi vigu.
Olulised punktid:
- Mõista võrdlusoperaatorite tüüpe ja kasutusviise.
- Kinnista teadmised koodinäidete abil.
- Ole ettevaatlik omistus- ja võrdlusoperaatori segiajamisel.
- Kasuta KKK osa, et saada praktilisi nõuandeid.
Kontrollküsimused
Küsimus 1: Mis on järgmise koodi väljund?
int a = 5, b = 10;
if (a < b && b > 0) {
printf("Tingimus on täidetud\n");
}
Küsimus 2: Kirjuta kood, mis kasutab strcmp
-i, et võrrelda sõnesid “hello” ja “world”.
Vihje:
- Küsimus 1 puhul mõtle, kuidas tingimus avaldises hinnatakse.
- Küsimus 2 puhul kasuta
strcmp
-i ja lisa tingimus, mis kontrollib võrdust.