[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 747.   Soluzioni agli esercizi proposti

Esercizio Soluzione
742.2.1
//      Ciao mondo!
#include <stdio.h>
//  La funzione main() viene eseguita automaticamente
//  all'avvio.
int main (void)
{
    //  Si limita a emettere un messaggio.
    printf ("Ciao mondo!\n");
    //  Attende la pressione di un tasto, quindi termina.
    getchar ();
    return 0;
}
742.2.2
#include <stdio.h>
int main (void)
{
    printf ("Il mio primo programma\n");
    printf ("scritto in linguaggio C.\n");
    getchar ();
    return 0;
}
742.3.1

cc -o programma prova.c[Invio]

Ma se si dispone del compilatore GNU C, è meglio usare l'opzione -Wall:

cc -Wall -o programma prova.c[Invio]

742.4.1
printf ("Imponibile: %d, IVA: %d.\n", 1000, 200);
743.1.1 Con un byte da 8 bit non dovrebbe esserci la possibilità di avere una variabile scalare da 12 bit, perché di norma il byte è esattamente un sottomultiplo del rango delle variabili scalari disponibili.
743.2.1 Una variabile scalare di tipo unsigned char (da 8 bit) può rappresentare valori da 0 a 255, pertanto non è possibile assegnare a una tale variabile valori fino a 99 999.
743.2.2 Una variabile scalare di tipo unsigned char (da 8 bit) può rappresentare valori da 0 a 255.
743.2.3 Una variabile scalare di tipo signed short int (da 16 bit) può rappresentare valori da -32 768 a +32 767.
743.2.4 Dovendo rappresentare il valore 12,34, si devono usare variabili in virgola mobile. Possono andare bene tutti i tipi: float, double e long double.
743.3.1 La costante letterale 12 corrisponde a 1210; la costante 012 rappresenta il numero 128, ovvero 1010; la costante 0x12 indica il numero 1216, ovvero 1810.
743.3.2 La costante letterale 12 è di tipo int; la costante 12U è di tipo unsigned int; la costante 12L è di tipo long int; la costante 1.2 è di tipo double; la costante 1.2 è di tipo long double.
743.5.1 L'espressione '3'-2 corrisponde in pratica alla costante carattere '1';
l'espressione '5'+4 corrisponde in pratica alla costante carattere '9'.
743.7.1
int d;
unsigned long int e = 2111;
float f = 21.11;
const float g = 21.11;
744.1.1 L'espressione 4+4 dovrebbe dare un risultato di tipo int;
l'espressione 4/3 dovrebbe dare un risultato di tipo int;
l'espressione 4.0/3 dovrebbe essere di tipo double;
l'espressione 4L*3 dovrebbe essere di tipo long int.
744.2.1
int a = 3;
int b;
b = --a;

a contiene 2 e b contiene 2.

744.2.1
int a = 3;
int b = 2;
b = a + b;

a contiene 3 e b contiene 5.

744.2.1
int a = 7;
int b = 2;
b = a % b;

a contiene 7 e b contiene 1.

744.2.1
int a = 7;
int b;
b = (a = a * 2);

a contiene 14 e b contiene 14.

744.2.1
int a = 3;
int b = 2;
b += a;

a contiene 3 e b contiene 5.

744.2.1
int a = 7;
int b = 2;
b %= a;

a contiene 7 e b contiene 2.

744.2.1
int a = 7;
int b;
b = (a *= 2);

a contiene 14 e b contiene 14.

744.2.2
#include <stdio.h>
int main (void)
{
    int a = 3;
    int b;
    b = --a;
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.2.2
#include <stdio.h>
int main (void)
{
    int a = 3;
    int b = 2;
    b = a + b;
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.2.2
#include <stdio.h>
int main (void)
{
    int a = 7;
    int b = 2;
    b = a % b;
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.2.2
#include <stdio.h>
int main (void)
{
    int a = 7;
    int b;
    b = (a = a * 2);
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.2.2
#include <stdio.h>
int main (void)
{
    int a = 3;
    int b = 2;
    b += a;
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.2.2
#include <stdio.h>
int main (void)
{
    int a = 7;
    int b = 2;
    b %= a;
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.2.2
#include <stdio.h>
int main (void)
{
    int a = 7;
    int b;
    b = (a *= 2);
    printf ("a contiene %d;\n", a);
    printf ("b contiene %d.\n", b);
    getchar ();
    return 0;
}
744.3.1
int a = 4 + 1;
signed char b = 5;
int c = a == b;

c contiene 1.

744.3.1
int a = 4 + 1;
signed char b = 5;
int c = a != b;

c contiene 0.

744.3.1
unsigned int a = 4 + 3;
signed char b = -5;
int c = a >= b;

c contiene 1.

744.3.1
unsigned int a = 4 + 3;
signed char b = -5;
int c = a <= b;

c contiene 0.

744.3.2
#include <stdio.h>
int main (void)
{
    int a = 4 + 1;
    signed char b = 5;
    int c = a == b;
    printf ("(%d == %d) produce %d\n", a, b, c);
    getchar ();
    return 0;
}
744.3.2
#include <stdio.h>
int main (void)
{
    int a = 4 + 1;
    signed char b = 5;
    int c = a != b;
    printf ("(%d != %d) produce %d\n", a, b, c);
    getchar ();
    return 0;
}
744.3.2
#include <stdio.h>
int main (void)
{
    unsigned int a = 4 + 3;
    signed char b = -5;
    int c = a >= b;
    printf ("(%d >= %d) produce %d\n", a, b, c);
    getchar ();
    return 0;
}
744.3.2
#include <stdio.h>
int main (void)
{
    unsigned int a = 4 + 3;
    signed char b = -5;
    int c = a <= b;
    printf ("(%d <= %d) produce %d\n", a, b, c);
    getchar ();
    return 0;
}
744.4.1
int a = 4;
signed char b = (3 < 5);
int c = a && b;

c contiene 1.

744.4.1
int a = 4;
signed char b = (3 < 5);
int c = a || b;

c contiene 1.

744.4.1
unsigned int a = 4 + 3;
signed char b = -5;
int c = (b > 0) || (a > b);

c contiene 1.

744.5.1
int a = 5;
int b = 12;
int c = a & b;

c contiene 4.

744.5.1
int a = 5;
int b = 12;
int c = a | b;

c contiene 13.

744.5.1
int a = 5;
int b = 12;
int c = a ^ b;

c contiene 9.

744.5.1
int a = 5;
int c = a << 1;

c contiene 10.

744.5.1
int a = 21;
int c = a >> 1;

c contiene 10.

744.5.2
#include <stdio.h>
int main (void)
{
    int a = 5;
    int b = 12;
    int c = a & b;
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.5.2
#include <stdio.h>
int main (void)
{
    int a = 5;
    int b = 12;
    int c = a | b;
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.5.2
#include <stdio.h>
int main (void)
{
    int a = 5;
    int b = 12;
    int c = a ^ b;
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.5.2
#include <stdio.h>
int main (void)
{
    int a = 5;
    int c = a << 1;
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.5.2
#include <stdio.h>
int main (void)
{
    int a = 21;
    int c = a >> 1;
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.6.1 L'espressione (int) (4.4+4.9) è equivalente a (int) 9;
l'espressione (double) 4/3 è equivalente a (double) 1;
l'espressione ((double) 4)/3 è equivalente a ((double) 1.33333.
744.7.1
int a = -20;
int b = 10;
int c = (b = 2, b = a, c = a + b);

c contiene -40.

744.7.1
int a = -20;
int b = 10;
int c = (b = 2, b = a++, c = a + b);

c contiene -39.

744.7.1
int a = -20;
int b = 10;
int c = (b = 2, b = ++a, c = a + b);

c contiene -38.

744.7.2
#include <stdio.h>
int main (void)
{
    int a = -20;
    int b = 10;
    int c = (b = 2, b = a, c = a + b);
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.7.2
#include <stdio.h>
int main (void)
{
    int a = -20;
    int b = 10;
    int c = (b = 2, b = a++, c = a + b);
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
744.7.2
#include <stdio.h>
int main (void)
{
    int a = -20;
    int b = 10;
    int c = (b = 2, b = ++a, c = a + b);
    printf ("c contiene %d\n", c);
    getchar ();
    return 0;
}
745.1.1
#include <stdio.h>
int main (void)
{
    int x;
    x = 5000;

    if ((x < 1000) || (x > 10000))
      {
        printf ("Il valore di x non è valido!\n");
      }
    else if (x > 5000)
      {
        printf ("Il livello di x è alto: %d\n", x);
      }
    else if (x < 5000)
      {
        printf ("Il livello di x è basso: %d\n", x);
      }
    else
      {
        printf ("Il livello di x è ottimale: %d\n", x);
      }
    getchar ();
    return 0;
}
745.1.2
#include <stdio.h>
int main (void)
{
    int x;
    x = -1;

    if (x)
      {
        printf ("Sono felice :-)\n");
      }
    else
      {
        printf ("Sono triste :-(\n");
      }
    getchar ();
    return 0;
}

Il programma visualizza la scritta «Sono felice :-)», perché un qualunque valore numerico diverso da zero viene inteso pari a Vero.

745.2.1
        case 2:
            if (((anno % 4 == 0) && !(anno % 100 == 0))
                || (anno % 400 == 0))
              {
                giorni = 29;
              }
            else
              {
                giorni = 28;
              }
            break;

Se l'anno è divisibile per quattro (pertanto la divisione per quattro non dà resto) e se l'anno non è divisibile per 100 (quindi non si tratta di un secolo), oppure se l'anno è divisibile per 400, il mese di febbraio ha 29, mentre ne ha 28 negli altri casi. In pratica, di norma gli anni bisestili sono quelli il cui anno è divisibile per quattro, ma questa regola non si applica se l'anno è l'inizio di un secolo, ma ogni quattro secoli si fa eccezione (pertanto, anche se di norma l'anno che inizia un secolo non è bisestile, il secolo che si ha ogni 400 anni è invece, nuovamente, bisestile).

745.3.1
#include <stdio.h>
int main (void)
{
    unsigned int x = 4;
    unsigned int f = x;
    unsigned int i = (x - 1);
    while (i > 0)
      {
        f = f * i;
        i--;
      }
    printf ("%d! è pari a %d\n", x, f);
    getchar ();
    return 0;
}
745.3.2
#include <stdio.h>
int main (void)
{
    int x = 11;
    int i = 2;
    if (x <= 1)
      {
        printf ("%d non è un numero primo.\n", x);
      }
    else
      {
        while (i < x)
          {
            if ((x % i) == 0)
              {
                printf ("%d è divisibile per %d.\n", x, i);
                break;
              }
            i++;
          }
        if (i >= x)
          {
            printf ("%d è un numero primo.\n", x);
          }
      }
    getchar ();
    return 0;
}
745.4.1
#include <stdio.h>
int main (void)
{
    int x = 11;
    int i = 2;
    if (x <= 1)
      {
        printf ("%d non è un numero primo.\n", x);
      }
    else
      {
        do
          {
            if ((x % i) == 0)
              {
                printf ("%d è divisibile per %d.\n", x, i);
                break;
              }
            i++;
          }
        while (i < x);
        if (i >= x)
          {
            printf ("%d è un numero primo.\n", x);
          }
      }
    getchar ();
    return 0;
}
745.5.1
#include <stdio.h>
int main (void)
{
    unsigned int x = 4;
    unsigned int f = x;
    unsigned int i;
    for (i = (x - 1); i > 0; i--) 
      {
        f = f * i;
      }
    printf ("%d! è pari a %d\n", x, f);
    getchar ();
    return 0;
}
745.5.2
#include <stdio.h>
int main (void)
{
    int x = 11;
    int i;
    if (x <= 1)
      {
        printf ("%d non è un numero primo.\n", x);
      }
    else
      {
        for (i = 2; i < x; i++)
          {
            if ((x % i) == 0)
              {
                printf ("%d è divisibile per %d.\n", x, i);
                break;
              }
          }
        if (i >= x)
          {
            printf ("%d è un numero primo.\n", x);
          }
      }
    getchar ();
    return 0;
}
746.1.1
void alfa (unsigned int x, char y, double z);
unsigned int beta (void);
double gamma (int x, signed char y);
746.2.1
#include <stdio.h>
unsigned int fattoriale (unsigned int x);
unsigned int
fattoriale (unsigned int x)
{
    unsigned int f = x;
    unsigned int i;
    for (i = (x - 1); i > 0; i--) 
      {
        f = f * i;
      }
    return i;
}
int main (void)
{
    unsigned int x = 7;
    unsigned int f;
    f = fattoriale (x);
    printf ("Il fattoriale di %d è pari a %d.\n", x, f);
    getchar ();
    return 0;
}
746.2.1
#include <stdio.h>
unsigned int primo (unsigned int x);
unsigned int
primo (unsigned int x)
{
    unsigned int i;
    if (x <= 1)
      {
        return 0;
      }
    for (i = 2; i < x; i++)
      {
        if ((x % i) == 0)
          {
            return 0;
          }
      }
    if (i >= x)
      {
        return 1;
      }
    else
      {
        return 0;
      }
}
int main (void)
{
    unsigned int x = 11;
    if (primo (x))
      {
        printf ("%d è un numero primo.\n", x);
      }
    else
      {
        printf ("%d non è un numero primo.\n", x);
      }
    getchar ();
    return 0;
}
746.2.1
#include <stdio.h>
double interesse (double c, double i, unsigned int t);
double
interesse (double c, double i, unsigned int t)
{
    return (c * i * t);
}
int main (void)
{
    double    capitale = 10000; // Euro
    double       tasso = 0.03;  // pari al 3 %
    unsigned int tempo = 3;     // anni
    double   interessi;
    interessi = interesse (capitale, tasso, tempo);
    printf ("Un capitale di %f Euro ", capitale);
    printf ("investito al tasso del %f%% ", tasso * 100);
    printf ("Per %d anni, dà interessi per %f Euro.\n", tempo, interessi);
    getchar ();
    return 0;
}
746.5.1
#include <stdio.h>
#include <stdlib.h>
unsigned int primo (unsigned int x);
unsigned int
primo (unsigned int x)
{
    unsigned int i;
    if (x <= 1)
      {
        return 0;
      }
    for (i = 2; i < x; i++)
      {
        if ((x % i) == 0)
          {
            return 0;
          }
      }
    if (i >= x)
      {
        return 1;
      }
    else
      {
        return 0;
      }
}
int main (void)
{
    unsigned int x = 11;
    if (primo (x))
      {
        return (EXIT_SUCCESS);
      }
    else
      {
        return (EXIT_FAILURE);
      }
}

Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome soluzioni_agli_esercizi_proposti_1.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory