АГРЕГАТНЫЕ СТРУКТУРЫ ДАННЫХ ЯЗЫКА СИ
.docАГРЕГАТНЫЕ СТРУКТУРЫ ДАННЫХ ЯЗЫКА СИ
Контрольная работа № 2. Агрегатные типы данных
Цель работы – познакомиться с использованием агрегатных типов, таких как одномерные и двумерные массивы, строки, структуры и файлы, для решения различных задач, связанных с хранением и обработкой данных.
Контрольные вопросы
-
Что такое массив?
-
Что представляет собой имя массива?
-
Что представляет собой индекс элемента массива?
-
Как можно обратиться к элементу массива?
-
Как получить адрес элемента массива?
-
Как описать указатель на начало массива?
-
Как обратиться к элементу массива через указатель?
-
Существует ли связь между индексом элемента и его значением?
-
Чему равен индекс первого элемента массива?
-
Как проинициализировать массив?
-
Когда можно не указывать количество элементов массива при описании?
-
Какого типа могут быть элементы массива?
-
Какие операции можно производить над целым массивом?
-
Почему при обработке массивов используют циклы?
-
Как поменять местами два элемента массива?
-
Чему равен индекс последнего элемента массива?
-
Возникнет ли ошибка при обращении к элементу массива, индекс которого больше индекса последнего элемента этого массива?
-
Может ли существовать массив из одного элемента? Если может, то как его описать?
-
Является ли р указателем на массив а[], если они объявлены следующим образом: int a[10], *p=a; ?
-
Что такое сортировка массива?
-
Что такое матрица?
-
Как располагается матрица в памяти компьютера?
-
Как проинициализировать матрицу?
-
Почему при объявлении матрицы с одновременной инициализацией первые скобки можно оставить пустыми, а вторые нет?
-
При обращении к элементу матрицы сначала указывается индекс строки или индекс столбца?
-
Как вывести матрицу таблицей с колонками одинаковой ширины?
-
Что представляет собой имя матрицы?
-
Что представляет собой индекс строки матрицы?
-
Что представляет собой индекс столбца матрицы?
-
Что представляет собой имя строки матрицы?
-
Как получить адрес элемента матрицы?
-
Как получить адрес начала матрицы?
-
Как получить адрес строки матрицы?
-
Чем отличается просмотр элементов матрицы по столбцам от просмотра по строкам?
-
Какова связь между индексами строки и столбца у элементов, лежащих на главной диагонали квадратной матрицы?
-
Какова связь между индексами строки и столбца у элементов, лежащих на побочной диагонали квадратной матрицы?
-
Можно ли просмотреть все элементы матрицы в одном цикле?
-
Как обратиться к некоторому элементу матрицы через указатель на первый элемент матрицы?
-
Как обратиться к элементу матрицы через указатель на начало матрицы?
-
В каких областях оперативной памяти могут располагаться данные при выполнении программы?
-
Какие переменные называют динамическими? Чем они отличаются от статических переменных?
-
С какой целью используют динамические переменные?
-
Как обращаются к динамическим переменным?
-
Какие бывают указатели? Как их описать?
-
Как обозначается операция разыменования? Для чего она используется?
-
Каким образом можно выделять память для динамических переменных и освобождать её?
-
Как определить, выделена память или нет?
-
Почему нельзя забывать освобождать выделенную память?
-
Чему равно значение указателя после освобождения области памяти, на которую он указывал?
-
Как разместить в динамической памяти массив?
-
Как разместить в динамической памяти матрицу?
-
Что такое структурный тип?
-
Как определить размер переменной структурного типа?
-
Как обратиться к полю структуры?
-
Как ввести значение переменной структурного типа?
-
Как вывести значение структуры на экран?
-
Как проинициализировать структуру?
-
Как объявить массив из структур?
-
Способы организации строк.
-
Что такое Си-строка? Чем она отличается от массива символов?
-
Что такое нуль-терминатор?
-
Чем отличается описание char *st от char st[N], где N – некоторая константа?
-
Как инициализировать строку?
-
Чем отличается ввод строки с помощью функции scanf() от ввода с помощью функции gets()?
-
Можно ли использовать операцию присваивания для задания значения строки?
-
Как изменить строку?
-
Что такое конкатенация строк?
-
Какие функции для работы со строками Вы можете назвать?
-
Что такое файл?
-
Для каких целей используется файл?
-
Что такое поток?
-
Как инициализировать поток?
-
Какая функция отвечает за открытие потока? Какие у нее параметры?
-
Какие режимы открытия файла Вы знаете? В чем их отличия друг от друга?
-
Какие ошибки могут возникнуть при открытии файла?
-
В каком случае указатель на поток принимает значение NULL?
-
Какая функция отвечает за закрытие файла? Какие у нее параметры?
-
Сколько раз можно открыть файл в программе?
-
Какие основные функции для работы с файлами Вы знаете?
-
Какова структура текстового файла?
-
Как представлена информация в текстовом файле?
-
Какие функции используются для ввода-вывода данных при работе с текстовыми файлами?
-
Какого типа могут быть компоненты у текстового файла?
-
Как контролировать конец строки и конец текстового файла?
-
Как определить количество записей в текстовом файле?
-
Как удалить запись из текстового файла?
-
Как изменить значения данных в текстовом файле?
-
Может ли существовать пустой файл?
-
Что такое бинарный файл?
-
Как представляется информация бинарном файле?
-
Какого типа могут быть компоненты у бинарного файла?
-
Какие методы доступа к компонентам могут использоваться в бинарном файле?
-
Чем бинарный файл отличается от текстового?
-
Какие функции используются для ввода-вывода данных при работе с бинарными файлами?
-
В чем отличие функции fprintf() от функции fread(), а функции fscanf() от fwrite()?
-
Можно ли работать с текстовым файлом, как с бинарным, и наоборот?
-
Как определить текущую позицию указателя на поток?
-
Как переместить указатель на поток из текущей позиции в заданную?
-
Как просмотреть содержимое бинарного файла?
-
Как добавлять записи в бинарный файл?
-
Как прочитать компоненту с заданным номером из текстового и из бинарного файла?
-
Как изменить значение компоненты в бинарном файле?
Постановка задачи
При решении задач 1, 2 и 3 используется линейный (одномерный) массив. Обращение к элементам массива выполняется с помощью операции []. Ввод элементов массива можно производить с клавиатуры или использовать для заполнения массива генератор случайных чисел. Во время отладки и тестирования программы размер массива можно уменьшить.
Для решения задач 4 и 5 необходимо пользоваться двумерными массивами. Ввод данных можно производить с клавиатуры или использовать для заполнения массива генератор случайных чисел. Во время отладки и тестирования программы размер массива можно уменьшить. При выводе матрицы следить за тем, чтобы ширина всех столбцов матрицы была одинаковой.
При решении задач 6 и 7 используется агрегатный тип – символьный массив. Строка должна вводиться с клавиатуры целиком. Не допускается посимвольный ввод или вывод строки. При решении задач можно использовать функции стандартных библиотек ctype и string.
В случае, когда указано, что задается строка до точки, обрезать строку, отбросив все символы после точки, если точки нет, то считать, что строка ограничена точкой.
При решении задачи 8 необходимо создать массив, содержащий структуры. Размер массива на усмотрение студента, но не менее 5 записей. Ввод данных выполняется с клавиатуры, вывод – на экран. Программа должна содержать формирование массива, вывод данных на экран в виде таблицы, решение указанных в варианте подзадач.
Задачи 9-11 предназначены для освоения приемов работы с текстовыми файлами. Файл, содержащий исходные данные должен быть создан в текстовом редакторе (например, Блокнот) и иметь расширение .txt. Результаты работы программы либо помещаются в текстовый файл, либо выводятся на экран (в соответствии с заданием). Программы обязательно должны содержать контроль корректности выполнения операций открытия потоков и чтения/записи данных.
В задачах 9 и 10 не рекомендуется использовать массивы, кроме случаев, когда это явно требуется в задании. В задаче 11 данные из текстового файла следует сначала считать в массив (одномерный или двумерный), произвести необходимую обработку массива, а затем результаты вывести в файл.
При решении задач 12 и 13 требуется использовать бинарные файлы. Для решения каждой задачи необходимо 3 программы: 1-я - для создания файла (файлов) с исходными данными; 2-я - для вывода содержимого бинарного файла на экран; 3-я – для чтения и обработки бинарного файла. Содержимое исходных и результирующих файлов вывести на экран.
К задачам 1, 4 и 7 должны быть нарисованы блок-схемы.
Варианты заданий
-
Вычислить , где Sп и Sо – суммы положительных и отрицательных элементов массива А (70).
-
Сформировать новый массив из элементов массива М (25), встречающихся в этом массиве только один раз.
-
Определить, представляют ли собой элементы массива А (20) возрастающую последовательность.
-
Заполнить матрицу А (7х8) следующим образом: на главной диагонали – «0», над диагональю – «1», под диагональю – «-1».
-
Дана матрица А(10х10). Отсортировать элементы, лежащие на главной диагонали, в порядке возрастания.
-
Дана строка символов до точки. Заменить в строке первую букву каждого слова со строчной на заглавную.
-
Дана строка, состоящая из букв и цифр. Проверить, является ли данная строка представлением числа в шестнадцатеричной системе счисления.
-
Сформировать массив, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например от 2 до 5. Вывести названия игрушек, которые подходят детям определенного возраста и стоят не больше определенной суммы. Получить сведения о самом дорогом конструкторе.
-
Дан текстовый файл, в каждой строке которого среди различных символов встречается некоторое количество точек. Найти номер строки, в которой точек больше и записать эту строку в другой текстовый файл.
-
Дан текстовый файл, в котором содержатся целые числа. Определить среднее арифметическое положительных чисел в каждой строке и записать результаты в другой текстовый файл с указанием номера строки исходного файла.
-
В текстовом файле построчно хранится целочисленная матрица размером 6х5. Заменить в ней все числа, кратные 7, наибольшим значением матрицы. Полученную матрицу дописать в тот же файл, пропустив 2 строки.
-
Компоненты бинарного файла – вещественные числа. Поменять местами первый компонент файла с минимальным, а последний – с максимальным.
-
Компоненты заданного бинарного файла – целочисленные массивы, состоящие из 5 элементов каждый. Записать в текстовый файл четвертые элементы всех массивов.
-
Определить количество элементов массива М (22), больших среднего арифметического значения элементов этого массива.
-
В массиве А (45) найти локальные максимумы, определить их местоположение. Локальным максимумом назовем элемент массива, значение которого больше, чем значения двух соседних с ним элементов.
-
Вставить число 0 в середину массива М (20), предварительно сдвинув вправо значения элементов массива, начиная с 11-го.
-
Определить среднее арифметическое значение элементов матрицы А (8х8), лежащих на главной диагонали.
-
Дана вещественная матрица D (7х9). Упорядочить (переставить) строки матрицы по не убыванию наименьших элементов строк.
-
Дана строка символов до точки. Удалить из строки первые буквы каждого слова.
-
Дана строка, состоящая из букв от А до J. Составить новую строку из цифр от 0 (соответствует цифре А) до 9 (соответствует цифре J).
-
Сформировать массив, содержащий сведения о спортсменах: фамилия, пол, вид спорта, год рождения, рост. Найти самого высокого спортсмена, занимающегося плаванием, среди мужчин. Вывести сведения о спортсменках, выступающих в юниорском разряде.
-
В текстовом файле хранится некоторый текст. Определить количество строк, в которых встречается не меньше двух ‘!’ и длина строки больше заданного числа n.
-
Дан текстовый файл, содержащий целые числа. Нормировать файл, поделив каждую компоненту файла на среднее арифметическое всех чисел. Результат записать в новый текстовый файл.
-
В текстовом файле построчно хранится целочисленная матрица 3х7. Заменить в ней все отрицательные элементы минимальным, положительные – максимальным, а нулевые – разностью максимального и минимального элементов, и результат записать в другой текстовый файл. Исходную и полученную матрицы вывести на экран.
-
Компоненты заданного бинарного файла – вещественные числа. Изменить знак у каждого третьего числа на противоположный.
-
Компоненты бинарного файла – целочисленные массивы, состоящие из 3 элементов каждый. Записать в новый текстовый файл тот массив, сумма элементов которого максимальна.
-
Вычислить сумму отрицательных элементов массива D (19), кратных четырем.
-
Сформировать новый упорядоченный по убыванию массив из двух упорядоченных в том же порядке массивов А(12) и В(20).
-
Удалить из массива М (25) все элементы, значения которых в этом массиве повторяются, оставив по одному.
-
Вычислить , где Xmin и Xmax – минимальный и максимальный элементы матрицы X (6х8).
-
Дана матрица А(9х10). Расставить столбцы таким образом, чтобы элементы в первой строке были упорядочены по возрастанию.
-
Дана символьная строка. Поменять местами первый символ ‘d’ и последний символ ‘f’ в заданной строке.
-
Дана строка, состоящая из букв и цифр. Преобразовать ее так, чтобы сначала шли буквы, а потом – все цифры исходной строки.
-
Сформировать массив, содержащий сведения о наличии билетов на рейсы Аэрофлота. Структура записи: номер рейса, пункт назначения, время вылета, цена билета, количество свободных мест в салоне. Произвести корректировку данных в файле при продаже билетов, исходные данные – номер рейса и количество проданных билетов. Получить сведения о наличии мест, цене билета и времени вылета для определенного рейса.
-
В текстовом файле хранятся слова, разделенные пробелами. В каждой строке найти самое длинное слово и записать результат в другой текстовый файл.
-
Дан текстовый файл, содержащий целые числа. Построчно переписать в новый текстовый файл только те числа, которые принадлежат заданному интервалу [a, b]. Подсчитать общее количество таких чисел и добавить эту информацию в конец полученного файла.
-
В первой строке текстового файла хранится размер одномерного массива (не более 100 элементов). В остальных строках хранятся элементы этого массива. Поменять местами максимальный и минимальный элементы этого массива и результат поместить в новый текстовый файл, располагая элементы массива по 5 значений в строке.
-
Компоненты бинарного файла – целые числа. Создать новый файл, в который записать общее количество компонент исходного файла, их максимальное и минимальное значение.
-
Компоненты заданного бинарного файла – целочисленные массивы, состоящие из 5 элементов. Вывести на экран те массивы из этого файла, которые не содержат отрицательных элементов.
-
Найти 2 первых элемента в массиве С (17), значения которых не попадают в заданный с клавиатуры диапазон [A, B]. Поменять их местами.
-
В массиве А (35) найти минимум, определить его местоположение (если минимальных значений несколько, то вывести индексы всех таких элементов).
-
Определить, есть ли в массиве Q (10) заданное число Х, и если есть, то удалить его (если встречается неоднократно, то удалить все), а если нет, то добавить в конец массива.
-
Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы С (6х6). Заменить этим значением все диагональные элементы матрицы.
-
Дана вещественная матрица М (9х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех строк, кроме последней.
-
Дана строка символов. Инвертировать все слова в этой строке, последовательность слов сохранить.
-
Дана строка символов до точки. Удалить из нее все повторные вхождения букв.
-
Сформировать массив, содержащий информацию о наличии семян в магазине: название растения, время (месяц) высадки, количество семян в упаковке, стоимость одной упаковки. Вывести названия растений, семена которых можно высаживать с марта по май. Провести корректировку цены для семян определенного названия.
-
Текстовый файл содержит последовательность слов, разделенных пробелами. Переписать в новый текстовый файл строку, содержащую наибольшее количество слов. Если таких строк несколько, перепишите первые три.
-
Результаты измерения температур за некоторый период хранятся в текстовом файле (количество измерений кратно 7). Определить среднее значение положительных температур за каждую неделю и записать результаты в новый текстовый файл.
-
В первой строке текстового файла хранится размер прямоугольной матрицы (не более 6х7). Далее элементы матрицы размещены построчно. Прочитать матрицу из текстового файла. Заменить в ней на нули элементы строки, где находится минимальный элемент. Преобразованную матрицу записать в новый текстовый файл.
-
Компоненты бинарного файла – целые числа. Добавить после каждого положительного числа его квадрат, нули удалить.
-
Компоненты бинарного файла – массивы, состоящие из 7 вещественных чисел. Вывести на экран те из них, которые не содержат нулей.
-
Вычислить , где Kп и Kо – суммы положительных и отрицательных элементов массива Z (65).
-
Поменять местами максимальный отрицательный и первый положительный элементы массива В (18).
-
Упорядочить массив А (50) в порядке убывания.
-
Определить, является ли данная квадратная матрица симметричной относительно своей побочной диагонали.
-
Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов соответствующего столбца заданной целочисленной матрицы.
-
Дана строка символов. Найти длину каждого слова в заданной строке.
-
Дана строка символов до точки. Подсчитать, сколько и каких знаков препинания она содержит.
-
Сформировать массив, содержащий сведения о животных зоопарка: название животного, природная зона, затраты на корм за один день. Вывести количество животных определенной природной зоны, находящихся в зоопарке, и определить, сколько денег тратится на содержание определенного животного в месяц.
-
В текстовом файле хранится последовательность слов, разделенных одним или несколькими пробелами. Преобразовать файл, удалив из него все однобуквенные слова и лишние пробелы.
-
Дан текстовый файл f, компонентами которого являются вещественные числа. Используя вспомогательный файл, создать новый файл r, в котором записаны сначала положительные элементы файла f, а затем все остальные.
-
В первой строке текстового файла хранится размер вещественной матрицы (количество строк и столбцов). Размер матрицы не больше, чем 5х7. В остальных строках – элементы матрицы. Прочитать из файла матрицу и заменить в ней все отрицательные числа нулями. Преобразованную матрицу записать в новый текстовый файл.
-
Компоненты бинарного файла – целые числа. Удалить из этого файла максимальное и минимальное число.
-
Компоненты заданного бинарного файла – массивы, состоящие из 6 вещественных чисел каждый. Вывести на экран тот из них, сумма отрицательных элементов которого больше.
-
Вычислить сумму элементов массива М (15), значения которых лежат в введенном с клавиатуры диапазоне [X, Y].
-
Удалить из массива А (20) первый отрицательный элемент.
-
Расставить элементы массива Х(50) в порядке убывания.
-
Преобразовать матрицу Р (7х7) таким образом, чтобы минимальные элементы строк оказались на побочной диагонали.
-
Дана матрица размером 7х7. Поменять местами k-й столбец с k-ой строкой (k вводится с клавиатуры).
-
Дана строка символов. Найти в строке самое длинное слово и вывести его на экран.
-
Дана символьная строка. Проверить, все ли слова после точки начинаются с заглавной буквы. Если нет – исправить.
-
Сформировать массив, содержащий сведения о поступивших в продажу автомобилях. Записи содержат следующие поля: марка автомобиля, страна-производитель, год выпуска, объем двигателя, расход бензина на 100 км, цена, количество экземпляров. Скорректировать данные об определенном автомобиле при изменении на него цены. Вывести марку автомобиля с определенным объемом двигателя и наименьшим расходом бензина.
-
В текстовом файле хранится некоторый текст. Отредактировать текст, удаляя лишние пробелы между словами.
-
Дан текстовый файл, содержащий целые числа. Определить, сколько четных чисел в каждой строке этого файла, и результаты записать в новый файл с указанием номера строки.
-
В текстовом файле построчно хранится квадратная вещественная матрица размером не более 10х10. Считать матрицу из файла, транспонировать ее и записать ее в новый файл.
-
Компоненты бинарного файла – целые числа. Удалить из него все нули. Добавить в начало файла количество отрицательных компонентов, а в конец – количество положительных.
-
Компоненты заданного бинарного файла – массивы, состоящие из 3 вещественных чисел каждый. Записать в новый текстовый файл тот из них, в котором второй элемент больше, чем в остальных.
-
Поменять местами максимальный и последний отрицательный элементы массива А (40).
-
Сформировать новый массив из элементов заданного целочисленного массива М (50), кратных 7 или содержащих в записи числа цифру 7.
-
Определить, есть ли в массиве Q (35) заданное число Х, и если есть, то удалить его (если встречается неоднократно, то удалить последнее вхождение).
-
Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы В (8х8). Заменить этим значением все элементы матрицы, не лежащие на диагоналях.
-
Отсортировать строки матрицы М (8х5) в порядке возрастания.
-
Дана строка символов до точки. Определить, сколько слов, состоящих из 5 и более символов, содержит данная строка.
-
Дана строка символов, состоящая из букв и цифр. Найти количество букв в данной строке.
-
Сформировать массив, содержащий информацию о курортах мира: страна, город, название отеля, класс отеля, стоимость проживания за один день, стоимость проезда в оба конца. Вывести сведения об отелях определенного класса, где стоимость проживания за неделю наименьшая. Определить среднюю стоимость тура на неделю в определенный класс отеля, включая стоимость проживания и стоимость проезда.
-
Дан текстовый файл, в котором находится произвольный текст. Создать новый текстовый файл, в который поместить каждое предложение из старого, начиная с новой строки и отступив от начала строки 5 пробелов.
-
Имеется текстовый файл, содержащий целые числа. Определить сколько раз в нем повторяется минимальное значение. Результат дописать в исходный файл.
-
В текстовом файле построчно хранится вещественная матрица размером не более 5х6. Добавить в эту матрицу столбец, содержащий суммы элементов каждой строки. Преобразованную матрицу записать в новый текстовый файл.
-
Компоненты бинарного файла – целые числа. Удалить из этого файла все числа, расположенные между первым и последним отрицательными компонентами.
-
Компоненты заданного бинарного файла – массивы, состоящие из 5 вещественных чисел каждый. В новый текстовый файл записать суммы положительных элементов каждого из массивов.
-
Заменить все четные элементы массива А (19) на их квадраты, нечетные удвоить. Проверить, изменилась ли сумма элементов массива.
-
Вычислить среднее арифметическое максимального и минимального элементов массива М(100).
-
Удалить из массива В (50) все элементы, кратные 3 или 5.
-
Вычислить сумму всех элементов матрицы В (10х10), лежащих слева от главной диагонали.
-
Дана вещественная матрица D (7х9). Упорядочить (переставить) строки матрицы по возрастанию сумм элементов строк.
-
Дана строка символов до точки. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним пробелом.
-
Дана строка символов до точки. Записать новую строку из слов заданной, содержащих букву «М».
-
Сформировать массив, содержащий сведения о химических элементах: название, символическое обозначение, массу атома, заряд ядра. Вывести сведения о химическом элементе по его символическому названию. Найти элемент с самой большой массой и наименьшим зарядом ядра.
-
Дан текстовый файл, содержащий некоторый текст. Отредактировать исходный файл по правилу: в четных строках вставить символ ‘!’ после каждой буквы ‘a’.
-
Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл.
-
Дан текстовый файл, содержащий построчно целочисленную матрицу размером 5х5. Прочитать матрицу из файла и преобразовать ее, поделив каждый элемент на значение минимума. Полученную матрицу записать в новый текстовый файл.
-
Компоненты бинарного файла – целые числа. Удалить из этого файла все положительные числа, кратные 3, добавив в конец файла их количество.
-
Компоненты бинарного файла – массивы, состоящие из 10 вещественных чисел. Вывести на экран максимальные элементы всех массивов.