Вывод десятичных чисел в окно программы

 

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

 

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

 

Основными элементами управляющей строки являются форматы вывода, которые состоят из одной или пары букв после знака %. Для десятичных данных есть следующие форматы вывода:

%d – для целых со знаком, %u – для целых без знака,

 

%f – для вещественных типа float в естественной форме, %lf – для вещественных типа double в естественной форме, %e – для вещественных в экспоненциальной форме,

 

%g – для вещественных в наиболее компактной форме: экспоненциальной или в естественной форме.

Форматы, записанные в управляющей строке, ставятся в соответствие элементам списка вывода порядком их следования: первый по порядку формат соответствует пер-вому элементу списка вывода, второй – второму элементу и т.д.

Например, если в программе есть переменные intk=-25;

 

unsigned int j=7; float x=-4.55;

 

«Практикум по программированию на языке C в среде VS C++»

 


 

doubley=3.125E-2;

 

то оператором printf("%d%u%f%lf",k,j,x,y);

 

будет выведена следующая строка чисел

 

-257-4.5500000.031250

 

В использованной управляющей строке "%d%u%f%lf" форматы расположены слитно, поэтому числа в строке окна программы также расположены слитно, и прочитать правильно данные не всегда будет возможно (в примере число 7, представляющее значе-ние j, слилось с числом -25, представляющим значение k, и не понять, то ли это -2 и 57, то ли -25 и 7; вещественные числа также оказались выведенными слитно).

 

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

1. Использование поясняющих текстов: оператор

 

printf("k=%dj=%ux=%fy=%lf",k,j,x,y);

 

выведет следующую строку в окно программы k=-25 j=7 x=-4.550000 y=0.031250

 

2. Использование пробелов: оператор

 

printf("k=%d %u %f %lf",k,j,x,y);

 

выведет следующую строку в окно программы

 

-25 7 -4.550000 0.031250

 

3. Использование управляющих знаков табуляции (\t) : оператор

 

printf("\n\t%d\t%u\t%f\t%lf\n",k,j,x,y);

 

выведет следующую строку в окно программы

 

-25 7 -4.550000 0.031250

 

4. Использование управляющих знаков (\n) перехода на новую строку: оператор

 

printf("%d\n%u\n%f\n%lf\n",k,j,x,y);

 

выведет следующие строки в окно программы, в том числе пустую строку после чисел

 

 

«Практикум по программированию на языке C в среде VS C++»

 


 

-25 7

 

-4.550000 0.031250

 

5. Использование только управляющей строки для вывода заголовочного текста printf("\tk\tj\tx\t\ty\n");

 

и вывод под ней соответствующих значений переменных printf("\t%d\t%u\t%f\t%lf\n",k,j,x,y);

 

k j x y
-25 -4.550000 0.0312507

 

 

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

 

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

 

Программа

 

#include <stdafx.h> #include <math.h>

 

int _tmain(int argc, _TCHAR* argv[])

 

{

 

intFi;floatR;

 

//Вывод приглашения к вводу угла в градусах printf("inputFi:");

//Ввод значения угла в переменную Fi

 

 

«Практикум по программированию на языке C в среде VS C++»

 


 

scanf("%d",&Fi);

 

//Вывод значения угла в градусах и пропуск строки printf("Fi = %d\n",Fi);

 

//Перевод угла в радианы и присвоение переменной R

 

R=Fi*atan(1.0)/45;

 

//Вывод значения R (угла в радианах) и пропуск строки printf("\nR = %frad\n",R);//

//Вывод tg(R) с поясняющим текстом printf("\ntg(%lf) = %lf\n",R, tan(R)); return0;

 

}

 

Протокол ввода-вывода в окне программы для угла 30о будет иметь вид: inputFi: 30

Fi = 30

 

 

R = 0.523599 rad

 

 

tg(0.523599) = 0.577350

 

 

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

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

(-).

 

Например, если в программе вместо оператора

 

printf("\nR = %frad\n",R);//длина поля вывода по умолчанию

 

 

«Практикум по программированию на языке C в среде VS C++»

 


 

использовать

 

printf("\nR = %30.18frad \n",R);

 

то будет выведено в поле из 30 знакомест в экспоненциальной форме число с 18-ю циф-рами после точки в мантиссе с выравниванием по правой стороне поля вывод

 

R = 0.523598790168762210 rad

 

а если использовать выравнивание влево (знак минус в формате вывода) printf("\nR = %-30.18frad\n",R);

 

то будет выведено

 

R = 0.523598790168762210 rad

 

Аналогично, если в программе вместо оператора

 

printf("\nR = %erad\n",R);//длина поля вывода по умолчанию

 

выводящего

 

R = 5.235988e-001 rad

 

использовать

 

printf("\nR = %25.18erad\n",R);

 

то будет выведено в поле из 25 знакомест в естественной форме число с 18-ю цифрами в дробной части с выравниванием по правой стороне поля вывод

 

R = 5.235987901687622100e-001 rad

 

а если использовать выравнивание влево (знак минус в формате вывода) printf("\nR = %-25.18erad\n",R);

 

то будет выведено

 

R = 5.235987901687622100e-001 rad