
- •Содержание
- •Введение
- •История развития компьютера
- •Типы и назначение компьютеров
- •Классы программного обеспечения (ПО) ЭВМ
- •Операционная система персонального компьютера (ПК)
- •Основы информатики
- •Информационные процессы
- •Информационная деятельность человека
- •Технические средства хранения информации
- •Кодирование информации
- •Системы счисления
- •Представление информации в компьютере
- •Представление текстовых данных
- •Представление изображений
- •Представление звуковой информации
- •Представление видео
- •Введение в программирование на языке Си
- •Этапы решения задачи на ЭВМ
- •Графический способ описания алгоритмов
- •Структура программы на языке С++
- •Описание переменных
- •Функции ввода-вывода
- •Условный оператор
- •Составной оператор
- •Операция условия
- •Оператор выбора
- •Циклические программы
- •Оператор цикла с постусловием
- •Оператор цикла с предусловием
- •Оператор цикла со счетчиком
- •Обработка массивов
- •Обработка одномерных массивов
- •Обработка двумерных массивов
- •Массивы и указатели
- •Пользовательские функции
- •Решение нелинейных уравнений
- •Нелинейные уравнения
- •Исследование уравнений и отделение корней
- •Методы поиска корней уравнения
- •Модификация табличного способа
- •Метод Ньютона (метод касательных)
- •Метод секущих
- •Файлы
- •Файлы данных и каталоги. Внутренняя организация и типы файлов
- •Текстовые файлы
- •Строки символов
- •Заключение
- •Список источников
Функции ввода-вывода
Ввод/вывод связан с обменом информацией между оперативной памятью и внешними устройствами. Как уже говорилось, в языке С++ не предусмотрены какие-либо возможности для ввода и вывода. Поэтому, чтобы воспользоваться функциями ввода и вывода, необходимо с помощью директивы препроцессора подключить файл, содержащий заголовки стандартных функций. Функций ввода/вывода много, но в данный момент рассматриваются функции ввода 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


Рис. 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