Difference between revisions of "Esercizi di lettura di codice C"
Jump to navigation
Jump to search
m |
m |
||
Line 4: | Line 4: | ||
Ovviamente potete proporre ulteriori esempi. | Ovviamente potete proporre ulteriori esempi. | ||
+ | [[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 15:42, 10 October 2015 (CEST) | ||
== programma 0 == | == programma 0 == |
Revision as of 14:42, 10 October 2015
Questi programmi non sono necessariamente stilisticamente belli (non sono "esempi da copiare") ma presentano dei passaggi di non semplice lettura.
Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).
Ovviamente potete proporre ulteriori esempi. Renzo (talk) 15:42, 10 October 2015 (CEST)
programma 0
#include <stdio.h>
int main(int argc, char *argv[]) {
int c;
while ((c=getchar())!=EOF)
putchar(c);
return 0;
}
programma 1
#include <stdio.h>
char s1[]="hello world";
char *s2="hello world";
void foo(char *s) {
printf("%s\n",s);
s[4]=',';
printf("%s\n",s);
}
int main(int argc, char *argv[]) {
foo(s1);
foo(s2);
return 0;
}
programma 2
#include <stdio.h>
char t[]="test";
struct st {
char s[5];
char *t;
} st0={"test",t};
void foo (struct st i) {
i.s[2]='n';
i.t[2]='n';
}
void bar (struct st *i) {
i->s[2]='x';
i->t[2]='x';
}
int main(int argc, char *argv[]) {
printf("%s %s\n",st0.s,st0.t);
foo(st0);
printf("%s %s\n",st0.s,st0.t);
bar(&st0);
printf("%s %s\n",st0.s,st0.t);
return 0;
}
programma 3
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
while (argc > 1) {
int i,j;
char *s=argv[1];
for (i=0, j=strlen(s)-1; i < j; i++, j--)
s[i] ^= s[j], s[j] ^= s[i], s[i] ^= s[j];
printf("%s ",s);
argc--;
argv++;
}
printf("\n");
return 0;
}
programma 4
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct elem {
char *s;
struct elem *next;
};
struct elem *root=NULL;
void insert(char *s, struct elem **elp) {
if (*elp && strcmp((*elp)->s, s) < 0)
insert(s,&((*elp)->next));
else {
struct elem tmp={s,*elp};
struct elem *new=malloc(sizeof(struct elem));
*new=tmp;
*elp=new;
}
}
struct elem *print(struct elem *root) {
if (root) {
printf("%s ",root->s);
root->next=print(root->next);
free(root);
return NULL;
}
}
int main(int argc, char *argv[]) {
for (;argc>1;argc--,argv++)
insert(argv[1],&root);
root=print(root);
printf("\n");
return 0;
}