[[: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) {
}