Технология программирования

Роль вычислительной техники в информационных системах. Компьютеризация учебного процесса. Технологичность программного обеспечения. Особенности отладки и испытания пpогpамм. Операторы языка СИ. Указатели и структуры данных. Основы доступа к файлам.

Рубрика Программирование, компьютеры и кибернетика
Вид тезисы
Язык русский
Дата добавления 10.05.2015
Размер файла 603,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Основные методы программирования, ориентированные на получение надежных, пригодных для отладки, испытаний и сопровождения программ:

Программирование на языках высокого уровня;

Программирование с защитой от ошибок;

Структурное программирование;

Программирование в стандартизованном стиле;

Нисходящее программирование.

Выбоp языка пpогpаммиpования.

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

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

Положительные характеристики ЯВУ, позволяющие уменьшить количество ошибок:

Любая функция обработки данных на ЯВУ выражается меньшим числом операторов, чем на языке низкого уровня (ЯНУ);

На ЯВУ выше степень автоматического обнаружения ошибок компиляторами, что повышает надежность программ; ЯВУ как правило, включают большие возможности типизации данных с проверкой правильности типов во время компиляции.

ЯВУ отличается большей наглядностью, которая обеспечивается, с одной стороны, соответствующим составом ключевых слов, а с другой - возможностью модульного построения программ. Наглядность полезна по причинам: 1)упрощается документирование программ; 2)быстрее выявляются ошибки; 3)программа значительно удобнее для сопровождения другим программистом.

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

Эффективность программ, реализованных на ЯВУ несколько ниже, чем у программ на ЯНУ. Однако снижающаяся стоимость технических средств позволяет в большинстве случаев считать необходимость достижения максимальной эффективности программ не главной целью при создании ПИ. Основные резервы повышения эффективности программ, как показывает практика, лежат в области разумного выбора методов и алгоритмов. В программах имеется только от 5 до 20% модулей, совершенствование которых (в том числе и возможное перепрограммирование на ЯНУ) может обеспечить повышение общей эффективности программы на 80%.

Программирование с защитой от ошибок.

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

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

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

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

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

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

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

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

Программирование в стандартизованном стиле.

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

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

Основные принципы стандартизации стиля программирования следующие.

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

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

Исходные тексты модулей следует размещать по принципу сверху вниз, слева направо.

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

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

Комментарии оглавления дают представление об организации исходного текста большой программы; они включаются в головной модуль программы. В них приводится перечень модулей, краткое описание назначения и указание подчиненности модулей.

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

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

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

Использовать дополнительные пробелы для выделения составных частей операторов

Нельзя располагать на одной строке программы более одного оператора. Это облегчает чтение текста, поиск и исправление ошибок, модификацию программы.

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

Необходимо использовать отступы для выявления структуры составных и вложенных операторов.

Критерии качества программы.

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

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

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

правильность (корректность);

точность;

совместимость

надежность;

универсальность;

защищенность;

полезность

эффективность;

проверяемость;

адаптируемость.

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

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

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

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

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

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

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

Программа является эффективной, если объем требуемых для ее работы ресурсов ЭВМ не превышает допустимого предела.

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

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

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

Типы ошибок

Тип 1. Ошибки в программном комплексе, допущенные при разработке и не обнаружении его при тестировании.

Тип 2. Ошибки, возникающие при вводе в компьютер неверных данных.

Тип 3.Компьютерные вирусы

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

Тип 5. Злая воля человека. Программист вносит ошибку.

Виды программных документов.

К программным относят документы, содержащие сведения, необходимые для разработки, сопровождения и эксплуатации программного обеспечения. Документирование программного обеспечения осуществляется в соответствии с Единой системой программной документации (ГОСТ 19.ХХХ). Так ГОСТ 19.101-77 устанавливает виды программных документов для программного обеспечения различных типов. Ниже перечислены основные программные документы по этому стандарту и указано, какую информацию они должны содержать.

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

Ведомость держателей подлинников (код вида документа - 05) должна содержать список предприятий, на которых хранятся подлинники программных документов. Необходимость этого документа определяется на этапе разработки и утверждения технического задания только для программного обеспечения со сложной архитектурой.

Текст программы (код вида документа - 12) должен содержать текст программы с необходимыми комментариями. Необходимость этого документа определяется на этапе разработки и утверждения технического задания.

Описание программы (код вида документа - 13) должно содержать сведения о логической структуре и функционировании программы. Необходимость данного документа также определяется на этапе разработки и утверждения технического задания.

Ведомость эксплуатационных документов (код вида документа - 20) должна содержать перечень эксплуатационных документов на программу, к которым относятся документы с кодами: 30, 31, 32, 33, 34, 35,46. Необходимость этого документа также определяется на этапе разработки и утверждения технического задания.

Формуляр (код вида документа - 30) должен содержать основные характеристики программного обеспечения, комплектность и сведения об эксплуатации программы.

Описание применения (код вида документа - 31) должно содержать сведения о назначении программного обеспечения, области применения, применяемых методах, классе решаемых задач, ограничениях для применения, минимальной конфигурации технических средств.

Руководство системного программиста (код вида документа -- 32) должно содержать сведения для проверки, обеспечения функционирования и настройки программы на условия конкретного применения.

Руководство программиста (код вида документа - 33) должно содержать сведения для эксплуатации программного обеспечения.

Руководство оператора (код вида документа - 34) должно содержать сведения для обеспечения процедуры общения оператора с вычислительной системой в процессе выполнения программного обеспечения.

Описание языка (код вида документа - 35) должно содержать описание синтаксиса и семантики языка.

Руководство по техническому обслуживанию (код вида документа -- 46) должно содержать сведения для применения тестовых и диагностических программ при обслуживании технических средств.

Программа и методика испытаний (код вида документа - 51) должны содержать требования, подлежащие проверке при испытании программного обеспечения, а также порядок и методы их контроля.

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

Прочие документы (коды вида документа - 90-99) могут составляться на любых стадиях разработки, т.е. на стадиях эскизного, технического и рабочего проектов.

Допускается объединять отдельные виды эксплуатационных документов, кроме формуляра и ведомости. Необходимость объединения указывается в техническом задании, а имя берут у одного из объединяемых документов. Например, в настоящее время часто используется эксплуатационный документ, в который отчасти входит руководство системного программиста, программиста и оператора. Он называется "Руководство пользователя" (см. §11.3).

Рассмотрим наиболее важные программные документы более подробно.

Пояснительная записка

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

Содержание пояснительной записки по стандарту (ГОСТ 19.404-79) должно выглядеть следующим образом:

введение;

назначение и область применения;

технические характеристики;

ожидаемые технико-экономические показатели;

источники, используемые при разработке.

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

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

Раздел Технические характеристики должен содержать следующие подразделы:

- постановка задачи, описание применяемых математических методов и допущений и ограничений, связанных с выбранным математическим аппаратом;

- описание алгоритмов и функционирования программы с обоснованием принятых решений;

- описание и обоснование выбора способа организации входных и выходных данных;

- описание и обоснование выбора состава технических и программных средств на основании проведенных расчетов или анализов.

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

В разделе Источники, использованные при разработке, указывают перечень научно-технических публикаций, нормативно-технических документов и других научно-технических материалов, на которые есть ссылки в исходном тексте.

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

Руководство пользователя

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

Составление документации для пользователей имеет свои особенности, связанные с тем, что пользователь, как правило, не является профессионалом в области разработки программного обеспечения.

В книге С.Дж. Гримм [17] даны рекомендации по написанию подобной программной документации:

учитывайте интересы пользователей -- руководство должно содержать все инструкции, необходимые пользователю;

излагайте ясно, используйте короткие предложения;

избегайте технического жаргона и узко специальной терминологии, ес ли все же необходимо использовать некоторые термины, то их следует пояс нить;

будьте точны и рациональны -- длинные и запутанные руководства обычно никто не читает, например, лучше привести рисунок формы, чем долго ее описывать.

Руководство пользователя, как правило, содержит следующие разделы:

общие сведения о программном продукте;

описание установки;

описание запуска;

инструкции по работе (или описание пользовательского интерфейса);

сообщения пользователю.

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

Раздел Установка обычно содержит подробное описание действий по установке программного продукта и сообщений, которые при этом могут быть получены.

В разделе Запуск, как правило, описаны действия по запуску программного продукта и сообщений, которые при этом могут быть получены.

Раздел Инструкции по работе обычно содержит описание режимов работы, форматов ввода-вывода информации и возможных настроек.

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

Руководство системного программиста

По ГОСТ 19.503-79 руководство системного программиста должно содержать всю информацию, необходимую для установки программного обеспечения, его настройки и проверки работоспособности. Кроме того, как указывалось выше, в него часто включают и описание необходимого обслуживания, которое раньше приводилось в руководстве оператора (ГОСТ 19.505-79) и/или руководстве по техническому обслуживанию (ГОСТ 19.508-79). В настоящее время данную схему используют для составления руководства системному администратору.

Руководство системного программиста должно содержать следующие разделы:

общие сведения о программном продукте,

структура,

настройка,

проверка,

дополнительные возможности,

сообщения системному программисту.

Раздел Общие сведения о программе должен включать описание назначения и функций программы, а также сведения о технических и программных средствах, обеспечивающих выполнение данной программы (например, объем оперативной памяти, требования к составу и параметрам внешних устройств, требования к программному обеспечению и т.п.).

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

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

В разделе Проверка программы должно быть приведено описание способов проверки работоспособности программы, например контрольные примеры.

В разделе Дополнительные возможности должно быть приведено описание дополнительных возможностей программы и способов доступа к ним.

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

Литература

Контрольные вопросы.

1. Какие Вы знаета основные методы программирования?

2. В чем значение выбор языка?

3. Что означает программирование с защитой от ошибок?

4. Что означает программирование в стандартизованном стиле?

Лекция 5. Программирование на языке СИ. Введение в систему программирования СИ. Директивы препроцессора. Состав системы программирования, элементы языка. Типы данных: int, short, long, unsigned, float, double. Объявления. Выражения и присваивания. Операции языка СИ

Директивы Препроцессора

Директивы препроцессора представляют собой инструкции, записанные в тексте программы на СИ, и выполняемые до трансляции программы. Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т.п. Все директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой не ставятся.

Директива #include

Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:

#include "имя файла"

#include <имя файла>

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

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

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

Директива #define

Директива #define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами. Идентификаторы, заменяющие текстовые или числовые константы, называют именованными константами. Идентификаторы, заменяющие фрагменты программ, называют макроопределениями, причем макроопределения могут иметь аргументы.

Директива #define имеет две синтаксические формы:

#define идентификатор текст

#define идентификатор (список параметров) текст

Эта директива заменяет все последующие вхождения идентификатора на текст. Такой процесс называется макроподстановкой. Текст может представлять собой любой фрагмент программы на СИ, а также может и отсутствовать.

В последнем случае все экземпляры идентификатора удаляются из программы.

Пример:

#define WIDTH 80

#define LENGTH (WIDTH+10)

Эти директивы изменят в тексте программы каждое слово WIDTH на число 80, а каждое слово LENGTH на выражение (80+10) вместе с окружающими его скобками.

Во второй синтаксической форме в директиве #define имеется список формальных параметров, который может содержать один или несколько идентификаторов, разделенных запятыми. Формальные параметры в тексте макроопределения отмечают позиции на которые должны быть подставлены фактические аргументы макровызова. Каждый формальный параметр может появиться в тексте макроопределения несколько раз.

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

Пример:

#define MAX(x,y) ((x)>(y))?(x):(y)

Эта директива заменит фрагмент

t=MAX(i,s[i]);

на фрагмент

t=((i)>(s[i])?(i):(s[i]);

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

Например, при наличии скобок фрагмент

t=MAX(i&j,s[i]||j);

будет заменен на фрагмент

t=((i&j)>(s[i]||j)?(i&j):(s[i]||j);

а при отсутствии скобок - на фрагмент

t=(i&j>s[i]||j)?i&j:s[i]||j;

в котором условное выражение вычисляется в совершенно другом порядке.

Директива #undef

Директива #undef используется для отмены действия директивы #define. Синтаксис этой директивы следующий #undef идентификатор

Директива отменяет действие текущего определения #define для указанного идентификатора. Не является ошибкой использование директивы #undef для идентификатора, который не был определен директивой #define.

Пример:

#undef WIDTH

#undef MAX

Эти директивы отменяют определение именованной константы WIDTH и макроопределения MAX.

Элементы Языка СИ

Используемые символы

Множество символов используемых в языке СИ можно разделить на пять групп.

1. Символы, используемые для образования ключевых слов и идентификаторов (табл.1).

Таблица 1

Прописные буквы латинского алфавита

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Строчные буквы латинского алфавита

a b c d e f g h i j k l m n o p q r s t u v w x y z

Символ подчеркивания

_

Группа прописных и строчных букв русского алфавита и арабские цифры (табл.2).

Таблица 2

Прописные буквы русского алфавита

А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я

Строчные буквы русского алфавита

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

Арабские цифры

0 1 2 3 4 5 6 7 8 9

3. Знаки нумерации и специальные символы (табл. 3). Эти символы используются с одной стороны для организации процесса вычислений, а с другой - для передачи компилятору определенного набора инструкций.

Таблица 2

Символ

Наименование

Символ

Наименование

,

запятая

)

круглая скобка правая

.

точка

(

круглая скобка левая

;

точка с запятой

}

фигурная скобка правая

:

двоеточие

{

фигурная скобка левая

?

вопросительный знак

<

меньше

'

апостроф

>

больше

!

восклицательный знак

[

квадратная скобка

|

вертикальная черта

]

квадратная скобка

/

дробная черта

#

номер

\

обратная черта

%

процент

~

тильда

&

амперсанд

*

звездочка

^

логическое не

+

плюс

=

равно

-

мину

"

кавычки

4. Управляющие и разделительные символы. К той группе символов относятся: пробел, символы табуляции, перевода строки, возврата каретки, новая страница и новая строка. Эти символы отделяют друг от друга объекты, определяемые пользователем, к которым относятся константы и идентификаторы. Последовательность разделительных символов рассматривается компилятором как один символ (последовательность пробелов).

5. Кроме выделенных групп символов в языке СИ широко используются так называемые, управляющие последовательности, т.е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность строится на основе использования обратной дробной черты (\) (обязательный первый символ) и комбинацией латинских букв и цифр (табл.4).

Таблица 4

Управляющая последовательность

Наименование

Шеснадцатеричная замена

\a

Звонок

007

\b

Возврат на шаг

008

\t

Горизонтальная табуляция

009

\n

Переход на новую строку

00A

\v

Вертикальная табуляция

00B

\r

Возврат каретки

00C

\f

Перевод формата

00D

\"

Кавычки

022

\'

Апостроф

027

\0

Ноль-символ

000

\\

Обратная дробная черта

05C

\ddd

Символ набора кодов ПЭВМ в восьмеричном представлении

\xddd

Символ набора кодов ПЭВМ в шестнадцатеричном представлении

Последовательности вида \ddd и \xddd (здесь d обозначает цифру) позволяет представить символ из набора кодов ПЭВМ как последовательность восьмеричных или шестнадцатеричных цифр соответственно.

Например, символ возврата каретки может быть представлен различными способами:

\r - общая управляющая последовательность,

\015 - восьмеричная управляющая последовательность,

\x00D - шестнадцатеричная управляющая последовательность.

Следует отметить, что в строковых константах всегда обязательно задавать все три цифры в управляющей последовательности. Например отдельную управляющую последовательность \n (переход на новую строку) можно представить как \010 или \xA, но в строковых константах необходимо задавать все три цифры, в противном случае символ или символы следующие за управляющей последовательностью будут рассматриваться как ее недостающая часть.

Например:

"ABCDE\x009FGH" данная строковая команда будет напечатана с использованием определенных функций языка СИ, как два слова ABCDE FGH, разделенные 8-ю пробелами, в этом случае если указать неполную управляющую строку"ABCDE\x09FGH",то на печати появится ABCDE=|=GH, так как компилятор воспримет последовательность \x09F как символ "=+=".

Отметим тот факт, что, если обратная дробная черта предшествует символу не являющемуся управляющей последовательностью (т.е. не включенному в табл.4) и не являющемуся цифрой, то эта черта игнорируется, а сам символ представляется как литеральный.

Например: символ \h представляется символом h в строковой или символьной константе.

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

Константы

Константами называются перечисление величин в программе. В языке СИ разделяют четыре типа констант: целые константы, константы с плавающей запятой, символьные константы и строковыми литералы.

Целая константа: это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину в одной из следующих форм: десятичной, восьмеричной или шестнадцатеричной.

Десятичная константа состоит из одной или нескольких десятичных цифр, причем первая цифра не должна быть нулем (в противном случае число будет воспринято как восьмеричное).

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

Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры представляющие собой набор цифр шеснадцатеричной системы счисления: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

Примеры целых констант:

Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом). Например: -0x2A, -088, -16.

Каждой целой константе присваивается тип, определяющий преобразования, которые должны быть выполнены, если константа используется в выражениях. Тип константы определяется следующим образом:

- десятичные константы рассматриваются как величины со знаком, и им присваивается тип int (целая) или long (длинная целая) в соответствии со значением константы. Если константа меньше 32768, то ей присваивается тип int в противном случае long.

- восьмеричным и шестнадцатеричным константам присваивается тип int, unsigned int (беззнаковая целая), long или unsigned long в зависимости от значения константы согласно табл 5.

Таблица 5

Диапазон шестнадцатеричных констант

Диапазон восьмеричных констант

Тип

0x0 - 0x7FFF

0 - 077777

int

0X8000 - 0XFFFF

0100000 - 0177777

unsigned int

0X10000 - 0X7FFFFFFF

0200000 - 017777777777

long

0X80000000 - 0XFFFFFFFF

020000000000 - 037777777777

unsigned long

Для того чтобы любую целую константу определить типом long, достаточно в конце константы поставить букву "l" или "L". Пример:

5l, 6l, 128L, 0105L, OX2A11L.

Константа с плавающей точкой - десятичное число, представленное в виде действительной величины с десятичной точкой или экспонентой. Формат имеет вид:

[цифры].[цифры] [Е|e [+|-] цифры].

Число с плавающей точкой состоит из целой и дробные части и (или) экспоненты. Константы с плавающей точкой представляют положительные величины удвоенной точности (имеют тип double). Для определения отрицательной величины необходимо сформировать константное выражение, состоящее из знака минуса и положительной константы.

Примеры:

115.75, 1.5Е-2, -0.025, .075, -0.85Е2

Символьная константа - представляется символом заключенном в апострофы. Управляющая последовательность рассматривается как одиночный символ, допустимо ее использовать в символьных константах. Значением символьной константы является числовой код символа. Примеры:

' '- пробел,

'Q'- буква Q ,

'\n' - символ новой строки,

'\\' - обратная дробная черта,

'\v' - вертикальная табуляция.

Символьные константы имеют тип int и при преобразовании типов дополняются знаком.

Строковая константа (литерал) - последовательность символов (включая строковые и прописные буквы русского и латинского а также цифры) заключенные в кавычки ("). Например: "Школа N 35", "город Тамбов", "YZPT КОД".

Отметим, что все управляющие символы, кавычка ("), обратная дробная черта (\) и символ новой строки в строковом литерале и в символьной константе представляются соответствующими управляющими последовательностями. Каждая управляющая последовательность представляется как один символ. Например, при печати литерала "Школа \n N 35" его часть "Школа" будет напечатана на одной строке, а вторая часть "N 35" на следующей строке.

Символы строкового литерала сохраняются в области оперативной памяти. В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0.

Строковый литерал имеет тип char[]. Это означает, что строка рассматривается как массив символов. Отметим важную особенность, число элементов массива равно числу символов в строке плюс 1, так как нулевой символ (символ конца строки) также является элементом массива. Все строковые литералы рассматриваются компилятором как различные объекты. Строковые литералы могут располагаться на нескольких строках. Такие литералы формируются на основе использования обратной дробной черты и клавиши ввод. Обратная черта с символом новой строки игнорируется компилятором, что приводит к тому, что следующая строка является продолжением предыдущей. Например:

"строка неопределенной \n

длины"

полностью идентична литералу

"строка неопределенной длинны".

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

Идентификатор

Идентификатором называется последовательность цифр и букв, а также специальных символов, при условии, что первой стоит буква или специальный символ. Для образования идентификаторов могут быть использованы строчные или прописные буквы латинского алфавита. В качестве специального символа может использоваться символ подчеркивание (_). Два идентификатора для образования которых используются совпадающие строчные и прописные буквы, считаются различными. Например: abc, ABC, A128B, a128b .

Важной особенностью является то, что компилятор допускает любое количество символов в идентификаторе, хотя значимыми являются первые 31 символ. Во первых, идентификатор не должен совпадать с ключевыми словами, с зарезервированными словами и именами функций библиотеки компилятора языка СИ.

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

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

Ключевые слова

Ключевые слова - это зарезервированные идентификаторы, которые наделены определенным смыслом. Их можно использовать только в соответствии со значением известным компилятору языка СИ.

Приведем список ключевых слов

auto double int struct break else long switch

register tupedef char extern return void case float

unsigned default for signed union do if sizeof

volatile continue enum short while

Кроме того в рассматриваемой версии реализации языка СИ, зарезервированными словами являются:

_asm, fortran, near, far, cdecl, huge, paskal, interrupt.

Ключевые слова far, huge, near позволяют определить размеры указателей на области памяти. Ключевые слова _asm, cdelc, fortran, pascal служат для организации связи с функциями написанными на других языках.

Ключевые слова не могут быть использованы в качестве идентификаторов.

Использование комментариев в тексте программы

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

Отметим, что комментарии могут заменить как одну строку, так и несколько.

Например:

/* комментарии к программе */

/* начало алгоритма */

Или

/* комментарии можно записать в следующем виде, однако надо

быть осторожным, чтобы внутри последовательности, которая игнорируется компилятором,не попались операторы программы, которые также будут игнорироваться */

Неправильное определение комментариев.

/* комментарии к алгоритму /* решение краевой задачи */ */

или

/* комментарии к алгоритму решения */ краевой задачи */

Концепция типа данных

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

Тип данных определяет:

· внутреннее представление данных в памяти компьютера;

· множество значений, которые могут принимать величины этого типа;

· операции и функции, которые можно применять к величинам этого типа.

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

Все типы языка С++ можно разделить на простые (скалярные), составные (агрегатные) и функциональные. Простые типы могут быть стандартными и определенными программистом.

В языке С++ определено шесть стандартных простых типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов, а также массивов и указателей (указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом), программист может вводить описание собственных простых или структурированных типов. К структурированным типам относятся перечисления, функции, структуры, объединения и классы.

Простые типы данных

Простые типы делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова:

· int (целый);

· char (символьный);

· wchar_t (расширенный символьный);

· bool (логический);

· float (вещественный);

· double (вещественный с двойной точностью).

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:

· short (короткий);

· long (длинный);

· signed (со знаком);

· unsigned (без знака).

Целый тип (int)

Размер типа int стандартом ANSI не определяется. Он зависит от реализации. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного -- 4 байта.

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта. Спецификатор long означает, что целая величина будет занимать 4 байта.

Внутреннее представление величины целого типа -- целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 -- положительное число, 1 -- отрицательное). Спецификатор unsigned позволяет представлять только положительные числа. Диапазоны значений величин целого типа с различными спецификаторами для IBM PC-совместимых компьютеров приведены в таблице 1.4.

По умолчанию все целочисленные типы считаются знаковыми.

Константам, встречающимся в программе, приписывается тип в соответствии с их видом. Программист может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L имеет тип long и занимает 4 байта.

Примечание

Типы shortint,longint,signedint иunsignedint можно сокращать до short,long, signed иunsignedсоответственно.

Символьный тип (char)

Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера. Как правило, это 1 байт.

Тип char, как и другие целые типы, может быть со знаком или без знака.

В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsignedзначения могут находиться в пределах от 0 до 255. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.

Расширенный символьный тип (wchar_t)

Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short.

Логический тип (bool)

Величины логического типа могут принимать только значения true и false. Внутренняя форма представления значения false -- 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

Типы с плавающей точкой (float, double и longdouble)

Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и longdouble.

Внутреннее представление вещественного числа состоит из мантиссы и порядка. Длина мантиссы определяет точность числа, а длина порядка -- его диапазон.

Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6L будет иметь типlongdouble.

Таблица 1.3. Диапазоны значений простых типов данных для IBM PC

Тип

Диапазон значений

Размер (байт)

Bool

true и false

1

signed char

-128 … 127

1

Unsigned char

0 … 255

1

signed short int

-32 768 … 32 767

2

Unsigned short int

0 … 65 535

2

signed long int

-2 147 483 648 … 2 147 483 647

4

Unsigned long int

0 … 4 294 967 295

4

Float

3.4e-38 … 3.4e+38

4

Double

1.7e-308 … 1.7e+308

8

long double

3.4e-4932 … 3.4e+4932

10

Для вещественных типов в таблице приведены абсолютные величины минимальных и максимальных значений.

Тип void

Тип void используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.

Программа на языке Си, переменные и арифметические выражения

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

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

Си - программа, печатающая "Привет!", выглядит так:

#include <stdio.h>

main ()

{ printf ("Привет!\n");}

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

Функция main ( ), как правило, пользуется услугами других функций - библиотечных и/либо программиста. В случае библиотечных, первая строка программы, должна включать информацию о соответствующей стандартной библиотеке. Например, инструкция #include <stdio.h> - сообщает компилятору, что он должен включать в текст программы информацию о стандартной библиотеке ввода-вывода (вызов прототипа функции printf).

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

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

Переменные и арифметические выражения.

Простая программа на Си состоит из определения одной единственной функции main, а также включает такие возможности как комментарий, описания, переменные, арифметические выражения, циклы и форматный вывод.

В Си любая переменная должна быть описана раньше чем она будет использована, т.е. перед первой исполняемой инструкцией. Базовые типы для данных: char, short, long, double, int, float. Из базовых типов можно создавать: массивы, структуры и объединения, указатели на объекты базовых типов и функции, возвращающие в качестве результата значения этих типов.

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

Рассмотрим программу вычисления температур по Фаренгейту и по Цельсию.

# include <stdio.h>

/ * печать таблицы температур по Фаренгейту и Цельсию для значений 0,20, …, 300 */

main ()

{ float f, c;

int low, up, step;

low=0; /* нижняя граница таблицы температур */

up=300; // верхняя граница

step=20; // шаг

f=low;

while (f<=up)

{ c=(5.0 / 9.0)*(f-32.0);

printf("%3.0f %6.1 f\n", f, c);

f=f+step;

}

}

Большая часть вычислений выполняется в теле цикла while.

Стандартная функция printf - универсальная функция форматного ввода-вывода. Ее первый аргумент-стринг, в котором каждый знак % соответствует одному из последующих ее аргументов, а информация, расположенная за знаком %, указывает на вид, в котором каждый из этих аргументов выводится.

Например, %d специфицирует выдачу аргумента в виде целого числа. Спецификация %3.0f в printf определяет печать числа типа float с плавающей точкой в поле шириной не более трех позиций без десятичной точки и дробной части. Спецификация %6.1f описывает печать числа в поле из шести позиций с одной цифрой после десятичной точки. Спецификатор %.0f означает печать без десятичной точки и дробной части. Напечатано будет следующее:

0 -17.8

20 -6.7

40 4.4

Ширину и точность можно не задавать: %6f означает, что число будет занимать не более шести позиций; %.2f - число имеет две цифры после десятичной точки, но ширина не ограничена; %f просто указывает на печать числа с плавающей точкой; %6d - печать десятичного целого в поле из 6 позиций.

Кроме того, printf допускает также следующие спецификаторы: %0 - для восьмеричного числа, %X - для шестнадцатеричного числа, %С - для печати литеры, %S - для печати стринга литер %% - для самого %.

Другой способ написания программы преобразования температур:

# include <stdio.h> // печатать таблицы температур по Фаренгейту и Цельсию

main ()

{ int f;

for (f=0; f<=300; f=f+20)

printf ("%3d %6.1f\n", f, (5.0/9.0)*(f-32));

}

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

Это последнее изменение являются примером применения общего правила: в любом контексте, где возможно использование значения переменной какого-то типа, можно использовать более сложное выражение того же типа. Так на, месте третьего аргумента функции printf согласно спецификатору %6.1f должно быть значение с плавающей точкой, следовательно, здесь может быть любое выражение этого типа.

Именованные константы, ввод-вывод литер

Именованные константы

Очень важно в программировании давать четкие представления используемым данным. Одна из возможностей - давать числам осмысленные имена. Строка, начинающаяся со знака #,устанавливает связь с препроцессором, который выполняет макроподстановку, условную компиляцию, включение именованных файлов. Синтаксис такой строки не зависит от остальной части языка Си; такая строка может появляться где угодно в тексте программы и оказывать влияние (независимо от области действия) вплоть до конца транслируемой компоненты.


Подобные документы

  • Проектирование программного обеспечения для классифицирования выпускников высшего учебного заведения. Выбор системы управления базами данных и языка программирования. Разработка структуры данных, схема базы данных. Реализация программного комплекса.

    дипломная работа [2,4 M], добавлен 27.03.2013

  • Цели и задачи дисциплины "Технология программирования". Программные средства ПК. Состав системы программирования и элементы языка. Введение в систему программирования и операторы языка Си. Организация работы с файлами. Особенности программирования на С++.

    методичка [126,3 K], добавлен 07.12.2011

  • Проблема надежности программного обеспечения, ее показатели и факторы обеспечения. Методы контроля процесса разработки программ и документации, предупреждение ошибок. Этапы процесса отладки ПО, приемы структурного программирования и принцип модульности.

    презентация [379,5 K], добавлен 30.04.2014

  • Постановка задачи автоматизации учебного процесса колледжа и описание предметной области. Работа с базами данных в Delphi: способы, компоненты доступа к данным и работы с ними. Язык запросов SQL. База данных в Microsoft Access и результаты исследований.

    дипломная работа [55,6 K], добавлен 16.07.2008

  • Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.

    курсовая работа [738,1 K], добавлен 17.05.2010

  • Использование средств вычислительной техники в информационных системах. Программно-аппаратные средства, обеспечивающие сбор, обработку и выдачу информации. Модели данных - списки (таблицы), реляционные базы данных, иерархические и сетевые структуры.

    реферат [105,1 K], добавлен 08.11.2010

  • Диагностический анализ системы управления предприятия, его организационной и функциональной структуры. Разработка проекта подсистемы учёта средств вычислительной техники, описание технического обеспечения базы данных. Характеристика программного продукта.

    дипломная работа [7,2 M], добавлен 28.06.2011

  • История развития языков программирования; создание и распространение языка С++; новый подход к разработке объектно-ориентированного программного обеспечения. Применение моделирования предметных областей для структуризации их информационных отражений.

    реферат [29,1 K], добавлен 06.12.2010

  • Анализ методов и средств контроля доступа к файлам. Проблемы безопасности работы с файлами, средства контроля доступа ним. Идеология построения интерфейса, требования к архитектуре. Работа классов системы. Оценка себестоимости программного продукта.

    дипломная работа [2,5 M], добавлен 21.12.2012

  • Сущность языка программирования, идентификатора, структуры данных. Хранение информации, алгоритмы их обработки и особенности запоминающих устройств. Классификация структур данных и алгоритмов. Операции над структурами данных и технология программирования.

    контрольная работа [19,6 K], добавлен 11.12.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.