Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

АГРЕГАТНЫЕ СТРУКТУРЫ ДАННЫХ ЯЗЫКА СИ

.doc
Скачиваний:
33
Добавлен:
26.03.2015
Размер:
130.56 Кб
Скачать

АГРЕГАТНЫЕ СТРУКТУРЫ ДАННЫХ ЯЗЫКА СИ

Контрольная работа № 2. Агрегатные типы данных

Цель работы – познакомиться с использованием агрегатных типов, таких как одномерные и двумерные массивы, строки, структуры и файлы, для решения различных задач, связанных с хранением и обработкой данных.

Контрольные вопросы

  1. Что такое массив?

  2. Что представляет собой имя массива?

  3. Что представляет собой индекс элемента массива?

  4. Как можно обратиться к элементу массива?

  5. Как получить адрес элемента массива?

  6. Как описать указатель на начало массива?

  7. Как обратиться к элементу массива через указатель?

  8. Существует ли связь между индексом элемента и его значением?

  9. Чему равен индекс первого элемента массива?

  10. Как проинициализировать массив?

  11. Когда можно не указывать количество элементов массива при описании?

  12. Какого типа могут быть элементы массива?

  13. Какие операции можно производить над целым массивом?

  14. Почему при обработке массивов используют циклы?

  15. Как поменять местами два элемента массива?

  16. Чему равен индекс последнего элемента массива?

  17. Возникнет ли ошибка при обращении к элементу массива, индекс которого больше индекса последнего элемента этого массива?

  18. Может ли существовать массив из одного элемента? Если может, то как его описать?

  19. Является ли р указателем на массив а[], если они объявлены следующим образом: int a[10], *p=a; ?

  20. Что такое сортировка массива?

  21. Что такое матрица?

  22. Как располагается матрица в памяти компьютера?

  23. Как проинициализировать матрицу?

  24. Почему при объявлении матрицы с одновременной инициализацией первые скобки можно оставить пустыми, а вторые нет?

  25. При обращении к элементу матрицы сначала указывается индекс строки или индекс столбца?

  26. Как вывести матрицу таблицей с колонками одинаковой ширины?

  27. Что представляет собой имя матрицы?

  28. Что представляет собой индекс строки матрицы?

  29. Что представляет собой индекс столбца матрицы?

  30. Что представляет собой имя строки матрицы?

  31. Как получить адрес элемента матрицы?

  32. Как получить адрес начала матрицы?

  33. Как получить адрес строки матрицы?

  34. Чем отличается просмотр элементов матрицы по столбцам от просмотра по строкам?

  35. Какова связь между индексами строки и столбца у элементов, лежащих на главной диагонали квадратной матрицы?

  36. Какова связь между индексами строки и столбца у элементов, лежащих на побочной диагонали квадратной матрицы?

  37. Можно ли просмотреть все элементы матрицы в одном цикле?

  38. Как обратиться к некоторому элементу матрицы через указатель на первый элемент матрицы?

  39. Как обратиться к элементу матрицы через указатель на начало матрицы?

  40. В каких областях оперативной памяти могут располагаться данные при выполнении программы?

  41. Какие переменные называют динамическими? Чем они отличаются от статических переменных?

  42. С какой целью используют динамические переменные?

  43. Как обращаются к динамическим переменным?

  44. Какие бывают указатели? Как их описать?

  45. Как обозначается операция разыменования? Для чего она используется?

  46. Каким образом можно выделять память для динамических переменных и освобождать её?

  47. Как определить, выделена память или нет?

  48. Почему нельзя забывать освобождать выделенную память?

  49. Чему равно значение указателя после освобождения области памяти, на которую он указывал?

  50. Как разместить в динамической памяти массив?

  51. Как разместить в динамической памяти матрицу?

  52. Что такое структурный тип?

  53. Как определить размер переменной структурного типа?

  54. Как обратиться к полю структуры?

  55. Как ввести значение переменной структурного типа?

  56. Как вывести значение структуры на экран?

  57. Как проинициализировать структуру?

  58. Как объявить массив из структур?

  59. Способы организации строк.

  60. Что такое Си-строка? Чем она отличается от массива символов?

  61. Что такое нуль-терминатор?

  62. Чем отличается описание char *st от char st[N], где N – некоторая константа?

  63. Как инициализировать строку?

  64. Чем отличается ввод строки с помощью функции scanf() от ввода с помощью функции gets()?

  65. Можно ли использовать операцию присваивания для задания значения строки?

  66. Как изменить строку?

  67. Что такое конкатенация строк?

  68. Какие функции для работы со строками Вы можете назвать?

  69. Что такое файл?

  70. Для каких целей используется файл?

  71. Что такое поток?

  72. Как инициализировать поток?

  73. Какая функция отвечает за открытие потока? Какие у нее параметры?

  74. Какие режимы открытия файла Вы знаете? В чем их отличия друг от друга?

  75. Какие ошибки могут возникнуть при открытии файла?

  76. В каком случае указатель на поток принимает значение NULL?

  77. Какая функция отвечает за закрытие файла? Какие у нее параметры?

  78. Сколько раз можно открыть файл в программе?

  79. Какие основные функции для работы с файлами Вы знаете?

  80. Какова структура текстового файла?

  81. Как представлена информация в текстовом файле?

  82. Какие функции используются для ввода-вывода данных при работе с текстовыми файлами?

  83. Какого типа могут быть компоненты у текстового файла?

  84. Как контролировать конец строки и конец текстового файла?

  85. Как определить количество записей в текстовом файле?

  86. Как удалить запись из текстового файла?

  87. Как изменить значения данных в текстовом файле?

  88. Может ли существовать пустой файл?

  89. Что такое бинарный файл?

  90. Как представляется информация бинарном файле?

  91. Какого типа могут быть компоненты у бинарного файла?

  92. Какие методы доступа к компонентам могут использоваться в бинарном файле?

  93. Чем бинарный файл отличается от текстового?

  94. Какие функции используются для ввода-вывода данных при работе с бинарными файлами?

  95. В чем отличие функции fprintf() от функции fread(), а функции fscanf() от fwrite()?

  96. Можно ли работать с текстовым файлом, как с бинарным, и наоборот?

  97. Как определить текущую позицию указателя на поток?

  98. Как переместить указатель на поток из текущей позиции в заданную?

  99. Как просмотреть содержимое бинарного файла?

  100. Как добавлять записи в бинарный файл?

  101. Как прочитать компоненту с заданным номером из текстового и из бинарного файла?

  102. Как изменить значение компоненты в бинарном файле?

Постановка задачи

При решении задач 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 должны быть нарисованы блок-схемы.

Варианты заданий

  1. Вычислить , где Sп и Sо – суммы положительных и отрицательных элементов массива А (70).

  2. Сформировать новый массив из элементов массива М (25), встречающихся в этом массиве только один раз.

  3. Определить, представляют ли собой элементы массива А (20) возрастающую последовательность.

  4. Заполнить матрицу А (7х8) следующим образом: на главной диагонали – «0», над диагональю – «1», под диагональю – «-1».

  5. Дана матрица А(10х10). Отсортировать элементы, лежащие на главной диагонали, в порядке возрастания.

  6. Дана строка символов до точки. Заменить в строке первую букву каждого слова со строчной на заглавную.

  7. Дана строка, состоящая из букв и цифр. Проверить, является ли данная строка представлением числа в шестнадцатеричной системе счисления.

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

  9. Дан текстовый файл, в каждой строке которого среди различных символов встречается некоторое количество точек. Найти номер строки, в которой точек больше и записать эту строку в другой текстовый файл.

  10. Дан текстовый файл, в котором содержатся целые числа. Определить среднее арифметическое положительных чисел в каждой строке и записать результаты в другой текстовый файл с указанием номера строки исходного файла.

  11. В текстовом файле построчно хранится целочисленная матрица размером 6х5. Заменить в ней все числа, кратные 7, наибольшим значением матрицы. Полученную матрицу дописать в тот же файл, пропустив 2 строки.

  12. Компоненты бинарного файла – вещественные числа. Поменять местами первый компонент файла с минимальным, а последний – с максимальным.

  13. Компоненты заданного бинарного файла – целочисленные массивы, состоящие из 5 элементов каждый. Записать в текстовый файл четвертые элементы всех массивов.

  1. Определить количество элементов массива М (22), больших среднего арифметического значения элементов этого массива.

  2. В массиве А (45) найти локальные максимумы, определить их местоположение. Локальным максимумом назовем элемент массива, значение которого больше, чем значения двух соседних с ним элементов.

  3. Вставить число 0 в середину массива М (20), предварительно сдвинув вправо значения элементов массива, начиная с 11-го.

  4. Определить среднее арифметическое значение элементов матрицы А (8х8), лежащих на главной диагонали.

  5. Дана вещественная матрица D (7х9). Упорядочить (переставить) строки матрицы по не убыванию наименьших элементов строк.

  6. Дана строка символов до точки. Удалить из строки первые буквы каждого слова.

  7. Дана строка, состоящая из букв от А до J. Составить новую строку из цифр от 0 (соответствует цифре А) до 9 (соответствует цифре J).

  8. Сформировать массив, содержащий сведения о спортсменах: фамилия, пол, вид спорта, год рождения, рост. Найти самого высокого спортсмена, занимающегося плаванием, среди мужчин. Вывести сведения о спортсменках, выступающих в юниорском разряде.

  9. В текстовом файле хранится некоторый текст. Определить количество строк, в которых встречается не меньше двух ‘!’ и длина строки больше заданного числа n.

  10. Дан текстовый файл, содержащий целые числа. Нормировать файл, поделив каждую компоненту файла на среднее арифметическое всех чисел. Результат записать в новый текстовый файл.

  11. В текстовом файле построчно хранится целочисленная матрица 3х7. Заменить в ней все отрицательные элементы минимальным, положительные – максимальным, а нулевые – разностью максимального и минимального элементов, и результат записать в другой текстовый файл. Исходную и полученную матрицы вывести на экран.

  12. Компоненты заданного бинарного файла – вещественные числа. Изменить знак у каждого третьего числа на противоположный.

  13. Компоненты бинарного файла – целочисленные массивы, состоящие из 3 элементов каждый. Записать в новый текстовый файл тот массив, сумма элементов которого максимальна.

  1. Вычислить сумму отрицательных элементов массива D (19), кратных четырем.

  2. Сформировать новый упорядоченный по убыванию массив из двух упорядоченных в том же порядке массивов А(12) и В(20).

  3. Удалить из массива М (25) все элементы, значения которых в этом массиве повторяются, оставив по одному.

  4. Вычислить , где Xmin и Xmax – минимальный и максимальный элементы матрицы X (6х8).

  5. Дана матрица А(9х10). Расставить столбцы таким образом, чтобы элементы в первой строке были упорядочены по возрастанию.

  6. Дана символьная строка. Поменять местами первый символ ‘d’ и последний символ ‘f’ в заданной строке.

  7. Дана строка, состоящая из букв и цифр. Преобразовать ее так, чтобы сначала шли буквы, а потом – все цифры исходной строки.

  8. Сформировать массив, содержащий сведения о наличии билетов на рейсы Аэрофлота. Структура записи: номер рейса, пункт назначения, время вылета, цена билета, количество свободных мест в салоне. Произвести корректировку данных в файле при продаже билетов, исходные данные – номер рейса и количество проданных билетов. Получить сведения о наличии мест, цене билета и времени вылета для определенного рейса.

  9. В текстовом файле хранятся слова, разделенные пробелами. В каждой строке найти самое длинное слово и записать результат в другой текстовый файл.

  10. Дан текстовый файл, содержащий целые числа. Построчно переписать в новый текстовый файл только те числа, которые принадлежат заданному интервалу [a, b]. Подсчитать общее количество таких чисел и добавить эту информацию в конец полученного файла.

  11. В первой строке текстового файла хранится размер одномерного массива (не более 100 элементов). В остальных строках хранятся элементы этого массива. Поменять местами максимальный и минимальный элементы этого массива и результат поместить в новый текстовый файл, располагая элементы массива по 5 значений в строке.

  12. Компоненты бинарного файла – целые числа. Создать новый файл, в который записать общее количество компонент исходного файла, их максимальное и минимальное значение.

  13. Компоненты заданного бинарного файла – целочисленные массивы, состоящие из 5 элементов. Вывести на экран те массивы из этого файла, которые не содержат отрицательных элементов.

  1. Найти 2 первых элемента в массиве С (17), значения которых не попадают в заданный с клавиатуры диапазон [A, B]. Поменять их местами.

  2. В массиве А (35) найти минимум, определить его местоположение (если минимальных значений несколько, то вывести индексы всех таких элементов).

  3. Определить, есть ли в массиве Q (10) заданное число Х, и если есть, то удалить его (если встречается неоднократно, то удалить все), а если нет, то добавить в конец массива.

  4. Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы С (6х6). Заменить этим значением все диагональные элементы матрицы.

  5. Дана вещественная матрица М (9х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех строк, кроме последней.

  6. Дана строка символов. Инвертировать все слова в этой строке, последовательность слов сохранить.

  7. Дана строка символов до точки. Удалить из нее все повторные вхождения букв.

  8. Сформировать массив, содержащий информацию о наличии семян в магазине: название растения, время (месяц) высадки, количество семян в упаковке, стоимость одной упаковки. Вывести названия растений, семена которых можно высаживать с марта по май. Провести корректировку цены для семян определенного названия.

  9. Текстовый файл содержит последовательность слов, разделенных пробелами. Переписать в новый текстовый файл строку, содержащую наибольшее количество слов. Если таких строк несколько, перепишите первые три.

  10. Результаты измерения температур за некоторый период хранятся в текстовом файле (количество измерений кратно 7). Определить среднее значение положительных температур за каждую неделю и записать результаты в новый текстовый файл.

  11. В первой строке текстового файла хранится размер прямоугольной матрицы (не более 6х7). Далее элементы матрицы размещены построчно. Прочитать матрицу из текстового файла. Заменить в ней на нули элементы строки, где находится минимальный элемент. Преобразованную матрицу записать в новый текстовый файл.

  12. Компоненты бинарного файла – целые числа. Добавить после каждого положительного числа его квадрат, нули удалить.

  13. Компоненты бинарного файла – массивы, состоящие из 7 вещественных чисел. Вывести на экран те из них, которые не содержат нулей.

  1. Вычислить , где Kп и Kо – суммы положительных и отрицательных элементов массива Z (65).

  2. Поменять местами максимальный отрицательный и первый положительный элементы массива В (18).

  3. Упорядочить массив А (50) в порядке убывания.

  4. Определить, является ли данная квадратная матрица симметричной относительно своей побочной диагонали.

  5. Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов соответствующего столбца заданной целочисленной матрицы.

  6. Дана строка символов. Найти длину каждого слова в заданной строке.

  7. Дана строка символов до точки. Подсчитать, сколько и каких знаков препинания она содержит.

  8. Сформировать массив, содержащий сведения о животных зоопарка: название животного, природная зона, затраты на корм за один день. Вывести количество животных определенной природной зоны, находящихся в зоопарке, и определить, сколько денег тратится на содержание определенного животного в месяц.

  9. В текстовом файле хранится последовательность слов, разделенных одним или несколькими пробелами. Преобразовать файл, удалив из него все однобуквенные слова и лишние пробелы.

  10. Дан текстовый файл f, компонентами которого являются вещественные числа. Используя вспомогательный файл, создать новый файл r, в котором записаны сначала положительные элементы файла f, а затем все остальные.

  11. В первой строке текстового файла хранится размер вещественной матрицы (количество строк и столбцов). Размер матрицы не больше, чем 5х7. В остальных строках – элементы матрицы. Прочитать из файла матрицу и заменить в ней все отрицательные числа нулями. Преобразованную матрицу записать в новый текстовый файл.

  12. Компоненты бинарного файла – целые числа. Удалить из этого файла максимальное и минимальное число.

  13. Компоненты заданного бинарного файла – массивы, состоящие из 6 вещественных чисел каждый. Вывести на экран тот из них, сумма отрицательных элементов которого больше.

  1. Вычислить сумму элементов массива М (15), значения которых лежат в введенном с клавиатуры диапазоне [X, Y].

  2. Удалить из массива А (20) первый отрицательный элемент.

  3. Расставить элементы массива Х(50) в порядке убывания.

  4. Преобразовать матрицу Р (7х7) таким образом, чтобы минимальные элементы строк оказались на побочной диагонали.

  5. Дана матрица размером 7х7. Поменять местами k-й столбец с k-ой строкой (k вводится с клавиатуры).

  6. Дана строка символов. Найти в строке самое длинное слово и вывести его на экран.

  7. Дана символьная строка. Проверить, все ли слова после точки начинаются с заглавной буквы. Если нет – исправить.

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

  9. В текстовом файле хранится некоторый текст. Отредактировать текст, удаляя лишние пробелы между словами.

  10. Дан текстовый файл, содержащий целые числа. Определить, сколько четных чисел в каждой строке этого файла, и результаты записать в новый файл с указанием номера строки.

  11. В текстовом файле построчно хранится квадратная вещественная матрица размером не более 10х10. Считать матрицу из файла, транспонировать ее и записать ее в новый файл.

  12. Компоненты бинарного файла – целые числа. Удалить из него все нули. Добавить в начало файла количество отрицательных компонентов, а в конец – количество положительных.

  13. Компоненты заданного бинарного файла – массивы, состоящие из 3 вещественных чисел каждый. Записать в новый текстовый файл тот из них, в котором второй элемент больше, чем в остальных.

  1. Поменять местами максимальный и последний отрицательный элементы массива А (40).

  2. Сформировать новый массив из элементов заданного целочисленного массива М (50), кратных 7 или содержащих в записи числа цифру 7.

  3. Определить, есть ли в массиве Q (35) заданное число Х, и если есть, то удалить его (если встречается неоднократно, то удалить последнее вхождение).

  4. Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы В (8х8). Заменить этим значением все элементы матрицы, не лежащие на диагоналях.

  5. Отсортировать строки матрицы М (8х5) в порядке возрастания.

  6. Дана строка символов до точки. Определить, сколько слов, состоящих из 5 и более символов, содержит данная строка.

  7. Дана строка символов, состоящая из букв и цифр. Найти количество букв в данной строке.

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

  9. Дан текстовый файл, в котором находится произвольный текст. Создать новый текстовый файл, в который поместить каждое предложение из старого, начиная с новой строки и отступив от начала строки 5 пробелов.

  10. Имеется текстовый файл, содержащий целые числа. Определить сколько раз в нем повторяется минимальное значение. Результат дописать в исходный файл.

  11. В текстовом файле построчно хранится вещественная матрица размером не более 5х6. Добавить в эту матрицу столбец, содержащий суммы элементов каждой строки. Преобразованную матрицу записать в новый текстовый файл.

  12. Компоненты бинарного файла – целые числа. Удалить из этого файла все числа, расположенные между первым и последним отрицательными компонентами.

  13. Компоненты заданного бинарного файла – массивы, состоящие из 5 вещественных чисел каждый. В новый текстовый файл записать суммы положительных элементов каждого из массивов.

  1. Заменить все четные элементы массива А (19) на их квадраты, нечетные удвоить. Проверить, изменилась ли сумма элементов массива.

  2. Вычислить среднее арифметическое максимального и минимального элементов массива М(100).

  3. Удалить из массива В (50) все элементы, кратные 3 или 5.

  4. Вычислить сумму всех элементов матрицы В (10х10), лежащих слева от главной диагонали.

  5. Дана вещественная матрица D (7х9). Упорядочить (переставить) строки матрицы по возрастанию сумм элементов строк.

  6. Дана строка символов до точки. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним пробелом.

  7. Дана строка символов до точки. Записать новую строку из слов заданной, содержащих букву «М».

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

  9. Дан текстовый файл, содержащий некоторый текст. Отредактировать исходный файл по правилу: в четных строках вставить символ ‘!’ после каждой буквы ‘a’.

  10. Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл.

  11. Дан текстовый файл, содержащий построчно целочисленную матрицу размером 5х5. Прочитать матрицу из файла и преобразовать ее, поделив каждый элемент на значение минимума. Полученную матрицу записать в новый текстовый файл.

  12. Компоненты бинарного файла – целые числа. Удалить из этого файла все положительные числа, кратные 3, добавив в конец файла их количество.

  13. Компоненты бинарного файла – массивы, состоящие из 10 вещественных чисел. Вывести на экран максимальные элементы всех массивов.