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