Как вводить и выводить информацию
Операции ввода/вывода в языке Си организованы посредством библиотечных функций (их довольно много). Описания заголовков библиотечных функций стандартного ввода/вывода находятся в заголовочном файле stdio.h. Чтобы библиотечные функции стали доступны программе, к ней необходимо подключить данный файл. Подключение осуществляется с помощью директивы препроцессора #include <stdio.h> помещаемой в начало программы. Самый простой механизм ввода - чтение по одному символу из стандартного входного потока (с клавиатуры) с помощью функции getchar( ). Она имеет следующий прототип (т.е. описание заголовка): int getchar(void); Здесь определен тип единственного аргумента (void) и тип возвращаемого функцией значения (int). Оператор вида: х = getchar( ); присваивает переменной х очередной вводимый символ. Переменная х должна иметь символьный или целый тип. Заметим, что для функции getchar( ) после выбора символа необходимо нажать клавишу <Enter>. Иногда это создает определенные неудобства. Функции getch( ) и getche( ) устраняют их. Они имеют следующие прототипы: int getch(void); int getche(void); Обе эти функции вводят символ сразу же после нажатия соответствующей клавиши (здесь не надо дополнительно нажимать клавишу <Enter>). Отличие между ними заключается в том, что getche( ) отображает вводимый символ на экране дисплея, а getch( ) - нет. Прототипы этих функций содержатся в файле conio.h (консольный ввод/вывод). Для их использования файл conio.h также следует подключить к программе с помощью директивы #include . Другая функция - putchar(х) выдает значение переменной x в стандартный выходной поток (на экран дисплея). Функция putchar( ) имеет прототип: int putchar(int); Форматированный вывод на экран. Функция printf( ) (прототип содержится в файле stdio.h) обеспечивает форматированный вывод. Ее можно записать в следующем формальном виде: рrintf ("управляющая строка", аргумент _1, аргумент _2,...); Управляющая строка содержит компоненты трех типов: обычные символы, которые просто копируются в стандартный выходной поток (выводятся на экран дисплея); спецификации преобразования, каждая из которых вызывает вывод на экран очередного аргумента из последующего списка; управляющие символьные константы. Каждая спецификация преобразования начинается со знака % и заканчивается некоторым символом, задающим преобразование. Между знаком % и символом преобразования могут встречаться другие знаки в соответствии со следующим форматом: % [признаки] [ширина_поля] [точность] c_n Все параметры в квадратных скобках не являются обязательными. На месте параметра c_n (символ преобразования) могут быть записаны: с - значением аргумента является символ; d или i - значением аргумента является десятичное целое число; е или Е - значением аргумента является вещественное десятичное число в экспоненциальной форме вида 1.23e+2 или 1.23E+2; f - значением аргумента является вещественное десятичное число с плавающей точкой; g (или G) - используется, как е или f, и исключает вывод незначащих нулей; о - значением аргумента является восьмеричное целое число; s - значением аргумента является строка символов (символы строки выводятся до тех пор, пока не встретится символ конца строки или же не будет, выведено число символов, заданное точностью); u - значением аргумента является беззнаковое целое число; х или Х - значением аргумента является шестнадцатеричное целое число с цифрами 0,..., 9, а, b, с, d, е, f или 0,..., 9, А, В, С, О, Е, F; р - значением аргумента является указатель; Необязательные параметры в спецификации преобразования: признак минус (-) указывает, что преобразованный параметр должен быть выровнен влево в своем поле; признак плюс (+) требует вывода результата со знаком; строка цифр, задающая минимальный размер поля (ширина поля). Здесь может так же использоваться символ *, который тоже позволяет задать минимальную ширину поля и точность представления выводимого числа; точка (.), отделяющая размер поля от последующей строки цифр; строка цифр, задающая максимальное число выводимых символов, или же количество цифр, выводимых справа от десятичной точки в значениях типов float или double (точность); Если после знака % записан не символ преобразования, то он выводится на экран. Таким образом, строка %% приводит к выводу на экран знака %. Функция printf( ) использует управляющую строку, чтобы определить, сколько всего аргументов и каковы их типы. Аргументами могут быть переменные, константы, выражения, вызовы функций; главное, чтобы их значения соответствовали заданной спецификации. При наличии ошибок, например, в числе аргументов или типе преобразования, результаты будут неверными. Среди управляющих символьных констант наиболее часто используются следующие: \а - для кратковременной подачи звукового сигнала; \b - для перевода курсора влево на одну позицию; \f - для подачи формата; \n - для перехода на новую строку; \r - для возврата каретки; \t - горизонтальная табуляция; \v - вертикальная табуляция; \\ - вывод символа \; \' - вывод символа ' ; \" - вывод символа "; \? - вывод символа ?. Например, в результате вызова функции: printf("\tComputer\n%d\n", i); Сначала выполняется горизонтальная табуляция (\t), т.е. курсор сместится от края экрана, затем на экран будет выведено слово Computer, после этого курсор переместится в начало следующей строки (\n), затем будет выведено целое число i по формату %d (десятичное целое), и, окончательно, курсор перейдет в начало новой строки (\n). Напечатать строку символов можно и так: printf("Это строка символов"); После выполнения следующих операторов float m, p; int k; m=84.3; k=–12; p=32.15; printf(“\nm=%f\tk=%d\tp=%e”, m, k, p); на экран выведется строка: m=84.299999 k=–12 p=3.21500e+01 Внесем изменения в оператор вывода для рассмотренного выше примера. printf(“\nm=%5.2f\tk=%5d\tp=%8.2e\tp=%11.4e”,m, k, p, p); В результате на экране получим: m=84.30 k= –12 p= 32.15 p= 3.2150e+01 Если в пределы указанной ширины поля выводимое значение не помещается, то этот параметр игнорируется, и величина будет выводиться полностью. Форматированный ввод. Функция scanf( ) (прототип содержится в файле stdio.h) обеспечивает форматированный ввод. Ее можно записать в следующем формальном виде: scanf("управляющая строка", аргумент_1, аргумент_2,...); Аргументы scanf( ) должны быть указателями на соответствующие значения. Для этого перед именем переменной записывается символ &. Назначение указателей будет рассмотрено далее. Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. В нее могут включаться: · пробелы, символы табуляции и перехода на новую строку (все они игнорируются); · спецификации преобразования, состоящие из знака %, возможно, символа * (запрещение присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования; · обычные символы, кроме % (считается, что они должны совпадать с очередными неизвестными символами во входном потоке). Рассмотрим символы преобразования функции scanf( ) (указываются после символа %): с - на входе ожидается появление одиночного символа; d или i - на входе ожидается десятичное целое число и аргумент является указателем на переменную типа int; D или l - на входе ожидается десятичное целое число и аргумент является указателем на переменную типа long; е или Е - на входе ожидается вещественное число с плавающей точкой; f - на входе ожидается вещественное число с плавающей точкой; о - на входе ожидается восьмеричное целое число и аргумент является указателем на переменную типа int; О - на входе ожидается восьмеричное целое число и аргумент является указателем на переменную типа long; s - на входе ожидается появление строки символов; х - на входе ожидается шестнадцатеричное целое число и аргумент является указателем на переменную типа int; Х - на входе ожидается шестнадцатеричное целое число и аргумент является указателем на переменную типа long. Ввести целое число (int a;), символ (char b;) и вещественное число (float t;) можно так: scanf("%d", &a); scanf("%c", &b); scanf("%f", &t); или scanf("%d%c%f",&a, &b, &t); В этом случае последовательность ввода должна выглядеть например так -5 К2.4 <Enter> Переменные получат следующие значения: a=-5, b=К, c=2.4. Разделителем в потоке ввода между различными значениями числовыми может быть любое количество пробелов, а также другие «пробельные» символы: знак табуляции, конец строки. Только после нажатия клавиши <Enter> вводимые значения присвоятся соответствующим переменным. До этого входной поток помещается в буфер клавиатуры и может редактироваться. В спецификациях ввода функции scanf() допустимо использование модификаторов ‘h’, ‘l’, ‘L’. Они применяются при вводе значений модифицированных типов: hd – для ввода значений типа short int; ld – для ввода значений типа long int; lf, le – для ввода значений типа double в форме с фиксированной и плавающей точкой; Lf, Le - для ввода значений типа long double в форме с фиксированной и плавающей точкой. Потоковый ввод-вывод в Си++.Программируя на языке Си++, можно пользоваться средствами ввода-вывода стандартной библиотеки Си, подключаемой с помощью заголовочного файла stdio.h, как это делалось выше. Однако в Си++ имеются свои специфические средства ввода-вывода. Это библиотека классов, подключаемая к программе с помощью файла iostream.h. В этой библиотеке определены в качестве объектов стандартные символьные потоки со следующими именами: cin - стандартный поток ввода с клавиатуры; cout – стандартный поток вывода на экран. Ввод данных интерпретируется как извлечение из потока cin и присваивание значений соответствующим переменным. В Си++ определена операция извлечения из стандартного потока, знак которой “>>”. Например, ввод значений в переменную х реализуется оператором: cin>>x; Вывод данных интерпретируется как помещение в стандартный поток cout выводимых значений. Выводится могут тексты, заключенные в двойные кавычки и значения выражений. Знак операции помещения в поток – “<<”. Примеры использования потокового вывода: cout<<a+b; cout<<”\nРезультат=”<<Y; cout<<”x=”<<x<<” y=”<<y<<” z=”<<z<<endl; Из приведенных примеров видно, что в выходном потоке можно использовать управляющие символы, как и при использовании функции printf(); перед каждым элементом вывода нужно ставить знак операции “<<”. Элемент вывода “endl” является так называемым манипулятором, определяющим перевод курсора на новую строку (действует аналогично управляющему символу ‘\n’). В процессе потокового ввода-вывода происходит преобразование из формы внешнего символьного представления во внутренний формат и обратно. Тип данных и необходимый формат определяются автоматически. Стандартные форматы задаются специальными флагами форматирования, которые устанавливаются с помощью функции setf(). Математические функции. Для того, чтобы вычислить значение очень часто требуются функции. Все функции в языке СИ/С++ собраны в библиотеки. Математические функции находятся в библиотеке math.h, которая подключается с помощью директивы препроцессора #include <math.h>. Наиболее часто используемые математические функции приведены в следующей таблице
Линейные программы.Линейные алгоритмы реализуются с помощью оператора присваивания и ввода/вывода. Пример 1. Дано: a, b, c – стороны треугольника. Вычислить S - площадь треугольника. По формуле Герона: где p – полупериметр треугольника. Вариант 1 с использование форматированного ввода/вывода.
/*подключение бтблиотек*/ #include <stdio.h> #include<math.h> void main()//главная функция {float a,b,c,p,s; printf(²\na=²); scanf(²%f²,&a);//ввод значения а printf(²\nb=²); scanf(²%f²,&b);//ввод значения b printf(²\nc=²); scanf(²%f²,&c);//ввод значения с p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c));//вычисление площади /*вывод результата на экран*/ printf(²\nПлощадь треугольника=%f²,s); } Вариант 2 с использованием потокового ввода/вывода. #include <iostream.h> #include<math.h> void main() {float a,b,c,p,s; cout<<²\na=²; cin>>a; cout<<²\nb=²; cin>>b; cout<<²\nc=²; cin>>c; p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); cout<<²\nПлощадь треугольника=²<<s; } Упражнения 1. Приведенная ниже программа решает следующую задачу: идет К-я секунда суток. Определить, сколько целых часов (Н) и целых минут (М) прошло с начала суток. Например, если К=13257=3*36000+40*60+57, то H=3, М=40. Вывести на экран фразу: «Это … часов … минут». Вместо многоточий поставить вычисленные значения Н и М. #include <stdio.h> void main() {long k; int h,m; printf(²Введите текущее время в секундах:²); scanf(²%ld²,&k); h=k/3600; m=(k%3600)/60; printf(²Это %d часов %d минут.\n²,h,m); } Разберитесь в данной программе. Перепишите программу с использованием потокового ввода-вывода Си++. 2. Составить программу вычисления объема и площади поверхности куба по данной длине ребра.
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1069)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |