[[:oktatas:programozás:c|< C nyelv]] ====== C példaprogram ====== ===== Összeadás mutatókkal ===== #include #include int main() { int *a; int *b; int *c; a = (int*) malloc(sizeof(int)); b = (int*) malloc(sizeof(int)); c = (int*) malloc(sizeof(int)); *a = 3; *b = 4; *c = *a + *b; printf("Osszeg: %d\n", *c); free(a); free(b); free(c); return 0; } ===== Háromszög területének számítása az oldalakból ===== #include #include #include double terszamit(int a, int b, int c) { long s = (a + b + c)/2; return sqrt(s*(s-a)*(s-b)*(s-c)); } int szerkesztheto(int a, int b, int c) { if ((a + b) <= c) return 0; else if ((a + c) <= b) return 0; else if ((b + c) <= a) return 0; else return 1; } int main() { int a, b, c; double terulet; printf("Háromszög területe\n"); printf("a: "); scanf("%d", &a); printf("b: "); scanf("%d", &b); printf("c: "); scanf("%d", &c); if (szerkesztheto(a, b, c)) { terulet = terszamit(a, b, c); printf("Terület: %f\n", terulet); } else printf("Nem szerkeszthető!\n"); return 0; } ===== Hexadecagon területe ===== #include #include #include int main() { double oldal; double terulet; printf("Hexadecagon teruletszamitas\n"); printf("Oldal: "); scanf("%lf", &oldal); terulet = (4 * pow(oldal, 2)) * (cos(M_PI/16)/sin(M_PI/16)); printf("A hexadecagon terulete: %lf", terulet); return 0; } ===== Trapéz területe ===== #include #include #include int main() { double terulet; printf("Trapez terulete\n"); printf("Csak valodi trapez eseten mukodik!\n"); double a, b, c, d; printf("a: "); scanf("%lf", &a); printf("b: "); scanf("%lf", &b); printf("c: "); scanf("%lf", &c); printf("d: "); scanf("%lf", &d); printf("a: %lf\n", a); terulet = ((a+c)/(4*(a-c))) * sqrt((a+b-c+d)*(a-b-c+d)* (a+b-c-d)*((a * -1)+b+c+d)); printf("Trapez terulete: %lf\n", terulet); return 0; } ===== Verem létrehozása ===== #include #define MERET 100 typedef struct { int meret; // A verem aktuális mérete int elem[MERET]; // A verembe egész számokat tehetünk } Tverem; main() { Tverem verem; verem.meret = 0; //Írunk a verembe verem.elem[verem.meret++] = 5; verem.elem[verem.meret++] = 8; verem.elem[verem.meret++] = 12; //Olvasunk a veremből printf("%d\n", verem.elem[--verem.meret]); printf("%d\n", verem.elem[--verem.meret]); printf("%d\n", verem.elem[--verem.meret]); } ===== Decimális szám binárissá alakítása ===== #include #define VEREMMERET 100 typedef struct { int meret; int elem[VEREMMERET]; } Tverem; main() { int szam; Tverem verem; verem.meret = 0; szam = 3; printf("Szam: "); scanf("%d", &szam); while(szam != 0) { //printf("%d", szam % 2); verem.elem[verem.meret++] = szam % 2; szam = szam /2; } int db = verem.meret; int i; for(i = 0; i < db; i++) printf("%d", verem.elem[--verem.meret]); printf("\n"); } ===== Decimális szám binárissá másként ===== #include void dec2bin(long szam, char *binaris) { int i; char temp[50]; int k = 0, n = 0; while(szam != 0) { //verem.elem[verem.meret++] = szam % 2; temp[k++] = (szam % 2) + '0' ; szam = szam /2; } while (k >= 0) binaris[n++] = temp[--k]; binaris[n-1] = 0; } int main() { int szam; char eredmeny[30]; printf("Szam: "); scanf("%d", &szam); dec2bin(szam, eredmeny); printf("%s\n", eredmeny); } ===== Bitművelet számokon ===== #include #include #include void dec2bin(long szam, char *binaris) { int i; char temp[50]; int k = 0, n = 0; while(szam != 0) { //verem.elem[verem.meret++] = szam % 2; temp[k++] = (szam % 2) + '0' ; szam = szam /2; } while (k >= 0) binaris[n++] = temp[--k]; binaris[n-1] = 0; } long bin2dec(char *szam) { int a, i, j; char ch; long osszeg = 0; j = strlen(szam) - 1; i = 0; while(i < strlen(szam)) { ch = szam[i]; if (ch == '1') osszeg = osszeg + pow(2, j); i++; j--; } return osszeg; } main() { char szam1[50], szam2[50], szam3[50]; long a, b, c; printf("Bináris szám 1 : "); scanf("%s", szam1); a = bin2dec(szam1); printf("Bináris szám 2 : "); scanf("%s", szam2); b = bin2dec(szam2); c = a | b; dec2bin(c, szam3); printf("Bináris szám 3 : %s\n", szam3); getchar(); // Enter elkapása getchar(); // Várakozás } ===== Várakozás egy billentyűnyomásra ===== Ha egy karaktert viszünk be a billentyűzeten a következő karaktert csak úgy kéri be a program, ha "elkapjuk" az Enter billentyűt. #include main() { char a; printf("Karakter: "); scanf("%d", &a); getchar(); //Enter elkapása getchar(); //Várakozás } ===== Három karakter bekérése ===== #include main() { char a, b, c; printf("Karakter: "); scanf("%d", &a); getchar(); printf("Karakter: "); scanf("%d", &b); getchar(); printf("Karakter: "); scanf("%d", &c); } ===== Függvény, amely visszaadja egy sztring hosszát ===== /* Írjon függvényt, amely megszámolja egy karaktersorozat karaktereit. A függvény adja vissza a karakterek számát. Mentés: hossz */ #include int sajat_strlen(char *str) { int szamlalo = 0; while(str[szamlalo] != '\0') szamlalo++; return szamlalo; } main() { int a = sajat_strlen("vmi"); printf("%d\n", a); getchar(); } ===== Jelszóbekérés ===== #include #include #include main() { char *jelszo; jelszo = crypt(getpass("Jelszó: ")); puts(jelszo); } Fordítás: gcc -l crypt -o main main.c A MinGW rendszerben alapértelmezetten nincs benne a getpass. A getpass viszont megtalálható a conio.sf.net conio2.h fejállományában. ===== Sztring darabolás ===== #include #include int main() { char *tomb[5]; char *sor; int i; printf("Darabolás\n"); sor = (char*) malloc(50*sizeof(char)); for(i=0; i<5; i++) tomb[i] = (char*) malloc(50*sizeof(char)); strcpy(sor,"alma a fa alatt"); tomb[0] = strtok(sor," "); i = 0; while(tomb[i]!= NULL) { i++; tomb[i] = strtok(NULL, " "); //darabolunk } printf("%s\n", tomb[1]); return 0; } ===== Bitek forgatása (rotálás) ===== Bitenkénti rotálás és bináris formában kiírás. #include #include unsigned int rotateLeft(unsigned int num, int shift) { return (num << shift) | (num >> (sizeof(num) * CHAR_BIT - shift)); } unsigned int rotateRight(unsigned int num, int shift) { return (num >> shift) | (num << (sizeof(num) * CHAR_BIT - shift)); } void printBin(unsigned n) { unsigned i; for (i = 1 << 31; i > 0; i = i / 2) { (n & i) ? printf("1") : printf("0"); } printf("\n"); } int main() { int num = 32; printBin(num); num = rotateRight(num, 6); printBin(num); return 0; } ===== Olvasás állományból while fejrészében ===== while(fscanf(f, "%lf", &a)>0) { }