Programowanie strukturalne to paradygmat programowania, który skupia się na tworzeniu programów poprzez zastosowanie jedynie określonych struktur programistycznych, takich jak sekwencje, pętle i instrukcje warunkowe.
Celem programowania strukturalnego jest uproszczenie procesu tworzenia programów poprzez ograniczenie złożoności i zapewnienie łatwej zrozumiałości kodu. W tym paradygmacie programowania stosuje się także podejście top-down, które polega na dzieleniu programu na mniejsze, łatwiejsze do zrozumienia fragmenty, co ułatwia zarówno sam proces programowania, jak i późniejsze modyfikacje kodu.
Uznaje się, że program nie ma postaci strukturalnej, jeżeli występuje w nim:
instrukcja skoku (goto) na zewnątrz pętli
instrukcja skoku (goto) do środka instrukcji warunkowej
#include <stdio.h>#include <stdlib.h>int main(){int a =5; a=-2; a=7;return0;}
Zasięg zmiennej
globalne - zadeklarowane poza main, dostępne dla wszystkich funkcji.
lokalne - zadeklarowane w innym miejscu
#include <stdio.h>int a,b;void func1 (){ a=3;}int main (){ b=3; a=2;return0;}
int a=1;/* zmienna globalna */int main(){int a=2;/* to już zmienna lokalna */ printf("%d", a);/* wypisze 2 */}
Czas życia
Czas życia to czas od momentu przydzielenia dla zmiennej miejsca w pamięci (stworzenie obiektu) do momentu zwolnienia miejsca w pamięci (likwidacja obiektu).
int main(){int a =10;{/* otwarcie lokalnego bloku */int b =10; printf("%d %d", a, b);}/* zamknięcie lokalnego bloku */ printf("%d %d", a, b);/* BŁĄD: b juz nie istnieje */}
Stałe
Stała, różni się od zmiennej tylko tym, że nie można jej przypisać innej wartości w trakcie działania programu. Wartość stałej ustala się w kodzie programu i nigdy ona nie ulega zmianie.
const typ nazwa_stałej=wartość;
#define
#define - dyrektywa preprocessora.
Linia pozwalająca zdefiniować stałą, funkcję, słowo kluczowe lub makro, które będzie potem podmienione w kodzie programu na odpowiednią wartość lub może zostać użyte w instrukcjach warunkowych dla preprocesora.
#define NAZWA_STALEJ WARTOSC
#define NAZWA_STALEJ
#include <stdio.h>#define SIX 1+5#define NINE 8+1int main(void){ printf("%d * %d = %d\n", SIX, NINE, SIX * NINE);return0;}
Operator przypisania
Operator przypisania (“=”), jak sama nazwa wskazuje, przypisuje wartość prawego argumentu lewemu.
int a =3, b;b = a;printf("%d\n", b);/* wypisze 3 */
C umożliwia też skrócony zapis postaci a #= b;, gdzie # jest jednym z operatorów: +, -, *, /, %, &, |, ^, << lub >>. Ogólnie rzecz ujmując zapis a #= b; jest równoważny zapisowi a = a # b.
int a =1;a +=5;/* to samo, co a = a + 5; */a /= a +2;/* to samo, co a = a / (a + 2); */a %=2;/* to samo, co a = a % 2; */
Operatory arytmetyczne dwuargumentowe
dodawanie (“+”),
odejmowanie (“-”),
mnożenie (“*”),
dzielenie (“/”),
reszta z dzielenia (“%”) określona tylko dla liczb całkowitych (tzw. dzielenie modulo).
Jednoargumentowe operatory arytmetyczne
pre-inkrementacja (++i),
post-inkrementacja (i++),
pre-dekrementacja (--i),
post-dekrementacja (i--).
int a, b, c;a =3;b = a--;/* po operacji b=3 a=2 */c =--b;/* po operacji b=2 c=2 */
Operator rozmiaru sizeof()
Zwraca rozmiar obiektu podany w wybranej jednostce miary, np. bajtach lub słowach maszynowych.
printf ("%d",sizeof(int));
4
Operatory bitowe
negacja bitowa (NOT)(“~”),
koniunkcja bitowa (AND)(“&”),
alternatywa bitowa (OR)(“|”) i
alternatywa rozłączna (XOR) (“^”)
Są zdefiniowane dla liczb całkowitych, działają na bitach i mogą być szybsze niż zwykłe operacje.
Najpierw oceniana jest wartość logiczna wyrażenia a; jeśli jest ono prawdziwe, to zwracana jest wartość b, jeśli natomiast wyrażenie a jest nieprawdziwe, zwracana jest wartość c.