Операторы ввода и вывода в языке программирования Си++
Лабораторная
№1 “Операторы ввода и вывода в языке программирования Си++”
1. Теоретические
сведения
1.1
Структура программы
Цель работы: изучить
операторы ввода и вывода, форматы, используемые в этих операторах. Оформить
законченную программу с применением этих операторов.
В языке СИ любая
программа состоит из одной или более функций, задающих действия, которые нужно
выполнить. Выполнение любой программы начинается с функции main. Далее идет
текст программы, заключенный в фигурные скобки. Таким образом, структура
программы имеет вид:
main ( )
{
Тело программы
}
В самом простом случае функция main
не имеет аргументов, поэтому в скобках ничего не содержится. Для работы
программы, обеспечивающей ввод и вывод информации, перед функцией main необходимо
поместить строку:
#include <stdio.h>
1.2
Алфавит языка и типы данных
Алфавит языка включает
латинские прописные и строчные буквы, цифры и специальные знаки. К последним
относятся: . (точка), , (запятая), ‘ (апостроф), : (двоеточие) и др.
Важным понятием языка
является идентификатор, который используется в качестве имени объекта, например,
переменной, функции и т.п. Идентификатор может содержать до 32 символов и
состоит из букв и цифр, но начинается обязательно с буквы. Строчные буквы
отличаются от прописных, поэтому идентификаторы SIGMA и sigma считаются
разными.
В языке СИ существует
несколько типов данных. Каждый тип данных определяется одним из следующих
ключевых слов:
1.
int (целый) –
задает значения, к которым относятся все целые числа. Диапазон возможных целых
значений лежит в пределах от –32768 до 32767, переменная типа int занимает 16
бит;
2.
short (короткий
целый) – соответствующие объекты не могут быть больше, чем int, переменные
этого типа занимают 16 бит;
3.
long (длинный
целый) – соответствующие объекты не могут быть меньше, чем int. Переменная типа
long занимает 32 бита и позволяет представить целые числа от –2147483648 до
2147483647;
4.
char (символьный)
– задает значения, которые представляют различные символы;
5.
unsigned (беззнаковый)
– в языке СИ можно объявлять некоторые типы (char, short, int, long)
беззнаковыми с помощью модификатора unsigned (например, unsigned short). Это
значит, что соответствующие переменные не будут иметь отрицательных значений. В
результате они могут принимать большие положительные значения, чем переменные
знаковых типов. В случае типа int объявления вида «unsigned int a;» можно
записать «unsigned a;»;
6.
float
(вещественный) – задает значения, к которым относятся вещественные числа,
имеющие дробную часть, отделяемую точкой. Вещественные числа могут быть
записаны также в экспоненциальной форме. Например, -1.58е+2 (что равно -1,58·102
). В языке СИ переменная типа float занимает 32 бита. Она может принимать
значения в диапазоне от +3.4е-38 до +3.4е+38;
7.
double (двойная
точность) – определяет вещественные переменные, занимающие в два раза больше
места, чем переменная типа float. Переменная типа double занимает 64 бита. Она
может принимать значения в диапазоне от +1.7е-308 до +1.7е+308.
1.3 Ввод и
вывод информации
1.3.1
Форматный вывод
Вначале рассмотрим функцию,
определяющую форматный вывод:
printf("управляющая
строка", аргумент1, аргумент2, ... );
Управляющая строка
содержит объекты трех типов: обычные символы, которые просто выводятся на экран
дисплея, спецификации преобразования, каждая из которых вызывает вывод на экран
значения очередного аргумента из последующего списка и управляющие символы-константы.
Каждая спецификация
преобразования начинается со знака % и заканчивается некоторым символом, задающим
преобразования.
Символ преобразования связан с типом
переменных. приведем символы преобразования:
1)
d – значением
аргумента является десятичное целое число;
2)
o – значением
аргумента является восьмеричное целое число;
3)
x – значением аргумента
является шестнадцатеричное целое число;
4)
c – значением
аргумента является символ;
5)
s – значением
аргумента является строка символов;
6)
e – значением
аргумента является вещественное число в экспоненциальной форме;
7)
f – значением
аргумента является вещественное десятичное число с плавающей точкой;
8)
u – значением
аргумента является беззнаковое целое число;
9)
p – значением
аргумента является указатель (адрес).
Если после знака %
записан не символ, то он выводится на экран. Функция printf использует
управляющую строку, чтобы определить, сколько всего аргументов и каковы их
типы.
Например, в результате
работы программы получены переменная i, имеющая значение 100, и переменная j,
имеющая значение 25. Обе переменные целого типа. Для вывода этих переменных на
экран в виде
i=100 j=25
необходимо применить
функцию
printf(“i=%d j=%d”,i,j);
Как было описано выше, в
кавычках задается формат вывода. перед знаком % записываются символы, которые
будут непосредственно выданы на экран. После знака % применена спецификация d,
т.к. переменные i и j имеют целый тип. Сами i и j приведены через запятую в
списке аргументов. Если результат должен быть представлен в виде
i=100; j=25
необходимо применить
функцию
printf(“i=%d; j=%d, i,
j);
Если после знака % стоит
цифра, то она задает поле, в котором будет выполнен вывод числа. Приведем
несколько функций printf, которые будут обеспечивать вывод одной и той же
переменной S целого типа, имеющей значение 336.
Функция printf(“%2d”, S);
выдает на экран:
336
В этом примере ширина поля ( она
равна двум) меньше, чем число цифр в числе 336, поэтому поле автоматически
расширяется до необходимого размера.
Функция printf(“%6d”, S);
выдаст на экран:
_ _ _336
(6 позиций)
То есть, в результате
работы функции число сдвинуто к правому краю поля, а лишние позиции перед
числом заполнены пробелами.
Функция printf(“%-6d”,
S);
выдаст на экран:
336_ _ _
(6 позиций)
Знак «минус» перед
спецификацией приводит к сдвигу числа к левому краю поля.
Рассмотрим вывод
вещественных чисел.
Если перед спецификацией
f ничего не указано, то выводится число с шестью знаками после запятой. при
печати числа с плавающей точкой перед спецификацией f тоже могут находиться
цифры.
Рассмотрим на конкретном
примере три возможные ситуации:
%6f – печать числа с плавающей
точкой в поле из шести позиций;
%.2f – печать числа с
плавающей точкой с двумя цифрами после десятичной точки;
%6.2f – печать числа с
плавающей точкой в поле из шести позиций и двумя цифрами после десятичной
точки.
Например, в результате
работы программы получены переменные вещественного типа а=3,687 и b=10,17.
Если для вывода значений
использована функция
printf(“%7f %8f”,a,b);
то результат будет
представлен в виде строки:
(7 поз.) (8 позиций)
Как видно из примера,
лишние позиции заполняются пробелами. Если для вывода значений использована
функция
printf(“%.2f %/2f”, a,
b);
то результатом будет
строка:
3.69 10.17,
из которой следует, что в
первом числе третья цифра после десятичной точки отброшена с округлением, т.к.
указан формат числа с двумя цифрами после десятичной точки.
Если для вывода значений
использована функция
printf(“%7.2f e”,a,b);
то будет выведена строка:
_ _ _ 3.681.010000е+01
(7 позиций)
Поскольку для вывода
значения переменной b применена спецификация е, то результат выдан в экспоненциальной
форме. Следует отметить, что , если ширина поля меньше, чем число цифр в числе,
то поле автоматически расширяется до необходимого размера.
Как было отмечено выше, в
управляющей строке могут содержаться управляющие символьные константы. Среди
управляющих символьных констант наиболее часто используются следующие:
1)
\a – для
кратковременной подачи звукового сигнала;
2)
\b – для перевода
курсора влево на одну позицию;
3)
\n – для перехода
на новую строку;
4)
\r – для перевода
курсора в начало текущей строки;
5)
\t – для
горизонтальной табуляции;
6)
\v – для
вертикальной табуляции.
Предположим, в результате
работы программы переменная i получила значение 50. В результате записи инструкции
вызова функции
printf(“\t ЭВМ\n%d\n”,i);
сначала выполнится
горизонтальная табуляция (\t), т.е. курсор сместится от края экрана на 8
позиций, затем на экран будет выведено слово “ЭВМ”, после этого курсор
переместится в начало следующей строки (\n), затем будет выведено целое
значение i по формату d, и окончательно курсор перейдет в начало новой строки
(\n). Таким образом, результат работы этой функции на экране будет иметь вид:
_ _ _ _ _ _ _ _ ЭВМ
50
1.3.2 Ввод
данных
Для форматного ввода
данных используется функция
scanf(«управляющая строка»,
аргумент1, аргумент2,...);
Если в качестве аргумента
используется переменная, то перед ее именем записывается символ &.
Управляющая строка
содержит спецификации преобразования и используется для установления количества
и типов аргументов. спецификации для определения типов аргументов такие же, как
и для функции printf. Перед символами d,o,x,f может стоять буква l. В первых
трех случаях соответствующие переменные должны иметь тип long, а в последнем
double.
Рассмотрим пример.
Требуется ввести значения для переменных i (целого типа) и a (вещественного типа).
Эту задачу выполнит функция:
scanf(“%d%f”,&i,&a);
В управляющей строке
спецификации трех типов могут быть отделены друг от друга различными знаками, в
том числе и пробелом. Следовательно, при занесении значений переменных
необходимо использовать указанный разделитель. Если спецификации не отделены
одна от другой никакими значениями, то значения переменных заносятся через
пробел.
В языке СИ есть две очень
удобные функции puts и gets, позволяющие вводить и выводить строку символов. Пример
их использования показан ниже:
#include<stdio.h>
main()
{
char q[40]; /*объявление
строки символов*/
puts(“Введите строку
символов”);
gets(q); /*ввод строки
символов*/
puts(q); /*вывод строки
символов*/
}
В результате работы
программы вначале на экране появится текст:
Введите строку
символов,
после чего следует ввести
какую-либо строку символов. Эта информация при помощи оператора gets будет
присвоена элементам символьного массива q. Оператор puts выведет строку символов.
1.4
Операторы
и выражения
Выражения широко
используются в программах на языке СИ и представляют собой формулы для
вычисления переменных. Они состоят из операндов (переменные, константы и др.),
соединенных знаками операций (сложение, вычитание, умножение и др.). Порядок
выполнения при вычислении значения выражения определяется их приоритетами и
может регулироваться с помощью круглых скобок. Наиболее часто арифметические
выражения используются в операторе присваивания. Этот оператор заменяет
значение переменной в левой части оператора на значение выражения, стоящего в
правой части, и имеет следующую форму:
переменная = выражение;
В языке СИ может быть
использован модификатор const, запрещающий какие бы то ни было переопределения
константы: ее уменьшение, увеличение и т.п. Модификатор const, используемый
отдельно, эквивалентен const int. Приведем примеры:
const float a=3.5;
const j=47;
В таблице 1 приведены
арифметические операции, используемые в языке СИ.
Таблица 1
Знак операции
|
Выполнение
действия
|
+
|
Сложение
|
–
|
Вычитание
|
*
|
Умножение
|
/
|
Деление
|
%
|
Деление по
модулю
|
Результатом деления по
модулю является остаток от деления. Например, если b=5, c=2, то при выполнении
операции
а=b%c,
переменная а получит
значение 1.
Широкое распространение
находят также выражения с еще одной нетрадиционной терпарной операцией ?: . В
выражении
у=х?а:b,
у=а, если х не равно
нулю, и у=b, если х равно нулю. Следующее выражение
позволяет присвоить
переменной y значение большей переменной (а или b), т.е. y=max(a,b).
В таблице 2 приведены
некоторые функции, применяемые при программировании на СИ.
Таблица 2
Математическая
запись
|
Запись на
языке СИ
|
| X |
|
int abs(int X)
|
| X |
|
float
fabs(float X)
|
arccos X
|
double
acos(double X)
|
arcsin X
|
double
asin(double X)
|
arctg X
|
double
atan(double X)
|
cos X
|
double
cos(double X)
|
sin X
|
double
sin(double X)
|
tg X
|
double
tan(double X)
|
eX
|
double
exp(double X)
|
ln X
|
double
log(double X)
|
log X
|
double
log10(double X)
|
√X
|
double
sqrt(double X)
|
XY
|
double
pow(double X, double Y)
|
Перед аргументом и
функцией указан допустимый тип (при программировании эта запись типа опускается).
В программах на языке СИ
важная роль отводится комментариям, которые повышают наглядность и удобство
чтения программ. Они могут быть записаны в любом месте программы и обрамляются
символами /* и */.
Рассмотрим пример
программы на языке СИ.
Требуется вычислить:
Для работы с математическими
функциями необходимо перед функцией main поместить строку:
#include <math.h>
Программа на СИ имеет
вид:
#include <stdio.h>
#include <math.h>
main()
{
float z,f,k; /*объявление
вещественных переменных z,f,k*/
double y,a,b,c,d,x;
/*объявление переменных y,a,b,c,d,x переменными двойной точности*/
scanf(“%f %f %f %lf %lf”,
&z, &f, &k, &d, &x); /* ввод с клавиатуры переменных
z,f,k,d,x*/
a=log(x)+(z+f)/k;
b=sin(x)+tan(x);
c=pow(d+exp(x),1./5);
y=(a+b)/c;
printf(“%lf %lf %ef %lf”,
a, b, c, y); /*вывод на экран значений переменных a,b,c,y*/
}
Следует обратить внимание
на то, что при вычислении переменной с, выражение, стоящее в правой части,
представлено как 5√(d+ex), поэтому применена
функция pow. Еще одно замечание. Следует осторожно подходить к делению целых
чисел. Если оба операнда целые, то результат тоже будет целым, а дробная часть
отбрасывается. таким образом, при выполнении операции 1/5, результат будет
равен нулю. Для того чтобы сохранить дробную часть, хотя бы один из операндов
должен быть вещественным. Это условие выполнено при вычислении 1./5 .
Из таблицы 3 взять задание по
варианту и написать программу для вычисления выражения на языке СИ.
Таблица 3
№ варианта
|
Задание
|
Исходные данные
|
1
|
|
x = 4,5
y = 8,5
i = 3
j = 6
|
2
|
|
n = 10,2
x = 4,3
i = 5
m = 2
|
3
|
|
m = 8,1
x = 10
y = 4
|
4
|
|
t = 4,7
z = 0,8
p = 6,2
k = – 4
m = 6
|
5
|
|
t = 4,1
p = 3,2
w = 8,7
j = 3
i = 7
|
6
|
|
x = 5,7
y = 1,9
k = 8
m = 2
|
7
|
|
m = 5,6
n = 9,4
i = 4
j = 9
|
8
|
|
q = 1,7
p = 2,3
i = 9
j = 4
|
9
|
|
n = 2,6
m = 3,7
p = 6
k = 2
|
10
|
|
t = 1,1
p = 2,4
k = 4
i = 5
|
11
|
|
x = 3,7
y = 2,1
i = 3
j = 4
|
12
|
|
t = 1,5
p = 4,8
i = 2
m = 6
|
13
|
|
z = 2,4
m = 5,8
n = 4
j = 5
|
14
|
|
x = 9,5
y = 3,6
j = 2
i = 5
|
15
d =
|
|
x = 6,4
y = 1,7
k = 5
m = 7
|
Литература
1. Подбельский В.В. Язык Cu ++: Учебное
пособие. - М.: Финансы и статистика,1995, - 560 с.
2. Страуструп Б. Язык программирования
Сг ++. - М.: Радио и связь, 1991. - 352 стр.
3. Собоцинский В.В. Практический курс
Turbo Cu ++. Основы объктно- ориентированного программирования. - М.: Свет,
1993. - 236 с.
4. Романов В.Ю. Программирование на
языке Cu ++. Практический подход. - М.: Компьтер, 1993. - 160 с.
5. Уинер Р. Язык турбо Cu . - М.: Мир,
1991. - 384 с.
6. Юлин В.А., Булатова И.Р. Приглашение
к Cu. - Мн.: Высш. Шк., 1990,- 224 с.
7. Котлинская Г.П., Галиновский О.И.
Программирование на языке Cu. -Мн.: Высш. Шк., 1991. - 156 с.
Похожие работы на - Операторы ввода и вывода в языке программирования Си++
| |