Fizikus C labor

1. óra: ismerkedés a fejlesztőkörnyezettel2. óra: ciklusok3. óra: számelméleti feladatok
4. óra: számítás valós számokkal5. óra: sok adat beolvasása, tömbök6. óra: iteráció, könyvtári sztringkezelő függvények
7. óra: függvények és sztringek8. óra: cím szerinti és tömb paraméterek, struktúrák, dinamikus tömbök9. óra: rendezés, fájlkezelés, parancssori paraméterek
10. óra: állapotgép, szabványos I/O átirányítása11. óra: rekurzió, gyakorlás12. óra: láncolt listák, fák
13. óra: NHF beadás

Rajzoljunk a konzol ablakba Windowson

2. alkalom: ciklusok

1. feladat:

Mi a legnagyobb szám, amivel még helyesen működik a múlt órán látott faktoriálisszámító program? Hogy lehet ezen változtatni?

2. feladat

Készíts szorzótáblát kiíró programot! A program kérje be a felhasználótól a szorzótábla méretét, majd írja ki a megadott méretű szorzótáblát! A kiírás táblázatos formában történjen, azaz így:

 1  2  3  4
 2  4  6  8
 3  6  9 12
 4  8 12 16

Tipp: Ha a számokat %d helyett pl. %3d-vel írjuk ki, akkor (legalább) 3 karakternyi helyre írja ki a program a számot. Ha pl. egyjegyű a szám, akkor elé két szóközt tesz.

3. feladat

Írj C programot, amely bekér a felhasználótól egy egész számot! Ha a szám 2 és 1000 között van (beleértve a határokat), írja ki az összes osztóját! Ha nincs benne, írjon ki hibaüzenetet!

4. feladat

Írj C programot, amely bekér két pozitív egész számot és kiírja a legnagyobb közös osztójukat!

5. feladat

Számítsd ki az 1/0!+1/1!+1/2!+1/3!+...+1/n! sor összegét a felhasználó által megadott n értékre! Mit kaptál?

6. feladat

Számítsd ki az 1/1+1/2+1/4+1/8+1/16+...+1/(2 az n-ediken) sor összegét a felhasználó által megadott n értékre! Mit kaptál?

További feladatok

Aki végzett, a https://infoc.eet.bme.hu/f02/#5 oldal feladatait oldogathatja.

Az órai feladatok mintamegoldása

1. feladat
#include <stdio.h>

int main(){
	double szam, i, fakt, max = 30;

	szam = 6;
	while(szam < max){
		i = 1;
		fakt = 1;
		while( i <= szam ){
			fakt = fakt * i;
			i = i + 1;
		}

		printf("%g! = %e\n",szam,fakt);
		szam = szam + 1;
	}

	return 0;
}

 

2. feladat
#include <stdio.h>

int main(){
	int sor = 1, oszlop = 1, mekkora;
	printf("Mekkora? ");
	scanf("%d", &mekkora);
	while( sor <= mekkora ){
		oszlop = 1;
		while ( oszlop <= mekkora ){
			printf("%10d ", sor*oszlop );
			oszlop = oszlop + 1;
		}
		sor = sor + 1;
		printf("\n");
	}
	return 0;
}

 

3. feladat
#include <stdio.h>

int main(){
  int szam,i;

  printf("Egy szamot 2 es 1000 kozott: ");
  scanf("%d",&szam);
	
  if( szam >= 2 && szam <= 1000 ){
    i = 1;
    while( i <= szam ){
      if( szam % i == 0 )
        printf("%d, ", i);
      i = i + 1;
    }
  }
  else
    printf("Nincs a megadott intervallumban.\n");

  return 0;
}

 

4. feladat
#include <stdio.h>

int main(){
	int a,b,i;

	printf("Ket poz egesz szamot: ");
	scanf("%d%d",&a,&b);
	
	if( a > b ) i = b;
	else i = a;

/*	while( !( a%i==0 && b%i==0 ) ){
		i = i - 1;
	}
*/
	while( a%i!=0 || b%i!=0 ){
		i = i - 1;
	}

	printf("LNKO = %d\n",i);

	return 0;
}

 

5. feladat (két lehetséges megoldás)
#include <stdio.h>

int main(){
	int n,i;
	double osszeg = 1.0;

	printf("Add meg n-et: ");
	scanf("%d",&n);

	i = 1;
	while(i<=n){
		// i! kiszámítámítása

		double fakt = 1.0,j=1.0;
		while(j<=i){
			fakt = fakt * j;
			j = j + 1.0;
		}

		// 1/i! hozzáadása az összeghez

		osszeg = osszeg + 1.0 / fakt;
		i = i + 1;
	}

	printf("%.15g\n",osszeg);

	return 0;
}
#include <stdio.h>

int main(){
	int n,i;
	double osszeg = 1.0, fakt = 1.0;

	printf("Add meg n-et: ");
	scanf("%d",&n);

	i = 1;
	while(i<=n){
		// i! kiszámítámítása

		fakt = fakt * i;

		// 1/i! hozzáadása az összeghez

		osszeg = osszeg + 1.0 / fakt;
		i = i + 1;
	}

	printf("%.15g\n",osszeg);

	return 0;
}

 

6. feladat
#include <stdio.h>

int main(){
    int n, i;
    double osszeg = 0.0, szorzo = 1.0;

    printf("Add meg n-et: ");
    scanf("%d", &n);

    i = 1;
    while (i <= n){
        osszeg = osszeg + 1.0 / szorzo;
        szorzo = szorzo * 2;
        i = i + 1;
    }

    printf("%.15g\n", osszeg);

    return 0;
}