Серым выделены операции, которые нам в этом семестре не понядобятся. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Серым выделены операции, которые нам в этом семестре не понядобятся.



Лекция 3

Приоритеты всех операций, определенных в языке С:

Направление выполнения:

→ слева направо

ß справа налево

Серым выделены операции, которые нам в этом семестре не понядобятся.

Ранг (приоритет) Операции Ассоциативность (направление)   Название и использование
1. ()    [] . (точка) -> →   вызов функц. и изм. приоритета выч. адр. эл. массива. обр. к эл. стр.ы обр. по средствам указателя  
2. (унарные) ! - + ~ ++ -- & * (<тип перем.>)  sizeof ß инверсия унарный – унарный + тильда (поразр.доп) инкримент декримент взятие адреса косвенная адресация преобразование типа выч. дл. в байтах
3. * / % →   (мультипликативные бинарные: умножение, деление, остаток от деления)
4. +   (аддитивные бинарные: сложение и вычитание)
5. << >> поразрядный сдвиг вправо и влево
6. < > <= >= операции отношения
7. ==!= оп. отношения: равно и неравно
8. & (битоваяя конъюнкция «И»)
9. ^ (битовая исключающее «ИЛИ»)
10. | (поразрядная дизъюнкция «ИЛИ»)
11. && (лог. умнож. конъюнкция «И»)
12. || (лог. сложение дизъюнкция «ИЛИ»)
13. ?: ß условная операция, тернарная
14. = *= /= %= += -= &= ^= |= <<= >>= ß   операции присваивания побитовые оп.присваивания
15. , операция «запятая» объединение

Знак операции () – используется при вызове функции и для изменения приоритета.

Знак операции [] – используется при обращении к элементу массива.

Операции -> и. используются для обращения к элементам структур.

Операция Sizeof используется для вычисления размера объекта.

Операция * - операция косвенная адресация (разыменование), обращение к объекту по его адресу;

& - получение адреса объекта.

Операция запятая используется, например, в операторе for при перечислении. ~ тильда – операция битовая инверсия.

единиц.

Организация данных

Данные определяются в программе с помощью типов. Данные можно подразделить на базовые, модифицированные и производные типы.

Данныев программе  могут быть представлены в виде переменных и констант.

Для представления данных используется понятие идентификатор (имя). Это последовательность букв, цифр и символа подчеркивания, которая начинается не с цифры. Прописные и строчные буквы различаются. Максимальная длина идентификатора зависит от версии.

Константы – это объекты программы, которые не могут изменять свое значение в процессе ее выполнения. Различают явные (буквальные, неименованные) и символические (именованные ) константы.

Буквальные константы не имеют адресов и могут быть представлены в виде целых и вещественных чисел, символов или строк.

 В языке Си константы могут быть одного из 4 базовых типов: целые, вещественные, символьные и строковые.

Целые константы могут быть

 заданы в десятичной (31), восьмеричной (037) и шестнадцатеричной системе счисления (0X1F или (0x1f)).

Например, десятичное число 31, в 8-ой СС запишется 037, в 16-ой СС – 0 X 1 F (0 x 1 f)

Вещественные константы могут записываться в программе в естественной и в экспоненциальной форме.

Например, неименованные вещественные: –5.1, -4.8, –0.1e4, -0.00001.

Символьная константа это один символ таблицы ASCII (значением символьной константы является числовое значение кода символа в этом наборе).

’a’, ‘8’ – символьные константы;

Среди символьных констант различают управляющие (‘\ t ’ горизонтальная табуляция, ‘\ n ’ переход к новой строке ). Они транслируются как один символ.

Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char.

Двухсимвольные константы занимают два байта и имеют тип int

Строковые константы (строковый литерал) это последовательность любых символов, заключенных в двойные кавычки.

Например, ” Привет” – строковая константа.

Форматная строка в функциях ввода/ вывода является примером строковой константы.

#include <stdio.h>

int main(void)

{

printf("\n\tПростой тест");

return 0;

}

Символические ( именованные) константы

В языке СИ символические (именованные) константы определяются в директиве препроцессора # define.

Тип константы определяется ее значением. Символическое имя может использоваться в любом месте программы, где требуется значение этой константы. Перед компиляцией программы препроцессор заменяет все имена символических констант их значениями. Имена символических констант принято записывать прописными буквами, а имена переменныхстрочными. Между именем константы и ее значением должен быть пробел.

# define <имя> <значение>

#define PI 3.14159, #define N 10, #define S ’a’, #define ST ”строка”

Одна из функций препроцессора – макроподстановка (в тексте программы  будет произведена замена символического имени на соответствующую строку или фрагмент).

Кроме того, константы могут быть заданы квалификатором

const int k =10;

Переменная это объект программы, обладающий именем (идентификатором), типом и значением, которое может изменяться в процессе выполнения программы.

Или, что для Си более характерно

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

Тип определяет:

· Внутреннее представление данных в памяти компьютера.

· Множество значений, которое может принимать переменная.

· Операции, которые допустимы над данными этого типа.

· Размер ячейки памяти.

Все переменные до их использования должны быть объявлены.

Объявление типов данных

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

<имя типа> < имя 1>, < имя 2>, …, < имя n >;

Как уже упоминалось, в языке Си существует 4 базовых типа данных: int (целое со знаком), char (трактуется как целое однобайтовое целоечисло со знаком), double (вещественное число с двойной точностью 8 байт), float (вещественное число с одинарной точностью). Это спецификаторы типа. Размер типа зависит от конкретного компилятора. Базовые типы данных (кроме void) могут иметь различные   модификаторы, которые записываются перед идентификатором типа при объявлении типа (signed- со наком, unsigned – без знака, только положительные, long - длинное,  short - короткое ). Например, базовый тип int может быть модифицирован каждым из этих спецификаторов, например, short int – короткое целое 2 байта. Модификаторы типа позволяют изменить способ кодирования целого числа (изменить форму представления числа). Модификатором является и const.

Размеры типов для определенного компилятора можно посмотреть, используя операцию sizeof (тип). Максимальное и минимальное значения типа можно тоже посмотреть, используя символические константы (подключить для этого стандартный заголовочный файл < limits. h >): например, INT _ MAX, INT _ MIN, DBL _ MAX, DBL _ MIN

Размеры типов и их диапазоны приведены в таблицах.

Тип Длина в битах Диапазон от-128 до 127
char 8 от 128 до 127
unsigned char 8 от 0 до 255
signed char 8 от -128 до 127
int 32 от -2147483648 до 2147483647
unsigned int 32 от 0 до 4294967295
signed int 32 от -2147483648 до 2147483647
short int 16 от -32768 до 32767
unsigned short int 16 от 0 до 65535
signed short int 16 от -32768 до 32767
long int 32 от -2147483648 до 2147483647
unsigned long int 32 от 0 до 4294967295
signed long int 32 от -2147483648 до 2147483647
float 32 от 3.4e-38 до 3.4е+38
double 64 от 1.7е-308 до 1.7е+308
long double 80 от 3.4е-4932 до 1.1e+4932

 

При работе с вещественными числами отдается предпочтение типу double, т.к. у float большая погрешность.

Различные типы данных по-разному представляются в памяти. Посмотрим, как целые и вещественные числа представляются в памяти компьютера.

Представление целых чисел

Считается, что в форме с фиксированной точкой десятичная точка зафиксирована после младшего цифрового разряда, т.е. в числе нет дробной части. Целые числа могут занимать в компьютере 1 байт (полуслово), 2 байта (16 разрядов - слово), 4 байта (32 разряда –двойное слово) или 8 байтов (64 разряда – расширенное слово). Каждый из этих форматов может быть знаковым – для положительных и отрицательных чисел и беззнаковым для положительных.

Разные целочисленные типы отличаются разным диапазоном значений и бывают знаковыми (int, shot, long int) и без знаковыми (с модификатором unsigned)

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

Обратный и дополнительный коды служат для упрощения и удешевления арифметико-логического устройства (АЛУ), позволяя исключить операцию вычитания.

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

Системы счисления

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

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

десятичная СС использует 10 цифр: 0, 1, 2,… 9;

двоичная использует 2 цифры: 0, 1;

восьмеричная – 8 цифр: 0, 1, 2,… 7;

шестнадцатеричная – 16 цифр. Кроме привычных 10 цифр требуется еще 6 символов, в качестве которых используются латинские буквы: 0, 1… 9, A, B, C, D, E, F.

При работе с компьютером иногда наряду с двоичной используются также восьмеричная и шестнадцатеричная системы счисления. 8-ричная и 16-ричная системы используются для более короткой и удобной записи двоичных значений.

Представление целых чисел

Считается, что в форме с фиксированной точкой десятичная точка зафиксирована после младшего цифрового разряда, т.е. в числе нет дробной части. Целые числа могут занимать в компьютере 1 байт, 2 байта (16 разрядов), 4 байта (32 разряда) или 8 байт (64 разряда).

Разные целочисленные типы отличаются разным диапазоном значений и бывают знаковые (int, short int, long int) и беззнаковые (с модификатором unsigned).

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

Рассмотрим структуру разрядной сетки 2-байтового представления (16 разрядов):

 

Знак

1 000000001111101

зн

Число в двоичном представлении

1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1

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

11110=11011112

В 8 байтовой ячейке: 0 1101111

Число -111 будет представлено:

Прямой          1 1101111

Обратный     1 0010000

                                                +1

Доп-ый       1 0010001

При 2-байтовой кодировке, когда под значащую часть числа отводится 15 разрядов, максимально возможное целое число, которое может поместиться в отведенную ячейку, составляет 215 - 1 = 32767. Число с большим значением не поместится в такую ячейку. В таком случае говорят о переполнении. Переполнение разрядной сетки - это ситуация, когда число, которое требуется сохранить, не умещается в отведенном количестве разрядов памяти вычислительного устройства. Последствия такой ситуации могут быть разными в зависимости от программы, в которой она случилась: от прерывания программы с выводом сообщения об ошибке до получения неверного результата. Переполнение связано с количеством разрядов устройства, выделяемых для хранения числа.

Арифметические действия с целыми числами выполняются точно. Для деления существуют операции определения целой части частного и остатка от деления.

Инициализация переменных.

Переменной может быть присвоено начальное значение при объявлении:

<тип> <имя пер.>=<начальное значение>;

Int a=10, n=20;

Лекция 4

Выражения

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

или

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

Любое выражение, заканчивающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении этого выражения. Частным случаем выражения является пустой оператор; (точка с запятой)

Оператор - это наименьшая исполняемая единица программы. Для обозначения конца оператора в языке Си используется точка с запятой.

Объекты, над которыми производится действие, называются операндами. Действия над операндами это операции.

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

Знак операции — это один символ или комбинация символов, определяющих арифметические, логические или другие действия над операндами.

Каждое выражение принимает какое-либо значение. Тип результата в выражении определяется операциями и типом операндов, которые входят в выражение.

Порядок выполнения операций в выражении определяется приоритетом (рангом) операции и правилами ассоциативности. Для изменения порядка выполнения операций используют круглые скобки.

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

В языке Си различают одиночное присваивание, оптимизированная форма присваивания и множественное присваивание.

Для каждой операции определено количество операндов. В зависимости от этого операции делятся на унарные, бинарные и тернарные ( условная).

Например:

-5     унарная (один операнд:);

2+х    бинарная (два операнда);

?: тернарная (три операнда).

Это условная операция, например: x = 10; x>9? 100: 200;

В таблице, рассмотренной ранее приведены все знаки операций, определенные стандартом языка и разбитые на группы в соответствии с их приоритетом (рангом).

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

Операции 1 ранга имеют наивысший приоритет выполнения. Операции одного ранга имеют одинаковый приоритет, и если их в выражении несколько, то они выполняются в соответствии с правилами ассоциативности либо слева на право, либо справа налево.

Например,

x = y = z =5;

y = x -10+5;

Каждая бинарная операция имеет определенный порядок выполнения: слева направо или слева направо. Например, если есть несколько сложений, то они выполняется слева направо, а присваивание справа налево.

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

Выражение может содержать несколько операций одного приоритета. Когда несколько операций одного и того же уровня приоритета появляются в выражении, то они применяются в соответствии с их ассоциативностью — либо справа налево, либо слева направо.

В общем случае, унарные операции, условная операция и операции присваивания правоассоциативны, а остальные операции левоассоциативны: выражение x = y = z; означает x = (y = z); а выражение x+ y –z; означает (x + y) – z.

Арифметические операции: +, -, *, /, %, ++, --;

Арифметические операции ассоциируются слева направо.

a+b -c

Приоритет: ++, --, одноместный + или -; *, /, %,+, -,

Язык С предоставляет пользователю операции ++ (инкремент) и -- (декремент). Они увеличивают или уменьшают значение переменной на 1.

Например,

x++; //это означает, x=x+1;

или

x--; // это означает, x=x-1;

Они могут следовать до операнда ++ x (префиксная форма) или после x ++ (постфиксная форма).

Префиксная и постфиксная формы отличаются при использовании их в выражениях.

Если оператор инкремента или декремента предшествует операнду, то сама операция выполняется до использования результата в выражении. Если же оператор следует за операндом, то в выражении значение операнда используется до выполнения операции инкремента или декремента.

++ x в выражении означает, что сначала a увеличивается на 1, и ее новое значение будет использоваться в выражении.

x ++ в выражении означает, что сначала a используется в выражении, а затем ее значение увеличивается на 1.

Выражение x=x+1, можно записать как в виде ++x;так и в виде x++;

Значения x будут увеличены на 1 всегда, но использование их в выражениях разное.

Например,

  y =2; x = ++ y +5; Сначала при вычислении выражения y увеличится на 1 (y=y+1), станет равным 3 (y =3); затем, будет выполнено действие 3+5, результат 8 будет записан в переменную x. Значение выражения будет 8. Это равносильно: y =2; у=у+1; x = y +5; А если выражение записать в виде: y =2;  x = y ++ +5; то сначала при вычислении выражения к у будет прибавлено 5 (2+5=7) и это значение будет записано в переменную x (x =7). И только, когда выражение будет вычислено, y увеличится на 1, станет=3.Это равносильно y =2; x = y +5; у=у+1;

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

Постфиксная форма переменной в выражении обладает самым низким приоритетом, ниже присваивания.

Операция деления / применяется к операндам числового типа.

При делении целого на целое результатом будет целая часть от деления. Например,  3/2 результат 1, 2/3 – 0.

При делении если хотя бы один операнд вещественный, то результат будет вещественный. Например,

int a=5;

double b=2, c;

c=a/b; (2.5)

c=5./2; или с=5/2.; результат тоже вещественный.

Операция % применяется к операндам целого типа и означает остаток от целочисленного деления.

Например,

2%3 результат 2;            5%2 результат 1;

Операции отношения (сравнения): >, <, <=, >=,!=, ==;

Операции отношения — это операции, в которых значения двух переменных сравниваются друг с другом. Между логическими операциями и операциями отношения существует тесная связь: результаты операций отношения часто являются операндами логических операций.

Логические операции:!, &&, ||

Результатом логического выражения или выражения отношения в Си является целочисленное значение 0 – ложь, или любо е целое число (ненулевая величина) – истина. Обычно это 1.

2>3 результат 0, т.е. ложь;

2==2 результат 1, т.е. истина;

x=2; x>0<1 результат 0

x =2; x >0==1 результат 1

В стандартах С89 и в С99 значение ИСТИНА представлено любым отличным от нуля числом, а ЛОЖЬ — нулем. В стандарте С99 дополнительно определен тип данных _ b ооl, переменные которого могут принимать значение только 0 или 1.

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

!

  > >= < <=

    ==!=

&&

||

Присваивание

В языке Си операция присваивания записывается знаком (=). В этой операции действие выполняется справа налево.

Оператор присваивания может присутствовать в любом выражении языка Си. Этим Си отличается от большинства других языков программирования (Pascal, FORTRAN), в которых присваивание возможно только в отдельном операторе.

Общая форма оператора присваивания:

имя_переменной = выражение;

В языке Си различают: одиночное присваивание, оптимизированное присваивание, и множественное присваивание.

В языке Си существуют следующие операции присваивания: =, +=, -=, *=, /=, %=;

x=5 – одиночное присваивание.

y=(x=5)+b;

1) x=5   2)y= x+b

Можно записать многократное (множественное) присваивание: a = b = c = x * y. Сначала вычисляется x*y, затем это значение присваивается c, затем b и a.

Для выражений вида: n=n+2; n=n*2; n=n/2; n=n%2 существует другая форма записи (компактная или оптимизированная форма).

n=n+2; n+=2;

n=n*2; n*=2;

n=n/2;   n/=2;

n = n %2; n %=2;   //остаток от деления, только для целых

Или выражение x=x*(y+1) эквивалентно x*=y+1;

Подключение библиотек

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

В языке программирования Cи код библиотек представляет собой функции, размещенные в файлах, которые скомпилированы в объектные файлы, а те, в свою очередь, объединены в библиотеки. В одной библиотеке объединяются функции, решающие определенный тип задач. Например, существует библиотека математических функций.

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

Библиотеки бывают двух видов — статические и динамические. Код статических библиотек при компиляции полностью входит в состав исполняемого файла, что делает программу легко переносимой. Код динамических библиотек не входит в исполняемый файл, он содержит лишь ссылку на библиотеку. Если динамическая библиотека будет удалена или перемещена в другое место, то программа работать не будет. С другой стороны, использование динамических библиотек позволяет сократить размер исполняемого файла. Также если в памяти находится две программы, использующие одну и туже динамическую библиотеку, то последняя будет загружена в память лишь единожды.

Чтобы подключить к программе библиотеку, надо подключить заголовочный файл (# inckude <имя заголовочного файла. h >). Существуют 15 заголовочных файлов. stdio. h (вв/выв), math. h ( матем. функции ), stdlib. h (генератор случ чисел, функции выделения и освобождения памяти), time (функции для работы с системным временем) и т.д.

Ввод/вывод

Для организации ввода/ вывода  в языке Си используются функции стандартной библиотеки. Для подключения к программе этих функций используется директива препроцессора, например, #include <stdio.h >. Каждая стандартная функция имеет прототип в заголовочном файле. Прототипы функций ввода/вывода находятся в файле stdio.h..

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

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

Функция printf() переводит данные из внутреннего представления в символьное и выводит результат этого преобразования на экран дисплея. При этом имеется возможность вывести данные в определенном виде, т.е форматировать данные.

Общий вид:

Printf (<”форматная_строка”>,<список_аргументов>);

Форматная (управляющая) строка ограничена кавычками и содержит 2 типа объектов. Может включать произвольный текст (последовательность символов), которые копируются в поток вывода, управляющие символы и спецификации преобразования данных. Список (аргументов) вывода может отсутствовать, например: Printf (“Hello world!\n”). Функция вывода в этом примере содержит только форматную строку.

В форматной строке могут быть указаны управляющие символы ‘\n,  \ t

Например, ‘\n’ – перевод курсора на новую строку. Текст, заключенный в кавычки, выводится на экран, а управляющий символ \ n переводит  курсор на новую строку.

Управляющий символ табуляция   \ t. Табуляция находится на 1, 9, 17, 25 позиции

Строка формата содержит 2 типа объектов: поясняющий текст, который копируется в поток вывода и спецификацию формата, которая задает правила преобразования и вывод очередного значения из списка аргументов (вывода). Спецификации преобразования данных предназначены для управления формой внешнего представления значений аргументов функции printf ().

Каждая спецификация формата начинается с символа % и заканчивается символом типа преобразования.

Форматная строка имеет вид:

[поясн.текст][ % флажки ширина_поля.точность модификатор и спецификатор]

Спецификаций должно быть столько же, сколько объектов в списке вывода. Каждая спецификация формата начинается с символа %.

Кроме формата, можно указать дополнительные опции: флаги и модификаторы.

Между символом % и спецификатором типа (d,fl, f) могут быть помещены флаги.

Флаги: - (знак минус) задает выравнивание аргумента по левому краю его поля; + (знак плюс) требует обязательного знака у выводимого числа; пробел – при отсутствии знака перед числом должен стоять пробел; 0 задает дополнение нулями поля слева до заданной ширины при выводе числа. К спецификаторам формата могут быть добавлены модификаторы длины, которые изменят формат вывода. Например, lf – означает, что аргумент имеет тип long.

Для символьных и целочисленных данных может быть задана ширина поля вывода. Для вещественных чисел - ширина поля, точка, точность. По умолчанию вещественные числа выводятся с точностью 6 знаков после десятичной точки.

Среди элементов спецификации преобразования обязательными являются только два – символ ‘%’ и спецификатор преобразования. В таблице указаны основные форматы.

Спецификаторы формата

№ пп Команда формата Наименование
  %c Символ
  %d Целое десятичное число
  %I Целое десятичное число
  %e Десятичное число в виде х.хх е + хх
  %E Десятичное число в виде х.хх Е + хх
  %f Десятичное число с плавающей точкой хх.хххххх
  %F Десятичное число с плавающей точкой хх.хххххх
  %o Восьмеричное число
  %s Строка символов
  %u Беззнаковое десятичное число
  %x Шестнадцатеричное число 5а3f
  %X Шестнадцатеричное число 5A3F
  %% Преобразование аргументов не выполняется, выводится символ %
  %p Указатель

 

Для типа double на вводе используют спецификатор lf. В форматной строке список форматов может быть разделен поясняющим текстом. В список вывода (аргументов) функции printf() включают объекты, значения которых должны быть выведены на экран. Это могут быть выражения, переменные, константы, обращения к функциям. Список форматов должен соответствовать по количеству и типам списку аргументов.

Пример:

int y = 7;

float x = 3.1415;

printf(“x = %f\ty = %d\n”, x, y);

На экране:   

Для вывода числовых значений в спецификации преобразования часто используют «ширина_поля» и «точность». Ширина_поля – целое положительное число, определяющее количество знакомест на экране для представления выводимого значения. Для целочисленных данных используется только ширина поля вывода.

Точность – целое положительное число, определяющее количество цифр в дробной части внешнего представления вещественного числа (с фиксированной точкой) или его мантиссы (при использовании формы с плавающей точкой).

Пример:

int y = 7;

float x = 3.1415;

printf(“x = %.2f\ty = %4d\n”, x, y);

На экране:

Пример:

int a=37,m=5,n=2;

 double x=178.946, y=12e-9;

 printf("a=%d\n\n\n x=%f",a,x);

printf("a=%6d\ty=%g",a,y);

a выодится в поле 6 знакомест и прижимается к правому краю.

printf("x=%+-10.2f\ty=%e",x,y);

Вывелся знак у числа и число прижалось к левому краю поля вывода из 10 знако-мест.

printf("x=%+-10.2f\ty=%g",x,y);

Изменили формат с e на g. Число отобразилось в более короткой форме.

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

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

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

Scanf (”<форматная_строка>”,<список ввода>);

Для функции scanf форматная строка и список аргументов (ввода) обязательны. В форматной строке можно использовать знак % соответствующий вводимому данному спецификатор и знак \ n.

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

При выполнении программы разделителями между вводимыми данными являются пробелы, нажатие клавиши Enter или символ табуляции.

Исходные данные, введенные с клавиатуры, после нажатия клавиши Enter помещаются в специально выделенную операционной системой область памяти – в буфер клавиатуры и одновременно отображаются на экране в виде строки ввода.

В отличие от функции printf() аргументами для функции scanf() могут быть только адреса объектов программы, обычно это адреса переменных (указатели ). В форматной строке в списке ввода может быть записано несколько аргументов, они перечисляются через запятую: & аргумент 1, & аргумент 2 & аргумент n. Выражение для получения адреса переменной будет таким: &имя_переменной. Знак & это операция вычисления адреса.

Например,

int x;

float y;

/* или scanf (“%d%f”, &x, &y);*/

scanf(“\n%d”, &x);

scanf(“%f”, &y);

Если тип вводимого аргумента double, то спецификатор lf.

Пример

Пример

               int x,y,z;

           scanf("%d%d%d",&x,&y,&z);

           printf("viv=%d_%d_%d",x,y,z);

 

 

int a;

scanf (“%d”, &a);

ввели 12345

scanf (“%2d”, &a);

Будет считано 12

Оставшиеся остаются в потоке ввода, при следующем scanf могут быть считаны

int a, b;

ввели 12345 678

scanf (“%d%d”, &a, &b);

Изменили формат

scanf (“%3d%7d”, &a, &b);

Еще раз изменили формат

scanf (“%7d%5d”, &a, &b);

Лекция 3

Приоритеты всех операций, определенных в языке С:

Направление выполнения:

→ слева направо

ß справа налево

Серым выделены операции, которые нам в этом семестре не понядобятся.



Поделиться:


Последнее изменение этой страницы: 2020-11-23; просмотров: 151; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.245.196 (0.274 с.)