**Wstęp, czyli jak się ma "Wstęp do programowania w języku C" do "Wstępu do programowania w języku Python"**
Studenci 1-go roku studiów 1-go stopnia mogą rozpocząć naukę programowania i podstaw informatyki w jednym z dwóch języków: **C albo Python** (można wybrać tylko jeden z tych dwóch kursów!). Każdy z tych kursów pozwala opanować podstawy informatyki i programowania a w dalszych semestrach doskonalić się w programowaniu w innych (lub tych samych) językach. W szczególności zaczynając od "Kursu: Wstęp do programowania w języku C", nie skazujecie się na zawsze na ten język (i nieznajomość Pythona) oraz _vice versa_. W drugim semestrze studiów (i kolejnych) pojawiają się kursy języków programowania (C++, Java, Ruby, Python), które pozwalają opanować różne języki, przy założeniu, że studenci mają ogólne pojęcie o programowaniu, które zdobywają na obu przedmiotach "Kurs: Wstęp do programowania w języku C/Python".
**O samym kursie "Wstęp do programowania w języku C"**
Celem tego kursu jest nauczenie i rozwinięcie podstawowych umiejętności programowania w jednym z najbardziej rozpowszechnionych języków imperatywnych - języku C. Wykład jest ilustrowany wieloma przykładami, a towarzyszące mu zajęcia w pracowniach uczą (poprzez wiele drobnych zadań i końcowy projekt)
praktyki dobrego programowania. Nie wymaga on od uczestników żadnych wcześniejszych umiejętności programowania, ale studenci startujący od zera będą musieli poświęcić mu więcej pracy w domu, aby szybko wyrównać poziom. Elementy języka są wprowadzane stopniowo, zaczynając od konstrukcji podstawowych, a kończąc na bardziej zaawansowanych zagadnieniach, jak wskaźniki i dynamiczne struktury danych, operacje na plikach czy funkcje rekurencyjne. ~~Ostatnie wykłady poświęcone są obiektowym elementom języka C++.~~
Pochód języków programowania trwa od zarania informatyki. Studium języków C i C++ ułatwia start w naturalną ich kontynuację, do której obecnie zaliczają się ważne z komercyjnego punktu widzenia języki i środowiska: Java (Sun) oraz C# (.NET Microsoft).
**Wymagane przygotowanie:** Brak, chociaż przydatna będzie podstawowa umiejętność programowania.
W przypadku prowadzenia zajęć w formie zdalnej, wykłady będą w formie wideokonferencji, a na pracowni studenci będą indywidualnie programować rozwiązania zadań z list. Zgłaszanie rozwiązań oraz punktowe i słowne oceny programów będą realizowane w systemie SKOS.
**Program:**
* Podstawowe konstrukcje języka: instrukcje i deklaracje.
* Standardowe typy danych, wyrażenia.
* Standardowe wejście/wyjście, filtry.
* Funkcje, moduły i struktura programu.
* Metody agregacji danych: tablice, struktury i unie.
* Wskaźniki.
* Dynamiczne zarządzanie pamięcią, standardowe biblioteki C.
* Sekwencyjne i swobodne przetwarzanie plików.
* Programowanie ~~okienkowego interfejsu w GTK+~~ z użyciem bibliotek innych niż standardowe.
* ~~Klasy, obiekty i strumienie w C++.~~
**Literatura:**
* Kernighan B.W., Ritchie D.M.: Język ANSI C. Seria "Klasyka Informatyki". Warszawa, Wydawnictwa Naukowo-Techniczne 2003. Podręcznik podstawowy.
* King K.N.: Język C, Nowoczesne programowanie, Wydanie II, Helion 2011 (uwzględnia standard C99).
* Banahan M., Brady D., Doran M., The C Book, http://publications.gbdirect.co.uk/c_book/ (dostępny za darmo jako pdf i na WWW).
* Schildt B., C: The Complete Reference: covers C++ and ANSI C, Osborne McGraw-Hill,
* ISO/IEC 2011 - Programming languages - C (aktualny standard ISO 2011), http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1570.pdf (wstępna wersja opisu standardu).