Продолжение таблицы 2.6. €

%F Аналогично коду %f (для стандарта С99)
%g Читает число с плавающей точкой.
%G Аналогично коду %g
%o Читает восьмеричное число
%x Читает шестнадцатеричное число
%X Аналогично коду %x
%s Читает строку
%p Читает указатель
%n Принимает целое значение, равное количеству прочитанных до сих пор символов
%[ ] Просматривает набор символов
%% Читает знак процента

Строка форматирования читается слева направо, и спецификации формата сопоставляются с аргументом в порядке их перечисления в списке аргументов. Символ *, стоящий после знака % и перед кодом формата, прочитает данные заданного типа, но запретит их присваивание. Команды форматирования могут содержать модификатор максимальной длины поля. Он представляет собой целое число, располагаемое между знаком % и кодом формата, которое ограничивает количество читаемых для всех полей символов. Если входной поток содержит больше заданного количества символов, то при последующем обращении к операции ввода чтение начнется с того места, в котором "остановился" предыдущий вызов функции scanf() [2.3]. Если разделитель (например, пробел) встретится раньше, чем достигнута максимальная ширина поля, то ввод данных завершится. В этом случае функция scanf() переходит к чтению следующего поля. При чтении одиночных символов символы табуляции и разделители строк читаются подобно любому другому символу.

В программах бывает необходимость определять константы. В языке С типы констант можно задавать явно при использовании суффиксов. Например:

long int j = –12345678L; /* суффикс L */unsigned int a = 678U; /* суффикс U */float x = 123.45F; /* суффикс F */long double z = 12345678.99L; /* суффикс L* /

По умолчанию спецификации f, e, g заставляют функцию scanf() присваивать переменным типа float. Если перед одной из этих спецификаций поставить модификатор l, то функция scanf() присвоит прочитанные данные переменной типа double.

Функция scanf() поддерживает спецификатор формата общего назначения, называемый набором сканируемых символов. В этом случае определяется набор символов, которые могут быть прочитаны функцией scanf() и присвоены соответствующему массиву символов. Для определения такого набора символы, подлежащие сканированию, необходимо заключить в квадратные скобки. Открывающая квадратная скобка должна следовать сразу за знаком процента. При использовании набора сканируемых символов функция scanf() продолжает читать символы и помещать их в соответствующий массив символов до тех пор, пока не встретится символ, отсутствующий в данном наборе. Если первый символ в наборе является знаком "^", то получится обратный эффект: входное поле читается до тех пор, пока не встретится символ из заданного набора сканируемых символов, т.е. знак "^" заставляет функцию scanf() читать только те символы, которые отсутствуют в наборе сканируемых символов. Если в строке форматирования встретился символ, отличный от разделителя, то функция scanf() прочитает и отбросит его. Если заданный символ не найден, то функция scanf() завершает работу.

В таких средах разработки как MS Visual Studio 2008 и 2010 рекомендуется для безопасной работы применять функции gets_s() и scanf_s(). Для этих функций при чтении символа или строки следует указать размер в байтах, соответственно для символа или строки. Например, scanf_s("%c", &ch, 1). В Visual Studio 2010 тип данных char занимает 1 байт.

Практическая часть.

Пример 1.Напишите программу вычисления площади круга и его длины окружности по заданному радиусу, вводимого пользователем с клавиатуры, а также вывода на консоль максимальных значений чисел типа int, float и double.

Для решения примера следует воспользоваться математической библиотекой компилятора, т. е. включить в программу заголовочный файл <math.h>., а также заголовочные файлы <limits.h>, <float.h>.

Программный код решения примера:

#include <stdio.h>#include <conio.h>// Для числа пи ( Продолжение таблицы 2.6. € - student2.ru )#define _USE_MATH_DEFINES#include <math.h>#include <limits.h>#include <float.h>int main (void){double R, Sr, Lr;printf("\n Enter a real greater than zero: ");scanf_s("%lf", &R);Sr = M_PI*R*R;Lr = 2*M_PI*R;printf("\n Area of a circle of radius R = %g is %g", R, Sr);printf("\n The length of a circle of radius R = %g is %g",R,Lr);puts("");printf("\n Maximum integer: %d\n ", INT_MAX);printf(" Maximum real number of float: %g\n ", FLT_MAX);printf("Maximum real number type double: %g\n ", DBL_MAX); printf("\n Press any key: "); _getch(); return 0;}

В программу включена константа _USE_MATH_DEFINES для работы с числом M_PI ( Продолжение таблицы 2.6. € - student2.ru ). Остальные константы можно найти в справочной документации компилятора. Например, через меню Help →Index системы MS Visual Studio 2008.

Функция scanf_s() определена в компиляторе языка С системы MS Visual Studio 2008. С этой функцией компилятор не выдает предупреждений.

Результат выполнения программы показан на рис. 2.1 .

Продолжение таблицы 2.6. € - student2.ru

Рис. 2.1. Пример использования предопределенных констант

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

Функции printf() выводят либо только сообщения, либо еще заданные переменные соответствующих типов.

Функция gets() позволяет считывать символы с наличием разделителей, в частности, с пробелами. В Microsoft Visual Studio 2010 рекомендуется использовать gets_s(), чтобы не было предупреждений.

Следует обратить внимание на формат записи функций scanf(). Если сканируются числа, или одиночные символы, то присваивание этих символов переменным, которые были объвлены через соответствующие типы данных, осуществляется с помощью взятия адреса этих переменных, т.е. с помощью символа &, например, scanf_s(«%c»,&ch, 1). При сканировании массива символов, т.е. при сканировании строки, символ & не используется. Имя массива само по себе является указателем. Обращение к адресу осуществляется с помощью указателей (будут рассмотрены позднее). Для сканирования чисел типа double в функции scanf_s() используется спецификатор l.

2.2.1. Математические функции в языке программирования СИ++

Таблица 2.7.

Математическая функция Название функции Функция на языке программирования СИ++ Пояснение
Продолжение таблицы 2.6. € - student2.ru арккосинус #include <math.h> double acos(double x); float acosf(float x);   аргумент для acos должен находиться в отрезке [-1,1]. Acos и acosf возвращают значения в радианах на промежутке от 0 до pi.
Arccosh(x) обратный гиперболический косинус #include <math.h> double acosh(double x); float acoshf(float x); x должен быть больше либо равен 1.  
Продолжение таблицы 2.6. € - student2.ru арксинус #include <math.h> double asin(double x); float asinf(float x);   аргумент для asin должен находиться в отрезке [-1,1]. Asin и asinf возвращают значения в радианах в промежутке от –pi/2 до pi/2.
Arcsinh(x) обратный гиперболический синус #include <math.h> double asinh(double x); float asinhf(float x);   ни atanh, ни atanhf не являются ANSI C – функциями.  
Продолжение таблицы 2.6. € - student2.ru арктангенс #include <math.h> double atan(double x); float atanf(float x);   atan и atanf возвращают значения в радианах на промежутке от –pi/2 до pi/2.

Продолжение таблицы 2.7. – Математические функции в языке программирования СИ++

Продолжение таблицы 2.6. € - student2.ru обратный гиперболический тангенс #include <math.h> double atanh(double x); float atanhf(float x);   ни atanh, ни atanhf не являются ANSI C - функциями.  
Продолжение таблицы 2.6. € - student2.ru кубический корень #include <math.h> double cbrt(double x); float cbrtf(float x);   Является стандартной функцией ANSI C
Продолжение таблицы 2.6. € - student2.ru гиперболический косинус #include <math.h> double cosh(double x); float coshf(float x);   Углы определены в радианах.  
Продолжение таблицы 2.6. € - student2.ru экспонента числа #include <math.h> double exp(double x); float expf(float x);   Является стандартной функцией ANSI C
Продолжение таблицы 2.6. € - student2.ru модуль числа (абсолютная величина) #include <math.h> double fabs(double x); float fabsf(float x);   Является стандартной функцией ANSI C
Min и max наименьшее и наибольшее ближайшие целые   #include <math.h> double floor(double x); float floorf(float x); double ceil(double x); float ceilf(float x);   Является стандартной функцией ANSI C

Продолжение таблицы 2.7. – Математические функции в языке программирования СИ++

mod остаток от деления в виде числа с плавающей точкой #include <math.h> double fmod(double x, double y); float fmodf(float x, float y);   Является стандартной функцией ANSI C
Продолжение таблицы 2.6. € - student2.ru натуральный логарифм #include <math.h> double log(double x); float logf(float x);   Является стандартной функцией ANSI C
Продолжение таблицы 2.6. € - student2.ru логарифм по основанию 10 #include <math.h> double log10(double x); float log10f(float x);   log10 возвращает значение логарифма по основанию 10 от х. Он определяется как ln(х)/ln(10).  
Продолжение таблицы 2.6. € - student2.ru возведение основания х в степень у #include <math.h> double pow(double x, double y); float powf(float x, float y);   Является стандартной функцией ANSI C
rint, rintf, округление до ближайшего целого #include <math.h> double rint(double x); float rintf(float x); Является стандартной функцией ANSI C
  остаток от деления х/у double remainder(double x, double y); float remainderf(float x, float y); это будет число между –y/2 и y/2.

Продолжение таблицы 2.7. – Математические функции в языке программирования СИ++

Продолжение таблицы 2.6. € - student2.ru квадратный корень из числа #include <math.h> double sqrt(double x); float sqrtf(float x);   вычисляет арифметический (неотрицательный) квадратный корень из аргумента
Продолжение таблицы 2.6. € - student2.ru синус #include <math.h> double sin(double x); float sinf(float x);   Углы определены в радианах.  
Продолжение таблицы 2.6. € - student2.ru косинус #include <math.h> double cos(double x); float cosf(float x); Углы определены в радианах.  
Продолжение таблицы 2.6. € - student2.ru гиперболический синус #include <math.h> double sinh(double x); float sinhf(float x);   Углы определены в радианах.  
Продолжение таблицы 2.6. € - student2.ru тангенс #include <math.h> double tan(double x); float tanf(float x);   Углы определены в радианах.
Продолжение таблицы 2.6. € - student2.ru гиперболический тангенс #include <math.h> double tanh(double x); float tanhf(float x);   Углы определены в радианах. tanh(x) определяется как sinh(x)/cos(x)

Пример 2. Создать блок-схему к программе и программу на языке программирования Си++ для вычисления функции В, которая зависит от трех переменных x, y, z. Ввод значений переменных сделать с клавиатуры, если Продолжение таблицы 2.6. € - student2.ru , где Продолжение таблицы 2.6. € - student2.ru

Продолжение таблицы 2.6. € - student2.ru

Рис. 2.2. Окно программы Примера 2

Программный код решения примера:

Продолжение таблицы 2.6. € - student2.ru /*

* Вторая программа на языке СИ

* Автор Загребельный С.Л.

*/

#include <stdio.h>

#include <conio.h>

#define _USE_MATH_DEFINES

#include <math.h>

#include <limits.h>

#include <float.h>

int main (void)

{

double x,y,z,b;

printf("\n Enter x = ");

scanf_s("%lf", &x);

printf("\n Enter y = ");

scanf_s("%lf", &y);

z=pow((x+y),3);

printf("\n z = %1.2f", z);

b=pow(x,2)+3*x*y+sqrt(z);

printf("\n b = %lf ",b);

printf("\n press any key ");

_getch();

return 0;

}

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

Продолжение таблицы 2.6. € - student2.ru

Рис. 2.3. Окно вывода результата Примера 2

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