C-keele võrdlusoperaatorid: täielik juhend algajatele koos näidete ja selgitustega

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.

OperaatorTähendusNäideTulemus
==Võrdnea == bTõene või väär
!=Ei ole võrdnea != bTõene või väär
>Suurem kuia > bTõene või väär
<Väiksem kuia < bTõene või väär
>=Suurem või võrdnea >= bTõene või väär
<=Väiksem või võrdnea <= bTõ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:

OperaatorTähendusNäide
>Suurem kuia > b
<Väiksem kuia < b
>=Suurem või võrdnea >= b
<=Väiksem või võrdnea <= 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):

  1. Aritmeetikaoperaatorid (+, -, *, /, %)
  2. Võrdlusoperaatorid (>, <, >=, <=)
  3. Võrdsusoperaatorid (==, !=)
  4. 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:

  1. Ära aja segamini omistus- ja võrdlusoperaatorit.
  • Kontrolli alati, et = ja == oleksid õigesti kasutatud.
  1. Luba IDE hoiatused.
  • Seadista IDE nii, et kõik hoiatused kuvatakse ja võimalikud vead avastatakse varakult.
  1. Kasuta silumisvahendeid.
  • Kontrolli muutujate väärtusi Visual Studio Code’i, Code::Blocks’i vms tööriistaga.
  1. 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:

  1. Väldi omistus- ja võrdlusoperaatori segiajamist.
  2. Luba IDE hoiatused.
  3. Kasuta silumisvahendeid.
  4. 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.
年収訴求