vuoi
o PayPal
tutte le volte che vuoi
PROGRAMMAZIONE C
Corso di economia e amministrazione delle imprese
Esame di Informatica Generale
Indice
1. Equazione di 2° grado .............................................................................................................................. 1
2. Divisori di un numero intero..................................................................................................................... 2
3. Divisori primi di un numero intero............................................................................................................ 3
4. Media ponderata ..................................................................................................................................... 4
5. Mediana .................................................................................................................................................. 5
6. Matrice (esame giugno 2013) ................................................................................................................... 6
7. Media di un array (esame giugno 2013) ................................................................................................... 7
Un consiglio finale ....................................................................................................................................... 7
1. Equazione di 2° grado
Testo
Scrivere un programma C che legge 3 numeri interi a, b, c e stampa le soluzioni dell’equazione di secondo
2
grado ax + bx + c = 0; se non ne esistono scrive “non ha soluzioni nel campo reale”.
Codice
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{ int a, b, c;
double delta=0, ris1=0, ris2=0;
printf ("Inserire i 3 parametri dell'equazione di 2 grado:\n");
scanf ("%d%d%d",&a,&b,&c);
if (a==0) {
if (b!=0) {
ris1 = double(-c)/ (b); // c viene convertito in
double per non perdere i decimali dopo la divisione
printf ("L'equazione e' di 1 grado. Il risultato
e' %lf\n",ris1);}
else printf ("non ha soluzioni nel campo reale\n");
}
else { //equazione di 2 grado
delta = pow(b,2.0) - (4*a*c);
if (delta<0) printf ("L'equazione non ha soluzioni
reali\n"); else { ris1 = (-b + sqrt(delta)) / (2*a);
ris2 = (-b - sqrt(delta)) / (2*a);
if (ris1==ris2) printf ("Esiste una sola soluzione
che e' %lf\n",ris1); //oppure if (delta==0) printf ...
else printf ("Le due soluzioni sono: x1=%lf e
x2=%lf\n",ris1,ris2);
}
}
system ("PAUSE");
return 0;
}
Considerazioni
Per calcolare il delta è stata usata la funzione pow (potenza). In alternativa si poteva moltiplicare b per se
stesso ‘b * b’. La funzione sqrt calcola la radice quadrata. Queste funzioni sono disponibili nel modulo
math.h. 1
2. Divisori di un numero intero
Testo
Scrivere un programma C che legge un numero intero n e stampa i suoi divisori.
Codice
#include <stdio.h>
#include <stdlib.h>
//STAMPA DIVISORI
int main(){
int x, i;
printf ("Inserisci un numero intero positivo:\n");
scanf ("%d", &x);
if (x>0) {
printf ("\nI divisori sono:");
for (i=1;i<=x;i++)
if (x % i == 0) printf(" %d",i);
} else if (x==0) printf ("\nLo zero e' divisibile per qualsiasi
numero");
printf ("\n");
system("PAUSE");
return 0;
}
Considerazioni
Per determinare se un numero è divisibile per un altro basta usare l’operatore resto della divisione ‘%’. Se
dividendo il numero intero per un altro minore, il resto è zero, allora il secondo è un divisore. Nell’esempio
il ciclo for parte da 1 fino al numero x anche se si poteva partire da 2 fino a x-1 perché ogni numero è
divisibile per 1 e per se stesso. 2
3. Divisori primi di un numero intero
Testo
Scrivere un programma C che legge un numero intero n e stampa i suoi divisori primi.
Codice
#include <stdio.h>
#include <stdlib.h>
//STAMPA DIVISORI PRIMI
int isprimo(int n)
{ int i = 2;
int numprimo = 1;
if (n == 0) return false;
else { while (numprimo == 1 && i<n){
if (n % i == 0) numprimo = 0;
i++;
}
}
return numprimo;
}
int main(){
int x, i;
printf ("Inserisci un numero intero positivo:\n");
scanf ("%d", &x);
if (x>0) {
printf ("I divisori primi sono:");
for (i=1;i<=x;i++)
if (x % i == 0) if (isprimo(i)==1) printf(" %d",i);
} else if (x==0) printf ("\nLo zero e' divisibile per qualsiasi
numero");
printf ("\n");
system("PAUSE");
return 0;
}
Considerazioni
Rispetto all’esercizio precedente dobbiamo stampare solo i divisori primi. Quindi è necessario verificare se
il divisore trovato sia anche un numero primo tramite la funzione isprimo(). Tale funzione restituisce 1 se il
divisore è un numero primo o zero in caso contrario. Il ciclo while della funzione isprimo parte da i = 2
perché i numeri 1 e 2 sono primi e non è necessario testarli. Infatti con n = 2, non entriamo nel ciclo while
perché la condizione è i < n e sostituendo 2 < 2 è falso. 3
4. Media ponderata
Testo
Scrivere un programma C che legge una sequenza di coppie di numeri terminata con la coppia 0 0 e ne
stampa la media pesata dove il secondo elemento della coppia rappresenta il peso del primo
Codice
#include <stdio.h>
#include <stdlib.h>
//MEDIA PONDERATA
int main(){
int x, peso;
double somma = 0.0, n = 0.0;
printf ("Calcola la media ponderata\n\nInserisci dei numeri interi
seguiti dal peso:\n");
do { scanf ("%d%d", &x, &peso);
somma += x * peso;
n += peso;
} while (x != 0 || peso != 0);
if (n!=0) {
printf ("La media e' %lf",somma/n);
}
printf ("\n");
system("PAUSE");
return 0;
}
Considerazioni
Anche se si fa la media ponderata di numeri interi, il risultato potrebbe avere dei decimali ed è per questo
motivo che le variabili somma e n sono di tipo double. 4