Мегаобучалка Главная | О нас | Обратная связь


Продолжение таблицы 2.6. – Спецификаторы формата функции scanf()



2016-09-16 290 Обсуждений (0)
Продолжение таблицы 2.6. – Спецификаторы формата функции scanf() 0.00 из 5.00 0 оценок




 

%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>// Для числа пи ( )#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 ( ). Остальные константы можно найти в справочной документации компилятора. Например, через меню Help →Index системы MS Visual Studio 2008.

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

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

 

Рис. 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.

 

Математическая функция Название функции Функция на языке программирования СИ++ Пояснение
арккосинус #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.  
арксинус #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 – функциями.  
арктангенс #include <math.h> double atan(double x); float atanf(float x);   atan и atanf возвращают значения в радианах на промежутке от –pi/2 до pi/2.

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

 

обратный гиперболический тангенс #include <math.h> double atanh(double x); float atanhf(float x);   ни atanh, ни atanhf не являются ANSI C - функциями.  
кубический корень #include <math.h> double cbrt(double x); float cbrtf(float x);   Является стандартной функцией ANSI C
гиперболический косинус #include <math.h> double cosh(double x); float coshf(float x);   Углы определены в радианах.  
экспонента числа #include <math.h> double exp(double x); float expf(float x);   Является стандартной функцией ANSI C
модуль числа (абсолютная величина) #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
натуральный логарифм #include <math.h> double log(double x); float logf(float x);   Является стандартной функцией ANSI C
логарифм по основанию 10 #include <math.h> double log10(double x); float log10f(float x);   log10 возвращает значение логарифма по основанию 10 от х. Он определяется как ln(х)/ln(10).  
возведение основания х в степень у #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. – Математические функции в языке программирования СИ++

 

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

 

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

 

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

 

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

/*

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

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

*/

#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.3. Окно вывода результата Примера 2



2016-09-16 290 Обсуждений (0)
Продолжение таблицы 2.6. – Спецификаторы формата функции scanf() 0.00 из 5.00 0 оценок









Обсуждение в статье: Продолжение таблицы 2.6. – Спецификаторы формата функции scanf()

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (290)

Почему 1285321 студент выбрали МегаОбучалку...

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

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)