C-keeles abs funktsiooni kasutamine: Täisarvude absoluutväärtuse leidmine ja näited

1. Mis on C-keeles abs funktsioon?

C-keeles on olemas mugav funktsioon abs, millega saab arvutada täisarvu absoluutväärtuse. Absoluutväärtust kasutatakse sageli selleks, et vältida negatiivseid väärtusi vahemaade või erinevuste arvutamisel. Selle funktsiooni abil teisendatakse negatiivne täisarv positiivseks täisarvuks, mida käsitletakse absoluutväärtusena.

Näiteks saab järgmise koodi abil negatiivse arvu teisendada positiivseks absoluutväärtuseks, kasutades abs funktsiooni.

#include <stdlib.h>
int main() {
    int x = -5;
    int abs_value = abs(x);
    printf("Absoluutväärtus: %d\n", abs_value); // Väljund: Absoluutväärtus: 5
    return 0;
}

2. abs funktsiooni põhiline kasutus

Kui kasutad C-keeles abs funktsiooni, tuleb lisada päisefail stdlib.h. abs funktsioon võtab ühe int-tüüpi argumendi ja tagastab selle absoluutväärtuse. Tähtis on meeles pidada, et abs funktsioon on mõeldud ainult int-tüübile ega tööta teiste andmetüüpidega. Teiste tüüpide puhul tuleb kasutada vastavaid funktsioone, mida selgitatakse allpool.

Põhiline näide

Allolevas koodis arvutatakse abs funktsiooni abil täisarvu absoluutväärtus ja kuvatakse tulemus.

#include <stdio.h>
#include <stdlib.h>

int main() {
    int num = -10;
    int result = abs(num);
    printf("Absoluutväärtus on: %d\n", result); // Väljund: Absoluutväärtus on: 10
    return 0;
}

Programmi käivitamisel kuvatakse “Absoluutväärtus on: 10”, mis kinnitab, et abs funktsioon teisendab negatiivse täisarvu positiivseks täisarvuks.

3. Absoluutväärtuse funktsioonid erinevatele andmetüüpidele

Kuna abs funktsioon töötab ainult int-tüübi puhul, tuleb teiste andmetüüpide jaoks kasutada vastavaid funktsioone. Järgmises tabelis on toodud õiged absoluutväärtuse funktsioonid iga andmetüübi jaoks.

AndmetüüpAbsoluutväärtuse funktsioonPäisefail
intabsstdlib.h
longlabsstdlib.h
long longllabsstdlib.h
doublefabsmath.h
floatfabsfmath.h
long doublefabslmath.h

labs funktsiooni näide

#include <stdio.h>
#include <stdlib.h>

int main() {
    long num = -100000L;
    long abs_value = labs(num);
    printf("long tüübi absoluutväärtus: %ld\n", abs_value); // Väljund: long tüübi absoluutväärtus: 100000
    return 0;
}

fabs funktsiooni näide

#include <stdio.h>
#include <math.h>

int main() {
    double num = -3.14;
    double abs_value = fabs(num);
    printf("double tüübi absoluutväärtus: %lf\n", abs_value); // Väljund: double tüübi absoluutväärtus: 3.140000
    return 0;
}

4. Absoluutväärtuse leidmine ilma abs funktsioonita

Isegi kui abs funktsiooni pole võimalik kasutada, saab negatiivseid arve positiivseks muuta tingimuslause abil. Allpool on näited if-else ja kolmikoperaatori kasutamisest.

if-else lause kasutamine

#include <stdio.h>

int my_abs(int num) {
    if (num < 0)
        return -num;
    else
        return num;
}

int main() {
    int num = -10;
    printf("Absoluutväärtus on: %d\n", my_abs(num)); // Väljund: Absoluutväärtus on: 10
    return 0;
}

Kolmikoperaatori kasutamine

#include <stdio.h>

int my_abs(int num) {
    return (num < 0) ? -num : num;
}

int main() {
    int num = -20;
    printf("Absoluutväärtus on: %d\n", my_abs(num)); // Väljund: Absoluutväärtus on: 20
    return 0;
}

Kolmikoperaatori abil saab tingimuse kirjutada ühele reale, mis parandab koodi loetavust.

5. abs funktsiooni kasutamise eripärad

Täisarvu vahemik ja ületäitumine

abs funktsioon saab töödelda ainult int-tüübi vahemikus olevaid väärtusi. Näiteks kui proovida teisendada int-tüübi minimaalset väärtust -2147483648 absoluutväärtuseks, tekib ületäitumine, mis võib põhjustada ootamatut käitumist. See tuleneb asjaolust, et C-keeles ei saa negatiivset miinimumväärtust otse positiivseks muuta.

Tüübi mittevastavus

Kuna abs funktsioon on mõeldud ainult int-tüübile, võib long või long long tüübi puhul abs kasutamine anda vale tulemuse. Näiteks long long tüübi puhul tuleks kasutada llabs funktsiooni. Tüübi mittevastavuse vältimiseks tuleb alati valida sobiv funktsioon vastavalt andmetüübile.

6. Kokkuvõte

C-keeles on täisarvude absoluutväärtuse leidmiseks mugav kasutada abs funktsiooni, kuid andmetüübi järgi tuleb valida õige funktsioon. Samuti saab kasutada tingimuslauset või kolmikoperaatorit alternatiivina. Andmetüübile tähelepanu pöörates ja õige meetodi valides saab tagada programmi paindlikkuse ja töökindluse.

侍エンジニア塾