Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #11559 > unrolled thread
| Started by | "io_x" <a@b.c.invalid> |
|---|---|
| First post | 2011-10-12 09:21 +0200 |
| Last post | 2011-10-12 14:52 +0100 |
| Articles | 13 — 8 participants |
Back to article view | Back to comp.lang.c
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
| From | "io_x" <a@b.c.invalid> |
|---|---|
| Date | 2011-10-12 09:21 +0200 |
| Subject | 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 | <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]
| From | "io_x" <a@b.c.invalid> |
|---|---|
| Date | 2011-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]
| From | Kleuskes & Moos <kleuske@somewhere.else.net> |
|---|---|
| Date | 2011-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]
| From | Ian Collins <ian-news@hotmail.com> |
|---|---|
| Date | 2011-10-12 22:42 +1300 |
| Subject | 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] |
| 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]
| From | Kleuskes & Moos <kleuske@somewhere.else.net> |
|---|---|
| Date | 2011-10-12 09:44 +0000 |
| Subject | 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] |
| 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]
| From | "io_x" <a@b.c.invalid> |
|---|---|
| Date | 2011-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]
| From | "Joachim Schmitz" <nospam.jojo@schmitz-digital.de> |
|---|---|
| Date | 2011-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]
| From | "BartC" <bc@freeuk.com> |
|---|---|
| Date | 2011-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]
| From | James Kuyper <jameskuyper@verizon.net> |
|---|---|
| Date | 2011-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]
| From | Noob <root@127.0.0.1> |
|---|---|
| Date | 2011-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]
| From | Noob <root@127.0.0.1> |
|---|---|
| Date | 2011-10-13 10:51 +0200 |
| Subject | Re: [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]
| From | Patrick Scheible <kkt@zipcon.net> |
|---|---|
| Date | 2011-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]
| From | "BartC" <bc@freeuk.com> |
|---|---|
| Date | 2011-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