Cwiczenie4 doc


POLITECHNIKA ŚWIĘTOKRZYSKA

LABORATORIUM Z PROGRAMOWANIA W JĘZYKU C

Numer ćwiczenia:

3

Temat :Wskaźniki, tablice i ciągi znaków

Zespół:

1)Grzegorz Maruszewski

2)Robert Seta

Data wykonania:

.11.1998

Data oddania do sprawdzenia:

.12.1998

Ocena:

  1. Cel ćwiczenia

Celem ćwiczenia było dalsze zapoznanie się z podstawami programowania w Języku C ze szczególnym uwzględnieniem operacji na wskaźnikach, tablicach i ciągach znaków.

  1. Program

a)

Nasze pierwsze zadanie polegało na wpisaniu programu i stwierdzenia jaki będzie wynik działania tego programu.

#include <stdio.h>

void main(void)

{

int t[ 3 ];

int i, j;

int *adt;

for (i=0, j=0; i<3 ; i++)

t[ i ] = j++ + i;

for (i=0; i<3; i++)

printf ("%d ", t[ i ]);

printf("\ n");

for (i=0; i<3; i++)

printf ("%d ", *(t+i));

printf("\ n");

for (adt=t; adt<t+3; adt++)

printf ("%d ", *adt);

printf("\ n");

for (adt=t+2; adt >=t; adt--);

printf("%d ", *adt);

printf("\n");

}

Program zwraca:

0 2 4

0 2 4

0 2 4

0

Opis programu:

Działanie programu oparte jest na pętli for oraz na tablicy i typie wskaźnikowym.

Tablica jest zestawem obiektów tego samego typu. W tym przypadku poszczególne obiekt nie mają nazw, a dostęp do nich jest możliwy tylko poprzez podanie położenia obiektu w tablicy. Definicja tablicy skład się kolejno ze: specyfikatora typu, identyfikatora oraz wymiaru ujętego w nawiasach kwadratowych. Wymiar określa liczbę elementów tablicy.

Typ wskaźnikowy określa obszar pamięci zajmowany przez wskazywany obszar.

W pierwszej pętli tworzone są elementy tablicy w następujący sposób: licznik i oraz j są zerowane i sprawdzany jest warunek czy i<3. Ponieważ jest spełniony, więc tworzony jest pierwszy element tablicy, który jest równy zero. Następnie zostaje zwiększone i o 1 i jest sprawdzany warunek i<3. Warunek jest prawdziwy, więc wykonywana jest instrukcja, która spowoduje zostanie stworzony drugi element tablicy poprzez dodanie do zwiększonego o jeden j wartości i (t[i]=j++ + i). Element trzeci jest tworzony w taki sam sposób. Po wyjściu z pętli otrzymujemy wartości t[3]={0,2,4}, na których będziemy wykonywać wszelkie operacje.

Pętla druga powoduje wyświetlenie na ekranie każdego elementu po kolei. Ponieważ za każdym razem jest zwiększane i o 1, więc każdy z elementów zostanie wyświetlony.

Z kolei trzecia pętla wykorzystuje do wyświetlenia typ tablicowy. Tablica zostaje w tym przypadku zadeklarowana jako typ wskaźnikowy i poprzez kolejne zwiększanie adresu tej tablicy są wyświetlane kolejne jej elementy.

W następnej pętli zmiennej „adt” zostaje przypisany adres tablicy i po każdym przejściu pętli zwiększana jest wartość tej zmiennej. Wyświetlenie elementu tablicy następuje poprzez odwołanie do typu wskaźnikowego. Pętla jest wykonywana do momentu aż nie zostaje spełniony warunek „adt< t+3”.

Z kolei ostatnia pętla powoduje, że zostaje wyświetlony tylko jeden element tablicy, a jej działanie jest następujące: zmiennej „adt” zostaje przypisany adres drugiego elementu tablicy, lecz kolejne odejmowanie od tej wartości i sprawdzanie warunku „adt>=t” powoduje , że zostaje wyświetlony tylko pierwszy element tablicy. Wyświetlenie tego elementu odbywa się poprzez użycie typu wskaźnikowego.

b)

#include <stdio.h>

void main(void)

{

int t[4] = {10, 20, 30, 40};

int *ad[4];

int i;

for (i=0; i<4; i++)

ad[i] = t + i;

for (i=0; i<4; i++)

printf("%d ", *ad[i]);

printf("\n");

printf("%d %d \n", *(ad[1] + 1), *ad[1] + 1);

}

Program zwraca:

10 20 30 40

30 21

Działanie programu:

Program oparty jest na działaniu dwóch pętli for oraz operacjach na tablicach.

Najpierw jest tworzona tablica czteroelementowa, składająca się z elementów {10,20,30,40} oraz typ wskaźnikowy.

W pierwszej pętli for wskaźnikowi zostają przypisane elementy tablicy. Odbywa się to w ten sposób, że na początku pętli zostaje wyzerowany licznik. Następnie jest sprawdzany warunek czy i < 4. Ponieważ jest o prawdziwy, więc wykonywana jest instrukcja przypisania „ad[i]=t+i”. Przypisanie to powoduje, że zmiennej ad[i] są przypisywane kolejne elementy tablicy poprzez zwiększanie licznika za każdym przejściem pętli, aż do momentu, gdy warunek n<4 będzie fałszywy. Z kolei w następnej pętli następuje wyświetlenie całej tablicy na ekranie. Wykorzystany jest tu typ wskaźnikowy pod którym jest przypisany obszar gdzie mieści się tablica. Następna instrukcja powoduje przejście do kolejnej linii. Instrukcja występująca w ostatniej linijce programu działa w ten sposób, że powoduje najpierw wyświetlenie trzeciego elementu tablicy. Zrealizowane jest to poprzez polecenie „*(ad[1]+1)”, gdzie „ad[1]” wskazuje na drugi element tablicy i do tego adresu jest dodane jeden powodując wyświetlenie elementu trzeciego. Z kolei polecenie „*ad[1]+1” powoduje, że do drugiego elementu zostanie dodana jedynka powodują zwiększenie liczby i wyświetlenie 21 zamiast 20.

Program

Jaki będzie wynik działania następującego programu.

# include < stdio.h >

static int tablica[3][5]={

{1,2,3,4,5},

{6,7,8,9,0},

{11,12,13,14,15},

};

void main (void)

{

printf ("\ n *********** \ n");

printf (" tablica =% p \ n" , tablica);

printf (" tablica[0][0]= % i \ n", tablica[0][0]);

printf (" tablica[0]= % p \ n", tablica[0]);

printf (" tablica[1]= % p \ n", tablica[1]);

printf (" tablica[0]= % i \ n", tablica[0]);

printf (" tablica[1]= % i \ n", tablica[1]);

printf (" tablica+1= % p \ n", tablica+1);

printf ("* (tablica+1)= % p \ n", tablica+1);

printf ("*(*(tablica+1))=% i \ n", *(*(tablica+1)));

printf ("*(*(tablica+1)+1)= % i \ n", *(*(tablica+1)+1));

printf (" tablica[1][1]= % i \ n", tablica[1][1]);

}

Program zwraca:

***********

tablica=00407074

tablica[0][0]=1

tablica[0]=00407074

tablica[1]=00407088

tablica[0]=4223092

tablica[1]=4223112

tablica+1=00407088

*(tablica+1)=00407088

*(*(tablica+1))=6

*(*(tablica+1)+1)=7

tablica[1][1]=7

Opis programu:

Program przedstawia operacje na tablicach dwuwymiarowych. Na początku zadeklarowaliśmy tablicę składającą się z trzech wiersz i pięciu kolumn. Elementami tej tablicy są liczby od 1 do 15.

Instrukcja printf ("\ n *********** \ n") powoduje wyświetlenie linii składającej się z gwiazdek.

Instrukcja printf (" tablica =% p \ n" , tablica)

Instrukcja printf (" tablica[0][0]= % i \ n", tablica[0][0]) powoduje, że zostaje wyświetlony element tablicy znajdujący się w pierwszej kolumnie i pierwszym wierszu.

Instrukcja printf (" tablica[0]= % p \ n", tablica[0])

Program

Co robi następujący program:

# include <stdio.h>

void main(void)

{

char *adr = "dzień dobry";

int i;

for (i=0; i<3; i++)

putchar (adr[i]);

printf("\n");

i=0;

while (adr[i])

putchar (adr[i++]);

}

Otrzymany wynik:

dzi

dzień dobry

Działanie programu:

Program oparty jest na działaniu dwóch pętli: for oraz while. Na początku deklarujemy tablicę poprzez typ wskaźnikowy. Tablicą jest napis "dzień dobry". Zadeklarowana jest również zmienna i.

W pętli for najpierw zmiennej i jest przypisana wartość zero i następuje sprawdzanie warunku „i<3”. Ponieważ jest on prawdziwy, więc wykonywana jest instrukcja „putchar (adr[i])” , która powoduje wyświetlenie kolejnych liter napisu. Po każdej takiej iteracji zwiększana jest wartość zmiennej i. Pętla jest wykonywana do momentu aż warunek przestaje być spełniany. Powoduje to wyświetlenie trzech pierwszych liter napisu.

Z kolei w pętli while zostaje wyświetlony cały napis. Zrealizowane jest to poprzez instrukcję „putchar (adr[i++])” ,w której to kolejne zwiększanie wartości zmiennej i powoduje wyświetlenie napisu.

5)Program

#include < stdio.h >

char *c[ ]={

"kloc",

"tara",

"opar",

"trel"

};

char ** cp [ ]={c+3,c+2,c+1,c};

char *** cpp = cp;

void main (void)

{

printf (" % s ", **++cpp+1);

printf (" % s ", *--*++cpp+3);

printf (" % s ", *cpp[-2]+2);

printf ( " % s ", cpp[-1][-1]+3);

}

Wynikiem działania programu jest napis: parcela.

Opis działania:

Program realizuje działania na tablicy wskaźników znaków, którą deklarujemy na początku programu. Tablica znaków składa się z liter i ma rozmiar czterech kolumn na cztery wiersze. Deklarowana jest również tablica wskaźnik do wskaźnika.

Pierwsza instrukcja programu, czyli printf (" % s ", **++cpp+1) działa w sposób następujący: **++cpp wskazuje na drugi element tablicy cp, czyli c+2. Poprzez wskaźnik odnosi się to do drugiego wiersza tablicy c, czyli na linię zawierającą tekst „opar”. Dodanie jedynki spowoduje, że zostanie wskazana druga kolumna. W tym momencie na ekranie zostaną wyświetlone trzy kolejne litery tzn. „par”.

Druga instrukcja ,czyli printf (" % s ", *--*++cpp+3) spowoduje wyświetlenie tylko jednej litery tzn. „c”. Odbywa się to w następujący sposób: ponieważ ostatnim razem wskaźnik wskazywał na c+2 w tablicy cp, więc teraz dodanie do cpp jedynki spowoduje, że będzie wskazywane c+1 w tablicy cp. Dzięki temu program będzie odczytywał litery z drugiego wiersza. Instrukcja ta spowoduje również odjęcie jedynki, czyli przesunięcie się o jeden wiersz niżej tzn. do wiersza „kloc”. Z wiersza tego zostanie pobrana tylko litera „c”.

Trzecia instrukcja printf (" % s ", *cpp[-2]+2) spowoduje wyświetlenie liter „el”. Po ostatniej operacji wskaźnik wskazywał na c+1, a instrukcja *cpp[-2] spowoduje, że w tablicy cp wskaźnik zostanie pzresuniety o dwie pozycje i znajdzie się na pozycji c+3, która oznacza czwarty wiersz w tablicy. Z tego wiersza zostaną pobrane dwie litery tj. „el”.

Ostatnia instrukcja printf ( " % s ", cpp[-1][-1]+3) wyświetli na ekranie literę „a”. Instrukcja ta spowoduje przejście do drugiego wiersza i pobranie ostatniego znaku.

7)Program

#include <stdio.h>

#include <stdlib.h>

#define ABS(a) (((a)>0)?(a):-(a))

#define CUBABS(a) ABS((a)*(a)*(a))

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

{

int i,j,k=20;

if(argc=2) {

printf("ZLE WYWOLANIE PROGRAMU!\n");

exit(1);

}

if (*argv[1]<'1'|| *argv[1]>'9'){

printf("ZLY ARGUMENT PROGRAMU!\n");

exit(2);

}

else

sscanf(argv[1],"%d",&i);

k%=i;

printf("WYNIK 0:%d\n",k);

if (i>9)

i=9;

for (j=1;j<=i;j++){

k+=CUBABS(-1)*(-1);

printf("WYNIK%1d: %d\n",j,k);

}

printf("WYNIK:%d\n",k);

}



Wyszukiwarka

Podobne podstrony:
Ćwiczenie? doc
Ćwiczenie? doc
ćwiczenie 9 doc
Ćwiczenie 4 (2) doc
Uczymy się bawić oraz wykonywać ćwiczenia doc
ćwiczenia (3) doc
Ćwiczenie 2 (3) doc
ćwiczenie 6 doc
ćwiczenie 8 (2) doc
Ćwiczenie 2 (5) doc
Ćwiczenie 5 (2) doc
Ćwiczenie 8 doc
ćwiczenie 3 doc
ĆWICZE~2 DOC
Informatyka Laboratorium MS Word ćwiczenie 2 DOC
CWICZENIE 4 DOC
Wytrzymałość ćwiczenie 5 DOC

więcej podobnych podstron