Pokaż wyniki od 1 do 3 z 3

Temat: tutek o C

  1. #1

    Domyślnie tutek o C

    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.

  2. #2
    Użytkownik
    Dołączył
    01-11-2006
    Posty
    189

    Domyślnie

    hmmm... wydaje mi sie ze :
    1. tutek jest malo CZYTELNY wybacz no ale takie odnosze wrazenie
    2. wrzucil bym go do dzialu z TUTORIALAMI

    pozdrawiam

  3. #3
    Dawni Moderatorzy
    Dołączył
    26-12-2005
    Skąd
    z Polski
    Posty
    527

    Domyślnie

    Originally posted by Zero_Cool
    1. tutek jest malo CZYTELNY wybacz no ale takie odnosze wrazenie
    Dałem kody w znaczniki [c0de], teraz jest już lepiej.

Podobne wątki

  1. Tutek o Asembler
    Przez areq32
    w forum Assembler
    Odpowiedzi: 9
    Ostatni post / autor: 24-12-2009, 14:25

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •