Вывод одномерного массива. Функции printf и сprintf

Простой вывод элементов небольшого массива в одну строку экрана можно выполнить так:

cout<< “\n Масссив: \n“;

for (int i=0; i<n; i++)

cout<<A[i]<<" ";

cout<<endl;

Замечание. Первая и последняя строки будут дальше во всех вариантах.

Вывод массива относительно большой размерности N (например, 50), который не вмещается в одну строку, по K элементов в строке выглядит так:

int K=10;

for (int i=0; i< n; i++)

{ cout<<A[i]<<" ";

if ((i+1) %K == 0) cout<<endl;

// или if ( ! ( (i+1) % K ) ) cout << endl;

}

В этом варианте числа не выровнены. Поэтому следующий вариант устраняет этот недостаток:

for (int i=0; i< n; i++)

{ printf("%7.2f", A[i]);

if (! ((i+1) %K)) printf("\n");

}

Упражнениедля изучения printf.

Пусть float x=1.11; int y=–2; Вывод

cout<<“ The first number “<< x<<endl<<” y= “<<y<<endl;

можно записать так:

printf (“ The first number %f\n y= %d\n”, x, y);

Функция printfимеет следующий общий вид:

printf (строка, список);

В строке можно записать:

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

· управляющие символы или символьные константы с обратным слэшем:

\n — переход на следующую строку;

\r — возврат каретки, то есть переход в начало текущей строки;

\t — горизонтальная табуляция, то есть вывод с определённых стандартных позиций;

\a — непродолжительный звуковой сигнал и другие;

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

%f — для вывода вещественных чисел;

%d — для вывода целых чисел;

%E или %e— для вывода вещественных чисел в экспоненциальной форме (научной нотации), например, 0.5E4 или 0.5e-4;

%G — выбирает в зависимости от значения числа формат %f или %E;

%g — выбирает в зависимости от значения числа формат %f или %e;

%X или %x — для вывода числа в шестнадцатеричной системе счисления (число 17110 будет выведено как AB или ab);

%с — для вывода символа;

%s — для вывода строки и другие форматы.

Вся строка с указанными выше элементами записывается, как правило, в виде текстовой константы. Можно использовать для этих целей переменную строкового типа.

В списке через символ “,” (запятая) указываем выражения, значения которых выводятся. Как частный случай выражения можно записать константу или переменную. Между элементами списка и спецификаторами формата с символом “%” должно быть соответствие в количестве, порядке следования и типе.

Любой из элементов строки или список могут отсутствовать. Например, printf (” выводимый текст”); или

printf (“%s”, ”выводимый текст”); выводит только текст.

Перед спецификаторами формата можно использовать модификаторы форматовдля изменения способа представления выводимых значений:

— %nd, где целая константа n определяет ширину поля для выводимого целого числа. Например, printf (“%5d%05d”, j, num) выводит значения справа поля шириной 5 с впереди стоящими пробелами для j и c впереди стоящими нулями для num ;

— %n.kf, %n.ke, %n.kE, где целая константа n задаёт общее количество позиций, отводимых для вывода вещественного числа, включая точку и знак числа; целая константа к определяет количество позиций, отводимых для дробной части. Например: float a, b, c; printf (“%f\n%10f\n%10.3f”, a, b, c);

Если n положительное, то выравнивание выполняется по правому краю, если n отрицательное, то по левому краю.

Функцию printf удобно использовать для вывода табличных данных, например:

for (float x=-1.6; x<1.6001; x+=0.2)

printf("%10.2G %-10.4f %10.4f\n", x, x*x, x*x*x);

Проведите эксперимент с этим фрагментом.

Следующий фрагмент демонстрирует цветной вывод массива. Программа находит наибольшее число массива и выводит его белым цветом (textcolor(15)) на зелёном фоне (textbackground(2)), а остальные числа, наоборот, зелёным цветом на белом фоне.

float MyMax; MyMax=A[0];

for (int i=1; i<n; i++)

if (A[i]>MyMax) MyMax=A[i];

// или MyMax = A[i]>MyMax ? A[i] : MyMax;

cout<<"\nColor output ";

for (int i=0; i<n; i++)

{ if (A[i]==MyMax)

{ textcolor(15); textbackground(2);

}

else { textcolor (2); textbackground (15);

}

cprintf("%7.2f",A[i]);

}

Из двух цветов можно задавать только цвет выводимых символов с помощью textcolor. Обратим внимание, что задать только цвет недостаточно. При “цветном выводе” вместо cout или функции printf необходимо использовать функцию cprintf!

Упражнение. Вывести разным цветом отрицательные, нулевые и положительные числа целочисленного массива, не используя цвет фона.

Рассмотрим вывод массива в специальном виде (порядке). Например, вывести элементы массива в порядке A[n-1], A[n-2], …, A[0] слева направо вверху в первой строке. Затем вывести этот же массив снизу вверх примерно посередине экрана с одинаковым расстоянием справа и слева так, чтобы можно было наблюдать вывод, то есть с задержкой.

textbackground(0);

/* Надо выполнить эту функцию, если раньше использовали цвет фона, иначе экран будет закрашен в ранее установленный цвет фона.*/

clrscr(); // Очищает и закрашивает экран.

for (int I=n-1; I>=0; I--) cout<<A[I]<<" ";

int y; y=wherey()+1;

// Функция wherey() возвращает номер текущей строки.

for (int I=0; I<n; I++)

{

// Переводит курсор в указанную позицию.

gotoxy(37, y+n-I);

printf("%7.2f", A[I]);

for (int t=0;t<100000000;t++); // Задержка при выводе.

}

Функция gotoxy (x, y) переводит курсор в позицию с указанными текстовыми координатами, где y — номер строки (нумерация сверху вниз от 1 до 25), x — номер символа в строке (нумерация слева направо от 1 до 80). То есть направление как текстовых, так и графических “компьютерных” координат отличается от известных в геометрии декартовых координат. Символ в левом верхнем углу окна вывода имеет координаты (1,1), а в нижнем правом углу — (80, 25).

Упражнение. Вывести элементы массива по одной из диагоналей экрана.

Наши рекомендации