Вывод одномерного массива. Функции 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).
Упражнение. Вывести элементы массива по одной из диагоналей экрана.
Дата добавления: 2016-07-18; просмотров: 4593;