Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_ekzamen_po_OAiP_shpora.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
231.42 Кб
Скачать
  1. Ввод/вывод потоками (cin, cout).

Поток - это абстрактное понятие расширенной версии языка Си, ко­торое относится к любому переносу данных от источника к приемнику. Для ввода-вывода используются две переопределенные операции побитового сдвига <<, >>.

Формат записи:

cout << ID переменной;

cin >> ID переменной;

Стандартный поток вывода cout - по умолчанию подключен к монито­ру, ввода cin - к клавиатуре.

Для их работы необходимо подключить файл iostream.h.

Пример программы демонстрирующий работу потоков ввода-вывода:

#include<iostream.h>

#include<conio.h>

void main (void)

{

int i, j, k;

cout«" Hello!"« endl; // end line - переход на новую строку

cout«" Input i, j";

cin >> i >>j;

k = i+j;

cout << " Sum i, j = " << k << endl;

}

Манипуляторы потоков:

setprecision(n) // установка числа разрядов справаот десятичной точки выводимого значения, // где n число разрядов.

setw(k)// установка числа позиций в которое выводится значение, где к число позиций.

Для их работы необходимо подключить файл iomanip.h.

  1. Синтаксис операторов языка c, операторы-выражения, управляющие операторы в языке с.

Операторы языка Си можно разделить на три группы:

операторы-декларации (рассмотрены ранее);

операторы преобразования объектов;

операторы управления процессом выполнения алгоритма.

Преобразование объектов производит­ся посредством записи выражений. Простейший вид операторов - выражение, заканчивающееся симво­лом " ; " (точка с запятой). Простые операторы преобразования:

оператор присваивания (выполнение опера­ций присваивания);

оператор вызова функции (выполнение операции вы­зова функции);

пустой оператор «;».

К управляющим операторам относятся:

операторы условного if и безусловного переходов goto;

оператор выбора альтернатив (переключатель) switch;

операторы организации циклов for, while, do и передачи управления (перехода) break, exit, return, continue.

  1. Арифметические операции, преобразование типов операндов арифметических операций. Средство "typedef".

Арифметические операции - бинарные, их обозначения:

+ (сложение);

- (вычитание);

/ (деление, для int операндов - с отбрасыванием остатка);

* (умножение);

% (остаток от деления целочисленных операндов со знаком первого операнда - деление «по модулю»).

Операндами традиционных арифметических операций (+ - * /) могут быть константы, переменные, функции, элементы массивов, указатели, любые арифметические выражения.

Порядок выполнения операций:

1) выражения в круглых скобках;

2) функции (стандартные математические, функции пользователя);

3) операции * / (выполняются слева направо);

4) операции - + (слева направо).

Унарные операции +,– (знак числа) обладают самым высоким приоритетом, определены только для целых и вещественных операндов, «+» носит только информационный характер, «–» меняет знак операнда на противоположный. Таким образом, т.к. операции *, /, % обладают высшим приоритетом над операциями +, -, при записи сложных выражений нужно использовать общепринятые математические правила:

x+yz -x+y*z - a /(b+с) .

В операциях могут участвовать операнды различных типов, в этом случае они преобразуются к общему типу в порядке увеличения их "размера памяти", т.е. объема памяти, необходимого для хранения их значений. Поэтому неявные преобразования всегда идут от "меньших" объектов к "большим". Схема выполнения преобразований операндов арифметических операций:

short, char int unsigned long double

float double

Стрелки отмечают преобразования даже однотипных операндов перед выполнением операции, т.е. действуют следующие правила:

-значения типов char и short всегда преобразуются в int;

-если любой из операндов (a или b) имеет тип double, то второй преобразуется в double;

- если один из операндов long, то другой преобразуется в long.

Результатом 1/3 будет «0», чтобы избежать такого рода ошибок необходимо явно изменять тип хотя бы одного операнда.Типы char и int могут свободно смешиваться в арифметических выражениях. Каждая переменная типа char автоматически преобразуется в int, что обеспечивает значительную гибкость при проведении определенных преобразований символов.

При присваивании значение правой части преобразуется к типу левой, который и является типом результата. И здесь необходимо быть внимательным, т.к. при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int в char старший байт просто отбрасывается.

Пусть имеются значения:

float x; int i;

тогда

x=i; и i=x;

приводят к преобразованиям, причем float преобразуется в int с отбрасыванием дробной части. Тип double преобразуется во float округлением. Длинное целое преобразуется в более короткое целое и char посредством отбрасывания лишних бит более высокого порядка.

При передаче данных функциям также происходит преобразование типов: в частности, char становится int, а float - double.

Любому типу данных, как стандартному, так и определенному пользователем, можно задать новое имя с помощью операции

typedef <тип> <новое_имя>;

Введенный таким образом новый тип используется аналогично стандартным типам, например, введя пользовательские типы:

typedef int INT;

typedef char Mass_str[100];

декларации идентификаторов введенных типов имеют вид:

INT i, j; → две переменные i и j типа int;

Mass_str str[10]; → массив str из 10 строк по 100 символов.

  1. Линейный алгоритм. Операции присваивания, разновидности сокращений записи операции присваивания.

Линейный алгоритм - алгоритм, все этапы которого выполняются однократно и строго последовательно.

Формат операции присваивания:

идентификатор = <выражение>;

Присваивание значения в языке Cи в отличие от традиционной интерпретации рассматривается как выражение имеющее значение левого операнда после присваивания. Таким образом, присваивание может включать несколько операций присваивания, изменяя значения нескольких операндов, например:

int i, j, k;

float x, y, z;

...

i = j = k = 0; ↔ k = 0, j = k, i = j;

x = i+(y = 3) - (z = 0); ↔ z = 0, y = 3, x = i + y - z;

Левым операндом операции присваивания может быть только именованная либо косвенно адресуемая указателем переменная. Примеры недопустимых выражений:

а) присваивание константе: 2 = x+y;

б) присваивание функции: getch() = i;

в) присваивание результату операции: (i+1) = 2+y;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]