Операция sizeof(тип_данных/имя_переменной).
Возвращает размер (в байтах), занимаемый данной переменной или типом данных.
sizeof(short) → 4
Операторы ветвления и цикла
if
if (условие) действие1;
else действие2;
Если условие истинно, выполняется действие1, иначе выполняется действие2. Секция else необязательна.
While
while (условие) действие;
Цикл с предусловием. Действие выполняется, пока условие истинно.
Есть также цикл с постусловием:
do действие while (условие);
For
Цикл for выглядит следующим образом и в общем случае не является циклом с заданным числом повторений (в отличие, например, от ЯВУ Pascal).
for (инициализация; условие_цикла; изменение_переменых) действие;
Например,
for (x=0;x<10;x++) a+=f(x);
Break
Оператор break используют для выхода из циклов for / while и ветвления switch. Для вложенных циклов выход осуществляется на один уровень.
Continue
Данный оператор вызывает принудительный переход к следующему шагу цикла. Например, требуется сложить все целые числа от a до b не кратные трём.
for(int i=a, s=0; i<b; i++)
{
if (i%3==0) continue; //переходим к следующему значению i
s+=i;
}
Switch
Структура записи оператора switch следующая.
switch(переменная)
{
case значение1: набор_действий1; break;
case значение2: набор_действий2; break;
…
default: набор_действий_по_умолчанию;
}
При равенстве переменной значению 1, выполняется соответствующий набор действий, который может состоять из нескольких операторов и заканчивается словом break. При несовпадении ни с одним из значений, выполняется секция default.
|
|
Формально, секции «case …: » являются метками, на которые осуществляется переход при совпадении значений. Именно поэтому после перехода на метку выполняются все команды до конца секции switch-case либо до оператора break. Этим можно пользоваться для уменьшения дублирования кода. Например, пусть задано условие: если переменная x равна 0, то вызвать функцию f1(), а если равно 2, то вызвать f1() и f2().
switch(x)
{
case 2: f2(); //не используем break, т.к. требуется выполнение и следующей команды.
case 0: f1(); //не используем break, т.к. дошли до конца.
}
Функции
Объявляются следующим образом:
возвращаемый_тип имя_функции(список_формальных_параметров)
{
ТЕЛО ФУНКЦИИ
}
список формальных параметров представляет собой перечисление через запятую пар тип данного – имя переменной (имя переменной может отсутствовать).
Для функции, которая не возвращает значения (процедура в Паскале), предусмотрен тип данных void.
Функции, возвращающие значение, должны обязательно содержать оператор "return возвращаемые_данные". На данном операторе происходит возврат из функции независимо от того, есть ли дальше другие операторы.
Для функций void можно использовать return без аргументов для явного выхода из функции в требуемом месте.
|
|
Пример.
int sum(int x, int y)
{
return x+y;
}
Описание функции обязательно должно быть раньше (выше) в тексте программы, чем любой её вызов. Функция может быть описана без реализации (упреждающее описание). В этом случае тело функции не записывают, а после описания её заголовка ставят «;». Также при упреждающем описании могут не указываться имена переменных.
Пример:
void myfunc(int, int);
// здесь продолжение кода с вызовом myfunc
void myfunc(int x, int y) {…}
Допустимо явно не указывать параметры функции, для этого используется многоточие в конце списка параметров. В этом случае компилятор контролирует только явно указанные аргументы. Никаких специальных средств по работе с неявно указанными параметрами функции языки «С» и «С++» не предоставляют, но известно, что переданные фактические параметры располагаются в памяти после явно указанных.
Языки «С» и «С++» разрешают использование рекурсии, то есть вызова функцией самой себя.
Пример (функция вычисления факториала):
long fact(int k)
{
if (k<0) return 0;
if (k==0) return 1;
return k*fact(k-1);
}
Язык «С++» предоставляет дополнительные возможности:
– перегрузка функций – несколько функций могут иметь одно имя и тип, но разный набор формальных аргументов, в этом случае компилятор сам выбирает подходящую функцию по фактическим аргументам;
|
|
– параметры по умолчанию (С++);
– подставляемые (inline) функции (С++);
Директивы препроцессора
Есть специальные команды, которые не компилируются, а лишь указывают препроцессору на необходимость выполнения некоторых действий. Директивы начинаются с символа #.
#include <имя_файла> - добавить в данное место содержимое файла, файл содержится в специальном каталоге подключаемых файлов;
#include "имя_файла" - тоже, но для файла из текущей папки.
Стандартные заголовочные файлы (аналоги библиотек в других ЯВУ):
stdio.h – стандартный ввод-вывод;
conio.h – консольный ввод-вывод;
string.h – работа со строками;
math.h – математические операции;
mem.h – функции работы с памятью;
limits.h – константы предельных значений;
dos.h – команды ОС Ms Dos.
#define идентификатор строка_замещения - заменяет все идентификаторы от директивы до конца файла на строку замещения.
#undef идентификатор - отменяет директиву define, после данной директивы замен не производится.
#if, #elif, #else, #endif – организуют ветвление.
#ifdef, #ifndef – далее следующий код будет откомпилирован только если определена / неопределенна макроподстановка.
|
|
Метки
Идентификатор с последующим двоеточием является меткой. Метка является адресом оператора, следующего за меткой. Используется в операторах switch и goto. Пример есть выше.
Указатели
Переменные хранят данные и не позволяют их управлять размещением в памяти. Единственная доступная операция – взятие адреса (&).
Указатель на переменную хранит адрес размещения данного. Обратиться к данному можно через операцию разыменовывания указателя (*). Объявление указателя осуществляется символом «*» перед именем переменной. Пример:
int x;
int *t; // объявили указатель t на переменную типа int
t = &x; // присваиваем указателю адрес переменной x
*t = 4; // используя указатель, присваиваем x значение 4
Указатели и объекты одного типа могут быть объявлены вместе. Пример (см. предыдущий пример):
int x,*t=&x;
Приведение типов
В языке «C» простые типы данных автоматически приводятся к требуемому. Вещественные преобразуются к целым путём отсечения дробной части. Данные большего размера приводятся к данным меньшего размера отбрасыванием старших байт. Для более сложных типов данных, а также для указателей требуется явное преобразование типов. Операция преобразования типа имеет вид:
(новый_тип)переменная
При этом для объектов (экземпляров классов и структур) операция приведения должна быть определена. Для указателей допустимо приведение к другому указателю. Приведение указателей никак не преобразует сами данные.
Примеры приведены далее.
Дата добавления: 2018-05-13; просмотров: 183; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!