Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
#include /* объявление функции double sin(double) */
double (* pdf) (double);
double x;
pdf = sin;
x= (*pdf)(1.2); // вызывает sin(1.2)
x = pdf(1.2); // также вызывает sin(1.2)
Вопросы для самоконтроля
Ответы на вопросы для самоконтроля приведены в приложении А.
1. Что неправильно в следующем шаблоне?
structure {
char itable; int num[20]; char * togs
}
2. Ниже приведен фрагмент программы. Что он выведет?
#include
struct house { float sqft;
Структуры и другие формы данных 621
int rooms; int stories; char address[40];
};
int main(void)
{
struct house fruzt = {1560.0, 6, 1, "22 Spiffo Road"}; struct house *sign; sign = &fruzt;
printf("%d %d\n", fruzt.rooms, sign->stories); printf("%s \n", fruzt.address);
printf("%c %c\n", sign->address[3], fruzt.address[4]); return 0;
}
3. Разработайте шаблон структуры, которая будет содержать название месяца, его трехбуквенную аббревиатуру, количество дней в месяце и его номер.
4. Определите массив из 12 структур вида, описанного в вопросе 3, и инициализируйте ее для года, который не является високосным.
5. Напишите функцию, которая после получения номера месяца возвращает общее количество дней с начала года до конца указанного месяца. Предположите, что шаблон структуры, описанный в вопросе 3, и подходящий массив таких структур объявлены внешне.
6. а. Имея показанное ниже определение typedef, объявите 10-элементный массив указанных структур. Затем с помощью присваивания индивидуальных членов сделайте так, чтобы третий элемент этого массива описывал объектив марки Remarkatar с фокусным расстоянием 500 мм и диафрагмой f/2.0.
/* дескриптор структуры lens */ /* фокусное расстояние в миллиметрах */ /* диафрагма */ /* марка производителя */
б. Повторите часть а), но воспользуйтесь в объявлении списком инициализации с назначенным инициализатором вместо написания отдельных операторов присваивания для каждого члена.
7. Взгляните на следующий фрагмент кода:
struct name {
char first[20]; char last[20];
};
struct bem {
int limbs; struct name title; char type[30];
};
struct bem * pb; struct bem deb = {
6,
{"Berbnazel", "Gwolkapwolk"(,
"Arcturan"
};
pb = &deb;
622 глава 14
а. Что выведут приведенные ниже операторы?
printf("%d\n", deb.limbs); printf("%s\n", pb->type); printf("%s\n", pb->type + 2);
б. Как можно было бы представить "Gwolkapwolk" в форме записи для структур (двумя способами)?
в. Напишите функцию, которая принимает адрес структуры bem в качестве своего аргумента и выводит содержимое этой структуры в показанной ниже фор ме (предположите, что шаблон структуры находится в заголовочном файле start oik.h):
Berbnazel Gwolkapwolk - это 6-конечный Arcturan.
8. Взгляните на следующие объявления:
struct fullname {
char fname[20]; char lname[20];
};
struct bard {
struct fullname name; int born; int died;
};
struct bard willie; struct bard *pt = Swillie;
а. Идентифицируйте член born структуры willie с помощью идентификатора
willie.
б. Идентифицируйте член born структуры willie с помощью идентификатора
pt.
в. С помощью функции scanf() прочитайте значение для члена born, используя идентификатор willie.
г. С помощью функции scanf() прочитайте значение для члена born, используя и дентифи катор pt.
д. С помощью функции scanf() прочитайте значение для члена lname структуры name, используя идентификатор willie.
е. С помощью функции scanf() прочитайте значение для члена lname структуры name, используя идентификатор pt.
ж. Создайте идентификатор для третьей буквы фамилии того, кто описан переменной willie.
з. Напишите выражение, которое представляет общее количество букв в имени и фамилии того, кто описан переменной willie.
9. Определите шаблон структуры, подходящий для хранения следующих элементов: марка автомобиля, его мощность в лошадиных силах, экологический рейтинг, колесная база и год сборки. В качестве дескриптора шаблона используйте car.
10. Предположим, что имеется следующая структура:
struct gas {
float distance; float gals;
};
Структуры и другие формы данных 623
а. Напишите функцию, которая принимает аргумент struct gas. Предположите, что передаваемая структура содержит информацию distance и gals. Эта функция должна вычислять корректное значение для члена mpg и возвращать уже заполненную структуру.
б. Напишите функцию, которая принимает в качестве аргумента адрес struct gas. Предположите, что передаваемая структура содержит информацию distance и gals. Эта функция должна вычислять корректное значение для члена mpg и присваивать его.
11. Объявите перечисление с дескриптором choices, которое устанавливает перечислимые константы no, yes и maybe в 0, 1 и 2 соответственно.
12. Объявите указатель на функцию, которая возвращает указатель на char и принимает в качестве аргументов указатель на char и значение char.
13. Объявите четыре функции и инициализируйте массив указателей на них. Каждая функция должна принимать два аргумента double и возвращать значение double. Кроме того, продемонстрируйте два способа использования массива для вызова второй функции с аргументами 10.0 и 2.5.
Упражнения по программированию
1. Переделайте задание из вопроса 5 таким образом, чтобы аргумент был представлен названием месяца, а не его номером. (Йе забывайте о функции strcmp().) Протестируйте готовую функцию в простой программе.
2. Напишите программу, которая предлагает пользователю ввести день, месяц и год. Месяц может быть представлен порядковым номером, названием или аббревиатурой. Затем программа должна возвратить общее количество дней, истекших с начала года по указанный день включительно. (Учитывайте високосные годы.)
3. Измените программу из листинга 14.2, чтобы она сначала выводила описания книг в том порядке, в каком они вводились, затем в алфавитном порядке по названиям и, наконец, в порядке возрастания цены.
4. Напишите программу, которая создает шаблон структуры с двумя членами в соответствии со следующими критериями.
а. Первым членом является номер карточки социального страхования. Второй член — это структура, состоящая из трех членов. Ее первый член содержит имя, второй член — отчество и третий член — фамилию. Создайте и инициализируйте массив из пяти таких структур. Программа должна выводить данные в следующем формате:
Dribble, Flossie М. — 302039823
Выводиться должна только начальная буква отчества, за которой следует точка. Разумеется, если этот член пуст, не должен выводиться ни инициал, ни точка. Напишите функцию, которая выполняет такой вывод, передайте рассматриваемую структуру этой функции.
б. Модифицируйте часть а) так, чтобы вместо адреса передавалась сама структура.
5. Напишите программу, которая соответствует следующим требованиям.
глава 14
а. Программа внешне определяет шаблон структуры name с двумя членами: строкой для хранения имени и строкой для хранения фамилии.
б. Программа внешне определяет шаблон структуры student с тремя членами: структурой name, массивом grade для хранения трех оценок в виде чисел с плавающей запятой и переменной для хранения среднего значения этих трех оценок.
Читать дальшеИнтервал:
Закладка: