Tartalomjegyzék

< C nyelv

C példaprogram

Összeadás mutatókkal

#include <stdio.h>
#include <stdlib.h>
 
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 <stdio.h>
#include <stdlib.h>
#include <math.h>
 
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 <stdio.h>
#include <stdlib.h>
#include <math.h>
 
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 <stdio.h>
#include <stdlib.h>
#include <math.h>
 
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 <stdio.h>
#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 <stdio.h>
 
#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 <stdio.h>
 
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 <stdio.h>
#include <math.h>
#include <string.h>
 
 
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 <stdio.h>
 
main()
{
    char a;
 
    printf("Karakter: ");
    scanf("%d", &a);
 
    getchar(); //Enter elkapása
    getchar(); //Várakozás
 
}

Három karakter bekérése

#include <stdio.h>
 
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 <stdio.h>
 
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 <stdio.h>
#include <unistd.h>
#include <crypt.h>
 
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 <stdlib.h>
#include <string.h>
 
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.

Program01.c
#include <stdio.h>
#include <limits.h>
 
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) {
 
}