Ввод/вывод информации

 

Основные функции форматированного ввода/вывода

int scanf (const char* format. ... ) // ввод

int printf(const char* format. ... ) // вывод

Для их использования необходимо подключить библиотеку <stdio.h>

# include <stdio.h>

 

Синтаксис функции printf

printf(«Управляющая строка», список параметров)

Функция printf возвращает число напечатанных символов

Список параметров перечисляется через запятую.

Управляющая строка состоит из:

- обычные символы, которые выводятся на экран

- управляющие символы

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

%[флаг][ширина поля][. точность ][h/l/L]тип

Тип может принимать одно из следующих значений

Код Формат
c d или i u o x (X) f е илиЕ g или G s p %   Символ Знаковое десятичное целое число Беззнаковое десятичное число Беззнаковое восьмиричное число Беззнаковое шестнадцатиричное число (х-строчные буквы,Х-прописные буквы) Значение с плавающей запятой в форме –цел.часть . дроб.часть Значение с плавающей запятой в форме –цел.часть . дроб.частье степень То же что и %е только не выводятся последние нули Строка символов Вывод указателя Выводит знак %

Флаг:

- Выведенное значение прижимается к левому краю( по умочанию вправо) %-20s
+ Перед числом обязательно выводитяс знак + или- %+d
Пробел Если выводится неотрц. число , то перед ним ставится пробел % 6.2f
заполнение пустых позиций нулями %010d, %08.3f
# Вывод первого 0 для восьмеричных, 0x или 0X для 16-ых. Для всех форм с плавающей точкой гарантируется вывод символа десятичной точки. Для форм %g %G предотвращает удаление заключительных нулей. %#o, %#8.0f, %+#10.3E

 

Модификатор формата ширина представляется целым положительным числом и служит для указания минимального количества выводимых символов. Если количество символов выводимого значения меньше width, поле будет дополняться символами в соответствии с указанными флагами. Заметим, что значение width никогда не ограничивает выводимое значение.

Модификатор формата .точность используется для чисел с плавающей точкой. Точность представляется неотрицательным целым числом, следующим за точкой и задает либо количество символов, которое должно быть выведено, либо количество цифр в дробной части числа, либо количество значащих цифр. Так "%5.2f" определяет вывод вещественного числа в поле шириной пять символов с двумя цифрами после десятичной точки.

Модификаторы, представленные в описании строки формата перечнем {h | l | L}, используются для спецификации размера аргумента:

h short int(d, i, o, x, X) и short unsigned int (u)

l long int(d, i, o, x, X) и long unsigned int (u)

L long double (e,E,f,g,G)

Функция форматированного ввода информации scanf.

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

- если вы хотите ввести значение для одного из основных типов переменной, перед именем переменной ставьте символ &;

- если читается строка в символьный массив, знак & не ставится.

Следует заметить, что информация, принимаемая функцией scanf, поступает в виде потока символов, набираемых на клавиатуре. Среди них могут быть и служебные символы, такие как табуляция, пробел, символ перевода строки и т. п. Эти символы позволяют разделить поток ввода на отдельные поля. Это соответствует последовательным применениям спецификаций преобразований к последовательным полям, с пропуском служебных символов между ними. Единственное исключение составляет спецификатор преобразования %c, который читает каждый следующий символ, даже если этот символ является служебным.

Спецификаторы формата для функции scanf представляются следующей таблицей

type Результат - Интерпретирует ввод как
%c символ
%d десятичное целое число со знаком
%e, %f, %g число с плавающей точкой
%E,%G число с плавающей точкой
%i десятичное целое число со знаком
%o восьмеричное целое число без знака
%p указатель (адрес памяти)
%s строку; ввод начинается с 1-го не служебного символа и включает все символы до следующего служебного
%u десятичное целое число без знака
%x, %X шестнадцатеричное целое число без знака

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

Модификатор Значение
* Подавление присваивания - пропуск принимаемого значения
Цифры Максимальная ширина поля; ввод закончиться либо при обнаружении первого служебного символа, либо когда достигнута максимальная ширина поля
h, l, L %hd и %hi указывают, что значение поступает в тип short. %ho, %hx и %hu - в тип unsigned short. %ld и %li - в тип long. %lo, %lx и %lu - в тип unsigned long. %le, %lf и %lg в тип double. Использование L вместо l - long double. Отсутствие предполагает: d, i, o, x - в тип int, e, f, g - в тип float

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

scanf("%d, %d", &n, &m);

При вводе следует набирать например, 567,212.

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

567,212 567 , 212 567, 212

Функция возвращает число успешно прочитанных элементов. Если она не прочла никаких элементов - возвращается значение 0. Она возвращает EOF ("End of file") - специальную константу, значение которой определено в заголовочном файле stdio.h, в случае, когда поток заканчивается раньше, чем определены все специфицированные в вызове функции переменные.

А вот как выглядит та же программа с использованием библиотеки классов C++

#include <iostream.h>

int main()

{

int i;

cout << "Введите целое число\n”;

cin>> i;

cout <<"Вы ввели число " << i<< " \nспасибо!";

return 0; }

Заголовочный файл <iostream h> содержит описание набора классов для управления вводом/выводом В нем определены стандартные объекты-потоки cm для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток <<и чтения из потока >>.

В дальнейшем изложении будут использоваться оба способа, но в одной программе смешивать их не рекомендуется

Тема 2. Язык программирования С/С++. Выражения и операции

Понятие выражения, как и понятие переменной, заимствовано из алгебры. Выражение - это группа символов, представляющее некоторое значение. Оно может содержать числа, символы для математических действий, такие как сложение или деление, и даже имена переменных. Например, выражение

(4 х 5) - 4 представляет значение 16.

Почленная интерпретация этого выражения - "взять число 4, умножить его на 5, из результата вычесть 4".

В языке С существует три типа выражений:

- математическое выражение, дающее численный результат;

- текстовое выражение, дающее строку символов;

- логическое выражение, дающее в результате 1 или 0 (интерпретируемые как "истина" или "ложь".

В зависимости от типа выражения в языке С используются те или иные операции.

Арность операции - это количество задействованных в операции операндов. Например

2 + 3 - бинарная (двуместная) операция, -4 - унарная (одноместная) операция.

Унарные операции

& операция получения адреса операнда

&c_Symb - адрес размещения в памяти значения переменной c_Symb.

* операция обращения по адресу (называют еще операцией разыменования (доступ по адресу к значению того объекта, на который указывает операнд).

- унарный минус (изменяет знак арифметического операнда).

+ унарный плюс (введен для симметрии с унарным минусом).

~ побитовое отрицание 0001 1100 à 1110 0011

! логическое отрицание 0 à 1, не 0 à 0.

++ увеличение на единицу (инкремент или автоувеличение), существует две формы:

префиксная - увеличение до использования

...

int result, arg=2;

result = ++arg;

после выполнения result примет значение 3.

постфиксная - увеличение после использования

...

int result, arg=2;

result = arg++;

после выполнения result примет значение 2.

-- уменьшение на единицу (декремент или автоуменьшение), также префиксная и постфиксная формы.

sizeof операция вычисления размера операнда (в байтах)

sizeof(char) = 1

sizeof(long) = 4

short Count; --- sizeof(Count) = 2

Бинарные операции

Делятся на следующие группы:

· аддитивные и мультипликативные

· сдвигов

· поразрядные

· операции отношений

· логические

· выбора компонента сложного объекта

· операция "запятая"

· скобки в качестве операций

Аддитивные и мультипликативные.

+ бинарный плюс - сложение арифметических операндов или сложение указателя с целым
- бинарный минус - вычитание арифметических операндов или вычитание указателей
* умножение операндов арифметического типа
/ деление операндов арифметического типа. При целочисленных операндах абсолютное значение результата округляется до целого. 20/3 = 6 и (-20)/3 = -6
% получение остатка от деления целочисленных операндов (деление по модулю). Знак остатка равен знаку делимого. Например: 14%3 = 2 и (-14)%3 = -2

Один нюанс, который вы должны запомнить.

float res;

res = 5/4;

Результат: res = 1.

Для того, чтобы посчитать "правильно", этот фрагмент программы должен быть

float res;

res = 5./4.;

Результат: res = 1.25.

Операции сдвига. Эти операции определены только для целочисленных операндов.

<< сдвиг влево битового представления левого операнда на число позиций равное значению правого операнда.

short res, Value = 12;

res = Value << 5;

12=0000 0000 0000 1100 - после операции 0000 0001 1000 0000 =0x180=256+128 = 384

12 * 25 = 12 * 32 = 384

>> сдвиг вправо битового представления левого операнда на число позиций равное значению правого операнда.

short res, Value = 1120;

res = Value >> 5;

1120 = 1024 + 96 = 1024 + 64 + 32 = 210 + 26 + 25 = 0000 0100 0110 0000

- после операции 0000 0000 0010 0011 =0x23=32+3 = 35

1120 / 25 = 1120 / 32 = 35

Поразрядные операции.

Выполняются над битовыми представлениями значений целочисленных операндов

& поразрядная конъюнкция (И)
| поразрядная дизъюнкция (ИЛИ)
^ поразрядное исключающее ИЛИ

Операция конъюнкция 0&0 = 0 1&0 = 0 0&1 = 0 1&1 = 1

Операция дизъюнкция 0&0 = 0 1&0 = 1 0&1 = 1 1&1 = 1

Операция поразрядное исключающее ИЛИ 0&0 = 0 1&0 = 1 0&1 = 1 1&1 = 0

Пример.

0000 0001 1100 1110

0110 0111 0110 1010

--------------------------

0000 0001 0100 1010 (&)

0110 0111 1110 1110 (|)

0110 0110 1010 0100 (^)

Операции отношений (сравнения).

< меньше, чем
> больше, чем
<= меньше или равно, чем
>= больше или равно, чем
== равно
!= не равно

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

Результат операции целочисленный: 0 (ложь) или 1 (истина).

Логические операции.

&& конъюнкция (И) арифметических операндов или отношений

|| дизъюнкция (ИЛИ) арифметических операндов или отношений

Результат 0 (ложь) или 1 (истина).

Примеры отношений и логических операций:

4 < 9 → 1

3 == 5 → 0

3 != 5 || 3==5 → 1

(3+4>5) && (3+5>4) && (4+5>3) → 1

Операции присваивания.

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

Существует одна простая операция присваивания и ряд составных.

Простое присваивание -

А = B*2; - присвоить переменной А результат вычисления выражения B*2.

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

X = XÅY; - тоже в записи составного присваивания X Å=Y;

В качестве символа Å могут быть использованы знаки операций: + - * / % << >> & | ^

Примеры. f += 5; d -=f*2; con ^=0xff71;

Операции выбора компонентов структурированного объекта.

Существует две операции (. и ->) которые мы будем рассматривать позже, вместе с определением самих структурированных объектов.

Запятая в качестве операции.

Несколько выражений, разделенных запятыми, вычисляются последовательно слева направо. В качестве результата сохраняются тип и значение самого правого выражения.

int x,y; y = (x=3, 3*x); (после операции х=3, y=9).

Скобки в качестве операций.

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

Круглые скобки обязательны в обращении к функции:

<имя функции> ( <список аргументов> )

где операндами служат <имя функции> и <список аргументов>.

Квадратные скобки используются в выражении

<имя массива> [<индекс>]

здесь операнды <имя массива> и <индекс>

Условная операция (?:). Эта операция тернарная, то есть имеет три операнда. Ее формат:

операнд_1 ? операнд_2 : операнд_3

Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный нулю — как true). Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение второго операнда, иначе — третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться. Условная операция является сокращенной формой условного оператора i f (он рассмотрен на с. 40).

#include <stdio h>

int main(){

int a = 11, b = 4, max;

max = (b > a)? b :a;

printf( "Наибольшее число. %d", max);

return 0; }

Результат работы программы:

Наибольшее число 11

Другой пример применения условной операции. Требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает п, а иначе принимала значение 1:

i = (i < n) ? i + 1: 1,

Приоритет операций. Порядок вычисления выражений.

Сейчас мы рассмотрели весь набор операций языка С. И остался не решенным такой вопрос: в какой последовательности применяются записанные в выражении операции?

Что будет результатом вычисления 4 + 3 * 5 ? 35 или 19?

Очевидно, предполагая определение языка С как "удобного" мы вправе ожидать получения 19. Однако откуда это следует?

Да, действительно результат будет 19 и следует это из системы приоритетов операций языка С. Каждой операции языка приписан определенный приоритет выполнения (ранг) и операции выполняются в порядке увеличения ранга: в первую очередь операции с приоритетом 1, потом 2 и т.д.

Если операций одного ранга в выражении несколько, то они выполняются в соответствии с правилом ассоцмативности либо слева направо (à), либо справа налево (ß). Если какой-либо знак операции появляется в таблице дважды (например *), то его первое вхождение (меньший ранг) соответствует унарной операции.

Составим таблицу приоритетов операций.

Ранг Операции
( ) [ ] -> .
! ~ + - ++ -- & * (тип) sizeof
* / % (мультипликативные бинарные)
+ - (аддитивные бинарные)
<< >> (операции поразрядного сдвига)
< <= >= > (отношения)
== != (отношения)
& ( поразрядная конъюнкция "И")
^ ( поразрядное исключающее "ИЛИ")
| ( поразрядная дизъюнкция "ИЛИ")
&& ( логическая операция "И")
|| ( логическая операция "ИЛИ")
?: (операция условной трансляции)
= += -= *= /= %= &= |= ^= <<= >>= (присвоения)
, (операция "запятая")

Для работы с математическими выражениями используется встроенные функции, которые находятся в стандартной библиотеке (math.h) и приведены в таблице.

Функция Выполняемые действия
Abs(n) Возвращаемый модуль целого числа
fabs (x) Возвр. модуль вещественного числа
acos(x) asin(x) atan (x) atan 2(x) Arcos x Arsin x Arctg x Возвращаем arctg x/y
cos(x) sin(x) tan(x) exp(x) log(x) log10(x) pow(x,y) sqrt(x) floor() ceil fmod(x,y) modf   Cos x Sin x Tag x Степень числа е Натуральный логарифм Логарифм по основанию 10 Возводит число в степень Квадратный корень из числа Округляет вниз Округляет вверх Остаток от деления х на у разбивает число на целую и дробную часть

 








Дата добавления: 2017-01-13; просмотров: 532;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.043 сек.