Стандартные математические функции

Функции вывода информации

Для вывода информации в языке С используются следующие функции:

Функция putchar()– вывод одиночного символа без перехода на новую строку.

Функция puts()– вывод строки символов с переходом на начало новой строки.

Функция printf()– для форматированного вывода данных. Ее формат:

рrintf(<управляющая строка>, <список аргументов>);

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

Спецификация преобразования имеет вид:

Lt;флаг> <размер поля . точность> спецификация

где флагможет принимать следующие значения:

-выравнивание влево выводимого числа;

+выводится знак положительного числа;

размер поля– задает минимальную ширину поля. При недостаточной ширине поля выполняется автоматическое расширение;

точность– задает точность числа, т. е. количество цифр в его дробной части;

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

Формат Тип выводимой информации
%d (%i) десятичное целое число
%c один символ
%s строка символов
%e число с плавающей точкой (экспоненциальная запись)
%f число с плавающей точкой (десятичная запись)
%u десятичное число без знака
%o восьмеричное число без знака
%x шестнадцатеричное число без знака

Для длинных чисел (long, double)– используется дополнительный формат l.

Например: %ld - длинное целое, %lf – вещественное число с удвоенной точностью.

При необходимости вывода символа %его нужно указать 2 раза.

Например: printf("Только %d%% предприятий не работало.\n",5);

Получим: Только 5% предприятий не работало.

Управляющая строкаможет содержать следующие управляющие символы:

\n– переход на новую строку;

\t– горизонтальная и \v– вертикальная табуляция;

\b– возврат назад на один символ;

\r– возврат в начало строки;

\f– прогон бумаги до начала новой страницы;

\a– звуковой сигнал;

\ddd– 8-ричный ASCII-код;

\xhhh– 16-ричный код;

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

Пример:

#include <stdio.h>

#define PI 3.1415926

main()

{

int number=5, cost=11000, s=-777;

float bat=255, x=12.345;

printf ("Значение числа pi равно%f.\n", PI);

printf ("Стоимость этой вещи %d%s.\n", cost,"Руб.");

printf ("x=%-8.4f s=%5d%8.2f ", x, s, x); }

Функции ввода информации

Функция getch ()– для ввода одиночных символов.

Функция gets ()– ввод строки символов до нажатия клавиши ENTER.

Функция scanf()предназначена для форматированного ввода информации любого вида. Общий вид функции:

scanf(<управляющая строка>, < список адресов объектов ввода>);

В <управляющей строке> указываются только модификаторы форматов, при этом их количество и порядок следования должны совпадать с количеством и порядком следования вводимых объектов. Функция scanf(), в отличие от функции printf(), использует в списке адресов указатели на переменные, т.е. их адреса, для чего перед именем переменной записывается символ &, обозначающий адрес переменной. Для ввода значений строковых переменных символ & не используется. При использовании формата %s строка вводится до первого пробела. Вводить данные с клавиатуры можно как в одной строке через пробел(ы), так и в разных строках.

Данные при вводе разделяются пробелами, символами перевода строки или табуляции, но не запятыми.

Пример:

int course;

float grant;

char name[20];

printf ( "Укажите ваш курс, стипендию, имя \n");

scanf ( "%d%f", &course, &grant);

scanf ("%s", name); /* & отсутствует при указании массива символов */

Стандартные математические функции

Для подключения математических функций используется директива #include <math.h>. Аргументы x, yи результат функцииимеют тип double. Аргументы тригонометрических функций задаются в радианах.

Математическая функция Имя функции в языке С Математическая функция Имя функции в языке С
Корень из x sqrt(x) arcsin(x) asin(x)
|x| fabs(x) arccos(x) acos(x)
ex exp(x) arctg(x) atan(x)
xy pow(x,y) arctg(x/y) atan2(x,y)
ln(x) log(x) sh(x)=1/2 (ex-e-x) sinh(x)
lg10(x) log10(x) ch(x)=1/2 (ex+e-x) cosh(x)
sin(x) sin(x) tgh(x) tanh(x)
cos(x) cos(x) Остаток от деления x на y fmod(x,y)
tg(x) tan(x) Наименьшее целое >=x ceil(x)
Наибольшее целое <=x floor(x)

Операторы выбора

В языке программирования С++ существует два оператора выбора:

1) Оператор выбора if

2) Оператор выбора switch

Операторы выбора позволяют принять программе решение, основываясь на истинности или ложности условия. Если условие истинно (т. е. равно true) значит, оператор в теле if выполняется, после чего выполняется следующий по порядку оператор. Если условие ложно (т. е. равно false) значит, оператор в теле if не выполняется (игнорируется или пропускается) и сразу же выполняется следующий по порядку оператор. Проверяемое условие может быть любым логическим выражением. Логические выражения могут быть образованы операциями равенства и отношения.

Операция в С++ Условие Смысл записанных условий в С++
== a==b a равно b
!= a != b a не равно b
> a > b a больше b
< a < b a меньше b
>= a >= b a больше или равно b
<= a <= b a меньше или равно b

Очень частой ошибкой программирования является неправильная запись операций равенства и соотношений. Пробелов между знаками ==; !=; >=; <=; быть не должно. Также необходимо помнить правильную последовательность записи символов операций равенства и отношений.

Нельзя путать операцию = (операция присваивания) и операцию == (операция равенства) так как это приводит к логическим ошибкам, т. е. программа даже скомпилируется без всяких ошибок, но работать будет не правильно.

Условный оператор или оператор выбора if записывается в двух формах, рассмотрим первую.

  if (/*проверяемое условие*/) { //тело условного оператора }

Фигурные скобочки тела условного оператора можно опускать, если при истинности условия необходимо выполнить один оператор. Пример:

  if (/*проверяемое условие*/) /*оператор1*/;

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

Рассмотрим простейший пример использования оператора if. Условие задачи: даны два числа, необходимо их сравнить.

#include <iostream> using namespace std; int main() { int a, b; cout << "Vvedite pervoe chislo: "; cin >> a; cout << "Vvedite vtoroe chislo: "; cin >> b; if (a > b) // если а > b { cout << a << " > " << b << endl; // печатать данное сообщение } if (a < b)// если а < b { cout << a << " < " << b << endl; } if (a == b) // если а = b cout << a << " = " << b << endl; // в теле условного оператора опущены фигурные скобочки system("pause"); return 0; }

Еще одну логическую ошибку часто делают, когда ставят точку с запятой сразу за правой круглой скобкой оператора if.

if (a == b); // логическая ОШИБКА cout << a << " = " << b << endl;

В этом случае программ скомпилируется и запустится, но уже будет работать не правильно. Ошибка заключается в том, что у данного ифа уже нет оператора входящего в его тело, то есть if пустой. И уже неважно истинно условие или нет оператор вывода cout << a << " = " << b << endl; будет срабатывать всегда.

Оператор с двойным выбором if else:

if (условие) оператор1;

else оператор2;

Например: if(x>y) max=x;

else max=y;

Если оператор1 или оператор2 содержат два и более операторов, то они заключаются в фигурные скобки { }.

Итак мы рассмотрели оператор с одиночным выбором if и оператор с двойным выбором if else, но в С++ еще имеется оператор множественного выбора switch, который мы сейчас детально рассмотрим.

// форма записи оператора множественного выбора switch switch (/*переменная или выражение*/) { case /*константное выражение1/*: { /*группа операторов*/; break; } case /*константное выражение2*/: { /*группа операторов*/; break; } //. . . default: { /*группа операторов*/; } }

На начальном этапе анализируется выражение или переменная. После чего осуществляется переход к той ветви программы, для которой значение переменной или выражения совпадает с указанным константным выражением. Далее выполняется оператор или группа операторов пока не встретится зарезервированное слово break или закрывающая фигурная скобочка. Если значение переменной или выражения не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default. После чего выполняется оператор или группа операторов данной ветви. Сейчас рассмотрим задачу с использованием оператора выбора switch.

Условие задачи: написать программу, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры. Разработать пользовательский интерфейс.

#include <iostream> using namespace std;   int main() { int count; // переменная для выбора в switch double a,b; // переменные для хранения операндов cout << "Vvedite pervoe chislo: "; cin >> a; cout << "Vvedite vtoroe chislo: "; cin >> b; cout << "Vibirite deistvie: 1-clojenie; 2-vichitanie; 3-ymnojenie; 4-delenie: "; cin >> count; switch (count) // начало оператора switch { case 1: // если count = 1 { cout << a << " + " << b << " = " << a + b << endl; // выполнить сложение break; } case 2: // если count = 2 { cout << a << " - " << b << " = " << a - b << endl; // выполнить вычитание break; } case 3: // если count = 3 { cout << a << " * " << b << " = " << a * b << endl; // выполнить умножение break; } case 4: // если count = 4 { cout << a << " / " << b << " = " << a / b << endl; // выполнить деление break; } default: // если count равно любому другому значению cout << "Nepravilni vvod" << endl; } system("pause"); return 0; }

Условие задачи:даны действительные числа a, b, c. Полностью исследовать биквадратное уравнение ax4+bx2+c=0, т. е. если действительных корней нет, то должно быть выдано сообщение об этом, иначе должны быть выданы два или четыре корня.

//ax4+bx2+c=0, ay2+by+c=0, D=b2-4ac, корни (-b±sqrt(D))/2*a #include <iostream> #include <cmath> using namespace std; int main(){ double a(4),x,c(1),b(-5),y; //4x4-5x2+1=0 int D; D=pow(b,2)-4*a*c; //Поиск дискриминанта по формуле if (D>0){ y= sqrt((-b+sqrt(D)) / (2*a)); cout<<y<<"\n"<<-y<<"\n"; y= sqrt((-b-sqrt(D)) / (2*a)); cout<<y<<"\n"<<-y<<"\n"; } if (D==0) { y=-b/2*a; cout<<y<<"\n"<<-y<<"\n"; } if (D<0) { cout<<"not ans\n"; } }

· Даны два числа X и Y проверить истинность того что оба числа четные.

#include <iostream> using namespace std; int main(){ int x,y; cout<<"X: "; cin>>x; cout<<"Y: "; cin>>y; if ((x%2) || (y%2)) cout<<"uneven numbers\n"; //нечетное else cout<<"even numbers\n"; //четное }

Внимание! В С++ знаками || обозначается операция логическое ИЛИ, && - логическое И, ! – логическое НЕ.

Задачи для решения:

· Даны действительные числа х, у. Меньшее из этих двух чисел заменить их полусуммой, а большее — их удвоенным произведением

· Даны два действительных числа. Вывести первое число, если оно больше второго, и оба числа, если это не так

· Даны действительные положительные числа а, b, с, х, у. Выяснить, пройдет ли кирпич с ребрами а, b, с в прямоугольное отверстие со сторонами х и у. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия

· Даны два числа X и Y определить истинность высказывания: Только одно из чисел нечетное

· Дано четыре числа, вывести на экран то, которое меньшее и то, которое большее с соответствующим обобщением: большее число ___, меньшее число ___

· Даны координаты начала и координаты конца отрезка. Если считать отрезок обозначением горки, то в одном случае он обозначает спуск, в другой подъем. Определить и вывести на экран спуск это или подъем, ровная дорога или вообще ровная вниз

· Игральные карты обозначены следующим образомМасти — 1,2,3,4 (бубны, трефы, червы, пики). Достоинства — 11,12,13,14 (Валет, Дама, Король, Туз). Даны два числа, обозначающих достоинство и масть карты. Первое число Nпринадлежит диапазону (6<=N<=14), второе число M принадлежит диапазону (1<=M<=4) Вывести название соответствующей карты (Шестерка бубен, тройка червей в соответствии с тем, что ввел пользователь)

· В восточном календаре принят 60 летний цикл, состоящий из 12 летних под циклов, обозначаемых названиями цвета: Зеленый, Красный, желтый, белый и черный. В каждом цикле годы носят названия животных: Крысы, Коровы, Тигра, Зайца, Дракона, Змеи, Лошади, Овцы, Обезьяны, Курицы, Собаки и Свиньи. По номеру года определить его название если 1984 год начало цикла: Год зеленой крысы

· Дано трехзначное число. Вывести его словесное описание (345 = Триста сорок пять)

· Напишите программу тест. Пользователю задается вопрос и предлагается 3 варианта ответа. Нужно задать три вопроса. Только один ответ в каждом вопросе правильный. Пользователь выбирает вариант (1,2 или 3) и задается следующий вопрос. В процессе ведется подсчет верных и неверных ответов. После всех вопросов отобразить результаты теста.

· Пользователь вводит два числа. Вы задаете вопрос a*b=___ (a и b числа введенные пользователем) Пользователь должен ввести свой ответ. Надо проверить правильность ответа и сообщить пользователю

· Написать программу, которая дописывает рубль в правильной форме (от 1 до 999)
1 = 1рубль, 20=20 рублей, 3=3 рубля

Наши рекомендации