Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #11559 > unrolled thread

what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]

Started by"io_x" <a@b.c.invalid>
First post2011-10-12 09:21 +0200
Last post2011-10-12 14:52 +0100
Articles 13 — 8 participants

Back to article view | Back to comp.lang.c


Contents

  what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] "io_x" <a@b.c.invalid> - 2011-10-12 09:21 +0200
    Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] "io_x" <a@b.c.invalid> - 2011-10-12 09:59 +0200
    Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] Kleuskes & Moos <kleuske@somewhere.else.net> - 2011-10-12 09:18 +0000
      Re: what do you think on my summary on C, for 13-15 years student   in .rtf format [to cut and paste in a .rtf file] Ian Collins <ian-news@hotmail.com> - 2011-10-12 22:42 +1300
        Re: what do you think on my summary on C, for 13-15 years student   in .rtf format [to cut and paste in a .rtf file] Kleuskes & Moos <kleuske@somewhere.else.net> - 2011-10-12 09:44 +0000
      Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] "io_x" <a@b.c.invalid> - 2011-10-12 11:52 +0200
        Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] "Joachim Schmitz" <nospam.jojo@schmitz-digital.de> - 2011-10-12 14:17 +0200
          Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] "BartC" <bc@freeuk.com> - 2011-10-12 13:55 +0100
            Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] James Kuyper <jameskuyper@verizon.net> - 2011-10-12 09:10 -0400
              [OT] OpenOffice vs LibreOffice Noob <root@127.0.0.1> - 2011-10-12 15:24 +0200
                Re: [OT] OpenOffice vs LibreOffice Noob <root@127.0.0.1> - 2011-10-13 10:51 +0200
            Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] Patrick Scheible <kkt@zipcon.net> - 2011-10-12 09:35 -0700
    Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file] "BartC" <bc@freeuk.com> - 2011-10-12 14:52 +0100

#11559 — what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]

From"io_x" <a@b.c.invalid>
Date2011-10-12 09:21 +0200
Subjectwhat do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]
Message-ID<4e953f48$0$1375$4fafbaef@reader1.news.tin.it>
{\rtf1\ansi\ansicpg1252\uc1
\deff0\deflang1040\deflangfe1040{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose
02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose
02070309020205020404}Courier New;}
{\f3\froman\fcharset2\fprq2{\*\panose
05050102010706020507}Symbol;}{\f28\froman\fcharset238\fprq2 Times New Roman
CE;}{\f29\froman\fcharset204\fprq2 Times New Roman
Cyr;}{\f31\froman\fcharset161\fprq2 Times New Roman Greek;}
{\f32\froman\fcharset162\fprq2 Times New Roman
Tur;}{\f33\froman\fcharset177\fprq2 Times New Roman
(Hebrew);}{\f34\froman\fcharset178\fprq2 Times New Roman
(Arabic);}{\f35\froman\fcharset186\fprq2 Times New Roman Baltic;}
{\f44\fmodern\fcharset238\fprq1 Courier New CE;}{\f45\fmodern\fcharset204\fprq1
Courier New Cyr;}{\f47\fmodern\fcharset161\fprq1 Courier New
Greek;}{\f48\fmodern\fcharset162\fprq1 Courier New
Tur;}{\f49\fmodern\fcharset177\fprq1 Courier New (Hebrew);}
{\f50\fmodern\fcharset178\fprq1 Courier New
(Arabic);}{\f51\fmodern\fcharset186\fprq1 Courier New
Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1040\langfe1040\cgrid\langnp1040\langfenp1040 \snext0 Normal;}{\*\cs10
\additive Default Paragraph Font;}}{\info{\title LINGUAGGIO
}{\author  }{\operator  }
{\creatim\yr2011\mo10\dy12\hr9\min10}{\revtim\yr2011\mo10\dy12\hr9\min10}{\version1}{\edmins0}{\nofpages5}{\nofwords1312}{\nofchars7479}{\nofcharsws9184}{\vern8269}}\margl1134\margr1134\margt1417\margb1134
\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz283\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1134\dgvorigin1417\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule
\fet0\sectd \linex0\sectdefaultcl
{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}
{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta
.}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta
.}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}
{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl9
\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \qc
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1040\langfe1040\cgrid\langnp1040\langfenp1040 {\b LINGUAGGIO C
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\b
\par Le Parole Chiave Del Linguaggio
\par
\par }{Le seguenti parole sono riservate per il linguaggio; quindi non possono
avere altri usi in particolare nella definizione di nuove variabili.
\par
\par }{\f2\lang1033\langfe1040\langnp1033 auto         double      int
struct
\par break        else        long         switch
\par case         enum        register     typedef
\par char         extern      return       union
\par const        float       short        unsigned
\par continue     for         signed       void
\par default      goto        sizeof       volatile
\par do           if          static
    while   }{\lang1033\langfe1040\langnp1033
\par
\par }{\b I Tipi Principali e Dichiarazioni
\par
\par }{I tipi principali usati dal linguaggio sono i seguenti:
\par
\par }{\f2\lang1033\langfe1040\langnp1033 char         signed char      unsigned
char
\par int          signed int       unsigned int
\par }\pard \qj
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033              short int        short unsigned
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033              long int         long unsigned
\par float        void
\par doble        long double
\par }{\lang1033\langfe1040\langnp1033
\par }{sinonimo di "signed int"  \'e8 "int"; sinonimo di "unsigned int" \'e8
"unsigned".
\par "float", "double" e "long double", i tipi che chiamiamo tipi floating,
possono essere sinonimi
\par tra di loro; la stessa cosa vale per "char" rispettivamente con "signed
char" oppure con "unsigned char"; possono essere sinonimi tra di loro anche i
tipi "short int" "int" "long int".
\par Sono sinonimi anche "unsigned short" e "short unsigned"; "unsigned long" e
"long unsigned" ecc. Deve per\'f2 succedere che considerando gli insiemi che i
tipi definiscono
\par }{\f2
\par }{\f2\lang1033\langfe1040\langnp1033 unsigned
har  }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033  short
unsigned }{\f3\lang1033\langfe1040\langnp1033
{\field{\*\fldinst SYMBOL 205 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033  unsigned
int }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{
\f2\lang1033\langfe1040\langnp1033   long unsigned
\par signed   char  }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst
SYMBOL 205 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033  short
    }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol"
 \\s 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033
     }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033   long
int}{
\lang1033\langfe1040\langnp1033
\par }{\f2 float          }{\f3\lang1033\langfe1040\langnp1033
{\field{\*\fldinst SYMBOL 205 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2
double         }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL
205 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24}}
}{\f2  long double
\par }{
\par ove per esempio con "}{\f2 short int }{\f3\lang1033\langfe1040\langnp1033
{\field{\*\fldinst SYMBOL 205 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2
int}{" intendo che il range di definizione del tipo "}{\f2 short int}{",  \'e8
 contenuto nel range di definizione degli interi.
\par
\par Nelle macchine a 32 bit che abbiamo attualmente e con il compilatore che
usiamo i range dei tipi principali [cio\'e8 tutti i valori permessi per il tipo;
dal numero minimo al numero massimo]
\par }{\lang1033\langfe1040\langnp1033 char[-128..127]     unsigned char[0..255]
short int[-32768..32767]  unsigned short[0...65535]
int[-2147483648...2147483647]       unsigned int[0...4294967295]. }{
Notiamo che 8 bit possono descrivere i range -128..127 e 0..255, mentre i tipi
short possono avere valore descritti da 16 bit esattamente, mentre i tipi
unsigned int ed int possono avere avere valori descritti completamente da 32
bit.
\par
\par }\pard \qj
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {L'header
standard }{\f2 <limits.h>}{ descrive i range di tali tipi; per i tipi float(i
tipi con i numeri con la virgola) }{\f2 <float.h> }{\'e8
 l'header da guardare per cercare i valori minimi e massimi.
\par Osserviamo che gli interi sono numeri che possono essere anche negativi,
esempio 0  -4  3
\par mentre i tipi float contengono numeri che hanno la virgola del tipo
.123  -1.003   1.3e-4 (numero in notazione scientifica che significa
1.3*10^(-4)=0.00013 [* \'e8 il per, ^ \'e8 l'elevato a])
\par
\par Ogni variabile prima di essere usata deve essere dichiarata, per esempio se
si vuole dichiarare una variabile intera di nome var, si scriver\'e0 dopo una
qualsiasi parentesi graffa '\{' all'interno di una funzione (variabile
automatica) altrimenti se \'e8
 definita fuori da qualsiasi funzione si chiama variabile globale. Esempi di
dichiarazione:
\par }{\f2 int  var;
\par }{le dichiarazioni delle variabili si possono fare o uno per riga esempio:
\par }{\f2 int  a;
\par int  b;
\par int  c;
\par }{oppure tutte in una riga
\par }{\f2 int  a, b, c;
\par }{oppure si possono inizializzare nella definizione anche come in:
\par }{\f2 int  a=0, b=1, c=2;
\par }{nella definizione il valore da assegnare alla variabile (quello a destra)
deve stare nell'intervallo dei valori possibili per il tipo altrimenti tale
numero viene convertito in un'altro numero non uguale al primo.
I nomi delle variabili non possono iniziare per _ ne possono
\par essere parole chiavi o iniziare per E o per str nel caso si utilizzi header
<string.h>
\par Se le variabili sono globali (fuori da qualsiasi funzione) e non sono
inizializzate a un qualche valore, il loro valore assegnato dal sistema \'e8 0,
la loro accessibilit\'e0
 saranno tutte le righe seguenti; altrimenti se le variabili sono automatiche e
non sono inizializzate il loro valore \'e8 non definito (possono essere
qualsiasi numero)  la loro accessibilit\'e0 \'e8 all'interno delle parentesi
\{\} ove sono definite.

\par
\par Array
\par Si possono definire anche nomi di variabili che sono un vettore di elementi
del tipo esempio:
\par }{\f2\lang1036\langfe1040\langnp1036 int      a[128];
\par double  res[32];
\par }{la prima definizione, definisce un vettore di 128 elementi di tipo
intero, il primo di essi \'e8 a[0] il secondo \'e8 a[1], l'ultimo di essi a[127]
che sono tutti del tipo intero e ove a[i-1] \'e8  contiguo a in memoria ad a[i];
\par }{\lang1033\langfe1040\langnp1033 la stessa cosa la seconda definizione,
che definisce un vettore di double, il primo di essi \'e8 res[0] il secondo \'e8
res[1], l'ultimo di essi res[31].
\par
\par Puntatori
\par Si possono definire puntatori a dei tipi precedentemente definiti; esempio:
\par }{\f2\lang1033\langfe1040\langnp1033 int    a[100], *p, b; /* tra l'altro
definisce
\par                          il puntatore a int p
\par                       */
\par
\par p=a; /* fa puntare tale puntatore all'inizio dell'array */
\par b=p[0]; /* assegna a b l'elemento o dell'array definito */
\par p[99]=*p; /* assegna a a[99] il valore p[0]== *p
*/}{\lang1033\langfe1040\langnp1033
\par
\par Strutture
\par Si possono definire anche nomi di variabili che sono delle strutture di
elementi che possono essere altre strutture di elmenti
\par }{\b\lang1033\langfe1040\langnp1033 Operatori
\par }{\lang1033\langfe1040\langnp1033
\par Gli operatori del C sono, da chi ha precedenza maggiore a chi ha precedenza
minore:
\par (i nomi sono sotto; operatore unario significa che si applica a un solo
argomento mentre operatore binario significa che si applica a due argomenti;
\par esempio di operatore unario:  il - in  -1
\par esempio di operatore binario: il - in 3-5 o l'operatore + in a+b)
\par
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033 ()              []      ->       .
\par operatori parentesi,  accesso,  punto
\par
\par }\pard \ql
\li0\ri0\widctlpar\tx8788\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033 !  ++  --  +  -  *  &  (Tipo)  sizeof
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033 sono gli operatori unari
\par negazione logica, incremento, decremento, pi\'f9, meno, deferenzia,
indirizzo, operatore cast di tipo, operatore sizeof
\par
\par
\par *   /   %
\par operatori binari moltiplicazione, divisione, modulo
\par
\par }\pard \qj
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033 +  -
\par operatori binari somma e differenza
\par
\par <<    >>
\par operatori binari shift di sinistra e di destra
\par
\par <   <=   >     >=   !=   ==
\par operatori binari
\par minore, minore o uguale, maggiore, maggiore o uguale, diverso, uguale
\par
\par &
\par operatore binario bit a bit and
\par
\par ^
\par operatore binario bit a bit xor
\par
\par |
\par operatore binario bit a bit or
\par
\par &&
\par operatore binario and logico
\par
\par ||
\par operatore binario or logico
\par
\par ?:
\par operatore ternario condizionale
\par
\par =  +=   -=   *=   /=   %=  &=  |=  <<=   >>=
\par operatori binari di assegnamento
\par
\par ,
\par operatore binario virgola
\par }{\lang1033\langfe1040\langnp1033
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\f2\lang1033\langfe1040\langnp1033 Esempi:
\par int a[100], b; /* definisce lo spazio per 100 interi e lo
\par                   chiama a [array a]; definisce lo spazio
\par                   per un intero e lo chiama b
\par                */
\par int        *y; /* y \'e8 un puntatore a interi
\par                */
\par b=3;      /* b \'e8 uguale a tre subito dopo questa istruzione */
\par
\par /* Esempi di operatori parentesi */
\par a[0] = 2; /* il primo intero dell'array \'e8 2 */
\par a[99]=10; /* l'ultimo elemento dell'array \'e8 uguale a 10 */
\par a[7]=(a[0]+a[99])*b; /* a[7] uguale a 36 */
\par /*esempi di operatore */
\par v=a;
\par a[0]=v->
\par
\par }\pard \qj
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\lang1033\langfe1040\langnp1033
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
{\b\lang1033\langfe1040\langnp1033 Le parole chiave "if", "else if"  ed "else"
\par }{\b
\par }\pard \ql
\li240\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin240\itap0 {\f2
0  [zero]                  \'e8 il valore booleano }{\b\f2 FALSO}{\f2
\par   un numero diverso da zero: \'e8 il valore booleano }{\b\f2 VERO}{\f2
\par
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\f2
==  si legge "\'e8 uguale ad"
\par     !=  si legge "\'e8 diverso da"
\par     <   si legge "\'e8 minore di"
\par     <=  si legge "\'e8 minore o uguale"
\par     >   si legge "\'e8 maggiore di"
\par     >=  si legge "\'e8 maggiore oppure uguale a"
\par
\par     Se relazione \'e8 uno qualsiasi dei simboli "== != < <= > >="
\par     allora (op1 relazione op2) ritorna 1 (VERO) se la relazione
\par     tra gli operandi op1 e op2 \'e8 vera, 0 (FALSO) altrimenti.
\par
\par     Esempio:   (1<3) ritorna il valore 1 (vero),
\par             ma (1>3) ritorna il valore 0 (falso)
\par
\par     &&  si legge "e"  oppure "and"
\par     ||  si legge "o\\oppure"  oppure "or"
\par }{
\par in particolare
\par         }{\f2 (2<=a && a< 3)}{ si legge  "se due \'e8 minore o uguale
ad }{\f2 a}{, }{\b e}{ }{\f2 a}{ \'e8 minore di 3"
\par                        (in altre parole }{\f2 a}{ \'e8 compreso tra 2 e 3;
due compreso, tre non compreso
\par                        l'espressione di sopra risulta vera altrimenti
risulta falsa)
\par
\par          (}{\f2 2<=a || a==7}{)  si legge "se due \'e8 minore o uguale
ad }{\f2 a}{ }{\b oppure}{ }{\f2 a}{ \'e8 uguale a 7"
\par                     (in altre parole se }{\f2 a}{  \'e8 un numero intero
non negativo, allora per }{\f2 a}{ }{\f3\lang1024\langfe1024\noproof
{\field{\*\fldinst SYMBOL 206 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\{0, 1,
2, 7\}
\par                       l'espressione di sopra risulta vera mentre per gli
altri valori di }{\f2 a }{risulta falsa)
\par
\par Le parole "}{\f2 if}{" ed "}{\f2 else}{" sono riservate al linguaggio e un
costrutto del tipo:
\par
\par }{\f2 if(condizione1)       istruzione1;
\par else if(condizione2)  istruzione2;
\par else                  istruzione3;
\par }{
\par funziona nel seguente modo:
\par se condizione1 ha valore boleano vero: si esegue l'istruzione1 e si esce
dal costrutto.
\par se condizione1 \'e8 falsa
\par         se condizione2 \'e8 vera: si esegue l'istruzione2 e si esce dal
costrutto
\par         se condizione2 \'e8 falsa: si esegue l'istruzione3 e si esce dal
costrutto.
\par analogamente
\par
\par }{\f2 if(condizione1)       istruzione1;
\par else                  istruzione3;
\par }{
\par funziona nel seguente modo:
\par se condizione1 ha valore boleano vero: si esegue l'istruzione1 e si esce
dal costrutto;
\par se condizione1 \'e8 falsa si esegue l'istruzione3 e si esce dal costrutto.
\par
\par Analogamente per tutte le altre combinazione if(), else if, else.
\par }\pard \qj
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {
\par }\pard \ql
\li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {
\par }}



[toc] | [next] | [standalone]


#11562

From"io_x" <a@b.c.invalid>
Date2011-10-12 09:59 +0200
Message-ID<4e954816$0$1384$4fafbaef@reader1.news.tin.it>
In reply to#11559
I found one other file with + pages
-------------------------------------
{\rtf1\ansi\ansicpg1252\uc1
\deff0\deflang1040\deflangfe1040{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose
02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose
02070309020205020404}Courier New;}
{\f3\froman\fcharset2\fprq2{\*\panose
05050102010706020507}Symbol;}{\f29\froman\fcharset238\fprq2 Times New Roman
CE;}{\f30\froman\fcharset204\fprq2 Times New Roman
Cyr;}{\f32\froman\fcharset161\fprq2 Times New Roman Greek;}
{\f33\froman\fcharset162\fprq2 Times New Roman
Tur;}{\f34\froman\fcharset177\fprq2 Times New Roman
(Hebrew);}{\f35\froman\fcharset178\fprq2 Times New Roman
(Arabic);}{\f36\froman\fcharset186\fprq2 Times New Roman Baltic;}
{\f45\fmodern\fcharset238\fprq1 Courier New CE;}{\f46\fmodern\fcharset204\fprq1
Courier New Cyr;}{\f48\fmodern\fcharset161\fprq1 Courier New
Greek;}{\f49\fmodern\fcharset162\fprq1 Courier New
Tur;}{\f50\fmodern\fcharset177\fprq1 Courier New (Hebrew);}
{\f51\fmodern\fcharset178\fprq1 Courier New
(Arabic);}{\f52\fmodern\fcharset186\fprq1 Courier New
Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
\ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \snext0
Normal;}{\s1\qc \li0\ri0\keepn\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext0 heading 1;}{\s2\ql
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext0
heading 2;}{\s3\ql \li0\ri0\keepn\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext0 heading 3;}{\s4\qj
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}{\s15\ql
\li0\ri0\nowidctlpar\tqc\tx4819\tqr\tx9638\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext15 footer;}{\*\cs16 \additive \sbasedon10 page number;}{\s17\qj
\li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext17 Body Text;}{\*\cs18 \additive \b \sbasedon10 Strong;}{\s19\qj
\li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs22\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 \sbasedon0
\snext19 Body Text 2;}}{\info{\title CENNI  SUL  LINGUAGGIO
C}{\author  }{\operator  }{\creatim\yr2011\mo10\dy12\hr9\min54}{\revtim\yr2011\mo10\dy12\hr9\min54}{\version2}
{\edmins0}{\nofpages11}{\nofwords2645}{\nofchars15078}{\nofcharsws18516}{\vern8269}}\paperw11905\paperh16837\margl1360\margr1360\margt1133
\widowctrl\ftnbj\aendnotes\hyphhotz283\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3
\jcompress\viewkind1\viewscale100 \fet0{\*\docvar {ColorPos}{-1}}{\*\docvar
{ColorSet}{-1}}{\*\docvar {StylePos}{-1}}{\*\docvar {StyleSet}{-1}}{\*\ftnsep
\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\chftnsep
\par }}{\*\ftnsepc \pard\plain \ql
\li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\chftnsepc
\par }}{\*\aftnsep \pard\plain \ql
\li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\chftnsep
\par }}{\*\aftnsepc \pard\plain \ql
\li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\chftnsepc
\par }}\sectd \pgnrestart\linex0\footery864\titlepg\sectdefaultcl {\footer
\pard\plain \s15\ql
\li0\ri0\nowidctlpar\tqc\tx4819\tqr\tx9638\pvpara\phmrg\posxc\posy0\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{\field{\*\fldinst {\cs16 PAGE  }}{\fldrslt {\cs16\lang1024\langfe1024\noproof
11}}}{\cs16
\par }\pard \s15\ql
\li0\ri0\nowidctlpar\tqc\tx4819\tqr\tx9638\nooverflow\faauto\rin0\lin0\itap0 {
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta
.}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta
.}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta
.}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl8
\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb
(}{\pntxta )}}\pard\plain \qc
\li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\b\fs24 CENNI
SUL  LINGUAGGIO  C
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\b\fs24
\par Le Parole Chiave Del Linguaggio
\par
\par }{\fs24 Le seguenti parole sono riservate per il linguaggio; quindi non
possono avere altri usi in particolare nella definizione di nuove variabili.
\par
\par }{\f2\fs24\lang1033\langfe1040\langnp1033 auto         double      int
struct
\par break        else        long         switch
\par case         enum        register     typedef
\par char         extern      return       union
\par const        float       short        unsigned
\par continue     for         signed       void
\par default      goto        sizeof       volatile
\par do           if          static
    while   }{\fs24\lang1033\langfe1040\langnp1033
\par
\par }{\b\fs24 I Tipi Principali e Dichiarazioni
\par
\par }{\fs24 I tipi principali usati dal linguaggio [con cui si definiscono le
variabili] sono i seguenti:
\par
\par }{\f2\fs24\lang1033\langfe1040\langnp1033 char         signed char
unsigned char
\par int          signed int       unsigned int
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
{\f2\fs24\lang1033\langfe1040\langnp1033              short int        short
unsigned
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
{\f2\fs24\lang1033\langfe1040\langnp1033              long int         long
unsigned
\par float        void
\par doble        long double
\par }{\fs24\lang1033\langfe1040\langnp1033
\par }{\fs24 sinonimo di "signed int"  \'e8 "int"; sinonimo di "unsigned int"
\'e8 "unsigned".
\par "float", "double" e "long double", i tipi che chiamiamo tipi floating,
possono essere sinonimi
\par tra di loro; la stessa cosa vale per "char" rispettivamente con "signed
char" oppure con "unsigned char"; possono essere sinonimi tra di loro anche i
tipi "short int" "int" "long int".
\par Sono sinonimi anche "unsigned short" e "short unsigned"; "unsigned long" e
"long unsigned" ecc. Deve per\'f2 succedere che considerando gli insiemi che i
tipi definiscono
\par }{\f2\fs24
\par }{\f2\fs24\lang1033\langfe1040\langnp1033 unsigned
har  }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24\lang1033\langfe1040\langnp1033
short unsigned }{
\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24\lang1033\langfe1040\langnp1033
unsigned int }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL
205 \\f "Symbol"
 \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24\lang1033\langfe1040\langnp1033   long
unsigned
\par signed   char  }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst
SYMBOL 205 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{\f2\fs24\lang1033\langfe1040\langnp1033  short
    }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL
 205 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{\f2\fs24\lang1033\langfe1040\langnp1033
     }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24\lang1033\langfe1040\langnp1033
  long int}{\fs24\lang1033\langfe1040\langnp1033
\par }{\f2\fs24 float          }{\f3\fs24\lang1033\langfe1040\langnp1033
{\field{\*\fldinst SYMBOL 205 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24
double         }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst
SYMBOL 205 \\f "Symbol"
 \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24  long double
\par }{\fs24
\par ove per esempio con "}{\f2\fs24 short
int }{\f3\fs24\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
"Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\fs24  int}{\fs24 " intendo che l\rquote
insieme di tutti i numeri di tipo "}{\f2\fs24 short int}
{\fs24 ",  \'e8 contenuto nell\rquote insieme di tutti i numeri ti tipo
"}{\f2\fs24 int}{\fs24 " .
\par
\par Nelle macchine a 32 bit che abbiamo attualmente e con il compilatore che
usiamo i range dei tipi principali [cio\'e8 tutti i valori permessi per il tipo;
dal numero minimo al numero massimo]
\par }{\fs24\lang1033\langfe1040\langnp1033 char[-128..127]     unsigned
char[0..255]    short int[-32768..32767]  unsigned short[0...65535]
int[-2147483648...2147483647]       unsigned int[0...4294967295]. }{\fs24
Notiamo che 8 bit possono descrivere i range -128..127 e 0..255, mentre i tipi
short possono avere valore descritti da 16 bit esattamente, mentre i tipi
unsigned int ed int possono avere avere valori descritti completamente da 32
bit.
\par
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\fs24
L'header standard }{\f2\fs24 <limits.h>}{\fs24  descrive i range di tali tipi;
per i tipi float(i tipi con i numeri con la virgola) }{\f2\fs24
<float.h> }{\fs24 \'e8
 l'header da guardare per cercare i valori minimi e massimi.
\par Osserviamo che gli interi \'93int\'94 sono numeri che possono essere anche
negativi, esempio 0  -4  3 mentre i tipi float contengono numeri che hanno la
virgola del tipo 2.123  -1.003   1.3e-4 (numero in notazione scientifica
1.3*10^(-4)=0.00013 [* \'e8
 il per, ^ \'e8 l'elevato a])
\par
\par Ogni variabile prima di essere usata deve essere dichiarata, per esempio se
si vuole dichiarare una variabile intera di nome var, si scriver\'e0 dopo una
qualsiasi parentesi graffa '\{' all'interno di una funzione (variabile
automatica) altrimenti se \'e8
 definita fuori da qualsiasi funzione si chiama variabile globale. Esempi di
dichiarazione che deve finire sempre con il \lquote ;\rquote :
\par }{\f2\fs24 int  var;
\par }{\fs24 le dichiarazioni delle variabili si possono fare o uno per riga
esempio:
\par }{\f2\fs24 int  a;
\par int  b;
\par int  c;
\par }{\fs24 oppure tutte in una riga
\par }{\f2\fs24 int  a, b, c;
\par }{\fs24 oppure si possono inizializzare nella definizione anche come in:
\par }{\f2\fs24 int  a=0, b=1, c=2;
\par }{\fs24 nella definizione il valore da assegnare alla variabile (quello a
destra) deve stare nell'intervallo dei valori possibili per il tipo altrimenti
tal
e numero viene convertito in un'altro numero non uguale al primo. I nomi delle
variabili devono usare caratteri alfanumerici [a-z, A-Z, 0,1,2,3,4,5,6,7,8,9,
_ ] dove le parole con lettere maiuscole sono diverse dalle parole con le stesse
lettere ma minusc
ole. I nomi di variabile non possono iniziare per _ ne possono essere parole
chiavi o iniziare per E o per str nel caso si utilizzi header <string.h>.
\par Se le variabili sono globali (fuori da qualsiasi funzione) e non sono
inizializzate a un qualche valore, il loro valore assegnato dal sistema \'e8 0,
la loro accessibilit\'e0
 saranno tutte le righe seguenti; altrimenti se le variabili sono automatiche e
non sono inizializzate il loro valore \'e8 non definito (possono essere
qualsiasi numero)  la loro accessibilit\'e0 \'e8 all'interno delle parentesi
\{\}
 ove sono definite. Il tipo \'93}{\f2\fs24 void}{\fs24 \'94 \'e8 un tipo
particolare, che si pu\'f2 usare come tipo per un puntatore generale a qualsiasi
tipo (}{\f2\fs24 void*}{\fs24 ).
\par
\par
\par }\pard\plain \s4\qj
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel3\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {Commenti
\par }\pard\plain \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 I
commenti del linguaggio C [le scritture che servono a noi per capire il progra
mma e non definiscono nessuna azione che il programma deve fare] iniziano con
\'93/*\'94 e finiscono con \'93*/\'94.
\par Se supportato vi \'e8 anche un tipo di commento che comincia con la coppia
di caratteri \'93//\'94 e finisce quando finisce la riga.
\par Esempi di commenti:
\par Commento a pi\'f9 linee:
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
int a[100], b; /* definisce lo spazio per 100 interi e lo
\par                   chiama a [array a]; definisce lo spazio
\par                   per un intero e lo chiama b
\par
\par                */
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\fs24
Commento a una linea:
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
int        *y; // y \'e8 un puntatore a interi}{\fs24
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\fs24
\par }{\b\fs24 Operatori
\par }{\fs24
\par La precedenza tra gli operatori descrive quale operatore viene eseguito
prima se tutti gli operatori si trovano in uno stesso livello di parentesi:
esempio in 4+3*2=4+(3*2)=10 perch\'e9 il * ha precedenza maggiore rispetto
 al + (altrimenti il calcolo farebbe (4+3)*2=14).
\par
\par Gli operatori del C sono, da chi ha precedenza maggiore a chi ha precedenza
minore:
\par (i nomi sono sotto; operatore }{\b\fs24 unario}{\fs24  significa che si
applica a un solo argomento mentre operatore }{\b\fs24 binario}{\fs24  significa
che si applica a due argomenti;
\par esempio di operatore unario:  il - in  -1
\par esempio di operatore binario: il - in 3-5 o l'operatore + in a+b)
\par
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
Siano i, j, a, b, interi non negativi quindi: unsigned int
\par ()              []      ->       .
\par operatori parentesi,  accesso,  punto
\par
\par }\pard \ql \li0\ri0\nowidctlpar\tx8788\nooverflow\faauto\rin0\lin0\itap0
{\f2\fs24 !  ++  -- ++postfisso --postfisso +  -  *  &  (Tipo)  sizeof
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
sono gli operatori unari
\par negazione logica, incremento, decremento, pi\'f9, meno, deferenzia,
indirizzo, operatore cast di tipo, operatore sizeof
\par Esempi:
\par !0 [ritorna 1] !1 [ritorna 0] !8 [ritorna 0]
\par ++i[incrementa il valore di i di 1 e ritorna i+1]
\par --i[decrementa di uno il valore di i e ritorna i-1]
\par &i [ritorna un puntatore all\rquote indirizzo di memoria dove \'e8 i]
\par sizeof(int) [ritorna quanti char sono contenuti in un int]
\par
\par *   /   %
\par operatori binari moltiplicazione, divisione, modulo
\par Esempio:
\par 34%2 [ritorna 34 modulo 2 == 0]
\par
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
+  -
\par operatori binari somma e differenza
\par
\par <<    >>
\par operatori binari shift di sinistra e di destra
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
Esempi:
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
16<<i [ritorna 16*2^i]
\par 16>>i [ritorna 16/2^i]
\par
\par <   <=   >     >=   !=   ==
\par operatori binari
\par minore, minore o uguale, maggiore, maggiore o uguale, diverso, uguale
\par
\par &
\par operatore binario bit a bit and
\par Esempio:
\par 3&2  }{\fs24 [ritorna 2 perch\'e9 in binario 11&10=10 [3decimale=11binario
2decimale=10binario] ]
\par }{\f2\fs24
\par ^
\par operatore binario bit a bit xor
\par
\par |
\par operatore binario bit a bit or
\par
\par &&
\par operatore binario and logico
\par Esempio:
\par 1 && 0 [ritorna 0]
\par
\par ||
\par operatore binario or logico
\par
\par ?:
\par operatore ternario condizionale
\par Esempio:
\par i?0:12 [se i \'e8 diverso da zero ritorna 0 altrimenti ritorna 12]
\par
\par =  +=   -=   *=   /=   %=  &=  |=  <<=   >>=
\par operatori binari di assegnamento
\par esempi:
\par a+=b; [equivale ad a=a+b;]
\par a-=b; [equivale ad a=a-b;]
\par a=(i=5); [equivale a i=5; a=5;]
\par
\par ,
\par operatore binario virgola
\par Esempio:
\par i=(++j, 0); [incrementa j di uno e assegna 0 a i]}{\fs24
\par
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
Altri Esempi:
\par int a[100], b; /* definisce lo spazio per 100 interi e lo
\par                   chiama a [array a]; definisce lo spazio
\par                   per un intero e lo chiama b
\par                */
\par
\par int        *y; /* y \'e8 un puntatore a interi
\par                */
\par b=3;      /* b \'e8 uguale a tre subito dopo questa istruzione */
\par
\par /* Esempi di operatori parentesi */
\par a[0] = 2; /* il primo intero dell'array \'e8 2 */
\par a[99]=10; /* l'ultimo elemento dell'array \'e8 uguale a 10 */
\par a[7]=(a[0]+a[99])*b; /* a[7] uguale a 36 */
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\fs24
\par }\pard\plain \s4\qj
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel3\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {Array
\par }\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\fs24 Si
possono definire anche nomi di variabili che sono un vettore di elementi del
tipo esempio:
\par }{\f2\fs24\lang1036\langfe1040\langnp1036 int      a[128];
\par double  res[32];
\par }{\fs24 la prima definizione, definisce un vettore di 128 elementi di tipo
intero, il primo di essi \'e8 a[0] il secondo \'e8 a[1], l'ultimo di essi a[127]
che sono tutti del tipo intero e ove a[i-1] \'e8  contiguo a in memoria ad a[i];
\par la stessa cosa la seconda definizione, che definisce un vettore di double,
il primo di essi \'e8 res[0] il secondo \'e8 res[1], l'ultimo di essi res[31].
\par
\par }\pard\plain \s4\qj
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel3\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {Puntatori
\par }\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {
\par }\pard \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\fs24 Si
possono definire puntatori a dei tipi definiti; esempio:
\par
\par }{\f2\fs24 int    a[100], *p, b; /* tra l'altro definisce
\par                          il puntatore a int p
\par                       */
\par
\par p=a; /* fa puntare tale puntatore all'inizio dell'array
\par         di 100 elementi
\par      */
\par b=p[0];   /* assegna a b l'elemento o dell'array a[0] */
\par p[99]=*p; /* assegna a a[99] il valore p[0] stessa cosa di *p
\par              poich\'e9 per definizione *p=*(p+0)=p[0]    */}{\fs24
\par
\par Notare come se i \'e8 un intero che appartiene a 0..99 allora p[i] \'e8 lo
stesso valore di a[i]; notare anche che poich\'e9
 abbiamo riservato in memoria 100 interi; sono definite e si possono usare gli
elementi da a[0] a a[99], da p[0] a p[99]; se si esce fuori da questi valori il
programma potrebbe esegui
re delle istruzioni speciali atte alla terminazione con errore del programma
stesso (segmentation fault nel sistema operativo windows).
\par
\par }\pard\plain \s4\qj
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel3\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {Strutture
\par }\pard\plain \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\b\fs24
\par }\pard\plain \s19\qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs22\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 Una
struttura \'e8 un insieme ordinato che contiene una o pi\'f9
 variabile, ed genera un nuovo tipo. Per definire una struttura si usa la parola
chiave struct ed una lista di dichiarazioni tra parentesi graffe, terminate da
un punto e virgola.
\par }\pard\plain \qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 Nasce
cos\'ec un nuovo tipo che ha come elementi quelli della lista di dichiarazioni,
e nome "struct nome"}{
\fs24
\par Esempio:
\par }{\f2\fs24 struct point\{
\par     }{\f2\fs24\lang1036\langfe1040\langnp1036 int  x;
\par     int  y;
\par }{\f2\fs24 \};
\par }\pard\plain \s17\qj \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {definisce un
nuovo tipo di nome \'93}{\f2 struct point}{\'94 che ha come elementi gli interi
x e y;
\par \'93}{\f2 struct point  a;}{\'94 fa nascere lo spazio di memoria
correttamente allineato atto a contenere due interi (x e y) e assegna a tale
spazio il nome }{\f2 a}{.
\par Definito  }{\f2 a}{  gli elementi di a x, y sono accessibili mediante le
scritture \'93}{\f2 a.x}{\'94 ed  \'93}{\f2 a.y}{\'94, se abbiamo \'93}{\f2
struct point  *ap;}{\'94 ed \'93}{\f2 ap=&a;}{\'94
\par gli elementi x e y sono accessibili tramite ap con \'93}{\f2 ap->x ed
ap->y}{\'94 oppure con le equivalenti scritture \'93(*}{\f2 ap).x ed
(*ap).y}{\'94
\par La parola chiave typedef  crea nuovi nomi per i tipi gi\'e0 esistenti per
vedere il suo uso vedere l\rquote esempio di sotto.
\par
\par }{\b Funzioni
\par }{
\par Una funzione ha la seguente forma:
\par
\par tipoRitornato    nomeDiFunzione(Dichiarazione_i   argomento_i)
\par \{dichiarazioni di variabili
\par   istruzioni
\par \}
\par
\par la funzione minimale \'e8 la seguente:
\par minimaf()\{\}
\par Ogni funzione viene chiamata usando il proprio nome, le parentesi tonde e i
parametri.
\par Per esempio: nomeDiFunzione(argomento_i).
\par
\par L\rquote istruzione return \'e8 il meccanismo che consente alla funzione
chiamata di restituire un valore alla funzione chiamante. Una funzione si deve
mettere nello stesso file di codice in cui vi \'e8 la funzione che la chiama, ma
prima; oppure si pu
\'f2 mettere dopo oppure si pu\'f2 mettere in un altro file a patto che sia
visibile la definizione della funzione stessa che nel caso in esempio \'e8:
\par tipoRitornato    nomeDiFunzione(Dichiarazione_i   argomento_i);
\par che di solito sta negli header [quei file che finiscono con .h]
\par
\par Esempio completo su strutture e funzioni:
\par }{\f2
\par #include <stdio.h>
\par
\par /* Definisce il punto */
\par struct punto\{
\par   }{\f2\lang1036\langfe1040\langnp1036 int   x;
\par   int   y;
\par \};
\par
\par /* ^
\par    |    ___________ pn1
\par    |   |           |
\par    |   |           |
\par    |   |___________|
\par    |  pn2
\par    |________________________
\par
\par */
\par
\par }{\f2 /* definisce un rettangolo */
\par }{\f2\lang1036\langfe1040\langnp1036 struct rettangolo\{
\par   }{\f2 struct punto   pn1;
\par   struct punto   pn2;
\par \};
\par
\par
\par /* Funzione che stampa le coordinate x e y
\par    sullo schermo oppure errore;
\par    L\rquote argomento di questa funzione \'e8 un puntatore a
\par    \'93struct punto\'94 e ritorna niente [void]
\par */
\par void  printPunto(struct punto*  p)
\par }{\f2\lang1036\langfe1040\langnp1036 \{int   gx, gy;
\par
\par  if(p)\{gx=(*p).x; gy=(*p).y; // (*p).x==p->x
\par        printf("x=%d  y=%d\\n", gx, gy);
\par       }{\f2 \}
\par  else  printf("Errore\\n");
\par \}
\par
\par /* Funzione che ha come argomenti un puntatore a struct punto,
\par    un intero e un altro intero; ritorna un intero alla funzione
\par    chiamante.*/
\par int  inizializzaPunto(struct punto* p, int  x, int  y)
\par }{\f2\lang1033\langfe1040\langnp1033 \{
\par  if(p==0) return 0;
\par  p->x=x;
\par  }{\f2\lang1036\langfe1040\langnp1036 p->y=y;
\par  }{\f2 return 1;
\par \}
\par
\par /* typedef  crea nuovi nomi per i tipi gi\'e0 esistenti
\par    per esempio
\par    typedef  struct punto       puntoDef;
\par    fa nascere un nome "puntoDef"
\par    che quando si usa \'e8 come se si usasse
\par    "struct punto"
\par */
\par typedef  struct punto       puntoDef;
\par typedef  struct rettangolo  rettangoloDef;
\par
\par /* La funzione main() \'e8 la funzione con cui inizia il programma; nel
caso in esame la prima istruzione ad essere eseguita dal programma dopo la
chiamata del main, \'e8
 il riservare lo spazio di memoria per le variabili e successivamente chiamare
la funzione printPunto.
\par */
\par }{\f2\lang1036\langfe1040\langnp1036 int  main(void)
\par }{\f2 \{
\par  struct punto  p1, p2, *pp;
\par  struct rettangolo  r1, *r;
\par  puntoDef         p3, *ppd;
\par
\par  printPunto(&p1); /* chiama la funzione printPunto
\par                      con parametro &p1, ove
\par                      &p1 \'e8 un puntatore a p1,
\par                      ha in se l\rquote indirizzo in memoria di p1
\par                   */
\par  }{\f2\lang1036\langfe1040\langnp1036 p1.x=3; p1.y= -8;
\par  }{\f2 printPunto(&p1);
\par  inizializzaPunto(&p1, 90, -88);
\par  printPunto(&p1);
\par
\par  return  0;
\par \}
\par }\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{\b\fs24\lang1033\langfe1040\langnp1033
\par Le parole chiavi "if", "else if"  ed "else"
\par
\par }\pard \ql \li240\ri0\nowidctlpar\nooverflow\faauto\rin0\lin240\itap0
{\f2\fs24\lang1033\langfe1040\langnp1033   }{\f2\fs24 0  [zero]
\'e8 il valore booleano }{\b\f2\fs24 FALSO}{\f2\fs24
\par   un numero diverso da zero: \'e8 il valore booleano }{\b\f2\fs24
VERO}{\f2\fs24
\par
\par }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0 {\f2\fs24
==  si legge "\'e8 uguale ad"
\par     !=  si legge "\'e8 diverso da"
\par     <   si legge "\'e8 minore di"
\par     <=  si legge "\'e8 minore o uguale"
\par     >   si legge "\'e8 maggiore di"
\par     >=  si legge "\'e8 maggiore oppure uguale a"
\par
\par     Se relazione \'e8 uno qualsiasi dei simboli "== != < <= > >="
\par     allora (op1 relazione op2) ritorna 1 (VERO) se la relazione
\par     tra gli operandi op1 e op2 \'e8 vera, 0 (FALSO) altrimenti.
\par
\par     Esempio:   (1<3) ritorna il valore 1 (vero),
\par             ma (1>3) ritorna il valore 0 (falso)
\par
\par     &&  si legge "e"  oppure "and"
\par     ||  si legge "o\\oppure"  oppure "or"
\par
\par }\pard\plain \s2\ql
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel1\rin0\lin0\itap0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{                   Tavola di verit\'e0 per &&
\par }\trowd \trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10
\trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3 \clvertalt
\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\pard\plain
\qc \li0\ri0\nowidctlpar\intbl\nooverflow\faauto\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24
&&\cell }\pard\plain \s1\qc
\li0\ri0\keepn\nowidctlpar\intbl\nooverflow\faauto\outlinelevel0\rin0\lin0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{VERO[}{{\field{\*\fldinst SYMBOL 185 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{0]\cell FALSO[0]\cell }\pard\plain \ql
\li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 \trowd
\trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10
\trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896
\row }\trowd \trgaph70\trrh296\trleft1124\trbrdrt\brdrs\brdrw10
\trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3 \clvertalt
\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\pard\plain
\s1\qc
\li0\ri0\keepn\nowidctlpar\intbl\nooverflow\faauto\outlinelevel0\rin0\lin0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{VERO[}{{\field{\*\fldinst SYMBOL 185 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{0]\cell VERO  [1]\cell
FALSO  [0]\cell }\pard\plain \ql
\li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 \trowd
\trgaph70\trrh296\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl
\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\row }\trowd
\trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh
\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257 \cellx3381
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx5638\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\pard\plain \s1\qc
\li0\ri0\keepn\nowidctlpar\intbl\nooverflow\faauto\outlinelevel0\rin0\lin0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{\lang1031\langfe1040\langnp1031 FALSO[0]\cell
FALSO [0]\cell FALSO  [0]\cell }\pard\plain \ql
\li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{\fs24\lang1031\langfe1040\langnp1031 \trowd
\trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10
\trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt
\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\row }\pard
\ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
{\fs24\lang1031\langfe1040\langnp1031
\par
\par }\pard\plain \s2\ql
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel1\rin0\lin0\itap0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{                  Tavola di verit\'e0 per | |
\par }\trowd \trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10
\trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3 \clvertalt
\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\pard\plain
\qc \li0\ri0\nowidctlpar\intbl\nooverflow\faauto\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 |
|\cell }\pard\plain \s1\qc
\li0\ri0\keepn\nowidctlpar\intbl\nooverflow\faauto\outlinelevel0\rin0\lin0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{VERO[}{{\field{\*\fldinst SYMBOL 185 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{0]\cell FALSO[0]\cell }\pard\plain \ql
\li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 \trowd
\trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10
\trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896
\row }\trowd \trgaph70\trrh296\trleft1124\trbrdrt\brdrs\brdrw10
\trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3 \clvertalt
\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\pard\plain
\s1\qc
\li0\ri0\keepn\nowidctlpar\intbl\nooverflow\faauto\outlinelevel0\rin0\lin0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040
{VERO[}{{\field{\*\fldinst SYMBOL 185 \\f "Symbol" \\s
12}{\fldrslt\f3\fs24}}}{0]\cell VERO [1]\cell
VERO  [1]\cell }\pard\plain \ql
\li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 \trowd
\trgaph70\trrh296\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl
\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx3381\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\row }\trowd
\trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh
\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257 \cellx3381
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2257
\cellx5638\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2258 \cellx7896\pard\plain \s1\qc
\li0\ri0\keepn\nowidctlpar\intbl\nooverflow\faauto\outlinelevel0\rin0\lin0
\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {FALSO[0]\cell
VERO [1]\cell FALSO [0]\cell
}\pard\plain \ql
\li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24 \trowd
\trgaph70\trrh281\trleft1124\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
\trbrdrb
\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10
\trbrdrv\brdrs\brdrw10
\trftsWidth1\trautofit1\trpaddl70\trpaddr70\trpaddfl3\trpaddfr3
\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
\clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx3381\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
\cltxlrtb\clftsWidth3\clwWidth2257 \cellx5638\clvertalt\clbrdrt\brdrs\brdrw10
\clbrdrl\brdrs\brdrw10
\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2258
\cellx7896\row }\pard \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
{\fs24
\par
\par dove && oppure | | hanno come parametri valori falsi [numero 0] oppure
valori veri [numeri diversi da zero] e ritornano 0 per falso, 1 per vero; in
particolare:
\par         }{\f2\fs24 (2<=a && a< 3)}{\fs24  si legge  "se due \'e8 minore o
uguale ad }{\f2\fs24 a}{\fs24 , }{\b\fs24 e}{\fs24  }{\f2\fs24 a}{\fs24  \'e8
minore di 3"
\par                        (in altre parole }{\f2\fs24 a}{\fs24  \'e8 compreso
tra 2 e 3; due compreso, tre non compreso
\par                        l'espressione di sopra risulta vera altrimenti
risulta falsa)
\par
\par          (}{\f2\fs24 2<=a || a==7}{\fs24 )  si legge "se due \'e8 minore o
uguale ad }{\f2\fs24 a}{\fs24  }{\b\fs24 oppure}{\fs24  }{\f2\fs24 a}{\fs24
\'e8 uguale a 7"
\par                     (in altre parole se }{\f2\fs24 a}{\fs24   \'e8 un
numero intero non negativo, allora per }{\f2\fs24
}{\fs24  }{\f3\fs24\lang1024\langfe1024\noproof {\field{\*\fldinst SYMBOL 206
\\f "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\fs24 \{
0, 1, 2, 7\}
\par                       l'espressione di sopra risulta vera mentre per gli
altri valori di }{\f2\fs24 a }{\fs24 risulta falsa)
\par
\par Le parole "}{\f2\fs24 if}{\fs24 " ed "}{\f2\fs24 else}{\fs24 " sono
riservate al linguaggio e un costrutto del tipo:
\par
\par }{\f2\fs24 if(condizione1)       istruzione1;
\par else if(condizione2)  istruzione2;
\par else                  istruzione3;
\par }{\fs24
\par funziona nel seguente modo:
\par se condizione1 ha valore booleano vero: si esegue l'istruzione1 e si esce
dal costrutto.
\par se condizione1 \'e8 falsa
\par         se condizione2 \'e8 vera: si esegue l'istruzione2 e si esce dal
costrutto
\par         se condizione2 \'e8 falsa: si esegue l'istruzione3 e si esce dal
costrutto.
\par analogamente
\par
\par }{\f2\fs24 if(condizione1)       istruzione1;
\par else                  istruzione3;
\par }{\fs24
\par funziona nel seguente modo:
\par se condizione1 ha valore booleano vero: si esegue l'istruzione1 e si esce
dal costrutto;
\par se condizione1 \'e8 falsa si esegue l'istruzione3 e si esce dal costrutto.
\par
\par Analogamente per tutte le altre combinazione if(), else if, else.
\par
\par }\pard\plain \s3\ql
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel2\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {If e goto
\par }\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24
\par Il linguaggio C ha la parola riservata goto;  esso si utilizza in coppia
con un nome finito da due punti che si chiama label.
\par il goto si pu\'f2 utilizzare in due modi o con la if come il seguente
esempio:
\par
\par }{\f2\fs24 lab:  istruzione_1;
\par       istruzione_2;
\par            \'85
\par       istruzione_n;
\par       if(condizione)  goto  lab;
\par }{\fs24
\par dove si eseguono le istruzioni 1,2, \'85 , n
\par se condizione \'e8 vera va a lab e ricalcola le istruzioni 1,2,\'85,n;
altrimenti esce.
\par Il goto si pu\'f2 utilizzare anche senza if come in \'93goto label_z\'94
qui sotto:
\par
\par }{\f2\fs24           goto label_z;
\par label_x:  istruzione;
\par label_z:  if(condizione)  goto label_x;
\par }{\fs24 vai in label_z, se condizione \'e8 vera allora vai in label_x e
esegui l\rquote istruzione e continua a analizzare la condizione, altrimenti
esci.
\par
\par }\pard\plain \s3\ql
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel2\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {I diversi
tipi di loop
\par }\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24
\par Costrutto  1
\par }{\f2\fs24 while(condizione)
\par          istruzione;
\par }{\fs24
\par Tale costrutto \'e8 equivalente a:
\par
\par }{\f2\fs24           goto label_z;
\par label_x:  istruzione;
\par label_z:  if(condizione)  goto label_x;
\par }{\fs24
\par in pratica fino a quando la condizione \'e8 vera si esegue l\rquote
istruzione.
\par
\par Costrutto 2
\par }{\f2\fs24 while(condizione)
\par          \{istruzione_0;
\par           istruzione_1;
\par              \'85
\par           istruzione_n;
\par          \}
\par }{\fs24
\par Tale costrutto \'e8 equivalente a:
\par
\par }{\f2\fs24           goto label_z;
\par label_x:  istruzione_0;
\par           istruzione_1;
\par              \'85
\par           istruzione_n;
\par label_z:  if(condizione)  goto label_x;
\par }{\fs24
\par
\par Costrutto 3
\par }{\f2\fs24 do istruzione; while(condizione);
\par }{\fs24 tale costrutto \'e8 equivalente a:
\par
\par }{\f2\fs24 label:  istruzione;
\par         if(condizione)  goto  label;
\par }{\fs24
\par Costrutto 4
\par }{\f2\fs24 do \{ istruzione_0;
\par      istruzione_1;
\par              \'85
\par      istruzione_n;
\par    \} while(condizione);
\par }{\fs24
\par
\par tale costrutto \'e8 equivalente a:
\par
\par }{\f2\fs24 label:  istruzione_0;
\par         istruzione_1;
\par              \'85
\par         istruzione_n;
\par         if(condizione)  goto  label;
\par }{\fs24
\par
\par Costrutto 5
\par }{\f2\fs24 for( istruzione1;  condizione; istruzione3)
\par                                       istruzione2;
\par }{\fs24 tale costrutto \'e8 equivalente a:
\par
\par }{\f2\fs24 istruzione1;
\par while(condizione)
\par          \{istruzione2;
\par           istruzione3;
\par          \}
\par }{\fs24
\par
\par Mentre
\par }{\f2\fs24 for( istruzione_1;  condizione; istruzione_n)
\par                   \{istruzione_2;
\par                    istruzione_3;
\par                       \'85
\par                    istruzione_n-1;
\par                   \}}{\fs24
\par \'e8 equivalente a:
\par
\par }{\f2\fs24 istruzione_1;
\par while(condizione)
\par          \{istruzione_2;
\par           istruzione_3;
\par            \'85
\par           istruzione_n-1;
\par           istruzione_n;
\par          \}
\par }{\fs24
\par }\pard\plain \s3\ql
\li0\ri0\keepn\nowidctlpar\nooverflow\faauto\outlinelevel2\rin0\lin0\itap0
\b\fs24\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {Esempio di
programma in C
\par }\pard\plain \ql \li0\ri0\nowidctlpar\nooverflow\faauto\rin0\lin0\itap0
\fs20\lang1040\langfe1040\kerning28\cgrid\langnp1040\langfenp1040 {\fs24
\par
\par Riferimenti Bibliografici
\par Titolo:   Linguaggio C
\par Autori:  Brian W. Kernighan, Dennis M. Ritchie
\par Editore: Jackson Libri
\par
\par }{\fs24\lang1031\langfe1040\langnp1031 Siti internet:
\par
\par }}


[toc] | [prev] | [next] | [standalone]


#11566

FromKleuskes & Moos <kleuske@somewhere.else.net>
Date2011-10-12 09:18 +0000
Message-ID<j73m0p$b7r$1@dont-email.me>
In reply to#11559
On Wed, 12 Oct 2011 09:21:27 +0200, io_x wrote:

> {\rtf1\ansi\ansicpg1252\uc1
> \deff0\deflang1040\deflangfe1040{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose
> 02020603050405020304}Times New
> Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose
> 02070309020205020404}Courier New;}
> {\f3\froman\fcharset2\fprq2{\*\panose
> 05050102010706020507}Symbol;}{\f28\froman\fcharset238\fprq2 Times New
> Roman CE;}{\f29\froman\fcharset204\fprq2 Times New Roman
> Cyr;}{\f31\froman\fcharset161\fprq2 Times New Roman Greek;}
> {\f32\froman\fcharset162\fprq2 Times New Roman
> Tur;}{\f33\froman\fcharset177\fprq2 Times New Roman
> (Hebrew);}{\f34\froman\fcharset178\fprq2 Times New Roman
> (Arabic);}{\f35\froman\fcharset186\fprq2 Times New Roman Baltic;}
> {\f44\fmodern\fcharset238\fprq1 Courier New
> CE;}{\f45\fmodern\fcharset204\fprq1 Courier New
> Cyr;}{\f47\fmodern\fcharset161\fprq1 Courier New
> Greek;}{\f48\fmodern\fcharset162\fprq1 Courier New
> Tur;}{\f49\fmodern\fcharset177\fprq1 Courier New (Hebrew);}
> {\f50\fmodern\fcharset178\fprq1 Courier New
> (Arabic);}{\f51\fmodern\fcharset186\fprq1 Courier New
> Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
> \red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
> \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> \fs24\lang1040\langfe1040\cgrid\langnp1040\langfenp1040 \snext0
> Normal;}{\*\cs10 \additive Default Paragraph Font;}}{\info{\title
> LINGUAGGIO }{\author  }{\operator  }
> {\creatim\yr2011\mo10\dy12\hr9\min10}{\revtim\yr2011\mo10\dy12\hr9\min10}{\version1}{\edmins0}{\nofpages5}{\nofwords1312}{\nofchars7479}{\nofcharsws9184}{\vern8269}}\margl1134\margr1134\margt1417\margb1134
> \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz283\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1134\dgvorigin1417\dghshow1\dgvshow1
> \jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule
> \fet0\sectd \linex0\sectdefaultcl
> {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}
> {\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta
> .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta
> .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta
> )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta
> )}}
> {\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta
> )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta
> )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta
> )}}{\*\pnseclvl9
> \pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain
> \qc
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> \fs24\lang1040\langfe1040\cgrid\langnp1040\langfenp1040 {\b LINGUAGGIO C
> \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\b \par Le Parole Chiave Del Linguaggio
> \par
> \par }{Le seguenti parole sono riservate per il linguaggio; quindi non
> possono avere altri usi in particolare nella definizione di nuove
> variabili. \par
> \par }{\f2\lang1033\langfe1040\langnp1033 auto         double      int
> struct
> \par break        else        long         switch \par case         enum
>        register     typedef \par char         extern      return      
> union \par const        float       short        unsigned \par continue 
>    for         signed       void \par default      goto        sizeof   
>    volatile \par do           if          static
>     while   }{\lang1033\langfe1040\langnp1033
> \par
> \par }{\b I Tipi Principali e Dichiarazioni \par
> \par }{I tipi principali usati dal linguaggio sono i seguenti: \par
> \par }{\f2\lang1033\langfe1040\langnp1033 char         signed char     
> unsigned char
> \par int          signed int       unsigned int \par }\pard \qj
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033              short int        short
> unsigned \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033              long int         long
> unsigned \par float        void
> \par doble        long double
> \par }{\lang1033\langfe1040\langnp1033 \par }{sinonimo di "signed int" 
> \'e8 "int"; sinonimo di "unsigned int" \'e8 "unsigned".
> \par "float", "double" e "long double", i tipi che chiamiamo tipi
> floating, possono essere sinonimi
> \par tra di loro; la stessa cosa vale per "char" rispettivamente con
> "signed char" oppure con "unsigned char"; possono essere sinonimi tra di
> loro anche i tipi "short int" "int" "long int".
> \par Sono sinonimi anche "unsigned short" e "short unsigned"; "unsigned
> long" e "long unsigned" ecc. Deve per\'f2 succedere che considerando gli
> insiemi che i tipi definiscono
> \par }{\f2
> \par }{\f2\lang1033\langfe1040\langnp1033 unsigned har 
> }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
> "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033 
> short unsigned }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst
> SYMBOL 205 \\f "Symbol" \\s
> 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033  unsigned int
> }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
> "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{ \f2\lang1033\langfe1040\langnp1033
>   long unsigned \par signed   char  }{\f3\lang1033\langfe1040\langnp1033
> {\field{\*\fldinst SYMBOL 205 \\f "Symbol" \\s
> 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033  short
>     }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205
>     \\f
> "Symbol"
>  \\s 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033
>      }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205
>      \\f
> "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2\lang1033\langfe1040\langnp1033 
>  long int}{
> \lang1033\langfe1040\langnp1033
> \par }{\f2 float          }{\f3\lang1033\langfe1040\langnp1033
> {\field{\*\fldinst SYMBOL 205 \\f "Symbol" \\s
> 12}{\fldrslt\f3\fs24}}}{\f2 double        
> }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
> "Symbol" \\s 12}{\fldrslt\f3\fs24}} }{\f2  long double
> \par }{
> \par ove per esempio con "}{\f2 short int
> }{\f3\lang1033\langfe1040\langnp1033 {\field{\*\fldinst SYMBOL 205 \\f
> "Symbol" \\s 12}{\fldrslt\f3\fs24}}}{\f2 int}{" intendo che il range di
> definizione del tipo "}{\f2 short int}{",  \'e8
>  contenuto nel range di definizione degli interi.
> \par
> \par Nelle macchine a 32 bit che abbiamo attualmente e con il
> compilatore che usiamo i range dei tipi principali [cio\'e8 tutti i
> valori permessi per il tipo; dal numero minimo al numero massimo]
> \par }{\lang1033\langfe1040\langnp1033 char[-128..127]     unsigned
> char[0..255] short int[-32768..32767]  unsigned short[0...65535]
> int[-2147483648...2147483647]       unsigned int[0...4294967295]. }{
> Notiamo che 8 bit possono descrivere i range -128..127 e 0..255, mentre
> i tipi short possono avere valore descritti da 16 bit esattamente,
> mentre i tipi unsigned int ed int possono avere avere valori descritti
> completamente da 32 bit.
> \par
> \par }\pard \qj
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {L'header standard }{\f2 <limits.h>}{ descrive i range di tali tipi; per
> i tipi float(i tipi con i numeri con la virgola) }{\f2 <float.h> }{\'e8
>  l'header da guardare per cercare i valori minimi e massimi.
> \par Osserviamo che gli interi sono numeri che possono essere anche
> negativi, esempio 0  -4  3
> \par mentre i tipi float contengono numeri che hanno la virgola del tipo
> .123  -1.003   1.3e-4 (numero in notazione scientifica che significa
> 1.3*10^(-4)=0.00013 [* \'e8 il per, ^ \'e8 l'elevato a]) \par
> \par Ogni variabile prima di essere usata deve essere dichiarata, per
> esempio se si vuole dichiarare una variabile intera di nome var, si
> scriver\'e0 dopo una qualsiasi parentesi graffa '\{' all'interno di una
> funzione (variabile automatica) altrimenti se \'e8
>  definita fuori da qualsiasi funzione si chiama variabile globale.
>  Esempi di
> dichiarazione:
> \par }{\f2 int  var;
> \par }{le dichiarazioni delle variabili si possono fare o uno per riga
> esempio: \par }{\f2 int  a;
> \par int  b;
> \par int  c;
> \par }{oppure tutte in una riga
> \par }{\f2 int  a, b, c;
> \par }{oppure si possono inizializzare nella definizione anche come in:
> \par }{\f2 int  a=0, b=1, c=2;
> \par }{nella definizione il valore da assegnare alla variabile (quello a
> destra) deve stare nell'intervallo dei valori possibili per il tipo
> altrimenti tale numero viene convertito in un'altro numero non uguale al
> primo. I nomi delle variabili non possono iniziare per _ ne possono \par
> essere parole chiavi o iniziare per E o per str nel caso si utilizzi
> header <string.h>
> \par Se le variabili sono globali (fuori da qualsiasi funzione) e non
> sono inizializzate a un qualche valore, il loro valore assegnato dal
> sistema \'e8 0, la loro accessibilit\'e0
>  saranno tutte le righe seguenti; altrimenti se le variabili sono
>  automatiche e
> non sono inizializzate il loro valore \'e8 non definito (possono essere
> qualsiasi numero)  la loro accessibilit\'e0 \'e8 all'interno delle
> parentesi \{\} ove sono definite.
> 
> \par
> \par Array
> \par Si possono definire anche nomi di variabili che sono un vettore di
> elementi del tipo esempio:
> \par }{\f2\lang1036\langfe1040\langnp1036 int      a[128]; \par double 
> res[32];
> \par }{la prima definizione, definisce un vettore di 128 elementi di
> tipo intero, il primo di essi \'e8 a[0] il secondo \'e8 a[1], l'ultimo
> di essi a[127] che sono tutti del tipo intero e ove a[i-1] \'e8 
> contiguo a in memoria ad a[i]; \par }{\lang1033\langfe1040\langnp1033 la
> stessa cosa la seconda definizione, che definisce un vettore di double,
> il primo di essi \'e8 res[0] il secondo \'e8 res[1], l'ultimo di essi
> res[31].
> \par
> \par Puntatori
> \par Si possono definire puntatori a dei tipi precedentemente definiti;
> esempio: \par }{\f2\lang1033\langfe1040\langnp1033 int    a[100], *p, b;
> /* tra l'altro definisce
> \par                          il puntatore a int p \par                 
>      */
> \par
> \par p=a; /* fa puntare tale puntatore all'inizio dell'array */ \par
> b=p[0]; /* assegna a b l'elemento o dell'array definito */ \par
> p[99]=*p; /* assegna a a[99] il valore p[0]== *p
> */}{\lang1033\langfe1040\langnp1033
> \par
> \par Strutture
> \par Si possono definire anche nomi di variabili che sono delle
> strutture di elementi che possono essere altre strutture di elmenti \par
> }{\b\lang1033\langfe1040\langnp1033 Operatori \par
> }{\lang1033\langfe1040\langnp1033 \par Gli operatori del C sono, da chi
> ha precedenza maggiore a chi ha precedenza minore:
> \par (i nomi sono sotto; operatore unario significa che si applica a un
> solo argomento mentre operatore binario significa che si applica a due
> argomenti; \par esempio di operatore unario:  il - in  -1 \par esempio
> di operatore binario: il - in 3-5 o l'operatore + in a+b) \par
> \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033 ()              []      ->       .
> \par operatori parentesi,  accesso,  punto \par
> \par }\pard \ql
> \li0\ri0\widctlpar\tx8788\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033 !  ++  --  +  -  *  &  (Tipo) 
> sizeof \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033 sono gli operatori unari \par
> negazione logica, incremento, decremento, pi\'f9, meno, deferenzia,
> indirizzo, operatore cast di tipo, operatore sizeof \par
> \par
> \par *   /   %
> \par operatori binari moltiplicazione, divisione, modulo \par
> \par }\pard \qj
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033 +  - \par operatori binari somma e
> differenza \par
> \par <<    >>
> \par operatori binari shift di sinistra e di destra \par
> \par <   <=   >     >=   !=   ==
> \par operatori binari
> \par minore, minore o uguale, maggiore, maggiore o uguale, diverso,
> uguale \par
> \par &
> \par operatore binario bit a bit and
> \par
> \par ^
> \par operatore binario bit a bit xor
> \par
> \par |
> \par operatore binario bit a bit or
> \par
> \par &&
> \par operatore binario and logico
> \par
> \par ||
> \par operatore binario or logico
> \par
> \par ?:
> \par operatore ternario condizionale
> \par
> \par =  +=   -=   *=   /=   %=  &=  |=  <<=   >>= \par operatori binari
> di assegnamento \par
> \par ,
> \par operatore binario virgola
> \par }{\lang1033\langfe1040\langnp1033 \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2\lang1033\langfe1040\langnp1033 Esempi: \par int a[100], b; /*
> definisce lo spazio per 100 interi e lo \par                   chiama a
> [array a]; definisce lo spazio \par                   per un intero e lo
> chiama b \par                */
> \par int        *y; /* y \'e8 un puntatore a interi \par               
> */
> \par b=3;      /* b \'e8 uguale a tre subito dopo questa istruzione */
> \par
> \par /* Esempi di operatori parentesi */ \par a[0] = 2; /* il primo
> intero dell'array \'e8 2 */ \par a[99]=10; /* l'ultimo elemento
> dell'array \'e8 uguale a 10 */ \par a[7]=(a[0]+a[99])*b; /* a[7] uguale
> a 36 */ \par /*esempi di operatore */
> \par v=a;
> \par a[0]=v->
> \par
> \par }\pard \qj
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\lang1033\langfe1040\langnp1033
> \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\b\lang1033\langfe1040\langnp1033 Le parole chiave "if", "else if"  ed
> "else" \par }{\b
> \par }\pard \ql
> \li240\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin240\itap0
> {\f2 0  [zero]                  \'e8 il valore booleano }{\b\f2
> FALSO}{\f2 \par   un numero diverso da zero: \'e8 il valore booleano
> }{\b\f2 VERO}{\f2 \par
> \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
> {\f2 ==  si legge "\'e8 uguale ad"
> \par     !=  si legge "\'e8 diverso da" \par     <   si legge "\'e8
> minore di" \par     <=  si legge "\'e8 minore o uguale" \par     >   si
> legge "\'e8 maggiore di" \par     >=  si legge "\'e8 maggiore oppure
> uguale a" \par
> \par     Se relazione \'e8 uno qualsiasi dei simboli "== != < <= > >="
> \par     allora (op1 relazione op2) ritorna 1 (VERO) se la relazione
> \par     tra gli operandi op1 e op2 \'e8 vera, 0 (FALSO) altrimenti.
> \par
> \par     Esempio:   (1<3) ritorna il valore 1 (vero), \par            
> ma (1>3) ritorna il valore 0 (falso) \par
> \par     &&  si legge "e"  oppure "and" \par     ||  si legge
> "o\\oppure"  oppure "or" \par }{
> \par in particolare
> \par         }{\f2 (2<=a && a< 3)}{ si legge  "se due \'e8 minore o
> uguale ad }{\f2 a}{, }{\b e}{ }{\f2 a}{ \'e8 minore di 3" \par          
>              (in altre parole }{\f2 a}{ \'e8 compreso tra 2 e 3; due
> compreso, tre non compreso
> \par                        l'espressione di sopra risulta vera
> altrimenti risulta falsa)
> \par
> \par          (}{\f2 2<=a || a==7}{)  si legge "se due \'e8 minore o
> uguale ad }{\f2 a}{ }{\b oppure}{ }{\f2 a}{ \'e8 uguale a 7" \par       
>              (in altre parole se }{\f2 a}{  \'e8 un numero intero non
> negativo, allora per }{\f2 a}{ }{\f3\lang1024\langfe1024\noproof
> {\field{\*\fldinst SYMBOL 206 \\f "Symbol" \\s
> 12}{\fldrslt\f3\fs24}}}{\{0, 1, 2, 7\}
> \par                       l'espressione di sopra risulta vera mentre
> per gli altri valori di }{\f2 a }{risulta falsa) \par
> \par Le parole "}{\f2 if}{" ed "}{\f2 else}{" sono riservate al
> linguaggio e un costrutto del tipo:
> \par
> \par }{\f2 if(condizione1)       istruzione1; \par else if(condizione2) 
> istruzione2; \par else                  istruzione3; \par }{
> \par funziona nel seguente modo:
> \par se condizione1 ha valore boleano vero: si esegue l'istruzione1 e si
> esce dal costrutto.
> \par se condizione1 \'e8 falsa
> \par         se condizione2 \'e8 vera: si esegue l'istruzione2 e si esce
> dal costrutto
> \par         se condizione2 \'e8 falsa: si esegue l'istruzione3 e si
> esce dal costrutto.
> \par analogamente
> \par
> \par }{\f2 if(condizione1)       istruzione1; \par else                 
> istruzione3; \par }{
> \par funziona nel seguente modo:
> \par se condizione1 ha valore boleano vero: si esegue l'istruzione1 e si
> esce dal costrutto;
> \par se condizione1 \'e8 falsa si esegue l'istruzione3 e si esce dal
> costrutto. \par
> \par Analogamente per tutte le altre combinazione if(), else if, else.
> \par }\pard \qj
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {
> \par }\pard \ql
> \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {
> \par }}

I think it's rather rude to post it to a newsgroup in that format and rather
optimistic to expect anyone taking the trouble to transform it into something
legible, given your track-record in this froup.

-------------------------------------------------------------------------------
 _______________________________________
< Thank god!! ... It's HENNY YOUNGMAN!! >
 ---------------------------------------
  \
   \
       ___  
     {~._.~}
      ( Y )
     ()~*~()   
     (_)-(_)   
-------------------------------------------------------------------------------

[toc] | [prev] | [next] | [standalone]


#11568 — Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]

FromIan Collins <ian-news@hotmail.com>
Date2011-10-12 22:42 +1300
SubjectRe: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]
Message-ID<9fl5nkFe4sU1@mid.individual.net>
In reply to#11566
On 10/12/11 10:18 PM, Kleuskes & Moos wrote:
> On Wed, 12 Oct 2011 09:21:27 +0200, io_x wrote:

<usual nonsense>

> I think it's rather rude to post it to a newsgroup in that format and rather
> optimistic to expect anyone taking the trouble to transform it into something
> legible, given your track-record in this froup.

Did you really have to quote it all again?

-- 
Ian Collins

[toc] | [prev] | [next] | [standalone]


#11569 — Re: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]

FromKleuskes & Moos <kleuske@somewhere.else.net>
Date2011-10-12 09:44 +0000
SubjectRe: what do you think on my summary on C, for 13-15 years student in .rtf format [to cut and paste in a .rtf file]
Message-ID<j73nip$b7r$2@dont-email.me>
In reply to#11568
On Wed, 12 Oct 2011 22:42:12 +1300, Ian Collins wrote:

> On 10/12/11 10:18 PM, Kleuskes & Moos wrote:
>> On Wed, 12 Oct 2011 09:21:27 +0200, io_x wrote:
> 
> <usual nonsense>
> 
>> I think it's rather rude to post it to a newsgroup in that format and
>> rather optimistic to expect anyone taking the trouble to transform it
>> into something legible, given your track-record in this froup.
> 
> Did you really have to quote it all again?

No. I should have snipped it, of course.

-------------------------------------------------------------------------------
 ___________________
< RHAPSODY in Glue! >
 -------------------
  \
   \
       ___  
     {~._.~}
      ( Y )
     ()~*~()   
     (_)-(_)   
-------------------------------------------------------------------------------

[toc] | [prev] | [next] | [standalone]


#11570

From"io_x" <a@b.c.invalid>
Date2011-10-12 11:52 +0200
Message-ID<4e9562c8$0$1385$4fafbaef@reader1.news.tin.it>
In reply to#11566
"Kleuskes & Moos" <kleuske@somewhere.else.net> ha scritto nel messaggio
news:j73m0p$b7r$1@dont-email.me...
> On Wed, 12 Oct 2011 09:21:27 +0200, io_x wrote:
> I think it's rather rude to post it to a newsgroup in that format and rather
> optimistic to expect anyone taking the trouble to transform it into something
> legible, given your track-record in this froup.
>
> -------------------------------------------------------------------------------
> _______________________________________
> < Thank god!! ... It's HENNY YOUNGMAN!! >
> ---------------------------------------
>  \
>   \
>       ___
>     {~._.~}
>      ( Y )
>     ()~*~()
>     (_)-(_)
> -------------------------------------------------------------------------------

so it is rude the .txt tralslation? or you find rude too someone post
19 kb of crappy text on C language?

CENNI  SUL  LINGUAGGIO  C

*Le Parole Chiave Del Linguaggio*
Le seguenti parole sono riservate per il linguaggio; quindi non possono avere
altri usi in particolare nella definizione di nuove variabili.

auto         double      int          struct
break        else        long         switch
case         enum        register     typedef
char         extern      return       union
const        float       short        unsigned
continue     for         signed       void
default      goto        sizeof       volatile
do           if          static       while

*I Tipi Principali e Dichiarazioni*
I tipi principali usati dal linguaggio [con cui si definiscono le variabili]
sono i seguenti:

char         signed char      unsigned char
int          signed int       unsigned int
             short int        short unsigned
             long int         long unsigned
float        void
doble        long double

sinonimo di "signed int"  è "int"; sinonimo di "unsigned int" è "unsigned".
"float", "double" e "long double", i tipi che chiamiamo tipi floating, possono
essere sinonimi
tra di loro; la stessa cosa vale per "char" rispettivamente con "signed char"
oppure con "unsigned char"; possono essere sinonimi tra di loro anche i tipi
"short int" "int" "long int".
Sono sinonimi anche "unsigned short" e "short unsigned"; "unsigned long" e "long
unsigned" ecc. Deve però succedere che considerando gli insiemi che i tipi
definiscono
[C dopo significa contenuto]
unsigned char  C short unsigned C unsigned int C  long unsigned
signed   char  C short int      C int          C  long int
float          C double         C long double

ove per esempio con "short int C int" intendo che l'insieme di tutti i numeri di
tipo "short int",  è contenuto nell'insieme di tutti i numeri ti tipo "int" .

Nelle macchine a 32 bit che abbiamo attualmente e con il compilatore che usiamo
i range dei tipi principali [cioè tutti i valori permessi per il tipo; dal
numero minimo al numero massimo]
char[-128..127]     unsigned char[0..255]    short int[-32768..32767]  unsigned
short[0...65535]     int[-2147483648...2147483647]       unsigned
int[0...4294967295]. Notiamo che 8 bit possono descrivere i range -128..127 e
0..255, mentre i tipi short possono avere valore descritti da 16 bit
esattamente, mentre i tipi unsigned int ed int possono avere avere valori
descritti completamente da 32 bit.

L'header standard <limits.h> descrive i range di tali tipi; per i tipi float(i
tipi con i numeri con la virgola) <float.h> è l'header da guardare per cercare i
valori minimi e massimi.
Osserviamo che gli interi "int" sono numeri che possono essere anche negativi,
esempio 0  -4  3 mentre i tipi float contengono numeri che hanno la virgola del
tipo 2.123  -1.003   1.3e-4 (numero in notazione scientifica
1.3*10^(-4)=0.00013 [* è il per, ^ è l'elevato a])

Ogni variabile prima di essere usata deve essere dichiarata, per esempio se si
vuole dichiarare una variabile intera di nome var, si scriverà dopo una
qualsiasi parentesi graffa '{' all'interno di una funzione (variabile
automatica) altrimenti se è definita fuori da qualsiasi funzione si chiama
variabile globale. Esempi di dichiarazione che deve finire sempre con il ';':
int  var;
le dichiarazioni delle variabili si possono fare o uno per riga esempio:
int  a;
int  b;
int  c;
oppure tutte in una riga
int  a, b, c;
oppure si possono inizializzare nella definizione anche come in:
int  a=0, b=1, c=2;
nella definizione il valore da assegnare alla variabile (quello a destra) deve
stare nell'intervallo dei valori possibili per il tipo altrimenti tale numero
viene convertito in un'altro numero non uguale al primo. I nomi delle variabili
devono usare caratteri alfanumerici [a-z, A-Z, 0,1,2,3,4,5,6,7,8,9, _ ] dove le
parole con lettere maiuscole sono diverse dalle parole con le stesse lettere ma
minuscole. I nomi di variabile non possono iniziare per _ ne possono essere
parole chiavi o iniziare per E o per str nel caso si utilizzi header <string.h>.
Se le variabili sono globali (fuori da qualsiasi funzione) e non sono
inizializzate a un qualche valore, il loro valore assegnato dal sistema è 0, la
loro accessibilità saranno tutte le righe seguenti; altrimenti se le variabili
sono automatiche e non sono inizializzate il loro valore è non definito (possono
essere qualsiasi numero)  la loro accessibilità è all'interno delle parentesi {}
ove sono definite. Il tipo "void" è un tipo particolare, che si può usare come
tipo per un puntatore generale a qualsiasi tipo (void*).

*Commenti*
I commenti del linguaggio C [le scritture che servono a noi per capire il
programma e non definiscono nessuna azione che il programma deve fare] iniziano
con "/*" e finiscono con "*/".
Se supportato vi è anche un tipo di commento che comincia con la coppia di
caratteri "//" e finisce quando finisce la riga.
Esempi di commenti:
Commento a più linee:
int a[100], b; /* definisce lo spazio per 100 interi e lo
                  chiama a [array a]; definisce lo spazio
                  per un intero e lo chiama b

               */
Commento a una linea:
int        *y; // y è un puntatore a interi

*Operatori*
La precedenza tra gli operatori descrive quale operatore viene eseguito prima se
tutti gli operatori si trovano in uno stesso livello di parentesi: esempio in
4+3*2=4+(3*2) perché il * ha precedenza maggiore rispetto al + (altrimenti il
calcolo farebbe (4+3)*2).

Gli operatori del C sono, da chi ha precedenza maggiore a chi ha precedenza
minore:
(i nomi sono sotto; operatore unario significa che si applica a un solo
argomento mentre operatore binario significa che si applica a due argomenti;
esempio di operatore unario:  il - in  -1
esempio di operatore binario: il - in 3-5 o l'operatore + in a+b)

Siano i, j, a, b, interi non negativi quindi: unsigned int
()              []      ->       .
operatori parentesi,  accesso,  punto

!  ++  -- ++postfisso --postfisso +  -  *  &  (Tipo)  sizeof
sono gli operatori unari
negazione logica, incremento, decremento, più, meno, deferenzia, indirizzo,
operatore cast di tipo, operatore sizeof
Esempi:
!0 [ritorna 1] !1 [ritorna 0] !8 [ritorna 0]
++i[incrementa il valore di i di 1 e ritorna i+1]
--i[decrementa di uno il valore di i e ritorna i-1]
&i [ritorna un puntatore all'indirizzo di memoria dove è i]
sizeof(int) [ritorna quanti char sono contenuti in un int]

*   /   %
operatori binari moltiplicazione, divisione, modulo
Esempio:
34%2 [ritorna 34 modulo 2 == 0]

+  -
operatori binari somma e differenza

<<    >>
operatori binari shift di sinistra e di destra
Esempi:
16<<i [ritorna 16*2^i]
16>>i [ritorna 16/2^i]

<   <=   >     >=   !=   =operatori binari
minore, minore o uguale, maggiore, maggiore o uguale, diverso, uguale

&
operatore binario bit a bit and
Esempio:
3&2  [ritorna 2 perché in binario 11&10 [3decimalebinario
2decimalebinario] ]

^
operatore binario bit a bit xor

|
operatore binario bit a bit or

&&
operatore binario and logico
Esempio:
1 && 0 [ritorna 0]

||
operatore binario or logico

?:
operatore ternario condizionale
Esempio:
i?0:12 [se i è diverso da zero ritorna 0 altrimenti ritorna 12]

=  +=   -=   *=   /=   %=  &=  |=  <<=   >>operatori binari di assegnamento
esempi:
a+=b; [equivale ad a=a+b;]
a-=b; [equivale ad a=a-b;]
a=(i=5); [equivale a i=5; a=5;]
,
operatore binario virgola
Esempio:
i=(++j, 0); [incrementa j di uno e assegna 0 a i]

Altri Esempi:
int a[100], b; /* definisce lo spazio per 100 interi e lo
                  chiama a [array a]; definisce lo spazio
                  per un intero e lo chiama b
               */

int        *y; /* y è un puntatore a interi
               */
b=3;      /* b è uguale a tre subito dopo questa istruzione */

/* Esempi di operatori parentesi */
a[0] = 2; /* il primo intero dell'array è 2 */
a[99]; /* l'ultimo elemento dell'array è uguale a 10 */
a[7]=(a[0]+a[99])*b; /* a[7] uguale a 36 */

*Array*
Si possono definire anche nomi di variabili che sono un vettore di elementi del
tipo esempio:
int      a[128];
double  res[32];
la prima definizione, definisce un vettore di 128 elementi di tipo intero, il
primo di essi è a[0] il secondo è a[1], l'ultimo di essi a[127] che sono tutti
del tipo intero e ove a[i-1] è  contiguo a in memoria ad a[i];
la stessa cosa la seconda definizione, che definisce un vettore di double, il
primo di essi è res[0] il secondo è res[1], l'ultimo di essi res[31].

*Puntatori*
Si possono definire puntatori a dei tipi definiti; esempio:

int    a[100], *p, b; /* tra l'altro definisce
                         il puntatore a int p
                      */

p=a; /* fa puntare tale puntatore all'inizio dell'array
        di 100 elementi
     */
b=p[0];   /* assegna a b l'elemento o dell'array a[0] */
p[99]=*p; /* assegna a a[99] il valore p[0] stessa cosa di *p
             poiché per definizione *p=*(p+0)=p[0]    */

Notare come se i è un intero che appartiene a 0..99 allora p[i] è lo stesso
valore di a[i]; notare anche che poiché abbiamo riservato in memoria 100 interi;
sono definite e si possono usare gli elementi da a[0] a a[99], da p[0] a p[99];
se si esce fuori da questi valori il programma potrebbe eseguire delle
istruzioni speciali atte alla terminazione con errore del programma stesso
(segmentation fault nel sistema operativo windows).

*Strutture*
Una struttura è un insieme ordinato che contiene una o più variabile, ed genera
un nuovo tipo. Per definire una struttura si usa la parola chiave struct ed una
lista di dichiarazioni tra parentesi graffe, terminate da un punto e virgola.
Nasce così un nuovo tipo che ha come elementi quelli della lista di
dichiarazioni, e nome "struct nome"
Esempio:
struct point{
    int  x;
    int  y;
};
definisce un nuovo tipo di nome "struct point" che ha come elementi gli interi x
e y;
"struct point  a;" fa nascere lo spazio di memoria correttamente allineato atto
a contenere due interi (x e y) e assegna a tale spazio il nome a.
Definito  a  gli elementi di a x, y sono accessibili mediante le scritture "a.x"
ed  "a.y", se abbiamo "struct point  *ap;" ed "ap=&a;"
gli elementi x e y sono accessibili tramite ap con "ap->x ed ap->y" oppure con
le equivalenti scritture "(*ap).x ed (*ap).y"
La parola chiave typedef  crea nuovi nomi per i tipi già esistenti per vedere il
suo uso vedere l'esempio di sotto.

*Funzioni*
Una funzione ha la seguente forma:

tipoRitornato    nomeDiFunzione(Dichiarazione_i   argomento_i)
{dichiarazioni di variabili
  istruzioni
}

la funzione minimale è la seguente:
minimaf(){}
Ogni funzione viene chiamata usando il proprio nome, le parentesi tonde e i
parametri.
Per esempio: nomeDiFunzione(argomento_i).

L'istruzione return è il meccanismo che consente alla funzione chiamata di
restituire un valore alla funzione chiamante. Una funzione si deve mettere nello
stesso file di codice in cui vi è la funzione che la chiama, ma  prima; oppure
si può mettere dopo oppure si può mettere in un altro file a patto che sia
visibile la definizione della funzione stessa che nel caso in esempio è:
tipoRitornato    nomeDiFunzione(Dichiarazione_i   argomento_i);
che di solito sta negli header [quei file che finiscono con .h]

Esempio completo su strutture e funzioni:

#include <stdio.h>

/* Definisce il punto */
struct punto{
  int   x;
  int   y;
};

/* ^
   |    ___________ pn1
   |   |           |
   |   |           |
   |   |___________|
   |  pn2
   |________________________

*/

/* definisce un rettangolo */
struct rettangolo{
  struct punto   pn1;
  struct punto   pn2;
};


/* Funzione che stampa le coordinate x e y
   sullo schermo oppure errore;
   L'argomento di questa funzione è un puntatore a
   "struct punto" e ritorna niente [void]
*/
void  printPunto(struct punto*  p)
{int   gx, gy;

 if(p){gx=(*p).x; gy=(*p).y; // (*p).x==p->x
       printf("x=%d  y=%d\n", gx, gy);
      }
 else  printf("Errore\n");
}

/* Funzione che ha come argomenti un puntatore a struct punto,
   un intero e un altro intero; ritorna un intero alla funzione
   chiamante.*/
int  inizializzaPunto(struct punto* p, int  x, int  y)
{
 if(p==0) return 0;
 p->x=x;
 p->y=y;
 return 1;
}

/* typedef  crea nuovi nomi per i tipi già esistenti
   per esempio
   typedef  struct punto       puntoDef;
   fa nascere un nome "puntoDef"
   che quando si usa è come se si usasse
   "struct punto"
*/
typedef  struct punto       puntoDef;
typedef  struct rettangolo  rettangoloDef;

/* La funzione main() è la funzione con cui inizia il programma; nel caso in
esame la prima istruzione ad essere eseguita dal programma dopo la chiamata del
main, è il riservare lo spazio di memoria per le variabili e successivamente
chiamare la funzione printPunto.
*/
int  main(void)
{
 struct punto  p1, p2, *pp;
 struct rettangolo  r1, *r;
 puntoDef         p3, *ppd;

 printPunto(&p1); /* chiama la funzione printPunto
                     con parametro &p1, ove
                     &p1 è un puntatore a p1,
                     ha in se l'indirizzo in memoria di p1
                  */
 p1.x=3; p1.y= -8;
 printPunto(&p1);
 inizializzaPunto(&p1, 90, -88);
 printPunto(&p1);

 return  0;
}

*Le parole chiavi "if", "else if"  ed "else"*
  0  [zero]                  è il valore booleano FALSO
  un numero diverso da zero: è il valore booleano VERO

    ==  si legge "è uguale ad"
    !=  si legge "è diverso da"
    <   si legge "è minore di"
    <=  si legge "è minore o uguale"
    >   si legge "è maggiore di"
    >=  si legge "è maggiore oppure uguale a"

    Se relazione è uno qualsiasi dei simboli "== != < <= > >="
    allora (op1 relazione op2) ritorna 1 (VERO) se la relazione
    tra gli operandi op1 e op2 è vera, 0 (FALSO) altrimenti.

    Esempio:   (1<3) ritorna il valore 1 (vero),
            ma (1>3) ritorna il valore 0 (falso)

    &&  si legge "e"  oppure "and"
    ||  si legge "o\oppure"  oppure "or"

 Tavola di verità per && and: F== falso; V == vero i valori tra parentesi
 sono il risultato dell'espressione:
 &&    |  V[!=0] |  F[0]
-------+---------+---------
 V[!=0]|  V[1]   |  F[0]
-------+---------+---------
 F[0]  |  F[0]   |  F[0]
---------------------------

 Tavola di verità per || or
 ||    |  V[!=0] |  F[0]
-------+---------+---------
 V[!=0]|  V[1]   |  V[1]
-------+---------+---------
 F[0]  |  V[1]   |  F[0]
---------------------------

dove && oppure || hanno come parametri valori falsi [numero 0] oppure valori
veri [numeri diversi da zero] e ritornano 0 per falso, 1 per vero; in
particolare:
  (2<=a && a< 3) si legge  "se due è minore o uguale ad a, e a è minore di 3"
  (in altre parole a è compreso tra 2 e 3; due compreso, tre non compreso
  l'espressione di sopra risulta vera altrimenti risulta falsa)

  (2<=a || a==7)  si legge "se due è minore o uguale ad a oppure a è uguale a 7"
  (in altre parole se a  è un numero intero non negativo, allora
  per a in {0, 1, 2, 7}
  l'espressione di sopra risulta vera mentre per gli altri valori di a
  risulta falsa)

Le parole "if" ed "else" sono riservate al linguaggio e un costrutto del tipo:

if(condizione1)       istruzione1;
else if(condizione2)  istruzione2;
else                  istruzione3;

funziona nel seguente modo:
se condizione1 ha valore booleano vero: si esegue l'istruzione1 e si esce dal
costrutto.
se condizione1 è falsa
        se condizione2 è vera: si esegue l'istruzione2 e si esce dal costrutto
        se condizione2 è falsa: si esegue l'istruzione3 e si esce dal costrutto.
analogamente

if(condizione1)       istruzione1;
else                  istruzione3;

funziona nel seguente modo:
se condizione1 ha valore booleano vero: si esegue l'istruzione1 e si esce dal
costrutto;
se condizione1 è falsa si esegue l'istruzione3 e si esce dal costrutto.

Analogamente per tutte le altre combinazione if(), else if, else.

*If e goto*
Il linguaggio C ha la parola riservata goto;  esso si utilizza in coppia con un
nome finito da due punti che si chiama label.
il goto si può utilizzare in due modi o con la if come il seguente esempio:

lab:  istruzione_1;
      istruzione_2;
           .
      istruzione_n;
      if(condizione)  goto  lab;

dove si eseguono le istruzioni 1,2, . , n
se condizione è vera va a lab e ricalcola le istruzioni 1,2,.,n; altrimenti
esce.
Il goto si può utilizzare anche senza if come in "goto label_z" qui sotto:

          goto label_z;
label_x:  istruzione;
label_z:  if(condizione)  goto label_x;
vai in label_z, se condizione è vera allora vai in label_x e esegui l'istruzione
e continua a analizzare la condizione, altrimenti esci.

*I diversi tipi di loop*
Costrutto  1
while(condizione)
         istruzione;

Tale costrutto è equivalente a:

          goto label_z;
label_x:  istruzione;
label_z:  if(condizione)  goto label_x;

in pratica fino a quando la condizione è vera si esegue l'istruzione.

Costrutto 2
while(condizione)
         {istruzione_0;
          istruzione_1;
             .
          istruzione_n;
         }

Tale costrutto è equivalente a:

          goto label_z;
label_x:  istruzione_0;
          istruzione_1;
             .
          istruzione_n;
label_z:  if(condizione)  goto label_x;


Costrutto 3
do istruzione; while(condizione);
tale costrutto è equivalente a:

label:  istruzione;
        if(condizione)  goto  label;

Costrutto 4
do { istruzione_0;
     istruzione_1;
             .
     istruzione_n;
   } while(condizione);


tale costrutto è equivalente a:

label:  istruzione_0;
        istruzione_1;
             .
        istruzione_n;
        if(condizione)  goto  label;


Costrutto 5
for( istruzione1;  condizione; istruzione3)
                                      istruzione2;
tale costrutto è equivalente a:

istruzione1;
while(condizione)
         {istruzione2;
          istruzione3;
         }


Mentre
for( istruzione_1;  condizione; istruzione_n)
                  {istruzione_2;
                   istruzione_3;
                      .
                   istruzione_n-1;
                  }
è equivalente a:

istruzione_1;
while(condizione)
         {istruzione_2;
          istruzione_3;
           .
          istruzione_n-1;
          istruzione_n;
         }

*Riferimenti Bibliografici*
Titolo:  Linguaggio C
Autori:  Brian W. Kernighan, Dennis M. Ritchie
Editore: Jackson Libri


[toc] | [prev] | [next] | [standalone]


#11573

From"Joachim Schmitz" <nospam.jojo@schmitz-digital.de>
Date2011-10-12 14:17 +0200
Message-ID<j740gq$e4a$1@online.de>
In reply to#11570
io_x wrote:
> "Kleuskes & Moos" <kleuske@somewhere.else.net> ha scritto nel
> messaggio news:j73m0p$b7r$1@dont-email.me...
>> On Wed, 12 Oct 2011 09:21:27 +0200, io_x wrote:
>> I think it's rather rude to post it to a newsgroup in that format
>> and rather optimistic to expect anyone taking the trouble to
>> transform it into something legible, given your track-record in this
>> froup. -------------------------------------------------------------------------------
>> _______________________________________
>> < Thank god!! ... It's HENNY YOUNGMAN!! >
>> ---------------------------------------
>>  \
>>   \
>>       ___
>>     {~._.~}
>>      ( Y )
>>     ()~*~()
>>     (_)-(_)
>> -------------------------------------------------------------------------------
>
> so it is rude the .txt tralslation? or you find rude too someone post
> 19 kb of crappy text on C language?
>
> CENNI  SUL  LINGUAGGIO  C
>
> *Le Parole Chiave Del Linguaggio*
> Le seguenti parole sono riservate per il linguaggio; quindi non
> possono avere altri usi in particolare nella definizione di nuove
> variabili.

It seems rude to post a large italian text to an english speaking newsgroup, 
asking in english for proof readers. Guess yoU'd have better luck in an 
italain C newsgrp (if such a thing exists)

<snip> 

[toc] | [prev] | [next] | [standalone]


#11575

From"BartC" <bc@freeuk.com>
Date2011-10-12 13:55 +0100
Message-ID<j742oa$cim$1@dont-email.me>
In reply to#11573
"Joachim Schmitz" <nospam.jojo@schmitz-digital.de> wrote in message 
news:j740gq$e4a$1@online.de...
> io_x wrote:
>> "Kleuskes & Moos" <kleuske@somewhere.else.net> ha scritto nel
>> messaggio news:j73m0p$b7r$1@dont-email.me...
>>> On Wed, 12 Oct 2011 09:21:27 +0200, io_x wrote:
>>> I think it's rather rude to post it to a newsgroup in that format
>>> and rather optimistic to expect anyone taking the trouble to
>>> transform it into something legible, given your track-record in this
>>> froup. -------------------------------------------------------------------------------

You save the text as RTF format. But whether it's readable outside Windows, 
I don't know.

> It seems rude to post a large italian text to an english speaking 
> newsgroup, asking in english for proof readers. Guess yoU'd have better 
> luck in an italain C newsgrp (if such a thing exists)

There's a group it.comp.lang.c. But I don't know if he wanted proofreaders, 
just comments ...

-- 
Bartc 

[toc] | [prev] | [next] | [standalone]


#11576

FromJames Kuyper <jameskuyper@verizon.net>
Date2011-10-12 09:10 -0400
Message-ID<j743jc$i8q$1@dont-email.me>
In reply to#11575
On 10/12/2011 08:55 AM, BartC wrote:
...
> You save the text as RTF format. But whether it's readable outside Windows, 
> I don't know.

Of course. OpenOffice can read and write in RTF format.
-- 
James Kuyper

[toc] | [prev] | [next] | [standalone]


#11578 — [OT] OpenOffice vs LibreOffice

FromNoob <root@127.0.0.1>
Date2011-10-12 15:24 +0200
Subject[OT] OpenOffice vs LibreOffice
Message-ID<j744e5$nni$1@dont-email.me>
In reply to#11576
James Kuyper wrote:

> OpenOffice can read and write in RTF format.

NB: people have given up on OpenOffice.
LibreOffice is where the party's at these days.

http://en.wikipedia.org/wiki/LibreOffice

[toc] | [prev] | [next] | [standalone]


#11612 — Re: [OT] OpenOffice vs LibreOffice

FromNoob <root@127.0.0.1>
Date2011-10-13 10:51 +0200
SubjectRe: [OT] OpenOffice vs LibreOffice
Message-ID<j768pp$l96$1@dont-email.me>
In reply to#11578
Noob wrote:

> James Kuyper wrote:
> 
>> OpenOffice can read and write in RTF format.
> 
> NB: people have given up on OpenOffice.
> LibreOffice is where the party's at these days.
> 
> http://en.wikipedia.org/wiki/LibreOffice

cf. also
"LibreOffice – a dive into the unknown" by Richard Hillesley
http://www.h-online.com/open/features/LibreOffice-a-dive-into-the-unknown-1355159.html

[toc] | [prev] | [next] | [standalone]


#11591

FromPatrick Scheible <kkt@zipcon.net>
Date2011-10-12 09:35 -0700
Message-ID<867h4agobw.fsf@zipcon.net>
In reply to#11575
"BartC" <bc@freeuk.com> writes:

> You save the text as RTF format.

*I* don't save the text as RTF format.  If someone is rude enough to
 post non plain text to a news group, *I* don't encourage them by
 reading it.

-- Patrick

[toc] | [prev] | [next] | [standalone]


#11579

From"BartC" <bc@freeuk.com>
Date2011-10-12 14:52 +0100
Message-ID<j7463b$3o7$1@dont-email.me>
In reply to#11559
For a summary, it covers too small a part of the language, in too much 
detail. And I doubt 13-15-year-olds will make much sense of it without some 
background; in fact it's not clear who it's aimed at.

And, there's no example program, for example. Have a look at something like 
the Wikipedia entry on the language (which is also in Italian) for ideas.

-- 
Bartc 

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.c


csiph-web