Операторы ввода и вывода в языке программирования Си++
Операторы ввода и вывода в языке программирования Си++
1 Лабораторная №1 “Операторы ввода и вывода в языке программирования Си++” 1. Теоретические сведения 1.1 Структура программы Цель работы: изучить операторы ввода и вывода, форматы, используемые в этих операторах. Оформить законченную программу с применением этих операторов. В языке СИ любая программа состоит из одной или более функций, задающих действия, которые нужно выполнить. Выполнение любой программы начинается с функции main. Далее идет текст программы, заключенный в фигурные скобки. Таким образом, структура программы имеет вид:main ( ){Тело программы}В самом простом случае функция main не имеет аргументов, поэтому в скобках ничего не содержится. Для работы программы, обеспечивающей ввод и вывод информации, перед функцией main необходимо поместить строку: #include <stdio.h> 1.2 Алфавит языка и типы данных Алфавит языка включает латинские прописные и строчные буквы, цифры и специальные знаки. К последним относятся: . (точка), , (запятая), ` (апостроф), : (двоеточие) и др. Важным понятием языка является идентификатор, который используется в качестве имени объекта, например, переменной, функции и т.п. Идентификатор может содержать до 32 символов и состоит из букв и цифр, но начинается обязательно с буквы. Строчные буквы отличаются от прописных, поэтому идентификаторы SIGMA и sigma считаются разными. В языке СИ существует несколько типов данных. Каждый тип данных определяется одним из следующих ключевых слов: int (целый) - задает значения, к которым относятся все целые числа. Диапазон возможных целых значений лежит в пределах от -32768 до 32767, переменная типа int занимает 16 бит; short (короткий целый) - соответствующие объекты не могут быть больше, чем int, переменные этого типа занимают 16 бит; long (длинный целый) - соответствующие объекты не могут быть меньше, чем int. Переменная типа long занимает 32 бита и позволяет представить целые числа от -2147483648 до 2147483647; char (символьный) - задает значения, которые представляют различные символы; unsigned (беззнаковый) - в языке СИ можно объявлять некоторые типы (char, short, int, long) беззнаковыми с помощью модификатора unsigned (например, unsigned short). Это значит, что соответствующие переменные не будут иметь отрицательных значений. В результате они могут принимать большие положительные значения, чем переменные знаковых типов. В случае типа int объявления вида «unsigned int a;» можно записать «unsigned a;»; float (вещественный) - задает значения, к которым относятся вещественные числа, имеющие дробную часть, отделяемую точкой. Вещественные числа могут быть записаны также в экспоненциальной форме. Например, -1.58е+2 (что равно -1,58·102 ). В языке СИ переменная типа float занимает 32 бита. Она может принимать значения в диапазоне от +3.4е-38 до +3.4е+38; double (двойная точность) - определяет вещественные переменные, занимающие в два раза больше места, чем переменная типа float. Переменная типа double занимает 64 бита. Она может принимать значения в диапазоне от +1.7е-308 до +1.7е+308. 1.3 Ввод и вывод информации 1.3.1 Форматный вывод Вначале рассмотрим функцию, определяющую форматный вывод: printf("управляющая строка", аргумент1, аргумент2, ... ); Управляющая строка содержит объекты трех типов: обычные символы, которые просто выводятся на экран дисплея, спецификации преобразования, каждая из которых вызывает вывод на экран значения очередного аргумента из последующего списка и управляющие символы-константы. Каждая спецификация преобразования начинается со знака % и заканчивается некоторым символом, задающим преобразования. Символ преобразования связан с типом переменных. приведем символы преобразования: d - значением аргумента является десятичное целое число; o - значением аргумента является восьмеричное целое число; x - значением аргумента является шестнадцатеричное целое число; c - значением аргумента является символ; s - значением аргумента является строка символов; e - значением аргумента является вещественное число в экспоненциальной форме; f - значением аргумента является вещественное десятичное число с плавающей точкой; u - значением аргумента является беззнаковое целое число; 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); то результат будет представлен в виде строки: _ _ 3.687 _ _ _ _10.17 (7 поз.) (8 позиций) Как видно из примера, лишние позиции заполняются пробелами. Если для вывода значений использована функция printf(“%.2f %/2f”, a, b); то результатом будет строка: 3.69 10.17, из которой следует, что в первом числе третья цифра после десятичной точки отброшена с округлением, т.к. указан формат числа с двумя цифрами после десятичной точки. Если для вывода значений использована функция printf(“%7.2f e”,a,b); то будет выведена строка: _ _ _ 3.681.010000е+01 (7 позиций) Поскольку для вывода значения переменной b применена спецификация е, то результат выдан в экспоненциальной форме. Следует отметить, что , если ширина поля меньше, чем число цифр в числе, то поле автоматически расширяется до необходимого размера. Как было отмечено выше, в управляющей строке могут содержаться управляющие символьные константы. Среди управляющих символьных констант наиболее часто используются следующие: \a - для кратковременной подачи звукового сигнала; \b - для перевода курсора влево на одну позицию; \n - для перехода на новую строку; \r - для перевода курсора в начало текущей строки; \t - для горизонтальной табуляции; \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, если х равно нулю. Следующее выражение у=(а>b)?a: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) | | vX | 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*/ } Следует обратить внимание на то, что при вычислении переменной с, выражение, стоящее в правой части, представлено как 5v(d+ex), поэтому применена функция pow. Еще одно замечание. Следует осторожно подходить к делению целых чисел. Если оба операнда целые, то результат тоже будет целым, а дробная часть отбрасывается. таким образом, при выполнении операции 1/5, результат будет равен нулю. Для того чтобы сохранить дробную часть, хотя бы один из операндов должен быть вещественным. Это условие выполнено при вычислении 1./5 . Из таблицы 3 взять задание по варианту и написать программу для вычисления выражения на языке СИ. Таблица 3 |
№ варианта | Задание | Исходные данные | | | | x = 4,5 y = 8,5 i = 3 j = 6 | | | | n = 10,2 x = 4,3 i = 5 m = 2 | | | | m = 8,1 w = 4,2 x = 10 y = 4 | | | | t = 4,7 z = 0,8 p = 6,2 k = - 4 m = 6 | | | | t = 4,1 p = 3,2 w = 8,7 j = 3 i = 7 | | | | x = 5,7 y = 1,9 k = 8 m = 2 | | | | m = 5,6 n = 9,4 i = 4 j = 9 | | | | q = 1,7 p = 2,3 i = 9 j = 4 | | | | n = 2,6 m = 3,7 p = 6 k = 2 | | | | t = 1,1 p = 2,4 k = 4 i = 5 | | | | x = 3,7 y = 2,1 i = 3 j = 4 | | | | t = 1,5 p = 4,8 i = 2 m = 6 | | | | z = 2,4 m = 5,8 n = 4 j = 5 | | | | x = 9,5 y = 3,6 j = 2 i = 5 | | | | x = 6,4 y = 1,7 k = 5 m = 7 | | |
Литература Подбельский В.В. Язык Cu ++: Учебное пособие. - М.: Финансы и статистика,1995, - 560 с. Страуструп Б. Язык программирования Сг ++. - М.: Радио и связь, 1991. - 352 стр. Собоцинский В.В. Практический курс Turbo Cu ++. Основы объктно- ориентированного программирования. - М.: Свет, 1993. - 236 с. Романов В.Ю. Программирование на языке Cu ++. Практический подход. - М.: Компьтер, 1993. - 160 с. Уинер Р. Язык турбо Cu . - М.: Мир, 1991. - 384 с. Юлин В.А., Булатова И.Р. Приглашение к Cu. - Мн.: Высш. Шк., 1990,- 224 с. Котлинская Г.П., Галиновский О.И. Программирование на языке Cu. -Мн.: Высш. Шк., 1991. - 156 с.
|