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. Тем не менее, по-настоящему оценить преимущества разных языков можно только, имея определенный опыт разработки.

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

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

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

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


 

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

67813. ПРАВО ВЛАСНОСТІ НА ПРИРОДНІ РЕСУРСИ 132 KB
  В загальних рисах право власності на природні об’єкти встановлено в статті 13 Конституції України, згідно якої земля, її надра, атмосферне повітря, водні та інші природні ресурси, які знаходяться в межах території України, природні ресурси її континентального шельфу, виключної (морської) економічної зони є об’єктами права власності Українського народу.
67814. Минеральная часть агропочв 70.59 KB
  Ассимиляция смектитового компонента это изменение состава и свойств пахотных горизонтов почвы при эрозии а также в ряде регионов при орошении мутными водами. Для дерново-среднеподзолистой супесчаной почвы характерно резкое увеличение количества каолинита по сравнению с содержанием гидрослюд...
67815. ПРОМИСЛОВІ РОБОТИ (ПР) 544 KB
  По типу систем керування сучасні перспективні промислові роботи поділяються на три: види так звані покоління: програмні адаптивні і інтелектуальні з елементами штучного інтелекту. Усі вони мають властивість швидкого перепрограмування на різні операції причому в першому...
67816. ОСНОВИ ОРГАНІЗАЦІЇ САНІТАРНО-ГІГІЄНІЧНОГО ТА ПРОТИЕПІДЕМІЧНОГО ЗАБЕЗПЕЧЕННЯ ВІЙСЬК 134.5 KB
  Висвітлити найбільш складні питання навчального матеріалу, актуальні питання теорії та практики, сучасні досягнення науки та техніки, сприяти розвитку творчого мислення студентів і формування у них сучасного світогляду, а також бути основою для організації та проведення...
67817. ПРАВО КОРИСТУВАННЯ ПРИРОДНИМИ РЕСУРСАМИ 215.5 KB
  Об’єктивне право природокористування – сукупність екологічних норм, які визначають підстави виникнення, зміни та припинення права природокористування, встановлюють комплекс прав та обов’язків природокористувачів, формують юридичні засоби захисту прав та інтересів суб’єктів природокористування.
67818. КІНЕМАТИКА ПРОМИСЛОВИХ РОБОТІВ 154.5 KB
  Кожне тіло щовільно рухається в просторі має ортогональну систему координат і 6 степенів вільності свободи можливість руху вздовж кожної з осей і обертання навколо них. Проте як видно з рисунку вся сукупність переміщень кінематичних ланок руки людини зводиться до транспортних переносних рухів...
67819. ОСНОВИ ОРГАНІЗАЦІЇ ЗАБЕЗПЕЧЕННЯ МЕДИЧНИМ МАЙНОМ 135 KB
  Забезпечення медичним майном і медичною технікою організується і здійснюється з метою безперервного і повного задоволення потреб частин, підрозділів в них для надання медичної допомоги пораненим та хворим і їх лікування, проведення санітарно-гігієнічних...
67820. ПРАВОВЕ РЕГУЛЮВАННЯ ВИКОРИСТАННЯ НАДР 82.5 KB
  Приблизна вартість промислових запасів основних видів корисних копалин дорівнює більше 15 трлн. Всі мінеральносировинні ресурси України сконцентровані в: родовищах корисних копалин нагромадженнях мінеральних речовин в надрах на поверхні землі в джерелах вод та газів на дні водоймищ які за кількістю якістю...
67821. ПРИВОДИ ПРОМИСЛОВИХ РОБОТІВ 142 KB
  Крім того тип приводу визначає і можливості системи керування або ступінь інтелектуальності робота. Для виконання загальної конкретної технологічної операції необхідне групове керування виконавчими двигунами приводу тобото з погляду керування привід робота розглядається як система.