- •6) Операция преобразования типа. Операция sizeof. Пример.
- •12) Исходные файлы и объявление переменных.
- •13) Время жизни и область видимости программных объектов. Инициализация глобальных и локальных переменных.
- •Комментарии в языке Си
- •Оператор с предусловием: (while) Цикл с постусловием: (do…while)
- •Пример кода Напишем программу, которая будет считать сумму всех чисел от 1 до 10.
- •Цикл do while
- •20) Синтаксис цикла с предусловием. Опишите работу цикла. Пример.
- •21) Синтаксис цикла с постусловием. Опишите работу цикла. Пример.
- •22) Синтаксис цикла с параметром. Опишите работу цикла. Пример.
- •23) Опишите работу оператора continue. Опишите работу оператора goto. Пример.
- •25) Вызов функции с переменным числом параметров. Пример.
- •26) Передача параметров функции main.
Комментарии в языке Си
В языке Си для комментариев используются символы /* - начало комментария; */ - конец комментария. Вся последовательность, заключенная между этими символами, является комментарием. Это удобно для написания многострочных комментариев:
int a; /* целая переменная */
Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода. В дополнение к этому, для написания коротких комментариев могут использоваться символы //. При этом комментарием является все, что расположено после символов // и до конца строки:
float b; // вещественная переменная
Директивы препроцессора, такие как #define и #ifdef, обычно используются для того, чтобы облегчить изменение исходного кода программ и их компиляцию в разных средах выполнения. Директивы в файле исходного кода позволяют препроцессору выполнять определенные действия. Например, препроцессор может заменять токены в тексте, вставлять содержимое других файлов в файл исходного кода или отключать компиляцию части файла путем удаления разделов текста. Строки препроцессора распознаются и выполняются до расширения макросов. Поэтому если макрос разворачивается в нечто, похожее на команду препроцессора, эта команда не распознается препроцессором.
Препроцессор распознает следующие директивы:
#define |
#error |
#import |
#undef |
#elif |
#if |
#include |
#using |
#else |
#ifdef |
#line |
#endif |
#ifndef |
#pragma |
|
|
Функции всегда определяются глобально. Они могут быть объявлены с классом памяти static или extern. Объявления функций на локальном и глобальном уровнях имеют одинаковый смысл.
Правила определения области видимости для функций отличаются от правил видимости для переменных и состоят в следующем.
1. Функция, объявленная как static, видима в пределах того файла, в котором она определена. Каждая функция может вызвать другуюфункцию с классом памяти static из своего исходного файла, но не может вызвать функцию определенную с классом static в другом исходном файле. Разные функции с классом памяти static имеющие одинаковые имена могут быть определены в разных исходных файлах, и это не ведет к конфликту.
2. Функция, объявленная с классом памяти extern, видима в пределах всех исходных файлов программы. Любаяфункция может вызывать функции с классом памяти extern.
3. Если в объявлении функции отсутствует спецификатор класса памяти, то по умолчанию принимается класс extern.
15) Линейные алгоритмы в С++. Спецификатор формата. Пример.
Линейными называются алгоритмы, процесс пошагового выполнения которых можно изобразить прямой линией – сверху вниз.
Пример. Дано двухзначное целое число b. Найти сумму его цифр.
Текстуальная форма алгоритма задачи:
1) Ввести число b с клавиатуры в ЭВМ;
2) Для выделения первой цифры воспользуемся известным в математике способом деления числа b на 10, и возьмем целое число от этого деления;
3) Для выделения второй цифры разделим число b на 10, и возьмем дробную часть от этого деления;
4) Найдем сумму найденных цифр;
5) Полученный результат выдать на экран дисплея.
Графическая форма представления алгоритма дана в виде схемы (рис. 2), использующей блоки для обозначения каждого действия и приведен текст программы.
Перед спецификаторами формата ввода ставится знак %, и они сообщают функции scanf() о типе далее читаемых данных. Эти спецификаторы перечислены в таблице. Спецификаторы формата рассматриваются слева направо, и в таком же порядке с ним сопоставляются аргументы из списка аргументов.
Код |
Значение |
%c %d %i %е %f %g %о %s %x %р %n %u %[] |
Читает одиночные символы Читает десятичное число Читает десятичное число Читает число с плавающей запятой Читает число с плавающей запятой Читает число с плавающей запятой Читает восьмеричное число Читает строку Читает шестнадцатиричное число Читает указатель Получает целочисленное значение, равное числу прочитанных символов Читает беззнаковое целое Сканирует множество символов |
|
|
16) Форматированный ввод и вывод на экран в С++. Потоковый ввод и вывод на экран в С++.
Для организации форматированного потокового ввода-вывода в Си++ существуют два средства:
• применение функций-членов класса ios для управления флагами форматирования;
• применение функций-манипуляторов.
Управление флагами форматирования. Флаги форматирования — двоичные коды, управляющие форматом выводимых значений. В заголовочном файле iostream.h определено следующее перечисление, задающее флаги форматирования:
В языке С++ был разработан другой способ ввода/вывода с использованием так называемых потоков ввода и вывода.
Для того чтобы использовать стандартные потоки для ввода и вывода, необходимо включить заголовочный файл <iostream>. Для ввода используется операция >>, для вывода – операция <<. Компилятор определяет тип вводимой/выводимой переменной и соответствующим образом форматирует её.
#include <iostream> using namespace std; |
|
cin >> x; |
// Ввод значения в переменную x из стандартного потока cin |
cout << x; |
// Вывод значения переменной x в стандартный поток cout |
cin >> x >> y; |
// Ввод двух переменных |
cout << "x = " << x << "\ny = " << y << endl; |
// Функция endl осуществляет перевод строки |
Если при вводе или выводе произошла ошибка, в переменной состояния потока устанавливается соответствующий флаг. Проверить его значение можно с помощью функции fail.
cin >> x; if (cin.fail()) cout << "Произошла ошибка при вводе\n"; |
17) Принятие решений. Условные операторы в С++. Пример.
Условный оператор. Формат условного оператора следующий:
if (выражение) оператор1; else оператор2;
Это полная форма оператора, программирующая структуру полного ветвления. Обычно выражение — это некоторое условие, содержащее операции отношения и логические операции. Значение выражения приводится к целому и интерпретируется в соответствии с правилом: равно нулю — ложь, не равно нулю — истина. Если выражение истинно, выполняется оператор1, если ложно — оператор2.
Необходимо обратить внимание на следующие особенности синтаксиса условного оператора:
выражение записывается в круглых скобках;
точка с запятой после оператора 1 ставится обязательно.
Условный оператор if может использоваться в форме полной или неполной развилки.
В С++ есть условная операция, очень похожая на условный оператор выбора if else. Условная операция «? :» называется тернарной операцией (то есть трёхместная (имеет три операнда), единственная в C++).
Форма записи тернарной операции в C++ "условие" ? "выражение 1" : "выражение 2"; Если условие истинно, то выполняется выражение 1, иначе (условие ложно) выполняется выражение 2. Пример:
1 |
a > b ? cout << a : cout << b; // если а > b, то выполняется cout << a, иначе выполняется cout << b |
Таким образом, если, а > b напечатать а, иначе напечатать b. То есть, программа печатает большее из чисел. Использование условной операции может в некоторых случаях упрощать код, тогда как воспользоваться оператором if else таким же образом не возможно. Вернёмся к старой задаче из раздела Оператор выбора if else, напомню условие данной задачи.
18) Разветвляющиеся алгоритмы в С++. Пример.
Разветвляющимся является алгоритм, если последовательность выполнения шагов решения задачи изменяется в зависимости от некоторых условий. Условие – это логическое выражение, принимающее одно из двух значений: «Да» – если условие верно и «Нет» – если условие неверно, – и которое может содержать логические операции и знаки отношений.
Рис. 1 иллюстрирует структурные схемы разветвляющихся алгоритмов укороченной (а) и полной (б) формы.
Рисунок 1. Схемы разветвляющихся алгоритмов
Разветвляющиеся алгоритмы оформляются операторами полной или укороченной формы (табл. 1). В условном операторе выполняется всегда одна из веток («Да» при истинном условии или «Нет», если оно ложно), и никогда не выполняются обе вместе.
Таблица 1. Формы записи операторов условного перехода
Форма записи |
Структура оператора |
краткая |
if (условие) { операторы-Да } |
полная |
if (условие) { операторы-Да; } else { операторы-Нет} |
К условным операторам относится оператор выбора или оператор переключатель (табл. 2), который замечателен тем, что может заменить вложенные операторы условия.
Таблица 2. Оператор выбора (или оператор-переключатель)
Структура оператора |
switch выражение { case значение1: { операторы} . . . . . . . . . . . case значениеN: { операторы} default { операторы} } |
19) Организация циклов в С++. Итерационные алгоритмы. Пример.
Цикл - это повторение одного и того же участка кода в программе. Последовательность действий, которые повторяются, называют телом цикла. Один проход цикла - это шаг или итерация. Переменные, изменяющиеся внутри цикла и влияющие на его окончание, называются параметрами цикла.
В C++ предусмотрены три оператора, реализующих циклический процесс: while, do..while и for
Общий вид цикла for:
