Podstawy C, Tutorial

corpseRott

Użytkownik
Dołączył
Sierpień 21, 2011
Posty
6
Słowem Wstępu:

To mój pierwszy tutorial mający przedstawić podstawy programowania w C, skierowany jest do
ludzi zaczynających zabawę w C, którzy nigdy nie mieli styku z innym językiem, postaram się
w tym miejscu wytłumaczyć logikę, syntax, oraz sformuowania występujące w tym bardzo popularnym
ale ostatnio porzucanym na rzecz C++ języku.


Początek


Aby zacząć należy w łapki dorwać jeden z szeroko dostępnych kompilatorów, moim zdaniem, dla
początkujących najlepiej zda się Bloodshed Dev C++ dostępny ze strony producenta:

http://www.bloodshed.net/devcpp.html

Kompilator - w skrócie oprogramowanie służące do tworzenia z waszych skrzętnie tworzonych
kodów, wykonywalny program.


Wstęp


Sugeruję przeczytać ten fragment postu aby zapoznać się z podstawami, jeśli pominiecie
to, w dalszej części tutoriala możecie się pogubić.


Zmienne


Wasz program wykorzystuje sporo dozę zmiennych, zmienne to inaczej "miejsca" przydzielone
w pamięci komputera w których możecie składować pewne wartości, wasz komputer wymaga żebyście
zadefiniowali je odpowiednio aby wiedział jak je traktować.

oto krótka lista najczęściej używanych zmiennych:

int; (Integer, Liczba Całkowita) Przykład

Kod:
int nasza_zmienna = 1;
nasza_zmienna * 1.5;

W tym wypadku wykonaliśmy mnożenie na naszej zmiennej równej 1, mnożąc ją przez 1,5.
Jeśli po wykonaniu tego równania sprawdzimy jaką liczbę przetrzymuję nasza_zmienna, to
zauważymi że nic się nie zmieniło, i wartość nadal jest równa 1. Czemu tak się dzieje?

nasza liczba 1 mnożona jest przez 1,5 co daję nam jak nie trudno się domyślić 1,5
Niestety przypisaliśmy tą wartość zmiennej całkowitej, program więc aby dostosować się do naszych
zaleceń pozbywa się wszystkich cyfr po przecinku (w naszym wypadku 0,5) i z 1,5 robi się 1.

float; (Float, Liczba Zmiennoprzecinkowa) Przykład

Kod:
float nasza_zmienna = 1;
nasza_zmienna * 1.5;

W tym wypadku wykonaliśmy mnożenie ale jeśli sprawdzimy co kryję się pod nasza_zmienna to okażę
się że wynosi ona 1.5 w porównaniu do inta, wartość 0,5 nie została ucięta ponieważ domyślnie
przekazaliśmy komputerowi informacje że operujemy na liczbach nie całkowitych.

char; (Character, Znak) Przykład

Kod:
char nasza_zmienna = 'k';

Jeśli sprawdzimy co kryję się pod nasza_zmienna to odkryjemy że jest to znak k, czemu użyliśmy
cudzysłowiów? Gdybyśmy bezpośrednio przypisali = k; to sprawilibyśmy że program wyszuka zmiennej k
i przypiszę wartość zmiennej k do nasza_zmienna.

Więcej zmiennych na: http://pl.wikipedia.org/wiki/C_(język_programowania)#Typy_podstawowe

Zmienne - Tablice


Dodatkowo warto wspomnieć że istnieje coś takiego jak tablica, tablica jest niczym innym jak zbiorem wielu oddzielnych elementów w jednej zmiennej (ale nie zaalokowanych w tej samej pamięci)

Przykład
Kod:
int x[2];
x[0] = 1;
x[1] = 1;

W następującym przykładzie mamy tablicę integerów złożoną z 2 elementów, pewnie zauważyliście że przy przypisaniu kolejnym elementom tablicy wartości zacząłem numeracje od 0, otóż nasz słodki komputer numeruje od zera, z natury.

Operatory Logiczne


Operator logiczny to inaczej znak który pozwala komputerowi wykonać pewne proste czynności
logiczne, jako istoty żywe prosto nam odróżnić sformuowania typu: i, oraz, albo, nie itp
Komputer niestety ma z tym spore trudności, więc należy mu pomóc, operatory logiczne to:

&& - Operator "i", w przypadku warunków, operator ten określa że oba warunki muszą być spełnione
aby zaistniała operacja

|| - Operator "lub", jeden z warunków musi być spełniony aby zaistniała operacja, operacja zaistnieje również w wypadku spełnienia obu warunków.

! - Operator "nie", negacja, warunek nie może zostać spełniony aby zaistniała operacja.

Przykład
Kod:
!(Kupimy Ziemniaki) && (Słodycze || Owoce)

Czyli zdanie to jest prawdziwe jeśli nie kupimy ziemniaków i kupimy słodycze lub owoce.


Funkcje i Biblioteki


C jest językiem wykorzystującym od groma i ciut ciut funkcji, najważniejsza
funkcja to funkcja main() która jest swojego rodzaju ciałem naszego programu, to ona uruchamia
się jako pierwsza w przypadku wywołania programu, i to od niej odgałęziają się kolejne
części programu.

Przykład zaimplementowania funkcji main:

Kod:
#include <stdio.h>

int main()
{
    int k = 2;
    printf("Zmienna k: %d", k);
    return 0;
}


Następujący program wyświetli na ekranie:

Zmienna k: 2
po czym zakończy proces.


Tłumaczymy po kolei:

Kod:
#include <nazwa_biblioteki>

Nasz program wykorzystuję szereg bibliotek które zawierają w sobie podstawy funkcji, niewiarygodnie
przydatne przy użytkowaniu języka, to forma skrótów dzięki którym nie musimy spędzać lat na naukę
podstaw, w podanym przykładzie zamieściliśmy bibliotekę stdio.h, jest to standardowa biblioteka
wyjścia/wejścia, zawiera multum funkcji podstawowych w tym printf(); który został użyty, w naszym
kodzie. Gdybyśmy nie zadefiniowali użycia biblioteki <stdio.h> poprzez #include to kompilator
wyplułby nam błąd że funkcja printf(); nie istnieje.

Funkcja printf("Zawartość", nazwa zmiennej); służy do wyświetlania na ekranie zawartości
przypisanej pod argumentem, funkcja ta wymaga podania typu zmiennej jaką ma wypluć jeśli takowa jest obecna,
jeśli przeczytaliście wcześniejszy mini-dział zmienne (Integer, Float, Char) to wiecie już czym jest zmienna, oto
lista symboli omówionych wcześniej zmiennych:

"%d" - Integer
"%f" - Float
"%c" - Char
"%s" - String (Seria znaków Charów)

W podobny sposób działa większość funkcji w <stdio.h>

Skoro można wyświetlić logiczne jest że można też pozwolić użytkownikowi wpisać jakąś wartość,
służy do tego funkcja scanf("Zawartość", nazwa zmiennej);

Ale tyle gadamy o tych funkcjach a przecież nie podaliśmy jeszcze zasadniczych własności funkcji ;) Otóż okazuję się że programista również może pisać funkcje, a człowiek trochę już z tematem obeznany nie wyobraża sobie pracy posiadając tylko jedną funkcje main()

Funkcja składa się generalnie z 3 składników:
*Nazwa
*Typ zwracanej wartości
*Argumenty (nie są niezbedne)

Przykład
Kod:
#include <stdio.h>

int nasza_Funkcja(int k);

int main(void)
{
int wynik;
wynik = nasza_Funkcja(3);
printf("%d", wynik);
return 0;
}

int nasza_Funkcja(int k)
{
k = k + 1;
return k;
}

W powyższym przykładzie zrobiliśmy sobie funkcje nasza_Funkcja której jedynym zadaniem jest zwiększenie podanej jej liczby o 1, chyba już domyślacie się jak to działa. Na początku deklarujemy naszą funkcje (powyżej int main(void)), deklaracja jest obowiązkowa, chodź pewne kompilatory jej nie wymagają.
Daliśmy jej argument 3, co znaczy że zwróci nam wartość k = 4, po wywołaniu funkcji zapisaliśmy nasz wynik do zmiennej wynik, i kazaliśmy naszemu komputerowi wyświetlić zawartość zmiennej wynik.

Oczywiście nie potrzebujemy argumentu, równie dobrze możemy stworzyć następującą funkcje

Kod:
int nasza_Funkcja()
{
printf("Śmierć dzieciom tibii");
return 0;
}

Która tylko na naszym ekranie wyświetli ten jakże słodki tekst po czym zwróci 0;

Warunki, pożyteczne funkcje


* if(warunek){co wykonać jeśli spełniony}

Przykład

Kod:
if(x == 1)
{
printf("Odbyto waniajet");
}
else
{
printf("Nie waniajet?");
}

konstrukcja if sprawdza czy podany warunek (czy x jest równe 1) jest spełniony, jeśli tak na ekranie naszym pojawi się zdanie "Odbyto waniajet"
jeśli warunek ten nie jest spełniony wyświetlone zostanie zdanie "Nie waniajet?"

* while(warunek){co wykonywać póki spełniony}

Przykład
Kod:
int x = 0;
int y = 3;

while(x < y)
{
printf("x jest mniejsze od y");
x++;
}

Pętla while wykonuje się tak długo jak spełniony jest warunek, petla ta wykona się w sumie 3 razy, za pierwszym razem x będzie wynosiło 0 (0<3) za drugim 1 (1<3), za trzecim 2 (2<3) ale za czwartym razem warunek nie będzie już spełniony ponieważ 3 nie jest mniejsze niż 3 tylko równe.

*for(inicjalizacja; warunek; skok){co wykonywać póki spełniony}

Przykład
Kod:
int x = 0;
int y = 3;

for(x = 0; x < 3; x++)
{
printf("x jest mniejsze od y");
}

Powyżej przykład pętli for() równoważnej do wcześniej podanej pętli while().
Inicjalizacja to inaczej kiedy pętla się zaczyna, warunek to do jakiego momentu będzie odwarzana, a skok to inaczej co ile zmieniać warunek, w podanym przypadku użyte jest x++; ale równie dobrze możemy zmienić to na x = x + 2 co sprawi że pętla odtworzy się tylko 2 razy.

Oto i podstawy programowania w C, możliwie jak najprościej opisane, postu nie blokować, cobym mógł go kiedyś edytować bo zamierzam go z czasem rozwijać i poprawiać, nowicjuszom życzę miłego kodowania, a staruchów proszę o komentarze.

Przykład programu

Następujący program liczy pewną funkcje dla podanej wartości, zależno czy podana zmienna jest parzysta czy nie parzysta zostanie użyte inne równanie:

W programie jest sporo błędów/zbędnych rzeczy, zadanie na dziś dla nowych programistów C - znaleźć co jest nie tak, i wytknąć.

Kod:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(void)
{
int n; /* Integer n */
int loop; /* Loop standarizer */
long double x; /* Result x */
char k[100]; /* Command Input */


printf("Welcome to the expression calculator, the programme will calculate a certain \n");
printf("function for a given natural n\n\n");
printf("Please input n, it has to be a natural number:");
scanf("%d", &n);

if (n<0){
        printf("Number %d is not a natural number, please input a correct value\n\n", n);
        }
        else
        { 

if ((n/2)*2 == n) 
   {
   printf("n is even, therefore, we calculate 0.5*n+n^2\n\n");
   printf ("Hence n equals, %.2f\n", 0.5*n+pow(n,2));
   }
else {
     printf("n is odd, therefore, we calculate n(n-5)");
     printf ("Hence n equals, %.2f\n", (pow(n,n)-5*n));
     }   
         }


system("pause");
return 0;
}

Więcej na: http://pl.wikipedia.org/wiki/C_(język_programowania)

Pytania zadawać na PM albo w temacie.

// Ile można pisać, że kolorowe czcionki są dla moderatorów?
 
Ostatnia edycja:

corpseRott

Użytkownik
Dołączył
Sierpień 21, 2011
Posty
6
Fakt, dosyć lepiej sprawuję się Visual, ale jak na złośliwość Dev cpp jest bardziej intuicyjny, i prostszy, przez co zawsze polecam go osobom dopiero zaczynającym przygodę z C, z czasem można się przerzucić na tego Visuala lub codeblocks.

Dodatkową zaletą DEVa jest to że nie próbuję Cię poprawiać, i nie wpycha się do wszystkiego co robisz, i to jest główny jego plus, i powód dlaczego zawsze polecam go początkującym, w skrócie jak trafisz do firmy w której dozwolone jest używanie tylko notatniczka typu KAte i makefile'a, to przyjazne środowisko w którym pracowałeś wcześniej może się na tobie niewygodnie odbić.

Ale nie ma co zmieniać tego tematu w polemikę który kompilator jest lepszy, bo to i tak się skończy w ten sam sposób, przyjdzie jakiś gość i rzuci: A JA JESTEM HARDKOREM I PISZĘ PROGRAMY W VIMIE! :D
 
Ostatnia edycja:

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
0. "nasza_zmienna * 1,5;" zamiast przecinka powinna być kropka.
1. "C jest językiem wykorzystującym od groma i ciut ciut funkcji w swojej składni", do składni języka należy tylko to, jak funkcja jest tworzona i wywoływana.
2. "bibliotekę stdio.h, jest to standardowa funkcja wyjścia/wejścia", zamiast "funkcja" powinno być "biblioteka".
3. "Gdybyśmy nie zadefiniowali użycia biblioteki <stdio.h> poprzez #include to kompilator wyplułby nam błąd że funkcja printf(); nie istnieje.", no chyba że załączylibyśmy swoją/inną bibliotekę z tą funkcją :)
4. "zrobiliśmy sobie funkcje Nasza_Funkcja", standardowo nazwy funkcji zaczyna się od małej literki.
5. "if(warunek){co wykonać jeśli spełniony};", ostatni średnik jest zbędny.
6. "Funkcja if sprawdza", "if" nie jest funkcją, a konstrukcją składniową.
7. "*for(inicjalizacja; warunek; zakres){co wykonywać póki spełniony}", chyba bardziej pasowałoby "skok" albo "krok".

"A JA JESTEM HARDKOREM I PISZĘ PROGRAMY W VIMIE!"
Ja piszę, nie wiem, co w tym dziwnego.
 

dodoxx6

Były Moderator
Dołączył
Luty 15, 2011
Posty
252
Kod:
char nasza_zmienna = 'k';

Jeśli sprawdzimy co kryję się pod nasza_zmienna to odkryjemy że jest to znak k, czemu użyliśmy
cudzysłowiów
"Cudzysłowiów"?


"A JA JESTEM HARDKOREM I PISZĘ PROGRAMY W VIMIE!"
Ja piszę, nie wiem, co w tym dziwnego.
Też nie wiem.

A co do Tutorialu, osoba która absolutnie nic nie wie będzie musiała się szybko uczyć. Moim zdaniem lepsze jest to dla osób początkujących, może to być przypomnienie lub rozszerzenie. Warto było by usunąć też te "małe błędy". Ale ogólnie dobry jak na pierwszy tutorial.
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
jeszcze do łańcuchów formatujących można dodać %u - dziesiętny bez znaku, %x -szesnastkowy i mniej znany %n oczekujący jak %s wskaźnika.

dobra robota ;)
 

corpseRott

Użytkownik
Dołączył
Sierpień 21, 2011
Posty
6
0. "nasza_zmienna * 1,5;" zamiast przecinka powinna być kropka.
1. "C jest językiem wykorzystującym od groma i ciut ciut funkcji w swojej składni", do składni języka należy tylko to, jak funkcja jest tworzona i wywoływana.
2. "bibliotekę stdio.h, jest to standardowa funkcja wyjścia/wejścia", zamiast "funkcja" powinno być "biblioteka".
3. "Gdybyśmy nie zadefiniowali użycia biblioteki <stdio.h> poprzez #include to kompilator wyplułby nam błąd że funkcja printf(); nie istnieje.", no chyba że załączylibyśmy swoją/inną bibliotekę z tą funkcją :)
4. "zrobiliśmy sobie funkcje Nasza_Funkcja", standardowo nazwy funkcji zaczyna się od małej literki.
5. "if(warunek){co wykonać jeśli spełniony};", ostatni średnik jest zbędny.
6. "Funkcja if sprawdza", "if" nie jest funkcją, a konstrukcją składniową.
7. "*for(inicjalizacja; warunek; zakres){co wykonywać póki spełniony}", chyba bardziej pasowałoby "skok" albo "krok".

"A JA JESTEM HARDKOREM I PISZĘ PROGRAMY W VIMIE!"
Ja piszę, nie wiem, co w tym dziwnego.

1. Poprawione
2. Poprawione
3. Faktycznie można tak zrobić ;P ale moim zdaniem trochę mieszaniem nowym ludziom :p
4. Poprawione
5. Poprawione
6. Poprawione
7. W opisie było użyte słowo skok, a w funkcji zakres, poprawione

Tutorial był pisany na żywioł, bez zaglądania do kompilatora w trakcie (z wyjątkiem ostatniego kodu) czy poprawiania, dlatego takie błędy mogły się pojawić.

Swoją drogą, mam wrażenie że znęcasz się trochę nade mną za VIMa :p lol

jeszcze do łańcuchów formatujących można dodać %u - dziesiętny bez znaku, %x -szesnastkowy i mniej znany %n oczekujący jak %s wskaźnika.

Nie chcę przesadnie mieszać, dlatego podałem tylko podstawy podstaw, a wzkaźniki poruszę pewnie w innym tutorialu kiedyś.

// Ile można pisać, że kolorowe czcionki są dla moderatorów?

Kolorowe czcionki nadają czytelności tekstowi, ale jestem tu nowy więc się podporządkuję ;(
 

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
ogólnie inicjatywa dobra, wykonanie - też nie najgorsze ale...
Tutorial był pisany na żywioł, bez zaglądania do kompilatora w trakcie
na przyszłość: zanim coś napiszesz, to lepiej to sprawdź, unikniesz niepotrzebnych błędów

off
firmy w której dozwolone jest używanie tylko notatniczka typu KAte
słyszałeś o takiej firmie?;D
 

D.F.

Były Moderator
Dołączył
Listopad 4, 2009
Posty
493
Kod:
int nasza_zmienna = 1;
nasza_zmienna * 1.5;
Kod:
float nasza_zmienna = 1;
nasza_zmienna * 1.5;
Mi się wydaje, że wynik takich mnożeń zostanie utracony. Nie powinno być czasem:
Kod:
int nasza_zmienna = 1;
nasza_zmienna *= 1.5;
Kod:
float nasza_zmienna = 1;
nasza_zmienna *= 1.5;
 

elaborat

Użytkownik
Dołączył
Grudzień 15, 2011
Posty
9
corpseRott tutorial jest na prawdę dobry. Pytanie czy mógłbyś wytłumaczyć "Zliczanie" chodzi mi o zliczanie znaków, wierszy, oraz zliczanie słów. Uczę się z książki Klasyka Informatyki. Wcześniej nie miałem styczności z innymi językami programowania, a w tej książce moim zdaniem nie jest zbyt dobrze wytłumaczone.
Z góry wielkie dzięki za pomoc:)
 
Do góry Bottom