background image

Laboratorium nr 5 

1/6 

 

1) 

Parametry linii poleceń. 

 
Język  C  oprócz  wprowadzania  danych  za  pomocą  odpowiednich  funkcji  biblioteki 

standardowej  (scanf,  sscanf,  getchar,  getc,  gets  itp.)  umożliwia  również  tworzenie 

programów,  w  których  dane  wprowadzane  są  z  linii  poleceń  (podczas  wywoływania 

programu) przez użytkownika. Wprowadzanie danych z linii poleceń polega na podaniu listy 

argumentów  po  nazwie  programu  podczas  wywoływania.  Obsługa  parametrów  wymaga 

stworzenia odpowiedniej funkcji głównej „main”. Przykład takiej funkcji został przedstawiony 

poniżej: 

 

int main(int argc, char *argv[]) 

... 
return(0); 


 

 

*argv[  ]  –  jest  to  parametr,  który  jest  wskaźnikiem  na  tablicę  znakową  zawierającą 

wszystkie argumenty wprowadzane z linii poleceń. Pierwszym elementem tablicy argv[0] jest 

zawsze nazwa programu. 

 

 

argc  –  jest  to  parametr,  który  zawiera  liczbę  całkowitą.  Liczba  ta  określa  ilość 

przekazywanych  argumentów  do  programu  z  linii  poleceń.  Zarazem  argc  jest  indeksem 

tablicy argv[ ]. 

 

 

 

 

 

 

 

 

 

 

Język C 

Temat: Funkcje, parametry linii poleceń, typ wyliczeniowy. 

 

Instrukcja 

laboratoryjna 

Przygotował: mgr inż. Maciej Lasota 

background image

Laboratorium nr 5 

2/6 

 

Przykład: 

 

#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[]) 

int a,b,wynik; 

 

if(argc != 3) 

printf("Program dodaje dwie liczby, 

podaj dwa parametry !!!\n"); 

exit(1); 

 

a = atoi(argv[1]); //konwersja na liczbe calkowita 
b = atoi(argv[2]); //konwersja na liczbe calkowita 

 

printf("Nazwa programu: %s\n",argv[0]); 
printf("Parametr A: %d\n",a); 
printf("Parametr B: %d\n",b); 

 

wynik = (a+b); 

 

printf("Wynik dodawania: %d\n",wynik); 

 

return (0); 


 

2) 

Funkcje. 

 

Funkcje  umożliwiają  podzielenie  oraz  pogrupowanie  często  wykonywanego  kodu 

ź

ródłowego  (instrukcji  programu)  na  mniejsze  moduły  (bloki),  które  mogą  być  wielokrotnie 

wykorzystywane  w  programie.  Zadaniem  funkcji  zazwyczaj  jest  wykonywanie  określonych 

operacji  oraz  zwracanie  lub  też  nie  określonej  wartości.  Często  ukrywają  one  w  sobie 

szczegóły  pewnych  operacji  przed  innymi  częściami  programu,  w  których  znajomość  tych 

szczegółów  jest  zbędna  lub  niewskazana.  Wykorzystywanie  funkcji  w  programie  daje 

większą przejrzystość kodu oraz łatwiejsze wprowadzanie zmian. 

Funkcja  główna  jest  to  podstawowa  funkcja,  od  której  zaczyna  działanie  każdy 

program napisany w języku C. Funkcja ta musi występować w każdym pliku źródłowym, który 

kompilujemy  i  który  później  będziemy  wykonywać  jako  program  (nie  dotyczy  plików 

ź

ródłowych  kompilowanych  jako  moduły).  W  języku  C  funkcją  główną  jest  funkcja  „main”. 

Może ona zwracać określona wartość lub nie zwracać żadnej wartości, wszystkie pozostałe 

zdefiniowane funkcje zawsze wywołujemy z wnętrza funkcji „main”. 

 

background image

Laboratorium nr 5 

3/6 

 

Deklaracja funkcji w języku C wygląda następująco: 

 

[typ danych funkcji] [nazwa funkcji]([parametry funkcji]) 

[deklaracja zmiennych lokalnych] 
instrukcja1; 
instrukcja2; 
... 
[zwracana warto
ść]; 


 

Parametry funkcji są to zmienne przekazywane, do ciała funkcji w celu wykonania na 

nich  operacji  (działań).  W  języku  C  wszystkie  parametry  przekazywane  są  przez  wartość, 

oznacza to że operujemy jedynie na kopiach zmiennych, a nie na oryginalnych zmiennych. 

Zmienne lokalne funkcji  są to zmienne widoczne tylko w obrębie danego bloku (ciała 

funkcji),  tworzone  są  w  momencie  inicjowania  (wywoływania)  i  niszczona  w  momencie 

kończenia funkcji. Kolejne wywołanie tej samej funkcji tworzy nowe instancje zmiennych. 

Zasięg  nazw  jest  ta  cześć  programu,  wewnątrz  której  można  daną  nazwę  zmiennej 

stosować. W  przypadku  zmiennych  lokalnych  funkcji  zasięg  nazw  ogranicza  się  jedynie  do 

danego bloku instrukcji (ciała funkcji). Zmienne lokalne o tej samej nazwie, które występują w 

różnych funkcjach nie są ze sobą powiązane w żaden sposób. 

 

Przykład: 

 

#include <stdio.h> 
#include <stdlib.h> 
 
int warunek(int a, int b) 

if(a > b) 

return (1); 


if(a < b) 

return (2); 


 
return (0); 


 
 
 
 
 
 
 

background image

Laboratorium nr 5 

4/6 

 

int main(void) 

int x,y; 
 
printf("Podaj liczbe calkowita \"x\": "); 
scanf("%d",&x); 

 

printf("Podaj liczbe calkowita \"y\": "); 
scanf("%d",&y); 

 

if(warunek(x,y) == 1) 

printf("Liczba %d jest wieksza od liczby %d\n",x,y); 
} else if(warunek(x,y) == 2) 

printf("Liczba %d jest mniejsza od liczby %d\n",x,y); 
} else 

printf("Liczba %d jest rowna liczbie %d\n",x,y); 

 
return (0); 


 

Przykład: 

 

#include <stdio.h> 
#include <stdlib.h> 
 
float suma(float a, float b) 

return(a+b); 


 
float roznica(float a, float b) 

return(a-b); 


 
float iloczyn(float a, float b) 

return(a*b); 


 
float iloraz(float a, float b) 

return(a/b); 


 
 
 
 
 
 

background image

Laboratorium nr 5 

5/6 

 

int main(int argc, char *argv[]) 

float x,y; 
 
if(argc != 3) 

printf("Blad!, wywolanie programu: %s [liczba1] 

 [liczba2]\n",argv[0]); 

exit(0); 

 

x = atof(argv[1]); 
y = atof(argv[2]); 

 
printf("SUMA liczb: %.2f + %.2f = %.4f\n",x,y,suma(x,y)); 
printf("ROZNICA liczb: %.2f - %.2f = %.4f\n",x,y,roznica(x,y)); 
printf("ILOCZYN liczb: %.2f * %.2f = %.4f\n",x,y,iloczyn(x,y)); 
printf("ILORAZ liczb: %.2f / %.2f = %.4f\n",x,y,iloraz(x,y)); 
 
return (0); 
 

 

3) 

Rekurencja. 

 

Rekurencja lub też rekursja ma miejsce wtedy, gdy dana funkcja w sposób pośredni 

lub  bezpośredni  wywołuje  samą  siebie.  W  różnych  językach  programowania  funkcja,  która 

wywołuje samą siebie nazywana jest funkcją rekurencyjną. 

 

Funkcja rekurencyjna musi spełniać dwa podstawowe założenia: 

• 

musi posiadać koniec, 

• 

musi zmniejszać stopień złożoności obliczanego problemu. 

 

Definicja silni spełnia obie zasady rekurencji. Po pierwsze, posiada koniec (określony 

warunkiem n = 0). Po drugie, upraszcza początkowy problem, ponieważ obliczenie wartości 

wyrażeni (n – 1) jest prostsze niż obliczenie wyrażenia (n). 

 

Przykład: 

 

int silnia(int liczba) 

if(liczba == 0) return(1); 
return(liczba * silnia(liczba-1)); 


 

 

background image

Laboratorium nr 5 

6/6 

 

4) 

Typ wyliczeniowy. 

 
Typ  wyliczeniowy  „enum”  w  języku  C  został  stworzony  dla  zmiennych,  które 

przechowują tylko ograniczony zbiór wartości. Dostęp do tych wartości odbywa się poprzez 

nazwę  tzw.  etykietę.  Język  C  implementuje  typ  wyliczeniowy  „enum”  jako  zgodny  z  typem 

całkowitym,  dlatego  też,  poprawnym  sposobem  przydzielenie  wartości  do  zmiennej  jest 

podanie numeru określonej etykiety. Ogólna postać instrukcji „enum” jest następująca: 

 

enum nazwa_typu { etykieta1, etykieta2, ... } nazwa_zmiennej;