P-1
/* dni_m1.c -- wyswietla liczbe dni w kazdym z miesiecy */
#include <stdio.h>
#define MIESIACE 12
int main(void)
{
int dni[MIESIACE] = {31,28,31,30,31,30,31,31,30,31,30,31};
int index;
for (index = 0; index < MIESIACE; index++)
printf("Miesiac %d ma %d dni.\n", index +1,
dni[index]);
return 0;
}
P2
/* brak_dan.c -- niezainicjalizowane tablice */
#include <stdio.h>
#define ROZMIAR 4
int zewntab[ROZMIAR]; /* niezainicjalizowana tablica zewnetrzna */
int main(void)
{
static int statab[ROZMIAR]; /* niezainicjalizowana tablica statyczna */
int autab[ROZMIAR]; /* niezainicjalizowana tablica automatyczna */
int i;
printf("%2s%10s%10s%10s\n",
"i", "zewntab", "statab", "autab");
for (i = 0; i < ROZMIAR; i++)
printf("%2d%10d%10d%10d\n", i, zewntab[i],
statab[i], autab[i]);
return 0;
}
P3
/* troch_dan.c -- czesciowo zainicjalizowane tablice */
#include <stdio.h>
#define ROZMIAR 4
int zewntab[ROZMIAR] = {1956, 1966};
int main(void)
{
static int statab[ROZMIAR] = {-50, -90};
int autab[ROZMIAR] = {492, 567};
int i;
printf("%2s%10s%10s%10s\n",
"i", "zewntab", "statab", "autab");
for (i = 0; i < ROZMIAR; i++)
printf("%2d%10d%10d%10d\n", i, zewntab[i],
statab[i], autab[i]);
return 0;
}
P4
/* dni_m2.c -- liczba elementow jest obliczana przez kompilator */
#include <stdio.h>
int main(void)
{
int dni[] = {31,28,31,30,31,30,31,31,30,31};
int index;
for (index = 0; index < sizeof dni / sizeof (int); index++)
printf("Miesiac %d ma %d dni.\n", index +1,
dni[index]);
return 0;
}
P5
/* wsk_dod.c -- dodawanie do wskaznikow */
#include <stdio.h>
#define ROZMIAR 4
int main(void)
{
short daty[ROZMIAR], * ptc, index;
double oplaty[ROZMIAR], * ptz;
ptc = daty; /* przypisuje adres tablicy wskaznikowi */
ptz = oplaty;
printf("%25s %10s\n", "short", "double");
for (index = 0; index < ROZMIAR; index ++)
printf("wskazniki + %d: %10p %10p\n",
index, ptc + index, ptz + index);
return 0;
}
P6
/* dni_m3.c -- wykorzystuje zapis wskaznikowy */
#include <stdio.h>
#define MIESIACE 12
int main(void)
{
int dni[MIESIACE] = {31,28,31,30,31,30,31,31,30,31,30,31};
int index;
for (index = 0; index < MIESIACE; index++)
printf("Miesiac %d ma %d dni.\n", index +1,
*(dni + index)); // rownowazne dni[index]
return 0;
}
P7
/* suma_t1.c -- sumuje elementy tablicy */
#include <stdio.h>
#define ROZMIAR 10
long sumuj(int tab[], int n);
int main(void)
{
int kulki[ROZMIAR] = {20,10,5,39,4,16,19,26,31,20};
long wynik;
wynik = sumuj(kulki, ROZMIAR);
printf("Calkowita liczba kulek wynosi %ld.\n", wynik);
printf("Rozmiar tablicy kulki wynosi %d bajtow.\n",
sizeof kulki);
return 0;
}
long sumuj(int tab[], int n) /* jak duza jest tablica? */
{
int i;
long suma = 0;
for( i = 0; i < n; i++)
suma += tab[i];
printf("Rozmiar tablicy tab wynosi %d bajtow.\n", sizeof tab);
return suma;
}
P8
/* suma_t2.c -- sumuje elementy tablicy */
#include <stdio.h>
#define ROZMIAR 10
long sumujw(int * poczatek, int * koniec);
int main(void)
{
int kulki[ROZMIAR] = {20,10,5,39,4,16,19,26,31,20};
long wynik;
wynik = sumujw(kulki, kulki + ROZMIAR);
printf("Calkowita liczba kulek wynosi %ld.\n", wynik);
return 0;
}
/* wykorzystuje dzialania na wskaznikach */
long sumujw(int * poczatek, int * koniec)
{
long suma = 0;
while (poczatek < koniec)
{
suma += *poczatek; /* dodaje wartosc do sumy */
poczatek++; /* przenosi wskaznik do nastepnego elementu */
}
return suma;
}
P9
/* kolejn.c -- priorytet w dzialaniach na wskaznikach */
#include <stdio.h>
int dane[2] = {100, 300};
int wiecejdanych[2] = {200, 400};
int main(void)
{
int * w1, * w2, * w3;
w1 = w2 = dane;
w3 = wiecejdanych;
printf("*w1++ = %d, *++w2 = %d, (*w3)++ = %d\n",
*w1++, *++w2, (*w3)++);
printf(" *w1 = %d, *w2 = %d, *w3 = %d\n",
*w1, *w2, *w3);
return 0;
}
P-10
/* wsk_op.c -- dzialania na wskaznikach */
#include <stdio.h>
int main(void)
{
int urna[3] = {100,200,300};
int * wsk1, * wsk2;
wsk1 = urna; /* przypisanie wskaznikowi adresu */
wsk2 = &urna[2]; /* jak wyzej */
/* dereferencja wskaznika i */
/* pobranie jego adresu */
printf("wsk1 = %p, *wsk1 =%d, &wsk1 = %p\n",
wsk1, *wsk1, &wsk1);
wsk1++; /* inkrementacja wskaznika */
printf("wartosci po wsk1++\n");
printf("wsk1 = %p, *wsk1 =%d, &wsk1 = %p\n",
wsk1, *wsk1, &wsk1);
printf("wsk2 = %p, *wsk2 =%d, &wsk2 = %p\n",
wsk2, *wsk2, &wsk2);
++wsk2; /* wyjscie poza koniec tablicy */
printf("wartosci po ++wsk2\n");
printf("wsk2 = %p, *wsk2 = %d, &wsk2 = %p\n",
wsk2, *wsk2, &wsk2);
printf("wsk2 - wsk1 = %d\n", wsk2 - wsk1);
/* odejmowanie wskaznikow */
return 0;
}
P11
/* tabf.c -- funkcje wykorzystujace tablice */
#include <stdio.h>
#define ROZMIAR 5
void pokaz_tablice(const double tab[], int n);
void pomnoz_tablice(double tab[], int n, double mnoz);
int main(void)
{
double dip[ROZMIAR] = {20.0, 17.66, 8.2, 15.3, 22.22};
printf("Poczatkowa tablica dip:\n");
pokaz_tablice(dip, ROZMIAR);
pomnoz_tablice(dip, ROZMIAR, 2.5);
printf("Tablica dip po wywolaniu funkcji pomnoz_tablice():\n");
pokaz_tablice(dip, ROZMIAR);
return 0;
}
void pokaz_tablice(const double tab[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%8.3f ", tab[i]);
putchar('\n');
}
/* mnozy kazdy element tablicy przez te sama liczbe */
void pomnoz_tablice(double tab[], int n, double mnoz)
{
int i;
for (i = 0; i < n; i++)
tab[i] *= mnoz;
}
P12
/* deszcz.c -- znajduje sumy roczne, roczna srednia oraz srednia
miesieczna dla danych o opadach z kilku lat */
#include <stdio.h>
#define MIESIACE 12 /* liczba miesiecy w roku */
#define LATA 5 /* liczba lat danych */
int main(void)
{
/* inicjalizacja danych o opadach z lat 1995 - 1999 */
const float deszcz[LATA][MIESIACE] = {
{10.2, 8.1, 6.8, 4.2, 2.1, 1.8, 0.2, 0.3, 1.1, 2.3, 6.1, 7.4},
{9.2, 9.8, 4.4, 3.3, 2.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 5.2},
{6.6, 5.5, 3.8, 2.8, 1.6, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 4.2},
{4.3, 4.3, 4.3, 3.0, 2.0, 1.0, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
{8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.2}
};
int rok, miesiac;
float podsuma, suma;
printf(" ROK OPADY (w cm)\n");
for (rok = 0, suma = 0; rok < LATA; rok++)
{ /* dla kazdego roku sumuj opady dla kazdego miesiaca */
for (miesiac = 0, podsuma = 0; miesiac < MIESIACE; miesiac++)
podsuma += deszcz[rok][miesiac];
printf("%5d %12.1f\n", 1995 + rok, podsuma);
suma += podsuma; /* suma dla wszystkich lat */
}
printf("\nRoczna srednia wynosi %.1f cm.\n\n", suma/LATA);
printf("SREDNIE MIESIECZNE:\n\n");
printf(" Sty Lut Mar Kwi Maj Cze Lip Sie Wrz Paz ");
printf(" Lis Gru\n");
for (miesiac = 0; miesiac < MIESIACE; miesiac++)
{ /* dla kazdego miesiaca, sumuj opady w ciagu lat */
for (rok = 0, podsuma = 0; rok < LATA; rok++)
podsuma += deszcz[rok][miesiac];
printf("%4.1f ", podsuma/LATA);
}
printf("\n");
return 0;
}
P13
/* zippo1.c -- adresy */
#include <stdio.h>
int main(void)
{
int zippo[4][2];
printf("zippo = %p, zippo[0] = %p\n", zippo, zippo[0]);
printf("&zippo[0][0] = %p, &zippo = %p\n",
&zippo[0][0], *zippo);
return 0;
}
P14
/* zippo2.c -- wiecej informacji o zippo */
#include <stdio.h>
int main(void)
{
int zippo[4][2];
printf("zippo = %p, zippo[0] = %p\n", zippo, zippo[0]);
printf("&zippo[0][0] = %p, &zippo = %p\n",
&zippo[0][0], *zippo);
printf("zippo + 1 = %p, zippo[0] + 1 = %p\n",
zippo + 1, zippo[0] + 1);
printf("&zippo[0][0] + 1 = %p, *zippo + 1 = %p\n",
&zippo[0][0] + 1, *zippo + 1);
printf("*(zippo + 1) = %p\n", *(zippo + 1));
return 0;
}
P15
/* podwtab1.c -- podwaja elementy tablicy */
#include <stdio.h>
void podw(int tab[], int rozmiar);
int main(void)
{
int smieci[3][4] = {
{2,4,5,8},
{3,5,6,9},
{12,10,8,6}
};
int i, j;
for (i = 0; i < 3 ; i++)
podw(smieci[i], 4);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf("%5d", smieci[i][j]);
putchar('\n');
}
return 0;
}
void podw(int tab[], int rozmiar) /* lub int * tab */
{
int i;
for (i = 0; i < rozmiar; i++)
tab[i] *= 2;
}
P16
/* podwtab2.c -- podwaja elementy tablicy */
#include <stdio.h>
void podw(int tab[], int rozmiar);
int main(void)
{
static int smieci[3][4] = {
{2,4,5,8},
{3,5,6,9},
{12,10,8,6}
};
int i, j;
podw(smieci[0], 3*4);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf("%5d", smieci[i][j]);
putchar('\n');
}
return 0;
}
void podw(int tab[], int rozmiar) /* lub int * tab */
{
int i;
for (i = 0; i < rozmiar; i++)
tab[i] *= 2;
}
P17
/* podwtab3.c -- podwaja elementy tablicy */
#include <stdio.h>
void podw2 (int tab[][4], int rozmiar);
int main(void)
{
static int smieci[3][4] = {
{2,4,5,8},
{3,5,6,9},
{12,10,8,6}
};
int i, j;
podw2(smieci,3);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf("%5d", smieci[i][j]);
putchar('\n');
}
return 0;
}
void podw2 (int tab[][4], int rozmiar) /* lub int (*tab)[4] */
{
int i, j;
for (i = 0; i < rozmiar; i++)
for (j = 0; j < 4; j++)
tab[i][j] *= 2;
}
P20
/* srednia.c -- oblicza srednia podanych liczb */
#include <stdio.h>
#define MAX 25
int pobierz_tablice(double tab[], int granica);
void pokaz_tablice(const double tab[], int n);
double srednia(const double tab[], int n);
int main(void)
{
double dane[MAX];
int ilosc;
ilosc = pobierz_tablice(dane, MAX);
if (ilosc == 0)
printf("Brak danych. Czesc.\n");
else
{
printf("Wpisano nastepujace liczby:\n\n");
pokaz_tablice(dane, ilosc);
printf("\nSrednia z tych wartosci wynosi %.2f.\n",
srednia(dane, ilosc));
}
return 0;
}
int pobierz_tablice(double tab[], int granica)
{
int i = 0;
printf("Podaj do %d liczb. Aby zakonczyc wpisywanie,\n", granica);
printf("wpisz litere lub EOF.\n");
while (i < granica && scanf("%lf", &tab[i]) == 1)
i++;
return i;
}
void pokaz_tablice(const double tab[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%10.2f ", tab[i]);
if (i % 6 == 5)
putchar('\n');
}
if (i % 6 != 0)
putchar('\n');
}
double srednia(const double tab[], int n)
{
int i;
double suma = 0;
for (i = 0; i < n ; i++)
suma += tab[i];
return (suma/n);
}
P11-25 /* sort_lan.c -- pobiera lancuchy i je porzadkuje */
#include <stdio.h>
#include <string.h>
#define ROZMIAR 81 /* granica dlugosci lancucha, wlacznie z \0 */
#define GRAN 20 /* maksymalna liczba wierszy */
void srtlan(char *lancuchy[], int num); /* funkcja sortujaca lancuchy */
int main(void)
{
char dane[GRAN][ROZMIAR]; /* tablica przechowujaca dane wejsciowe */
char *wsklan[GRAN]; /* tablica zmiennych wskaznikowych */
int licz = 0; /* licznik danych wejsciowych */
int k; /* licznik danych wyjsciowych */
printf("Podaj maksymalnie %d wierszy, a ja je uporzadkuje.\n",GRAN);
printf("Aby zakonczyc, wcisnij Enter na poczatku wiersza.\n");
while (licz < GRAN && gets(dane[licz]) != NULL && dane[licz][0] != '\0')
{
wsklan[licz] = dane[licz]; /* ustaw wskazniki na lancuchy */
licz++;
}
srtlan(wsklan, licz); /* maszyna sortujaca lancuchy */
puts("\nOto uporzadkowana lista:\n");
for (k = 0; k < licz; k++)
puts(wsklan[k]) ; /* posortowane wskazniki */
return 0;
}
void srtlan(char *lancuchy[], int num) /* funkcja sortujaca wskazniki do lancuchow */
{
char *temp;
int dol, szuk;
for (dol = 0; dol < num-1; dol++)
for (szuk = dol + 1; szuk < num; szuk++)
if (strcmp(lancuchy[dol],lancuchy[szuk]) > 0)
{
temp = lancuchy[dol];
lancuchy[dol] = lancuchy[szuk];
lancuchy[szuk] = temp;
} }