Kurs C++2, M 1, Ćwiczenie 3.1


Ćwiczenie 1.

Programowanie w języku C.

1.1. Pierwszy program w C

Program w języku C, składa się ze zmiennych, stałych oraz funkcji. Zmienne i stałe służą do przechowywania danych, na których program operuje przy pomocy funkcji. W języku C program zawsze rozpoczyna się od głównej funkcji o nazwie main(). Funkcja ta jak, wszystkie funkcje, zwraca domyślnie wartość typu całkowitego (int). Nazwę funkcji można poprzedzić jawną deklaracją typu zwracanej wartości. Jeśli funkcja nie zwraca żadnej wartości, to należy ją zadeklarować jako typu void. W nawiasach () można umieścić listę argumentów. Jeśli funkcja jest bezargumentowa, to w nawiasach należy umieścić słowo void. Treść funkcji (blok instrukcji) umieszcza się w nawiasach klamrowych, które można zagęszczać.

Oprócz funkcji zdefiniowanych przez programistę, program może wykorzystywać wcześniej zdefiniowane funkcje biblioteczne zawarte w plikach nagłówkowych, niezbędne do zapewnienia komunikacji z systemem operacyjnym i obsługujące operacje wejścia-wyjścia (klawiatura, monitor, dyski, drukarka). Aby skorzystać z funkcji bibliotecznych, należy dołączyć odpowiedni plik nagłówkowy umieszczając przed funkcją główną dyrektywę #include <nazwa pliku nagłówkowego>. Najczęściej dołączanym plikiem nagłówkowym jest stdio.h. Zawiera on deklaracje standardowych funkcji do obsługi wejścia/wyjścia .

W treści programu można umieścić komentarz jednowierszowy poprzedzony znakiem // lub wielowierszowy rozpoczęty znakiem /* a zakończony znakiem */. W języku C rozróżnia się duże i małe litery.

Program 1.1

#include <stdio.h> //dołączenie pliku nagłówkowego zawierającego funcję printf()

void main( ) //nagłówek funkcji głównej typu nieokreślonego, bez parametrów w nawiasach

{ //nawias otwierający ciało funkcji

printf("Pierwszy program\n"); /* wywołanie funkcji printf() z jednym

tekstowym argumentem */

} //nawias zamykający funkcję main() i koniec programu

1.2. Typy i rozmiary danych

W języku C mamy do dyspozycji takie podstawowe typy danych jak:

char jeden bajt, mieści jeden znak ze zbioru znaków

int typ całkowity, na platformach 32 bitowych zakres liczb reprezentowanych przez ten typ to -2^31 do +2^31-1;

float typ zmiennoprzecinkowy pojedynczej precyzji, służy do przechowywania liczb rzeczywistych;

double typ zmiennoprzecinkowy podwójnej precyzji, służy do przechowywania liczb rzeczywistych, ale z większą precyzją.

Dodatkowo dostępne kwalifikatory do stosowania razem z typem int:

short int któtki całkowity

long int długi całkowity

unsigned int całkowity bez znaku (tylko dodatnie)

Słowo int może być opuszczone, a więc równoważny jest zapis: short, long, unsigned.

Aby się dowiedzieć jaki jest rozmiar poszczególnych typów na danym komputerze, pod kompilatorem, który jest używany można skorzystać z operatora sizeof. Operator sizeof umożliwia określenie rozmiaru (ile bajtów zajmuje w pamięci) danego typu (również typy złożone jak tablice i struktury), lub zmiennej danego typu. Rozmiar ten jest obliczany na etapie kompilacji, a wartość zwracana jest typu int.

Stałymi są liczby całkowite lub rzeczywiste bez znaku. Stałe całkowite mogą być przedstawiane w postaci znakowej (ujęte w apostrofy), dziesiętnej, ósemkowej lub heksagonalnej (szesnastkowej).

Stałe znakowe są liczbami całkowitymi więc można ich używać wszędzie tam, gdzie używa sie liczb całkowitych np.

'A' +5 daje w wyniku 70 czyli znak D,

'a' - 'A' jest równe 32 czyli znakowi spacji.

Stałe rzeczywiste są typu double.

Stała łańcuchowa (tekst) - jest ciągiem znaków ujętym w cudzysłowy. Na końcu zawiera zawsze ogranicznik czyli znak \0, dlatego zajmuje w pamięci o jeden bajt więcej niż wskazywałaby długość tekstu. Sekwencje sąsiadujących stałych łańcuchowych są traktowane jako jeden łańcuch np.:

"Ala" "i As" jest równoważne "Ala i As", natomiast napisy "A" i 'A' nie są równoważne.

Preprocesor języka C posiada możliwość definiowania stałych symbolicznych. Robi się to przy użyciu dyrektywy

#define identyfikator ciąg_znaków.

Zdefiniujemy np. stała symboliczną początek, która będzie miała wartość 10

#define początek 10

Jeśli teraz gdzieś w programie w wyrażeniu wystąpi słowo początek, to zostanie ono zamienione na liczbę 10, przed właściwą kompilacją.

W języku C wszystkie zmienne muszą być zadeklarowane przed użyciem. Deklaracja składa się z typu i listy zmiennych tego typu, odzielonych przecinkami i musi być zakończona średnikiem. Deklaracjami są np.:

float x;

int a, b=22;

Deklaracje te są także definicjami - definicja powoduje przydział pamięci dla definiowanej zmiennej. Mówią one że x jest zmienną typu float (zmiennoprzecinkowa), oraz a i b są typu int (całkowite).

Zmienna b podczas deklarowania została ponadto zainicjowana wartością 22.

Zasięgiem deklaracji zmiennej jest najwęższy blok obejmujący tę deklarację. Jeśli w obszarze zasięgu zmiennej wystąpi w bloku wewnętrznym deklaracja zmiennej o tej samej nazwie, to przesłania ona zmienna zewnętrzną.

1.3. Wprowadzanie i wyprowadzanie danych.

W programie 1.1 użyto funkcji bibliotecznej printf(). Argumentem tej funkcji, jest stała tekstowa Pierwszy program\n zawarta pomiędzy dwoma znakami ". Sekwencja \n jest znakiem sterującym, który, powoduje przejście kursora do nowej linii.

Funkcja printf() może posiadać wiele argumentów oddzielonych przecinkami. Pierwszym jej argumentem jest ciąg znaków (umieszczony w cudzysłowie) zawierający tekst do wyświetlenia oraz nie wyświetlane ale interpretowane, znaki sterujące i wzorce konwersji dla wyprowadzanych zmiennych. Kolejnymi argumentami funkcji printf() są nazwy zmiennych, które mają być wyprowadzone, oddzielone przecinkami.

Znakami sterującymi są także: \t - znak tabulacji, \0 - null (znak oznaczający koniec tekstu), \b - backspace (znak cofnięcia), \r - znak powrotu karetki, \n - przesunięcie kursora do następnego wiersza, \' - apostrof, \" - cudzysłów, \a - dzwonek.

Wzorzec konwersji poprzedzony jest znakiem %. Następnie może zawierać szerokość pola (dla liczb zmiennoprzecinkowych szerokość pola i ilość znaków po przecinku oddzielone kropką) oraz znak określający typ konwersji.

Podstawowe typy konwersji dla zmiennych:

- typu: int: i, d, u - dziesiętny, o -ósemkowy, x - szesnastkowy,

- typu float: e, f, g - postać dziesiętna z wykładnikiem lub bez,

- typu char: c,

- typu char[]: s,

- typu void*: p - para liczb szesnastkowych z dwukropkiem.

Ponadto można stosować znaczniki:

"-" - oznaczający wyrównywanie lewostronne,

"+" - poprzedzenie liczby znakiem,

spacja - poprzedzenie liczby spacją,

# - poprzedzenie liczby ósemkowej zerem, a szesnastkowej 0xlub OX.

Do przeprowadzania podstawowych operacji we/wy często używa się funkcji putc(), getc(), putch (), getch(), puts(), gets(), printf(), scanf(), cprintf().

Funkcjami przydatnymi do obsługi ekranu są zawarte w pliku conio.h: clrscr(), clreol(), gotoxy(x,y), textbackground(kolor), textcolor(kolor), window(x1,y1,x2,y2), gettext(x1,y1,x2,y2,bufor), puttext(x1,y1,x2,y2,bufor).

Do czyszczenia bufora klawiatury służy funkcja fflush(stdin) lub instrukcja: while (kbhit()).

Program 1.2.

#include <stdio.h>

#include <conio.h>

void main(void)

{

clrscr(); //funkcja czyszcząca ekran

char imie[15]; //deklaracja tablicy typu char na przechowanie łancucha znaków

int wiek; //deklaracja zmiennej typu całkowitego

puts("Podaj swoje imie"); /*funkcja wyprowadza na ekran łancuch znaków, który jest jej argumentem*/

gets(imie); //funkcja pobiera z klawiatury łancuch znaków i umieszcza go w tablicy imie[] */

puts("Podaj swoj wiek");

scanf("%d", &wiek); /*funkcja pobiera wartość w postaci określonej przez łańcuch formatujący "%d" i umieszcza ją w pamięci pod adresem wskazywanym przez &wiek*/

clrscr();

textbackground(YELLOW);

textcolor(RED);

gotoxy(30,10); //przeunięcie kursora ekranowego do 30 kolumny i 10 wiersza

printf ("\n %s ma %d lat.", imie, wiek); /*wypisanie na ekran wartości zmiennej imie jako łancucha znakowego oraz wartości zmiennej całkowitej wiek */

getch(); /*funkcja pobierająca znak z bufora klawiatury użyta w celu zatrzymania ekranu wynikowego */

} // koniec programu

1.4. Operatory arytmetyczne

Do zapisania w języku C podstawowych działań matematycznych służą następujące operatory:

+ - dodawanie,

- - odejmowanie,

* - mnożenie,

/ - dzielenie, (dla argumentów całkowitych jest to dzielenie całkowitoliczbowe),

% - reszta z dzielenia całkowitoliczbowego.

1.5. Operatory inkrementacji i dekrementacji (zwiększania i zmniejszania)

Operator inkrementacji ++ jest jednoragumentowy i powoduje zwiększenie o 1 wartości swojego argumentu. Jeśli umieszczony jest przed zmienną, to zwiększa jej wartość przed jej wykorzystaniem w instrukcji, a jeśli jest umieszczony za zmienna, to zwiększy jej wartość po jej wykorzystaniu.

Podobnie operator dekrementacji -- powoduje zmniejszenie o jeden wartości argumentu.

1.6. Operatory przypisania

Wyrażenia, w których lewa strona powtarza się po prawej stronie operatora = można zapisać w bardziej zwartej postaci np.:

a=a+1 jest równoważne a+=1

b=b*c jest równoważne b*=c

Program 1.3.

# include <stdio.h>

# include <conio.h>

# define STALA 20

void main()

{

int a=100, n;

float x=2.55555, y;

char zn='A';

clrscr();

printf("a=%d\n",a);

printf("osemkowo: a=%o\n",a);

printf("szesnastkowo: a=%x\n",a);

printf("znakowo: a=%c\n",a);

printf("x=%8.2f\n",x);

printf("STALA+a=%d\n",a+STALA);

printf("int(x)=%d\n",int(x)); //konwersja typu float do int

printf("int(zn)=%d\n",zn); //konwersja typu char do int

printf("char(a)=%c\n",char(a)); //konwersja typu int do char

printf("++a=%d\n",++a); //użycie operatora inkrementacji

printf("y=x*=2 %f\n",y=x*=2); /*opracowanie wyrażeń rozpoczyna się od prawej strony*/

printf("y=n=a/=x-=1 %f\n",y=n=a/=x-=1);

printf("a*=x++ %d\n",a*=x++);

printf("Podaj znak ");

zn=getchar();

putchar(zn);

printf("\nkod ASCII znaku: %c jest równy %d",zn, zn);

getch();

}

1.5. Obliczanie wartości wyrażeń

Operatory w języku C mają określone priorytety i konieczne jest zapoznanie się z nimi. Operatory przypisania i jednoargumentowe są prawostronnie łączne; wszystkie inne są lewostronnie łączne. Tak więc a=b=c oznacza a=(b=c) natomiast a+b+c oznacza (a+b)+c. Wyrażenia, w których występuje wiele operatorów przypisania są opracowywane od prawej strony.

Plik nagłówkowy math.h zawiera wiele funkcji matematycznych przydatnych w wykonywaniu obliczeń np. sin() - sinus, sqrt() - pierwiastek, abs() - wartość bezwzględna oraz predefiniowane stałe M_PI oznaczającą liczbę pi czy M_E - stałą Eulera e.

Programy do samodzielnego napisania:

1. Jaki znak w kodzie ASCII odpowiada podanej z klawiatury liczbie naturalnej.

2. Jaki jest rozmiar zmiennej typu long int?

3. Zapisać 35 w systemie osemkowym.

4. Obliczyć wartości pierwiastków równania kwadratowego 3x2-8x+1=0 z dokładnością do dwóch miejsc po przecinku.

5. W środkowym wierszu ekranu wypisać na środku 5 znaków * oddzielonych tabulatorem.

6. Jaki jest kod ASCII znaku <ENTER>?

7. Jaka jest wartość dziesiętna liczby heksadecymalnej 2F1?

8.Obliczyć wartości funkcji 0x01 graphic
dla x =π.

9. Oblicz wartość końcową zmiennej a, jeśli wiadomo, ze miała wartość początkową 1.

++a+=a-=b+=a/b=a++

10. Oblicz wartość wyrażenia 123-e4+ln5-log106 ˙102 .

Laboratorium Podstawy Programowania

5

Laboratorium Podstawy Programowania



Wyszukiwarka

Podobne podstrony:
Visual Basic Dla Aplikacji W Programach Word, Powerpoint I Excel Praktyczny Kurs Z Cwiczeniami
gimnastyka i ćwiczenia siłowe kurs instr metodyczny1 QVTLKQIXNSUDFP6HIQTZ37R6MDN3VSPODYEA25Q
Ćwiczenie 16, Zoologia ogólna i systematyczna - KURS DUŻY
Ćwiczenie 16, Zoologia ogólna i systematyczna - KURS DUŻY
Ćwiczenia ortofoniczne, KURS LEKTORSKI, FONETYKA, Ćwiczenia z emisji głosu, Ćwiczenia
Kształcenie aparatu mowy, KURS LEKTORSKI, FONETYKA, Dykcja, ćwiczenia logopedyczne, poprawna wymowa
Cwiczenie pytania i odpowiedzi, Kurs Jezyka hiszpanskiego
Ćwiczenie 18a - kurs instruktorski - końcowa wersja, Lotnictwo, ppl, Nawigacja, Podrecznik nawigacji
Niepełna Szybkie Czytanie Cwiczenia (Kurs Szybkiego Czytania)
Czasowniki cwiczenie, Kurs Jezyka hiszpanskiego
technika ABCD i ćwiczenie 4, ZDROWIE, UZDRAWIANIE, HUNA, Huna kurs
Ćwiczenie 18, Zoologia ogólna i systematyczna - KURS DUŻY
cwiczenia silowe na obwodzie stacyjnym, Kurs nauki pływania - konspekt nr 10 Nauka kraulowych ruchów
ĆWICZENIA REWALIDACYJNO-1, Oligofrenopedagogika, NIEPEŁNOSPRAWNOŚĆ, oligofrenopedagogika kurs
Zestaw - moje ulubione ćwiczenia, KURS LEKTORSKI, FONETYKA, Ćwiczenia z emisji głosu

więcej podobnych podstron