Разное

Задания для начинающих по c: Решение задач на языке C

Сборник занимательных задач по языку программирования C

Этот задачник я составлял с 1989-го по 1994-й год, когда активно писал на C. В начале 2000-х в него попали несколько задач по C++. Сейчас, не меняя содержания, я провёл параллели с современными наследниками C: Java и C#.

Предисловие

Без C мы имели бы BASI, OBOL и PASAL.

Моя друзья-программисты не всегда отвечали правильно на вопросы из этого задачника. Я и сам, когда сталкивался с этими примерами в реальной работе, тратил несколько часов или дней, чтобы понять, почему программа работает не так, как надо. Дело не в сложности задач, а в том, что они раскрывают тонкости языка, которые недоступны при первом знакомстве.

Большинство задач родились в живых проектах, они не надуманы и не абстрактны. Сначала я записывал их сам, затем мне стали помогать друзья, а затем мы стали придумывать новые похожие вопросы.

Иногда программисты смеются, узнав ответ на очередную задачу. Возможно, потому, что они открывают для себя C с неожиданной стороны.

Благодарности

В первую очередь следует поблагодарить Денниса М. Ритчи (Dennis M. Ritchie) и его ближайшего соратника Бриана В. Кернигана (Brian W. Kernighan), без которых не было бы ни языка C, ни той самой книги.

Без всякого сомнения, Бьярн Страустрап (Bjarne Stroustrup) заслуживает отдельной благодарности за создание C++.

Я в большом долгу перед друзьями и коллегами, которые не только не дали забросить мне моё безнадёжное начинание, но и помогали советами. В частности, я благодарю Диму Борток, Игоря Житко, Булата Зиганшина, Сашу Козлова, Сергея Рудницкого и Олега Сорока, тратящих свое время на обсуждение предлагаемых задач, Роберта Фахртдинова, преподавателя программирования на физфаке КГУ, автора нескольких вопросов. Всем им большое спасибо.

Введение

Везде, где идет ссылка на K&R, имеется в виду книга «Язык программирования Си», выпущенная издательством «Финансы и статистика» в 1992 году.

Это перевод второго издания K&R (1988), где Ритчи и Керниган описали стандарт ANCI C. Автор перевода Вик.С. Штаркман, редакция и предисловие Вс.С. Штаркмана. Так же использовался «Первый рабочий проект» комитета X3J11 (1986), перевод Л.Е.Карпова (1988). Некоторые задачки уточнялись по Бьярну Страустрапу, «Язык программирования Си++», вторая редакция (1991), перевод В. Тропашко, выпущена издательством ДиаСофт в 1993г.

Текст логически разделен на три части и одно приложение. Первая часть содержит коварные вопросы по языку C. Во второй части вы найдёте два примера коротких, но поучительных программ на C, которые раскрывают малоизвестные возможности языка. Третья часть относится к области чистой программистской эстетики. Приложение А содержит таблицу приоритета и порядка разбора операторов.

Часть I

Часть II

Часть III

Приложение А: Приоритеты и ассоциативность операторов

Please enable JavaScript to view the comments powered by Disqus.

28 cайтов, на которых можно порешать задачи по программированию

Не секрет, что лучший способ повысить свои навыки в программировании — это практиковаться и только практиковаться. Мы подготовили для вас огромную подборку сайтов с задачами по программированию на самые разные темы.

Также можете попытаться решить самые заковыристые логические задачи с собеседований.

Codeforces — несомненно самая популярная и известная платформа во всем мире для проведения соревнований на алгоритмику. Кроме крупных контестов сайт зачастую проводит свои «раунды» — участникам даются 5 задач на два часа. Есть система рейтинга, на основе которой участники делятся на два дивизиона. Таким образом, профи не соревнуются с новичками напрямую. Все задачи можно сдать и проверить даже после соревнований. Кроме «раундов» доступны и «тренировки» — задачи с прошедших соревнований публикуются в режиме дорешивания.


 

TopCoder — ненамного отстающая по популярности от Codeforces американская платформа. Примечательна тем, что кроме алгоритмических контестов, которые описывались ранее, на ней проводятся и соревнования по промышленному программированию и марафоны — соревнования с задачами на исследование, для которых нет единого верного алгоритма, а есть лишь ответ, подходящий больше или меньше. На решение таких задач участникам обычно дается одна или две недели.


Timus Online Judge — русскоязычная (хотя английский язык также поддерживается) платформа, на которой более тысячи задач удачно отсортированы по темам и по сложности. Также тут регулярно проводятся контесты уральского региона, которые, впрочем, не представляют для вас ничего интересного, если только вы не студент УрФУ или другого близлежащего вуза 🙂


SPOJ — крупный англоязычный сайт с более чем 20000 задачами на абсолютно разные темы: динамическое программирование, графы, структуры данных и т.д. Изредка проводит контесты, которые не представляют интереса, если вы не живете в странах их проведения.


informatics.mccme.ru — платформа с множеством теоретических материалов и задач по соответствующим темам. Все очень удобно собрано по категориям и темам. Также содержит большую базу задач с прошедших олимпиад школьников.


CodeChef — менее крупный аналог Codeforces и TopCoder, тоже с огромным архивом задач и регулярными контестами.


 

acmp.ru — сайт, который будет полезен всем благодаря своему архиву задач, удобно (и по большей части правильно) отсортированному по сложности и темам. Соревнования проводятся, но участвовать в них имеет смысл только школьникам Красноярского края, для которых эта платформа изначально и предназначалась.


Project Euler — сборник 500 задач, которые невозможно решить без знаний математических и геометрических алгоритмов. Иногда используется на собеседованиях для приема на работу, чтобы лучше выяснить алгоритмическую подготовку претендента.


Kaggle — данная платформа отличается от описанных ранее тем, что тут не проводится алгоритмических соревнований — только задачи на исследование (как в марафонах на вышеприведенном TopCoder). Например, одна из задач, на которой сейчас там проверяют свои умения участники, состоит в распознании написанных вручную цифр. Вот несколько символов, для которых это не так просто, как кажется (прим. авт.некоторые из них я не смог распознать даже не программно):


CodinGame — сайт, на котором программирование и видеоигры сливаются в единое целое. Здесь вы найдете большую коллекцию задач на программирование, оформленных в виде видеоигр. Также тут изредка (раз в два месяца) проводятся контесты, содержащие в себе задачи на оптимизацию и ИИ, победители которых получают ценные призы. А если вы решите много задач, то на вас могут обратить внимание компании, которые набирают на этом сайте работников!


 

CodeCombat будет больше полезен для новичков. Эта платформа наглядно демонстрирует, что обучение программированию — это не так сложно и скучно, как может показаться. Сайт представлен в виде игры, которая разделена на несколько частей, возрастающих по сложности. В каждой части содержится множество задач на те или иные темы, призванные научить программированию с нуля любого человека. Если вы давно мечтали заняться программированием, но никак не находили в себе, обязательно обратите внимание на этот сайт.


HackerRank наоборот будет больше интересен профессионалам, которые уже многое умеют. На этом сайте собрано множество задач на самые разные разделы Computer Science: традиционная алгоритмика, ИИ, машинное обучение и т.д. Если вы решите много задач, то вами могут заинтересоваться работодатели, регуляторно мониторящие эту платформу.


C Puzzles — подборка головоломок, специфичный для языка С, со всеми его причудами. Например, дан код, который, по логике, не должен работать, но, тем не менее, он компилируется и даже правильно выполняет свою задачу. Надо понять, почему так? На этой сайте вы сможете приобрести навык отладки программ и чтения кода других.


Codewars — cборник задач на разные темы, от алгоритмов до шаблонов проектирования.


LeetCode — сайт с задачами для подготовки к собеседованиям.


Programming Praxis — блог, включающий в себя много интересных задач.


PythonChallange — сайт с загадками, возрастающими по сложности. Для их решения необходимо написать программу на Python.


Al Zimmermann’s Programming Contests — платформа, на которой раз в полгода проводятся контесты с задачами на исследование и оптимизацию. Интересен тем, что писать программу необязательно — даются только тестовые данные. Ответы можно расчитывать вручную, или просто гадать их на кофейной гуще.


Ruby Quiz — подборка задач для программистов на Ruby, но решения можно писать и на других языках.


Prolog Problems — аналогично с Ruby Quiz. Подборка задач для программистов, использующих Prolog.


MindCipher — сборник занимательных математических и логических задач (в том числе и по программированию).


Сборник задач для практики от СppStudio. Рекомендуется решать на С++, но можно и на других языках.


CheckIO — сайт с задачами для программистов всех уровней, оформленный в виде игры.


E-olimp — украинская тестирующая система с большим архивом задач.


Empire of Code — сайт для программистов, где необходимо писать код, реализующий стратегию и тактику виртуальных бойцов.


Operation Go — практика написания кода на Go в игровой форме.


Russian AI Cup — ежегодный контест от mail.ru по разработке ИИ. Участвовать могут все — от школьников до профессионалов. Победителям и призерам так же полагаются крутые призы. Обязательно примите участие, если вы заинтересованы этой темой.


Задачи Типичного Программиста — да, на нашем сайте тоже есть задачи с собеседований, причем на самые разные темы: от логических и математических до алгоритмических. В эту подборку включены лучшие из них (она регулярно обновляется).

Базовые упражнения и решения по программированию на C

PankajC Программирование C, Упражнения, Программирование

Программирование на C является ступенькой для многих программистов в мире программирования. C лучше всего подходит для изучения внутренностей программирования и понимания внутренней работы компьютерной программы.

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

В этом упражнении по программированию мы сосредоточимся на основах программирования на C. Выполнив это упражнение, вы изучите базовую структуру и семантику программы на языке C, а также узнаете, как писать математические программы на языке C.

Если вы не новичок, все равно дошли сюда. Задержите дыхание, я уверен, что вы найдете эти упражнения интересными.

Всегда не стесняйтесь оставлять свои вопросы в разделе комментариев. Я люблю слышать объятия и ошибки от всех вас.

Необходимые знания

Операторы, Типы данных, Переменные и выражения, Базовый ввод/вывод

Список основных упражнений по программированию

  1. Напишите программу на C для выполнения ввода/вывода всех основных типов данных. y.
  2. Напишите программу на C для ввода любого числа и вычисления его квадратного корня.
  3. Напишите программу на C, чтобы ввести два угла треугольника и найти третий угол.
  4. Напишите программу на C, чтобы ввести основание и высоту треугольника и найти его площадь.
  5. Напишите программу на C для вычисления площади равностороннего треугольника.
  6. Напишите программу на C для ввода оценок по пяти предметам и расчета общего, среднего и процентного значения.
  7. Напишите программу на C для ввода P, T, R и расчета простых процентов.
  8. Напишите программу на C для ввода P, T, R и расчета сложных процентов.

Рекомендуемые сообщения

  • Упражнения и решения по программированию побитовых операторов на C.
  • Если еще упражнения и решения по программированию на C.
  • Упражнения и решения по программированию случая переключения на C.
  • Упражнения и решения по программированию условных операторов на C.
  • Упражнения и решения по программированию циклов на C.
  • Упражнения и решения по программированию массивов на C.
  • Упражнения и решения по программированию строк на C.
  • Упражнения и решения по программированию функций и рекурсий на C.
  • Упражнения и решения по программированию указателей на C.

Примеры программирования на C, упражнения и решения для начинающих

Базовые программы на C

  • Программа Hello world на C
  • Базовый ввод/вывод
  • Базовый ввод/вывод для всех типов данных
  • Выполнение арифметических операций
  • Нахождение площади и периметра прямоугольника
  • Найти диаметр и площадь круга
  • Найти площадь треугольника
  • Найти углы треугольника
  • Преобразование температуры
  • Преобразование длины
  • Преобразование дней
  • Найти степень числа
  • 903
  • Найти квадратный корень 4 простой
  • Расчет сложных процентов
  • Поиск диапазона типов данных
  • Просмотреть все программы →

Побитовый оператор

  • Проверить младший значащий бит (LSB)
  • Проверить старший значащий бит (MSB)
  • Получить n-й бит числа
  • Установить n-й бит числа
  • Очистить n-й бит числа
  • Переключить n-й бит числа
  • Старший установленный бит числа
  • Младший установленный бит числа
  • Подсчет конечных нулей двоичного числа
  • Подсчет ведущих нулей двоичного числа
  • Переворот битов числа
  • Смещение битов числа
  • Десятичное число в двоичное
  • Поменять местами два числа
  • Проверить четное или нечетное
  • Просмотреть все примеры побитовых операторов →

If. ..else

  • Найти максимум 4 из 24 чисел 90
  • Проверить отрицательное, положительное или ноль
  • Проверить делимость
  • Проверить четное или нечетное
  • Проверить високосный год
  • Проверить букву алфавита
  • Проверить гласную или согласную
  • Проверить алфавит, цифру или специальный символ
  • Проверить верхний или нижний регистр
  • Вывести день недели
  • Найти количество дней в месяце
  • Найти корни квадратного уравнения
  • Вычислить профиль/потери
  • Просмотреть все примеры if else →

Switch…case

  • Печать дня недели
  • Найти общее количество дней в месяце
  • Проверить гласную или согласную
  • Найти максимум два числа
  • Проверить положительное, отрицательное или ноль
  • Поиск корней квадратного уравнения
  • Простое приложение-калькулятор
  • Просмотреть все примеры switch case →

Цикл For, while, do. ..while

  • Вывести натуральные числа от 1 до n
  • от a до z
  • Вывести четные числа от 1 до n
  • Вывести сумму всех чисел от 1 до n
  • Вывести сумму всех нечетных чисел от 1 до n
  • Вывести таблицу умножения n
  • Найти количество цифр в a номер
  • Найти первую и последнюю цифру
  • Найти сумму первой и последней цифры
  • Поменять местами первую и последнюю цифры
  • Найти сумму цифр числа
  • Найти обратную часть числа
  • Найти частоту цифр в числе
  • Найти степень числа с помощью цикла
  • Найти факториал числа
  • Найти HCF двух чисел
  • Найти НОК двух чисел
  • Посмотреть все примеры циклов →

Система счисления, преобразования

  • Find one’s complement
  • Find two’s complement
  • Binary to octal conversion
  • Binary to decimal conversion
  • Binary to hexadecimal conversion
  • Octal to binary conversion
  • Octal to decimal conversion
  • Octal to hexadecimal conversion
  • Преобразование десятичного числа в двоичное
  • Преобразование десятичного числа в восьмеричное
  • Преобразование десятичного числа в шестнадцатеричное
  • Преобразование шестнадцатеричного в двоичное
  • Hexadecimal to octal conversion
  • Hexadecimal to decimal conversion
  • View all conversion examples →

Star patterns

  • Pascal triangle generation
  • Square star pattern
  • Hollow square star pattern
  • Hollow square star pattern with по диагонали
  • Звезда в виде ромба
  • Звезда в виде полого ромба
  • Звезда в виде прямоугольного треугольника
  • Звезда в виде полого треугольника
  • Inverted right triangle star pattern
  • Mirrored inverted right triangle star pattern
  • Pyramid star pattern
  • Inverted pyramid star pattern
  • Diamond star pattern
  • Plus star pattern
  • X star pattern
  • 8 star pattern
  • Heart star с шаблоном имени
  • Просмотреть все примеры шаблонов звезд →

Шаблоны чисел

  • Шаблон квадратного номера
  • Шаблон номера прямоугольного треугольника
  • Право -треугольник.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *