Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 2014/2015 Pracownia nr 7 (10/20.04.2015) dr inż. Jarosław Forenc
Rok akademicki 2014/2015, Pracownia nr 7 2/22 Pętla for for (inicjalizacja; test; aktualizacja) instrukcja; inicjalizacja test fałsz for (i=0; i<10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy prawda instrukcja aktualizacja
Rok akademicki 2014/2015, Pracownia nr 7 3/22 Przykład - wyświetlenie tekstu #include <stdio.h> int main() int i; for (i=0; i<5; i=i+1) printf("programowanie nie jest trudne\n"); return 0;
Rok akademicki 2014/2015, Pracownia nr 7 4/22 Przykład - wyświetlenie tekstu #include <stdio.h> int main() int i; Programowanie nie jest trudne Programowanie nie jest trudne Programowanie nie jest trudne Programowanie nie jest trudne Programowanie nie jest trudne for (i=0; i<5; i=i+1) printf("programowanie nie jest trudne\n"); return 0;
Rok akademicki 2014/2015, Pracownia nr 7 5/22 Pętla for for (i=0; i<10; i=i+1) printf("%d ",i); 0 1 2 3 4 5 6 7 8 9 for (i=0; i<10; i=i+1) printf("%d ",i+1); 1 2 3 4 5 6 7 8 9 10 for (i=1; i<=10; i=i+1) printf("%d ",i); 1 2 3 4 5 6 7 8 9 10
Rok akademicki 2014/2015, Pracownia nr 7 6/22 Pętla for for (i=1; i<=10; i=i+2) printf("%d ",i); 1 3 5 7 9 for (i=10; i>0; i=i-1) printf("%d ",i); 10 9 8 7 6 5 4 3 2 1 for (i=-9; i<=9; i=i+3) printf("%d ",i); -9-6 -3 0 3 6 9
Rok akademicki 2014/2015, Pracownia nr 7 7/22 Przykład - suma liczb 1+2+ +10 #include <stdio.h> #define N 10 Suma 10 liczb to 55 int main() int i, suma=0; for (i=1; i<=n; i=i+1) suma = suma + i; printf("suma %d liczb to %d\n", N, suma); return 0;
Rok akademicki 2014/2015, Pracownia nr 7 8/22 Przykład - suma liczb 1+2+ +1000 #include <stdio.h> #define N 1000 Suma 1000 liczb to 500500 int main() int i, suma=0; for (i=1; i<=n; i++) suma += i; printf("suma %d liczb to %d\n", N, suma); return 0;
Rok akademicki 2014/2015, Pracownia nr 7 9/22 Operator inkrementacji (++) ++x lub x++ zwiększa wartość zmiennej o 1 ++x; x++; x = x + 1; operator jednoargumentowy może być stosowany tylko do zmiennych (nie wolno stosować do wyrażeń)
Rok akademicki 2014/2015, Pracownia nr 7 10/22 Operator inkrementacji (++) ++x x++ - operator preinkrementacji - operator postinkrementacji int x = 1, y; y = 2 * ++x; int x = 1, y; y = 2 * x++; ++x x = 2 2 * ++x 2 * 2 y = 2 * ++x y = 4 2 * x 2 * 1 y = 2 * x y = 2 x++ x = 2 x = 2, y = 4 x = 2, y = 2
Rok akademicki 2014/2015, Pracownia nr 7 11/22 Operator dekrementacji (--) --x x-- - operator predekrementacji - operator postdekrementacji zmniejsza wartość zmiennej o 1 --x; x--; x = x - 1;
Rok akademicki 2014/2015, Pracownia nr 7 12/22 Operatory ++ i -- x = x++; x = ++x; x = x--; x = --x; wartość powyższych instrukcji jest nieokreślona nie należy stosować operatorów ++, -- do zmiennych pojawiających się w wyrażeniu więcej niż jeden raz
Rok akademicki 2014/2015, Pracownia nr 7 13/22 Pętla for - instrukcja złożona wykonanie w pętli for więcej niż jednej instrukcji wymaga umieszczenia ich w dodatkowych nawiasach klamrowych for (wyr1; wyr2; wyr3) instrukcja1; instrukcja2;...
Rok akademicki 2014/2015, Pracownia nr 7 14/22 Pętla for - błędy średnik na końcu pętli for: for (i=0; i<10; i++) ; 10 printf("%d ",i); przecinki zamiast średników w pętli for: for (i=0, i<10, i++) printf("%d ",i); błąd kompilacji
Rok akademicki 2014/2015, Pracownia nr 7 15/22 Pętla for - błędy błędny warunek - brak wykonania instrukcji: for (i=0; i>10; i++) printf("%d ",i); błędny warunek - pętla nieskończona: for (i=1; i>0; i++) printf("%d ",i); 1 2 3 4 5 6 7 8 9
Rok akademicki 2014/2015, Pracownia nr 7 16/22 Pętla for - pętla niekończona for (wyr1; wyr2; wyr3) instrukcja; wszystkie wyrażenia w pętli for są opcjonalne for ( ; ; ) instrukcja; - pętla nieskończona w przypadku braku wyr2 przyjmuje się, że jest ono prawdziwe
Rok akademicki 2014/2015, Pracownia nr 7 17/22 Instrukcja break break - przerywa wykonywanie pętli for for (i=1; i<10; i++) if (i%5==0) break; printf( %d\n,i);
Rok akademicki 2014/2015, Pracownia nr 7 18/22 Instrukcja continue continue - przerywa bieżącą iterację i przechodzi do kolejnej for (i=1; i<10; i++) if (i%5==0) continue; printf( %d\n,i);
Rok akademicki 2014/2015, Pracownia nr 7 19/22 Instrukcja goto goto - bezwarunkowy skok do etykiety stosowanie tej instrukcji nie jest zalecane for (i=1; i<10; i++) if (i%5==0) goto dalej; printf( %d\n,i); dalej: printf( koniec\n ); - można skoczyć do dowolnego miejsca w programie - etykieta musi poprzedzać instrukcję
Rok akademicki 2014/2015, Pracownia nr 7 20/22 Zagnieżdżanie pętli for jako instrukcja występuje kolejna pętla for for (i=1; i<=3; i++) for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); dla i = 1 for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); dla i = 2 for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); dla i = 3 for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); - pętla zewnętrzna - pętla wewnętrzna i=1, j=1 i=1, j=2 i=2, j=1 i=2, j=2 i=3, j=1 i=3, j=2
Rok akademicki 2014/2015, Pracownia nr 7 21/22 Przykład - tabliczka mnożenia #include <stdio.h> int main() int i, j; for (i=1; i<11; i++) for (j=1; j<11; j++) printf("%2d ", i*j); printf("\n"); return 0;
Rok akademicki 2014/2015, Pracownia nr 7 22/22 Przykład - tabliczka mnożenia #include <stdio.h> 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 int main() 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 int i, j; 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 for (i=1; i<11; 7 i++) 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 for (j=1;j<11;j++) 9 18 27 36 45 54 63 72 81 90 printf("%2d 10 20 ",i*j); 30 40 50 60 70 80 90 100 printf("\n"); return 0;