Professional Documents
Culture Documents
Alapismeretek
Alapismeretek
Programozás I.
Hatwágner F. Miklós
elso.c
/* elso.c */
#include <stdio.h>
void main(void) {
printf("Ez egy C program!\n");
}
Kimenet
Ez egy C program!
_
2 Fordítás (→ compiler)
Üzenetek típusai:
hibaüzenetek (error)
gyelmeztet® üzenetek (warning)
Megjegyzések:
elso.c, 1. sor:
/* elso.c */
/* nyitja és */ zárja
több soron át tarthat
nem ágyazhatók egymásba
El®feldolgozó (preprocessor):
egybeépítve a fordítóval
elhagyja a megjegyzéseket
előfeldolgozó
elso.c elso.obj
fordító
elso.c, 2. sor
#include <stdio.h>
standard input/output
< és > jelek: csak egy bizonyos helyen keresi a fájlt (include
les)
Függvénydeníció
elso.c, 3. sor
void main(void) {
Függvényhívás
elso.c, 4. sor
függvénynév(aktuális-paraméterlista)
printf megjelenteti paraméterét a szabvány kimeneten
; → utasításvég jelzés
3 Kapcsoló-szerkesztés (link)
fv.-ek tárgykódja: statikus könyvtárakban (.lib) (run-time
libraries, standard libraries)
keretrendszerben beállítható ezek és a kimeneti fájlok elérési
útja
elso.obj
indító kapcsoló-
elso.exe
program (obj) szerkesztő
könyvtárak (lib)
4 Futtatás
Feladat:
Számítsuk ki az összetartozó F ° °
értékeket 0 és 300 F
között, °
F értékét rendre 20-asával növelve!
= ( °F −
5
9
32)
Adatstruktúra:
Algoritmus:
pelda1.c
pelda1.c, 5. sor
pelda1.c, kimenet
Problémák:
sok hibalehet®ség
Adatszerkezet:
Algoritmus:
pelda2.c
Blokkszerkezet
Deklarációs utasítás
típus azonosítólista;
azonosítólista: vessz®vel elválasztott azonosítók
Típusok
Hozzárendelés
pelda2.c, 12. sor
celsius=(5.0/9.0)*(fahr-32.0);
objektum = kifejezés
módosítható balérték: értéket felvenni képes objektum
jobbérték: meghatározható érték¶ kifejezés
esetleges implicit típusmódosítás
Elöltesztel® ciklus
pelda2.c, 11. sor
while(fahr<=felso) {
while(kifejezés) utasítás
kifejezés aritmetikai: igaz (1) esetén ismétli az utasítást, hamis (0) esetén
a ciklust követ® utasításra lép
utasítás több utasításból is állhat → { és }
kifejezés-nek változnia kell → végtelen ciklus
Explicit típusmódosítás
(típus)kifejezés
pelda2.c, kimenet
Fahrenheit - Celsius
--------------------
0 -17.8
20 -6.7
40 4.4
60 15.6
80 26.7
100 37.8
120 48.9
140 60.0
160 71.1
180 82.2
200 93.3
... ...
300 148.9
_
Probléma
pelda3.c
pelda4m.c
/* PELDA4M.C -- Fahrenheit - Celsius átszámítás */
#include "beginend.h"
int main(void)
begin
int fahr;
printf("\nFahrenheit - Celsius átszámítás\n\n");
printf("Fahrenheit - Celsius\n");
printf("--------------------\n");
LACI(fahr=ALSO; fahr<=FELSO; fahr=fahr+LEPES)
begin
printf("%10d%10.1f\n",fahr,(5.0/9.0)*(fahr-32));
end
end
pelda5.c
pelda6.c
/* PELDA6.C -- Karakterszámlálás */
#include <stdio.h>
void main(void) {
long nc;
nc = 0l;
printf("A bemenet karaktereinek leszámlálása:\n\n");
printf("Gépeljen Ctrl+Z-ig!\n\n");
while(getchar()!=EOF) ++nc;
printf("A bemenet karaktereinek száma %ld volt.\n", nc);
}
pelda6.c, 4. sor
long nc;
pelda6.c, 5. sor
nc = 0l;
Növelés, csökkentés
pelda6.c, 8. sor
while(getchar()!=EOF) ++nc;
pelda6.c, 9. sor
pelda7.c
/* PELDA7.C -- Sorszámlálás */
#include <stdio.h>
void main(void) {
int c, nl;
nl = 0;
printf("A bemenet sorainak leszámlálása:\n\n");
printf("Gépeljen Ctrl+Z -ig!\n\n");
while((c=getchar()) != EOF)
if(c == '\n') ++nl;
printf("\nA bemeneten %d sor volt.\n", nl);
}
c = getchar();
while(c != EOF) {
if(c == '\n') ++nl;
c = getchar();
}
Operátor Asszociativitás
() [] -> balról jobbra
! ++ −− + - * & (típus) sizeof jobbról balra
* / % balról jobbra
+ - balról jobbra
<< >> balról jobbra
< <= > >= balról jobbra
== != balról jobbra
& balról jobbra
^ balról jobbra
| balról jobbra
&& balról jobbra
|| balról jobbra
?: jobbról balra
= += -= *= /= %= &= ^= |= <<= >>= jobbról balra
, balról jobbra
Kétirányú szelekció
pelda7.c, 9. sor
Algoritmus
pelda8.c
Többszörös hozzárendelés
nl = nc = nw = 0;
asszociativitás
Algoritmus
pelda9.c
Tömb deníció
pelda9.c, 8. sor
típus tömbazonosító[méret];
méret pozitív, egész érték¶ állandó kifejezés
állandó kifejezés értéke fordítási id®ben kiszámítható
Tömb helyfoglalása
sizeof(tömbazonosító) ≡ méret*sizeof(típus)
sizeof megadja a típus vagy objektum bájtokban mért méretét
tömbazonosító[index]
0 ≤ index ≤ meret − 1
Mi készítjük el!
pelda10.c
return el®fordulásai
fuggv.c
foprog.c
foprog.c foprog.obj
fordítás
fuggv.c fuggv.obj
foprog.obj
fuggv.obj
kapcsoló-
indító prodzsekt.exe
szerkesztés
program (obj)
könyvtárak (lib)
Feladat:
Szöveg beolvasása
Szöveg tárolása
getline()
int getline(char s[], int lim) {
/* Max. lim méret¶ karakterlánc beolvasása s-be.
A függvény a karakterlánc hosszát adja vissza.
s tömbnek lim+1 méret¶nek kell lennie. */
int c, i;
for(i=0; i<lim && (c=getchar())!=EOF && c!='\n'; ++i) s[i]=c;
s[i] = '\0';
return(i);
}
getline()
int getline(char s[], int lim) {
/* Max. lim méret¶ karakterlánc beolvasása s-be.
A függvény a karakterlánc hosszát adja vissza.
s tömbnek lim+1 méret¶nek kell lennie. */
int c, i;
for(i=0; i<lim && (c=getchar())!=EOF && c!='\n'; ++i) s[i]=c;
s[i] = '\0';
return(i);
}
copy()
void copy(char s1[], char s2[]) {
/* s1 masolása s2-be. s2-t elég nagynak tételezi fel. */
int i;
i = 0;
while((s2[i]=s1[i]) != '\0') ++i;
}
string.h strcpy()
pelda11.c
Alapfogalmak
Hatáskör/érvényességi tartomány
Az a programterület, ahol hivatkozható, elérhet®.
Élettartam
Az az id®szak, amíg memóriát foglal.
Változó deníciója
Olyan deklaráció, melynek során memóriafoglalás is történik.
Tárolási osztály
Meghatározza, hogy az objektum
1 hol jön létre a memóriában (regiszter / statikus /
dinamikus terület)
2 deniálja az objektum élettartamát
<tárolási-osztály><típusmódosítók><alaptípus>
azonosítólista;
Tárolási osztályok:
auto
register
static
extern
Pl. auto i; ≡ auto signed int i;
További alapfogalmak
Fordítási egység
El®feldolgozott forrásmodul. Részei:
függvénydeníciók
küls® deklarációk
Küls® deklaráció
Minden fv. testén kívüli deklaráció → küls®/globális változó
modul1.c modul2.c
void copy(void) {
/* line másolása save-be. save-t elég nagynak tételezi fel */
int i;
i = 0;
while((save[i]=line[i]) != '\0') ++i;
}
Kezd®értékadás deklarációban.
típus azonosító<=inicializátor>;
típus tömbazonosító[<méret>]<=inicializátorlista>;, ahol
típus ≡ <tárolási-osztály><típusmódosító><alaptípus>
Az inicializátor egy hozzárendelés-kifejezés (→ típusok,
konverziók)
Tömböknél: