Stringhe, strutture e progetti su più file
Esercizi su Stringhe
Soluzione:
#include <stdio.h>
#define N 31
void scambia(char *a, char *b)
{
char aux;
aux = *a;
*a = *b;
*b = aux;
}
/* Funzione che calcola la lunghezza della stringa */
int lung(char s[])
{
int i;
/* incremento il contatore fintanto che non incontro il carattere
di terminazione */
for (i=0; s[i] != '\0'; i++);
return i;
}
void inverti2(char v[])
{
int i,l;
l = lung(v);
for (i=0; i<l/2; i++) scambia(&v[i],&v[l-i-1]);
}
main()
{
char s[N];
scanf("%s",s);
inverti2(s);
printf("\nStringa invertita: %s",s);
}
Soluzione:
Specifica: se il vettore ha lunghezza 1 termina, altrimenti, scambia
il primo elemento con l'ultimo e chiamati ricorsivamente sul vettore ridotto
(i.e., il secondo elemento
diventa il primo e il penultimo diventa l'ultimo, quindi la lunghezza
si riduce di 2).
void inverti_ricor(char s[], int ls)
{
if (ls>1){
scambia(&s[0],&s[ls-1]);
inverti_ricor(&s[1],ls-2);
}
}
/* Occorre una funzione interfaccia che calcoli la lunghezza iniziale della stringa e chiami la procedura ricorsiva */
void inverti2_ricor(char s[])
{
int ls = lung(s);
inverti_ricor(s,ls);
}
Soluzione:
void Scambia(char s[]) {
int i;
char c;
for (i=0; s[i] != '\0'; i++);
/* all'uscita dal ciclo i vale strlen(s) */
c = s[0];
s[0] = s[i-1];
s[i-1] = c;
}
Soluzione:
#include <stdio.h>
#define N 80
void concat(char s1[],char s2[], char s3[]);
main() {
char s1[N],s2[N],s3[N];
scanf("%s",s1);
scanf("%s",s2);
concat(s1,s2,s3);
printf("%s",s3);
}
/* PRIMA VERSIONE (con while)*/
void concat(char s1[],char s2[], char s3[])
{
int i=0,j=0;
while (s1[i] != '\0') s3[j++] = s1[i++];
i = 0;
while (s2[i] != '\0') s3[j++] = s2[i++];
s3[j] = '\0';
}
/* SECONDA VERSIONE (con for) */
void concat(char s1[],char s2[], char s3[])
{
int i,j;
for (i=0; s1[i] != '\0'; i++) s3[i] = s1[i];
for (j=i,i=0; s2[i] != '\0'; i++,j++) s3[j] = s2[i];
s3[j] = '\0';
}
Soluzione:
#include <stdio.h>
int VocaliDispari(char s[])
{
int i,nv=0;
for (i=0; s[i] != '\0'; i++)
if ((s[i]=='a') || (s[i]=='e') || (s[i]=='i')
|| (s[i]=='o') || (s[i]=='u')) nv++;
return ((nv%2)==1);
}
main()
{
char s[]="ettore majorana"; /* inizializzazione della stringa come
costante */
if (VocaliDispari(s) printf("In %s c'è un numero dispari
di vocali",s);
else printf("In %s c'è un numero pari di vocali (o
nessuna vocale?)",s);
}
Soluzione:
#include <stdio.h>
#define N 81
char Ultimo(char s[])
{
int i;
for (i=0; s[i] != '\0'; i++);
/* all'uscita dal ciclo la lunghezza effettiva della stringa
e' in i */
return s[i-1];
}
void main()
{
char s1[]="mare";
printf("L'ultimo carattere della stringa \"%s\" e': '%c'\n",s1,Ultimo(s1));
}
Esercizi su Strutture
Si scriva un programma in linguaggio C che tramite:
Alberani | Luigi | 30 |
Vettori | Piero | 33 |
Zanetti | Lorenzo | 18 |
stampi:
Alberani | Luigi |
Vettori | Piero |
Zanetti | Lorenzo |
Voto medio: 27.0
Soluzione:
#include <stdio.h>
Si scriva un programma in linguaggio C che tramite:
Informatica | Alberani | 25 |
Disegno | Grandi | 27 |
Matematica | Zanetti | 18 |
stampi: Disegno
Soluzione:
#include <stdio.h>
#define N 3
struct studente {
Si scriva un programma C che legga due serie di dati e li memorizzi
in due vettori di strutture. Nel primo vettore M (di dimensione 3) vengono
memorizzati dati del tipo: <matricola, nome, cognome>. Si noti che la
matricola identifica univocamente uno studente e che non ci sono due strutture
che contengono lo stesso numero di matricola.
Nel secondo vettore V (di dimensione 7) vengono memorizzati dati del tipo: <matricola, esame, voto>. Possono esserci più record con lo stesso numero di matricola che denotano diversi esami fatti dallo stesso studente.
Si scriva un programma che tramite opportune procedure legga i dati
in ingresso e li inserisca nei due vettori. Successivamente per ogni studente
con matricola X contenuto nel vettore M sommi tutti i suoi voti ottenuti
negli esami contenuti nel vettore V.
Soluzione:
#include <stdio.h>
Scrivere inoltre un main di prova che legge un vettore di interi
lambda[]
ed uno di reali v[] e li visualizza. Deve inoltre definire
un un terzo vettore di reali, alfa[],i cui elementi sono
il prodotto degli elementi omologhi dei vettori lambda[]
e v[] . Il programma visualizzi infine il vettore alfa[].
Si strutturi il programma come progetto costituito da moduli su più
file.
Soluzione:
Il progetto si compone di tre file:
- vet_io.c: file che contiene la definizione delle procedure
- vet_io.h: header file del modulo vet_io.c
- scalare.c: file contenente il main.
vet_io.c
#include <stdio.h> |
vet_io.h
void leggi_ivet(int v[], int n); |
scalare.c
#include "vet_io.h" /* vet_io.h e' nella stessa directory del main */ |