Premi qui per scaricare il PDF
Laboratorio C - 02
In questa lezione di Laboratorio, vedremo degli esercizi in C riguardanti le matrici, le stringhe e il controllo sull’input dell’utente.
Prima di ogni esercizio svolto che può essere copiato e testato, troverete le tracce dell’esercizio. Se volete scaricare il pdf con gli esercizi risolti, premete sul bottone qui in alto o a fondo pagina.
Esercizio 1
Scrivere un programma in linguaggio C che legga una frase inserita da tastiera. La frase contiene al più 100 caratteri. Il programma deve svolgere le seguenti operazioni:
- visualizzare la frase inserita.
- costruire una nuova frase in cui tutte le vocali siano sostituire da un diverso carattere secondo la seguente tabella: ‘A’, ‘a’ = ‘4’; ‘E’, ‘e’ = ‘3’; ‘I’, ‘i’ = 1; ‘O’, ‘o’ = ‘0’; ‘U’, ‘u’ = ‘8’.
- il programma deve memorizzare la nuova frase in una opportuna variabile diversa dalla variable nella quale è memorizzata la stringa originale.
- visualizzare la nuova frase.
#include <stdio.h>
#include <string.h>
#define DIM 100
int main()
{
char mystring [DIM+1], mystring_new[DIM+1];
int lunghezza_str, i;
printf("Inserisci la tua frase\\n");
gets(mystring);
printf("La frase inserita e' %s\\n", mystring);
lunghezza_str = strlen(mystring);
strcpy(mystring_new, mystring);
for(i = 0; i < lunghezza_str; i++)
{
if (mystring[i] == 'A' || mystring[i] == 'a')
mystring_new[i] = '4';
else if (mystring[i] == 'E' || mystring[i] == 'e')
mystring_new[i] = '3';
else if (mystring[i] == 'I' || mystring[i] == 'i')
mystring_new[i] = '1';
else if (mystring[i] == 'O' || mystring[i] == 'o')
mystring_new[i] = '0';
else if (mystring[i] == 'U' || mystring[i] == 'u')
mystring_new[i] = '8';
}
printf("La stringa con i caratteri sostituiti e' %s\\n", mystring_new);
return 0;
}
Metodo 2
#include <stdio.h>
#include <string.h>
#define DIM 100
int main()
{
char mystring [DIM+1], mystring_new[DIM+1];
int lunghezza_str, i;
printf("Inserisci la tua frase\\n");
gets(mystring);
printf("La frase inserita e' %s\\n", mystring);
lunghezza_str = strlen(mystring);
strcpy(mystring_new, mystring);
for(i = 0; i < lunghezza_str; i++)
{
switch(mystring[i])
{
case 'A':
case 'a':
mystring_new[i] = '4';
break;
case 'E':
case '3':
mystring_new[i] = '3';
break;
case 'I':
case 'i':
mystring_new[i] = '1';
break;
case 'O':
case 'o':
mystring_new[i] = '0';
break;
case 'U':
case 'u':
mystring_new[i] = '8';
break;
}
}
printf("La stringa con i caratteri sostituiti e' %s\\n", mystring_new);
return 0;
}
Esercizio 2
Scrivere un programma in C che, data una matrice di interi 5×5, richiede l’immissione dei dati da parte dell’utente (si supponga che l’utente immetta correttamente i dati). Successivamente all’immissione di tutti i valori, il programma analizza la matrice e verifica se sia o meno una matrice diagonale. Il programma visualizza il risultato attraverso un apposito messaggio. Si ricorda che una matrice diagonale è una matrice quadrata in cui solamente i valori della diagonale principale possono essere diversi da 0.
#include <stdio.h>
#define R 5
#define C 5
int main()
{
int matrix [R][C];
int i,j;
for(i=0; i < R; i++)
for(j=0; j < C; j++)
{
printf("Inserisci il valore %d, %d nella matrice\\n",i,j);
scanf("%d",&matrix[i][j]);
}
for(i = 0; i < R; i++)
for(j = 0; j < C; j++)
if(matrix[i][j] != 0)
if(i != j)
printf("La matrice non e' diagonale\\n");
printf("La matrice inserita e' diagonale\\n");
for(i = 0; i < R; i++)
{
for(j = 0; j < C; j++)
printf("%4d", matrix[i][j]);
printf("\\n");
}
return 0;
}
Esercizio 3
Data una matrice 4×4 di numeri interi, scrivere un programma in C che trovi la riga e la colonna con somma più alta e visualizzi due messaggi del tipo “La riga la cui somma degli elementi è la più alta è la riga …” e “La colonna la cui somma degli elementi è la più alta è la colonna …”. Se due righe o colonne hanno lo stessa somma, il programma visualizza quella con indice più basso.
#include <stdio.h>
#define R 4
#define C 4
int main()
{
int matrix [R][C];
int somma_colonne[C], somma_righe[R];
int i, j;
int max_righe, max_colonne, indice_righe, indice_colonne;
for(i=0; i < R; i++)
for(j=0; j < C; j++)
{
printf("Inserisci il valore %d, %d nella matrice\\n",i,j);
scanf("%d",&matrix[i][j]);
}
for(i=0; i < R; i++)
for (j=0; j < R; j++)
somma_righe[i] += matrix[i][j];
for(i=0; i < C; i++)
for (j=0; j < C; j++)
somma_colonne[i] += matrix[j][i];
max_righe = somma_righe[0];
indice_righe = 0;
max_colonne = somma_colonne[0];
indice_colonne = 0;
for(i = 0; i < R; i++)
if(max_righe < somma_righe[i])
{
max_righe = somma_righe[i];
indice_righe = i;
}
printf("La riga la cui somma degli elementi e' la più alta e' la riga %d ed e' %d\\n", indice_righe+1, max_righe);
for(i = 0; i < C; i++)
if(max_colonne < somma_colonne[i])
{
max_colonne = somma_colonne[i];
indice_colonne = i;
}
printf("La colonna la cui somma degli elementi e' la più alta e' la colonna %d ed e' %d\\n", indice_colonne+1, max_colonne);
//STAMPO LA MATRICE
for(i=0; i < R; i++)
{
for(j=0; j < C; j++)
printf("%4d", matrix[i][j]);
printf("\\n");
}
return 0;
}
Esercizio 4
Scrivere un programma in C che acquisisca una matrice di caratteri alfabetici minuscoli di dimensioni 4×5 e stampi a video il carattere che compare più volte nella matrice. Nel caso l’utente inserisca un valore non valido, il programma deve richiedere il valore fino a che non è corretto. Se più caratteri compaiono con lo stesso numero di occorrenze, il programma stampa a video quello con il codice ASCII più alto.
#include <stdio.h>
#define R 4
#define C 5
#define NUMCHAR 26 //Numero di caratteri validi
#define ASCIIBASE 97 //numero minimo ascii valido, 'a'
int main()
{
char mystring[R][C];
int i, j;
int conteggio[NUMCHAR];
int maxConteggio;
char carattereMaxConteggio;
for (i = 0; i < R; i++)
for (j = 0; j < C; j++)
do
{
printf("Inserisci il valore della matrice %d, %d\\n", i, j);
scanf("%c", &mystring[i][j]);
getchar();
if(mystring[i][j] < 'a' || mystring[i][j] > 'z')
printf("Il valore inserito non e' corretto\\n");
} while (mystring[i][j] < 'a' || mystring[i][j] > 'z');
//STAMPO LA MATRICE
for (i = 0; i < R; i++)
{
for (j = 0; j < C; j++)
printf("%4d", mystring[i][j]);
printf("\\n");
}
for (i = 0; i < NUMCHAR; i++)
conteggio[i] = 0;
for (i = 0; i < R; i++)
for (j = 0; j < C; j++)
conteggio[mystring[i][j] - ASCIIBASE]++;
maxConteggio = conteggio[0];
carattereMaxConteggio = 'a';
for (i = 1; i < NUMCHAR; i++)
if (conteggio[i] >= maxConteggio)
carattereMaxConteggio = i + ASCIIBASE;
printf("Il carattere che compare piu' volte nella matrice e' %c (%d)", carattereMaxConteggio, maxConteggio);
return 0;
}