- •Алфавит языка
- •Идентификаторы
- •Структура программы
- •Переменные
- •Константы
- •Типы данных
- •Выражения и операции
- •Арифметические операции.
- •Выражения и операции
- •Операции отношения.
- •Логические операции.
- •Структура программы
- •Форматированный ввод с клавиатуры.
- •Scanf(“форматная_строка”, список_аргументов);
- •Форматированный вывод на экран.
- •Printf(“форматная_строка”, список_аргументов);
- •Операция присваивания.
- •Условный оператор if
- •If (выражение) оператор1; else оператор2;
- •If (выражение) оператор;
- •Оператор выбора (переключатель)
- •Операторы циклов
- •Цикл с предусловием while
- •Операторы циклов
- •Цикл с постусловием do-while
- •Операторы циклов
- •Цикл с параметром for
- •Массивы
- •Массивы
- •Одномерные массивы
- •Массивы
- •Массивы
- •Двумерные массивы
- •Массивы
- •Двумерные массивы
- •Операции над элементами двумерного массива
- •Функции
- •Функции
- •Ввод – вывод строк
- •Ввод – вывод строк
- •Структуры
- •Структуры
- •Функции работы с файлами
- •Указатели
- •Операции над указателями
- •Динамическое выделение памяти
Функции
В языке Cи задача может быть разбита на более простые подзадачи при помощи подпрограмм-функций. Использование подпрограмм в коде программы и ведет к упрощению ее структуры, поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Кроме того, упрощается процесс отладки программы, содержащей подпрограммы.
В языке Си вся программа строится только из функций. Всякая программа обязательно включает в себя основную функцию с именем main. Если в программе используются и другие функции, то они выполняют роль подпрограмм.
Функция – это именованная последовательность инструкций, выполняющая какое-либо законченное действие. Описывается один раз, а вызываться для выполнения может любое количество раз. Функции могут располагаться в исходном файле в любом порядке.
Объявление функции пользователя, выполняется в двух формах – в форме описания (объявления) и в форме прототипа.
Формат объявления(описания) функции:
тип_результата имя_функции (список_формальных_параметров)
{тело_ функции}
Пример:
int sum(int a, int b)
{return a+b;}
Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция.
Формат обращения к функции (вызов функции):
имя_функции(список_фактических_праметров)
Пример:
Z=sum(x, y);
В определении и в объявлении одной и той же функции типы и порядок следования параметров должны совпадать.
Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция.
Формат обращения к функции (вызов функции):
имя_функции(список_фактических_праметров)
Между формальными и фактическими параметрами при вызове функции должны соблюдаться правила соответствия по последовательности и по типам.
Фактические параметры — это константы, переменные, выражения того же типа, что и у соответствующего ему формального параметра. Стандарт языка Си допускает автоматическое преобразование значений фактических параметров к типу формальных параметров.
Передача параметров при вызове функции происходит только по значению, это значит, что в Си допустимы только параметры-значения. Поэтому выполнение функции не может изменить значения переменных, указанных в качестве фактических параметров.
При обращении к функции передача значений возможна как через параметры, так и через глобальные переменные.
В случае необходимости функцию можно использовать для изменения передаваемых ей аргументов. В этом случае в качестве аргумента необходимо в вызываемую функцию передавать не значение переменной, а ее адрес. А для обращения к значению аргумента-оригинала использовать операцию «*».
Пример функции, в которой меняются местами значения аргументов x и y:
void zam (int *x, int *y)
{int t;
t = *x;
*x = *y;
*y = t;
}
Обработка строк в ЯП Си (описание, ввод/вывод, обращение к элементам, библиотека string.h, примеры).
В языке Си нет специально определенного строкового типа данных. Строка в языке Си представляет собой массив, состоящий из символов, последним из которых является символ \0. Нулевой символ позволяет функциям, работающим со строками, обнаруживать концы строк. На длину символьного массива в Си нет ограничения. Индекс первого символа строки — 0.
Строка описывается как символьный массив.
Например:
char S[20];
Одновременно с описанием строка может инициализироваться. Возможны два способа инициализации строки — с помощью строковой константы и в виде списка символов
Пример:
char S[10]="строка";
char S[]="строка";
char S[10]={‘c’, ’т’, ’p’, ‘o’, ‘к’, ‘a’, ‘\0’};
По результату первого описания под строку s будет выделено 10 байт памяти, из них первые 7 получат значения при инициализации (седьмой — нулевой символ). Второе описание сформирует строку из семи символов. Третье описание по результату равнозначно первому. Конечно, можно определить символьный массив и так:
char S [10] = {‘c’, ’т’, ’p’, ‘o’, ‘к’, ‘a’};
т.е. без нулевого символа в конце. Но это приведет к проблемам с обработкой такой строки, так как будет отсутствовать ориентир на его окончание.
Обращение к отдельному символу строки выполняется по индексу.
Например, в описанной выше строке S[0] =’с’, S[5] = ‘a‘. Для вывода третьего символа строки можно написать: printf("%c", S[2]);
Большинство действий со строковыми объектами в Си выполняются при помощи стандартных библиотечных функций, для этого включите в начало программы заголовочный файл string.h: #include <string.h>, чтобы использовать строковые функции.
