Ëåêöèÿ 1 (06.09.2021)

Ïîäîëüñêàÿ Íèíà Àðêàäüåâíà

nap@math.msu.su

nina.podolskaya@math.msu.ru

https://math.msu.su/~nap

Çàêîí÷èëà ìåõ-ìàò â 1985 ã.

1 êóðñ - ßçûê C, çàäà÷è

2 êóðñ — ßçûê C++, Computer Science (àëãîðèòìû è ñòðóêòóðû äàííûõ)

Ñêîðîñòü ðåøåíèÿ çàäà÷ — îòëè÷àåòñÿ â 100 ðàç.

Ìîæíî ïîâûøàòü ñêîðîñòü ïðîãðàììèðîâàíèÿ (îòëàäî÷íàÿ ïå÷àòü, îòëàä÷èê)

Ïñåâäîêîä (ÿçûê ïðîãðàììèðîâàíèÿ, ïðèáëèæåííûé ê ÷åëîâå÷åñêîìó).

(Ïàñêàëü, Å-ÿçûê — Åðøîâ)

===================

Ïðîöåäóðà Ïðîèçâåäåíèå

öåë x, y

ââåñòè(x)

ââåñòè(y)

öåë z = x*y

âûâåñòè(z)

Êîíåö ïðîöåäóðû

===================

Ñ — ÿçûê ñèñòåìíîãî ïðîãðàììèðîâàíèÿ (ìàêñèìàëüíî ïðèáëèæåí ê àññåìáëåðó — ÿçûêó ìàøèííûõ êîäîâ, çàïèñàííûõ â ïîíÿòíîì ÷åëîâåêó âèäå).

Ïðîãðàììà íà ÿçûêå C → ïðîãðàììà íà ÿçûêå àññåìáëåð → ïðîãðàììà èç ìàøèííûõ êîäîâ, êîòîðàÿ ìîæåò áûòü âûïîëíåíà íà êîìïüþòåðå.

Ïðèìåð êîìàíä íà ÿçûêå àññåìáëåðà: MOV R1, R2 (MV ax, bx); LDR R0, @ADDR (LOAD cx, dx)

Ïðîãðàììà — ýòî íàáîð äåéñòâèé, ïðîèçâîäèìûõ íàä íåêèìè äàííûìè.

 ÿçûêå C òèïû äàííûõ:


Öåëûå ÷èñëà — int, long (äâîéíîé òî÷íîñòè)

Âåùåñòâåííûå ÷èñëà — float, double (äâîéíîé òî÷íîñòè)

Ñèìâîëû — char (1 áàéò) (ìàññèâ char îáðàçóåò ñòðîêó)

Ëîãè÷åñêèõ òèïîâ - íåò (bool)! Âìåñòî íèõ èñïîëüçóåòñÿ òèï int: 0 – ëîæü, íå 0 — èñòèíà (ðåêîìåíäóåòñÿ äëÿ èñòèíû èñïîëüçîâàòü 1).


Áàéò — íàèìåíüøàÿ àäðåñóåìàÿ ÿ÷åéêà ïàìÿòè

Ïàìÿòü — çàíóìåðîâàííàÿ (îò 0 äî ???) ïîñëåäîâàòåëüíîñòü (ìàññèâ) áàéòîâ

Ñêîëüêî áàéòîâ â ïåðåìåííîé îïðåäåëåííîãî òèïà — îïåðàòîð sizeof

Ïðèìåð:

n = sizeof(int)

n = sizeof(double)


Îïåðàòîðû (êîìàíäû):

1. Ïðèñâàèâàíèå (êîïèðîâàíèå çíà÷åíèÿ â ïåðåìåíííóþ)

2. Âûçîâ ôóíêöèè (íàïðèìåð, f(x))

3. Óïðàâëÿþùèå êîíñòðóêöèè: if else, öèêëû for, while è do while, switch

4. Çàãîëîâîê ôóíêöèè:


<òèï âîçâðàùàåìîãî çíà÷åíèÿ> <èìÿ ôóíêöèè> (<ñïèñîê ïàðàìåòðîâ>)


ñïèñîê ïàðàìåòðîâ: <òèï ïàðàìåòðà> <èìÿ ïàðàìåòðà>, ..., <òèï ïàðàìåòðà> <èìÿ ïàðàìåòðà>


5. Îïåðàòîð âûõîäà èç ôóíêöèè: return èëè return <âîçâðàùàåìîå çíà÷åíèå>

6. Ñîñòàâíîé îïåðàòîð: {}

Ïðèìåð: { if (a) b(); a = b; while (a) --a; }

7. Àðèôìåòè÷åñêèå îïåðàöèè: +, -, *, /, %, ++ è -- (increment è decrement – ïðåôèêñíûå è ïîñòôèêñíûå - óâåëè÷åíèå è óìåíüøåíèå)


Ïðîãðàììà äîëæíû óìåòü ââîäèòü/âûâîäèòü äàííûå


Ââîä — ñ êëàâèàòóðû, èç ôàéëà, …

Âûâîä — íà ýêðàí, â ôàéë, …


Áèáëèîòåêà ââîäà-âûâîäà.

Ôóíêöèè èç áèáëèîòåêè ââîäà/âûâîäà îïèñàíû â ôàéëå stdio.h


Ïðàâèëî ÿçûêà C: ôóíêöèÿ äîëæíà áûòü çàäåêëàðèðîâàíà (îïèñàí òèï ôóíêöèè è òèïû åå ïàðàìåòðîâ) äî åå âûçîâà (äî — çíà÷èò, âûøå ïî òåêñòó)


Ñòðîêà

#include <stdio.h>

íà âðåìÿ êîìïèëÿöèè âêëþ÷àåò òåêñò ôàéëà stdio.h â êîìïèëèðóåìóþ ïðîãðàììó.

Òàêèì îáðàçîì, ìîæíî èñïîëüçîâàòü ôóíêöèè ââîäà-âûâîäà, íå îïèñûâàÿ èõ âðó÷íóþ.


Êîìïèëÿöèÿ - ïðîöåññ ïåðåâîäà ïðîãðàììû ñ ÿçûêà ïðîãðàììèðîâàíèÿ íà ÿçûê ìàøèííûõ êîäîâ.

Êîìïèëÿòîð - ýòî ïðîãðàììà, êîòîðàÿ îñóùåñòâëÿåò êîìïèëÿöèþ.


 äèñïëåéíûõ êëàññàõ ìåõ-ìàòà èñïîëüçóåòñÿ ÎÑ Linux.

Êîìïèëÿòîð gcc (Gnu C Compiler)

GNU – Gnu Not Unix


 Ëèíóêñå ìíîãî êîìàíä è ïîíÿòèé, îäèíàêîâûõ ïî íàïèñàíèþ ñ àíãëèéñêèìè ñëîâàìè — gnu, cat, lynx, …


Ðåêîìåíäóåìàÿ ëèòåðàòóðà:

"Ââåäåíèå â ÿçûê ïðîãðàììèðîâàíèÿ C" Êåðíèãàí, Ðèò÷è


===================================================

Ïðîãðàììà "Íè÷åãî íå äåëàòü"


#include <stdio.h>

int main(void) { return 0; }


===================================================

Ïðîãðàììà "Hello, World!"


#include <stdio.h>

int main(void) {

printf(“Hello, World!\n”);

return 0;

}


===================================================

Ïðîãðàììà “Ôàêòîðèàë öåëîãî ÷èñëà»


#include <stdio.h>


int main(void) {

int N, res = 1;

printf(“Input integer number:\n”);

scanf(“%d, &N); /* %d – ôîðìàò ââîäà ïåðåìåííîé — decimal integer – äåñÿòè÷íîå öåëîå ÷èñëî, & - îïåðàòîð èçâëå÷åíèÿ àäðåñà ïåðåìåííîé */

while (N >= 1) {

res *= N; /* res = res * N - äîìíîæèòü*/

--N ; /* óìåíüøèòü íà 1 */

}

printf(“res: %d\n”, res); /* âìåñòî %d ïðè âûâîäå ïîäñòàâèòñÿ çíà÷åíèå res */

return 0;

}


& - îïåðàöèÿ èçâëå÷åíèÿ àäðåñà ïåðåìåííîé (íîìåð ñàìîãî ìëàäøåãî áàéòà)

scanf() ñ÷èòûâàåò äàííûå ñ êëàâèàòóðû è ïîìåùàåò â ïàìÿòü ïî óêàçàííîìó àäðåñó

while (<óñëîâèå ïðîäîëæåíèå öèêëà>) <îïåðàòîð>


Ðåçóëüòàò âûïîëíåíèÿ äàííîé ïðîãðàììû:




Êîìàíäû Ëèíóêñà:


1) cd - Change Directory

2) ls - ñïèñîê ôàéëîâ â òåêóùåé äèðåêòîðèè

3) gcc - ñêîìïèëèðîâàòü ïðîãðàììó (gcc tmp.c -> ./a.out)

4) rm - óäàëèòü ôàéë

5) mv - ïåðåèìåíîâàòü èëè ïåðåìåñòèòü ôàéë

7) man - ïîêàçàòü äîêóìåíòàöèþ (âûõîä - ':')/\. Ïðèìåð: "man gcc", "man printf"

8) pwd - ïîêàçàòü ïóòü ê òåêóùåé äèðåêòîðèè


Ïóòü - ïóòü ïî äåðåâó. Äåðåâî äèðåêòîðèé (ïàïîê, ôîëäåðîâ, îãëàâëåíèé)

Êîðåíü - '/'