4375

Введение в программирование на языке Си

Реферат

Информатика, кибернетика и программирование

Введение Добро пожаловать в мир языка программирования Си, который за время своего существования – порядка 40 лет – уже успел стать классическим, однако его актуальность несомненна и по сей день. Язык Си популярен как среди профессионалов...

Русский

2012-11-18

33.45 KB

9 чел.

Введение

Добро пожаловать в мир языка программирования Си, который за время своего существования – порядка 40 лет – уже успел стать классическим, однако его актуальность несомненна и по сей день. Язык Си популярен как среди профессионалов, разрабатывающих коммерческое программное обеспечение, так и среди программистов-любителей, для которых программирование – это любимое хобби. Язык программирования Си был создан в 1972 году и изначально предназначался для разработки программ под операционной системой UNIX. Постепенно этот язык распространился и на другие операционные системы, приобретя широкую известность благодаря своей направленности на решение практически важных задач, в то время как, например, Pascal или Basic служили в основном учебным целям.

Почему же язык Си с годами не утратил своей актуальности? Одна из причин заключается в том, что синтаксические конструкции многих других современных языков программирования, появившихся позднее Си, очень сильно напоминают синтаксис языка Си. Здесь речь идет о таких языках, как Java, C#, PHP и др. Еще один любимый и используемый многими язык C++ получен из Си с добавлением к нему средств объектно-ориентированного программирования. Таким образом, изучение языка Си может оказаться одной из первых ступенек на пути к постижению искусства программирования. Освоив его, можно смело приступать к освоению перечисленных языков, уже имея в запасе многие необходимые знания.

Язык Си – это язык среднего уровня, сочетающий в себе как некоторые элементы высокоуровневых языков, так и низкоуровневые операции. В частности, он позволяет легко оперировать с байтами и битами, а также работать с памятью напрямую, используя указатели. Кроме того, язык Си легко переносится, другими словами, написанный под одну операционную систему код может быть откомпилирован в другой. Рассмотренные и прочие достоинства делают язык Си подходящим средством для разработки ряда приложений, например, компиляторов.

Для написания программ нам потребуется так называемая интегрированная среда разработки, которая на программистском жаргоне именуется идэешка, что происходит от английской аббревиатуры IDEIntegrated Development Environment. Одной из наиболее популярных сред разработки является Microsoft Visual Studio, которая включает в себя несколько языков программирования и предоставляет программисту все необходимые в его работе инструменты: редактор программного кода, отладчик, различные полезные кнопки и многое другое. Среда разработки Microsoft Visual Studio имеет два недостатка: она платная и требует довольно много ресурсов, поэтому, если необходима бесплатная и легковесная среда разработки, то можно обратиться к многочисленным свободно распространяемым вариантам, таким как Code::Blocks, Microsoft Visual Studio Express и др. При написании программ, предлагаемых в данном пособии, можно использовать любую из перечисленных IDE, поскольку в рамках наших задач принципиальных отличий между ними нет.

Перед тем, как приступать непосредственно к программированию, следует рассказать о такой важной процедуре, как компиляция программы. Углубляться в эту тему мы не станем, поскольку, извините за тавтологию, она довольно глубокая. Компиляция – это процесс преобразования файла с программным кодом (который в нашем случае будет написан на языке Си) в файл, который можно запустить; как правило, это файл с расширением exe. Нетрудно догадаться, что этим делом занимается компилятор. Другая важная задача компилятора – это проверка синтаксических ошибок. Другими словами, если программа не подчиняется правилам языка Си, то компилятор сообщает об ошибке. Он даже указывает на строку кода, где, по его мнению, эта ошибка находится, и кратко описывает ее. Современные компиляторы довольно точно диагностируют синтаксические ошибки, поэтому имея даже небольшой опыт программирования, можно с легкостью их исправлять. В последних версиях некоторых сред разработки диагностика синтаксических ошибок происходит «на лету»: как только программист делает синтаксическую ошибку, редактор подчеркивает ее аналогично тому, как это делает текстовый редактор Microsoft Word.

Однако исправление всех синтаксических ошибок – это далеко не все: существуют еще и алгоритмические ошибки, при исправлении которых компилятор – не помощник. Алгоритмическая ошибка – это ситуация, когда программа запускается, но делает не то, что требовалось. Такие ошибки программисты называют багами (англ. bug – ошибка, дефект, блоха). Причем, хорошо, если программист видит, что программа работает не так. Зачастую случается, что ошибки могут быть скрыты и всплывут в самый неподходящий момент. Исправлять такие ошибки можно только, анализируя алгоритм, согласно которому написана программа. Процесс исправления ошибок называется отладкой. Фраза «Исправить ошибку» на английском языке звучит как «to fix a bug», поэтому программисты часто говорят фиксить или фиксать баги. В программировании вообще масса подобных жаргонных фраз, поскольку большинство нововведений пришли к нам из-за рубежа.

Программирование становится по-настоящему увлекательным, когда программист чувствует, что компьютер выполняет именно то, что хочет от него человек. Язык программирования – это средство, позволяющее донести до машины наши мысли, но не более того. Любой из нас встречал человека, который знает русский язык и говорит много, но понять его мы не можем, поскольку излагаемые им мысли путаются. Мы чувствуем, что человек плохо продумал свою речь, поэтому нужно вначале думать, а потом говорить. Аналогично и в программировании: если перед вами стоит задача написать программу, то нужно предварительно продумать (в голове или на бумаге) алгоритм этой программы. Плох тот программист, который, получив задание, сразу же приступает к написанию программы без предварительного обдумывания.

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

Итак, все приготовления закончены, и пора приступать к увлекательному делу – программированию на языке Си.

Зачем нужно программирование?

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

Пример 1. Оплата услуг через банкомат. Несколько лет назад заплатить за квартиру или за телефон можно было только через человека-оператора, который выполнял одни и те же действия, обслуживая любого человека:

  1.  принимал деньги;
  2.  заносил их в базу;
  3.  выдавал чек.

В настоящее время часто роль оператора выполняет банкомат, куда встроен компьютер, обрабатывающий входные данные. Компьютер получает вид платежа, сумму и другие параметры, а затем заносит изменения в базу данных и печатает чек. Эти действия происходят потому, что встроенный в банкомат компьютер имеет программу (написанную на некотором языке программирования), которую он исполняет.

Пример 2. Редактирование текста и мультимедийных данных. Представьте себе, как раньше писатели работали над своими произведениями. Они все писали от руки. Если происходила ошибка, то нужно было зачеркивать ее или переписывать фрагмент текста заново. Работа над фильмами также требовала массы работы, не связанной с фильмом напрямую. Нужно было резать и клеить пленку, а практически все спецэффекты воспроизводить по-настоящему. Сейчас же достаточно иметь под рукой подходящий редактор, который позволить сделать все или почти все, не вставая из-за компьютера. Музыкальные треки также можно создавать без наличия музыкальных инструментов, имея под рукой только подходящий редактор.

Пример 3. Хранение информации на электронных носителях. В настоящее время информация, например, в банках, хранится не в картотеках, а в базах данных, расположенных на электронных носителях. В данном случае оператор освобождается от прочесывания картотеки вручную: ему достаточно ввести параметры поиска в указанные поля, а всю черновую работу выполнит компьютер.

Вот еще несколько примеров:

  1.  электронные учебники, заменяющие учителя;
  2.  тренажеры для обучения езде на автомобиле;
  3.  покупка товаров через интернет;
  4.  электронные каталоги в библиотеках;
  5.  автоматизация сложных вычислений;
  6.  автоматическая подводка часов в Windows;
  7.  автоматические конвейеры на производстве.

Какие преимущества люди получают от автоматизации? Главным образом, преимущество заключается в надежности и скорости: компьютер быстро вычисляет и является более предсказуемым, чем человек. Мы часто оправдываем возникновение аварийных ситуаций так называемым человеческим фактором, который может выражаться в утомлении к концу рабочего дня, ленью, болезнью и т.д. Компьютеру подобные проблемы незнакомы. Конечно, и машина может дать сбой, но в хорошо отлаженном механизме его вероятность очень мала по сравнению с вероятностью возникновения проблем, связанных с человеком.

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

Алгоритм

Несмотря на свои достоинства, компьютер хуже человека, по крайней мере, в одном – он неспособен самостоятельно решить какую-либо проблему. Человек, сталкиваясь с проблемой, может придумать, как ее решить, но компьютер «думать» не умеет. Более того, он способен выполнять только команды, расписанные достаточно подробно: ему нужно все разжевывать и четко указывать шаги, необходимые для решения задачи.

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

  1.  Вскипятить воду.
  2.  Заварить чай.
  3.  Налить чай в чашку.

Алгоритмы могут различаться по степени подробности. В частности, «Вскипятить воду» можно рассмотреть как отдельную задачу и составить алгоритм ее решения:

  1.  Налить воду в чайник.
  2.  Включить чайник.
  3.  Дождаться, пока чайник закипит.

Детализацию можно продолжить, например, развернув шаг «Налить воду в чайник»:

  1.  Взять сосуд, на котором написано «Braun».
  2.  Поднести сосуд к раковине.
  3.  Повернуть ручку с синим кружочком.
  4.  Поднести сосуд к струе воды.
  5.  Дождаться, пока шарик поднимется до уровня «MAX».

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

Языки высокого, среднего и низкого уровня

Этот пример должен вас подтолкнуть к отличию уровня команд. Команды можно условно поделить на команды высокого, среднего и низкого уровня. Например, команда «Построить дом» – это команда высокого уровня. Команды «Заложить фундамент», «Возвести этажи с 1 по 16» и «Соорудить крышу» – это команды среднего уровня. Наконец, команды «Выкопать яму», «Забить сваи», «Положить кирпич», «Вставить стекло» – это команды низкого уровня. Деление команд на уровни довольно условно и зависит от исходной задачи. Например, если исходной задачей является «Улучшить жилищные условия молодых ученых», то задача «Построить дом» может оказаться командой среднего или низкого уровня.

Уровень команд определяется тем, кому они адресованы: они должны быть такого уровня, чтобы тот, кому они адресованы, понял их. По этому принципу делятся и языки. Существуют высокоуровневые языки (C#, Java, C++, Object Pascal), языки среднего (Си, Pascal) и низкого уровня (Ассемблер). Как правило, высокоуровневые языки понимают конструкции языков среднего уровня, а языки среднего уровня допускают низкоуровневые вставки.

Ответить на вопрос «Языки какого уровня лучше?» невозможно, точнее, такой вопрос поставлен некорректно, поскольку каждый язык предназначен для решения определенных задач. Давайте проведем аналогию. Вы можете ответить на вопрос «Какой автомобиль лучше: хороший внедорожник или хороший спортивный автомобиль?» Для ответа на этот вопрос нужно знать, куда мы собираемся ехать.

При разработке крупных приложений, как правило, используются высокоуровневые языки, поскольку их главным достоинством является то, что они позволяют сократить размер кода. Низкоуровневые языки и языки среднего уровня используются тогда, когда необходимо улучшить производительность программы или отдельных ее элементов. Таким образом, корпоративные приложения обычно пишутся на языках Java, C#, С++, в то же время для разработки компиляторов или вычислительных программ используются языки Ассемблер, Си и Fortran. Тем не менее, по-настоящему оценить преимущества разных языков можно только, имея определенный опыт разработки.

Для лучшего понимания достоинств и недостатков языков высокого и низкого уровней проведем еще одну аналогию. Предположим, что мы хотим попросить кого-то купить хлеба. Мы можем дать высокоуровневую команду «Сходи за хлебом». Достоинство этого подхода заключается в том, что мы обошлись одной короткой командой. Недостаток заключается в том, что мы не уточняем, куда идти за хлебом: может быть человек поедет за хлебом в другой город. В данном случае алгоритм короткий, но производительность может быть плохой. Если же мы подробно объясним, в какой магазин идти, во сколько, по какой дороге, то на объяснение потратим больше времени, но человек принесет хлеб быстрее. По этой причине некоторые высокоуровневые языки поддерживают низкоуровневые вставки для того, чтобы улучшить производительность определенного фрагмента программы.

Нисходящая разработка

Как разрабатывать программу, которая решает поставленную задачу? Достаточно часто возникают ситуации, когда мы не знаем, с чего начать, чтобы что-то сделать. Точно так же может случиться и при написании компьютерных программ. Одним из наиболее эффективных подходов к разработке программ и программного обеспечения является так называемая нисходящая разработка или нисходящее программирование. При работе над большими проектами используется нисходящее проектирование (хотя перед написанием программы любого размера следует провести проектирование, пусть даже мысленно).

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


 

А также другие работы, которые могут Вас заинтересовать

40419. Англійський абсолютизм, його особливі риси 149.2 KB
  произвол королевских чиновников и судей злоупотребления королевских фаворитов герцог Бэкингем; распространение законов военного времени на время мирное постои армии в домах частных лиц; ограничения в торговой и промышленной сферах государственные монополии; стремление реставрировать ненавистный большинству англичан католицизм; ориентация династии Стюартов Яков I Карл I на католические государства континентальной Европы Францию Италию традиционных торговых соперников Англии. зачастую поразному относились к тем или...
40420. Німеччина 102.91 KB
  На развитие немецкого Просвещения влияли политическая раздробленность Германии и ее экономическая отсталость что определило преимущественный интерес немецких просветителей не к социальнополитическим проблемам а к вопросам философии морали эстетики и воспитания. Молодой Лессинг первый в Германии XVIII в. В отличие от Англии и Франции где абсолютизм способствовал государственному объединению в Германии XVIIXVIII вв. Он взял сюжет не из далекого прошлого но из самой живой современности Минна фон Барнхельм Направленная...
40421. Іспанський абсолютизм, його характерні риси 62.5 KB
  Это дало основание Марксу сравнить абсолютную монархию в Испании с Турецкой империей. Испания – писал Маркс – подобно Турции оставалась скоплением дурно управляемых республик с номинальным сувереном во главе В сложившихся условиях в Испании не выработался единый национальный язык сохранились обособленные этнические группы: каталонцы галисийцы и баски говорили на своих языках отличных от кастильского диалекта который составил основу литературного испанского языка. Абсолютная монархия в Испании не смогла стать объединяющим началом...
40422. Італія 2 пол. 17-18 ст. 89.57 KB
  подъем начали переживать и традиционные для Италии виды ремесел связанные с рынком предметов роскоши тканей и одежды для представителей благородных сословий холодного оружия. Однако масштабы экономического оживления в Италии в целом оказались невелики. Очень заметным становилось отставание Италии и в развитии новой предпринимательской культуры которая по своим мировоззренческих и социальнопсихологическим основам была тесно связана с протестантским духом. Вследствие всех этих причин в Италии очень затянулся процесс перехода от...
40423. Французький абсолютизм 130.96 KB
  Він обіймав цю посаду 18 років продовжуючи політику Рішельє спрямовану на зміцнення Франції та посилення королівської влади. було скасовано кальвінізм заборонено а сотні тисяч гугенотів мусили виїхати з Франції. Зовнішня політика Франції в роки правління Людовіка XIV була відображенням його прагнень до особистої слави та бажання стати арбітром у європейських справах. за загарбання Голландії закінчилася для Франції поразкою.
40424. Північноамериканські колонії у кінці 17-середині 18 ст. 72.33 KB
  Посланник у Парижі де сприяв зміцненню міжнародного становища США. за яким Великобританія визнала США суверенною державою. Франкліна обирають президентом Законодавчих зборів штату Пенсільванія а двома роками пізніше він стає депутатом Конституційного конвенту по виробленню Конституції США 1787 р. Був губернатором штату Верджінія посланником США у Франції державним секретарем в уряді 1го Американського президента Дж.
40425. Австрійська імперія у 2й половині 17 - 18ст. 70.15 KB
  Чехії та частини Угорщини були найбільшою державою серед багатьох князівств Священної Римської імперії. Селянські заворушення виступи в різних частинах імперії в XVIIXVIII ст. австрійська частина імперії продовжувала залишатися аграрною. Переважання селянських господарств відміна особистої залежності селян слабкість поміщицького землеволодіння створили тут сприятливіші передумови для капіталістичної еволюції в селі ніж в решті всіх земель імперії.
40426. Вестфальський мир, його наслідки (вестфальська система) 104.58 KB
  Такі значні територіальні здобутки Бранденбургу неспіврозмірні з внеском у перемогу пояснюються прагненням Франції створити на майбутнє противагу Швеції. питання по Франції про Людовіка 14 61. Італійські території переходили до Франції а ерцгерцог залишав за собою всі інші володіння Іспанської імперії. Карл ІІ піддаючись тиску Австрії та Франції пішов на зустріч останній оскільки і французи і іспанці були католиками.