Продолжение таблицы 2.6. – Спецификаторы формата функции scanf()
Строка форматирования читается слева направо, и спецификации формата сопоставляются с аргументом в порядке их перечисления в списке аргументов. Символ *, стоящий после знака % и перед кодом формата, прочитает данные заданного типа, но запретит их присваивание. Команды форматирования могут содержать модификатор максимальной длины поля. Он представляет собой целое число, располагаемое между знаком % и кодом формата, которое ограничивает количество читаемых для всех полей символов. Если входной поток содержит больше заданного количества символов, то при последующем обращении к операции ввода чтение начнется с того места, в котором "остановился" предыдущий вызов функции 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.
Продолжение таблицы 2.7. – Математические функции в языке программирования СИ++
Продолжение таблицы 2.7. – Математические функции в языке программирования СИ++
Продолжение таблицы 2.7. – Математические функции в языке программирования СИ++
Пример 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
Популярное: Почему стероиды повышают давление?: Основных причин три... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (308)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |