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

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

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

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

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


 

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

31271. ЕЛЕМЕНТИ ЕЛЕКТРОПРИВОДА ТА ТРЕНАЖЕРИ ЕЛЕКТРОМЕХАНІЧНИХ КОМПЛЕКСІВ 8.84 MB
  Перелік практичних робіт 5 Практична робота № 1 Обробка експериментальних даних в пакеті MthCD 5 Практична робота № 2 Дослідження схем та принципу дії перетворювачів частотанапруга і напругачастота 9 Практична робота № 3 Дослідження схем включення та основних параметрів датчиків струму та напруги. Наведено приклад обробки експериментальних даних сигналів датчиків швидкості струму напруги. Обробка експериментальних даних у пакеті MthCD Мета: набуття навичок обробки експериментальних даних за допомогою математичного...
31272. Складання схеми електропостачання цеху 1.7 MB
  На вибір схеми і конструктивне виконання цехової мережі впливають такі фактори як категорія надійності живлення ПЕЕ розміщення на території цеху номінальні струми і напруги. Такі схеми виконують за допомогою комплектних шинопроводів типу ШРА на струми до 630А додатки 1 табл.8 Визначення повної розрахункової потужності і розрахункового струму : . Застосовування вимикачів навантаження які здатні відключати робочі струми трансформаторів замість силових вимикачів невеликої та середньої потужності здійснюється з метою зниження...
31273. Методичні вказівки щодо виконання лабораторних робіт з навчальної дисципліни „Моделювання електромеханічних систем” 1.02 MB
  Розрахунок перехідних характеристик на моделі та визначення параметрів передавальної функції електромеханічної системи 34 Список літератури 37 ЗАГАЛЬНІ ВІДОМОСТІ Мета дисципліни €œМоделювання електромеханічних систем€ полягає в підготовці інженерів широкого профілю здатних самостійно і творчо розвязувати задачі проектування дослідження налагодження й експлуатації сучасних автоматизованих електроприводів і систем автоматизації промислових установок і технологічних комплексів у будьяких галузях народного господарства. Внаслідок проведення...
31274. Математичні методи в обчисленнях на ЕОМ. Методичні вказівки щодо практичних занять і самостійної роботи 3.62 MB
  Практичне заняття № 2 Розвязання систем лінійних алґебраїчних рівнянь. Практичне заняття № 3 Розвязання нелінійних рівнянь та їх систем. Розвиток інформаційних технологій і широке впровадження математичних методів в інженерні дослідження висувають підвищенні вимоги до підготовки інженерів з електромеханіки. Дисципліна Математичні методи в обчисленнях на ЕОМ орієнтує студентів на використання сучасного прикладного програмного забезпечення під час розвязання різноманітних інженернотехнічних задач.
31275. Математичні методи в обчисленнях на ЕОМ 4.9 MB
  Практичне заняття №1 Інтерполяція функції. 5 Практичне заняття №2 Апроксимація функції. Інтерполяція функції МЕТА: вивчення методів та придбання навичок інтерполяції функцій засобами пакету MathCAD Рекомендації щодо обробки результатів При експериментальному вивченні явища необхідно розвязувати такі задачі: знайти аналітичний вираз для функції що задана таблицею або графіком; обчислити значення функції що задана таблицею у мимовільній точці деякого відрізку. Нехай для функції що задана вузлами необхідно знайти значення функції...
31276. МІКРОПРОЦЕСОРНІ ПРИСТРОЇ 993.5 KB
  Remove Видаляє клавішний макрос. Size move Ініціює переміщення і зміну розмірів вікна. Проста програма з трьома сеґментами ;Вкажемо відповідність сеґментних реґістрів сеґментам assume CS:code DS:data ;Опишемо сеґмент команд code segment ;Відкриваємо сеґмент коду begin: mov AXdata ;Початкова ініціалізація mov DSAX ;сеґментного реґістра DS на сеґмент ;даних ;Виведемо на екран рядок тексту mov АН09h ;Функція DOS виведення на екран mov DXoffset msg ;Адреса де зберігається ;рядок що виводиться на екран int 21h...
31277. МІКРОПРОЦЕСОРНІ ПРИСТРОЇ В ЕЛЕКТРОМЕХАНІЧНИХ СИСТЕМАХ 829 KB
  050702 ЕЛЕКТРОМЕХАНІКА КРЕМЕНЧУК 2011 Методичні вказівки щодо самостійної роботи з навчальної дисципліни Мікропроцесорні пристрої в електромеханічних системах для студентів денної та заочної форм навчання у тому числі скорочений термін навчання за напрямом 6. Гладир Кафедра систем автоматичного управління та електропривода Затверджено методичною радою Кременчуцького національного університету імені Михайла Остроградського Протокол №____ від__________ Заступник голови методичної ради______________ доц.21 ВСТУП Дисципліна Мікропроцесорні...
31278. ОСНОВИ АВТОМАТИЗОВАНОГО ПРОЕКТУВАННЯ ЕЛЕКТРОТЕХНІЧНИХ ПРИСТРОЇВ І ЕЛЕКТРОМЕХАНІЧНИХ СИСТЕМ. Методичка 13.69 MB
  Принципова схема печатної плати 13 8 Розробка печатної плати електричної частини електротехнічного пристрою електромеханічної системи в пакеті Р САD 14 8.1 Вибір і обґрунтування конструкції печатної плати 14 8.2 Розробка принципової електричної схеми печатної плати в редакторі Schematic 16 8.5 Трасування печатної плати у середовищі пакета PCAD 20 9 Висновки 21 10 Перелік використаної літератури 21 11 Додатки 22 Список літератури 23 Додаток А Зразок оформлення титульної сторінки 24 Додаток Б Зразок завдання на курсову роботу 25 ВСТУП...