Professional Documents
Culture Documents
Zadanie 2/L1 PĘTLA FOR - Napisz program, który Zadanie 2/L1 PĘTLA DO-WHILE - Napisz program,
pobiera od użytkownika liczbę całkowitą n i wyświetla który pobiera od użytkownika liczbę całkowitą n i
na ekranie tekst piosenki zgodny z podanym wzorcem. wyświetla na ekranie tekst piosenki zgodny z
Przykład użycia:
podanym wzorcem.
./a.out
Przykład użycia:
Podaj n: 3
3 butelki oranzady staly na plocie, o 3 butelki! Jesli ./a.out
jedna zrzucimy zostanie 2! Podaj n: 2
2 butelki oranzady staly na plocie, o 2 2 butelki oranzady staly na plocie, o
butelki! Jesli jedna zrzucimy zostanie 2 butelki! Jesli jedna zrzucimy
1! zostanie 1!
1 butelka oranzady stala na plocie, o 1
1 butelka oranzady stala na plocie, o
butelka! Jesli jedna zrzucimy nie
zostanie zadna! 1 butelka! Jesli jedna zrzucimy nie
======================================== zostanie zadna!
#include <stdio.h> =====================================
#include <stdio.h>
int main() {
int main() {
int n;
int n, i = 0;
printf("Podaj n: "); printf("Podaj n: ");
scanf("%d", &n); scanf("%d", &n);
for (int i = n; i > 1; i--) { n--;
printf("%d butelki oranzady staly na plocie, o %d do {
butelki! Jesli jedna zrzucimy zostanie %d!\n", i, i, i-1); printf("%d butelki oranzady staly na plocie, o
} %d butelki! Jesli jedna zrzucimy zostanie %d!\n",
n-i+1, n-i+1, n-i);
i++;
printf("1 butelka oranzady stala na plocie, o 1 butelka! } while (i < n);
Jesli jedna zrzucimy nie zostanie zadna!"); printf("1 butelka oranzady stala na plocie, o
return 0; 1 butelka! Jesli jedna zrzucimy nie zostanie
} zadna!\n");
return 0;
}
Zadanie 2/L1 PĘTLA WHILE - Napisz program, który Zadanie 3/L1 - Napisz program, który pobiera od
pobiera od użytkownika liczbę całkowitą n i wyświetla użytkownika liczbę sekund i wypisuje na ekran
na ekranie tekst piosenki zgodny z podanym przeliczenie: ile to lat, miesięcy,
wzorcem. tygodni, dni, godzin, minut i sekund. Czy milion sekund
Przykład użycia: to dużo?
./a.out =======================================
Podaj n: 2 #include <stdio.h>
2 butelki oranzady staly na plocie, o
2 butelki! Jesli jedna zrzucimy int main() {
zostanie 1!
1 butelka oranzady stala na plocie, o int lata, miesiace, tygodnie, dni, godziny,
1 butelka! Jesli jedna zrzucimy nie minuty, sekundy, wejscie;
zostanie zadna! printf("Podaj liczbe sekund: ");
====================================== scanf("%d", &sekundy);
#include <stdio.h> wejscie = sekundy;
lata = sekundy / (60 * 60 * 24 * 365);
int main() { sekundy = sekundy % (60 * 60 * 24 * 365);
int n;
miesiace = sekundy / (60 * 60 * 24 * 30);
printf("Podaj n: ");
scanf("%d", &n); sekundy = sekundy % (60 * 60 * 24 * 30);
while (n > 1) { tygodnie = sekundy / (60 * 60 * 24 * 7);
printf("%d butelki oranzady staly na plocie, o sekundy = sekundy % (60 * 60 * 24 * 7);
%d butelki! Jesli jedna zrzucimy zostanie %d!\n", n, n, dni = sekundy / (60 * 60 * 24);
n-1); sekundy = sekundy % (60 * 60 * 24);
n--; godziny = sekundy / (60 * 60);
}
sekundy = sekundy % (60 * 60);
printf("1 butelka oranzady stala na plocie, o 1
butelka! Jesli jedna zrzucimy nie zostanie zadna!\n"); minuty = sekundy / 60;
return 0; sekundy = sekundy % 60;
}
====================================== printf("%d sekund to:\n", wejscie);
printf("%d lat, %d miesiecy, %d tygodni, %d
Zadanie 4/L1 - Napisz program pobierający od
dni, %d godzin, %d minut, %d sekund\n",
użytkownika napis i wyświetlający informację o ilości
liter w napisie (podpowiedz: strlen() ). Czy lata, miesiace, tygodnie, dni, godziny, minuty,
program poprawnie obsługuje polskie znaki sekundy);
diakrytyczne? (NIE)
====================================== return 0;
#include <stdio.h> }
#include <string.h> =======================================
Podaj liczbe sekund: 1000000
int main() { 1000000 sekund to:
char napis[100];
0 lat, 0 miesiecy, 1 tygodni, 4 dni, 13 godzin, 46 minut,
int dlugosc, ilosc_liter = 0;
printf("Podaj napis: "); 40 sekund
fgets(napis, 100, stdin);
dlugosc = strlen(napis);
for(int i = 0; i < dlugosc; i++) {
if(napis[i] >= 'a' && napis[i] <= 'z' || napis[i] >=
'A' && napis[i] <= 'Z') {
ilosc_liter++;
}
}
printf("Ilosc liter w napisie: %d\n", ilosc_liter);
return 0;
}
Zadanie 5/L1 - Napisz program, który pobiera od Zadanie 6/L1 - Zaimplementuj funkcję reverse(),
użytkownika liczbę całkowitą (scanf(), typ danych: która odwraca kolejność znaków w pobranym od
%d) i wypisuje na ekran sumę cyfr tej liczby. użytkownika napisie (tablicy znaków).
Np. dla liczby 2091 wynik to: 2 + 0 + 9 + 1 = 12. ======================================
#include <stdio.h>
Podpowiedź: W rozwiązaniu potraktuj liczbę jako #include <string.h>
tablicę znaków (podpowiedź: użyj funkcji
sprintf() aby wpisać liczbę do tablicy znaków).
void reverse(char *str) {
======================================
int len = strlen(str);
#include <stdio.h>
for (int i = 0; i < len / 2; i++) {
char tmp = str[i];
int main() {
str[i] = str[len - i - 1];
int liczba, cyfra, suma = 0;
str[len - i - 1] = tmp;
printf("Podaj liczbe calkowita: ");
}
scanf("%d", &liczba);
}
return 0;
}
#include <stdio.h>
Zadanie 3/L2
void liczby_parzyste(int a, int b) {
Zaimplementuj funkcję, która jako parametr wywołania int i;
przyjmuje dwie liczby (a oraz b) i wyświetla wszystkie
liczby parzyste znajdujące się w przedziale [a...b]. for (i = a; i <= b; i++) {
if (i % 2 == 0) {
Napisz program przyjmujący dwa argumenty z linii printf("%d ", i);
komend - a oraz b, aby przetestować napisaną }
funkcję. }
printf("\n");
Podpowiedź: Użyj funkcji sscanf() do zamiany }
argumentu wywołania programu (który jest tablicą
znaków) na typ int. int main(int argc, char *argv[]) {
int a, b;
if (sscanf(argv[1], "%d", &a) != 1 ||
sscanf(argv[2], "%d", &b) != 1) {
printf("Niepoprawne argumenty\n");
return 1;
}
liczby_parzyste(a, b);
return 0;
}
Zadanie 4/L2 Zadanie 6/L2
Napisz i przetestuj funkcję, która jako parametr
przyjmuje liczbę całkowitą, oblicza i zwraca silnię. Napisz program, który przyjmuje dowolną liczbę
Przetestuj implementację iteracyjną oraz rekurencyjną. argumentów (liczby całkowite) i wyświetla
======================================= największą oraz najmniejszą z nich.
#include <stdio.h>
Podpowiedź: Użyj funkcji sscanf() do zamiany
// Implementacja iteracyjna argumentu wywołania programu (który jest tablicą
int silnia_iteracyjnie(int n) { znaków) na typ int.
int i, wynik = 1;
for (i = 1; i <= n; i++) { ======================================
wynik *= i;
} #include <stdio.h>
return wynik;
} int main(int argc, char *argv[]) {
return 0;
}
unsigned long factorial_ulong(unsigned long n) {
Zadanie 5/L2 unsigned long result = 1;
for (unsigned long i = 2; i <= n; i++) {
Jaka jest największa liczba, dla której silnia liczona if (ULONG_MAX / i < result) {
jest poprawnie, tj. do momentu przekroczenia zakresu return i - 1;
liczb przechowywanych prze typ danych: }
result *= i;
● dla typu int, }
● dla typu unsigned int, return n;
● dla typów long oraz unsigned long, }
● dla typów float oraz double. float factorial_float(float n) {
float result = 1.0;
Napisz program znajdujący taką liczbę. for (float i = 2.0; i <= n; i++) {
if (isinf(result * i)) {
====================================== return i - 1;
#include <stdio.h> }
#include <limits.h> result *= i;
#include <float.h> }
#include <math.h> return n;
}
int factorial_int(int n) { double factorial_double(double n) {
int result = 1; double result = 1.0;
for (int i = 2; i <= n; i++) { for (double i = 2.0; i <= n; i++) {
if (INT_MAX / i < result) { if (isinf(result * i)) {
return i - 1; return i - 1;
} }
result *= i; result *= i;
} }
return n; return n;
} }
int main() {
unsigned int factorial_uint(unsigned int n) { int max_int = factorial_int(INT_MAX);
unsigned int result = 1; printf("Maksymalna liczba dla typu int: %d\n",
for (unsigned int i = 2; i <= n; i++) { max_int);
if (UINT_MAX / i < result) { unsigned int max_uint =
return i - 1; factorial_uint(UINT_MAX);
} printf("Maksymalna liczba dla typu unsigned
result *= i; int: %u\n", max_uint);
} long max_long = factorial_long(LONG_MAX);
return n; printf("Maksymalna liczba dla typu long:
} %ld\n", max_long);
unsigned long max_ulong =
long factorial_long(long n) { factorial_ulong(ULONG_MAX);
long result = 1; printf("Maksymalna liczba dla typu unsigned
for (long i = 2; i <= n; i++) { long: %lu\n", max_ulong);
if (LONG_MAX / i < result) { float max_float = factorial_float(FLT_MAX);
return i - 1; printf("Maksymalna liczba dla typu float:
} %.0f\n", max_float);
result *= i; double max_double =
} factorial_double(DBL_MAX);
return n; printf("Maksymalna liczba dla typu double:
} %.0f\n", max_double);
return 0;
}
#include <stdio.h>
Zadanie 7/L2
void printBinary(int x) {
Napisz program, który pobiera od użytkownika liczbę int i;
całkowitą i wyświetla tę liczbę w zapisie ósemkowym, for (i = sizeof(x) * 8 - 1; i >= 0; i--) {
szesnastkowym i binarnym. if (x & (1 << i))
printf("1");
Podpowiedź: aby wyświetlić zapis ósemkowy i else
szesnastkowy użyj odpowiednich parametrów funkcji printf("0");
printf(). }
Napisz własną funkcję do wyświetlania zapisu printf("\n");
binarnego. Możesz użyć następujących obserwacji: }
● sizeof() zwraca wielkość zmiennej w int main() {
bajtach, stąd wiemy, że zmienna x zapisana int x;
jest w pamięci przy pomocy sizeof(x) * 8 printf("Podaj liczbe calkowita: ");
bitów, scanf("%d", &x);
● bit o numerze i ma wartość 1 wtedy i tylko
wtedy, gdy wyrażenie ( x & (1 << i)) printf("Zapis osemkowy: %o\n", x);
jest prawdziwe (dlaczego?). printf("Zapis szesnastkowy: %X\n", x);
printf("Zapis binarny: ");
Który bit powinien być wypisywany na ekran jako printBinary(x);
pierwszy?
return 0;
}
#include <stdio.h>
Zadanie 8/L2 #include <stdlib.h>
#include <time.h>
Napisz program, który losuje liczbę z
przedziału 1...15 i prosi użytkownika o jej int main() {
odgadnięcie. Jeśli użytkownik się pomyli, to srand(time(NULL));
program powinien podpowiedzieć czy int liczba = rand() % 15 + 1;
użytkownik podał za małą czy za dużą liczbę. int zgadniete = 0;
Program kończy się gdy użytkownik zgadnie
wylosowaną liczbę. while (!zgadniete) {
int strzal;
printf("Podaj liczbe z przedzialu 1...15: ");
Podpowiedź: aby wylosować liczbę całkowitą scanf("%d", &strzal);
użyj funkcji rand() zdefiniowanej w pliku if (strzal < 1 || strzal > 15) {
nagłówkowym stdlib.h. Aby program przy printf("Podaj liczbe z przedzialu 1...15!\n");
każdym uruchomieniu losował inną liczbę, } else if (strzal < liczba) {
przed losowaniem ustaw wartość startową printf("Za malo!\n");
generatora liczb losowych na czas } else if (strzal > liczba) {
uruchomienia (przy pomocy wywołania: printf("Za duzo!\n");
srand(time(NULL))). } else {
printf("Brawo! Zgadles liczbe %d.\n", liczba);
zgadniete = 1;
}
}
return 0;
}
Zadanie 1/L2 - ZawodyWeb #include <stdio.h>
// wyświetlenie wyniku
printf("Srednia arytmetyczna wynosi: %.3f\n",
srednia);
// zwolnienie pamięci
free(tab);
return 0;
}
tab[2] = *(tab+2)
Zadanie 3/L3 W kolejnych wierszach pliku Przykładowo:
matury.txt umieszczono:
#include <stdio.h>
1. nazwę województwa,
2. liczbę osób, które przystąpiło do egzaminu int main(int argc, char **argv){
maturalnego, FILE *fp;
3. informację o tym ile procent osób zdało char nazwa[255];
egzamin. char bufor[1024];
int liczba_zdajacych;
Napisz program, który czyta dane z pliku int odsetek_osob_ktore_zdaly;
matury.txt oraz:
fp = fopen("matury.txt", "r");
● wyświetla informację o tym ile osób zdawało if (fp == NULL){
maturę i ile osób zdało maturę w kraju, perror("Nie moge otworzyc
● wyświetla informację o tym ile osób zdało pliku z danymi");
maturę w kolejnych województwach, return -1;
● wyświetla nazwy tych województw, w których }
zdawało ponad 15000 osób,
● wyświetla nazwy tych województw, w których /* petla jest tylko pozornie
zdało mniej niż 70% osób, "nieskoczona" */
● wyświetla nawę województwa, w którym zdało for(;;) {
najwięcej osób (wraz z tą liczbą). /* fgets zwraca NULL po
dotarciu do konca pliku */
Podpowiedź: czytaj plik linia po linii (funkcja if (fgets(bufor, 1024, fp) ==
fgets()). Następnie użyj funkcji sscanf() aby NULL){
uzyskać konkretne informacje z danej linii. break; /* i wtedy
przerywamy petle */
}
sscanf(bufor, "%s %d %d%%\n",
nazwa, &liczba_zdajacych,
&odsetek_osob_ktore_zdaly);
printf("Przeczytalem: %s; %d;
%d\n", nazwa, liczba_zdajacych,
odsetek_osob_ktore_zdaly);
}
return 0;
}
int main() {
======================================= struct ulamek suma = {0, 1}; // zaczynamy od zera,
#include <stdio.h> aby nie trzeba było inicjalizować wartości licznika i
mianownika w każdym ułamku
struct ulamek { struct ulamek u = {1, 2};
int licznik; suma = dodaj_ulamki(suma, u);
int mianownik; u = (struct ulamek) {2, 3}; // można też
}; inicjalizować struktury bezpośrednio w wywołaniu
funkcji
int nwd(int a, int b) { suma = dodaj_ulamki(suma, u);
int c; u.licznik = 3;
while (b != 0) { u.mianownik = 4;
c = a % b; suma = dodaj_ulamki(suma, u);
a = b; u = (struct ulamek) {4, 5};
b = c; suma = dodaj_ulamki(suma, u);
} u = (struct ulamek) {5, 6};
return a; suma = dodaj_ulamki(suma, u);
} u = (struct ulamek) {6, 7};
suma = dodaj_ulamki(suma, u);
u.licznik = 7;
u.mianownik = 8;
suma = dodaj_ulamki(suma, u);
u = (struct ulamek) {8, 9};
suma = dodaj_ulamki(suma, u);
u.licznik = 9;
u.mianownik = 10;
suma = dodaj_ulamki(suma, u);
return 0;
}
Zadanie 2 #include <stdio.h>
#include <stdlib.h>
Napisz program, który analogicznie jak w pierwszym
zadaniu pobiera od użytkownika tablicę liczb int main() {
całkowitych i następnie wyświetla (po spacji) int n, i;
najmniejszą i największą liczbę z tej tablicy int *tab;
int min, max;
Przykład użycia: printf("Podaj rozmiar tablicy: ");
scanf("%d", &n);
./a.out
4 tab = (int *)malloc(n * sizeof(int));
6
2 for (i = 0; i < n; i++) {
-7 printf("Podaj liczbe: ");
1 scanf("%d", &tab[i]);
-7 6 }
min = max = tab[0];
for (i = 1; i < n; i++) {
if (tab[i] < min) {
min = tab[i];
}
if (tab[i] > max) {
max = tab[i];
}
}
printf("Najmniejsza liczba: %d\n", min);
printf("Największa liczba: %d\n", max);
free(tab);
return 0;
}
#include <stdio.h>
Zadanie 1/L6 - ZawodyWeb
double f(int k) {
Zaimplementuj funkcję rekurencyjną zdefiniowaną if (k == 1) {
następująco: return 9.5;
} else if (k == 2) {
● f(1) = 9.5 return 4;
● f(2) = 4 } else {
● f(k) = 2*f(k-1)-f(k-2)/3, jeśli k>2 return 2*f(k-1) - f(k-2)/3;
}
i napisz program, który pobiera od użytkownika liczę }
zmiennoprzecinkową d i wyświetla f(d) (z
dokładnością do 3 miejsc po przecinku). int main() {
double d;
Przykład użycia:
printf("Podaj liczbę: ");
./a.out scanf("%lf", &d);
7
49.648 double result = f((int)d);
return 0;
}
Zadanie 1/L5 #include <stdio.h>
#include <stdlib.h>
Napisz program, który pobiera od użytkownika
macierz kwadratową złożoną liczb całkowitych int main() {
zgodnie z następującym schematem: int n, i, j;
int **matrix;
● pierwsza liczba podana przez użytkownika int trace = 0;
określa wymiar macierzy
● w kolejnych wierszach użytkownik (po spacji) printf("Podaj rozmiar macierzy: ");
podaje kolejne wiersze macierzy. scanf("%d", &n);
// wyświetlenie wyniku
printf("Ślad macierzy wynosi: %d\n", trace);
// zwolnienie pamięci
for (i = 0; i < n; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}