Вывод десятичных чисел в окно программы
В 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