putch(7) //звуковой сигнал для неверного символа
Операторы присваивания,
Операторы ввода и вывода данных,
Операторы вызова функций,
оператор-выражение -являются типичными операторами преобразования данных, и именно эти операторы используются при программировании линейных процессов вычислений.
Операторы преобразования данных:
(последовательно выполняемые операторы)
Все они являются операторами – выражениями.
Выражение, оканчивающееся ‘ ; ‘ – это оператор - выражение :
1. Оператор – выражение - вызов функции , не возвращающей никакого значения.
Форма:
имя функции ( список фактических параметров);
Пример:
…
Void main ()
{ void cd (char) ; // прототип функции
cd ( ‘ *’) ; // оператор - выражение
…
}
2. Оператор – присваивания является оператором –выражением.
Оператор простого присваивания:
L-значение = выражение ;
Оператор составного присваивания:
L-значение op= выражение ;
Примеры:
x*= i; … i=x-4*i;
3. Оператор – выражение – инкремент или декремент L-значения:
(L-значение)++;
- -(L-значение);
Пример:
i++;
4. Операторы ввода - вывода данных также являются операторами –выражениями.
Операторы используют непосредственно входные и выходные потоки из библиотеки классов входных и выходных потоков, описания которых находятся в заголовочном файле iostream.h.
Препроцессорная директива
#include <iostream.h>
подключает к программе библиотеку средств ввода-вывода, построенную на основе механизма классов.
Поток – это обмениваемая последовательность байт между оперативной памятью и внешними устройствами (файл на диске, принтер, клавиатура, дисплей, стример и т.п.), или между различными участками оперативной памяти.
cin– имя стандартного входного потока ( по умолчанию связанного с клавиатурой);
cout– имя стандартного выходного потока (по умолчанию связанный с экраном дисплея);
>> - операция извлечение данных из потока или операция ввода;
<< - операция вставки данных в поток или операция вывода;
Операции возвращают ссылки на соответствующие потоки (т.е. фактически сами потоки)
Операции извлечения данных из потока и вставки данных в поток являются основой для операторов ввода-вывода данных.
Форма оператора ввода ( ввод данных с внешнего устройства в ОП) :
cin >> L-значение ;
L-значение –это именованный участок оперативной памяти, значение которого можно изменять, частный случай – имя переменной. В последнем случае формат оператора ввода таков:
cin >> имя переменной ;
Из потока cin (с клавиатуры) извлекается значение и помещается в оперативную память, выделенную под переменную.
Но не так все просто. Дело в том, что визуальное представление данных не является формой хранения данных в ЭВМ. Внутри ЭВМ данные хранятся в виде двоичных кодов, которые регламентированы для каждого типа данных. При вводе выполняется преобразование символов из потока (с клавиатуры) в двоичные коды внутреннего представления данных, при этом происходит автоматическое распознавание типов вводимых данных. В отличие от функции scanf,при использовании потока cinне надо указывать правила преобразования данных.
Форма оператора вывода (вывод данных из ОП на внешнее устройство):
cout<< выражение ;
Из оперативной памяти извлекается значение выражения и помещается в выходной поток cout (на экран). При этом происходит преобразование двоичных кодов типизированного значения выражения в последовательность символов алфавита, изображающих значение на внешнем устройстве. Интерпретация выводимого значения производится автоматически (в отличие от функции printf ).
Операторы управления работой программы
1. Пустой оператор .
;
Пример – циклический оператор, все циклические действия которого определены в заголовке, тело цикла – пустой оператор.
…
for ( n = 0 , m =1 ; n < 7 ; n++, m * =n ) ;
2. Составной оператор- последовательность операторов, заключенная в фигурные скобки.
3. Блок - определения, описания и раздел операторов, заключенные в фигурные скобки .
После составного оператора и блока не ставится ‘ ; ‘
Возможно вложение блоков и составных операторов
4. Описания и определения , после которых стоит ‘ ; ‘ также считаются
операторами .
Перед любым оператором может стоять метка (перед пустым оператором, перед описаниями и определениями и т.д.), метки – это идентификаторы, они локализуются в теле функции.
Иногда удобно поставить метку перед пустым оператором в конце функции.
Примеры:
t: x= 4+x *3;
m: int r = 5, q = 2;
k: ;
5. Операторы выбора реализуют в программе алгоритмические схемы ветвления:
Условный оператор:
(схема – развилка)
If (выражение) оператор 1 else оператор 2
Выражение – может быть любым скалярным выражением, результат должен иметь арифметический тип или тип указателя;
Оператор– один простой или составной.
Если Выражение истинно, то есть его значение не равно нулю или не пустой указатель (NULL) - выполняется оператор 1, в противном случае выражение – ложно и выполняется оператор 2.
Таким образом, выражение в условном операторе всегда является логическим!
Его всегда проверяют на истинность или ложность.
Операторами 1,2 не могут быть описания и определения, но могут быть блоки с описаниями и определениями
Перед else ставится ‘ ; ‘, если оператор 1 – простой оператор.
…
if ( x>0) { x = -x ; q (x) ;} else { int i=3; q( i*x) ;}
Сокращенная форма
If (выражение) оператор
Пример:
if( a>b) a = -a ;
В случае ложности выражения никаких действий не выполняется.
ВЛОЖЕННЫЕ УСЛОВНЫЕ ОПЕРАТОРЫ
Если оператор1или орератор2илиоператорявляются условными операторами, то эти операторы являются вложенными условными операторами. При определении, к какому условному оператору относится каждая альтернативная ветвь, существует правило: каждый else соответствует ближайшему к нему, свободному оператору if.
Пример:
… if (x = =1) if ( у = =1) cout << '' x =1 и y =1 “ ;
else cout << “ x != 1” ;
- оператор составлен не правильно.
Верные варианты:
if ( x = = 1) { if ( у = = 1) cout << '' x =1 и y =1 “ ;}
else cout << “ x != 1” ;
или
if (x= =1) if ( y= =1) cout<<'' x =1 и y =1 “ ;
else ; else cout << “ x != 1” ;
Алгоритмическая схема – ветвление реализуется с помощью оператора switch,который имеет две формы.
Переключатель:
Switch ( переключающее выражение)
{
case константное варажение1: операторы1;
…
case константное выражение N: операторы N;
default: операторы;
}
переключающее выражение – целочисленного (возможно символьного) типа;
константные выражения того же типа что и переключающее выражение и различны;
Возможны несколько выражений:
сase 1 : case 5: операторы;
Альтернативный выбор
Switch (выражение)
{
case const1 : операторы ;
break;
…
case constN : операторы ;
break;
default: операторы;
}
можно включать описания и определения объектов в операторы, но их следует включить в блоки:
…int i; … switch (i)
{ case 4: { char d=' q '; float f=56.9;
if ( int(d) >int( f ) ) cout<<d; else cout<<f;}
break;
case 1 : cout << i ;
break;
}
6.Операторы цикла
1) цикл с предусловием
(при входе в цикл проверяется условие)
While (выражение условия) тело цикла
2) цикл с постусловием
(при входе в цикл выполняется тело цикла , а затем проверяется условие)
do
Тело цикла
while (выражение условия) ;
3) итерационный цикл с параметром
( цикл с предусловием)
for ( инициализация цикла ;
выражение условия ;
Список выражений )
Тело цикла
Выражение условия- скалярное выражение (ариф., сравн., логич., типа указателя)
- Цикл повторяется пока значение выражения –условия не станет равным нулю ( или NULL).
- Тело цикла не может быть описанием или определением,
Это оператор простой или составной или блок.
Функция подсчета длины строки:
int lt (char*stroka)
{ int ln =0; while ( * stroka++) ln++ ;
return ln ;}
Выражения условия:
while (a<b) , while (point != NULL) (point-указатель) ,
while(point) , while (point ! = 0)
Надо чтобы в теле цикла изменялось выражение условия, иначе возникают бесконечные циклы.
Бесконечные циклы : while (1) ;
do ; while (1);
Примеры:
1)… char letter;
cout <<”Вы желаете продолжить? ( Y/N ) “;
letter = getch(); // чтение буквы с клавиатуры
letter = toupper(letter); // преобразование в прописную
while ((letter != 'Y') && ( letter != 'N'))
{ putch(7); //звуковой сигнал для неверного символа
letter = getch() ;
letter = toupper(letter);
}
2) … cout <<”Вы желаете продолжить? ( Y/N ) “
do {
letter = getch(); // чтение буквы с клавиатуры
letter = toupper(letter); // преобразование в прописную
if ( ( letter != 'Y' ) && (letter != 'N') )
putch(7) //звуковой сигнал для неверного символа
}
while ((letter != 'Y') && ( letter != 'N'));
Цикл for
Заголовок после зарезервированного слова forв круглых скобкахвключает три части: секция инициализации, выражение условия и список выражений для коррекции, которые разделяются - ‘ ; ‘ . Каждая из этих частей может отсутствовать, но даже если они отсутствуют, разделители ‘;’ должны присутствовать в заголовке.
Инициализация – это выражения, определения , описания ,разделенные ‘ ,’ Вычисляются один раз при входе в цикл.
Выражение условия- логическое выражение, аналогично другим циклам, если его нет, полагают, что оно истинно.
Выражения из списка – вычисляются на каждой итерации после выполнения тела цикла
Тело цикла – простой, составной оператор или блок.
For ( ; ; ) ; - бесконечный цикл
For ( ; 1 ;) ; - бесконечный цикл
For – цикл с заданным числом повторений, для подсчета числа проходов используется управляющая переменную цикла
Управляющая переменная может изменяться на любую требуемую величину
For ( c =0 ; c<=100 ; c +=10)…;
For ( b =100 ; b >= -100 ; b -= 25)… ;
For ( letter =’A’ ; letter <= ‘Z’ ; letter ++)…;
For ( pr =0.0 ; pr <= 100.0 ; pr +=0.5 ) …;
Пример:
… for ( int i = 0 ; i< 3 ; i++) cout << i ;
for ( ; i > 0 ; i -- ) cout << i ;
0 1 2 32 1
- Область действия имен, объявленных в заголовке цикла- от цикла до конца блока, в котором это цикл присутствует.
Вложенные циклы
Разрешено вложение любых циклов в любые циклы.
Правило: для каждой итерации (каждого прохода) внешнего цикла выполняются все итерации внутреннего цикла.
… void main()
{ for (int i =0 ; i < 3 ; i ++ ) // внешний цикл
{ cout <<’\n’<< i ; // переменная i действует до конца блока
// функции main
for ( int i = 6 ; i>3 ; i-- ) cout << i ; //переопределение
// другой переменной с тем же именем до конца блока
// внешнего цикла
cout << i ;
}
} 0 6 5 4 3
1 6 5 4 3
2 6 5 4 3
Операторы передачи управления
1) Оператор безусловного перехода.Форма:
goto идентификатор метки;
запрет : нельзя передавать управление через описание, содержащее инициализацию объекта
можно перескакивать через вложенные блоки (с описанием с инициализацией)
Ex.1
Goto A; - ошибка
float x = 1.2;
Goto A; - допустимо
{int n=2;
x*=n;}
A: cout <<x;
Рекомендации:
1) не входить внутрь блока извне;
2) не входить внутрь условного оператора;
3) не входить внутрь переключателя;
4) не передавать управление внутрь цикла;
Применение:
1) выход из вложенных циклов или переключателей;
2) к одному участку программы необходимо перейти из разных мест функции;
2) Оператор возврата из функции.Форма:
return выражение;
return ;
Значение выражения (только скалярного) возвращает функция.
Если функция типа void ,то в return нет выражения, или return отсутствует.
3) Оператор выхода из цикла или переключателя:
break;
Осуществляет передачу управления к следующему за циклом или переключателем оператору.
Если циклы (или переключатели) вложенные позволяет выйти из внутреннего цикла во внешний цикл.
4) Оператор перехода к следующей итерации :
continue:
- завершает текущую итерацию цикла ( используется только в циклах ) и начинается проверка условия продолжения цикла (следующей итерации)
- равносилен передаче управления на пустой оператор в самом конце тела цикла
#define n 100
Void main ()
{ int k, i ;
float x [n] = { …} , s ;
for ( s=0.0 , k = 0, i = 0 ; i < n ; i++ )
{ if ( x[i] <=0.0) continue ;
k++ ; //количество только положительных элементов
s + = x[i]; // сумма положительных элементов
}
Функции printf () и scanf ()
- осуществляют форматированный вывод и ввод в стандартные потоки (по умолчанию на консоль)
- прототипы в файле STDIO.H
int printf ( char * управляющая строка , arg… );
int scanf ( char * управляющая строка , arg…) ;
1) первый параметр всегда символьная строка, содержащая некоторые символы и команды (спецификаторы) формата сообщающие какие данные надо вводить или как надо выводить аргументы.
Спецификаторы задаются с помощью знака % с буквами и цифрами
2) последующие параметры (их переменное число)- аргументы
для printf – это значения выражений, в частности числа, переменные, константы , строки.
для scanf – это список адресов переменных типы которых, указанных в строке формата для каждого аргумента последовательно ( первый формат соответствует первому аргументу, второй – второму и т. д.)
printf
Функция printf() возвращает общее число выводимых значений при успешном выводе
Int result;
Result =printf (“ … \n”, …)
int
%d , %i – для вывода десятеричных значений;
%0 - в восьмеричном формате;
% x, % X –в шестнадцатеричном;
int v = 255;
printf (“ значение %d в восьмеричном формате %0\n”, v, v )
printf('' значение %d в шестн. формате %x и %X\n’’, v, v,v)
значение 255 в восьмеричном формате 377
значение 255 в шестн. формате ff и FF
unsigned int
%u unsigned int a = 42000
printf (“%u % d\n’’, a, a ) 42000
-23536
long floatshot unsignedlong double
long int % ld % f % hu % lf
символы % и 0 и x ,X
%% %#0 %#x %#X
char
% c printf ( “ буква %c\n’’ , ‘A’); буква А
printf ( “ буква %c\n’’ , 65); буква А
Вывод чисел с плавающей точкой в экспоненциальном виде: %e или %E
Float a=3.14159 , b= 2.0031;
Printf (‘’ %e %E” , a, b )
3.14159e +00 2.0031E+00
на усмотрение машины %g
printf ( “ %g\n’’, 0.1234) ; printf (“%g\n”,0.000001234)
0.1234 1.234e-06
Строки
%s char t [255]=” Pascal”;
printf ( “ Название-%s\n”, t)
Название – Pascal
Вывод указателей
%p , %n
int v ; printf(“Адрес переменной=%p\n”, &v)
Адрес переменной= FFF4
Вывод числа со знаком(положительным и отрицательным)
%+d %+f int a=5, b=-5; float c= 1.5, d=-1.5;
printf(“%+d %+d %+f %+f ” , a, b , c , d );
+5 -5 +1.5 -1.5
Количество символов- мест для вывода
Int v = 5;
Printf( “%1d \n”,v) 5
Printf( “%2d \n”,v) 5
Printf( “%3d \n”,v) 5
Если дано меньше, чем надо для вывода целого , символьной строки , добавляется необходимые места
Вывод целых с ведущими нулями
Printf( “ %01d\n”, v) 5
Printf( “ %02d\n”, v) 05
Форматирование чисел с плавающей точкой
1) число указывает общее количество символов для вывода
2) число указывает количество символов справа от десятичной точки
float f =1.23456;
printf( “ %8.1f\n”,f) _ _ _ _ _ 1.2
printf( “ %8.3f\n”,f) _ _ _ 1.235
форматирование экспоненциального представления аналогично:
printf( “ %12.1 e\n”, f) _ _ _ _ _ 1.2e+00
printf( “ %12.5 e\n”, f) _ 1.23456e+00
Выравнивание влево и вправо:
Printf ( “ %5d , 5) _ _ _ _ 5
Printf ( “ %-5d , 5) 5 _ _ _ _
Scanf()
Функция производит ввод данных с клавиатуры в переменные, адреса которых задаются аргументами (arg)
Возвращаемое значение функцией – количество успешно введенных и присвоенных значений
Управляющая строка содержит спецификации формата, пробелы и др. символы.
Спецификации:
%c - чтение символа
%d – чтение десятичного целого
%i – чтение десятичного целого
%e- чтение числа типа float
%h- чтение числа типа short int
%0- чтение восьмеричного числа
%s- чтение строки
%x- чтение шестнадцатеричного числа
%p- чтение указателя
-Спецификация формата не содержит пробелов.
Пробельные символы - пробелы ( _ ), символы табуляции ( ‘\t’) , новой строки ('\n') перевода каретки ('\r’) - разделители между двумя вводимыми символами. Символы очередного значения выделяются до первого пробельного символа.
Другие символы (ненулевые) указывают на чтение и отбрасывание этих символов, это любые символы, которые надо игнорировать.
Scanf(“%dplus%d” , &i , &j) поток символов 5plus10
i=5 , j = 10
Переменные должны указываться адресом:
Scanf(“%d %d “, &i , & j);
Scanf(“%5s “, str)
Возможно задать множество поиска - список символов в квадратных скобках
Char s[10],t[10];
Scanf (“%[0123456789]%s’’,s ,t )
Поток ввода : 123прлаы456
S= “123” t= “прлаы456”
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|