Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

хранению в виде семи символов, занимающих 7 байтов. При использовании функции fwrite() число сохраняется в виде двоичного представления 4-байтового целого числового значения.

б. Ни в чем. В обоих случаях символ сохраняется в виде 1-байтового двоичного кода.

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

820 Приложение А

9. Режим "г+ " позволяет выполнять чтение и запись в любом месте файла, поэтому он наиболее подходит в данном случае. Режим "а+ " позволяет только дописывать данные в конец файла, а режим "w+" начинает работу с “чистого листа”, удаляя предыдущее содержимое файла.

Ответы на вопросы для самоконтроля из главы 14

1. Правильным ключевым словом является struct, а не structure. Шаблон требует наличия либо дескриптора перед открывающей скобкой, либо имени переменной после закрывающей скобки. Кроме того, символ точки с запятой должен присутствовать после выражения * togs и в конце шаблона.

2. Вывод имеет следующий вид:

6 1

22 Spiffo Road S р

3. struct month {

char name[10]; char abbrev[4]; int days; int monumb;

};

5 extern struct month months 11 int daysint month int index total if - фото 614

5. extern struct month months 11; int days(int month)

{

int index, total; if (month <111 month > 12)

return(-l); /* сигнал ошибки */ else

{

for (index = 0, total = 0; index < month; index ++) total += months[index].days; return(total);

}

}

Ответы на вопросы для самоконтроля 821

картинка 615

ный файл string.h:

typedef struct lens ( /* дескриптор структуры lens */

float foclen; /* фокусное расстояние в миллиметрах */

float fstop; /* диафрагма */

char brand[30]; /* марка производителя */

} LENS;

LENS bigEye [10];

bigEye[2].foclen = 500;

bigEye[2].fstop = 2.0;

strcpy(bigEye[2].brand, "Remarkatar");

6. LENS bigEye[10] = { [2] = {500, 2, "Remarkatar") };

7. a. 6

Arcturan cturan

б. Для этого можно использовать имя структуры и указатель:

deb.title.last pb->title.last

в. Одна из возможных версий выглядит так:

#include

#include "starfolk.h" /* обеспечение доступности определений структуры*/ void prbem (const struct bem * pbem)

{

printf("%s %s - это %d-конечный %s.\n", pbem->title.hrst,

pbem->title.last, pbem->limbs, pbem->type);

}

8. a. willie.born

б. pt->born

в. scanf("%d", &willie.born); r. scanf ("%d", &pt->born);

д. scanf("%s", willie.name.lname);

е. scanf("%s", pt->name.lname);

ж. willie.name.fname [2]

з. strlen(willie.name.fname) + strlen(willie.name.lname)

9. Один из возможных вариантов имеет вид:

struct car {

char name[20]; float hp; float epampg; float wbase; int year;

};

822 Приложение А

10. Функции можно было бы реализовать следующим образом:

struct gas {

float distance; float gals; float mpg;

};

struct gas mpgs(struct gas trip)

{

if (trip.gals > 0)

trip.mpg = trip.distance / trip.gals; else

trip.mpg = -1.0; return trip;

}

void set_mpgs(struct gas * ptrip)

{

if (ptrip->gals > 0)

ptrip->mpg = ptrip->distance / ptrip->gals; else

ptrip->mpg = -1.0;

}

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

struct gas idaho = {430.0, 14.8}; // установка значений двух первых членов idaho = mpgs(idaho); // переустановка структуры

Однако вторая функция обращается к исходной структуре непосредственно:

struct gas Ohio = {583, 17.6}; // установка значений двух первых членов

set_mpgs(ohio); // установка значения третьего члена

11. enum choices {no, yes, maybe};

12. char * (*pfun)(char *, char);

13. double sum(double, double); double diff(double, double); double times(double, double); double divide(double, double);

double (*pf1[4]) (double, double) = {sum, diff, times, divide};

Чтобы упростить код, последнюю строку можно заменить следующими двумя строками:

typedef double (*ptype)(double, double); ptype pf[4] = {sum, diff, times, divide};

Функция diff() вызывается следующим образом:

pfl[l](10.0, 2.5); // первая форма записи

(*рf1[1]) (10.0, 2.5); // эквивалентная форма записи

Ответы на вопросы для самоконтроля 823

Ответы на вопросы для самоконтроля из главы 15

1. а. 00000011

б. 00001101

в. 00111011

г. 01110111

2. а. 21,025,0x15

б. 85, 0125, 0x55

в. 76, 0114, 0х4С

г. 157,0235,0x91)

3. а. 252

б. 2

в. 7

г. 7

д. 5

е. 3

ж. 28

4. а. 255

б. 1 (“не ложно” — это “истинно”)

в. 0

г. 1 (“истинно” И “истинно” — это “истинно”)

д. 6

е. 1 (“истинно” ИЛИ “истинно” — это “истинно”)

ж. 40

5. В двоичной форме маска имеет вид 1111111, в десятичной — 12 7, в восьмеричной 0177, а в шестнадцатеричной — 0x7F.

6. Оба выражения bitval *= 2 и bitval << 1 удваивают текущее значение переменной bitval, поэтому они эквивалентны. Однако выражения mask += bitval и mask |= bitval оказывают одинаковое влияние, только если переменные bitval и mask не имеют ни одного общего установленного бита. Например, 2 | 4 равно 6, но этому же значению равен результат выражения 3 | 6.

7. a. struct tb_drives {

nsigned int diskdrives : 2; unsigned int : 1;

unsigned int cdromdrives : 2; unsigned int : 1;

unsigned int harddrives : 2;

6. struct kb_drives {

unsigned int harddrives : 2; unsigned int : 1;

unsigned int cdromdrives : 2; unsigned int : 1;

. unsigned int diskdrives : 2;

824 Приложение А

Ответы на вопросы для самоконтроля из главы 16

1. а. Результирующий код dist = 5280 * miles; является допустимым.

б. Результирующий код plort = 4*4 + 4; является допустимым, но если в действительности пользователю необходимо 4 * (4 + 4), то должно использоваться #define POD (FEET + FEET),

в. Результирующий код пех = = 6;; является недопустимым. (Если между двумя знаками равенства пробелы отсутствуют, код будет допустимым, но бесполезным.) Очевидно, пользователь забыл, что пишет макрос для препроцессора, а не код на С.

г. Результирующий код у = у + 5 является допустимым. Код berg = berg + 5 * lob; также допустим, но, скорее всего, представляет собой не тот результат, который хотел получить пользователь. Код est = berg + 5/у + 5; допустим, но, вероятно, представляет собой не тот результат, который хотел получить пользователь. Код nilp = lob *-berg + 5; является допустимым, но, скорее всего, представляет не тот результат, к которому стремился пользователь.

2. #define NEW (X) ( (X) +5)

3. #define MIN (X,Y) ( (X) < (Y) ? (X) : (Y) )

4. #define EVEN_GT (X, Y) ( (X) > (Y) && (X) % 2 == 0 ? 1 : 0 )

5. #def ine PR(X,Y) printf (#X " = %d и " #Y " = %d\n", X,Y)

Поскольку в этом макросе X и Y не появляются в каких-то других операциях (таких как умножение), круглые скобки можно не применять.

6. a. #define QUARTERCENTURY 2 5

б. #define SPACE ' '

в. #define PS() putchar (' ') или

#define PS() putchar(SPACE) r. #define BIG(X) ( (X) + 3)

д. #define SUMSQ(X,Y) ( (X) * (X) + (Y) * (Y) )

7. Попробуйте воспользоваться следующим определением:

#define Р(X) printf("имя: "#Х"; значение: %d; адрес: %p\n", X, &Х)

Если используемая вами реализация не распознает спецификатор адреса %р, применяйте %u или %lu.

8. Используйте директивы условной компиляции. Один из возможных способов предусматривает применение директивы #ifdef:

#define _SKIP_ /* удалите эту строку, если не хотите пропускать код */ #ifndef _SKIP_

/* код, который нужно пропустить */

#endif

9. #ifdef PR_DATE

printf("Дата = %s\n", ____ DATE );

#endi f

Ответы на вопросы для самоконтроля 825

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x