Организация ввода-вывода переменных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Организация ввода-вывода переменных



Рассмотренные операторы позволяют овладеть технологией (методикой) организации ввода-вывода переменных.

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

Организация ввода-вывода с использованием укороченных спецификаторов представлена в разд. 6.2.1.1.

Ввод переменных

Для вводимых переменных численные значения известны. Поэтому методика организации ввода достаточно проста:

· создать идентификаторы переменных для входных данных алгоритма, определив тип каждого;

· сформировать константы из численных значений исходных данных;

· привести типы констант в соответствие с типами их переменных;

· определить длину поля значения каждой вводимой переменной;

· сформировать спецификатор каждой переменной;

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

· сформировать адрес каждой переменной;

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

Пример 3.1. Осуществить ввод переменных A=13,2 B= -6,8 I=70 PI=3,1416.

Подготовка к вводу представлена в табл. 3.9.

Таблица 3.9

Запись в задаче Обозначение в Си/Си++ Тип переменой Обозначение типа Длина поля Специфи-катор
A=13,2 B= -6,8 I=70 PI=3,1416 a=13.2 b= -6.8 i=70 pi=3.1416 Вещественный Вещественный Целый Вещественный f f d f 4 4 2 6 %4f %4f %2d %6f

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

float a, b, pi; /* описатели */

int i;            /* переменных */

...

scanf(“%4f%4f%2d%6f”, &a, &b, &i, &pi);/*оператор ввода*/

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

13.2-6.8703.1416

Следовательно, управляющая строка оператора ввода каждым спецификатором предписывает, какая часть вводимых значений соответствует конкретной переменной (переменной a – первые четыре символа, переменной b – следующие четыре, переменной i – два, переменной pi – шесть).

Пример 3.2. Осуществить ввод переменных для расчёта площади (длины Д=120 м; ширины Ш=3,6 10-3 км; переводного коэффициента K= 0,001 км/м)

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

Методику преобразования представим табл. 3.10.

Таблица 3.10

Запись в задаче Обозначение в Си/Си++ Тип переменой Обозначение типа Длина поля Специ-фикатор
Д=120 Ш=3,6 10-3 K= 0,001 d=120. sh=3.6E-3 k= 0.001 Вещественный Вещественный Вещественный f e f 4 6 5 %4f %6e %5f

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

При этом фрагмент программы по организации ввода оформится операторами:

float d, sh, k; /* описатели переменных */

...

scanf(“%4f%6e%5f”, &d, &sh, &k); /* оператор ввода */

Строка численных значений, подготовленных к вводу:

120.3.6E-30.001

Вывод переменных

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

· численные значения большинства выводимых переменных неизвестны (формируются при решении);

· чтение результатов из сплошной строки (без пробелов) не удобно;

· спецификатор каждой переменной жёстко определяет расположение выводимого численного значения. Для вещественных – относительно точки, для целых – от правого края поля;

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

· если число разрядов дробной части меньше, чем запланировано в спецификаторе, эти лишние разряды заполняются нулями;

· если число разрядов целой переменной или целой части вещественной меньше, чем запланировано в спецификаторе, все оставшиеся свободными левые разряды заполняться не будут;

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

Методика организации вывода:

· уточнить список переменных конкретного блока «вывод» алгоритма;

· определить тип каждой переменной и значение (известно, неизвестно);

· задаться желаемой формой представления численного значения выводимой переменной;

· сформировать (представить) шаблон вывода каждой переменной;

· составить спецификатор вывода в соответствии с указаниями шаблона;

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

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

Рассмотрим варианты организации вывода введённых переменных.

Пример 3.3. Организовать вывод введённых переменных A=13,2 B= -6,8 I=70 PI=3,1416 (пример 3.1).

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

Последовательность подготовки к выводу представлена в табл. 3.11.

Таблица 3.11

Переменная

Шаблон вывода

Разделитель

Обозначение Тип Значение Длина Точность Форма представления Длина Точность Спецификатор
a b i pi Вещ. Вещ. Цел. Вещ. 13,2 -6,8 70 3,1416 4 4 2 6 1 1 – 4 f f d f 7 7 7 10 2 2 – 4 %7.2f %7.2f %7d %10.4d Нет Нет Нет Нет

Шаблон вывода можно представить следующим образом

_ _ _ _ Ÿ _ _ _ _ _ _ Ÿ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Ÿ _ _ _ _

  a   b   i   pi

Следовательно, фрагмент вывода, с учётом ранее составленных описателей будет иметь вид:

float a, b, pi; /* описатели */

int i;            /* переменных */

...

printf(“%7.2f%7.2f%7d%10.4f”, a, b, i, pi); /* оператор вывода */

Оператор printf предписывает вывод на экран значений переменных (a, b, i, pi) в указанном порядке, расположив их в одной строке следующим образом:

– – 13.00 – – -6.80 – – – – – 70 – – – – 3.1416

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

Последовательность подготовки к выводу имеет вид табл. 3.12.

Таблица 3.12

Переменная

Шаблон вывода

Разделитель

Обозначение Тип Значение Длина Точность Форма представления Длина Точность Спецификатор
a b i pi Вещ. Вещ. Цел. Вещ. 13,2 -6,8 70 3,1416 4 4 2 6 1 1 – 4 f f d f 4 4 2 6 1 1 – 4 %4.1f %4.1f %2d %6.4f _ _ _ _ _ _ _ _

 

Шаблон вывода можно представить следующим образом

_ _ _ _ Ÿ _ _ _ _ _ Ÿ _ _ _ _ _ _ _ _ Ÿ _ _ _ _

    a     b   i     pi

Следовательно, оператор вывода с учётом ранее составленных описателей имеет вид:

printf(“_ _ %4.1f _ _ %4.1f _ _ %2d _ _ %6.4f ”, a, b, i, pi);

Оператор предписывает вывод на экран значений переменных (a, b, i, pi) в указанном порядке, расположив их в одной строке следующим образом:

– – 13.0 – – -6.8 – – 70 – – 3.1416

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

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

Подготовка к выводу имеет вид табл. 3.13.

Таблица 3.13

Переменная

Шаблон вывода

Разделитель

Обозначение Тип Значение Длина Точность Форма представления Длина Точность Спецификатор
a b i pi Вещ. Вещ. Цел. Вещ. 13,2 -6,8 70 3,1416 4 4 2 6 1 1 – 4 f f d f 4 4 2 6 1 1 – 4 %4.1f %4.1f %2d %6.4f _ a= _ b= _ i= _ pi=

Шаблон вывода можно представить следующим образом

_ а = _ _ Ÿ _ _b = _ _ Ÿ _ _i = _ _ _ pi = _ Ÿ _ _ _ _

    a     b     i     pi

Оператор вывода с учётом ранее составленных описателей имеет вид

printf(“_ a=%4.1f _ b=%4.1f _ i=%2d _ pi=%6.4f”, a, b, i, pi);

Оператор предписывает вывод на экран значений переменных (a, b, i, pi) в указанном порядке, расположив их в одной строке следующим образом:

– a=13.0 – b=-6.8 –  i=70 – pi=3.1416

Рассмотрим варианты организации вывода результатов.

Результаты – переменные, численные значения которых на момент составления программы неизвестны (будут получены в процессе счёта).

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

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

Пример 3.4. Организовать вывод промежуточных и конечных результатов (вещественных переменных) X, Y, Z.

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

Подготовка к выводу имеет вид табл. 3.14.

Таблица 3.14

Переменная

Шаблон вывода

Разделитель

Обозначение Тип Значение Длина Точность Форма представления Длина Точность Спецификатор
x y z Вещ. Вещ. Вещ. Не изв. Не изв. Не изв. – – – – – – f f f 10 10 10 2 2 2 %10.2f %10.2f %10.2f Нет Нет Нет

Шаблон вывода можно представить следующим образом

_ _ _ _ _ _ _ Ÿ _ _ _ _ _ _ _ _ _ Ÿ _ _ _ _ _ _ _ _ _ Ÿ _ _

  x   y   z

 

Следовательно, оператор вывода:

printf(“%10.2f%10.2f%10.2f”, x, y, z);

если переменные в процессе счёта приняли значения x=265.38, y=1244.5, z=4.7 сформирует строку вида:

– – – – 265.38 – – – 1244.50 – – – – – – 4.70

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

printf(“%6.2f%6.2f%6.2f”, x, y, z);

(в качестве длины выбраны значения 6) сформирует строку вида

265.381244.50 – – 4.70

В выводимой строке произошло слияние значений переменных x и y.

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

Подготовка к выводу имеет вид табл. 3.15.

Таблица 3.15

Переменная

Шаблон вывода

Разделитель

Обозначение Тип Значение Длина Точность Форма представления Длина Точность Спецификатор
x y z Вещ. Вещ. Вещ. Не изв. Не изв. Не изв. – – – – – – f f f 6 6 6 2 2 2 %6.2f %6.2f %6.2f _ _ _ _ _ _

Шаблон вывода можно представить следующим образом

_ _ _ _ _ Ÿ _ _ _ _ _ _ _ Ÿ _ _ _ _ _ _ _ Ÿ _ _

    x     y     z

Оператор вывода примет вид:

printf(“_ _%6.2f _ _%6.2f _ _.%6.2f”, x, y, z);

и сформирует следующую выводимую строку:

– – 265.38 – – 1244.50 – – 4.70

ü Внимание! Поле для вывода переменной «y» автоматически увеличилось на один разряд в соответствии с правилами.

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

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

Последовательность подготовки к выводу аналогична представленной в табл. 3.15 с указанием в последнем столбце надписей (_ X=, _ Y=, _ Z=).

В этом варианте вывод переменных оператором:

printf(“_X=%6.2f _ Y=%6.2f _ Z=%6.2f”, x, y, z);

приведёт к индикации в текущей строке экрана информации:

–  X=265.38 –  Y=1244.50 –  Z= – – 4.70

Особенность рассмотренных вариантов – распечатка переменных одной строкой.

Четвёртый вариант – вывод переменных в разных строках. При этом вывод численных значений X и Y выполним в экспоненциальной форме, увеличив точность представления мантиссы.

Подготовка к выводу имеет вид табл. 3.16.

Таблица 3.16

Переменная

Шаблон вывода

Разделитель

Обозна- чение Тип Значение Длина Точность Форма представ- ления Длина Точность Спецификатор
x y z Вещ. Вещ. Вещ. Не изв. Не изв. Не изв. – – – – – – e e f 9 9 6 4 4 2 %9.4e %9.4e %6.2f \nX= \nY= \nZ=

 

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

X = _ Ÿ _ _ _ _ E _ _

Y = _ Ÿ _ _ _ _ E _ _

Z = _ _ _ Ÿ _ _

В этом варианте вывод переменных оператором:

printf(“\nX=%9.4e\nY=%9.4e\nZ=%6.2f”, x, y, z);

приведёт к индикации в текущих строках экрана информации:

X=2.6538E+2

Y=1.2445E+3

Z = – – 4.70

ü Внимание! Предложенные методики вывода на экран (функцией printf) полностью справедливы для вывода в поток (функцией fprintf).

3.5.5. Структура Си/Си++-программы

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

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

· применением функций в качестве основной сборной конструкции;

· оформлением максимума возможных расчетов и действий стандартными (системными) функциями;

· формированием аналогичных по назначению системных функций в стандартные блоки (внешние файлы);

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

Сформулируем, исходя из изложенного, некоторые определения.

Составной оператор– совокупность нескольких простых операторов заключенная в фигурные скобки.

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

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

По назначению внешние файлы делятся на библиотечные и заголовочные.

Библиотечные внешние файлы – хранилища текстов стандартных подпрограмм (например, вычисления трансцендентных функций), оформленных на языке конкретной ЭВМ.



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 125; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.218.184 (0.123 с.)