Цель работы: Изучить форматы объявлений и работу основных функций ввода/вывода информации. Научиться составлять простые программы с линейным вычислительным процессом.
Теоретические сведения
Одной из основных задач при программировании является ввод и вывод данных. В С для этого применяют ряд функций – printf(), scanf(), cprintf(), ecvt(), fprintf(), fread(), fscanf(), hutc(), puts(), putw(), sprintf(), vprintf(). Функция printf() осуществляет форматированный вывод в поток stdout. Объявление функции находится в заголовочном файле < stdio.h>.
Синтаксис объявления функции
printf() #includ <stdio.h> printf (const char* format [,argument,…]);
В скобках [ ] указаны необязательные элементы спецификации.
Спецификация формата, определяющая вывод аргументов, имеет вид:
%[flags] [width] [.precision] [F/N/h/l/L] type
Функция scanf() - Осуществляет форматированный ввод из потока stdin
Синтаксис # include <stdio.h>
int scanf(const char *format[,adress,...]);
Неотображаемыми символами являются пробел (), символ табуляции (\t), символ перехода на новую строку (\n) и другие управляющие последовательности. Если функция scanf() встречает неотображаемый символ в форматной строке, она будет считывать, но не сохранять всю последовательность символов вплоть до следующего отображаемого символа во входном потоке.
Отображаемыми символами являются все другие символы кода ASCII, за исключением символа процента (%). Если функция scanf() встречает в строке формата отображаемый символ, то она прочитает, и сохранит соответствующий ему символ.
Спецификации формата предписывают функциям scanf() осуществить чтение и преобразование символов из входного поля в значения определенного типа, затем запомнить их в память по адресу, указанному соответствующим адресным аргументом. Завершающий (последний) неотображаемый символ не читается (включая символ перехода на новую строку), если только он не описан явно в форматной строке.
Спецификация формата функции … scanf() имеет следующий вид
% [*] [widht] [F|N] [h|l|L] <type>
Спецификация формата начинается с символа процента (%). После этого символа следуют символы спецификации. Ниже представлено общее описание строки формата scanf(), управляющей формированием потока данных.
Символ или спецификатор
Чем управляет или что определяет
модификаторы типа аргумента
модификаторы размера указателя
Тип short int;
Тип long int (если символ типа указывает на преобразование к целому типу);
Тип double (если символ типа указывает на преобразование к типу c плавающей запятой);
Тип long double(допустим только при преобразованиях к типу c плавающей запятой)
Указатель типа near,
Указатель типа far ;
*- подавление назначения
width – ширина поля
Size
-
-
Отменяет присваивание следующего поля ввода
Максимальное число считываемых символов
Изменяет размер по умолчанию адресного аргумента
Символы типа
Символ
Ожидается на входе
Тип аргумента
d
D
o
O
i
I
u
U
x
X
e, E
f
g, G
s
c
Десятичное целое
Десятичное целое
Восьмеричное целое
Восьмеричное целое
Десятичное целое
Десятичное целое
Десятичное целое без знака
Десятичное целое без знака
Шестнадцатеричное целое
Шестнадцатеричное целое
Число с плавающей запятой
Число с плавающей запятой
Число с плавающей запятой
Строка символов
Символ
Указатель на int (int *arg )
Указатель на long (long *arg )
Указатель на int (int *arg)
Указатель на long (long *arg )
Указатель на int (int *arg)
Указатель на long (long *arg)
Указатель на unsigned int (unsigned int *arg)
Указатель на unsigned long (unsigned long *arg)
Указатель на int (int *arg)
Указатель на long (long *arg)
Указатель на float (float *arg)
Указатель на float (float *arg)
Указатель на float (float *arg)
Указатель на массив символов (char arg[ ])
Указатель на символ (char *arg)
Пример
/* ЗАНЯТИЕ N 2
Разработал Сидоров К.В. */
#include <stdio.h> //Директива препроцессора (#include) включает
#include <conio.h> //Заголовочные файлы с расширением (.h)
#include <string.h>
int a; //Объявление глобальной переменной типа int
int main(void) //Главная функция
{//Начало составного оператора (блока, тела функции)
char c,buf[20]; //Объявление локальных переменных
char *pst="\"slovo\"";//Объявление локальной переменной c
float f=26.6; //инициализацией
double d;
clrscr(); //Функция очистки экрана
printf(" Ввод переменной типа char: "); //Функция вывода на экран
return 0; //Оператор возврата значения из функции (0)
} //Конец составного оператора (блока, тела функции)
/* Результат выполнения программы
Ввод переменной типа char: u
Вывод переменной типа char: u
Ввод переменной типа int: 78
Вывод переменной типа int
Формат вывода (int): +6d #6o #8x
| +78| 0116| 0x4e|
Ввод переменной типа int: 90
Вывод переменной типа int
Формат вывода (int): -6d +6d #8d
|90 | +90| 90|
Вывод исходной cтроки: "slovo"
Ввод cтроки в массив: символы 45!"#:$.;?%;?
Вывод cтроки из массива: символы 45!"#:$.;?%;?
Ввод переменных типа float and double (через пробел):
78.89 6778.0
Вывод переменных типа float and double
Формат вывода (float): 10.6f 10.6e +10.6g
| 78.889999|7.889000e+01| +78.89|
Формат вывода (double): 10.8lf 10.8e 10.8g
|6778.00000000|6.77800000e+03| +6778| */
Ход работы
1 Изучить теоретические сведения.
2 Выполнить загрузку интегрированной среды разработки С (IDE ) для Borland C, расположенной в каталоге N:\APL\BC\BIN\BC.EXE, из активной директории.
3 Ознакомиться с форматом функций printf() и scanf().
4 Скопировать примеры для функций printf, scanf из встроенной помощи в активное окно и изучить их работу. Изучить синтаксические конструкции, приведенные во встроенной помощи.
5 Выполнить загрузку программ-примеров (N:\APL\TC\LAB\*.CPP), их корректировку с использованием различных возможностей функций printf (), scanf (), сохранение файлов и компиляцию.
6 Написать отчет и сделать выводы по работе.
7 Подготовиться к защите лабораторной работы, изучив вопросы по данной теме, изучив контрольные вопросы по теме.
Индивидуальное задание к лабораторной работе №2
Составить программу для форматированного ввода и вывода данных заданного типа согласно индивидуальному заданию приведенному в таблице 2.1.