tutek o C

Status
Zamknięty.

ex0du5

Użytkownik
Dołączył
Wrzesień 2, 2006
Posty
2
Wstęp do C by ex0du5 moze sie komus przyda


Dla aniołka... za przymus odpoczynku od pracy..A co do wstępu to zgodnie z poniższym …chciałbym jednak zaznaczyć, że dokument ten został stworzony dzięki pomocy wielu osób, które także tworzyły podobne wstępy pomagające wejść w świat tworzenia…

GNU GENERAL PUBLIC LICENSE

Version 2, June 1991

Copyright Š 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.



Ogólna struktura programu:

Program jest to jedna lub więcej funkcji. Składnia każdej z tych funkcji jest taka sama:

Kod:
Typ nazwa_funkcji(lista_dekl_arg)

{

treść funkcji

}

Funkcje nie mogą być zagnieżdżane jedna w drugiej, program musi być wykonywany po kolei. Należy zwrócić uwagę przy pisaniu na typ funkcji, ponieważ: Typ funkcji = typ zwracanej wartości, jeżeli się pomylimy mogą nam wyjść bzdury Wink, nie mówiąc o tym że program może się nawet nie skompilować .. zaraz za nazwą funkcji wpisujemy jej argumenty w nawiasach, nawet jeśli funkcja posiada zero argumentów wpisujemy nawiasy. Dość nietypową funkcją jest funkcja main(). Wszystkie programy maja tą funkcję obowiązkowo, choć mogą ją mieć w różnych miejscach programu, ale tylko i wyłącznie jedną!! Ponieważ dokładnie z tego miejsca gdzie ona się znajduje zacznie się nasz program… Skoro już mamy jakiekolwiek pojęcie o budowie programów spróbujmy coś napisać..
Przydało by się do tego posiadać jakiś kompilator np. Bloodshed Dev-C++ można go ściągnąć z netu oczywiście w ramach free software 

Teksty w programie ograniczone /*…*/ to komentarze do kodu używa się ich do podpisywania kodu, aby można się było lepiej połapać …postaram się by było tego dużo…

Pierwsze programy

Kod:
#include <stdio.h>

/*dyrektywa preprocesora dołączamy także deklaracje bibliotek studio.h to dzięki niej możemy używać podstawowych funkcji*/



main() /*stąd zacznie się nasz program  */



{

printf (”JOOO man Very Happy !!!!! co tam zgredzik u ciebie ??n”);

/*powyżej nasza instrukcja programu wyświetlająca napis*/

}



Co zrobiliśmy?? Najprostszy program  rozpoczęliśmy go deklaracja bibliotek do niego poznej rozpoczęliśmy jego pisanie funkcja main() a nasza pierwszą instrukcja było printf() w której to argumencie (w nawiasach) i w „cudzysłowach” podaliśmy nasz napis zauważyć trzeba że zakończyliśmy tą funkcję średnikiem zapamiętajcie że każdą funkcje kończymy właśnie nim.

KOMPILACJA

Tak na wszelki wypadek zamieszcze i to, rozpoczynamy prace z kompilatorem uruchamiając go i klękając na białą karteczkę po lewej stronie, wprowadzamy kod klikamy ctrl+shift+F9 lub „bulid” „compile curent file” (wcześniej go zapisując jako nazwa.ccp!) dzięki temu nasz program przejdzie linkowanie i kompilowanie.

Przyjrzyjmy się bliżej funkcji printf()

Wprowadza ona ciąg znaków na erkan, jest częścią biblioteki standardowej dołączanej automatycznie w czasie linkowania. Argument instrukcji umieszczany jest w cudzysłowie a do tego dodatkowo umieszczane są sekwencje specjalne takie jak „n”

Wypróbujcie zamiany i zobaczcie, co się będzie działo:
a – alarm
b – cofanie
f – nawa strona
n – nowy wiersz
r – powrót karetki
t – tabulacja pozioma
v – tab pionowa
- znak sleash
? - Znak?
ooo - znak o kodzie ooo
xhh – znak o odzie hh

Idźmy dalej funkcja ta może zawierać więcej niż jeden argument. Mogą one występować po sobie, pierwszy argument tekst sterujący postacią wydruku – zawiera zwykłe znaki, sekwencje specjalne, oraz specyfikacje konwersji np. liczb. Zaczynają się one od % a kończą na jednym ze znaków:…. Ale o tym za chwile …

Pierwszy program, w którym poznamy typy, zmienne, scanf() i przypomnimy printf()

Tym razem posuniemy się troszkę dalej stworzymy program, który będzie, przeliczał Celsjusze na Farenhajty wyświetlimy polecenie wpisania liczby zapiszemy ja w pamięci i wyświetlimy po obliczeniach…:

Kod:
#include <stdio.h>/*standardowa deklaracja*/



main()

/*zaczynamy zabawe*/

{

int fahr, cels; /*deklaracja typów zmiennych dla naszych funkcji*/

float fcels;



printf("Podaj temperature w stopniach Fahrenheita : ");

/*pierwszy wyświetlony napis*/



scanf("%d",&fahr); /*pobranie cyfr które obsługujacy wpisze i wpisanie ich w pamięć*/



cels=5*(fahr-32)/9;



fcels=5*(fahr-32.0)/9;

/*pierwsze operacje jakie zostaną wykonane w programie pozwalające przeliczyć wartości na farenhajty*/



printf("Temperatura w stopniach Celsjusza wynosi”);



/*drugi napis*/



printf(” %d a dokladniej %.1f.n", cels, fcels);



/*i wyniki obliczeń wpisane w funkcje printf() z konwersją pierwsze z dziesiętną drugie z zmienno przecinkową*/



}

DODATKOWY PRZYKŁAD:

Kod:
#include <stdio.h>

main()

{

int kod;



printf("pierwszy n");

printf("podaj kod: n");

scanf("%d",&kod);

printf("kod to: %d n", kod );

}

Uwagi:
Każde zmienne, których używamy w programie musimy zadeklarować. Użyliśmy w tym programie zmiennych, które identyfikowane są w programie przez nazwy (identyfikatory) dopuszczalne nazwy, których można użyć zbudowane są z liter, cyfr, znaku podkreślenia; muszą się zaczynać od litery lub podkreślenia i bardzo ważne!! Nazwy muszą być różne od słów kluczowych.:


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


Przed użyciem zmienne muszą zostać zdefiniowane jaki będą miały typ, dzięki temu program będzie mógł zarezerwować dla nich miejsce, wielkość rezerwowanego obszaru zależy
od typu zmiennej (od tej pory znany jest adres zmiennej), a wygląda to tak:

Kod:
nazwa_typu lista_zmiennych;


Przykłady typów: int (liczby całkowite), float (liczby ułamkowe) rozmiar typu może zależeć od kompilatora.

Instrukcja przypisania typu:
Program bierze zmienne i stałe stojące z prawej strony operatora, wykonuje odpowiednie operacje na nich i przypisuje wynik zmiennej stojącej po lewej w C ma sens wyrażenie:
x = x +1
ma sens wyrażenie:
y = x = x*x + y/2
ponieważ w C jest tak zwana prawostronna łączność. Wynik natomiast zawsze zależy od typu zmiennej.

Poznajmy bliżej Funkcje scanf()

Pozwala ona na wprowadzanie danych, jest to funkcja biblioteczna, potrzeba stdio.h. Pierwszy argument to ciąg znaków określających sposób konwersji, pozostałe argumenty to („nazwy”) adresy zmiennych, gdzie wpisane będą przekształcone dane
Wejściowe (mówiliśmy już przypisywaniu im miejca  (adres zmiennej fcels : &fcels)
- specyfikacja przekształcenia:
- %
- (opcjonalnie) * - wstrzymanie przekształcenia
- (opcjonalnie) liczba – maksymalny rozmiar pola
- (opcjonalnie) h, l, L
- znak przekształcenia (d, i, o, u, x, c, s, e, f, g)

Jeżeli pierwszy argument zawiera znaki inne niż specyfikacje przekształcenia, to scanf() spodziewa się ich w danych
wejściowych
int x, y;
scanf(“(%d,%d)”, &x, &y);
dane wejściowe: “( 3, 5)” _ x=3, y=5
dane wejściowe: “ 3 5 ” _ błąd !!!
scanf – funkcja typu integer; zwraca ilość
poprawnie wczytanych i przypisanych wartości


d – int - postać dziesiątna
o – int - postać ósemkowa
x – int - postać szesnastkowa
u – int - dziesiątna bez znaku
f – duble – liczba postaci [-] mmm.ddddddd
e,E – duble – postać wykładnicza
g,G – duble – postać typu f lub e,E
c – int – pojedynczy znak
s – char – ciąg znaków

Użyliśmy także konwersji liczb wy wyświetlić je w naszym prinf():

modyfikacje (pomiędzy % a znakiem typu)
– kolejność tylko jak poniżej:
- modyfikatory (w dowolnej kolejności)
minus: dosunięcie wyprowadzanego ciągu do
lewego krańca jego pola
plus: wypisanie liczby zawsze ze znakiem
spacja: poprzedzenie wyniku odstępem (o ile nie
zaczyna się od + lub –
0 – uzupełnianie argumentu zerami
- liczba – minimalny rozmiar pola. Jeżeli przekształcony argument jest krótszy, zostanie uzupełniony z lewej (z prawej – gdy minus)spacjami (lub zerami)
- kropka – zaznacza początek określenia precyzji
- liczba – określa precyzję: maksymalną liczbę znaków tekstu, liczbę cyfr po kropce dziesiętnej w specyfikacjach e, E, f; liczbę cyfr znaczących w specyfikacji g, G
- modyfikator długości h, l, L
h – short
l – long lub double
L – long double
znak % == %%
przykłady:
- %d – konwersja liczby całkowitej do postaci
dziesiętnej
- %.1f – konwersja liczby zmiennoprzecinkowej
do postaci [-]mmm.d (jedna cyfra po przecinku)
- %-6.3f - konwersja liczby zmiennoprzecinkowej
do postaci [-]mmm.ddd – szerokość pola co
najmniej 6, 3 miejsca po przecinku, wynik
dosunięty do lewej krawędzi pola.



Instrukcje sterujące


W C brak specjalnego typu do przechowywania wartości zmiennych logicznych do przechowywania informacji takiego rodzaju możemy użyć każdego typu
- gdy wartość zmiennej różna od 0 – prawda
- gdy wartość zmiennej = 0 – fałsz

Instrukcja if

Przykład: równanie kwadratowe.

Schemat działania programu:

1. Wczytanie parametrów trójmianu a,b,c
2. Czy a=0? Jeżeli tak _ błąd, koniec
3. Wyliczenie delta
4. Czy delta>0
a. tak – wyliczenie pierwiastków
b. nie – komunikat o ich braku

potrzeba instrukcji realizującym wybór ścieżki
sterowania w zależności od okoliczności
występujących w programie
instrukcja if – składnia:
A) if (wyrazenie)
instrukcja;
<
if (wyrazenie)
instrukcja1;
else
instrukcja2;
• instrukcja if – wykonanie:

A) oblicz wartość wyrazenia
jeżeli różna od zera – wykonaj instrukcja
jeżeli nie – opuść ją
przejdź do następnej instrukcji (po if)
<
oblicz wartość wyrazenia
jeżeli rózna od zera – wykonaj instrukcja1
jeżeli nie – wykonaj instrukcja2
przejdź do następnej (po if)


Kod:
#include <stdio.h>

#include <math.h>

/* Równanie kwadratowe; instrukcje if, return

biblioteka matematyczna */

int main()

{

double a,b,c,delta,x1,x2;

/*deklaracja zminnych*/



printf("Podaj a, b, c : ");

/*wyświetlamy napis*/



scanf("%lf , %lf , %lf",&a,&b,&c);

/*pobieramy liczby a b ic */



if (a==0.0)

/*nasza pierwsza instrukcja*/

{

printf(" Blad !!! a = %fn",a);

return 1;

}



/*jezeli wszytko sie zgadza idzimy dalej jesli nie wyswietlamy blad*/



delta = b*b-4*a*c;



if (delta<0.0)

/*kolejny warunek*/



{

printf("Brak pierwiastkow rzeczywistych: delta=%fn",delta);

/*kolejny napis*/



return 0;

}



/*jeszcze jeden*/



else

{



/*idziemy dalej*/



x1=(-b-sqrt(delta))/(2*a);

x2=(-b+sqrt(delta))/(2*a);



printf("Pierwiastki rzeczywiste rownania wynosza:n");



printf("tx1=%fn",x1);

printf("tx2=%fn",x2);

/*i wyświetlamy wyniki*/

}

return 0;

}

Drugi przykład:

Kod:
#include <stdio.h>

#include <math.h>



int main()

{

int a;



printf("Podaj a : ");





scanf("%d",&a);



if (a==1)



{

printf(" Blad !!! a = %dn",a);

return 1;

}





else

{

printf("a nie równa sie 1 n");

}

return 0;

}



Uwagi:
• blok instrukcji (instrukcja złożona)
• instrukcja return
• edycja programu, wcięcia
• funkcja sqrt – biblioteka matematyczna

Podstawowe funkcje matematyczne
Konstrukcja else - if
double exp(double x) exp(x)
double log(double x) ln(x)
double log10(double x) log(x)
double pow(double x, double y) xy
double sqrt(double x) sqrt(x)
double fabs(double x) |x|
double sin(double x) sin(x)
double cos(double x) cos(x)
double tan(double x) tg(x)
double asin(double x) arcsin(x)
double acos(double x) arccos(x)
double atan(double x) arctg(x)
int abs(int k)
|k|
- użycie funkcji matematycznych wymaga:
- włączenia pliku nagłówkowego math.h

Konstrukcja else – if
• realizuje decyzje wielowariantowe
• składnia:
if (wyrażenie0)
instrukcja0;
else if (wyrażenie1)
instrukcja1;
……
else if (wyrażenie_k)
instrukcja_k;
else
instukcja_ostatnia;
• wykonanie – wyliczenie kolejnych wyrażeń,
pierwsze wyrażenie prawdziwe (<>0) powoduje
wykonanie instrukcji z nią związanej i
zakończenie całej konstrukcji; jeżeli żaden
warunek nie jest spełnione wykonana jest
instrukcja po ostatnim else
• przykład:
int punkty;
float ocena;
if (punkty>92)
ocena=5.0;
else if (punkty>85)
ocena=4.5;
else if (punkty>7Cool
ocena=4.0;
else if (punkty>70)
ocena=3.5;
else if (punkty>60)
ocena=3.0;
else
ocena=2.0;


Pętla while
• wykonuje instrukcję (blok) wiele razy
• składnia:
while (wyrażenie)
instrukcja;
• wykonanie: oblicza wartość wyrażenia, gdy
wynik różny od 0, to wykonuje instrukcję, a
następnie znowu oblicza wyrażenie. Ten cykl
powtarza się do chwili gdy wyrażenie = 0.
• nie ma gwarancji, Ŝe pętla wykona się choćby
raz
• Przykład:
Kod:
#include <stdio.h>

/* przyklad pętli while */

main()

{

float fahr, cels;

printf(” T[F] T[C]n”);

printf(“------------------n“);

fahr=0;

while (fahr<=150)

{

cels=5*(fahr-32.0)/9;

printf(“%6.1f %6.1fn“,fahr,cels);

fahr=fahr+10;

}

}
Pętla for
Inna realizacja powyższego programu:
Kod:
#include <stdio.h>

#define T_DOL 0 /* dolna wartosc temp. */

#define T_GORA 150 /* gorna wartosc temp. */

#define T_KROK 10 /* wartosc kroku temp. */

main()

{

int fahr;

printf(” T[F] T[C]n”);

printf(“------------------n“);

for (fahr=T_DOL; fahr<=T_GORA; fahr=fahr+T_KROK)

printf(“%6.1f %6.1fn“, fahr, 5*(fahr-32.0)/9);

}
Uwagi:
• dyrektywa define – definicja stałej
symbolicznej
o ułatwia analizę i zmianę parametrów
o konwencja – stałe symboliczne piszemy dużymi
literami
o nie dajemy znaku ; na końcu linii #define
• składnia pętli for:
for (wyr1; wyr2; wyr3)
instrukcja;
gdzie: wyr1 – instrukcja inicjalizująca
wyr2 – wyrażenie warunkowe
wyr3 – instrukcja modyfikująca
równoważne rozwinięciu:
wyr1;
while (wyr2)
{
instrukcja;
wyr3;
}
• wyrażenie wyr1, wyr2, wyr3 – nie muszą
wystąpić (ale średniki oddzielające – tak)
• nie ma gwarancji, Ŝe pętla będzie wykonana
chociaż raz
• for często stosowana – sterowanie pętlą
skupione w jednym miejscu
Kod:
#include <stdio.h>

/* Przyklad działania pętli for */

main()

{

int k, s1, s2, s3;

for (k=1, s1=0, s2=0, s3=0; k<=10; k=k+1)

{

s1=s1+k;

s2=s2+k*k;

s3=s3+k*k*k;

}

printf(“Suma liczb = %dn”,s1);

printf(“Suma kwadratow liczb = %dn”,s2);

printf(“Suma szescianow liczb = %dn”,s3);

}
• często stosowana konstrukcja – zagnieżdżenie
pętli
Przykład: wydrukować w wierszy wydruku, pierwszy ma
zawierać sz gwiazdek, w każdym następnym ma być o 1
gwiazdkę więcej
Kod:
#include <stdio.h>

void main()

{

int w,sz,k,n;

printf(”Podaj ilosc wierszy i szerokosc pierwszego wiersza: ”);

scanf(”%d %d”,&w,&sz);

for (k=0; k<w; k=k+1)

{

for(n=0; n<(sz+k); n=n+1)

printf(“*”);

printf(“n”);

}

}
Pętla do ... while
• składnia:
do
instrukcja;
while (wyrażenie);
• działanie – podobne do pętli while. Różnica –
odwrócona kolejność wykonywania instrukcji oraz
wyrażenia warunkowego
• mamy gwarancję, że instrukcja będzie wykonana co
najmniej raz
• rzadziej stosowana niż while i for
• Przykład: wczytanie dodatniej liczby całkowitej
Kod:
int n,k,blad;

do

{

printf(”Podaj dodatnia liczbe calkowita : ”);

k=scanf(”%d”, &n);

if ((k!=1) || (n<=0))

{

blad=1;

printf(“nTo nie jest dodatnia liczba calkowita!n”);

}

else blad=0;

}
while (blad);
• operatory logiczne: != (jest róŜny), || (suma
logiczna)
Instrukcja switch
• realizacja decyzji wielowariantowej; sprawdzenie,
czy wartość pewnego wyraŜenia pasuje
do jednej z kilku wartości całkowitych
• składnia:
switch (wyraŜenie)
{
case wyraŜenie_stałe_1 : ciąg_instr_1;
case wyraŜenie_stałe_2 : ciąg_instr_2;

case wyraŜenie_stałe_k : ciąg_instr_k;
default : ciąg_instr_default;
}
• działanie:
o wyliczenie wartości wyraŜenia
o porównanie wyliczonej wartości do wartości
wyraŜeń_stałych_k – jeŜeli zachodzi równość, to
następuje przeskok do ciągu_instr_k, po czym
wykonane są wszystkie instrukcje poniŜej
o jeŜeli Ŝaden przypadek nie jest zgodny z
wartością wyraŜenia, to nastąpi przejście do
przypadku default (o ile występuje);
przypadek default nie musi być na końcu !!!
• uwaga:
o wyraŜenie i wyraŜnia_stałe_k muszą być typu
całkowitego lub znakowego
o gdy chcemy, by dla przypadku k wykonany był
tylko ciąg_instr_k, stosujemy instrukcję break
na końcu ciągu_instr_k
Przykład:
Kod:
#include <stdio.h>

/* Przykład uŜycia instrukcji switch, break */

main()

{

int m;

printf(“Podaj numer miesiaca : “);

scanf(”%d”,&m);

switch (m)

{

case 1: case 3: case 5: case 7:

case 8: case 10: case 12:

printf(“Liczba dni: 31n”);

break;

case 4: case 6: case 9: case 11:

printf(“Liczba dni: 30n”);

break;

case 2:

printf(“Liczba dni: 28 lub 29n”);

break;

default:

printf(“Niewlasciwy numer miesiacan”);

break;

}

}

//kody źródłowe dałem w znaczniki [c0de]. Mo4x.
//PS: bardzo fajny tutorial.
 

Zero_Cool

Użytkownik
Dołączył
Listopad 1, 2006
Posty
206
hmmm... wydaje mi sie ze :
1. tutek jest malo CZYTELNY
smile.gif
wybacz no ale takie odnosze wrazenie
2. wrzucil bym go do dzialu z TUTORIALAMI
smile.gif


pozdrawiam
 
Status
Zamknięty.
Do góry Bottom