Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
10. Первая версия возвращает значение х*х. При этом просто возвращается значение типа double квадратах. Например, square (1.3) возвратит 1.69. Вторая версия возвращает (int) (х*х). Здесь результат усекается до типа int. Из-за того, что возвращаемым типом является double, значение int затем повышается до double. Таким образом, 1.69 сначала преобразуется в 1, после чего — в 1.00. Третья версия возвращает (int) (х*х+0.5). Добавление 0.5 приводит к округлению до ближайшего целого числа вместо его усечения. Следовательно, 1.69 становится 2.19, которое усекается до 2 и затем преобразуется в 2.00. Но 1.44 становится 1.94, что усекается до 1 и после этого преобразуется в 1.00.
11. Вот одна из возможных версий:
#define BOOL(X) _Generic((X) , _Bool : "boolean", default : "not boolean")
12. Аргумент argv должен быть объявлен с типом char *argv[]. Аргументы командной строки хранятся в виде строк, поэтому сначала программа должна преобразовать строку, хранящуюся в элементе массива argv[l], в значение типа double — например, с помощью функции atof() из библиотеки stdlib.h. Чтобы можно было использовать функцию sqrt(), в программу потребуется включить заголовочный файл math.h. Прежде чем извлекать квадратный корень, программа должна выполнить проверку на предмет передачи отрицательных значений.
13. а. Вызов функции должен выглядеть следующим образом:
qsort( (void *)scores, (size t) 1000, sizeof (double), comp);
б. Ниже показано подходящее определение функции сравнения:
int comp(const void * p1, const void * p2)
{
/* Для получения доступа к значениям необходимо */
/* использовать указатели на константу int */
/* Приведения типов не обязательны в С, */
/* но обязательны в C++ */
const int * al = (const int *) p1; const int * a2 = (const int *) p2;
if (*al > * a 2) return -1;
else if (*al = *a2) return 0; else
return 1;
}
14. а. Вызов функции должен выглядеть примерно так:
memcpy(datal, data2, 100 * sizeof(double));
б. Вызов функции должен выглядеть следующим образом:
memcpy(datal, data2 + 200 , 100 * sizeof(double));
826 Приложение А
Ответы на вопросы для самоконтроля из главы 17
1. Определение типа данных заключается в определении способа хранения данных и набора функций манипулирования данными.
2. Обход списка может выполняться только в одном направлении, поскольку каждая структура содержит адрес следующей, но не предыдущей структуры. Определение структуры можно было бы изменить, чтобы каждая структура содержала два указателя — один на предыдущую структуру и один на следующую. Разумеется, программа должна была бы присваивать соответствующие адреса этим указателям при каждом добавлении новой структуры.
3. ADT — аббревиатура от abstract data type (абстрактный тип данных). ADT представляет собой формальное определение свойств типа и операций, которые можно выполнять с этим типом. ADT должен быть выражен в обобщенных терминах, а не терминах какого-то конкретного языка программирования или деталей реализации.
4. Преимущества передачи переменной напрямую. Данная функция проверяет очередь, но не должна ее изменять. Передача переменной, представляющей очередь, напрямую означает, что функция работает с копией исходных данных, гарантируя невозможность их изменения функцией. При передаче переменной напрямую не нужно помнить о необходимости использования операции взятия адреса или указателя.
Недостатки передачи переменной напрямую. Программа должна зарезервировать достаточный объем памяти для хранения переменной, а затем скопировать информацию из оригинала в копию. Если переменная представляет собой крупную структуру, ее использование будет сопряжено с большими затратами времени и памяти.
Преимущества передачи адреса переменной. Если переменная является крупной структурой, то передача адреса и доступ к исходным данным выполняются быстрее и требуют меньшего объема памяти, чем при передаче переменной напрямую. Недостатки передачи адреса переменной. Необходимо помнить о применении операции взятия адреса или указателя. В K&R С функция могла бы неумышленно изменить исходные данные, но этой опасности можно избежать, используя спецификатор const стандарта ANSI С.
5. а.
Имя типа: Стек.
Свойства типа: Может содержать упорядоченную последовательностъ элементов. Операции типа: Инициализация стека пустым значением.
Определение, является ли стек пустым.
Определение, является ли стек полным.
Добавление элемента в верхушку стека (заталкивание элемента)
Удаление и восстановление элемента из верхушки стека (выталкивание элемента).
Б
Справочные
материалы
этой части книги предоставлен итоговый перечень базовых средств С наряду с более детализированным рассмотрением определенных тем. Ниже приведен список разделов данного приложения.
• Раздел I. Дополнительные ис точники информации
• Раздел II. Операции в языке C
• Раздел III. Базовые типы и классы хранения
• Раздел IV Выражения, операторы и поток управления программы
• Раздел V. Стандартная библиотека ANSI C с дополнениями С99 и Cl1
• Раздел VI. Расширенные целочисленные типы
• Раздел VII. Расширенная поддержка символов
• Раздел VIII. Расширенные вычислительные средства С99/С11
• Раздел IX. Отличия между С и C++
830 Приложение Б
Раздел I. Дополнительные источники информации
Если вы хотите узнать больше о языке С и программировании, вам будут полезны следующие ссылки.
Онлайновые ресурсы
Программисты на С помогали создавать Интернет, и теперь Интернет может помочь вам в изучении С. Интернет постоянно растет и изменяется; перечисленные ниже ресурсы — это пример того, что доступно на время написания книги. Разумеется, вы можете найти и другие онлайновые ресурсы.
В качестве возможного места старта, если у вас есть специфические вопросы о С, или же вы хотите расширить свои знания, обратитесь на сайт С FAQ (Frequently Asked Questions — часто задаваемые вопросы):
c-faq.com
Тем не менее, на указанном сайте раскрываются главным образом аспекты языка только до версии С89.
Если у вас есть вопросы по библиотеке С, то соответствующую информацию можно найти на следующем сайте:
www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html
По приведенному ниже адресу предлагается всестороннее обсуждение указателей:
pweb.netcom.com/~tjensen/ptr/pointeB.htm
Можете также использовать поисковые механизмы, чтобы найти статьи и сайты интересующей тематики:
www.google.com
search.yahoo.com
www.bing.com
С помощью расширенных средств поиска, предоставляемых перечисленными сайтами, можно более точно задать параметры поиска. Например, попробуйте поискать руководства по языку С.
Читать дальшеИнтервал:
Закладка: