Vediamo il codice che segue:
1 #include<stdio.h>
2 #include<math.h>
3
4 int main()
5 {
6 float a,b;
7 printf("\t Inserisci a \n");
8 scanf("%f", &a);
9 b = sin(a);
10 printf("\t Il seno di %f vale, %f \n", a, b);
11
12 } /* fine main */
Il codice sopra compila con la seguente riga di comando:
seno.c -o seno -lm
Si notano, innanzitutto, alcune cose:
scanf()
per la lettura da stdin , e
sin()}
contenuto nella libreria matematica. La stringa
scanf("%f", &a);\end{verbatim}
dice al programma di leggere in input un valore di tipo float
\begin{verbatim}"%f"\end{verbatim}
e memorizzarlo nello spazio di memoria riservato alla variabile
{\tt a}.
\item
La presenza, appunto, di variabili.
\end{itemize}
\subsection{Le variabili e i loro tipi} \index{Variabili} \index{Tipi}
Dunque, per poter memorizzare un valore numerico (o un altro
qualsiasi "oggetto" che necessiti di memoria) , è necessario,
preventivamente, {\it dichiarare} una variabile. Dunque, ci sono
ben {\it tre} modi differenti per dichiarare una variabile, ovvero,
punti differenti del programma in cui definirne il tipo:
\begin{enumerate}
\item
Fuori del main (variabili globali) \index{Variabili!globali}
\item
Nel corpo di funzioni (variabili locali) \index{Variabili!locali}
\item
Come argomento di funzioni;
\end{enumerate}
\subsection{I tipi scalari} \index{Tipi}
I tipi ammessi in C ANSI sono:
\begin{center}
\begin{tabular}{|l|r|}
\hline
char & singolo carattere ASCII \\
signed char & carattere ASCII\\
unsigned char & carattere\\
short & tipo short\\
signed short & short con segno\\
short int & intero short\\
signed short int & intero short con segno\\
unsigned short & short senza segno\\
unsigned short int & intero short senza segno\\
int & intero\\
signed & tipo 'signed'\\
signed int & Intero con segno\\
unsigned int & Intero senza segno\\
unsigned long & Long senza segno\\
signed long & Long con segno\\
long int & intero 'long'\\
signed long int & long int con segno\\
unsigned long & long senza segno\\
unsigned long int & long int senza segno\\
float & valore in virgola mobile\\
double & in precisione doppia\\
long double & non plus ultra\\
bool & tipo booleano \footnote{ Il tipo {\tt bool} è stato introdotto nello
standard C99 per compatibilità con il C++}\\
\hline
\end{tabular}
\end{center}
\subsection{Gli specificatori di formato} \index{Specificatori di formato}
Segue la lista completa:
\begin{center}
\begin{verbatim}
%c Un singolo carattere 'unsigned'
%d Numero decimale con segno
%i Numero decimale con segno
%e Variabile floating point (esponente)
%E Variabile floating point (esponente)
%f Variabile floating point
%F Variabile floating po%nt
%g Lascia scegliere il sistema tra
%e e
%f
%G Lascia scegliere il sistema tra
%E e
%F
%hd Signed short integer
%hi Signed short integer
%ho Un unsigned short integer (ottale)
%hn Argomento short
%hu Unsigned short integer
%hx Unsigned short integer (hesadecimale lower case)
%hX Unsigned short integer (hexadecimale upper case)
%ld Signed long integer
%le Double precision variable (exponent)
%lf Variabile in doppia precisione
%lg Lascia scegliere il sistema tra
%le e
%lf
%li Signed long integer
%ln Argomento long
%lo Unsigned long integer (ottale)
%lu Unsigned long integer
%lx Unsigned long integer (hesadecimale lower case)
%lX Unsigned long integer (hesadecimale lower case)
%LE Variabile in precisione doppia (esponente)
%Le Variabile long double (esponente)
%LE Variabile long double (esponente)
%lF Variabile in precisione doppia
%Lf Variabile in precisione doppia
%LF Precisione long double
%Lg Lascia scegliere il sistema tra
%Le e
%Lf
%lG Lascia scegliere il sistema tra
%lE e
%lF
%LG Lascia scegliere il sistema tra
%LE e
%LF
%n Il numero di caratteri stampati dalla printf()
%p Un puntatore generico (e il suo indirizzo)
%o Unsigned integer (ottale)
%s Puntatore ad una stringa di caratteri
%u Intero decimale senza segno
%x Esadecimale senza segno (lower case)
%X Esadecimale senza segno (upper case)
%% Il carattere %
#e Il punto decimale appare anche se non necessario
#f Il punto decimale appare anche se non necessario
#g Il punto decimale appare anche se non necessario
#x Esadecimale con prefisso ox
Un altra semplice ed utile dimostrazione dell'utilizzo di
specificatori di formato potrebbe essere la seguente:
1 # include <stdio.h>
2 int main()
3 {
4 int valore,scelta;
5 for(;;){
6 printf("\n\t0 per uscire \n");
7 printf("\t1 Converte decimale/esadecimale \n");
8 printf("\t2 Converte esadecimale/decimale \n");
9 scanf("%d",&scelta);
10
11 if (scelta == 0) break;
12
13 if (scelta == 1) {
14 printf("\tInserisci un numero in base 10\n");
15 scanf("%d",&valore);
16 printf("\tIn esadecimale: \n");
17 printf("\t%x\n",valore);
18
19 }
20 if (scelta == 2){
21 printf("\tInserisci un numero in base 16\n");
22 scanf("%x",&valore);
23 printf("\tIn base 10:\n");
24 printf("\t%d\n",valore);
25 }
26
27 }/* for */
28
29 }
Dove, per la spiegazione della sintassi dell'itsruzione condizionale if(), peraltro intuitiva, si rimanda al seguito.