Jezik C (zadaci )

 

          PROGRAMIRANJE  za  POČETNIKE

             Sretno sa programiranjem ...    

   

       Primjer 1:

Tradicionalni program svih programera početnika je vrlo jednostavan. Naime radi se o tome da na monitoru ispiše jedna poruka «Hello world»(ili nešto na tu temu). Ali na ovom primjeru se vrlo dobro može naučiti kako se iz programa komunicira sa izlaznim uređajima. U našem slučaju radi se o monitoru. Program se neće naknadno pojašnjavati jer jer je uredno izkomentarisan. (Komentari u programu su linije koje se ne izvršavaju, nisu instrukcije, već služe za pojašnjenje programa.)

RJEŠENJE:
#include <stdio.h> main ()
{
printf ( "Pozdrav svima!\n" ) ;
}


Primjer 2:

/* Program procita dva cijela broja i napise njihov zbir */
#include <stdio.h> main ()
{
int a, b, c;
printf ("a,b? ");
scanf ("%d%d", &a, &b);
c = a + b;
printf ("a+b= %d\n",

}


Primjer 3:
/* Program za prikazivanje tablice ASCII kodova */
#include <stdio.h> main ()
{
char c = ' ';
int i; printf ("\t\t Tablica ASCII kodova\n\n");
linija:
i = 0;
znak:
printf ("%3d %c ", c+i, c+i); i = i + 19;
if (i < 95) goto znak;
printf ("\n");
c = c + 1;
if (c < ' ' + 19) goto linija;
}


Primjer 4:
/* Program za ispisivanje u binarnom sistemu */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main ()
{
char dec[10]; int bin, i;
dalje:
printf ("Decimalni broj: "); scanf ("%s", dec);
if (! strlen (dec)) goto kraj;
bin = atoi (dec);
printf ("Binarni broj: "); i = 0;
cifra:
putchar ((bin & 0x8000) ? '1' : '0'); bin <<= 1;
if (i % 4 == 3) putchar (' ');
if (++i < 16) goto cifra;
putchar ('\n');
goto dalje;
kraj:
printf ("Uspjesan kraj!\n");
}

Primjer 5:
/* Funkcija za nalaženje binomnog koeficijenta */
int binko (n, k) int n, k; {
return (0 < k && k < n) ? (binko (n-1, k) + binko (n-1, k-1)) : 1;
}
/* Funkcija za binarno pretraživanje rastuće uređenog niza */
int bitra (int a[], int n, int k) {
int l = 0, d = n-1, s;
enum {NE, DA};
while (l <= d)
if (a [s = (l + d) / 2] == k)
return DA;
else if (k < a[s])
d = s - 1;
else
l = s + 1;
return NE;
}

Primjer 6:
/* Glavni program za prikazivanje rada funkcije bitra */
#include <stdio.h>
main () {
int a[30], n=0, k; char z;
/* čitanje niza za pretraživanje */
printf ("Rastuci niz brojeva: ");
do scanf ("%d%c", &a[n++], &z); while (z != '\n');
putchar ('\n');
/* čitanje i traženje pojedinačnih brojeva */
while (printf ("Trazeni broj: "), scanf ("%d", &k) != EOF)
printf ("Trazeni broj se%s nalazi u nizu\n",
(bitra (a, n, k)) ? "" : " NE");
}

Primjer 7:
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 500
#define USPJEH 0
#define NEUSPJEH 1
/* Formiranje dinamickog niza čitajući preko tastature */
int *citaj_niz (void) {
int *a, n = 0, greska = 0;
if (! (a = malloc ((MAX_N + 1) * sizeof (int)))) {
printf ("\n*** Neuspesna dodela memorije ***\a\n\n");
exit (NEUSPJEH);
}
while (scanf ("%d", a+(++n)) && !(greska = n == MAX_N));
getchar ();
if (greska) { printf ("\n*** Predugacak niz podataka ***\a\n\n");
exit (NEUSPJEH);
}
*a = n - 1;
return realloc (a, n * sizeof (int));
}
/* Ispisivanje dinamickog niza na ekranu */
void pisi_niz (int *a) {
int i;
for (i=1; i<=*a; i++) printf ("%d ", *(a+i));
}
/* Nalazenje fuzije dva dinamicka niza */
int *fuzija_nizova (int *a, int *b) {
int na = *a, nb = *b, nc = *a + *b, ia = 1, ib = 1, ic = 1, *c;
if (! (c = malloc ((nc + 1) * sizeof (int)))) {
printf ("\n*** Neuspesna dodela memorije ***\a\n\n");
exit (NEUSPJEH);
}
*c = nc;
while (ia <= na && ib <= nb)
*(c+ic++) = (*(a+ia) < *(b+ib)) ? *(a+ia++) : *(b+ib++);
while (ia <= na) *(c+ic++) = *(a+ia++);
while (ib <= nb) *(c+ic++) = *(b+ib++);
return c;
}

Primjer 8:
/* Glavni program za prikaz rada gornjih potprograma */
main () {
int *a, *b, *c; char odg[2];
do {
putchar ('\n');
printf ("Prvi ulazni niz: "); a = citaj_niz ();
printf ("Drugi ulazni niz: "); b = citaj_niz ();
c = fuzija_nizova (a, b);
printf ("Rezultujuci niz: "); pisi_niz (c); putchar ('\n');
free (a); free (b); free (c);
printf ("\nDalje (d/n)? "); scanf ("%1s", odg);
} while (odg[0] == 'd' || odg[0] == 'D');
}

Primjer 9:
/* Program za ispisivanje poruke na ekranu */
#include <stdio.h>
main (int argc, char *argv[]) {
int i;
for (i=1; i<argc; i++)
printf ("%s%c", argv[i], (i<argc-1)?(' '):('\n'));
}

Primjer 10:
/* Program za sortiranje imena gradova smjestenih u matricu */
#include <stdio.h>
#include <string.h>
#define MAX_GRAD 100
#define MAX_DUZ 30
main () {
char gradovi[MAX_GRAD][MAX_DUZ], grad[MAX_DUZ];
int znak, br_grad=0, duz, i;
do {
/* Citanje sledeceg imena */
for (duz=0; duz < MAX_DUZ - 1; duz++)
if ((znak = getchar()) != '\n') grad[duz] = znak; else break;
grad[duz] = '\0';
/* Kraj ako je duzina imena nula */
if (! duz) break;
/* Uvrstavanje novog imena u sortirani niz starih imena */
for (i=br_grad-1; i>=0; i--)
if (strcmp (gradovi[i], grad) > 0)
strcpy (gradovi[i+1], gradovi[i]);
else break;
strcpy (gradovi[i+1], grad);
/* Nastavak rada ako ima jos slobodnih vrsta u matrici */
} while (++br_grad < MAX_GRAD);
/* Ispisivanje sortiranog niza imena */
for (i=0; i<br_grad; i++) printf ("%s\n", gradovi[i]);
}

Primjer 11:
/* Program za sortiranje imena gradova smestenih u vektor */
#include <stdio.h>
#include <string.h>
#define MAX_GRAD 100
#define MAX_UK_DUZ 3000
main () {
char gradovi[MAX_UK_DUZ];
int indeksi[MAX_GRAD];
int znak, br_grad=0, duz, uk_duz=0, indeks, i;
do {
/* Citanje sledeceg imena */
indeks = uk_duz;
for (duz=0; uk_duz < MAX_UK_DUZ-1; duz++)
if ((znak = getchar()) != '\n') gradovi[uk_duz++] = znak;
else break;
gradovi[uk_duz++] = '\0';
/* Kraj ako je duzina imena nula */
if (! duz) break;
/* Uvrstavanje novog imena u sortirani niz starih imena */
for (i=br_grad-1; i>=0; i--)
if (strcmp (&gradovi[indeksi[i]], &gradovi[indeks]) > 0)
indeksi[i+1] = indeksi[i];
else break;
indeksi[i+1] = indeks;
br_grad++;
/* Nastavak rada ako ima jos slobodnih mesta u vektoru */
} while (uk_duz < MAX_UK_DUZ);
/* Ispisivanje sortiranog niza imena */
for (i=0; i<br_grad; i++) printf ("%s\n", &gradovi[indeksi[i]]);
}

Primjer 12:
/* Program za sortiranje imena gradova smjestenih u vektor */
#include <stdio.h>
#include <string.h>
#define MAX_GRAD 100
#define MAX_UK_DUZ 3000
main () {
char gradovi[MAX_UK_DUZ];
char *adrese[MAX_GRAD], *adresa, *sljed_znak=gradovi;
int znak, br_grad=0, duz, i;
do {
/* Citanje sljedeceg imena */
adresa = sljed_znak;
for (duz=0; sled_znak < gradovi+MAX_UK_DUZ-1; duz++)
if ((znak = getchar()) != '\n')
*(sljed_znak++) = znak;
else break;
*(sljed_znak++) = '\0';
/* Kraj ako je duzina imena nula */
if (! duz) break;
/* Uvrstavanje novog imena u sortirani niz starih imena */
for (i=br_grad-1; i>=0; i--)
if (strcmp (adrese[i], adresa) > 0)
adrese[i+1] = adrese[i];
else break;
adrese[i+1] = adresa;
br_grad++;
/* Nastavak rada ako ima jos slobodnih mesta u vektoru */
} while (sljed_znak < gradovi+MAX_UK_DUZ);
/* Ispisivanje sortiranog niza imena */
for (i=0; i<br_grad; i++) printf ("%s\n", adrese[i]);
}

Primjer 13:
/* Program za sortiranje imena gradova smjestenih u dinamiţku zonu */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_GRAD 100
#define MAX_DUZ 30
main () {
char *adrese[MAX_GRAD], *adresa;
int znak, br_grad=0, duz, i;
do {
/* Dodela prostora za sledece ime */
adresa = calloc (MAX_DUZ, sizeof(char));
/* Citanje sledeceg imena */
for (duz=0; (znak = getchar()) != '\n'; )
if (duz < MAX_DUZ - 1) *(adresa + duz++) = znak;
*(adresa + duz) = '\0';
/* Kraj ako je duzina imena nula */
if (! duz) { free (adresa); break; }
/* Podesavanje velicine dodjeljenog prostora stvarnim potrebama */
adresa = realloc (adresa, duz+1);
/* Uvrstavanje novog imena u sortirani niz starih imena */
for (i=br_grad-1; i>=0; i--)
if (strcmp (adrese[i], adresa) > 0)
adrese[i+1] = adrese[i];
else break;
adrese[i+1] = adresa;
/* Nastavak rada ako ima jos slobodnih mjesta u nizu pokazivaca */
} while (br_grad++ < MAX_GRAD);
/* Ispisivanje sortiranog niza imena */
for (i=0; i<br_grad; i++) printf ("%s\n", adrese[i]);
}

Primjer 14:
/* Program za prikazivanje rada kompleksnih funkcija */
#include <stdio.h>
#include "kompleks.h"
main () {
Kompl x, y;
while (scanf ("%lf%lf%lf%lf", &x.re, &x.im, &y.re, &y.im) != EOF)
{ printf ("\n");
printf ("x = (%f,%f)\n", creal(x), cimag(x));
printf ("y = (%f,%f)\n", creal(y), cimag(y));
printf ("|x| = %f\n", cmod (x));
printf ("|y| = %f\n", cmod (y));
printf ("arg x = %f\n", carg (x));
printf ("arg y = %f\n", carg (y));
printf ("~x = (%f,%f)\n", conjg(x).re, conjg(x).im);
printf ("~y = (%f,%f)\n", conjg(y).re, conjg(y).im);
printf ("x+y = (%f,%f)\n", cadd (x,y).re, cadd (x,y).im);
printf ("x-y = (%f,%f)\n", csub (x,y).re, csub (x,y).im);
printf ("x*y = (%f,%f)\n", cmul (x,y).re, cmul (x,y).im);
printf ("x/y = (%f,%f)\n", cdiv (x,y).re, cdiv (x,y).im);
printf ("e^x = (%f,%f)\n", cexp (x).re, cexp (x).im);
printf ("e^y = (%f,%f)\n", cexp (y).re, cexp (y).im);
printf ("log x = (%f,%f)\n", clog (x).re, clog (x).im);
printf ("log y = (%f,%f)\n", clog (y).re, clog (y).im);
printf ("x^y = (%f,%f)\n", cpow (x,y).re, cpow (x,y).im);
printf ("\n");
}

Primjer 15:
/* Program za nalazenje korena kvadratne jednacine */
#include <stdio.h>
#include <math.h>
main () {
double a, b, c, /* Koeficijenti jednacine */
d, /* Diskriminanta jednacine */
x1, x2, /* Realni koreni */
z1r, z1i, z2r, z2i, /* Kompleksni koreni */
x; /* Resenje linearne jednacine */
int por; /* Poruka o vrsti resenja */
printf ("Koeficijenti kvadratne jednacine: ");
scanf ("%lf%lf%lf", &a, &b, &c);
if (! a)
if (! b) por = 1;
else { x = -c / b; por = 2; }
else {
d = b * b - 4 * a * c;
if (d < 0) {
z1r = -b / (2 * a); z1i = sqrt (-d) / (2 * a);
z2r = z1r; z2i = - z1i; por = 3;
} else {
x1 = (-b + sqrt (d)) / (2 * a);
x2 = (-b - sqrt (d)) / (2 * a); por = 4;
}
}
switch (por) {
case 1: printf ("Ulazni podaci nemaju smisla!\a\n");
break;
case 2: printf ("Koren linearne jednacine je %g\n", x);
break;
case 3: printf ("Kompleksni koreni su %g%ci%g i %g%ci%g\n",
z1r, ((z1i >= 0) ? '+' : '-'), fabs (z1i),
z2r, ((z2i >= 0) ? '+' : '-'), fabs (z2i));
break;
case 4: if (x1 != x2)
printf ("Realni koreni su %g i %g\n", x1, x2);
else
printf ("Jednacina ima dvostruki koren %g\n",x1);
break;
}
}

Primjer 16:
/* Rad sa jednostruko lancanom listom */
#include <stdio.h>
#include <stdlib.h>
typedef struct elem { int broj; struct elem *sled; } Elem;
Elem *citaj (void) { /* citanje brojeva i formiranje liste */
Elem *niz = NULL, *tekuci = NULL, *novi; int broj;
while (scanf ("%d", &broj)) {
novi = malloc (sizeof (Elem));
novi->broj = broj; novi->sled = NULL;
if (tekuci) tekuci->sled = novi; else niz = novi;
tekuci = novi;
}
getchar (); return niz;
}
void pisi (Elem *niz) { /* ispisivanje liste */
while (niz) printf ("%d ", niz->broj), niz = niz->sled;
}
void brisi (Elem *niz) { /* brisanje cele liste */
Elem * stari;
while (niz) {stari = niz; niz = niz->sled; free (stari);}
}
Elem *izost (Elem *niz, int k) { /* izostavljanje zadatog broja */
Elem *preth = NULL, *tekuci = niz, *stari;
while (tekuci)
if (tekuci->broj == k) {
stari = tekuci; tekuci = tekuci->sled;
if (preth) preth->sled = tekuci; else niz = tekuci;
free (stari);
} else {
preth = tekuci; tekuci = tekuci->sled;
}
return niz;
}
main () { /* test glavni program */
Elem *lista; int k;
while (lista = citaj ()) {
printf ("Ucitani niz = "); pisi (lista); putchar ('\n');
scanf ("%d", &k); printf ("Izostavlja se = %d\n", k);
printf ("Novi niz = "); pisi (lista = izost (lista, k));
printf ("\n\n"); brisi (lista);
}
}

Primjer 17:
#include <stdio.h>
#include <stdlib.h>
main () {
int *a[5], i, j;
for (i=0; i<5; i++) {
a[i] = calloc (10, sizeof(int));
for (j=0; j<10; j++) printf ("%2.2d ", *(a[i]+j) = 10*i+j);
putchar ('\n');
}
}

#include <stdio.h>
#include <stdlib.h>
main () {
int **a, i, j;
a = calloc (5, sizeof (int *));
for (i=0; i<5; i++) {
*(a + i) = calloc (10, sizeof(int));
for (j=0; j<10; j++) printf ("%2.2d ", *(*(a+i)+j) = 10*i+j);
putchar ('\n');
}
}

Primjer 18:
/* Program za ispisivanje Pascal-ovog trougla */
#include <stdio.h>
#include <stdlib.h>
int binko (); /* Nepotpuni prototip funkcije */
main (argc, argv) int argc; char *argv[]; {
int n, k, i, nmax = atoi (argv[1]);
putchar ('\n');
for (n=0; n<=nmax; n++) {
for (i=0; i<nmax-n; i++) printf (" ");
for (k=0; k<=n; k++) printf ("%4d", binko (n, k));
putchar ('\n');
}

 

#include <stdio.h>
main () {
double a, b;
typedef double *P_double;
P_double pa = &a, pb = &b, pc;
scanf ("%lf %lf", pa, pb);
pc = (*pa < *pb) ? pa: pb;
printf ("%g\n", *pc);
}

Primjer 19:
/* Funkcija za pretvaranje pravouglih u polarne koordinate */
#include <math.h>
void polar (double x, double y, double *r, double *fi) {
*r = sqrt (x * x + y * y);
*fi = (x == 0 && y == 0) ? 0 : atan2 (y, x);
}
/* Nalazenje polarnih koordinata pomocu funkcije polar */
#include <stdio.h>
main () {
double x, y, r, fi;
while (printf ("x,y: "), scanf ("%lf%lf", &x, &y) != EOF) {
polar (x, y, &r, &fi); printf ("r,fi: %g, %g\n", r, fi);
}

#include <stdio.h>
#include <math.h>
double x, y, r, fi;
void polar (void) {
extern double x, y, r, fi;
r = sqrt (x * x + y * y);
fi = (x == 0 && y == 0) ? 0 : atan2 (y, x);
}
main () {
extern double x, y, r, fi;
while (printf ("x,y: "), scanf ("%lf%lf", &x, &y) != EOF) {
polar (); printf ("r,fi: %g, %g\n", r, fi);
}
}

Primjer 20:
#include <math.h>
extern double x, y, r, fi;
void polar (void) {
extern double x, y, r, fi;
r = sqrt (x * x + y * y);
fi = (x == 0 && y == 0) ? 0 : atan2 (y, x);
}

Primjer 21:
#include <stdio.h>
double x, y, r, fi;
void polar (void) ;
main () {
extern double x, y, r, fi;
while (printf ("x,y: "), scanf ("%lf%lf", &x, &y) != EOF) {
polar (); printf ("r,fi: %g, %g\n", r, fi);
}
}

Primjer 22:
/* Funkcija za nalazenje polarnih koordinata */
#include <math.h>
void polar (x, y, r, fi)
double x, y, *r, *fi;
{
*r = sqrt (x * x + y * y);
*fi = (x == 0 && y == 0) ? 0 : atan2 (y, x);
}

Primjer 23:
/* Funkcija za nalazenje polarnih koordinata */
#include <math.h>
void polar (x, y, r, fi)
double x, y, *r, *fi;
{
*r = sqrt (x * x + y * y);
*fi = (x == 0 && y == 0) ? 0 : atan2 (y, x);
}


Primjer 24:
/* Program za prenos tekst datoteka */
#include <stdio.h>
void prepis (FILE *ulaz, FILE *izlaz) {
/* Prepisuje datoteku ulaz u izlaz */
int zn;
while ((zn = getc (ulaz)) != EOF) putc (zn, izlaz);
}
main (int argc, char *argv[]) {
void prepis (FILE *, FILE *);
FILE *datot;
char *progr = argv[0]; /* adresa imena programa */
if (argc == 1) prepis (stdin, stdout);
else
while (--argc > 0)
if ((datot = fopen (*++argv, "r")) != NULL)
prepis (datot, stdout), fclose (datot);
else {
fprintf (stderr, "%s: ne postoji datoteka %s\n", progr, *argv);
exit (1);
}
if (ferror (stdout)) {
fprintf (stderr, "%s: greska pisanja u stdout\n", progr);
exit (2);
}
exit (0);
}

Primjer 25:
/* Funkcija za raspakivanje bit po bit na masinski nezavisan nacin */
void raspak (unsigned int k, char bit[], int *n) {
unsigned int i;
for (*n=0, i=~0; i!=0; i>>=1) { bit[(*n)++] = k & 1; k >>= 1; }
}

Primjer 26:
/* Prikazivanje rada funkcije raspak */
#include <stdio.h>
#include <stdlib.h>
void raspak (unsigned int, char [], int *); /* prototip funkcije */
main (int argc, char * argv[]) {
int i, j, k; char niz[64];
for (i=1; i<argc; i++) {
raspak (atoi (argv[i]), niz, &k);
for (j=1; j<=k; j++) {
printf ("%d", niz[k-j]); if (j % 4 == 0) putchar (' ');
}
putchar ('\n');
}
}


Primjer 27:
/* Program za izostavljanje suvisnih razmaka medju recima */
#include <stdio.h>
#define F 0
#define T 1
main () {
int znak, ima = T;
while ((znak = getchar ()) != EOF)
if (znak != ' ' && znak != '\t')
{ putchar (znak); ima = znak == '\n'; }
else
if (! ima) { putchar (' '); ima = T; }
}

Primjer 28:
#include <stdio.h>
#include <stdlib.h>
main () {
int *a, *b, *c, na, nb, nc, duz, i;
for (;;) {
printf ("na? "); scanf ("%d", &na);
if (na <= 0) break;
duz = na * sizeof (int);
a = malloc (duz); b = malloc (duz); c = malloc (duz);
printf ("A? "); for (i=0; i<na; scanf ("%d", a+i++));
for (i=nb=nc=0; i<na; a[i]<0?(b[nb++]=a[i++]):(c[nc++]=a[i++]));
printf ("B="); for (i=0; i<nb; printf (" %d", b[i++])); putchar ('\n');
printf ("C="); for (i=0; i<nc; printf (" %d", c[i++])); putchar ('\n');
free (a); free (b); free (c);
}

Primjer 29:
/* Program za sredjivanje recenica */
#include <stdio.h>
#include <ctype.h>
main () {
enum {F, T};
int znak, prvi = T;
while ((znak = getchar ()) != EOF) {
if (isupper (znak))
{ if (! prvi) znak += 32; else prvi = F; }
else if (islower (znak))
{ if (prvi) { znak -= 32; prvi = F; } }
else
if (znak == '.' || znak == '!' || znak == '?')
prvi = T;
putchar (znak);
}
}

Primjer 30:
/* Funkcija za izracunavanje skalarnog proizvoda */
double skal_pro (double a[], double b[], int n) {
double zbir=0;
int i;
for (i=0; i<n; i++) zbir += a[i] * b[i];
return zbir;
}

Primjer 31:
/* Nalazenje skalarnog proizvoda pomocu funkcije skal_pro */
#include <stdio.h>
main () {
double x[100], y[100];
int i, k;
printf ("Duzina vektora: "); scanf ("%d", &k);
printf ("Komponente vektora X: ");
for (i=0; i<k; i++) scanf ("%lf", &x[i]);
printf ("Komponente vektora Y: ");
for (i=0; i<k; i++) scanf ("%lf", &y[i]);
printf ("Skalarni proizvod X*Y: %g\n", skal_pro (x, y, k));
}

Primjer 32:
/* Funkcija za izracunavanje skalarnog proizvoda */
double skal_pro (double a[], double b[], int n) {
double zbir=0;
int i;
for (i=0; i<n; i++) zbir += a[i] * b[i];
return zbir;
}


Primjer 33:
/* Nalazenje skalarnog proizvoda pomocu funkcije skal_pro */
#include <stdio.h>
main () {
double x[100], y[100];
int i, k;
double skal_pro (double [], double [], int); /* Prototip funkcije */
printf ("Duzina vektora: "); scanf ("%d", &k);
printf ("Komponente vektora X: ");
for (i=0; i<k; i++) scanf ("%lf", &x[i]);
printf ("Komponente vektora Y: ");
for (i=0; i<k; i++) scanf ("%lf", &y[i]);
printf ("Skalarni proizvod X*Y: %g\n", skal_pro (x, y, k));
}

Primjer 34:
/* Program za izracunavanje skalarnog proizvoda dva vektora */
#include <stdio.h>
#define DIM 50
main ()
{
double a[DIM], b[DIM], skal_pro;
int i, n;
sledeci:
printf ("\nDuzina vektora (najvise %d): ", DIM);
scanf ("%d", &n);
if (n <= 0) goto kraj;
if (n > DIM) goto sledeci;
printf ("Komponente vektora A: "); i = 0;
novo_a: scanf ("%lf", &a[i++]); if (i < n) goto novo_a;
printf ("Komponente vektora B: "); i = 0;
novo_b: scanf ("%lf", &b[i++]); if (i < n) goto novo_b;
i = skal_pro = 0;
dalje: skal_pro += a[i] * b[i]; if (++i < n) goto dalje;
printf ("Skalarni proizvod A*B: %10.3f\n", skal_pro);
goto sledeci;
kraj: ;
}

Primjer 35:
/* Program za izracunavanje srednje temperature u toku godine */
#include <stdio.h>
#define BROJ_MESECI 12
main ()
{
typedef enum { JAN = 1, FEB, MAR, APR, MAJ, JUN,
JUL, AVG, SEP, OKT, NOV, DEC } Meseci;
Meseci mesec = JAN;
float temp_po_mesecima [BROJ_MESECI];
float srednja_temp = 0.;
dalje:
printf ("Srednja temperatura za mesec %2d: ", mesec);
scanf ("%f", &temp_po_mesecima[mesec-1]);
srednja_temp = srednja_temp + temp_po_mesecima[mesec-1];
if (mesec == DEC) goto kraj;
mesec = mesec + 1;
goto dalje;
kraj:
srednja_temp = srednja_temp / BROJ_MESECI;
printf ("\nSrednja temperatura za godinu dana = %f\n",
srednja_temp);
}

Primjer 36:
/* Program za citanje niza celih brojeva sa tastature i
izracunavanje njihove srednje vrednosti */
#include <stdio.h>
main ()
{
int n, a[100], i;
float s;
printf ("n= ");
scanf ("%d", &n);
i = 0; s = 0;
dalje:
if (i == n) goto kraj;
printf ("a[%d]= ", i);
scanf ("%d", &a[i]);
s = s + a[i];
i = i + 1;
goto dalje;
kraj:
if (n != 0) s = s / n;
printf ("\ns= %f\n", s);
}


Primjer 37:
/* Dodavanje novih zapisa u datoteku o stedisama */
#include <stdio.h>
main () {
typedef struct { char prezime[16], licno_ime[16]; } Ime_i_prezime;
typedef struct { Ime_i_prezime ime; double stanje; } Stedise;
FILE *stednja; /* Datoteka o stedisama */
Stedise stedisa; /* Podaci o jednom stedisi */
static Stedise prazno; /* Prazan zapis (sadrzi sve nule) */
unsigned int sifra; /* Sifra stedise */
unsigned int veldat; /* Broj zapisa u datoteci */
/* Otvaranje datoteke o stedisama */
if ((stednja = fopen ("stedise.dat", "r+b")) == NULL) {
/* Datoteka ne postoji, formiranje prazne datoteke */
stednja = fopen ("stedise.dat", "w+b"); veldat = 0;
fwrite (&veldat, sizeof veldat, 1, stednja);
} else
/* Datoteka postoji, ţitanje broja zapisa u datoteci */
fread (&veldat, sizeof veldat, 1, stednja);
/* Dodavanje zapisa o novim stedisama */
for ( ; ; ) {
/* Citanje podataka o stedisi */
putchar ('\n');
printf ("Sifra stedise? "); scanf ("%d", &sifra);
if (sifra == 0) break; /* ... zavrsetak programa */
printf ("Prezime stedise? ");
scanf ("%s", stedisa.ime.prezime);
printf ("Licno ime stedise? ");
scanf ("%s", stedisa.ime.licno_ime);
stedisa.stanje = 0;
/* Priprema za upisivanje podataka u datoteku */
if (sifra > veldat) {
/* Novi zapis je iza kraja datoteke, promena velicine datoteke */
fseek (stednja, 0L, SEEK_END);
while (++veldat < sifra) fwrite (&prazno, sizeof prazno, 1, stednja);
veldat = sifra;
} else
/* Novi zapis je pre kraja datoteke, nalazenje njegovog mesta */
fseek (stednja,
(sizeof veldat) + (long) (sifra - 1) * (sizeof stedisa),
SEEK_SET);
/* Upisivanje podataka u datoteku */
fwrite (&stedisa, sizeof stedisa, 1, stednja);
rewind (stednja); fwrite (&veldat, sizeof veldat, 1, stednja);
}
}


Primjer 38:
/* Ispisivanje sadrţaja datoteke o stedisama */
#include <stdio.h>
main () {
typedef struct { char prezime[16], licno_ime[16]; } Ime_i_prezime;
typedef struct { Ime_i_prezime ime; double stanje; } Stedise;
FILE *stednja; /* Datoteka o stedisama */
Stedise stedisa; /* Podaci o jednom stedisi */
unsigned int sifra; /* Sifra stedise */
unsigned int veldat; /* Broj zapisa u datoteci */
unsigned int i, k; /* Pomocni brojaci */
/* Otvaranje datoteke o stedisama */
if (! (stednja = fopen ("stedise.dat", "r+b"))) exit (1);
fread (&veldat, sizeof veldat, 1, stednja);
/* Ispisivanje podataka o pojedinim stedisama */
for (sifra=1; sifra<=veldat; sifra++) {
/* Citanje sledeceg zapisa iz datoteke */
printf ("%3d", sifra);
fread (&stedisa, sizeof stedisa, 1, stednja);
if (stedisa.ime.prezime[0] != '\0') {
/* Prikaz podataka o postojecem stedisi */
k = printf (" %s %s", stedisa.ime.prezime, stedisa.ime.licno_ime);
for (i=k; i<34; i++) putchar (' ');
printf ("%8.2f\n", stedisa.stanje);
} else
/* Prazan zapis, stedisa ne postoji */
printf (" *** Ne postoji stedisa sa ovom sifrom ***\n");
}
}

Primjer 39:
#include <stdio.h>
/* Potprogram za tabeliranje realne funkcije jednog realnog argumenta */
void tabela (double (*pf)(double), double x1, double x2, double dx) {
double x;
printf ("\n x f(x)"
"\n========================================\n");
for (x=x1; x<=x2; x+=dx) printf ("%20.10f%20.10f\n", x, (*pf)(x));
}
/* Glavni program za prikaz rada potprograma tabela */
main () {
double x1, x2, dx, oscilac(double);
printf ("x1, x2, dx: "); scanf ("%lf%lf%lf", &x1, &x2, &dx);
tabela (oscilac, x1, x2, dx);
}

Primjer 40:
/* Primer funkcije za tabeliranje */
#include <math.h>
double oscilac (double x) {return exp (-0.1 * x) * sin (x); }

/* Definisanje tipa Tacka */
struct tacka {int x, y;};
typedef struct tacka Tacka;
/* Formiranje tacke od zadatih koordinata */
Tacka pravi_tacku (int x, int y) {
Tacka t;
t.x = x; t.y = y;
return t;
}

Primjer 41:
/* Izracunavanje rastojanja izmedju dve tacke */
#include <math.h>
double rastojanje (Tacka g, Tacka h) {
return sqrt (pow(g.x-h.x, 2) + pow(g.y-h.y, 2));
}

Primjer 42:
/* Konstanta za oznacavanje koordinatnog pocetka */
const Tacka NULA = {0, 0};
/* Nalazenje najblize tacke koordinatnom pocetku u nizu tacaka */
Tacka *najbliza (Tacka a[], int n) {
Tacka *min = a; double r = rastojanje(a[0],NULA), s; int i;
for (i=1; i<n; i++) {
s = rastojanje (a[i], NULA);
if (s < r) {r = s; min = a + i;}
}

/* Definisanje tipa Tacka */
struct tacka {int x, y;};
typedef struct tacka Tacka;
/* Formiranje tacke od zadatih koordinata */
Tacka pravi_tacku (int x, int y) {
Tacka t;
t.x = x; t.y = y;
return t;
}

Primjer 43:
/* Izracunavanje rastojanja izmedju dve tacke */
#include <math.h>
double rastojanje (Tacka g, Tacka h) {
return sqrt (pow(g.x-h.x, 2) + pow(g.y-h.y, 2));
}
/* Konstanta za oznacavanje koordinatnog pocetka */
const Tacka NULA = {0, 0};
/* Nalazenje najblize tacke koordinatnom pocetku u nizu tacaka */
Tacka *najbliza (Tacka a[], int n) {
Tacka *min = a; double r = rastojanje(a[0],NULA), s; int i;
for (i=1; i<n; i++) {
s = rastojanje (a[i], NULA);
if (s < r) {r = s; min = a + i;}
}
return min;
}

Primjer 44:
/* Program za brojanje slova i cifara */
#include <stdio.h>
#include <ctype.h>
main ()
{
int znak, vel_sl = 0, mal_sl = 0, cifra = 0;
dalje:
znak = getchar ();
if (znak == EOF) goto kraj;
vel_sl += isupper (znak) != 0;
mal_sl += islower (znak) != 0;
cifra += isdigit (znak) != 0;
goto dalje;
kraj:
printf ("Broj velikih slova u tekstu je %d.\n", vel_sl);
printf ("Broj malih slova u tekstu je %d.\n", mal_sl);
printf ("Broj cifara u tekstu je %d.\n", cifra );
}

Primjer 45:
Program koji sortira niz.

//bubble sort
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b) { //f-ja prima pokazivace
int tmp=*a; //umjesto obicnih vrijednosti
*a=*b; //da bi mogla da mjenja te
*b=tmp; //varijable izvan svog bloka
}
int main(void) {
int *niz,n,i,j; //niz je zapravo pokazivac na int
printf("Br. clanova niza: ");
scanf ("%d",&n); //i f-ja scanf zapravo radi preko pokazivaca
niz = malloc(sizeof(int)*n); //ovdje pokazivacu niz dinamicki alociramo mem.
for (i=0; i<n; i++) {
printf("Niz[%d]=",i);
scanf("%d",(niz+i)); //aritmetika pokazivaca
//(niz+i je isto sto i &niz[i])
}
printf("\nsortiram niz..");
for (i=0; i<n; i++)
for (j=0; j<i; j++)
if (niz[i]<niz[j])
swap(&niz[i],&niz[j]); //pozivanje f-je swap
printf("\nniz sortiran.\n");
for (i=0; i<n; i++)
printf("niz[%d]=%d\n",i,niz[i]);
return 0;
}