Лекция 1. Основы алгоритмизации и программирования на Си (1153708), страница 4
Текст из файла (страница 4)
п. 1.2.3 */cin >> a>>b; /*ввод a,b*/c=a+b;/*вычисление с - суммы a,b*/cout << "c="<<c<<"\n"; /*вывод с*/5Конечно, это кажущаяся простота, которая является следствием формального использования этих операторов в их простейшем виде.16}1.3.2. Функция форматного вывода printf()Оператор вызова этой функции имеет вид:printf(форматная_строка, список_вывода)Список вывода содержит перечисленные через запятую именавыводимых переменных, т. е.
показывает, что выводить. В список вывода можно включать не только переменные, но и произвольные выражения (в частном случае константы).Форматная строка показывает, в каком виде значения переменных будут выведены на экран. В простейшем случае форматная строка - это строковая константа, т. е. она ограничена двойными кавычками (см. п.1.2.3).
Форматная строка может содержать:*произвольный текст (обычно он поясняет значения выводимых переменных); среди символов этого текста могут быть и управляющие; в несложных программах этого пособия часто будет использоваться управляющий символ '\n' (перевод строки - п.1.2.3);*спецификации форматов, показывающие, в каком видедолжны выводиться значения переменных; каждая спецификация соответствует одной переменной; спецификации встречаются в форматной строке в том порядке, в каком перечисляются выводимые переменные в списке вывода; каждая спецификация начинается с символа%; спецификация стоит в том месте текста, где должно выводитьсязначение соответствующей переменной.В простейшем виде спецификация формата имеет вид:%ширина_поля.точность спецификаторШирина поля - положительное целое число, задающее минимальное количество позиций, занимаемых выводимым значением;если число символов в выводимом значении меньше, чем ширина поля, то выводимое значение дополняется пробелами до минимальнойдлины; если число символов в выводимом значении больше шириныполя или ширина поля не задана, то печатаются все символы значения (ширина поля игнорируется).17Точность - положительное целое число, указывается в основномдля вещественных чисел, означая в этом случае количество выводимых после десятичной точки цифр.На первых этапах обучения программированию достаточно следующих спецификаторов:d - для целых значений (типов int, char, unsigned);f - для вещественных значений (типов float, double);e - для вещественных значений (типов float, double)с указаниемпорядка, т.
е. в виде:знак_числаm.ddddeзнак_порядкаxxx,где m.dddd - изображение мантиссы числа; m - одна десятичнаяцифра; dddd - последовательность десятичных цифр; е - признак порядка (десятичного); xxx - десятичные цифры для представления порядка числа.c - для одиночного символа (типов int, char, unsigned);s - для строк.C полным набором спецификаторов языка Си можно ознакомиться, например, в [2].Пример.float s; int a,b;...printf("a=%2d b=%4d\n s=%4.1\n", a,b,s);На экран будет выведена информация в виде:a=<a>b=<b>s=<s>Здесь конструкция <имя переменной> означает значение этойпеременной.
Заметим, что следующие значения будут выводиться сновой строки, так как форматная строка заканчивается символом '\n'.Такое схематичное изображение выводимой (или вводимой) информации называется формой вывода (ввода).Если a=-2, b=93, s=3.22, то на экране получим:a=-2b= 93s= 3.2Другие примеры оператора printf() представлены на рис.1.181.3.3. Функция форматного ввода scanf()6Оператор вызова этой функции имеет вид:scanf(форматная_строка, список_ввода)Список ввода показывает, что выводить. Он содержит перечисленные через запятую адреса вводимых переменных. Почему адреса,а не имена переменных станет понятно после знакомства с функциямиСи (часть пособия). Записать адрес переменной нетрудно, используя операцию & (см.
таблицу 3). В список ввода не могут входить выражения или константы, так как ввод предполагает изменение значения.Форматная строка - это строковая константа, которая, так же какпри выводе, показывает, в каком виде значения переменных будутвыглядеть на экране. Форматная строка при вводе содержит толькоспецификации формата, включать в нее какой либо пояснительныйтекст бессмысленно. Спецификации формата при вводе записываютсятак же при выводе, но ширина поля и точность обычно упускаются.Обратите внимание, что встретив оператор ввода с клавиатуры,компьютер приостанавливает (задерживает) выполнение программы,которая как бы ждет, когда пользователь введет значения исходныхданных. Вводимые значения могут разделяться пробелами (однимили несколькими) или переводом строки (нажатием клавиши Enter),после последнего введенного значения надо обязательно нажать Enter.Оператор ввода с клавиатуры всегда предваряется выводомфразы, приглашающей к вводу.
Иначе пользователь может только догадываться, по какой причине программа находится в состоянии ожидания; такая ситуация является необъяснимым остановом и может интерпретироваться как “зависание” компьютера.Пример функции scanf:int i; float a;printf("Введите i и a\n"); /* вывод приглашения к вводу */scanf("%d%f", &i, &a);...6В консольном режиме Visual Stidio 2008, Win32 рекомендуетсяиспользовать scanf_s – версию функции scanf.19Форма ввода:Введите i и a i a i a В фигурные скобки принято заключать альтернативные фрагменты формы ввода или вывода.
В данном примере значения i и a можнорасполагать на одной строке экрана, разделяя их пробелами, а можнона разных строках, разделяя их нажатием клавиши Enter.Заметим также, что при вводе строк символов с помощью функции scanf() действуют более сложные правила. Так, в буфер устройства ввода считываются все символы до нажатия Enter, а в вводимуюстроковую переменную передаются символы до первого пробела.
Такой принцип работы scanf() имеет свои преимущества, но они слишкомтрудны при начальном освоении языка Си. Поэтому для ввода и вывода строк лучше пользоваться функциями gets() и puts(). Этот вопросмы отложим до того момента, когда будем рассматривать способы обработки символьной информации в Си (см. часть ).1.4. Разработка программ на Си1.4.1. Понятие о качестве программы и основные технологические принципы разработки программСовременный уровень развития вычислительной техники и программного обеспечения позволяет на первое место ставить такие характеристики качества программ, как удобство использования, надежность, ясность структуры и текста программы. Технические характеристики программы, такие как объем занимаемой памяти и быстродействие отошли на второй план.Удобство использования программы, т.
е. удобство общения сней, определяется организацией ввода и вывода. Схема общения спрограммой часто называется интерфейсом (внешними связями) программы. В современных языках программирования существуют специальные средства для эффективного программирования интерфейса,20удовлетворяющего некоторым стандартам, например, стандартамоперационной системы Windows. В настоящем пособии эти средстване рассматриваются, а для организации простейшего диалога междупользователем и программой используются функции ввода-вывода изстандартной библиотеки c заголовочным файлом <stdio.h>.Надежность программы означает отсутствие при ее работеостановов, сообщение о причине которых не выводится, т. е. зацикливаний, зависаний и др.На получение качественных программ направлены положенияструктурного программирования, которые в основном сводятся ктрем моментам:1. Использование точно обозначенных управляющих структур алгоритмов, имеющих один вход и один выход.
Такие структуры называютсябазовыми (см. п.1.4.4).2. Разработка алгоритма методом нисходящего проектирования. Этотметод состоит в разбиении алгоритма на части и установлении междуними связей. При установлении связей очень важно, чтобы каждаячасть имела один вход и один выход, так что нисходящее проектирование успешно сочетается с использованием базовых структур алгоритмов.
Каждая часть в свою очередь разбивается на части, и процесс повторяется. Можно сказать, что нисходящее проектирование алгоритма состоит в иерархической последовательной разработке алгоритма от сложного к простому.3. Использование системы обозначений, соответствующих содержаниюзадачи и облегчающих понимание программы.Грамотное проектирование качественных программ состоит из следующих этапов:1. Анализ задачи и разработка внешней спецификации программы. Вовнешнюю спецификацию входит описание входных и выходных данных программы, форм ввода и вывода (см. п.1.3), а также описаниеметодов решения задачи, способов апробации программы, сведения оразработчике программы.2. Проектирование алгоритма и структур данных.3.
Написание (кодирование) программы на алгоритмическом языке.4. Отладка программы.21Под отладкой подразумевается выявление и исправление ошибок. Ошибки могут обнаруживаться автоматически системой программирования и операционной системой при компиляции, редактировании связей, загрузке и выполнении программы. Могут существоватьошибки в логике программы, которые автоматически не обнаруживаются. Такие ошибки можно выявить дополнительным визуальныманализом программы или с помощью тестов, т. е.
наборов значенийисходных данных, по которым известен результат. Испытание программы с помощью тестов называется тестированием.Проектирование тестов часто представляет собой самостоятельную задачу. На этапе 1 разрабатываются функциональные тесты, для получения которых используются идеи, отличные от используемых в алгоритме (но они реализуют ту же функцию).