1. Изучить, как описываются, инициализируются и используются одномерные массивы в языке Си. Как связаны массивы и указатели в языке Си?
2. Изучить особенности символьных массивов, строковый тип в языке Си.
3. Разработать алгоритм и составить программу на языке Си для решения задачи соответствующего варианта. Предполагается, что длина вводимого текста ограничена константой. Длины слов предложения также ограничены константой. Стандартными строковыми функциями, объявленными в файле string.h, пользоваться не разрешается.
4. Подобрать тестовые данные.
Варианты заданий
1. Задан текст, в котором нет круглых скобок. Выполнить его сжатие, то есть заменить всякую последовательность одинаковых соседних символов длины больше трех на (k) s, где s - повторяемый символ, а k - количество повторений.
2. Преобразовать данное предложение таким образом, чтобы при выводе его библиотечной функцией для вывода строк количество символов в строке на экране не превышало заданного n и каждое слово должно быть целиком в одной строке. Предполагается, что n больше длины самого длинного слова.
3. Отредактировать заданное предложение, заменяя всякое вхождение слова вида abã на b, где а, b - подслова, ã - обращение
подслова а.
4. Задано предложение, в котором есть все буквы латинского алфавита. Пусть Ca - первое из слов предложения содержащее букву а. Проверить, верно ли, что длины слов Ca не убывают с изменением а в алфавитном порядке.
5. Отредактировать данное предложение, удаляя из него слова произвольной длины, но содержащие не больше двух различных букв. Вместе с каждым таким словом удалить также и разделители, стоящие после него.
6. В предложении все слова начинаются с различных букв. Определить, можно ли переставить слова предложения так, чтобы последняя буква предыдущего слова совпадала с первой буквой следующего слова. Если такое преобразование возможно, записать преобразованное предложение в другую строку.
7. Преобразовать данное предложение, оставив в нем только первые вхождения каждого слова.
8. Отредактировать данное предложение, оставив в нем только те слова, которые могут быть получены перестановкой букв первого слова предложения.
9. Отредактировать заданное предложение, заменяя каждое вхождение слова this на the, а слово those на these.
10. Преобразовать данное предложение, удалив из него слова-палиндромы.
11. Определить, упорядочены ли слова данного предложения лексикографически. Если нет, то преобразовать предложение, удаляя слова, нарушающие порядок.
12. Преобразовать данное предложение, оставив в нем только последнее вхождение каждого слова.
13. Преобразовать данное предложение, упорядочив по алфавиту буквы каждого слова и удалив слова, содержащие одинаковые буквы.
14. Удалить из данного предложения слова, содержащие заданную последовательность символов.
15. Удалить из данного предложения слова, множество букв которых совпадает с множеством букв первого слова.
16. Даны две строки s 1 и s 2. Пусть w – первое из слов строки s 1, которое есть и в строке s 2. Найти слово, предшествующее первому вхождению w в s 1.
17. Даны две строки. Получить строку, в которой чередуются слова первой и второй строки. Если в одной из строк число слов больше, чем в другой, то оставшиеся слова этой строки должны быть дописаны в строку-результат.
18. Даны две строки. Пусть n 1 – число слов в первой строке, а n 2 – во второй (n 1< n 2). Добавить в конец первой строки последние n 2- n 1 слов второй строки.
19. Дан текст, заканчивающийся точкой. Соседние слова разделены запятыми. Определить количество слов-палиндромов, которые начинаются с буквы " а ".
20. Вывести слова данного предложения, которые отличны от последнего слова.
21. Преобразовать строку таким образом, чтобы после каждого заданного символа sym 1 был вставлен символ sym 2, если sym 2 не следует за sym 1 в исходной строке.
22. Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова, изменив порядок следования цифр в слове на обратный.
23. Преобразовать строку, заменяя каждую цифру соответствующим ей числом пробелов.
24. Определить, есть ли в данной строке одинаковые слова.
25. Даны две строки. Определить последнее из слов первой строки, которое есть во второй строке.
26. Преобразовать строку, изменив порядок следования слов в строке на обратный.
27. Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в конец слова, изменив порядок следования их в слове на обратный.
28. Определить, есть ли в данной строке слова, множества символов которых равны.
29. Вывести слова данной строки в обратном порядке по одному в строке экрана.
30. Удалить из строки слова, содержащие повторяющиеся символы.
Контрольные вопросы
1. Как описываются и инициализируются одномерные массивы?
2. Найдите ошибку в фрагменте программы:
int i, a [10];
for (i = 10; i > 0; i - -)
scanf ( " % i ", a [ i ]);.
3. Какое соглашение принято в Си для работы с символьными массивами как со строками динамической длины?
4. Определите объем памяти, выделяемый для переменных s 1 и s 2 согласно каждому из следующих описаний:
a) char s 1[ ]= " string ";
b) char s 2[ ]={’ s ’, ’ t ’, ’ r ’, ’ i ’, ’ n ’, ’ g ’}.
5. Опишите функции для:
a) определения длины строки;
б) копирования строки;
в) конкатенации строк;
г) сравнения строк.
ЛАБОРАТОРНАЯ РАБОТА №15
Массивы и указатели
Цель работы: Освоение работы с многомерными массивами и массивами указателей в языке Си, осознание связи между массивами и указателями.