Operazioni matematiche 🇬🇧

Note a cura di Antonino Furnari - antonino.furnari@unict.it
Università di Catania, Dipartimento di Matematica e Informatica
Note disponibili qui: http://www.antoninofurnari.github.iohttps://antoninofurnari.github.io/lecture-notes/it/programmazione-c/operazioni-matematiche/

Oltre agli operatori di base, la libreria standard di C mette a disposizione altre operazioni matematiche quali le radici quadrate (sqrt), gli elevamenti a potenza (pow), i seni (sin) e i coseni (cos), oltre alle principali costanti matematiche. Per accedere a queste funzioni, dobbiamo importare l’header <math.h>. Vediamo qualche esempio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include<stdio.h>
#include<math.h>

int main() {
    printf("sqrt(2)=%f\n", sqrt(2)); // radice quadrata di due
    printf("cbrt(2)=%f\n", cbrt(3)); // radice cubica di tre
    printf("pow(2,3)=%f\n", pow(2,3)); // 2 elevato 3
    printf("sin(M_PI)=%f\n", sin(M_PI)); // seno di Pi greca
    printf("cos(2*M_PI)=%f\n", cos(2*M_PI)); // coseno di 2*Pi greca
}
sqrt(2)=1.414214
cbrt(2)=1.442250
pow(2,3)=8.000000
sin(M_PI)=0.000000
cos(2*M_PI)=1.000000

Altre operazioni matematiche utili sono round, ceil e floor. Tutte e tre ci permettono di convertire un numero in virgola mobile in un numero intero. Le tre funzioni effettuano però delle conversioni in maniera differente:

  • round arrotonda il numero in virgola mobile come siamo abituati a fare (es. $2.3$ -> $3$, $2.8$ -> $3$);
  • floor restituisce il numero intero più grande che sia inferiore al numero in input (es. $2.3$ -> $2$, $2.8$ -> $2$);
  • ceil restituisce il numero intero più piccolo che sia superiore al numero in input (es. $2.3$ -> $3$, $2.8$ -> $3$);

Vediamo degli esempi:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include<stdio.h>
#include<math.h>

int main() {
    printf("round(2.2)=%f\n", round(2.2));
    printf("round(2.6)=%f\n", round(2.6));
    
    printf("floor(2.2)=%f\n", floor(2.2));
    printf("floor(2.6)=%f\n", floor(2.6));
    
    printf("ceil(2.2)=%f\n", ceil(2.2));
    printf("ceil(2.6)=%f\n", ceil(2.6));
}
round(2.2)=2.000000
round(2.6)=3.000000
floor(2.2)=2.000000
floor(2.6)=2.000000
ceil(2.2)=3.000000
ceil(2.6)=3.000000

Si noti che il risultato di queste operazioni resta comunque un double.

Domanda

Quale valore della variabile x è tale che il seguente seguente codice assegni lo stesso valore a a e b e c?

1
2
3
auto a = floor(x);
auto b = ceil(x);
auto c = round(x);

Possiamo trovare maggiori informazioni su math qui: https://devdocs.io/c/numeric/math.

Esercizi

Esercizio

Si scriva un programma che:

  • Definisce la variabile float r che rappresenta il raggio di un cerchio;
  • Assegna a r il valore 3.8;
  • Calcola e stampa a schermo l’area e la circonferenza del cerchio.

Esercizio Si scriva un programma che:

  • Definisce la variabile float x e la pone uguale a 9.2;
  • Calcola e stampa schermo il seno e il coseno di x;
  • Assumendo che x sia il valore di un angolo in radianti, lo converta in gradi.