Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмізація та програмування.docx
Скачиваний:
84
Добавлен:
17.05.2015
Размер:
1.35 Mб
Скачать

Тема 6. Лекція №6.2 "Основи мови Сі"

План:

- оператори введення-виводу

- пріоритети операцій

Уведення-виведення

У програмах, що наводяться нижче, використовуються такі засоби введення-виводу, як printf(), getchar(), gets(), scanf(). Приведемо характеристику цих функцій [2.4].

Прототип функції printf() має вигляд:

int printf(const char *format, ?);

Функція printf() записує в стандартний потік stdout (стандартний вихідний потік даних) значення аргументів із заданого списку аргументів відповідно до рядка форматування, що адресується параметром format. Рядок форматування складається з елементів двох типів. До елементів першого типу відносяться символи, які виводяться на екран. Елементи другого типу містять специфікації формату, визначальний спосіб відображення аргументів. Специфікація формату починається символом відсотка, за яким йде код формату. На специфікації формату можуть впливати модифікатори, задаючи ширину поля, точність і ознаку вирівнювання по лівому краю. Ціле значення, розташоване між знаком % і командою форматування, грає роль специфікації мінімальної ширини поля. Наявність цього специфікатора призводить до того, що результат буде заповнений пропусками або нулями, щоб значення, що виводиться, займало поле, ширина якого не менше заданої Сі мінімальної ширини. За умовчанням в якості заповнювача використовується пропуск (пропуски). Для заповнення нулями перед специфікацією ширини поля треба помістити нуль, тобто 0. Наприклад, специфікація формату %05d доповнить нулями ціле число, що виводиться, в якому менше п'яти цифр, щоб загальна довжина дорівнювала п'яти символам. Дія модифікатора точності залежить від коду формату, до якого він застосовується. Щоб додати модифікатор точності, слід поставити за специфікатором ширини поля десяткову точку, а після неї - необхідне значення точності (число знаків після десяткової точки). Стосовно цілих чисел модифікатор точності задає мінімальну кількість цифр, що виводяться. При необхідності перед цілим числом будуть додані нулі. Якщо модифікатор точності застосовується до рядків, то число, що йде за точкою, задає максимальну довжину поля. Наприклад, специфікація %5.7s виведе рядок завдовжки не менше п'ять, але не більше семи символів. Якщо рядок, що виводиться, виявиться довше за максимальну довжину поля, кінцеві символи будуть відсічені. За умовчанням усі значення, що виводяться, вирівнюються по правому краю: якщо ширина поля більше значення, що виводиться, то воно буде вирівняно по правому краю поля. Щоб встановити вирівнювання по лівому краю, треба поставити знак "мінус" ("-") відразу після знаку відсотка. Наприклад, специфікація формату %-10.4f забезпечить вирівнювання дійсного числа з чотирма десятковими знаками по лівому краю в 10-символьному полі. Специфікатори формату для функції printf() перераховані в таблиці. 2.3, узятою з [2.3].

Таблиця 2.3.

Специфікатори формату функції printf()

Код

Формат

%c

Символ

%d

Десяткове ціле число зі знаком

%i

Десяткове ціле число зі знаком

%e

Експоненціальне представлення числа (у вигляді мантиси і порядку, е — на нижньому регістрі)

%E

Експоненціальне представлення числа (у вигляді мантиси і порядку, Е — на верхньому регістрі)

%f

Десяткове число з плаваючою точкою

%F

Десяткове число з плаваючою точкою (тільки стандарт С99; якщо застосовується до нескінченності або нечислового значення, то видає написи INF, INFINITY(нескінченність) або NAN — Not A Number на верхньому регістрі. Специфікатор %f виводить їх еквіваленти на нижньому регістрі)

%g

Використовує коротший з форматів %e або %f

%G

Використовує коротший з форматів %E або %F

%o

Вісімкове число без знаку

%s

Символьний рядок

%x

Шістнадцяткове без знаку (рядкові букви)

%X

Шістнадцяткове без знаку (прописні букви)

%p

Виводить покажчик

%%

Виводить знак відсотка

Прототип функції scanf() має наступний вигляд:

int scanf(const char *format, ?);

Функція scanf() є функцією для введення даних загального призначення, яка читає потік stdin і зберігає інформацію в змінних, перерахованих в списку аргументів. Якщо в рядку форматування зустрінеться роздільник, то функція scanf() пропустить один або декілька роздільників у вхідному потоці. Під роздільником, або пробільним символом, мають на увазі пропуск, символ табуляції }t або роздільник рядків }n. Усі змінні повинні передаватися за допомогою своїх адрес, наприклад, за допомогою символу &. Рядок, що управляє, задається параметром format, складається з символів трьох категорій : специфікаторів формату, пробільних символів, символів, відмінних від пробільних [2.4].

Специфікація формату починається знаком % і повідомляє функції scanf() тип даного, яке буде прочитано. Специфікації формату функції scanf() приведені в таблицю.2.4.

Таблиця 2.4.

Специфікатори формату функції scanf()

Код

Формат

%c

Читає один символ

%d

Читає десяткове ціле число

%i

Читає ціле число у будь-якому форматі (десяткове, вісімкове або шістнадцяткове)

%u

Читає десяткове ціле число типу short int

%e

Читає число з плаваючою точкою (і в експоненціальній формі)

%E

Аналогічно коду %e

%f

Читає число з плаваючою точкою

%lf

Читає десяткове число з плаваючою точкою типу double

%F

Аналогічно коду %f (для стандарту С99)

%g

Читає число з плаваючою точкою.

%G

Аналогічно коду %g

%o

Читає вісімкове число

%x

Читає шістнадцяткове число

%X

Аналогічно коду %x

%s

Читає рядок

%p

Читає покажчик

%n

Набуває цілого значення, рівного кількості прочитаних досі символів

%[ ]

Переглядає набір символів

%%

Читає знак відсотка

Якщо вхідний потік містить більше заданої кількості символів, то при наступному зверненні до операції введення читання почнеться з того місця, в якому "зупинився" попередній виклик функції scanf() [2.3]. Якщо роздільник (наприклад, пропуск) зустрінеться раніше, ніж досягнута максимальна ширина поля, то введення даних завершиться. В цьому випадку функція scanf() переходить до читання наступного поля. При читанні поодиноких символів символи табуляції і роздільники рядків читаються подібно до будь-якого іншого символу.