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

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

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

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

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

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

Интервал:

Закладка:

Сделать

}

printf("Программа завершена.\n"); return 0;

} void showmenu(void)

{

printf("Выберите один из следующих вариантов:\n"); printf("1) копировать файлы 2) переместить файлы\n"); printf("3) удалить файлы 4) выйти из программы\n");

printf("Введите номер выбранного варианта:\n");

)

int getchoice(int low, int high)

{

int ans; int good;

good = scanf("%d", sans);

while (good == 1 && (ans < low || ans > high))

{

printf("%d является недопустимым вариантом; повторите попытку\n", ans);

showmenu();

scanf("%d", sans);

}

if (good != 1)

{

printf("Нечисловой ввод."); ans = 4;

}

return ans;

}

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

1. Вывод выглядит следующим образом:

8 8 4 4

0 0 2 2

2. Массив ref содержит четыре элемента, поскольку таково количество значений в списке инициализации.

3. Имя массива ref указывает на первый элемент массива — целое число 8. Выражение ref + 1 указывает на второй элемент — целое число 4. Конструкция ++ref не является допустимым выражением С; ref представляет собой константу, а не переменную.

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

4. ptr указывает на первый элемент, a ptr + 2 — на третий элемент, который будет первым элементом второй строки.

а. 12 и 16.

б. 12 и 14 (согласно скобкам, в первую строку попадает только число 12).

5. ptr указывает на первую строку, a ptr + 1 — на вторую строку; *ptr указывает на первый элемент в первой строке, a*(ptr+ 1) — на первый элемент второй строки.

а. 12 и 16.

б. 12 и 14 (согласно скобкам, в первую строку попадает только число 12).

6. a. &grid [22] [56]

б. &grid[22] [0] или grid[22]

(Второй вариант представляет собой имя одномерного массива, состоящего из 100 элементов, т.е. адрес его первого элемента, которым является

grid [22] [0].)

в. &grid[0] [0] или grid[0] или (int *) grid.

(Здесь grid [0] — это адрес элемента grid[0] [0] типа int, a grid — адрес 100-элементного массива grid [0]. Упомянутые два адреса имеют одно и то же значение, но разные типы; приведение делает типы одинаковыми.)

7. а. int digits(10];

б. float rates [6];

в. int mat [3] [5];

г. char * psa [20];

Обратите внимание, что приоритет[] выше приоритета *, поэтому при отсутствии скобок сначала применяется описатель массива, а затем описатель указателя. Таким образом, это объявление эквивалентно объявлению char * (psa [20]);.

д. char (*pstr) [20];

На заметку!

В пункте д) нельзя использовать объявление char *pstr [20];. Это сделало бы pstr массивом указателей, а не указателем на массив. В частности, pstr указывал бы на одиночное значение char — первый элемент массива, a pstr + 1 указывал бы на следующий байт. При корректном объявлении pstr представляет собой переменную, а не имя массива, и pstr + 1 указывает на позицию, которая на 20 байт отстоит от начального байта.

8. а. int sextet [6] = {1, 2, 4, 8, 16, 32};

б. sextet [2]

в. int lots[100] = { [99] = -1};

г. int pots [100] = { [5] = 101, [10] = 101, 101, 101, 101};

9. От 0 до 9.

10. a. rootbeer [2] = value;

Допустим.

б. scanf("%f", &rootbeer );

Недопустим; &rootbeer не является значением типа float.

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

в. rootbeer = value;

Недопустим; rootbeer не является значением типа float, г printf("%f", rootbeer);

Недопустим; rootbeer не является значением типа float.

д. things[4][4] = rootbeer[3];

Допустим.

е. things[5] = rootbeer;

Недопустим; нельзя присваивать массивы.

ж.pf = value;

Недопустим; value не является адресом,

з. pf = rootbeer;

Допустим.

11. int screen[800] [600];

12. a. void process (double ar[], int n);

void processvla(int n, double ar[n]); process(trots, 20); processvia(20, trots);

б. void process2 (short ar2 [30] , int n);

void process2vla (int n, int m, short ar2[n] [m] ); process2(clops, 10); process2vla(10, 30, clops);

в. void process3 (long ar3 [10] [15] , int n);

void process3vla (int n, int m, int k, long ar3 [n] [m] [k] );

process3(shots, 5);

process3vla (5, 10, 15, shots);

13. a. show ( (int [4]) (8,3,9,2], 4);

б. show2 ( (int[][3]) ((8,3,9), (5,4,1)), 2);

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

1. Если вы хотите, чтобы результат был строкой, то инициализация должна включаcть '\0' Разумеется, альтернативный синтаксис добавляет нулевой символ автоматически:

char name[] = " Fess";

2. Увидимся завтра в кафе. видимся завтра в кафе.

Увидимс

идимс

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

3. о но сно усно кусно Вкусно

4. За всю дорогу я смог осилить лишь часть .

5. а. Хо Хо Хо! ! оХ оХ оХ

б. Указатель на char (т.е.char *)

в. Адрес начальной буквы X.

г. Выражение *--рс означает уменьшение указателя на 1 и использование значения, находящегося по этому адресу. —*рс означает взятие значения, на которое ссылается указатель рс, и уменьшение этого значения на 1 (например, символ X становится символом Ф).

д. Хо Хо Хо ! ! оХ оХ о

На заметку!

Между символами ! и ! присутствует нулевой символ, но обычно он не оказывает никакого

влияния на вывод.

е. while (* рс) проверяет, не указывает ли рс на нулевой символ (т.е. на конец строки). В выражении используется значение, расположенное по указанному месту.

while (рс - str) проверяет, не указывает ли рс на то же место, что и str (начало строки). В выражении применяются значения самих указателей.

ж. После первой итерации цикла while указатель рс указывает на нулевой символ. При входе во вторую итерацию цикла он указывает на ячейку памяти, предшествующую нулевому символу (т.е. расположенную непосредственно перед той, на которую указывает str). Этот байт интерпретируется как символ и выводится. Затем указатель возвращается к предыдущему байту. Условие выхода из цикла (рс == str) никогда не удовлетворяется, и процесс продолжается до тех пор, пока не будет прерван пользователем или системой.

з. рг() должен быть объявлен в вызывающей программе: char * pr(char *);

6. Под символьные переменные отводится один байт, поэтому sign занимает один байт. Но символьная констан та сохраняется в виде int, т.е. ‘$’ обычно будет использовать 2 или 4 байта; тем не менее, для хранения кода ‘$’ в действительности будет задействован только один байт из int. Строка "$" использует два байта: один для хранения кода символа ‘$’ и еще один для хранения кода символа ‘\0’.

7. Эта программа выводит следующие данные:

How are ya, sweetie? How are ya, sweetie?

Beat the clock, eat the clock.

Beat the clock. Win a toy.

Beat

chat

hat

at

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

8 Ее вывод имеет следующий вид faavrhee leonsm 9 Ниже показано одно из - фото 613

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

faavrhee *le*on*sm

9. Ниже показано одно из возможных решений:

#include // для fgets() , getchar() char * s_gets(char * st, int n)

{

char * ret_val;

ret_val = fgets(st, n, stdin); if (ret_val)

{

while (*st != '\n' && *st != '\n') st + +;

if (*st == '\n')

* s t = '\0'); else

while (getchar() != '\n') continue;

}

return ret_val;

}

10. Вот одно из возможных решений:

int strlen(const char * s)

{

int ct = 0;

while (*s++) // или while (*s++ != '\n')

ct++;

return (ct);

}

11. Ниже показано одно из возможных решений:

#include // для fgets(), getchar()

#include // для strchr(); char * s_gets(char * st, int n)

{

char * ret_val; char * find;

ret_val = fgets (st, n, stdin); if (ret_val)

{

find = strchr(st, '\n'); // поиск символа новой строки

if (find) // если адрес не является NULL,

*find = '\0’; // поместить туда нулевой символ

else

while (getchar() != '\n') continue;

}

return ret_val;

}

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

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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