Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги / 277.pdf
Скачиваний:
11
Добавлен:
07.06.2023
Размер:
1.06 Mб
Скачать

Функции ввода-вывода

Ввод/вывод связан с обменом информацией между оперативной памятью и внешними устройствами. Как уже говорилось, в языке С++ не предусмотрены какие-либо возможности для ввода и вывода. Поэтому, чтобы воспользоваться функциями ввода и вывода, необходимо с помощью директивы препроцессора подключить файл, содержащий заголовки стандартных функций. Функций ввода/вывода много, но в данный момент рассматриваются функции ввода scanf и вывода printf.

Функция ввода printf служит для вывода произвольной информации на экран монитора. При этом у программиста имеется возможность форматировать данные, т.е. влиять на их представление на экране дисплея. Такая возможность форматирования условно отмечена в самом имени функции литерой f. Функция printf имеет следующий синтаксис:

printf (управляющая строка, список вывода);

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

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

\n — перевод курсора на новую строку; \t — символ табуляции;

\b — шаг назад;

\r — возврат каретки.

Также можно использовать константу \007 (выдается короткий звуковой сигнал).

//Пример pr5 #include <stdio.h> void main ()

{

printf("\n Не спи – замерзнешь! \n"

}

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

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

59

%[флаг] [ширина] [.точность] символ_формата

При описании синтаксиса в языках программирования принята нотация, означающая, что все, что стоит в квадратных скобках, является необязательным. В данном случае обязательными являются только символ % и символ_формата.

Назначение некоторых спецификаций преобразования приведены в табл. 6.

Список вывода функции printf включает объекты, значения которых должны быть выведены из программы. Это выражения и их частные случаи – переменные и константы. Количество аргументов списка вывода и их типы должны соответствовать последовательности спецификаций преобразования в управляющей строке. Пример:

//Пример pr6 #include <stdio.h> void main ()

{ float summa=2102.3;

printf("\n Сумма = %f», summa);

}

//Пример pr7 #include <stdio.h> void main ()

{ float c, e; int k;

c=48.3; k=-83; e=16.33; printf("\nc=%f\tk=%d\te=%e»,c,k,e); printf("\nc=%5.2f\tk=%5d\te=%11.4e»,c,k,e);

}

На экране получатся следующие строки:

c=48.3

k=-83

e=1.63300e+01

c=48.30

 

k= -83

e= 1.6330e+01

Вкачестве флага могут выступать следующие символы:

-выравнять значение по левому краю поля (т.е. добавить пробелы справа);

+ выравнять значение по правому краю поля, вывести обязательно знак значения.

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

60

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

Функция ввода scanf служит для чтения информации с клавиатуры и имеет следующий синтаксис:

scanf (управляющая строка, список ввода);

Здесь, управляющая строка строка символов, содержащая спецификации преобразования. Каждому идентификатору из списка ввода должна соответствовать строго одна спецификация преобразования; cписок ввода - это последовательность из одного или более идентификаторов переменных строкового типа, а также любого целого или вещественного типа. Перед каждым идентификатором должен стоять символ &, который означает, что в функцию передается адрес переменной, а не значение. Передача параметров в функции описано в одном из следующих подразделов пособия. При вводе числовых переменных функция scanf вначале выделяет подстроку во входном потоке по следующему правилу: все ведущие пробелы, символы табуляции и маркеры конца строки пропускаются, выделяется первый значащий символ, признаком конца подстроки является любой из вышеперечисленных символов или символ конец файла. Выделенная таким образом подстрока рассматривается как символьное представление числовой константы, которое преобразуется в соответствии с типом переменной, и полученное значение присваивается переменной. Если значащих символов в строке нет, а список ввода еще не исчерпан, то автоматически осуществляется переход к новой строке.

Таблица 5

Символ формата

Тип выводимого объекта

%c

char

%s

Строка символов

%d

int

%u

unsigned int

%ld

long(в десятичном виде)

%f

float/double(с фиксированной точкой)

%e

float/double(в экспоненциальной форме)

%lu

unsigned long

%g

float/double(в виде f или е в зависимости

от значения)

 

%lf

long double (с фиксированной точкой)

%le

long double(в экспоненциальной форме)

%lg

long double(в виде f или е в зависимости

от значения)

 

 

61

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

//Пример pr5 #include <stdio.h> #include <conio.h> void main ()

{

float a, b; int x, y;

printf ("Введите целые x и y");

scanf ("%d%d»,&x, &y); //При вводе числа разделяются // пробелами или символом конец строки

printf (« x=%d y=%d \n x=%7d y=%2d»,x, y, x, y); printf ("Введите вещественные a и b «); scanf("%g%f», &a, &b);

//Вывод с различными спецификациями преобразования printf ("a = %g b = %g\n a = %f b = %f\n a = %e b = %e \n», a, b,a, b, a, b);

// Вывод с различной точностью

printf ("a = %10.3f b = %10.3f \n a = %7.2e b = %7.2e \n», a, b, a, b);

getch();

}

Если введем x = 12345, y = 6789, a = 1.2345 и

b =0.0000001, то получим следующий результат: x=12345 y=6789

x= 12345 y=6789 a=1.2345 b=1e-07 a=1.234500 b=0.000000

a=1.234500e+00 b=1.000000e-07 a=1.2345 b=1e-07

a= 1.235 b= 0.000 a=1.23e+00 b=1.00e-07

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

62

}
Конец
Программирование на языке С++
Разветвляющиеся программы
К разветвляющимся программам приводят задачи, в которых, в зависимости от некоторого условия, вычисления производятся тем или иным путем. Пусть необходимо вычислить значение y по формуле:
63
Вывод s,p
p:=2*(a+b)
s:=a*b
Ввод a,b
Начало
Теперь, когда мы ознакомились с операторами, необходимыми для составления линейной программы, рассмотрим пример такой программы. Пусть дано два числа a и b – длины сторон прямоугольника. Найти площадь s и периметр p прямоугольника.
//Пример pr6 #include <stdio.h> #include <conio.h> void main ()
{ float a,b,s,p;
printf("Введите длины сторон прямоугольника:");
scanf("%f%f»,&a,&b);
s=a*b;
p=(a+b)*2;
printf("\n Площадь=%5.3f»,s); printf("\n Периметр=%5.3f»,p); getch();
Пример линейной программы

Рис. 16

На рис. 15 приведена графическая схема алгоритма, программа представлена в примере pr7.

//Пример pr7 #include <stdio.h> #include <conio.h> #include <math.h> void main ()

{

float x, y;

printf ( «Введите x:» ); scanf ( «%f», &x );

if ( x>0 )

y = x*x*x+3; else

y = x*sin(x);

printf ( «y = %4.2f \n», y); getch ();

}

64

Соседние файлы в папке книги