Instrukcje sterujące - warunki i pętle

Przykład

#include <stdio.h>
/* program sprawdza czy podana liczba jest parzysta */
 
int main()
{
   int x;
 
   printf("Podaj liczbe calkowita: ");
   scanf("%d", &x);
 
   if( x % 2 == 0 )
   {
      printf("Liczba %d jest parzysta\n", x);
   }
 
   return 0;
}

Operator = to operator przypisania wartości do zmiennej a operator == to operator sprawdzający, czy wartości są równe.

int x = 0;
if ( x = 1 ) printf("Czy to jest błąd?")

#include <stdio.h>
/* program sprawdza czy podana liczba jest dodatnia czy ujemna */
 
int main()
{
   int liczba;
 
   printf("Podaj liczbe: ");
   scanf("%d",&liczba);
 
   if( liczba > 0 )
      printf("Liczba %d jest wieksza od zera\n",liczba);
   else
      printf("Liczba %d jest mniejsza od zera\n",liczba);
 
   return 0;
}

Napisz program do wyznaczania miejsc zerowych równania kwadratowego y = ax2 + bx +c.

Dane: trzy liczby rzeczywiste określające parabolę: a, b, c
Wynik: informacja o ilości miejsc zerowych (lub ich braku) oraz wartości miejsc zerowych x1, x2

Uwaga Do obliczania pierwiastka kwadratowego wykorzystaj funkcję sqrt() z biblioteki math.h.
Kompilując program korzystający z funkcji matematycznych dla kompilatora GCC należy dodać opcję -lm, np.:

cc pierwiastek.c -lm -o pierwiastek

Przykład:

 1
 2
 3
 Brak miejsc zerowych
1
-4
-4
Jedno miejsce zerowe 2.000000
1
0
-4
Dwa miejsca zerowe -2.000000 i 2.000000

Dodatkowe ćwiczenia

  • Dodaj do programu z poprzednich zajęć zabezpieczenie przed wykonaniem operacji dzielenia przez zero.
  • Dopisz do przedstawionego powyżej przykładu warunek sprawdzający czy:
    • dana liczba jest liczbą parzystą,
    • jest liczbą podzielną przez 3,
    • ostatnią cyfrą podanej liczby jest 1.
  • Do programu obliczającego pierwiastki równania kwadratowego dodaj instrukcje weryfikujące, czy rzeczywiście f(x1)=0 oraz f(x2)=0. Sprawdź czy program poprawnie wyznacza miejsca zerowe poniższych równań i jeśli występują niedokładności to popraw program tak aby je zniwelować:
    y = x2 - 6.433 x + 0.009474
    y = 0.2 x2 - 56 x + 1.

#include <stdio.h>
/* program wyswietla sekwencje liczb calkowitych od 1 do podanej przez uzytkownika wartosci */
 
int main()
{
   int liczba;
   int i = 0; 
 
   printf("Podaj liczbe: ");
   scanf("%d",&liczba);
 
   while(i <= liczba) 
   {
      printf("%d\n",i);
      i = i + 1;
   }
 
   return 0;
}

Napisz program, który wczytuje kolejno liczby rzeczywiste aż do momentu gdy użytkownik poda wartość 0, po czym wyświetla sumę wczytanych liczb.

Dane: ciąg liczb rzeczywistych zakończonych wartością 0
Wynik: suma podanych liczb

Przykład:

 1
 2
 3
 0
 suma 6.000000
 5
 3.1
 -2.5
 0
 suma 5.600000

Rozbuduj program z poprzedniego zadania tak aby dla podanego ciągu liczb obok sumy wyświetlał także wartości:

  • ilość liczb
  • ilość liczb większych od 0
  • wartość średnia
  • wartość minimalna
  • wartość maksymalna

Końcowa wartość 0 nie jest brana do obliczeń.

Dane: ciąg liczb rzeczywistych zakończonych wartością 0
Wynik: ilość podanych liczb, ilość liczb większych od 0, suma, średnia, wartość minimalna i maksymalna z podanych liczb

Przykład:

1
2
3
0
ilosc 3
dodatnie 3
suma 6.000000
srednia 2
min 1
max 3
5
3.1
-2.5
0
ilosc 3
dodatnie 2
suma 5.600000
srednia 1.866
min -2.500000
max 5.000000

Problem: rozkład liczby całkowitej na czynniki pierwsze
Dane: liczba całkowita n
Wynik: ciąg liczb pierwszych większych od 1, których iloczyn wynosi n

Przykładowe wyniki

n=10
2
5
n=12
2
2
3
n=149
149

Napisz grę w której użytkownik próbuje odgadnąć pewną wylosowaną wartość całkowitą z zakresu od 1 do 100. W zależności o podanej przez użytkownika liczby całkowitej program:

  • wyświetla komunikat „za duzo”, gdy podana wartość jest większa od szukanej
  • wyświetla kominukat „za malo”, gry podana wartość jest za mała
  • wyświetla komunkat „Brawo !” i kończy działanie gdy użytkownik odgadnie szukaną wartość
  • wyświetla szukaną wartość i kończy działanie gdy użytkownik poda liczbę 0

Na koniec program wyświetla także komunikat o liczbie podjętych przez użytkownika prób.

Do losowania liczb całkowitych wykorzystaj funkcję rand() z biblioteki stdlib.h.

int rand(void);

Funkcja ta przy każdym uruchomieniu zwraca liczbę całkowitą pseudolosową z zakresu od 0 do wartości określonej przez RAND_MAX. Generator liczb losowych można zainicjować za pomocą funkcji srand()

void srand(int seed);

Chcąc uzyskać za każdym razem inny ciąg liczb najwygodniej jest zainicjować generator wartością związaną z aktualnym czasem: funkcja time() z biblioteki time.h zwraca liczbę sekund, które upłynęły od dnia 1 stycznia 1970 roku godziny 0:00:00 czasu uniwersalnego.

Przykład użycia funkcji rand()

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
int main()
{
   int i=0;
   srand(time(0));
   while(i<10) 
   {
      printf("%d\n",rand());
      i = i +1;
   }
}

Przykładowe wyniki zadania

2
za malo
50
za duzo
42
Brawo! 
Liczba podejsc 3 
2
za malo
50 
za duzo
0
Szukana liczba to 3
Liczba podejsc 2
  1. napisz program, który dla podanych 3 liczb rzeczywistych a, b, i c wypisze sekwencję liczb od a do b z krokiem c. Zabezpiecz program przed możliwością wprowadzenia takich danych wejściowych, które mogłyby spowodować nieskończone wykonywanie się programu (np. krok c=0).
  2. wyświetl tablicę znaków ASCII poczynając od znaku SPACE (32) do znaku DEL (127) wraz z odpowiednimi wartościami liczbowymi w systemie dziesiętnym, szesnastkowym i ósemkowym.
  3. Napisz program wyświetlający figury geometryczne w trybie tekstowym, wypełnione lub puste. Dla podanej wartości całkowitej program wysiwietla:
    • kwadrat o zadanej długości boku
    • trójkąt prostokątny równoramienny o zadanej długości przyprostokątnych
    • okrąg o zadanym promieniu
  4. Napisz program, który dla podanej podstawy i wykładnika oblicza potęgę. Dla uproszczenia przyjmujemy, że wykładnik jest liczbą całkowitą.
  5. Napisz program wyświetlający wartość silni z podanej przez użytkownika liczby całkowitej.
  6. Napisz program wyświetlający tabliczkę mnożenia, której rozmiar ustalany jest przez użytkownika.