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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Программе можно предоставить доступ к аргументам командной строки с помощью двух формальных аргументов функции main(). Первый аргумент, по традиции называемый argc, имеет тип int, и ему присваивается количество слов в командной строке. Второй аргумент, традиционно имеющий имя argv, представляет собой указатель на массив указателей на тип char. Каждый указатель на char ссылается на один из элементов командной строки, при этом argv[0] указывает на имя команды, argv[l] — на первый аргумент командной строки, argv [2] — на второй аргумент и т.д.

Функции atoi(), atol() и atof() преобразуют строковые представления чисел в значения типов int, long и double. Функции strtol(), strtoul() и strtod() преобразуют строковые представления чисел в формы типов long, unsigned long и double.

Вопросы для самоконтроля

Ответы на вопросы для самоконтроля приведены в приложении А.

1. Какая ошибка допущена в представленном объявлении символьной строки?

int main(void)

{

char name[] = {'Л', 'у', 'н', 'а'};

картинка 371

}

2. Что выведет следующая программа?

#include int main(void)

{

char note[] = "Увидимся завтра в кафе."; char *ptr;

ptr = note; puts (ptr); puts(++ptr); note[7] = ‘\0’; puts(note); puts(++ptr); return 0;

}

3. Что выведет следующая программа?

#include

#include int main(void)

{

char food[] = "Вкусно"; char *ptr;

ptr = food + strlen(food); while (--ptr >= food) puts (ptr); return 0;

}

4. Что выведет следующая программа?

#include

#include

Символьные строки и строковые функции 475

int main(void)

{

char goldwyn[40] = "ovy я смог ";

char samuel[40] = "За всю дор";

const char * quote = "осилить лишь часть.";

strcat(goldwyn, quote); strcat(samuel, goldwyn); puts(samuel);

return 0;

}

5. Приведенные ниже вопросы позволят попрактиковаться со строками, циклами, указателями и их инкрементированием. Предположим, что имеется такое определение функции:

#include char *pr (char *str)

{

char *pc;

pc = str; while (*pc)

putchar(*pc++); do {

putchar(*—pc);

} while (pc - str); return (pc);

}

Взгляните на следующий вызов функции:

х = pr{"Хо Хо Хо!");

а. Что он выводит?

б. Какой тип должна иметь переменная х?

в. Какое значение получает переменная х?

г. Что означает выражение *—рс, и чем оно отличается от —*рс ?

д. Что будет выведено, если *—рс заменить выражением *рс—?

е. Для чего предназначены два выражения проверки в операторах while?

ж. Что произойдет, если функции pr() передать в качестве аргумента пустую строку?

з. Что придется сделать в вызывающей функции, чтобы pr() можно было использовать так, как показано выше?

6. Предположим, что имеется следующее объявление:

char sign = ‘$';

Сколько байтов памяти занимает переменная sign? Значение ‘$’? Значение "$"?

7. Что выведет следующая программа?

#include

#include

#define Ml "How are ya, sweetie? "

char М2[40] = "Beat the clock.";

char * М3 = "chat";

476 глава 11

int main(void)

{

char words[80];

printf(Ml); puts(Ml); puts(М2); puts(М2 + 1); strcpy(words,М2); strcat(words, " Win a toy."); puts(words); words [4] = '\0'; puts(words); while (*M3) puts(M3++); puts(--M3); puts(--М3);

М3 = Ml; puts(М3);

return 0;

}

8. Что выведет следующая программа?

#include int main(void)

{

char strl[] = "gawsie"; char str2[] = "bletonism"; char *ps;

int i = 0;

for (ps = strl; *ps != '\0'; ps++) { if ( *ps== 'a' || *ps== 'e') putchar(*ps);

else

(*ps)

putchar (*ps);

}

putchar('\n ');

while (str2[i] != '\0') {

printf ("%c", i % 3 ? str2[i] : '*');

++i;

}

return 0;

}

9. Функцию s_gets(), определенную в этой главе, можно переписать в форме с использованием указателей, а не массивов, чтобы исключить из нее переменную i. Сделайте это.

10. Функция strlen() принимает указатель на строку в качестве аргумента и возвращает длину строки. Напишите свою версию этой функции.

11. Функцию s_gets(), определенную в этой главе, можно переписать с использованием функции strchr() вместо цикла while для обнаружения символа новой строки. Сделайте это.

Символьные строки и строковые функции 477

12. Разработайте функцию, которая принимает указатель на строку в качестве аргумента и возвращает указатель на первый символ пробела, расположенный в указанной позиции внутри строки или после нее. Функция должна возвращать нулевой указатель, если пробелы не найдены.

13. Перепишите программу из листинга 11.21, используя функции из ctype.h для того, чтобы программа распознавала правильный ответ независимо от применения пользователем прописных или строчных букв.

Упражнения по программированию

1. Разработайте и протестируйте функцию, которая извлекает из ввода следующие п символов (включая символы пробела, табуляции и новой строки), сохраняя результаты в массиве, адрес которого передается в качестве аргумента.

2. Модифицируйте и протестируйте функцию из упражнения 1, обеспечив в ней прекращение ввода после n символов либо при достижении первого символа пробела, табуляции или новой строки, в зависимости от того, что произойдет раньше. (Не ограничивайтесь только использованием scanf().)

3. Разработайте и протестируйте функцию, которая читает первое слово из строки ввода в массив и отбрасывает остальную часть строки. Функция должна пропускать ведущие пробельные символы. Определите слово как последовательность символов, не содержащую символов пробела, табуляции или новой строки. Используйте функцию getchar(), а не scanf().

4. Разработайте и протестируйте функцию, подобную описанной в упражнении 3, за исключением того, что она принимает второй параметр, указывающий максимальное количество символов, которые могут быть прочитаны.

5. Разработайте и протестируйте функцию, которая ищет в переданной в первом параметре строке первое вхождение символа, заданного во втором параметре. Функция должна возвратить указатель на этот символ, если он найден, и ноль в противном случае. (Поведение этой функции дублирует работу библиотечной функции strchr().) Протестируйте функцию в завершенной программе, которая использует цикл для передачи входных значений созданной функции.

6. Напишите функцию по имени is within(), которая в качестве двух своих параметров принимает символ и указатель на строку. Функция должна возвращать ненулевое значение, если заданный символ содержится в строке, и ноль в противном случае. Протестируйте функцию в завершенной программе, которая использует цикл для передачи входных значений созданной функции.

7. Функция strncpy (si, s2, n) копирует в точности n символов из строки s2 в строку si, при необходимости усекая s2 или дополняя ее нулевыми символами. Целевая строка может не содержать завершающего нулевого символа, если длина строки s2 равна или больше n. Функция возвращает строку si. Напишите свою версию этой функции и назовите ее mystrncpy(). Протестируйте функцию в завершенной программе, которая использует цикл для передачи входных значений созданной функции.

8. Напишите функцию string in(), которая принимает в качестве аргументов два указателя на строки. Если вторая строка содержится внутри первой, функция должна возвратить адрес, с которого начинается вторая строка в первой строке.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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