Osnove programskega jezika C - Naloge

Kazalo

Literatura

C - printf

Naloga 1

Delovanje printf (printf.c)
printf.c

Naloga 2

Napiši program, ki prebere in izpiše, če je prvo število večje od drugega.
primerjava.c

C - zanke (while-do, for)

Naloga 3

Napiši program, ki pretvarja Fahrenheit-e v Celzije v mejah med 0 in 200 s korakom 20.
fahr.c

C - switch

Naloga 4

Napiši program, za štetje digitov. Vhodno zaporedje prekinemo s pritiskom na Q.
sw.c

C - Delo z datotekami

FILE *f, ftell(f), fseek(f), rewind(f), feof(f),fopen(fname, mode) mode= [+]w, [+]r, [+]a, fclose(f), freopen(f,fname, mode)… int ferror(f), vooid clearerr(f)

Naloga 5

Napiši program, ki prešteje število vrstic in znakov v datoteki kjer je shranjen.
stej.c

Naloga 6

Napiši program, ki oštevilči vrstice datoteke, ki jo je podal uporabnik.
filenum.c

Naloga DN

Napišite program, ki prešteje znake, besede, vrstice v datoteki katere ime poda uporabnik.

C - predprocesor-makroji

Naloga 7

Napišite makro lower, ki pretvarja velike črke v male z uporabo pogojnega izraza.

#define LOWER(ch) (ch>='A'&& ch<='Z') ? ch+'a'-'A' : ch;

Naloga DN

Napiši makro za zamenjavo dveh vrednosti.

Naloga DN

Napiši makro za izračun absolutne vrednosti.

C - funkcije in procedure

Naloga 8

Napiši podprogram za potenciranje.

exp(x , n)

Naloga 9

Napišite podprogram, ki polje cifer, ki tvorijo besedo pretvori v število (brez uporabe obstoječe atof funkcije).

C - funkcije, več izhodnih vrednosti (klic po referenci)

Naloga 10

Napiši proceduro, ki zamenja vrednosti dveh spremenljivk.
zamenjaj.c

C - Rekurzivna procedura

Naloga 11

Napišite podprogram, ki izpiše vse permutacije dane besede.
permute.c

void perm(char *niz, char *p)
{
	char *q=p, b=*p?0:puts(niz);
	while (b=*p)
	{
		*q=*p;
		*p=b;
		perm(niz, p+1);
		*p=*q;
		*q++=b;
	}
}

Naloga 12

Napišite funkcijo, ki bo izračunala prvi člen geometrijsega zaporedja 1, 2, 4, 8, 16, …, ki je večji od 1000.

Naloga 13

Napišite program, ki izpiše tabelo funkcije sin(x)/x v mejah od -2π do 2π s korakom po π/10. Kako boste ukrepali, ko je x enak 0?

Naloga 14

Napišite program, ki z zvezdicami izriše graf kvadratne funkcije (napišite podprogram, ki izpiše določeno število presledkov).

C - parametri funkcije main

Naloga 15

Napišite program, ki izračuna in izpiše kvadrat števila, ki ga vnesemo v ukazni vrstici ob imenu programa.

C - statične spremenljivke

Naloga 16

Napišite program, ki bo najprej prebral celo število, nato tvoril naključno število med 0 in prebranim celim številom. Poskušajte uganiti generirano naključno število. Če boste vnesli premalo/preveliko naključno število bo program (podprogram) izpisal, da je število večje/manjse od generiranega. Na koncu naj program sporoči, v kolikih poskusih smo našli iskano število.

Naloga 17

Napiši funkcijo, ki prešteje, na koliko možnih načinov lahko dano naravno število zapišemo kot nepadajočo vsoto naravnih števil. Npr. 6= 1+1+1+1+1+1= 1+1+1+1+2= 1+1+1+3= 1+1+2+2= 1+1+4= 1+2+3= 1+5= 2+2+2= 2+4= 3+3

Naloga 18

Napišite funkcijo, ki prejme tri cela števila a, b, c kot vhodne parametre in jih uredi po velikosti tako, da bo a najmanjše.

Naloga 19

Napišite funkcijo, ki izračuna razdaljo dveh točk v ravnini. Vhodni podatki v funkcijo so koordinati točk x in y v ravnini. Deklaracije matematičnih funkcij so v math.h, ki jo moramo vključit v program.

C - kazalci

Primer - Kazalci ki "binglajo"

Opazuj spreminjanje globalnega kazalca, ki kaže na lokalno spremenljivko, pred in po izvajanju funkcije.
bing.c

Naloga 20 - Klic po referenci

Napiši program, ki prešteje prazna mesta in male črke v vtipkanem stavku.
male_c_praz.c

Naloga 21 - Kazalec na f-jo

Napiši program za tabeliranje polinomov.
tabeliranje.c

Naloga 22

Za dani niz ugotovi, ali predklepaji in zaklepaji nastopajo v pravilno gnezdenih parih.
Namig: #predklepajev==#zaklepajev v vsakem začetnem podnizu je vsaj toliko predklepajev kot zaklepajev.
Za branje vhodnega niza uporabljaj fgets(niz,MAX,stdin), konec niza '\0'.

C - deklaracije tipov

Primer:

typedef double (*FUNC)()
FUNC g()…

C - kazalčna aritmetika

Naloga 23

Privzamemo:
sizeof(char)=1,
sizeof(int)=2,
sizeof(float)=4.
Določi vrednosti po dodeljevanju:
char *pc;	/*naj bo pc=900*/
int *pi1, *pi2;	/*naj bo pi1=1000, pi2=1012*/
float *pf1, *pf2;	/*naj bo pf1=1100,pf2=1112*/
pc+=6;
pi1+=6;
pf1+=6;
*pf1=pi1-pi2;
*pi1=pf1-pf2;
pi1-=*pi1;

Naloga 24

Tvorite vrsto realnih števil. Naredite funkcije za sledeče probleme:

C - kazalci, dinamično dodeljevanje pomnilnika

malloc(), calloc(), free(), cfree(), mlalloc(n), clalloc(n, siz), realloc()

Naloga 25

Napiši program, ki prebere 15 float vrednosti, jih shrani v blok v spominu z uporabo kazalcev in potem izračuna in izpiše njihovo vsoto in minimum.

#define SIZE 15
float *init()
{
	char *malloc();
	return (float*) malloc(SIZE*sizeof(float));
}
void readin(a)
float *a;
{
	int i;
	printf(“Vnesite %d vrednosti:”, SIZE);
	for (i=1; i < SIZE; i++) scanf(“%f”, a+i);
}

Naloga 26

Napiši program, ki prebere zaporedje besed in izpiše v obratnem vrstnem redu kot se pojavljajo na vhodu tiste besede, ki se začnejo z veliko začetnico. Predpostavi, da ni več kot 15 besed in da ni ni niti ena beseda daljša kot 10 črk. To bo mogoče pomagalo, če uporabljaš '\0' za konec besede.
besede.c

C - tabele

Naloga 27

Napiši program, ki prebere 30-znakov dolgo vrstico in jo shrani v 30-karakterjev dolgo tabelo. Če se znak za konec-vrstice pojavi pred 30-im znakom, naj se vnašanje konča. Potem prikaži vhodne podatke brez presledkov in številk.

Naloga 28

Napiši funkcijo FIND, ki ima tri parametre:

In vrne 1, če je x element tabele in 0 sicer. Predpostavi, da je F urejena po velikosti in uporabljaj binarno iskanje.
find.c

Naloga DN

Napiši program, ki prešteje pogostost vsake številke, število belih presledkov in število ostalih znakov. Uporabljajte tabele.

Naloga DN

Napišite program, ki dolgo vhodno vrstico razdeli v več vrstic. Vrstico naj deli za zadnjim neločljivim znakom , ki se pojavi pred n-tim stolpcem. Širina vrstic n naj bi parameter.

C - večdimenzionalne tabele

Naloga 29

Imamo naslednji program
izpis.c

Naj bo prvi izhod: 0-i: 8515 in sizeof(int) = 2. Povej kaj se bo izpisalo:
0-i: 8515
1-i:
2-i:…
5-i:
0-i:
1-i:
2-i:

C - strukture

Naloga 30

Napiši funkcije za seštevanje, odštevanje, množenje, deljenje, kompleksnih števil, pri tem uporabljaj strukturo
complex.c

Naloga 31

Podane so naslednje definicije:

struct secret {
	int age;
	enum {male, female}: sex;
}
struct agent {
	struct secret friends[10];
	struct secret enemies[10];
}

Napiši proceduro info(a, fage, eage), ki skozi fage vrne najmlajšo žensko prijateljico agenta in skozi eage vrne najstarejšega moškega sovražnika agenta. –1 vrne, če ni prijateljev/sovražnikov agenta.
struct.c

Naloga DN

Ugotovi ali leži točka prostora, katere koordinate prebereš, znotraj izbrane krogle, na njenem robu ali zunaj nje.

struct tock {
	double x, y, z;
}
struct krogla {
	struct tocka sredisce;
	double polmer;
}

Naloga 32

Sestavi funkcijo, ki brez tvorjenja novih elementov obrne smer povezav v linearnem seznamu. Napiši tudi testni program, s katerim preveriš pravilnost rešitve.
obrni.c

Naloga 33

Preuredi seznam celih števil, da bodo na začetku vsa soda, na koncu vsa liha. Medsebojni vrstni red sodih naj se ohrani, vrstni red lihih naj se obrne. Npr. podano: 1, 2, 3, 4, 5, 6, 7, 8, dobimo: 2, 4, 6, 8, 7, 5, 3, 1.
preuredi.c

C - seznami

Naloga 34

Napiši program, ki iz naključnih številk zgradi seznam in ga izpiše.
navadni_sez.c

Naloga 35

Podana je naslednja definicija tipa dvojno povezanega seznama:

typedef struct tlist {
	char key; /*vrednost */
	struct tlist *prev;/* predhodni */
	struct tlist *next;/* naslednji*/
} LISTSTART, *LISTPTR;

Napiši proceduro, ki vstavi podani niz znakov v že obstoječi dvojno povezani seznam za elementom, ki ima vrednost given.

Iz podanega niza znakov prehodno zgradi dvojno povezani seznam in ga nato vstavi.
podseznam.c

C - argumenti glavnega programa in nizi

Naloga 36

Podan je program string.c
string.c

Prevedemo ga: cc –lm string.c –o string

Klic programa: ./string I like to program

Prvi test:
test-number
est-number
st-number
t-number

Drugi test:
test-number
three
for-2023
section

Tretji test:
I
like
to
program

C - nizi

Operacije za delo z nizi:

int strlen(s)
STRING strcpy(s1, s2) kopira s2 v s1 in "povozi" s1, vrne kazalec na s1

STRING strcat(s1, s2) doda s2  s1, vrne kazalec na s1

int strpos(s1, c) če je karakter c v s1 vrne pozicijo, sicer –1

STRING strchr(s1, c) vrne kazalec na prvo pojavitev karakterja c v s1,
	sicer pa NULL

int strcmp(s1, s1) vrne 0, če se niz s1 ujema s s2, negativno vrednost,
	če je s1 leksikografsko pred s1, sicer pa pozitivno vrednost

Naloga DN

Napiši proceduro strip(s, t), ki skozi t vrne string s, z zbrisanimi začetnimi praznimi mesti. Predpostavi, da je za t zadosti prostora v spominu.

Naloga DN

Napiši program, ki bere datoteko, ki jo sestavljajo vrstice vrstice tipa Ime Priimek in izpise jo v obilki IP, oz. izpise začetne črke imen in priimkov.

C - bitne operacije

Naloga 37

Napiši proceduro, ki obrne bite v byte-u.
obrni.c

Naloga 38

Napiši proceduro octal(i), ki pokaže osmiško predstavitev števila i s pomočjo premika (shift)
osmisko.c

Naloga

Sestavi program, ki prebere besedilo s standardnega vhoda in ga preoblikovanega izpiše v datoteko z danim imenom. Program naj v besedilu odstrani večkratne presledke, poskrbi, da se stavki začenjajo z veliko začetnico in podobno.
preoblikuj.c