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

Метод_материалы / Учебники / Программирование_С

.pdf
Скачиваний:
66
Добавлен:
16.03.2016
Размер:
2.31 Mб
Скачать

Напишите программу расширения бинарного дерева t. 3.2.4.7.14. Зеркальное отображение справа

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

3.2.4.7.15. Зеркальное отображение слева Напишите программу, которая заполняет двоичное дерево и строит его

зеркальное отображение относительно вертикали, расположенной слева. 3.2.4.7.16. Вычисление строкового выражения По образцу алгоритма 3.2.4.4 напишите программу, вычисляющую строковое

выражение. Длина строки ограничена, операции: склеивание срок (с возможным отбрасыванием лишних символов справа), удаление всех гласных, удаление всех согласных.

3.2.4.7.17. Некоторые задачи на деревьях — 1 Напишите программу, которая:

а) присваивает выходному параметру значение элемента из самого левого листа непустого дерева,

б) определяет число вхождений заданного элемента в дерево, в) вычисляет среднее арифметическое всех элементов непустого дерева,

г) заменяет в дереве все отрицательные элементы на их абсолютные величины.

3.2.4.7.18. Некоторые задачи на деревьях — 2 Напишите программу, которая:

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

б) печатает все элементы дерева по уровням; сначала - из корня дерева, затем (слева направо) - из вершин, дочерних по отношению к корню, затем (также слева направо) - из вершин, дочерних по отношению к этим вершинам, и т. д.

3.2.4.7.19. Некоторые задачи на деревьях — 3 Напишите программу, которая:

а) определяет число вхождений заданного элемента в дерево, б) вычисляет сумму элементов непустого дерева, в) находит величину наибольшего элемента непустого дерева,

г) определяет максимальную глубину непустого дерева, т. е. число ветвей в самом длинном из путей от корня дерева до листьев.

3.2.4.7.20. Некоторые задачи на деревьях — 4 Напишите программу, которая:

а) подсчитывает число вершин на n-ом уровне непустого дерева (корень считать вершиной 0-го уровня),

б) проверят на равенство два дерева, в) проверяет, есть ли в дереве хотя бы два одинаковых элемента.

241

3.2.5.Задачи на множествах

3.2.5.1.Выбор двух точек для наименьшего отличия подмножеств

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

3.2.5.2.Окружность с наибольшим числом точек заданного на плоскости

множества Определить радиус и центр окружности, на которой лежит наибольшее число

точек заданного на плоскости множества точек.

3.2.5.3.Окружность — выбор двух точек для наименьшего отличия подмножеств

Задано множество М точек на плоскости. Определить, верно ли, что для

каждой точки A M существует точка B M ( A B ) такая, что не существует двух точек множества М, лежащих по разные стороны от прямой АВ.

3.2.5.4.Окружность — минимальная разность количеств точек, лежащих внутри и вне окружности

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

3.2.5.5.Расстояние между двумя заданными множествами точек

Расстояние между двумя множествами точек — это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние между двумя заданными множествами точек на плоскости.

3.2.5.6. Площадь многоугольника Многоугольник (не обязательно выпуклый) задан на плоскости

перечислением координат вершин в порядке обхода его границы. Определить площадь многоугольника.

3.2.5.7. Максимальное число точек в шаре Задано множество точек М в трехмерном пространстве. Найти такую из них,

что шар заданного радиуса с центром в этой точке содержит максимальное число точек из М.

3.2.5.8. Количество точек пересечения прямых Задано множество прямых на плоскости (коэффициентами своих уравнений).

Подсчитать количество точек пересечения этих прямых. 3.2.5.9. Наиболее близкая точка к центру тяжести множества

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

3.2.5.10. Множество точек с одинаковой массой

Втрехмерном пространстве задано множество материальных точек. Каждая из точек с максимальной массой исчезает, теряя десятую часть своей массы и раздавая оставшуюся массу поровну всем остальным, более «ЛЕГКИМ» точкам. Определить суммарную массу множества материальных точек в тот момент, когда все оставшиеся в нем точки имеют одинаковую массу.

242

3.2.5.11. Пересечение и разность множеств Заданы два множества точек на плоскости. Построить пересечение и разность

этих множеств.

3.2.5.12. Регулярные множества Множество точек на плоскости назовем регулярным, если вместе с каждой

парой различных точек оно содержит также еще одну — третью — вершину правильного треугольника с вершинами в этих точках. Определить, регулярно ли заданное множество точек.

3.2.5.13. Точка, принадлежащая наибольшему количеству множеств

На плоскости задано n множеств по m точек в каждом. Среди точек первого множества найти такую, которая принадлежит наибольшему количеству множеств.

3.2.5.14. Прямая пересекается с максимальным количеством окружностей На плоскости заданы множество точек А и множество окружностей В. Найти

две такие различные точки из А, что проходящая через них прямая пересекается с максимальным количеством окружностей из В.

3.2.5.15. Прямая параллельна наибольшему количеству прямых На плоскости заданы множество точек А и множество прямых В. Найти две

такие различные точки из А, что проходящая через них прямая параллельна наибольшему количеству прямых из В.

3.2.5.16. Подсчитать количество параллелограммов

На плоскости заданы множество точек А и точка d вне его. Подсчитать количество (неупорядоченных) различных троек точек а, b, с из А таких, что четырехугольник abcd является параллелограммом.

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

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

3.2.5.18.Выбрать три различные точки с минимальной разностью

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

3.2.5.19.Выбрать максимальное подмножество попарно непараллельных

плоскостей Множество попарно различных плоскостей в трехмерном пространстве задано

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

3.2.5.20.Найти минимум радиусов шаров

Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества.

243

3.2.5.21. Треугольник наибольшего периметра Выбрать три разные точки заданного на плоскости множества точек,

составляющие треугольник наибольшего периметра. 3.2.5.22. Треугольник наименьшей площади

Из заданного на плоскости множества точек выбрать такие три точки, не лежащие на одной прямой, которые составляют треугольник наименьшей площади.

3.2.5.23. Треугольники не пересекаются и не содержат друг друга

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

3.2.5.1.24. Квадрат наибольшего периметра Задано множество точек на плоскости. Выбрать из них четыре разные точки,

которые являются вершинами квадрата наибольшего периметра. 3.2.5.25. Треугольник с максимальным количеством точек

Из заданного множества точек на плоскости выбрать три разные точки А, В, С так, чтобы внутри треугольника ABC содержалось максимальное количество точек этого множества.

3.2.5.26. Окружности с одинаковым количеством заданных точек Из заданного множества точек на плоскости выбрать две различные точки так,

чтобы окружности заданного радиуса с центрами в этик точках содержали внутри себя одинаковое количество заданных точек.

3.2.5.27. Наименьшее различество количества точек в круге На плоскости заданы множество точек М и круг. Выбрать из М две различные

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

3.2.5.1.28. Окружность, проходящая через k ( (k 3) точек множеств

Даны два непересекающихся конечных множества точек на плоскости. Определить окружность, проходящую через k (k 3) точек каждого из множеств.

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

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

3.2.5.30. Окружность содержит внутри себя точки второго множества Даны два множества точек на плоскости. Найти центр и радиус окружности,

проходящей через k (k 3) точек первого множества и содержащей строго внутри себя m точек второго множества.

3.2.5.31. Прямая с максимальным числом пересечений с остальными прямыми На плоскости задано множество попарно различных прямых (коэффициентами своих уравнений). Указать среди них ту прямую, которая имеет

максимальное число пересечений с остальными прямыми.

244

3.2.5.32. Окружность содержит внутри себя равное число точек двух множеств Даны два множества точек на плоскости. Указать центр и радиус окружности, проходящей через k (k > 3) точек первого множества и содержащей строго внутри

себя равное число точек первого и второго множеств.

3.2.5.33.Треугольник накрывает все точки множества и имеет минимальную

площадь Даны два множества точек на плоскости. Выбрать три различные точки

первого множества так, чтобы треугольник с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.

3.2.5.34.Квадрат накрывает все точки множества и имеет минимальную

площадь Даны два множества точек на плоскости. Выбрать четыре различные точки

первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.

3.2.5.35.Круг содержит все точки множества и имеет минимальную площадь Даны два множества точек на плоскости. Выбрать три различные точки

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

3.2.5.36. Ромб наибольшей площади Найти ромб наибольшей площади с вершинами в заданном множестве точек

на плоскости.

3.2.5.37. Количество равносторонних треугольников Подсчитать количество равносторонних треугольников с различными

длинами оснований и вершинами в заданном множестве точек на плоскости. 3.2.5.38. Минимальное подмножество точек Задано множество точек на плоскости, не лежащих на одной прямой.

Определить минимальное подмножество точек, после удаления которых остаются точки, лежащие на одной прямой.

3.2.5.39. Множество всех различных выпуклых четырехугольников Построить множество всех различных выпуклых четырехугольников с

вершинами в заданном множестве точек на плоскости.

3.2.5.40. Множество всех различных остроугольных треугольников Построить множество всех различных остроугольных треугольников

вершинами в заданном множестве точек на плоскости.

3.2.5.41. Множество всех треугольников, имеющих непустое пересечение с окружностью

На плоскости заданы множество точек и окружность радиусом R с центром в начале координат. Построить множество вcex треугольников с вершинами в заданных точках.

245

3.2.5.42.Три точки с минимальной разностью между площадью круга и треугольника

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

3.2.5.43.Треугольник, стороны которого содержат максимальное число точек Среди треугольников с вершинами в заданном множестве точек на плоскости

указать такой, стороны которого содержат максимальное число точек заданного множества.

3.2.5.44. Треугольник лежит строго внутри второго Построить два треугольника с вершинами в заданном множестве точек на

плоскости так, чтобы первый треугольник лежал строго внутри второго.

3.2.5.45.Максимальное подмножество попарно не связанных друг с другом окружностей

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

3.2.5.46.Максимальное подмножество точек, лежащих на одной прямой Задано множество точек на плоскости. Перечислить все различные

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

3.2.5.47. Окружность минимального радиуса Определить радиус и центр окружности минимального радиуса, проходящей

хотя бы через три различные точки заданного множества точек на плоскости. 3.2.5.48. Минимальная сумма расстояний Найти такую точку заданного на плоскости множества точек, сумма

расстояний от которой до остальных минимальна.

3.2.5.49.Удаление из строки слов, содержащих не более чем две различные

буквы Программа получает с клавиатуры строку символов и печатает новую строку,

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

3.2.5.50.Поиск двух ближайших точек различных множеств

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

3.2.5.51. Решето Эратосфена Спроектируем и напишем программу, которая отыскивает все простые числа из

интервала от 1 до n. Напомним, что целым простым числом является число, не

246

имеющее делителей. Для этого воспользуемся алгоритмом, давно известным под названием "решето Эратосфена":

поместить в решето все целые из интервала от 1 до n;

найти минимальный элемент в решете, поместить его в выходное множество простых чисел;

удалить из решета минимальный элемент и все ему кратные; повторять первые два пункта, пока решето не окажется пустым.

Напишем псевдокод программы для реализации этого алгоритма:

{

//построение множества всех простых чисел из заданного интервала

//метод: решето Эратосфена

//исходные данные и переменные

//множество целых из интервала

//текущее содержимое решета

//множество простых чисел

//удаляемый элемент

//поместить в решето все числа из интервала

//множество простых сделать пустым

while ( // решето не пусто)

{

//найти удаляемый — минимальный элемент решета

//добавить в простые удаляемый элемент

/ просеять через решето кратные удаляемому элементу

}

}

247

БИБЛИОГРАФИЯ

Проектирование программ

1.Мейер Б., Бодуэн К. Методы программирования. – М.: Мир, 1982.

2.Кушнеренко А.Г., Лебедев Г.В. Программирование для математиков. – М.:

Наука, 1988.

3.Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения. – М.: Мир, 1982.

4.Йодан Э. Структурное проектирование и конструирование программ. – М.:

Мир, 1979.

Структуры данных и алгоритмы

5.Вирт Н. Алгоритмы + структуры данных = программы. – М.: Мир, 1985. –

406с.

6.Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989. – 428с.

7. Лэнгсам Й., Огенстайн М., Тененбаум А. Структуры данных для персональных ЭВМ. – М.: Мир, 1989.

8.Кнут Д. Искусство программирования для ЭВМ. Основные алгоритмы. –

М.: Мир, 1976. – T. 1. – 720с.

9.Кнут Д. Искусство программирования для ЭВМ. Сортировка и поиск. – М.:

Мир, 1978. – Т. 2. – 706с.

10.Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. – М.: Мир, 1979.

11.Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. –

М.: Мир, 1981. –

12.Бентли Д. Жемчужины творчества программистов. – М.: Радио и связь,

1990.

Наука программирования

13.Дал У., Дейкстра Э., Хоар К. Структурное программирование. – М.: Мир, 1975. –

14.Дейкстра Э. Дисциплина программирования. – М.: Мир, 1978.

15.Грис Д. Наука программирования. – М.: Мир, 1984. –

Стиль и надежность

16.Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание программ. – М.: Мир, 1981. –

17.Керниган Б., Плоджер Ф. Элементы стиля программирования. – М.: Радио

исвязь, 1984. –

18.Майерс Г. Дж. Надежность программного обеспечения. – М.: Мир, 1980. –

379с.

248

19.Брукс Ф.П. Как проектируются и создаются программные комплексы. –

М.: Наука, 1979. – 304с.

Си С++– стандарт языка

20.Подбельский В.В., Фомин С.С. Программирование на языке Си. – М.: Финансы и статистика, 1999, 2000 – 600с.

21.Шилдт Г. Самоучитель C++.– СПб.: BHV, 1998. – 683с.

22.Шилдт Г. Теория и практика С++: Руководство для профессионалов. – СПб.: BHV-Санкт-Петербург, 1996. – 412с.

23.Павловская Т.А. С/С++. Программирование на языке высокого уровня. –

Спб.: Питер, 2004. – 461с.

24.Березин Б.И., Березин С.Б. Начальный курс С и С++.–М.: Диалог-МИФИ, 1999. – 288с.

25.Бабэ Б. Просто и ясно о Borland C++. – М.: Бином, 1995. – 394с.

26.Арнуш К. Borland C++ 5: Освой самостоятельно: Полное руководство для самостоятельного обучения. – М.: Бином, 1997. – 720с.

27.Голуб А.И. C и C++. Правила программирования. – М: Бином, 1996. –

272с.

28.Дейтел Х.М., Дейтел П.Д. Как программировать на С++. – М.: Бином, 1998. – 1021с.

29.Хикс К. C: Руководство пользователя. – М.: Бином, 1997. – 442с.

30.Франка П. С++: Учебный курс: 26 уроков для освоения языка. – СПб.:

Питер, 1999. – 521с.

Сборники задач

30.Крячков А.В., Сухинина И.В., Томшин В.К. Программирование на С и С++. Практикум. – М.: Радио и связь, 1997, 2000. –344с.

31.Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. – СПб.: Питер, 2002. – 240с.

32.Культин Н.Б. С/С++ в задачах и примерах. – СПб.: БХВ-Петербург, 2004. –

288с.

33.Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ. – М.: Наука, 1986. –272c.

34.Пильщиков В.Н. Сборник упражнений по языку Паскаль. – М.: Наука, 1989. – 156с.

35.Абрамов С.А. и др. Задачи по программированию. – М.: Наука, 1988. –

224с.

36.Дагене В.А. 100 задач по программированию. – М.: Просвещение, 1993. –

190с.

249

Оглавление

 

ПРЕДИСЛОВИЕ......................................................................................

3

1. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ C........................

5

1.1. Предварительные сведения о разработке программ....................................

5

1.1.1. Алгоритм, программа, формальные языки.......................................

5

1.2. Начальные сведения о языке модульного программирования C ...............

9

1.2.1. Алфавит языка С и лексемы...................................................................

9

1.2.2. Основные понятия языка......................................................................

10

1.2.3. Константы в языке С.............................................................................

10

1.2.4. Переменные в языке С..........................................................................

12

1.2.5. Типы данных в С ...................................................................................

14

Размер ...............................................................................................................

14

1.2.7. Структура и компоненты простой программы на языке С. Функция

main .........................................................................................................................

23

1.2.8. Директивы препроцессорной обработки ............................................

26

1.2.9. Ввод и вывод данных в С. Начальные сведения................................

27

1.2.10. Управляющие конструкции языка С.................................................

30

1.2.11. Введение в механизм функций..........................................................

50

1.3. Продвинутые возможности языка C и производные типы данных .........

64

1.3.1. Классификация типов данных C..........................................................

64

1.3.2. Массивы..................................................................................................

64

1.3.3. Многомерные массивы.........................................................................

71

1.3.4. Указатели................................................................................................

75

1.3.5. Обработка текстовой информации......................................................

94

1.3.6. Структуры и объединения. .................................................................

103

1.3.7. Ввод-вывод данных в С......................................................................

111

1.3.8. Конструкции псевдокода....................................................................

117

2. СТРУКТУРЫ ДАННЫХ КАК ОСНОВА ДЛЯ РАЗРАБОТКИ

ПРОГРАММ .............................................................................................

119

2.1. Статические конструируемые типы данных.............................................

119

2.1.1. Стек (на основе массива) ....................................................................

119

2.1.2. Очередь на основе массива.................................................................

123

2.1.3. Двусторонняя очередь (DEQ) на основе массива............................

129

2.1.4. Множество на основе массива...........................................................

130

2.2. Динамические конструируемые типы данных.........................................

132

2.2.1. Динамическая память..........................................................................

132

2.2.2. Связный (линейный) список...............................................................

134

2.2.3. Упорядоченный связный список .......................................................

139

2.2.4. Стек на основе линейного списка......................................................

142

2.2.5. Очередь на основе линейного списка................................................

144

2.2.6. Циклический список ...........................................................................

145

2.2.7. Упорядоченный циклический список...............................................

148

2.2.8. Двусвязный (двунаправленный) список...........................................

149

250

Соседние файлы в папке Учебники