Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке с++ ч.1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.13 Mб
Скачать

Лабораторная работа №4 Форматированный ввод-вывод данных

Цель работы: научиться работать с форматированным вводом-выводом данных в языке C++.

Теоретические сведения

Форматированный ввод-вывод данных организуется функциями scanf и printf соответственно. Их прототипы содержатся в заголовочном файле stdio.h. Название заголовочного файла есть объединение аббревиатур: std – standard (стандартный); i – input (ввод); o – output (вывод).

Функция printf переводит данные из машинного представления в символьное для вывода на экран. Функция scanf – в обратном направлении – при вводе данных с клавиатуры.

Форматированный вывод данных

Для функции printf приемлема следующая форма операторной записи:

printf ("СтрокаФормата", [Аргументы]);

где:

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

Аргументы – одно либо несколько имен соответственно объектов и ссылок на их адреса, перечисленных через запятую. Адрес памяти, которому поставлен в соответствие простой объект, извлекается операцией взятия адреса &, то есть описывается как &ИмяОбъекта.

Спецификации форматного вывода

Обобщенно спецификация формата вывода имеет в функции printf следующий вид (в в квадратных скобках ”[]” указаны необязательные элементы):

%[Флаги][Ширина][.Точность][Модификатор]Тип

где:

Флаги – необязательная последовательность символов, указывающих форму вывода (выравнивание вывода, знак числа, десятичная точка, конечные нули, восьмеричные и шестнадцатеричные префиксы);

Флаг

Название

Описание

знак минуса,

код ASCII

#45

выводимое значение выравнивается по левому краю в пределах минимальной ширины поля (если флаг не указан – по правому)

+

знак плюс

всегда указывать знак (+ или –) для выводимого десятичного числового значения (если флаг не указан, то знак выводится только для отрицательных чисел)

пробел

помещать перед результатом пробел, если первый символ значения не знак. Символ + имеет больший приоритет, чем пробел. Используется только для десятичных числовых значений.

#

диез

«альтернативная форма» вывода значения

0

символ нуля

дополнять поле символом '0' до ширины, указанной в поле ширина управляющей последовательности. Символ «минус» имеет больший приоритет, чем '0'. Используется для типов d, i, o, u, x, X, a, A, e, E, f, F, g, G. Для типов d, i, o, u, x, X, если точность указана, этот флаг игнорируется. Для остальных типов поведение не определено.

Ширина – максимальное число выводимых символов с учетом дополнения нулями и пробелами;

Точность – максимальное число позиций, предоставляемых для вывода значений данных. Спецификатор звездочка '*' в позициях Ширина и/или Точность означает, что число выводимых символов определяется текущим значением аргумента.

Модификатор замещает размер аргумента, принятый по умолчанию,

например: h – short int;

l – long int;

L – long double;

Тип – символ типа преобразования данных. Значения типов (спецификаторы) формата вывода:

Символ

формата

Тип

Описание

%i

int

десятичное целое число

%d

int

десятичное целое число

%o

int

восьмеричное беззнаковое число

(без нуля слева)

%u

unsigned int

десятичное беззнаковое целое число

%x, %X

int

шестнадцатеричное беззнаковое число

(без '0х' или '0Х' слева)

%ld

long

десятичное целое число

%lo

long

восьмеричное беззнаковое число

(без нуля слева)

%lu

unsigned long

десятичное беззнаковое целое число

%lx, %lX

long

шестнадцатеричное беззнаковое число

(без '0х' или '0Х' слева)

char

одиночный символ

%s

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

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

%f, %F

float/double

десятичное вещественное число c фиксированной точкой, количество знаков в дробной части по умолчанию равно 6

%e, %E

float/double

десятичное вещественное число с плавающей точкой, количество знаков в дробной части по умолчанию равно 6

%g, %G

float/double

десятичное вещественное число (в виде %f или %е в зависимости от значения)

%lf,%lF

double /

long double

десятичное вещественное число c фиксированной точкой

%le, %lE

double /

long double

десятичное вещественное число с плавающей точкой

%lg, %lG

double /

long double

десятичное вещественное число (в виде %f или %е в зависимости от значения)

Пример 1.

//Программа форматированного вывода символов

#include <stdio.h>

void main(){

char s='Z';

printf("\n\t%c",s);

printf("\n\t%5c",s);

printf("\n\t%-5c",s);

}

Пример 2.

//Программа форматированного вывода целого числа со знаком

#include <stdio.h>

void main(){

int g=123;

printf("\n%d",g);

printf("\n%+d",g);

printf("\n% d",g);

}

Пример 3.

// Программа форматированного вывода вещественного числа

#include <stdio.h>

void main(){

float p=164.153;

printf("\n%f",p);

printf("\n%.2f",p);

printf("\n%12.2f",p);

printf("\n%4.1f",p);

printf("\n%E",p);

}

Форматированный ввод данных

Для функции scanf приемлема следующая форма операторной записи:

scanf ("СтрокаФормата", АдресаАргументов);

где:

СтрокаФормата состоит из необязательных символов, приводимых пользователем, и символов, определяющих собственно спецификацию (-ции) формата(-ов) преобразования значений вводимых данных в машинное представление (последовательности нулей и единиц);

АдресаАргументов – одно либо несколько имен соответственно объектов и ссылок на их адреса, перечисленных через запятую. Адрес памяти, которой поставлен в соответствие простой объект, извлекается операцией взятия адреса &, то есть описывается как &ИмяОбъекта.

Для функции scanf спецификация СтрокаФормата имеет синтаксис:

%[*][Ширина][Модификатор]Тип

где:

* – вводимое значение не присваивать переменной;

Ширина – максимальное число вводимых символов;

Модификатор – один из символов h – short int;

l – long int;

L – long double;

Тип – символ типа. Значения типов (спецификаторы) формата ввода:

Символ

формата

Тип

Описание

%i

int

целое число; оно может быть восьмеричным (с нулем слева) или шестнадцатеричное (с '0х' или '0Х' слева)

%d

int

десятичное целое число

%o

int

восьмеричное целое число

(с нулем слева или без него)

%u

unsigned int

десятичное беззнаковое целое число

%x, %X

int

шестнадцатеричное целое число

(с '0х' или '0Х' слева или без них)

char

символ

%s

строка

символов

строка символов (вводится без кавычек)

%f, %F

%e, %E

%g, %G

float

десятичное вещественное число, возможно со знаком; обязательно присутствие либо десятичной точки, либо экспоненциальной части, а возможно обеих вместе

%lf, %lF

%le, %lE

%lg, %lG

double /

long double

В СтрокеФормата функции scanf могут быть указаны любые символы (кроме символов пробела, табуляции, новой строки и '%'). Причем при запросе выполняемой программы эти символы (называемые образцом ввода) должны быть введены с клавиатуры в указанной последовательности.

Пример 4.

// Программа форматированного ввода-вывода данных

#include <stdio.h>

void main(){

int t;

float p;

char s;

scanf("%c",&s);

printf("s=%c\n",s);

scanf("%d",&t);

printf("t=%d\n",t);

scanf("%f",&p);

printf("p=%f\n",p);

}

Пример 5.

//Программа форматированного ввода-вывода данных

#include <stdio.h>

void main(){

int year, /*год рождения*/

height, /*рост*/

weight;/*вес*/

printf("Введите год рождения \n");

scanf("%d", &year);

printf("Введите рост \n");

scanf("%d", &height);

printf("Введите вес \n");

scanf("%d", &weight);

printf("\nВведенные данные: год рождения %d, рост %d,

вес %d\n", year, height, weight);

}

Ввод-вывод одиночных данных

Чтение символа, вводимого с клавиатуры, осуществляется функцией getchar, а его вывод на экран – putchar. При этом символ считается введенным, если после его набора нажата клавиша Enter.

Прототип первой функции выглядит так:

int getchar();

Эта функция считывает вводимый символ, и его значение переводится в тип int.

Прототип второй функции:

int putchar(char ch);

Функция выводит на экран символ, помещенный в ch. Если вывод прошел успешно, то функция возвращает значение целого типа, иначе – EOF (то есть 1).

Пример 6.

//Программа вывода на экран символа D.

#include <stdio.h>

void main(){

char S=’D’;

printf("\nВывод отдельного символа=>");

putchar(S);

}

Результат выполнения программы:

Вывод отдельного символа=> D

Пример 7.

/*Программа ввода и отображения на экране одиночного символа.*/

#include <stdio.h>

void main(){

char S;

printf("\nВведите любой символ=>");

S=getchar();

printf("\nВведен символ=>%с", S);

}

Результат выполнения программы:

Введите любой символ=> Q

Введен символ=>Q

Задания

  1. Наберите коды программ из Примеров 1, 2 и 3. Сохраните коды программ. Выполните компиляцию и запуск программ. Введите свои данные в качестве входных. Поясните комментариями к программному коду формат выходных данных.

  2. Наберите код программы из Примера 4. Сохраните код программы. Выполните компиляцию и запуск программы. Введите свои данные в качестве входных. Поясните комментариями к программному коду формат входных и выходных данных.

  3. Напишите программу, которая выводит на экран четверостишие через форматированный ввод-вывод. Используйте в начале каждой выводимой строки горизонтальную табуляцию.

Унылая пора! Очей очарованье!

Приятна мне твоя прощальная краса —

Люблю я пышное природы увяданье,

В багрец и золото одетые леса.

А. С. Пушкин

Домашние задания

  1. Наберите код программы из Примера 5. Сохраните код в файле с именем formio.cpp. Выполните компиляцию и запуск программы. Введите свои данные в качестве входных.

  2. Наберите коды программ из Примера 6 и 7. Сохраните коды в файлы с именами symbol.cpp и onesymb.cpp. Выполните компиляцию и запуск программ.

  3. Написать программу ввода значений переменных h и l (типа float), которые содержат высоту и длину прямоугольника. Выведите перед значением каждой переменной пояснительный текст (высота=, ширина=), а после – единицы измерения (см). Используйте форматированный ввод-вывод данных.