forked from ivan-igorevich/basic-c
gitignore+local (no xwatermark, works only online)
This commit is contained in:
parent
1029785176
commit
70c5fae762
|
@ -0,0 +1,5 @@
|
||||||
|
*.*~
|
||||||
|
*.*#
|
||||||
|
|
||||||
|
/build/*
|
||||||
|
!/build/*.pdf
|
Binary file not shown.
146
formatting.tex
146
formatting.tex
|
@ -1,79 +1,67 @@
|
||||||
%%% Работа с русским языком
|
% \usepackage[printwatermark]{xwatermark}
|
||||||
\usepackage{cmap} % поиск в PDF
|
\usepackage{import}
|
||||||
\usepackage[T2A]{fontenc} % кодировка
|
\usepackage{listings}
|
||||||
\usepackage[utf8]{inputenc} % кодировка исходного текста
|
\usepackage{xcolor}
|
||||||
\usepackage[english,russian]{babel} % локализация и переносы
|
\usepackage{bookmark}
|
||||||
\usepackage[printwatermark]{xwatermark}
|
\usepackage{setspace}
|
||||||
\usepackage{xcolor}
|
\usepackage{titlesec}
|
||||||
\usepackage{multicol}
|
\usepackage{indentfirst}
|
||||||
\usepackage{setspace}
|
\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools}
|
||||||
\usepackage{titlesec}
|
\usepackage{icomma}
|
||||||
\usepackage{indentfirst}
|
\usepackage{layout}
|
||||||
\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % AMS
|
\usepackage{titlesec}
|
||||||
\usepackage{icomma} % "Умная" запятая: $0,2$ --- число, $0, 2$ --- перечисление
|
\usepackage{hyperref}
|
||||||
\usepackage{layout}
|
\usepackage[lmargin=1.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm,paperheight=240mm,paperwidth=170mm]{geometry}
|
||||||
\usepackage{titlesec}
|
|
||||||
\usepackage{hyperref}
|
\definecolor{codekeywords}{rgb}{0.1,0.3,0.3}
|
||||||
\usepackage[lmargin=1.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm,paperheight=240mm,paperwidth=170mm]{geometry}
|
\definecolor{codecomments}{rgb}{0,0.4,0}
|
||||||
|
\definecolor{codenumbers}{rgb}{0.4,0.4,0.4}
|
||||||
\onehalfspacing
|
\definecolor{codestring}{rgb}{0.85,0.2,0.1}
|
||||||
\addto{\captionsrussian}{\renewcommand{\figurename}{}}
|
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
|
||||||
\hypersetup{
|
\definecolor{codefine}{rgb}{0.7,0.5,0.3}
|
||||||
colorlinks=false, %set true if you want colored links
|
\lstdefinestyle{CCodeStyle}{
|
||||||
linktoc=all %set to all if you want both sections and subsections linked
|
commentstyle=\color{codecomments},
|
||||||
}
|
morecomment=[l][\color{codefine}]{\#},
|
||||||
\hbadness=99999
|
numberstyle=\tiny\color{codenumbers},
|
||||||
\author{Иван Овчинников}
|
stringstyle=\color{codestring},
|
||||||
\date{\today}
|
basicstyle=\ttfamily\footnotesize,
|
||||||
\newwatermark[allpages,color=red!50,angle=70,scale=7,xpos=-36,ypos=14]{DRAFT}
|
keywordstyle=\color{codekeywords},
|
||||||
|
emph={int,char,double,float,unsigned,void,bool},
|
||||||
\usepackage[cache=false]{minted}
|
emphstyle={\color{blue}},
|
||||||
|
breakatwhitespace=false,
|
||||||
\usepackage{listings}
|
breaklines=true,
|
||||||
\usepackage{xcolor}
|
captionpos=b,
|
||||||
|
keepspaces=true,
|
||||||
\definecolor{codekeywords}{rgb}{0.1,0.3,0.3}
|
numbers=left,
|
||||||
\definecolor{codecomments}{rgb}{0,0.4,0}
|
numbersep=5pt,
|
||||||
\definecolor{codenumbers}{rgb}{0.4,0.4,0.4}
|
showspaces=false,
|
||||||
\definecolor{codestring}{rgb}{0.85,0.2,0.1}
|
showstringspaces=false,
|
||||||
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
|
showtabs=false,
|
||||||
\definecolor{codefine}{rgb}{0.7,0.5,0.3}
|
tabsize=4
|
||||||
|
}
|
||||||
\lstdefinestyle{CCodeStyle}{
|
|
||||||
commentstyle=\color{codecomments},
|
\author{Иван Овчинников}
|
||||||
morecomment=[l][\color{codefine}]{\#},
|
\date{\today}
|
||||||
numberstyle=\tiny\color{codenumbers},
|
\title{Очередное введение в\\язык программирования C}
|
||||||
stringstyle=\color{codestring},
|
\babelfont{rm}{Times New Roman}
|
||||||
basicstyle=\ttfamily\footnotesize,
|
\babelfont{sf}{Microsoft Sans Serif}
|
||||||
keywordstyle=\color{codekeywords},
|
\babelfont{tt}{Courier New}
|
||||||
emph={int,char,double,float,unsigned,void,bool},
|
% \newwatermark[allpages,color=red!50,angle=70,scale=7,xpos=-36,ypos=14]{DRAFT}
|
||||||
emphstyle={\color{blue}},
|
\onehalfspacing
|
||||||
breakatwhitespace=false,
|
\addto{\captionsrussian}{\renewcommand{\figurename}{}}
|
||||||
breaklines=true,
|
\hypersetup{
|
||||||
captionpos=b,
|
colorlinks=false,
|
||||||
keepspaces=true,
|
linktoc=all
|
||||||
numbers=left,
|
}
|
||||||
numbersep=5pt,
|
|
||||||
showspaces=false,
|
\newcommand{\code}[1]{\texttt{#1}}
|
||||||
showstringspaces=false,
|
\newcommand{\sectionbreak}{\clearpage}
|
||||||
showtabs=false,
|
\newcommand{\frm}[1]{\newline%
|
||||||
tabsize=4
|
\newline%
|
||||||
}
|
\indent\fbox{%
|
||||||
|
\parbox{0.9\textwidth}{%
|
||||||
%\lstinputlisting[language=Octave,caption=some code here]{BitXorMatrix.m}
|
#1}%
|
||||||
|
}%
|
||||||
|
\newline%
|
||||||
\def\code#1{\texttt{#1}}
|
\newline%
|
||||||
\newcommand{\sectionbreak}{\clearpage}
|
}%
|
||||||
\newcommand{\frm}[1]{
|
|
||||||
\newline
|
|
||||||
\newline
|
|
||||||
\indent
|
|
||||||
\fbox{%
|
|
||||||
\parbox{0.9\textwidth}{%
|
|
||||||
#1
|
|
||||||
}%
|
|
||||||
}
|
|
||||||
\newline
|
|
||||||
\newline
|
|
||||||
}
|
|
||||||
|
|
64
main.tex
64
main.tex
|
@ -1,52 +1,52 @@
|
||||||
\documentclass[a5paper,twoside]{article}
|
\documentclass[a4paper]{article}
|
||||||
|
\usepackage[russian]{babel}
|
||||||
\include{formatting}
|
\include{formatting}
|
||||||
\title{Очередное введение в\\язык программирования C}
|
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\maketitle
|
\maketitle
|
||||||
\thispagestyle{empty}
|
\thispagestyle{empty}
|
||||||
\newpage
|
\newpage
|
||||||
|
\thispagestyle{empty}
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\newpage
|
\newpage
|
||||||
% 01 intro
|
% 01 intro
|
||||||
\include{sections/01-intro}
|
\import{sections/}{01-intro.tex}
|
||||||
% 02 basics
|
% 02 basics
|
||||||
\include{sections/02-basics}
|
\import{sections/}{02-basics}
|
||||||
% 03 io
|
% 03 io
|
||||||
\include{sections/03-io}
|
\import{sections/}{03-io}
|
||||||
% 04 variables
|
% 04 variables
|
||||||
\include{sections/04-variables}
|
\import{sections/}{04-variables}
|
||||||
% 05 conditions
|
% 05 conditions
|
||||||
\include{sections/05-conditions}
|
\import{sections/}{05-conditions}
|
||||||
% 06 cycles
|
% 06 cycles
|
||||||
\include{sections/06-cycles}
|
\import{sections/}{06-cycles}
|
||||||
\section{Функции}
|
% \section{Функции}
|
||||||
Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, аргументы и так называемое тело, то есть собственно исполняемый код. Рассмотрим более детально функцию \code{int main (int argc, char *argv[])}: \code{int} - это \textit{тип возвращаемого значения}, то есть на том месте, откуда будет вызвана эта функция, в результате её работы по выполнении оператора \code{return;}, появится некое целое число. Возвращаемые значения могут быть любых типов. В случае же когда функция не должна возвращать результат своей работы, или никакого возвращаемого результата не предполагается, указывается ключевое слово \code{void} (англ. - пустота). То есть на месте вызова функции в результате её выполнения ничего не появится. Оператор \code{return;} обязателен для не-void функций, а в \code{void} функциях может присутствовать или нет, но никогда не содержит возвращаемого значения. \code{main} - это \textit{название функции}. Функция именно с таким названием, написанным с маленькой буквы, всегда является точкой входа в программу (\hyperref[text:main]{\ref{text:main}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы.
|
% Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, аргументы и так называемое тело, то есть собственно исполняемый код. Рассмотрим более детально функцию \code{int main (int argc, char *argv[])}: \code{int} - это \textit{тип возвращаемого значения}, то есть на том месте, откуда будет вызвана эта функция, в результате её работы по выполнении оператора \code{return;}, появится некое целое число. Возвращаемые значения могут быть любых типов. В случае же когда функция не должна возвращать результат своей работы, или никакого возвращаемого результата не предполагается, указывается ключевое слово \code{void} (англ. - пустота). То есть на месте вызова функции в результате её выполнения ничего не появится. Оператор \code{return;} обязателен для не-void функций, а в \code{void} функциях может присутствовать или нет, но никогда не содержит возвращаемого значения. \code{main} - это \textit{название функции}. Функция именно с таким названием, написанным с маленькой буквы, всегда является точкой входа в программу (\hyperref[text:main]{\ref{text:main}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы.
|
||||||
\frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (\hyperref[text:naming]{\ref{text:naming}}) никаких других ограничений на название функций не накладывается.}
|
% \frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (\hyperref[text:naming]{\ref{text:naming}}) никаких других ограничений на название функций не накладывается.}
|
||||||
Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{аргументы функции}. Аргументы функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то параметры и исходные данные для работы. Аргументы пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает аргументов необходимо поставить после названия пустые круглые скобки. Весь код, содержащийся в фигурных скобках после аргументов функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но никогда не можем создавать в теле функции другие функции. Никаких других ограничений на написание тела функции язык не накладывает.
|
% Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{аргументы функции}. Аргументы функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то параметры и исходные данные для работы. Аргументы пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает аргументов необходимо поставить после названия пустые круглые скобки. Весь код, содержащийся в фигурных скобках после аргументов функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но никогда не можем создавать в теле функции другие функции. Никаких других ограничений на написание тела функции язык не накладывает.
|
||||||
\begin{verbatim}
|
% \begin{verbatim}
|
||||||
ТипВозвращаемогоЗначения Имя (СписокАргументов)
|
% ТипВозвращаемогоЗначения Имя (СписокАргументов)
|
||||||
{
|
% {
|
||||||
ТелоФункции
|
% ТелоФункции
|
||||||
return ВозвращаемоеЗначение;
|
% return ВозвращаемоеЗначение;
|
||||||
}
|
% }
|
||||||
\end{verbatim}
|
% \end{verbatim}
|
||||||
|
|
||||||
|
% \begin{lstlisting}[language=C,style=CCodeStyle]
|
||||||
|
% void somefunction() { // <-- this is a function
|
||||||
|
% // some useful things
|
||||||
|
% }
|
||||||
|
|
||||||
\begin{lstlisting}[language=C,style=CCodeStyle]
|
% int main (int argc, const char* argv[]) {
|
||||||
void somefunction() { // <-- this is a function
|
% // more useful things
|
||||||
// some useful things
|
% somefunction(); // <-- this is invocation
|
||||||
}
|
% return 0;
|
||||||
|
% }
|
||||||
|
% \end{lstlisting}
|
||||||
|
|
||||||
int main (int argc, const char* argv[]) {
|
% Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её аргументы, и где будет использован результат её работы. Для примера опишем функцию суммирующую два числа. в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не знает откуда взялись эти числа, мы можем их считать с консоли, можем задать в виде констант или получить в результате работы какой то другой функции.
|
||||||
// more useful things
|
% Внутри функции main мы вызываем нашу функцию sum суммирующую два числа и передаем в качестве аргументов эти числа.
|
||||||
somefunction(); // <-- this is invocation
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
\end{lstlisting}
|
|
||||||
|
|
||||||
Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её аргументы, и где будет использован результат её работы. Для примера опишем функцию суммирующую два числа. в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не знает откуда взялись эти числа, мы можем их считать с консоли, можем задать в виде констант или получить в результате работы какой то другой функции.
|
|
||||||
Внутри функции main мы вызываем нашу функцию sum суммирующую два числа и передаем в качестве аргументов эти числа.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue