Politechnika Świętokrzyska w Kielcach |
|||
Laboratorium z programowania w języku C |
|||
ĆWICZENIE NR 2 |
TEMAT: Funkcje. Operacje wejścia - wyjścia. Programy wielomodułowe. Struktura programu. Preprocesor. Rekurencja. |
ZESPÓŁ :
|
|
Data wykonania ćwiczenia : 1998-11-16 |
Data oddania sprawozdania : 1998-12-07 |
Ocena :
|
Przebieg ćwiczenia.
1. Operacje wejścia - wyjścia.
Podać rezultat działania programu.
#include <stdio.h>
int main(void)
{
int n=543;
int p=5;
float x=34.5678;
printf("A: %d %f\n",n,x);
printf("B: %4d %10f\n",n,x);
printf("C: %2d %3f\n",n,x);
printf("D: %10.3f %10.3e\n",x,x);
printf("E: %-5d %f\n",n,x);
printf("F: %*d\n",p,n);
printf("G: %*.*f\n",12,5,x);
printf("H: %x : %8x :\n",n,n);
printf("I: %o : %8o :\n",n,n);
return 0;
}
wynik działania:
A: 543 34.567841
B: 543 34.567841
C: 543 34.567841
D: 34.568 3.457e+01
E: 543 34.567841
F: 543
G: 34.56784
H: 21f : 21f :
I: 1037 : 1037 : A: 543 34.567841
Liczba umieszczona przed parametrem określającym format wyświetlanej wartości informuje o tym na ilu minimalnie miejscach ma być ta wartość wyświetlona. Jeśli wartość zajmuje w rzeczywistości mniej miejsca to są dodawane dodatkowe spacje (z lewej strony - gdy nie ma dodatkowych operatorów, z prawej strony - gdy występuje operator „-” ). W przypadku operacji na liczbach zmiennopozycyjnych można dodatkowo zadeklarować (liczba po kropce) ilość miejsc wyświetlanych po przecinku. Za pomocą operatorów „x” i „o” zmieniamy format wyświetlanej wartości odpowiednio na: x - szesnastkowy, o - ósemkowy. Ilość pozycji, na których ma być wyświetlana wartość, można też zadeklarować nie wprost, przez umieszczenie znaków „*” lub „*.*”. Pod znaki te podstawiane są następnie odpowiednio wartość lub wartości argumentów poprzedzających właściwe argumenty wywołania funkcji.
Podać wynik działania programu:
# include <stdio.h>
int main(void)
{
char c;
int n;
c='S';
printf("A: %c\n",c);
n=c;
printf("B: %c\n",n);
printf("C: %d %d\n",c,n);
printf("D: %x %x\n",c,n);
return 0;
}
wynik działania:
A: S
B: S
C: 83 83
D: 53 53
Przy wywołaniu funkcji printf można zmienić typ wyświetlanej zmiennej oraz jej format. W przykładzie powyższym zmiennej n typu całkowitego (int) przypisano wartość zmiennej c typu znakowego (char). Następnie wartości zmiennych c i n zostały wyświetlone jako wartości zmiennych typu znakowego (c - char) oraz typu całkowitego w formacie dziesiętnym (d) i szesnastkowym (x). Konwersja typu i zmiana formatu nastąpiła automatycznie.
Podać rezultat działania programu:
#include <stdio.h>
int main(void)
{
int n,p;
scanf("%d %d",&n,&p);
printf("n=%d p=%d\n",n,p);
return 0;
}
wynik działania, gdy:
na wejściu znajdują się dane:
253_45 <Enter> (znak „_” oznacza spację)
n=253 p=45
na wejściu znajdują się dane:
_253 <Enter>
__4_5<Enter>
n=253 p=4
Funkcja scanf służy do wprowadzania danych ze standardowego strumienia wejściowego stdin. Wartości danych wejściowych sformatowane za pomocą operatora formatu % są przypisywane do zmiennych poprzedzonych znakiem &. W naszym przypadku są to zmienne n i p. Kolejne wczytywane wartości należy oddzielić znakiem spacji lub Enterem. Funkcja wczytuje tylko tyle wartości ile jest zmiennych poprzedzonych znakiem &. Spacje początkowe są pomijane.
Jakie wartości wczyta do zmiennych n i p (typu int) instrukcja:
scanf("%4d %2d",&n,&p);
wynik działania, gdy:
na wejściu znajdują się dane 12_45 <Enter>
n=12 p=45
na wejściu znajdują się dane 123456 <Enter>
n=1234 p=56
na wejściu znajdują się dane 123456_7 <Enter>
n=1234 p=56
na wejściu znajdują się dane 1_458 <Enter>
n=1 p=45
na wejściu znajdują się dane ___4567_ 8912 <Enter>
n=4567 p=89
Wywołując instrukcję scanf można zadeklarować długość wczytywanego łańcucha (w naszym przypadku 4 i 2). Jeżeli wejściowy strumień jest dłuższy (od zadeklarowanego) to wczytanych będzie tylko tyle znaków ile zadeklarowano, reszta jest odrzucana lub przypisywana kolejnej zmiennej (o ile taka istnieje).
Funkcje.
Program wywołujący kolejno trzy funkcje: f1, f2 i f3.
Funkcja f1 wyświetla napis „Dzien dobry”, funkcje f2 i f3 wyświetlają ten sam napis zadaną w argumencie ilość razy, a funkcja f3 dodatkowo zwraca wartość 0.
#include <stdio.h>
void f1(); //deklaracja funkcji f1
void f2(int); //deklaracja funkcji f2
int f3(int); //deklaracja funkcji f3
void main(void)
{
int wartosc,ile;
f1(); //wywołanie funkcji f1
printf("Podaj wartosc okreslajaca ilosc wywolan:");
scanf("%d",&ile); //pobranie argumentu określającego liczbę wywołań napisu
f2(ile); // wywołanie funkcji f2 z parametrem ile
printf("Podaj wartosc okreslajaca ilosc wywolan:");
scanf("%d",&ile); //pobranie argumentu określającego liczbę wywołań napisu
wartosc=f3(ile); // wywołanie funkcji f3 z parametrem ile, przypisanie wartości tej funkcji do zmiennej wartość
printf("%d\n",wartosc);
}
void f1() // definicja funkcji f1
{ //
printf("Dzien dobry\n\n"); //
} //
void f2(int ile) // definicja funkcji f2
{ //
int i; //
for(i=1;i<=ile;++i) //
printf("Dzien dobry\n"); //
printf("\n"); //
} //
int f3(int ile) // definicja funkcji f3
{ //
int i; //
for(i=1;i<=ile;++i) //
printf("Dzien dobry\n"); //
return 0; //
} //
Chcąc wykorzystać w programie własną funkcję należy ją zadeklarować i zdefiniować. Deklaracja funkcji stanowi informację dla kompialtora, że funkcja o podanej nazwie, typie wartości i parametrów może być gdzieś użyta w programie, definicja określa natomiast co ta funkcja robi. Funkcja może zwracać wartość, wtedy jej nazwa przy deklaracji i definicji powinna być poprzedzona identyfikatorem typu tej wartości, w przeciwnym przypadku przyjmowany jest jako domyślny typ int. Jeżeli funkcja ma nie zwracać wartości (odpowiednik procedury w Pascalu) należy w miejscu identyfikatora typu umieścić słowo kluczowe void. Do funkcji mogą (ale nie muszą) być również przekazywane parametry, ich typy muszą być wcześniej określone w definicji i deklaracji funkcji. Parametry te mogą być jedynie przekazywane przez wartość: poprzez wpisanie jako parametru wywołania wprost określonej wartości lub nazwy zmiennej, której wartość została określona wcześniej (drugi sposób został wykorzystany w programie powyżej).