Vai al contenuto

[GUIDA] basi della programmazione in C


Messaggi raccomandati

LE BASI DEL LINGUAGGIO C

 

[ATTACH=CONFIG]2897._xfImport[/ATTACH]

 

_PrEmEsSa_

 

con questa guida imparerete le basi della programmazione in linguaggio C e, quindi alla fine sarete capaci di realizzare piccole applicazioni come ad esempio una calcolatrice.

 

_PrEpArAzIoNe_

 

prima di tutto dovrete dotarvi del software adatto di cui vi posterò il download:

 

versione per windows (Dev C++): [D]http://bloodshed-dev-c.softonic.it/download[/D]

 

versione per mac(Xcode): [D]https://torcache.net/torrent/1239E15BD7B619131D71E34BAF8C2CD5C250EC2B.torrent?title=[kat.ph]xcode.4.1[/D]

 

Altrimenti potete scaricare "Monodeveloped" per i seguenti sistemi operativi:

 

Mac: [D]http://download.xamarin.com/monodevelop/Mac/MonoDevelop-2.8.6.5.dmg[/D]

 

Windows: [D]http://download.xamarin.com/monodevelop/Windows/MonoDevelop-2.8.6.5.msi[/D]

 

Ubuntu: [D]http://badgerports.org/[/D]

 

Linux: [D]http://sourceforge.net/projects/monodevelop.mirror/files/monodevelop-2.8.6.4.tar.bz2/download[/D]

 

Il sito per scaricare monodeveloped per questi ed altri S.O. lo trovate qui

 

N.B.: Xcode è scaricabile gratuitamente direttamente dall' Mac App Store

 

 

_InTrOdUzIoNe_

 

Un programma viene scritto tramite editor di testo che deve essere compilato per essere eseguito.

Il codice sorgente viene controllato dal preprocessore che ha i seguenti compiti:

1)rimuovere eventuali commenti presenti nel sorgente;

2)interpretare speciali direttive per il preprocessore denotate

da "#", come #include o #define.

3)controllare eventuali errori del codice

Se tutto ciò avviene senza problemi avremo un nuovo codice sorgente "pulito" ed "espanso" che viene tradotto dal compilatore C in codice assembly. Tramite il Linker o Link editor vengono collegati tutti i file oggetto che creeranno il programma.

 

N.B.: il linguaggio C, come il C++, sono linguaggi sensibili alle lettere maiuscole e minuscole. Con le maiuscole si scrivono le istruzioni e in maiuscolo le variabili.

 

_InIzIo_

 

per velocizzare la guida e accorciarla ho fatto questo piccolo video di introduzione che potette scaricare da qua:[D]http://www.mediafire.com/?siul5y2ft7pf2d1[/D]

 

_PrImI cOmAnDi_

 

In anzi tutto bisogna creare dei collegamenti con le funzioni di libreria semplicemente inserendo:

 

#include <stdio.h>

 

dopodiché vi troverete scritto:

 

[color="#dda0dd"]int[/color] main (int argc, [color="#dda0dd"]const char[/color] * argv[])
{

  [color="green"] // insert code here...[/color]
   printf([color="red"]"Hello, World!\n"[/color]);
   return [color="blue"]0[/color];
}

 

All’ interno delle parentesi graffe vanno scritte le istruzioni.

 

N.B.: tutte le istruzioni in C e in C++ terminano con il “;”.

 

_OpErAtOrI mAtEmAtIcI_

 

* = moltiplicazione

 

/ = divisione

 

+ = addizione

 

- = sottrazione

 

% = fornisce il resto della divisione

 

es. 8/2 = 2,5 (visualizzo 8:2=4)

7%3= 2,5 (visualizzo il resto 8:2=1)

 

_OpErAtOrI lOgIcI_

 

= uguale

> maggiore

>= maggiore uguale

< minore

<= minore uguale

!= diverso

== uguale uguale (per le condizioni)

// or

! not

 

_VaRiAbIlI_

 

le variabili, in C, si introducono con “int”. Affinchè il computer le riconosca bisogna esplicitare tutte le variabili che si useranno all’ inizio del programma.

 

esistono tanti tipi di variabili, tra cui ricordiamo:

 

%i= indica che la variabile è intera (int)

%f= indica che la variabile è decimale (float)

%c= indica che la variabile è un carattere (char)

%s = indica una stringa (sting - definito in string.h se la memoria non mi inganna)

 

gli "short" , "long" e "double" sono invece usati per: numero intero corto, numero intero lungo e numero reale lungo

Abbiamo anche il tipo bool , che puo' assumere solo valori 0 e 1.

 

COMMENTI E SPAZI

 

Per introdurre nello script dei commenti o delle indicazioni si usano:

 

/* per aprire un commento

*/ per chiuderlo

// per aprire un commento di una riga

 

Per inserire degli spazi o andare a capo utilizzo, invece:

 

\n per andare a capo

\t per spostarci di 1 tap

 

 

PRINTF()

 

con questa funzione possiamo stampare su schermo, quindi visualizzare dopo l’ esecuzione del programma, ciò che verra scritto all’ interno delle parentesi.

 

dentro le parentesi si inserisce la seguente dicitura:

 

printf("cosa visualizziamo= %tipo di variabile(i/f)",variabile che dà il risultato);

 

_PrOgRaMmA 1_

 

iniziamo con un semplice programma che ci permette di calcolare l’ area di un rettangolo:

 

eccovi lo script:

 

[color="#ff00ff"]int main[/color]()
{
  [color="green"] /*indichiamo le variabili che useremo: b base, h altezza, a area*/[/color]
   [color="red"]int[/color] b,h,a;
   [color="green"]/*esplicitiamo i valori di b e h*/[/color]
   b=[color="blue"]5[/color];
   h=[color="blue"]3[/color];
  [color="green"] /*inseriamo la formula che dovrà applicare*/[/color]
   a=b*h;
[color="green"]   /*"printf" è una funzione che ci permette di stampare su schermo ciò che viene indicato all' interno delle parentesi*/[/color]
   [color="#9932cc"]printf[/color]([color="red"]"area= %i\n"[/color],a); [color="green"]/*dentro le "" mettiamo: cosa vogliamo vedere= %tipo di variabile(i), variabile che dà il risultato*/
   /*/n significa che va a capo*/[/color]
   [color="#9932cc"]printf[/color]([color="red"]"Hello, World!\n"[/color]);
   return [color="blue"]0[/color];
}

 

quando clicchiamo su play ci comparirà la seguente schermata:

 

area= 15

Hello, World!

 

 

_EsErCiZi_

 

1: calcolare il perimetro del rettangolo

 

 

SCANF()

 

questa funzione ci permette di inserire dati da tastiera. all’ interno delle parentesi inserirete:

 

printf([color="red"]"%tipo di variabile"[/color],& variabile del dato)

 

 

_PrOgRaMmA 2_

 

calcolare l’ area del rettangolo inserendo i valori di b e h:

 

[color="#ff00ff"]int main[/color]()
{
   [color="blue"]int[/color] b,h,a;
   [color="#9932cc"]printf[/color]([color="red"]"introduci la base\t"[/color]);
   [color="#9932cc"]scanf[/color]([color="red"]"%i"[/color],&b);
   [color="#9932cc"]printf[/color]("introduci l' altezza\t");
   [color="#9932cc"]scanf[/color]([color="red"]"%i"[/color],&h);
   a=b*h;
   [color="#9932cc"]printf[/color]([color="red"]"area= %i\n[/color]",a); 
   [color="#9932cc"]printf[/color]([color="red"]"Hello, World!\n"[/color]);
   return [color="blue"]0[/color];
}

 

forniamo b, h, a come variabili decimali (float):

 

[color="#ff00ff"]int main[/color]()
{
   [color="#ff00ff"]float [/color]b,h,a;
   [color="#9932cc"]printf[/color]([color="red"]"introduci la base\t"[/color]);
   [color="#9932cc"]scanf[/color]([color="red"]"%f"[/color],&b);
   [color="#9932cc"]printf[/color]([color="red"]"introduci l' altezza\t"[/color]);
   [color="#9932cc"]scanf[/color]([color="red"]"%f"[/color],&h);
   a=b*h;
   [color="green"]/*%.2f significa che il risultato sarà di tipo float e terrà 2 cifre 	dopo la virgola*/[/color]
   [color="#9932cc"]printf[/color]([color="red"]"area= %.2f\n"[/color],a); 
   [color="#9932cc"]printf[/color]([color="red"]"Hello, World!\n"[/color]);
   return [color="blue"]0[/color];
}

 

_EsErCiZi_

 

1: introduci da tastiera il raggio del cerchio e calcola la circonferenza e l’ area

 

N.B.: redice quadrata -> sqrt (bisogna inserire una nuova libreria: #include <math.h>)

 

IF, ELSE

 

Queste due funzioni significano se (if) altrimenti (else) e servono per porre delle condizioni. In generale si scrivono così:

 

[color="#ff00ff"]if[/color](condizione)[color="green"]/*no ;*/[/color]
       {
           istruzione A;
           istruzione B;
       }
   [color="#ff00ff"]else[/color]
   {
       istruzione C;
       istruzione D;
   }

 

_PrOgRaMmA 3_

 

Con questo programma inserendo i pezzi acquistati (pt) e il prezzo unitario (pu) calcoleremo il costo totale (ct). C’è uno sconto del 10% se si acquistano 10 pezzi:

 

[color="#ff00ff"]int main[/color]()
{
   [color="#ff00ff"]int[/color] pt, pu, ct;
   [color="#9932cc"]printf[/color]([color="red"]"inserisci i pezzi acquistati\t"[/color]);
   [color="#9932cc"]scanf[/color]([color="red"]"%i"[/color],&pt);
   [color="#9932cc"]printf[/color]([color="red"]"inserisci il prezzo unitario\t€"[/color]);
   [color="#9932cc"]scanf[/color]([color="red"]"%i"[/color],&pu);
   [color="#ff00ff"]if[/color](pt==10)
       {
           ct=pu*pt-((pu*pt)/100*10);
       }
   [color="#ff00ff"]else[/color]
       {
           ct=pu*pt;
       }
   [color="#9932cc"]printf[/color]([color="red"]"prezzo= %i€"[/color],ct);
}

 

 

_WHILE_

 

Tramite questo ciclo se si verifica una certa condizione tutto ciò che viene scritto all' interno del ciclo si ripeterà fino a che la condizione non si verifichi falsa.

La struttura per questo tipo di ciclo è la seguente:

 

 

[color="#ff00ff"]int main[/color]()
{
   [color="#ff00ff"]while[/color] (condizione)
       
   {
       istruzione/i
   }

}

 

_PrOgRaMmA 4_

 

tramite questo piccolo programma si potrà creare una semplice calcolatrice:

 

int main()
{
   [color="#ff00ff"]int[/color] i; [color="green"]//poniamo la variabile per la quale si dovrà ripetere il ciclo[/color]
   i=[color="blue"]1[/color];[color="green"]// assegnamogli un valore[/color]
   [color="#ff00ff"]while[/color] (i==1)[color="green"]//se "i" sarà uguale ad "1" il ciclo si ripeterà[/color]
       
   {
       [color="#ff00ff"]int[/color] a,b,n,sm,d,st,m;
       [color="#ff00ff"]printf[/color]([color="red"]"1)somma\n2)sottrazione\n3)moltiplicazione\n4)divisione"[/color]);
       [color="#ff00ff"]printf[/color]([color="red"]"\n\ninserisci operatore\n"[/color]);
      [color="#ff00ff"] scanf[/color]([color="red"]"%i"[/color],& n);
      [color="#ff00ff"] printf[/color]([color="red"]"\ninserisci a\n"[/color]);
       [color="#ff00ff"]scanf[/color]([color="red"]"%i"[/color],& a);
       [color="#ff00ff"]printf[/color]([color="red"]"\ninserisci b\n"[/color]);
       [color="#ff00ff"]scanf[/color]([color="red"]"%i"[/color],& b);
       sm=a+b;
       st=a-b;
       d=a/b;
       m=a*b;
      [color="#ff00ff"] if[/color](n==1)
       {
          [color="#ff00ff"] printf[/color]([color="red"]"risultato= %i"[/color],sm);
           
       }
       [color="#ff00ff"]if[/color](n==2)
       {
          [color="#ff00ff"] printf[/color]([color="red"]"risultato= %i"[/color],st);
           
       }
       [color="#ff00ff"]if[/color](n==3)
       {
         [color="#ff00ff"]  printf[/color]([color="red"]"risultato= %i"[/color],m);
           
       }
      [color="#ff00ff"] else[/color]
       {
           [color="#ff00ff"] printf[/color]([color="red"]"risultato= %i"[/color],d);
       }
     [color="#ff00ff"]  printf[/color]([color="red"]"\n\n1)ripristina\n2)fine\n"[/color]);
    [color="#ff00ff"]   scanf[/color]([color="red"]"%i"[/color],& i);[color="green"]//immettiamo da tastiera il valore che assumerà "i"[/color]
       
   }

}

 

 

_BREAK & CONTINUE_

 

Queste due istruzioni vengono usate all' interno di cicli e svolgono funzioni particolari.

 

Break: esce dal ciclo anche se la condizione di ripetizione del ciclo è verificata.

Continue: salta un interazione del ciclo senza interromperlo.

 

_PrOgRaMmA 5_

 

Per farvi capire meglio la sottile differenza tra le due istruzioni precedentemente descritte ho realizzato questo programma:

 

[color="#ff00ff"]int main[/color]()
{
   [color="#ff00ff"]int[/color] i;
   [color="#ff00ff"]printf[/color]([color="red"]"inserisci un numero da 1 a 100\n"[/color]);
   [color="#ff00ff"]while[/color] (scanf("%d", &i) == [color="blue"]1[/color] && i != [color="blue"]0[/color])
   {
      [color="#ff00ff"] if[/color] (i < 0)
       {
           [color="#ff00ff"]printf[/color]([color="red"]"Valore non consentito"[/color]);
          [color="#ff00ff"] break[/color];
           [color="green"]/* esce dal ciclo */[/color]
       }
       
      [color="#ff00ff"] if[/color] (i > 100)
       {
          [color="#ff00ff"] printf[/color]("Valore non consentiton");
           [color="#ff00ff"]continue[/color];
       }
       [color="#ff00ff"]int[/color] quadrato = i * i;
       [color="#ff00ff"]printf[/color]([color="red"]"%d n"[/color], quadrato);
      [color="#ff00ff"] printf[/color]([color="red"]"\ninserisci un numero da 1 a 100\n"[/color]);
   }    
}

 

_GlI ARRAY E IL CICLO FOR_

 

Gli array indicano un gruppo di oggetti dello stesso tipo. In C vengono dichiarati attraverso il seguente script:

 

[color="#ff00ff"]int[/color] int_array[10];

oppure;

[color="#ff00ff"]float[/color] float_array[10];

oppure;

[color="#ff00ff"]char[/color] char_array[10];

 

N.B.: tra le parentesi quadre "[]" si mette il la cifra che identifica il numero di oggetti dello stesso tipo

 

Una volta dichiarato un array è possibile assegnare il valore alla posizione corrispondente, richiamandola tramite l'indice, ad esempio se volessi inserire il valore 87.43 nell'array di float alla quinta posizione, basta scrivere:

 

float_array[4] = 87.43

 

Mentre se volessi utilizzare il valore contenuto nella terza posizione dell'array e memorizzarlo in un'altra variabile, dovrei fare:

 

[color="#ff00ff"]float myvar[/color] = float_array[2];

 

Naturalmente un array, oltre a comprendere un gruppo ordinato di valori, può contenere valori determinati. In questo caso si indicherà così

 

[color="#ff00ff"]int[/color] numeri[] = { [color="blue"]7[/color], [color="blue"]23[/color], [color="blue"]4[/color], [color="blue"]94[/color], [color="blue"]120[/color] };

 

il ciclo for, invece, è un ciclo che ogni volta che si ripete incrementa o decrementa l' indice della variabile di un certo numero e quando la variabile giunge ad un determinato valore il ciclo si ferma.

 

Esempio:

 

Abbiamo un gruppo di 100 elementi e vogliamo stamparli a video in modo casuale fino ad arrivare ad un numero di 100 numeri su schermo:

 

[color="#ff00ff"]int main[/color]()
{
 [color="green"]  //poniamo l' array fi tipo intero[/color]
  [color="#ff00ff"] int[/color] int_array[100];
[color="green"]   // inseriamo l' incremento del ciclo for "i"[/color]
  [color="#ff00ff"] int[/color] i;
  [color="green"] // in questo caso "i=0" è il valore di i all' inizio "i<100" è la condizione affinchè il ciclo si ripeta "i++" è l' incremento[/color]
   [color="#ff00ff"]for[/color] (i=[color="blue"]0[/color]; i<[color="blue"]100[/color]; i++)
   {
    [color="#ff00ff"]   printf[/color] ([color="red"]"%d"[/color], int_array[i]);
   }
}

 

N.B.: per incremento ricordo che si intende di quanto aumenta o diminuisce la variabile del ciclo for

 

 

_FiNe_

 

Potete scaricare la guida offline in formato pdf qui: [D]http://www.mediafire.com/?qeh6663cvf2e5jo[/D]

___________________________________________________________________________________

 

_RiNgRaZiAmEnTi_

 

Avanaboy: sistemazione, messa a punto e correzione di qualche punto della guida;

 

-CrAsH-: consigli e miglioramenti della guida;

 

forum007: consigli collocamenti download

Modificato da apple96
Link al commento
Condividi su altri siti

Se posso permettermi, ci sono delle inesattezze tipo:

= moltiplicazione

 

/ = divisione

 

= addizione

 

= sottrazione

 

% = fornisce il resto della divisione

 

è da sistemare con :

 

 

* = moltiplicazione

 

/ = divisione

 

+ = addizione

 

- = sottrazione

 

% = fornisce il resto della divisione

 

per quanto riguarda gli operatori logici aggiungere:

 

<= = minore uguale

>= = maggiore uguale

&& = and

|| = or

! = not

Da notare ke "=" è l'assegnamento , mentre "==" è il confronto negli if()

Ci sarebbero anche le operazione di bitwise volendo ..

 

Per le variabili , esistono molti altri tipo , ad esempio

%d = decimal (int)

%c = carattere (char)

%s = stringa (sting - definito in string.h se la memoria non mi inganna)

gli "short" , "long" e "double" sono invece usati per: numero intero corto, numero intero lungo e numero reale lungo

Abbiamo anche il tipo bool , che puo' assumere solo valori 0 e 1.

 

La guida è molto semplice , se hai tempo completala introducendo i cicli, le condizioni , i salti , funzioni e altro ;)

Comunque sei stato bravo ;)

Modificato da Avanaboy
Link al commento
Condividi su altri siti

Non ho molto tempo xke sto per uscire , ma ho notato anche ke i programmi sono tutti incompleti ... devi specificare ke tutte le istruzioni si trovano tra le { } del main() ... altrimenti per qualcuno che si avvicina al C viene creata solo confusione!

 

Ah , sarebbe anche da aggiungere che i commenti su una riga singola sono fatti con "//"

ad esempio:

 

//Commento riga singola

 

/* commento

multi

riga */

 

 

 

EDIT:

questa parte :

N.B.: redice quadrata -> rqrt (bisogna inserire una nuova libreria: #include <math.h>)

è sbagliata visto che la funzione radice quadrata ,giustamente come hai scritto tu definita in math.h , non è "rqrt" ma "sqrt" ( abbreviazione di square root) e si usa con:

float a;

a=sqrt(9); // ora la variabile a contiene il valore 3.0

Modificato da Avanaboy
Link al commento
Condividi su altri siti

Inviato (modificato)
questo accade quando si copiano delle guide dalla rete....

Non ho copiato questa guida da internet. L'ho fatta io con le mie mani, basandomi sugli appunti che ho preso in informatica.

 

@Avanaboy Ti ringrazio molto dei suggerimenti, provvedo a sistemare.

@-CrAsH- Grazie mille, gli darò un'occhiata.

Modificato da apple96
Link al commento
Condividi su altri siti

Linux è alla base di ogni buona programmazione. I veri programmatori usano Linux e nient'altro.

 

DevKit permettendo ... non tutti gli sdk sono compatibili su linux ( il ke tristemente mi costringe ad usare tutt'ora windows ) ..

 

PS: sto parlando ovviamente di sdk di consoles

Link al commento
Condividi su altri siti

DevKit permettendo ... non tutti gli sdk sono compatibili su linux ( il ke tristemente mi costringe ad usare tutt'ora windows ) ..

 

PS: sto parlando ovviamente di sdk di consoles

 

Avanaboy i DevKit per console riusciresti a provarli con Eclipse che su Linux funziona? (o per lo meno sotto Ubuntu)

 

Grazie!

Link al commento
Condividi su altri siti

non mi sono spiegato, con i kit (official..) viene dato anche il compilatore e il linker, e nel 90% dei casi sono windows based ( in questo momento oltre all'sdk della ps2, non ricordo ci siano altri devkit ke girino su linux ... parlando sempre di sdk ufficiali).

 

Non è un problema di IDE ( come nel caso di Eclipse ) ma proprio di compilatore linker etc.

Si puo' benissimo programmare anche con il semplice notepad ;)

 

PS: per quando riguardi gli sdk homemade , alcuni hanno la versione sia windows ke linux ;) Tra i quali devkitpro (wii,nds,gc etc) e PSPSDK ...

Modificato da Avanaboy
Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



×
×
  • Crea Nuovo...