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"); }