Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
119
Добавлен:
13.03.2016
Размер:
470.02 Кб
Скачать

1.3.3. Функция форматного вводаscanf()

Оператор вызова этой функции имеет вид:

scanf(форматная_строка,список_ввода)

Список вводапоказывает,чтовыводить. Он содержит перечисленные через запятуюадресавводимых переменных. Почему адреса, а не имена переменных станет понятно после знакомства с функциями Си (частьпособия). Записать адрес переменной нетрудно, используя операцию&(см. таблицу 3). В список ввода не могут входить выражения или константы, так как ввод предполагает изменение значения.

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

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

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

Примерфункцииscanf:

int i; float a;

printf("Введитеi иa\n"); /* вывод приглашения к вводу */

scanf("%d%f", &i, &a);...

Форма ввода:

Введите i и a

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

Заметим также, что при вводе строк символов с помощью функции scanf() действуют более сложные правила. Так, в буфер устройства ввода считываются все символы до нажатияEnter, а в вводимую строковую переменную передаются символы до первого пробела. Такой принцип работыscanf() имеет свои преимущества, но они слишком трудны при начальном освоении языка Си. Поэтому для ввода и вывода строк лучше пользоваться функциямиgets() и puts(). Этот вопрос мы отложим до того момента, когда будем рассматривать способы обработки символьной информации в Си(см. часть).

1.4. Разработка программ на Си

1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ

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

Удобство использования программы, т. е. удобство общения с ней, определяется организацией ввода и вывода. Схема общения с программой часто называется интерфейсом (внешними связями) программы. В современных языках программирования существуют специальные средства для эффективного программирования интерфейса, удовлетворяющего некоторым стандартам, например, стандартам операционной системыWindows.В настоящем пособии эти средства не рассматриваются, а для организации простейшего диалога между пользователем и программой используются функции ввода-вывода из стандартной библиотекиc заголовочным файлом<stdio.h>.

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

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

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

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

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

Грамотное проектирование качественных программ состоит из следующих этапов:

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

  2. Проектирование алгоритма и структур данных.

  3. Написание (кодирование) программы на алгоритмическом языке.

  4. Отладка программы.

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

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

Грамотный и аккуратный пользователь каждый из рассмотренных этапов документирует.