Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5}; double targetl[5]; double target2[5]; double target3[5];
copy_arr(targetl, source, 5); copy_ptr(target2, source, 5); copy_ptrs(target3, source, source + 5);
3. Напишите функцию, которая возвращает наибольшее значение в массиве значений типа int. Протестируйте эту функцию с помощью простой программы.
4. Напишите функцию, которая возвращает индекс наибольшего значения в массиве значений типа double. Протестируйте эту функцию с помощью простой программы.
5. Напишите функцию, которая возвращает разность между наибольшим и наименьшим элементами в массиве значений типа double. Протестируйте эту функцию с помощью простой программы.
6. Напишите функцию, которая изменяет порядок следования содержимого массива значений типа double на противоположный и протестируйте ее в простой программе.
7. Напишите программу, которая инициализирует двумерный массив значений типа double и использует одну из функций копирования из упражнения 2 для его копирования во второй двумерный массив. (Поскольку двумерный массив - это массив массивов, функция для копирования одномерных массивов может применяться с каждым подмассивом.)
8. Воспользуйтесь одной из функций копирования из упражнения 2 для копирования элементов с 3-го по 5-й семиэлементного массива в массив, состоящий из трех элементов. Саму функцию изменять не нужно; просто подберите правильные фактические аргументы. (Фактическими аргументами не обязательно должны быть имя массива и его размер. Ими только должны быть адрес элемента массива и количество обрабатываемых элементов.)
Массивы и указатели 417
9. Напишите программу, которая инициализирует двумерный массив 3x5 значений типа double и использует функцию, основанную на массивах переменной длины, для копирования этого массива во второй двумерный массив. Кроме того, напишите функцию, основанную на массивах переменной длины, для отображения содержимого этих двух массивов. В общем случае обе функции должны быть способны обрабатывать произвольные массивы NxM. (Если вы не имеете доступа к компилятору, поддерживающему массивы переменной длины, примените традиционный подход С с функциями, которые могут обрабатывать массивы Nx5).
10. Напишите функцию, которая устанавливает значение каждого элемента массива в сумму соответствующих элементов в двух других массивах. Другими словами, если массив 1 имеет значения 2, 4, 5 и 8, а массив 2 — значения 1, 0, 4 и 6, то эта функция присваивает массиву 3 значения 3, 4, 9 и 14. Функция должна принимать в качестве аргументов имена трех массивов и их размеры. Протестируйте эту функцию с помощью простой программы.
11. Напишите программу, которая объявляет массив 3x5 значений типа int и инициализирует его значениями по вашему выбору. Программа должна вывести эти значения, удвоить все значения, после чего вывести новые значения. Напишите одну функцию для вывода значений и еще одну для удваивания значений. В качестве аргументов функции должны принимать имя массива и количество строк.
12. Перепишите программу rain, с из листинга 10.7 так, чтобы основные задачи решались внутри функций, а не в теле main().
13. Напишите программу, которая предлагает пользователю ввести три набора по пять чисел double. (Для простоты можете полагать, что пользователь отвечает корректно и не вводит нечисловые данные.) Программа должна выполнять все перечисленные ниже действия.
а. Хранить информацию в массиве 3x5.
б. Вычислять среднее для каждого набора из пяти значений.
в. Вычислять среднее для всех значений.
г. Определять наибольшее из 15 значений.
д. Выводить результаты на экран.
Каждая значительная задача должна решаться посредством отдельной функции с использованием традиционного в языке С подхода к обработке массивов. Выполните задачу б) с помощью функции, которая вычисляет и возвращает среднее значение одномерного массива; воспользуйтесь циклом для вызова этой функции три раза. Функции, реализующие остальные задачи, должны принимать в качестве аргумента массив целиком, а функции, выполняющие задачи в) иг), должны возвращать ответ в вызывающую программу.
14. Выполните упражнение 13, но используйте в качестве параметров функции массивы переменной длины.
11
Символьные строки и строковые функции
В ЭТОЙ ГЛАВЕ...
• Функции: gets() , gets_s() , fgets() , puts() , fputs(), strcat(), strncat(), strcmp(), strncmp(), strcpy(), strncpy(), sprintf(), strchr()
• Создание и использование строк
• Применение строковых и символьных функций из библиотеки С и создание собственных строковых функций
• Использование аргументов командной строки
420 глава 11
С
имвольная строка является одним из наиболее полезных и важных типов данных в языке С. До сих пор мы постоянно использовали символьные строки, но вам еще предстоит многое узнать о них. Стандартная библиотека С предлагает широкий спектр функций для чтения и записи, копирования, сравнения, объединения, поиска и выполнения многих других операций со строками. Эта глава поможет пополнить свои навыки программирования возможностями, которые касаются строк.
Введение в строки и строковый ввод-вывод
Разумеется, вам уже известен наиболее важный факт: символьная строка — это массив элементов типа char с завершающим нулевым символом (\0). Следовательно, все, что вы изучили о массивах и указателях, касается и символьных строк. Однако в связи с широким применением символьных строк библиотека С предоставляет множество функций, специально предназначенных для работы со строками. В этой главе обсуждается природа строк, способы их объявления и инициализации, ввод и вывод строк в программах, а также манипуляции со строками.
Давайте рассмотрим короткую программу (листинг 11.1), которая иллюстрирует несколько способов представления строк.
Листинг 11.1. Программа strings1.с
Подобно printf(), функция puts() принадлежит семейству функций ввода-вывода stdio.h. Она отображает только строки и, в отличие от printf(), автоматически добавляет к выводимой строке символ новой строки. Ниже показан вывод этой программы:
Вот несколько строк:
Я - старомодная символьная строковая константа.
Я являюсь строкой, хранящейся в массиве.
Что-то указывает на меня.
Я являюсь строфой, хранящейся в массиве.
Вместо того чтобы анализировать листинг 11.1 строка за строкой, мы примем другой подход. Первым делом мы рассмотрим способы определения строки в программе. Затем мы выясним, как осуществляется чтение строки в программе. И, наконец, мы исследуем методы для вывода строк.
Символьные строки и строковые функции 421
Определение строк в программе
Во время просмотра листинга 11.1 вы, скорее всего, заметили, что существует много способов определения строк. К основным методам относится использование строковых констант, массивов типа char и указателей на тип char. Программа должна обеспечить место для хранения строки, и эту тему мы также обсудим.
Читать дальшеИнтервал:
Закладка: