Язык программирования c упражнения
Язык программирования c упражнения
ITc | сообщество программистов запись закреплена
Язык программирования C.
Лекции и упражнения, 6-е издание
Год издания: 2015 (2014)
Автор: Стивен Прата (Stephen Prata)
Издательство: Вильямс (Addison-Wesley)
Язык: Русский
Формат: PDF
Количество страниц: 928
Описание:
Эта книга представляет собой тщательно проверенное, хорошо продуманное и всеобъемлющее учебное пособие, предназначенное для программистов и разработчиков. Ставшая классикой в области вычислений, она обучает принципам программирования, в том числе структуризации кода и нисходящему проектированию.
Автор и преподаватель Стивен Прата создал поучительное, ясное и проницательное введение в C. Наряду с деталями языка C объясняются фундаментальные концепции программирования. Многочисленные короткие практические примеры иллюстрируют только одну или две концепции за раз и поощряют читателей проработать новые темы, непосредственно приступив к реальному их использованию.
Шестое издание этой книги было обновлено и расширено с целью охвата последних наработок в C, а также раскрытия подробностей нового стандарта C11. Здесь вы найдете углубленные, широкие и разнообразные подходы и инструменты, совершенствующие процесс изучения.
Полное и комплексное обсуждение основ языка C и дополнительных возможностей.
Четкое руководство о том, когда и почему использовать различные части языка.
Обучение через практику с помощью кратких и простых примеров, способствующих пониманию одной или двух концепций за раз.
Сотни примеров учебных программ.
Вопросы для самоконтроля и упражнения по программированию, приводимые в конце каждой главы, которые предназначены для закрепления прочитанного материала.
Обзор обобщенного программирования в C, обеспечивающего высокий уровень гибкости.
Вопросы для самоконтроля и упражнения по программированию, приводимые в конце каждой главы, ориентированы на критически важные сведения и помогают читателям понять и систематизировать наиболее сложные концепции. Будучи дружественным и простым в чтении руководством, ориентированным на самостоятельное освоение, книга подойдет как студентам, изучающим программирование, так и разработчикам, которые специализируются на других языках и желают лучше понять основы этого основного языка.
C++ с нуля
Этот самоучитель создан для тех, кто хочет освоить основы программирования на C++. Уроки рассчитаны, в первую очередь на новичков, но будут полезны и тем, кто уже имеет небольшой опыт в программировании. Мы начнем с основных принципов и закончим данный курс уже на более сложных примерах.
Первая программа на C++ — урок 1
В качестве среды разработки под Windows автор советует использовать Visual Studio 2008 (800 Мб), если у вас Windows XP, Visual Studio 2013 (6.5 Гб) для Windows 7 и выше, или Dev C++ 5 (41 Мб) для тех, у кого слишком медленный интернет для загрузки Visual Studio. Пользователям Unix-подобных систем, потребуется компилятор GCC и любой текстовый редактор, например Vim.
После того, как вы установили все необходимое, приступим к написанию первой программы.
Переменные и типы данных в C++ — урок 2
Из школьного курса математики мы все знаем, что такое переменные. В программировании принципы довольно схожи. Переменная — это «ячейка» оперативной памяти компьютера, в которой может храниться какая-либо информация.
Конструкция ветвления в C++ — урок 3
Встречаются ситуации, когда программе нужно выбрать, какую операцию ей выполнить, в зависимости от определенного условия.
К примеру, мы вводим с клавиатуры целое число. Если это число больше десяти, то программа должна выполнить одно действие, иначе — другое. Реализуем этот алгоритм на C++ с помощью конструкции ветвления.
Циклы в C++ — урок 4
Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. В этом уроке мы научимся программировать циклы на C++, после чего посчитаем сумму всех чисел от 1 до 1000.
Массивы в C++ — урок 5
Сегодня мы с поговорим о массивах. Вы уже знаете, что переменная — это ячейка в памяти компьютера, где может храниться одно единственное значение. Массив — это область памяти, где могут последовательно храниться несколько значений.
Возьмем группу студентов из десяти человек. У каждого из них есть фамилия. Создавать отдельную переменную для каждого студента — не рационально. Создадим массив, в котором будут храниться фамилии всех студентов.
Функции в C++ — урок 6
Сегодня мы поговорим о функциях в C++. Очень часто в программировании необходимо выполнять одни и те же действия. Например, мы хотим выводить пользователю сообщения об ошибке в разных местах программы, если он ввел неверное значение. без функций это выглядело бы так:
Указатели в C++ — урок 7
Если переменных в памяти потребуется слишком большое количество, которое не сможет вместить в себя сама аппаратная часть, произойдет перегрузка системы или её зависание.
Динамические массивы в C++ — урок 8
В пятом уроке мы разобрали понятие массива. При объявлении, мы задавали массиву определенный постоянный размер.
Параметры командной строки в C++ — урок 9
При запуске программы из командной строки, ей можно передавать дополнительные параметры в текстовом виде.
Классы в C++ — урок 10
Весь реальный мир состоит из объектов. Города состоят из районов, в каждом районе есть свои названия улиц, на каждой улице находятся жилые дома, которые также состоят из объектов.
Зачем и как эффективно учить язык программирования Си: исчерпывающая подборка ресурсов для освоения
Язык Си был разработан Деннисом Ритчи и Брайаном Керниганом в 1969–1973 годах. Си задумывался для реализации операционной сети UNIX, но впоследствии он нашел себе более широкое применение.
На сегодняшний момент Си занимает стабильное второе место в индексе TIOBE.
Зачем нужен Си?
Мы уже писали о важности языка Си, поэтому пробежимся по основным пунктам.
Начнем с того, что большая часть системного программного обеспечения пишется на языке Си. Ядро популярнейшей open source ОС Linux было написано на Си.
Огромным плюсом Си является то, что каждая инструкция языка транслируется в машинный код прямым и понятным образом. Исполняется ровно тот код, который программист видит на экране. Впрочем, в современных компиляторах, конечно, могут применяться хитрые оптимизации, но в меньшинстве случаев.
3–5 мая, Онлайн, Беcплатно
Стоит также отметить, что наиболее популярные языки программирования тем или иным образом связаны с Си. Так, например, Java и C# имеют так называемый Си-подобный синтаксис, а C++ и Objective-C в том или ином роде являются расширениями Си.
Если вы пишете код на каком-нибудь динамическом языке программирования, будь то PHP, JavaScript или Python, то его интерпретатор, среда исполнения и большинство библиотек в основном написаны на Си. Следовательно, чтобы понять особенности поведения того или иного языка, нужно знать особенности языка Си. А если вы вышли за рамки возможностей своего языка программирования, то не успеете оглянуться, как начнёте писать новое расширение на Си.
К тому же, знание Си позволяет программисту по-настоящему оценить все прелести высокоуровневых языков программирования, а также и ограничения, которые возникают при их использовании.
И это далеко не все доводы в пользу изучения Си.
Что дальше?
Теперь, когда мы разобрались, зачем нам нужен Си, возникает логичный вопрос: «А как его выучить?».
Далее мы подготовили для вас несколько курсов и материалов, которые помогут вам освоиться в новом для вас языке программирования.
Книга «Язык программирования Си»
Никто не расскажет вам о Си лучше, чем создатели этого языка программирования. Поэтому книга «Язык программирования Си», написанная Деннисом Ритчи и Брайаном Керниганом, является must-have для каждого, кто хоть как-то решил связать свою жизнь с Си.
Курс «The Complete C Developer Course — Build 7 Exciting Projects»
Курс покрывает как начальные аспекты языка, так и более продвинутые: программирование графики, модели памяти и многое другое. В процессе прохождения курса вы создадите 7 захватывающих проектов, таких как систему по управлению базами данных и свой собственный компьютерный вирус.
Курс платный, но он однозначно стоит своих денег. Дальше предлагаем бесплатные материалы.
Знаменитый гарвардский курс «CS50»
Теперь он доступен на русском языке. Прежде всего CS50 научит вас думать. Некоторые из тем, которые вы пройдете в течение курса: абстракция, алгоритмы, структуры данных, инкапсуляция, управление ресурсами, безопасность, разработка программного обеспечения и веб-разработка. Языки, которые вы будете использовать: C, Python, SQL и JavaScript вместе с HTML и CSS. И что немаловажно, курс бесплатный.
Бесплатный курс «C Tutorial for Beginners»
С этой программой вы изучите основы языка Си, разберётесь с указателями, структурами и объединениями, а также научитесь писать простые программы.
Бесплатные онлайн-курсы по Си от двух ведущих финских университетов
Курс включает в себя комплексные материалы и множество упражнений по программированию, а также автоматическую систему тестирования.
Над курсом совместно работали университет Аалто и университет Хельсинки (тот самый, где когда-то обучался Линус Торвальдс), а объясняемый в нем материал полностью дублирует курсы по Си, преподаваемые в этих университетах.
Книга «Learn C The Hard Way»
Книга обучит вас тому Си, который применяется в реальной жизни для создания реальных проектов, а не абстрактным механизмам и педантичной теории. Вы также изучите несколько важных тем, таких как алгоритмы и структуры данных и автоматизированное тестирование. Желающие могут найти ее перевод на русский язык. Tproger тоже часто рекомендует хорошие книги по программированию, так что загляните в соответствующую рубрику на нашем сайте.
Интерактивное обучение Си
Руководство покрывает как базовые конструкции языка, так и более продвинутые, такие как указатели, объединения, бинарные деревья и многое другое.
Введение в Си от Hexlet
Курс предназначен для абсолютных новичков в программировании. Он познакомит вас с главными концепциями языка Си.
Еще больше материалов по Си можно найти в нашей огромной подборке «Бесплатные материалы для программистов».
[Язык C] Упражнения по программированию (глава 7)
Задания из седьмой главы книжки Стивена Прата “C Primer Plus” — “Управляющие операторы С: ветвление и переходы“.
1. Напишите программу, которая читает входные данные до тех пор, пока не встретится символ #, а затем отображает количество прочитанных пробелов, количество символов новой строки и количество всех остальных символов.
В ПРОЦЕССЕ НАПИСАНИЯ
2. Напишите программу, которая читает входные данные до тех пор, пока не встретится символ #. Программа должна выводить каждый введенный символ и его десятичный код ASCII. Каждая строка вывода должна содержать восемь пар “символ-код”.
Подсказка: используйте счетчик символов и операцию деления по модулю (%) для
вывода символа новой строки на каждой восьмой итерации цикла.
3. Напишите программу, которая читает целые числа до тех пор, пока не встретится число 0. После прекращения ввода программа должна сообщить общее количество введенных четных целых чисел (за исключением 0), среднее значение введенных четных целых чисел, общее количество введенных нечетных целых чисел и среднее значение нечетных чисел.
4. Используя операторы if else, напишите программу, которая читает входные
данные, пока не встретит символ #, заменяет каждую точку восклицательным
знаком, изначально присутствующие восклицательные знаки — двумя восклицательными знаками и в конце сообщает о количестве произведенных замен.
5. Выполните упражнение 4, но с применением оператора switch.
6. Напишите программу, которая читает входные данные, пока не встретит символ #, и сообщает количество вхождений последовательности ei.
На заметку!
Эта программа должна “запоминать” предыдущий символ, а также текущий символ. Проверьте ее на входной последовательности вроде “Receive your eieio award#”.
Используйте константы #define и не беспокойтесь, если приведенный пример
не соответствует действующему налогообложению.
Первый блин комом – криво считает налог выше 300:
Вывод (комментарии добавил руками):
Вот рабочий вариант:
Программа выглядит несколько громоздкой, но зато весьма понятной. Теперь приведем ее в более универсальный вид (это будет полезно для следующего задания):
8. Измените предположение а) в упражнении 7 так, чтобы программа предоставляла меню с тарифными ставками. Для выбора тарифной ставки используйте оператор switch. После запуска программы вывод должен быть подобным по указанному ниже:
Если выбран вариант с 1 по 4, программа должна запрашивать количество отработанных часов. Программа должна повторяться до тех пор, пока не будет выбран вариант 5. При вводе чего-то отличного от вариантов 1-5 программа должна напомнить пользователю допустимые варианты для ввода и снова ожидать ввод. Для различных тарифных и налоговых ставок применяйте константы #define.
Эту программу было очень прикольно писать. В процессе наткнулся на проблему заклинивания (jam) при вводе вместо 1-5 какого-либо символа; об этом отдельная статья.
9. Напишите программу, которая принимает в качестве ввода положительное целое число и отображает все простые числа, которые меньше или равны введенному числу.
10. В 1988 году шкала федеральных налоговых ставок Соединенных Штатов была самой простой за все прошедшее время. Она содержала четыре категории, каждая из которых включала две ставки. Ниже приведены самые общие данные (суммы в долларах представляют собой доход, облагаемый налогом).
Первый вариант получился кривоватым; кроме того, не используется глобальный цикл:
Второй вариант (отступы съехали децл):
Удивительно. В этой программе я впервые столкнулся с тем, что неправильно понял “заказчика” (условие задачи). В итоге уже пару раз пришлось все переделывать – сначала я использовать цифры 123, вместо abc (соответственно проверки все кривые), затем меня проглючило и я в меню заказа на q повесил выход из программы (а не из заказа!), почему-то у меня в голове было именно такое (не по ТЗ) условие задачи. В общем, еще раз получил по голове за лень – надо четко прописывать алгоритм программы на бумажке – в строгом соответствии с ТЗ. Иначе потом переделывать замучаешься… Ну.. Тяжело в учении, легко в бою 😉
Также я специально эту и предыдущие две программы пишу через разные лупы (петли.. циклы), чтобы потренироваться. Итак, код:
Вообще, эта последняя программы была весьма непростой. Много всяких тонкостей, связанных с корректным выходом из цикла. Так как автор книги написал, что goto лучше не использовать (кроме вывода ошибок и других экстренных случаев), я старался к нему не прибегать, что привело к некоторым сложностям. Но в итоге, все работает! %)
Язык программирования C — Лекции и упражнения
Практическое руководство.
Стивен Прата «Язык программирования C. Лекции и упражнения» Вильямс, 2015 год, 928 стр. перевод с англ. 6-е изд. (14,4 мб. pdf + примеры — 0,5 мб.)
Книга является понятным и доступным для самостоятельного обучения практическим руководством. Совместно с описанием возможностей языка C определена и концепция программирования. Предполагается, что читатель является опытным программистом. Все приводимые в книге примеры, которые нетрудно ввести с клавиатуры, определяют одну или две концепции за раз, так как практическое обучение является одним из наиболее эффективных способов усвоения новой информации.
Рисунки и иллюстрации проясняют принципы программирования, которые трудно описать только одними словами. Главные средства языка C подытожены во врезках, на которые легко ссылаться и пересматривать. Для самоконтроля служат упражнения по программированию в конце каждой главы, которые позволяют проверять и закреплять понимание языка C. ISBN 978-5-8459-1950-2 (рус.)
Глава 1. Предварительные сведения 25
Появление языка C 26
Причины популярности языка C 26
Конструктивные особенности 26
Эффективность 27
Переносимость 27
Мощь и гибкость 28
Ориентация на программистов 28
Недостатки 28
Происхождение языка C 29
Особенности функционирования компьютеров 30
Языки программирования высокого уровня и компиляторы 31
Стандарты языка C 32
Первый стандарт ANSI/ISO C 33
Стандарт С99 33
Стандарт СП 34
Использование языка C: семь этапов 35
Этап 1: определение целей программы 35
Этап 2: проектирование программы 35
Этап 3: написание кода 36
Этап 4: компиляция 36
Этап 5: запуск программы на выполнение 37
Этап 6: тестирование и отладка программы 37
Этап 7: сопровождение и модификация программы 38
Комментирование 38
Механика программирования 38
Файлы объектного кода, исполняемые файлы и библиотеки 39
Операционная система Unix 41
Коллекция компиляторов GNU и проект LLVM 43
Системы Linux 43
Компиляторы командной строки для PC 44
Интегрированные среды разработки (Windows) 44
Опция Windows/Linux 46
Работа с языком C в системах Macintosh 46
Как организована эта книга 47
Соглашения, принятые в этой книге 47
Шрифты и начертание 47
Вывод программы 48
Специальные элементы 49
Резюме 49
Вопросы для самоконтроля 50
Упражнения по программированию 50
Глава 3. Данные в языке C 77
Демонстрационная программа 78
Что нового в этой программе? 79
Переменные и константы 80
Ключевые слова для типов данных 81
Сравнение целочисленных типов и типов с плавающей запятой 82
Целые числа 82
Числа с плавающей запятой 83
Базовые типы данных языка C 84
Тип int 84
Другие целочисленные типы 88
Использование символов: тип char 92
Тип_Вооl 98
Переносимые типы: stdint.h и inttypes.h 98
Комплексные и мнимые типы 105
За пределами базовых типов 105
Размеры типов 108
Использование типов данных 108
Аргументы и связанные с ними ловушки 109
Еще один пример: управляющие последовательности 111
Результаты выполнения программы 111
Сброс буфера вывода 112
Ключевые понятия 113
Резюме 113
Вопросы для самоконтроля 114
Упражнения по программированию 116
Глава 4. Символьные строки и форматированный ввод-вывод 117
Вводная программа 118
Введение в символьные строки 119
Массив типа char и нулевой символ 119
Использование строк 120
Функция strlen () 121
Константы и препроцессор C 123
Модификатор const 127
Работа с символическими константами 127
Исследование и эксплуатация функций print f() Hscan f() 129
Функцияprintf () 130
Использование функции print f () 130
Использование функции scan f () 144
Ключевые понятия 151
Резюме 152
Вопросы для самоконтроля 153
Упражнения по программированию 155
Глава 8. Символьный ввод-вывод и проверка достоверности ввода 293
Односимвольный ввод-вывод: getchar () и putchar () 294
Буферы 295
Завершение клавиатурного ввода 297
Файлы, потоки и ввод данных с клавиатуры 297
Конец файла 298
Перенаправление и файлы 301
Перенаправление в Unix, Linux и командной строке Windows 302
Создание дружественного пользовательского интерфейса 305
Работа с буферизированным вводом 305
Смешивание числового и символьного ввода 308
Проверка допустимости ввода 310
Анализ программы 315
Поток ввода и числа 315
Просмотр меню 316
Задачи 316
На пути к более гладкому выполнению 317
Смешивание символьного и числового ввода 319
Ключевые понятия 321
Резюме 322
Вопросы для самоконтроля 322
Упражнения по программированию 323
Глава 9. Функции 325
Обзор функций 326
Создание и использование простой функции 327
Анализ программы 328
Аргументы функции 330
Определение функции с аргументами: формальные параметры 331
Создание прототипа функции с аргументами 332
Вызов функции с аргументами: фактические аргументы 333
Содержание 11
Представление в виде черного ящика 334
Возврат значения из функции с помощью return 334
Типы функций 337
Создание прототипов функций в ANSI C 338
Суть проблемы 338
Решение стандарта ANSI C 339
Отсутствие аргументов и неопределенные аргументы 340
Преимущество прототипов 341
Рекурсия 341
Рекурсия в действии 342
Основы рекурсии 343
Хвостовая рекурсия 344
Рекурсия и изменение порядка на противоположный 346
Преимущества и недостатки рекурсии 348
Компиляция программ, состоящих из двух и более файлов исходного кода 349
Unix 349
Linux 349
Компиляторы командной строки DOS 350
Компиляторы интегрированных сред разработки в Windows и Apple 350
Использование заголовочных файлов 350
Выяснение адресов: операция & 353
Изменение переменных в вызывающей функции 355
Указатели: первое знакомство 357
Операция разыменования: * 357
Объявление указателей 358
Использование указателей для обмена данными между функциями 359
Ключевые понятия 363
Резюме 363
Вопросы для самоконтроля 364
Упражнения по программированию 365
Глава 11. Символьные строки и строковые функции 419
Введение в строки и строковый ввод-вывод 420
Определение строк в программе 421
Указатели и строки 429
Ввод строк 430
Создание пространства под строку 430
Неудачливая функция gets () 430
Альтернативы функции gets () 432
Функцияscanf() 438
Вывод строк 440
Функция puts () 440
Функция fputs () 441
Функцияprintf() 442
Возможность самостоятельного создания функций 442
Строковые функции 445
Функцияstrlen() 445
Функцияstrcat() 446
Функцияstrncat () 447
Функция strcmp () 449
Функцииstrcpy() иstrncpy() 454
Функция sprintf () 459
Другие строковые функции 460
Пример обработки строк: сортировка строк 462
Сортировка указателей вместо строк 464
Алгоритм сортировки выбором 465
Символьные функции ctype.h и строки 465
Аргументы командной строки 467
Аргументы командной строки в интегрированных средах 469
Аргументы командной строки в Macintosh 469
Преобразования строк в числа 470
Ключевые понятия 473
Резюме 473
Вопросы для самоконтроля 474
Упражнения по программированию 477
Глава 12. Классы хранения, связывание и управление памятью 479
Классы хранения 480
Область видимости 481
Содержание 13
Связывание 483
Продолжительность хранения 484
Автоматические переменные 486
Регистровые переменные 490
Статические переменные с областью видимости в пределах блока 491
Статические переменные с внешним связыванием 492
Статические переменные с внутренним связыванием 496
Множество файлов 497
Спецификаторы классов хранения 498
Классы хранения и функции 501
Выбор класса хранения 501
Функция генерации случайных чисел и статическая переменная 502
Игра в кости 505
Выделенная память: malloc () Hfree() 509
Важность функции free () 513
Функция callос () 514
Динамическое распределение памяти и массивы переменной длины 514
Классы хранения и динамическое распределение памяти 515
Квалификаторы типов ANSI C 517
Квалификатор типа const 517
Квалификатор типа volatile 519
Квалификатор типа restrict 520
Квалификатор типа Atomic (C 11) 521
Новые места для старых ключевых слов 522
Ключевые понятия 523
Резюме 523
Вопросы для самоконтроля 525
Упражнения по программированию 526
Глава 15. Манипулирование битами 627
Двоичные числа, биты и байты 628
Двоичные целые числа 629
Целые числа со знаком 629
Двоичные числа с плавающей запятой 630
Другие основания систем счисления 631
Восьмеричная система счисления 631
Шестнадцатеричная система счисления 631
Побитовые операции 632
Побитовые логические операции 633
Случай применения: маски 634
Случай применения: включение (установка) битов 635
Случай применения: выключение (очистка) битов 636
Случай применения: переключение битов 636
Случай применения: проверка значения бита 637
Побитовые операции сдвига 637
Пример программы 639
Еще один пример 640
Битовые поля 642
Пример с битовыми полями 644
Битовые поля и побитовые операции 647
Средства выравнивания (C11) 653
Ключевые понятия 655
Резюме 655
Вопросы для самоконтроля 656
Упражнения по программированию 658
Упражнения по программированию
Приложение А. Ответы на вопросы для самоконтроля
Ответы на вопросы ДЛЯ самоконтроля из главы 1-17
Приложение Б. Справочные материалы
Раздел I. Дополнительные источники информации
Онлайновые ресурсы
Книги по языку C
Книги по программированию
Справочные руководства Книги по C++
Операции в языке C
Арифметические операции
Операции отношений
Операции присваивания
Логические операции
Условная операция
Операции, связанные с указателями 836
Операции со знаком 836
Операции структур и объединений 836
Побитовые операции 837
Прочие операции 838
Раздел III. Базовые типы и классы хранения 838
Сводка: базовые типы данных 838
Сводка: объявление простой переменной 840
Сводка: квалификаторы 842
Раздел IV. Выражения, операторы и поток управления программы 843
Сводка: выражения и операторы 843
Сводка: оператор while 844
Сводка: оператор for 844
Сводка: оператор do while 845
Сводка: использование операторов if для реализации выбора 845
Сводка: множественный выбор с помощью switch 846
Сводка: переходы в программе 847
Раздел VI. Расширенные целочисленные типы 895
Типы с точной шириной 895
Типы с минимальной шириной 896
Содержание 19
Самые быстрые типы с минимальной шириной 896
Типы максимальной ширины 897
Целые, которые могут хранить указатели 897
Расширенные целочисленные константы 898
Раздел VII. Расширенная поддержка символов 898
Триграфы 898
Диграфы 899
Альтернативное написание: isо 646. h 899
Многобайтные символы 899
Универсальные имена символов (UCN) 900
Широкие символы 901
Широкие и многобайтные символы 903
Приложение В. Набор символов ASCII 917
Предметный указатель 922