void main()

Transkrypt

void main()
Wstęp do Programowania, laboratorium 02, niestacjonarne
Zagadka 1.
int c=6;
void main()
{
int a, b, c;
a=1;
b=4;
c=7;
{
int a;
{
a=2;
}
a=3;
b=5;
c=8;
}
printf("%d %d %d\n", a, b, c);
}
Co i dlaczego zostanie wypisane na ekran?
Zadanie 1. Napisać program liczący iloczyn dwóch dowolnych liczb całkowitych podanych przez
użytkownika. Mnożenie powinno odbywać się przy użyciu operacji dodawania i pętli.
Zadanie 2. Napisać program liczący potęgę dowolnej liczby. Do potęgowania należy użyć mnożenia
z poprzedniego zadania.
Zadanie 3. Napisać program rysujący szachownicę o podanej przez użytkownika wielkości, np.:
5 4
#
#
#
#
#
#
#
#
###################
#
#
#
#
#
#
#
#
###################
#
#
#
#
#
#
#
#
###################
#
#
#
#
#
#
#
#
Jeśli użytkownik wpisze wielkość mniejszą niż 1, rysowana jest szachownica o losowej wielkości.
Zadanie 4. Napisać program, który prosi o wpisanie hasła. Po każdych 3 nieudanych próbach
(użytkownik wpisał nieprawidłowe hasło), program czeka kilka sekund przed wyświetleniem
kolejnej prośby o wpisanie hasła. Po wpisaniu poprawnego hasła, program pozdrawia użytkownika
i kończy działanie.
Instrukcja
Zasięg zmiennej:
http://pl.wikibooks.org/wiki/C/Zmienne#Zasi.C4.99g_zmiennej
Zmienna istnieje w bloku w którym została zadeklarowana, oraz blokach wewnątrz niego.
Wewnątrz bloku można zadeklarować zmienną o nazwie istniejącej zmiennej – od tego momentu
wszystkie odwołania do zmiennej o tej nazwie będą dotyczyły nowej zmiennej, stara została
przesłonięta. Po wyjściu z bloku w którym druga zmienna została zadeklarowana, pierwsza
zmienna znowu będzie dostępna.
Mimo to, używanie zmiennych o tych samych nazwach nie jest zalecane, ponieważ sieje zamęt i
chaos w kodzie (np. int tmp i podobne). Zmienne powinny mieć nazwy sugerujące co opisują.
Kolejność operatorów
http://pl.wikibooks.org/wiki/C/Operatory#Priorytety_i_kolejno.C5.9B.C4.87_oblicze.C5.84
Pętle
Chcąc wykonać pewien fragment kodu kilka razy, można użyć pętli:
while([warunek]) {}
zawartość bloku za while wykonuje się dopóki
warunek jest spełniony
do {} while([warunek]);
zawartość bloku za do wykonuje się
przynajmniej raz, dopóki warunek jest spełniony
for([operacja 1]; [warunek]; [operacja 2]) {}
operacja 1 wykonywana jest jednorazowo przed
rozpoczęciem pętli, zawartość bloku
wykonywana jest dopóki warunek jest
spełniony, a po każdej iteracji wykonywana jest
operacja 2
for(i=0; i<10; ++i)
Zeruje zmienną i, wykonuje się dopóki i jest
mniejsze od 10 i po każdej iteracji zwiększa
wartość i o jeden.
Wykonywanie pętli można przerwać w dowolnym momencie przy pomocy instrukcji break.
Napotkanie jej powoduje natychmiastowe wyjście z aktualnie wykonywanej pętli.
Można też użyć instrukcji return, ale ona spowoduje opuszczenie całej funkcji.
Podpowiedzi
Ad. 3. Generowanie losowej liczby:
#include <stdio.h>
#include <stdlib.h>
void main()
{
printf("losowa liczba: %d\n", rand());
}
Przy każdym uruchomieniu programu generowana jest ta sama liczba. Konieczna jest więc
modyfikacja:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
srand(time(NULL));
printf("lepsza losowa liczba: %d\n", rand());
}
time(NULL) - pobranie aktualnego czasu w sekundach.
srand - ustawienie wartości początkowej generatora liczb losowych. Czas przy każdym
uruchomieniu (przeważnie) jest inny, więc jest często używany do inicjalizacji generatorów liczb
losowych.
Ad. 4. Pobranie tekstu:
#include <stdio.h>
#include <string.h> // Do porównywania tekstów
void main()
{
// Dopuszczamy hasło mające maksymalnie 10 znaków
char haslo[10];
printf("Haslo: ");
// Wczytujemy tekst - %s
// W tym przypadku nie piszemy &haslo, tylko samo haslo
scanf("%s", haslo);
printf("Wpisane haslo: %s\n", haslo);
// Porównanie tekstu – funkcja strcmp
// ==0 -> nie ma żadnej różnicy między podesłanymi tekstami
if(strcmp(haslo, "ziemniak")==0)
printf("Haslo poprawne\n");
}

Podobne dokumenty