bmstu_iu6_Cpp1 (823967), страница 5
Текст из файла (страница 5)
Для изменения порядка выполнения операций используются круглые скобки.Грамматика С++ определяет 16 категорий приоритетов операций или рангов. Операции 1 ранга имеют высший приоритет, т.е. выполняются в первую очередь:1. ( ) [ ] -> :: .2. ! (не) + - (унарные) ++ -- &(адрес) *(указатель) sizeof new delete3. .* ->*4. * / %5.
+ - (бинарные)6. << >>7. < <= > >=8. = = ! =9. &(поразрядное и)10. ^(исключающее или)11. | (поразрядное или)12. &&13. ||14. ?:15. = *= /= %= += -= &= ^= |= <<= >>=16. ,Например:Оглавление22inta=10, b=3; float ret; ret=a/b;c=1;b=c++;// результат: b=1, с=2c=1;sum=++c;// результат: c=2 , sum=2// результат: ret=3c=a<<4;// эквивалентно с=a*16;a+=b;// эквивалентно a=a+b;a=b=5;// эквивалентно b=5; a=b;a=(b=s/k)+n;// эквивалентно b=s/k; a=b+n;c=(a>b)?a:b;// если a>b, то с=a, иначе с=bСложные выражения представляют собой последовательность простых, записанных через запятую «,»:<Выражение1>,<Выражение2>,...<Выражение n>По таблице приоритетов операций запятая имеет низший ранг, поэтому простые выражения, разделенные запятой, выполняются последовательно слева направо, а в качестверезультата выражения берется тип и значение самого правого выражения.Например:int m=5,z;z=(m=m*5,m*3);// результат: m=25, z=75int d,k;k=(d=4,d*8);// результат:d=4, k=32 .с=(a=5, b=a*a); // эквивалентно a=5; b=a*a; c=b;Стандартные математические функции.
В выражениях можно применять стандартные математические функции из библиотеки math. При их использовании необходимо подключить файл прототипов функций math.h:#include <math.h>Наиболее часто используют следующие функции:fabs(< Вещественное выражение>)// абсолютное значение вещественного числаabs(<Целое выражение>)// абсолютное значение целого числаsqrt(<Вещественное выражение>)// √xexp(<Вещественное выражение>)//exlog(<Вещественное выражение>)//ln xlog10 (< Вещественное выражение >)//log10 xsin(<Вещественное выражение>)//sin xcos(<Вещественное выражение>)//cos xОглавление23atan(<Вещественное выражение>)//arctg xtan(< Вещественное выражение >)//tg xacos (< Вещественное выражение >)//арккосинусasin (< Вещественное выражение >)//арксинусsinh(<Вещественное выражение>)//гиперболический синусcosh(<Вещественное выражение>)//гиперболический косинусКроме этих функций еще достаточно часто используют функции, позволяющие получать последовательности случайных чисел.
Их прототипы находятся в файле conio.h.rand () – генерация случайного числа 0 ≤ x < 215-1;srand (<Целое число>) – инициализация генератора случайных чисел.Например:srand((unsigned)time(NULL));//инициализация датчика текущим временемnum=rand()/1000.0; // генерация вещественного случайного числаДля такой инициализации к проекту должен быть подключен файл time.h:#include <time.h>1.6 Элементарный ввод выводДля ввода/вывода данных скалярных типов и строк обычно используют стандартныефункции ввода/вывода, описанные в библиотеке stdio.
Для того чтобы применять этифункции необходимо, чтобы программе был доступен файл stdio.h, содержащий прототипы функций из этой библиотеки. Для этого необходимо подключить этот файл с помощью директивы препроцессора include:#include <stdio.h>В библиотеке существуют три вида функций, организующих элементарный ввод склавиатуры и вывод на экран:•форматный ввод/вывод – для выполнения операций ввода/вывода над скалярными значениями, символами и строками;•ввод/вывод строк;•ввод/вывод символов.Оглавление241.6.1 Форматный ввод /выводВвод чисел, символов и строк с клавиатуры:int scanf(<Форматная строка>, <Список адресов переменных>); // возвращает//количество введенных значений или EOF(-1)Вывод чисел, символов и строк на экран:int printf(<Форматная строка>, <Список выражений>); // возвращает// количество выведенных байтовФорматная строка – это строка, которая помимо символов содержит управляющиеспецификации вида:%[-] [<Целое 1>] [.<Целое 2>] <Формат>где «-» – выравнивание по левой границе,<Целое 1> – ширина поля вывода;<Целое 2> – количество цифр дробной части числа;<Формат > – формат для ввода/вывода значения.Основные форматы для ввода и вывода:d – целое десятичное число;u – целое десятичное число без знака;o – целое число в восьмеричной системе счисления;x – целое число в шестнадцатеричной системе счисления (% 4x – без гашения незначащих нулей);f – вещественное число;e – вещественное число в экспоненциальной форме;c – символ;p – ближний указатель (адрес);s – символьная строка, вводит строку до первого пробела.Кроме этого, форматная строка может содержать Esc-последовательности:\n – переход на следующую строку;\t – переход на следующую позицию табуляции;\r – перевод каретки;\f – перевод страницы;\n hhh – вставка символа с кодом ANSI hhh (код задается в шестнадцатеричной системе счисления);%% – печать знака %.Оглавление25Примеры форматного ввода/вывода:а) i=26;printf (″%-6d∪∪∪%%∪ %o∪ %x\n″, i, i, i);Выведенная строка: 26∪∪∪∪∪∪∪%∪32∪1A ↵б) scanf(″%d%d″,&a,&b);Вводимые значения:1) 24 282) 24↵28в) scanf(″%d,%d″,&a,&b);Вводимые значения: 24,28г) scanf(″%s″,name);Вводимые значения: ИвановИванРезультат ввода: ИвановПоследний пример демонстрирует, что по формату s строка вводится только до пробела.
Чтобы ввести всю строку используют специальную функцию ввода строк или повторяют ввод в другие переменные из той же строки.Примечание. Начиная с версии Visual С++ 2008 разработчики языка рекомендуютвместо стандартной функции scanf использовать функцию scanf_s, которая контролирует длину вводимой пользователем строки, позволяя исключить ошибку переполнениябуфера. При вызове функции scanf_s максимально возможную длину вводимой строкиуказывают после соответствующего формата.Пример 1.2.
Пример работы функции scanf_s().#include <stdio.h>#include <conio.h>int main(){int i,result;float fp;charc,s[81];result = scanf_s( "%d %f %c %s", &i, &fp, &c, 1, s, 80 );printf( "The number of fields input is %d\n", result );printf( "The contents are: %d %f %c %s \n", i, fp, c, s);_getch();}Оглавление26Результат работы программы (полужирно выделены вводимые значения):45 67.8fghjkThe number of fields input is 4The contents are: 45 67.800003 f ghjk1.6.2 Ввод/вывод строкВвод строк с клавиатуры:char* gets(<Строковая переменная>); // возвращает копию строки или NULLВывод строк на экран с переходом на следующую строку:int puts (<Строковая константа или переменная>);Примеры:а) puts(″Это строка″);Результат:Это строка↵б) gets(st);Вводимые значения:Результат:ИвановИванов Иван↵Иван1.6.3 Ввод/вывод символовВвод символов с клавиатуры:int getchar();// возвращает символ или EOFВывод символов на экран:int putchar(<Символьная переменная или константа>);Например:ch=getchar();putchar(′t′);Пример 1.3.
Программа определения корней квадратного уравнения Ax2+Bx+C=0при условии, что дискриминант неотрицателен.#include <locale>#include <stdio.h>#include <conio.h>#include <math.h>Оглавление27// основная программаint main(int argc, char* argv[]){setlocale(0,"russian");float A,B,C,E,D,X1,X2;puts("Введите A,B,C:");scanf_s("%f%f%f",&A,&B,&C);printf("A=%5.2fB=%5.2fC=%5.2f\n",A,B,C);E=2*A;D=sqrt(B*B-4*A*C);X1=(-B+D)/E;X2=(-B-D)/E;printf("X1= %7.3fX2=%7.3f\n",X1,X2);puts("Нажмите любую клавишу для завершения...");_getch();return 0;}В результате получим следующее (вводимая информация выделена полужирно):Введите A,B,C:1 -5 6A= 1.00X1=B=-5.003.000C= 6.00X2=2.000Нажмите любую клавишу для завершения...Контрольные вопросы к главе 11.
Что такое тип данных и каково его назначение?Ответ.2. Дайте определение литерала. Приведите примеры литералов?Ответ.3. Что такое переменная и как она определяется в С++?Ответ.4. Какие операции над данными определены в С++?Ответ.5. Какие логические поразрядные операции реализованы в С++ и особенности ихвыполнения?Ответ.Оглавление286. Какие операции присваивания Вы знаете? В чем особенности их выполнения?Ответ.7. Что такое выражение? Дайте определение простого выражения.Ответ.8.
Что такое приоритет и ассоциативность операций в С++?Ответ.9. Какие стандартные функции можно использовать в С++ и какую библиотеку для этогонужно подключить?Ответ.10. Что такое форматная строка и как она используется при вводе и выводе данных?Ответ.Оглавление292УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЯЗЫКАУправляющими называют операторы, способные изменять линейность процесса вычислений. К таким операторам относятся оператор условной передачи управления if, оператор выбора switch, операторы циклов while, do, for и операторы безусловной передачи управления goto, break, continue, exit.2.1 Блок операторов и пустой операторПри объявлении управляющих операторов широко используют конструкции «блокоператоров» и «пустой оператор».Блоком операторов называют последовательность операторов, заключенную в фигурные скобки:{<Оператор>;… <Оператор>;}Например:{f=a+b;a+=10;}Особенность блока операторов заключается в том, что при анализе синтаксиса онрассматривается как единый оператор.
Это позволяет использовать его там, где по правилам записи конструкций возможен только один оператор, а по алгоритму программы должны выполняться несколько действий.Пустой оператор включает только символ «;», перед которым нет никакого выражения или не завершенного разделителем оператора. Пустой оператор не предусматриваетвыполнения никаких действий. Он используется там, где синтаксис языка требует присутствия оператора, а по алгоритму программы никакие действия не должны выполняться.2.2 Оператор условной передачи управленияОператором условной передачи управления называют конструкцию, позволяющуювыбрать одну из возможных альтернатив вычислительного процесса в зависимости от результата условия.