Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_prog.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
163.27 Кб
Скачать

41. Ввод-вывод потоками

Потоки ввода/вывода используются для передачи данных в файловые потоки,

на консоль или на сетевые соединения. Потоки представляют собой объекты со-

ответствующих классов. Библиотека ввода/вывода предоставляет пользователю

большое число классов и методов и постоянно обновляется. Оболочка оперирует с вводимой и выводимой информацией посредством файлов специального вида - ``потоков (streams)''. Стандартный вывод - это файл, в который оболочка выводит результаты работы команд - по умолчанию, на экран Вашего терминала. Стандартный ввод (обычно это клавиатура) является источником данных для команд. Если команда считывает данные из стандартного ввода, она делает это до тех пор, пока Вы не введете Ctrl-d в новой строке. Если команда завершает выполнение с ошибкой, на экран обычно выводится сообщение об ошибке. Это сообщение принадлежит отдельному стандартному потоку для ошибок.

42. Препроцессор. Директивы #include, #define, #if...

Директивой препроцессора (или командной строкой препроцессора[1]) называется строка в исходном коде, которая начинается с символа # и следующего за ним ключевого слова препроцессора. Есть чётко определённый список ключевых слов:define — задаёт макроопределение (макрос) или символическую константу undef — отменяет предыдущее определение include — вставляет текст из указанного файла if — осуществляет условную компиляцию при истинности константного выражения Препроцессор Си, встречая следующие директивы:

#include "..."

или

#include <...>

полностью копирует содержимое указанного файла в файл, в котором указана эта директива, в месте вызова директивы. Эти файлы обычно (хотя скорее, всегда) содержат определение интерфейса для различных функций библиотек и типов данных, которые должны быть подключены перед их использованием; таким образом, директива #include обычно указывается в начале (заголовке) файла. По этой причине подключаемые файлы и называются заголовочными. Некоторые содержат примеры из стандартной библиотеки Си (<math.h> и <stdio.h>), обеспечивая математические функции и функции ввода-вывода соответственно

43. Одномерные массивы. Инициализация одномерных массивов. Ввод и инициализация массива символов. Индексы у одномерных массивов в языке Си начинаются с 0, а в программе одномерный массив объявляется следующим образом: <тип> < ID_массива>[размер]={список начальных значений}; где:тип – базовый тип элементов (целый, вещественный, символьный); размер – количество элементов массива. Список начальных значений используется при необходимости инициализировать данные при объявлении, он может отсутствовать. Размер массива может задаваться константой или константным выражением. Нельзя задавать массив переменного размера. Для этого существует отдельный механизм – динамическое выделение памяти. Пример объявления массива целого типа: int a[5]; В массиве «а» первый элемент: а[0], второй – а[1], … пятый - а[4].

44. Многомерные массивы. Инициализация многомерных массивов. Как уже отмечалось, в языке Си кроме одномерных массивов возможна работа с многомерными массивами. Объявление многомерного массива: <тип> < ID >[размер1][размер2]…[размерN]={{список начальных значений}, {список начальных значений},…}; Наиболее быстро изменяется последний индекс элементов массива, поскольку многомерные массивы в языке Си размещаются в памяти компьютера в последовательности столбцов. Например, элементы двухмерного массива b[3][2] размещаются в памяти компьютера в следующем порядке: b[0][0], b[0][1], b[1][0], b[1][1], b[2][0], b[2][1].

Следующий пример иллюстрирует определение массива целого типа, состоящего из трех строк и четырех столбцов, с одновременным присвоением его элементам (инициализацией) начальных значений: int a[3][4] = {{1,2,0,0},{9,-2,4,1},{-7,0,0,0}};

Если в какой-то группе { } список значений короче, то оставшимся элементам присваивается 0.

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