.RU
Карта сайта

5. Стандартная библиотека языка Си - Структура программы на языке Си. Этапы выполнения программы Алфавит языка Си


5. Стандартная библиотека языка Си


В любой программе кроме операторов и операций используются средства библиотек, входящих в среду программирования. Часть библиотек стандартизована и поставляется с компилятором. Функции, входящие в библиотеку языка Си, намного облегчают создание программ.
В стандартную библиотеку входят также прототипы функций, макросы, глобальные константы. Это, как вы уже знаете, заголовочные файлы с расширением *.h, которые хранятся в папке include и подключаются на этапе предпроцессорной обработки исходного текста программ.

5.1. Стандартные математические функции


Математические функции языка Си декларированы в файлах

math.h

и

stdlib.h.


В приведенных здесь функциях аргументы и возвращаемый результат имеют тип double. Аргументы тригонометрических функций должны быть заданы в радианах (2π радиан = 360°).


5.2. Потоковый ввод-вывод


Поток – это абстрактное понятие, которое относится к любому переносу данных от источника к приемнику. Потоки С++ обеспечивают надежную работу как со стандартными (stdin, stdout), так и с определенными пользователем типами данных. Поток определяется как последовательность байтов не зависящая от конкретного устройства.
Для ввода-вывода в консольных приложениях в языке С++ используются два объекта класса iostream: cin (класс istream), cout (класс ostream) и две операции: >> и <<. Для их работы необходимо подключить заголовочный файл iostream.h.
Формат записи операций извлечения из потока >> (ввод с клавиатуры) и помещения в поток << (вывод на экран) следующий:

cout

<< выражение ;

cin

>> ID(имя) переменной ;
Стандартный поток вывода cout по умолчанию связан со стандартным устройством вывода

stdout

(дисплей монитора), а ввода cin – со стандартным устройством ввода

stdin

, т.е. клавиатурой. Приведем пример:
#include
void main (void)
{
int i, j, k;
cout << “ Hello! ” << endl; // «end line» – переход на новую строку
cout << “ Input i, j ”;
cin >> i >> j ;
k = i + j ;
cout << “ Sum i , j = “ << k << endl;
}

5.3. Консольные функции вывода данных на экран


Наряду с потоковым вводом-выводом, в консольных приложениях применяются и функции ввода-вывода языка Си. Их декларации приведены в заголовочных файлах

stdio.h

и

conio.h .


Для вывода информации на экран монитора (дисплей) в языке Си служат функции

printf

() и

puts

().
Формат функции форматного вывода на экран:

printf

( управляющая строка , список объектов вывода);

В

управляющей строке

, заключенной в кавычки, записывают: текст, выводимый на экран ; спецификаторы форматов, указывающие компилятору способ вывода объектов (каждый спецификатор формата начинается с символа '

%'

).
В

списке объектов вывода

указываются выводимые на экран переменные, константы или выражения, разделенные запятыми. Список объектов вывода может отсутствовать.
Каждый из спецификаторов формата соответствует своему объекту из списка вывода, в порядке следования. Поэтому количество и порядок следования спецификаторов форматов должны совпадать с количеством и порядком следования выводимых объектов. Функция printf выполняет вывод данных в соответствии с указанными форматами. Весь остальной (кроме спецификаторов форматов) текст управляющей строки выводится на экран без изменений.
Имеется большое количество различных спецификаторов формата. Основные из них:

%d (%i)

– десятичное целое число;

%f

– вещественное число, запись с фиксированной точкой;

%е

– вещественное число, экспоненциальная запись;

%g

– вещественное число, запись с фиксированной точкой либо экспоненциальная запись, в зависимости от значения величины;

%o

– восьмеричное число без знака;

%x

– шестнадцатеричное целое число без знака (малые буквы a-f);

%X

– шестнадцатеричное целое число без знака (большие буквы A-F);

%c

– один символ;

%s

– строка символов (массив

char

).
Для "длинных" типов чисел добавляется символ

l

: %ld

long

(длинное целое), %lf

double

(вещественное число с удвоенной точностью). Для еще более длинных типов чисел вместо

l

добавляется

L

: %Ld -

long long

, %Lg -

long double

в соответствии с форматом %g.
Если нужно напечатать сам символ %, то его нужно указать 2 раза:

printf ("Только %d%% предприятий не работало. \n",5);


Получим:

Только 5% предприятий не работало

.
Пример:
int number = 5; float but = 255; int cost = 11000;
printf(" %d студентов съели %f бутербродов. \n", number, but);
printf(" Значение числа pi равно %f. \n", M_PI);
printf(" Стоимость этой вещи %d %s. \n", cost, "Руб.");
. . .
В спецификаторах формата функции printf после символа % можно указывать число, задающее минимальную ширину поля вывода, например, %5d – для целых, %4.2f – для вещественных (означает поле общей шириной 4 символа, две цифры после запятой). Недостающие позиции будут слева заполнены пробелами (если нужно заполнить их нулями, перед шириной поля надо поставить символ '0' , например: %05d ). Если, наоборот, указанных позиций не хватает для вывода целой части числа, то происходит автоматическое расширение поля до нужной ширины.
Если после «%» указан знак «минус», то выводимое значение будет выравниваться по левой (а не по правой) позиции поля вывода заданной ширины, например: % – 10d.
Использование функции printf для преобразования данных:
1) printf("%o", 336); получим: 520, т.е. 5*8**2+2*8+0*1 = 336;
2) printf("%x", 335); получим: 14f (шестнадцатеричное).
Можно использовать функцию printf для нахождения кода ASCII некоторого символа:
printf (" %c – %d\n", 'a', 'a');
получим десятичный код ASCII символа а: a – 65 .
Функция

puts

(строка); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n).
Аналогом такой функции будет: printf(“строка\n”);

5.4. Консольные функции ввода информации


Функция scanf предназначена для форматированного ввода исходной информации с клавиатуры:

scanf

(управляющая строка , список адресов объектов ввода);
Список адресов объектов ввода представляет собой имена переменных, разделенные запятыми, перед каждой из которых указывается символ &, обозначающий здесь операцию «

взять адрес

».
В управляющей строке (заключенной в кавычки) указывается список спецификаторов форматов. Каждый спецификатор формата начинается с символа '%', за которым следует тип спецификатора, указывающий компилятору способ ввода объекта. Функция scanf() использует практически тот же набор модификаторов форматов, что и printf(), отличия от функции вывода следующие: форматы %f, %e, %g – эквивалентны. Для ввода коротких целых чисел (

short

) введен модификатор формата %h.
Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в форме разных строк, нажимая после ввода текущего объекта клавишу Enter.
Поэтому функцией scanf() по формату %s строка вводится только до первого пробела. Для ввода произвольной строки текста, содержащей пробелы, используется функция:

gets

(ID символьного массива);
В управляющей строке функции scanf(), как и в printf(), между спецификаторами формата можно помещать текст. Но предназначение его иное: если введенные данные окажутся разделены теми же символами, что и в управляющей строке, эти введенные символы будут пропущены. Это можно использовать для ввода значений, разделенных не пробелами, например:
scanf("%d:%d:%d", &hour, &min, &sec);
позволяет вводить с клавиатуры время в обычном формате.
Функцию scanf() также можно записывать в виде:
целая переменная =

scanf

(управляющая строка , список адресов объектов ввода);
При этом целая переменная получит значение, равное

количеству

успешно введенных объектов ввода. Например, после выполнения оператора
n=scanf("%lf%lf%lf", &x,&y,&z);
значение n будет от 0 (ничего не прочтено) до 3 (при успешном вводе).
Отдельные символы вводятся при помощи функции

getch

(). Причем простой ее вызов - getch(); - организует паузу, при которой система программирования приостановит выполнение программы и будет ждать нажатия любой клавиши. Так поступают в том случае, когда нужно просмотреть какие то результаты работы, при выводе их на экран монитора.
Если же использовать ее в правой части операции присваивания, например:
char c;
. . .
c = getch();
то символьная переменная с получит значение символа (кода) нажатой клавиши.
С началом работы консольной программы автоматически открываются стандартные потоки для ввода данных –

stdin

, который по умолчанию связан с клавиатурой, и вывод –

stdout

, связанный с экраном монитора.

Внимание

. Ввод данных функциями gets(), getch() выполняется с использованием потока stdin. Если указанная функция не выполняет своих действий (проскакивает), перед ее использованием необходимо очистить поток (буфер) ввода с помощью функции

fflush

(stdin);
Отметим, что не гарантируется одновременная работа функций ввода-вывода и потокового ввода-вывода; однако на практике они конфликтуют редко.

5.5. Ввод-вывод в оконных приложениях.


Для ввода-вывода в оконных приложениях C++ Builder'a используются различные компоненты (^ Memo, Edit, Label и др.) Например, ввод-вывод в Edit осуществляется обычно через операцию присваивания:
Edit1->Text=IntToStr(k);
X:=StrToFloat(Edit2->Text);
а вывод в Memo - через метод Add() :
Memo1->Lines->Add("x="+FloatToStrF(x, ffFixed, 15, 7));
При этом обычно используются функции преобразования типов C++ Builder'a:

Функция



Направление


преобразования



Пример



StrToInt()

String  int

k=StrToInt (Edit1->Text);

IntToStr()

int  String

Edit1->Text= IntToStr(k);

StrToFloat()

String  double

x= StrToFloat (Edit1->Text);

FloatToStr()

double  String

Edit1->Text= FloatToStr(x);

FloatToStrF()

double  String

Edit1->Text=FloatToStrF(x, ffFixed, 15, 8);

В функции FloatToStrF(), в отличие от функции FloatToStr(), задается

максимальное

общее количество цифр в числе (которое поэтому лучше задавать побольше, например, 15) и количество цифр после запятой. Второй параметр может принимать лишь одно из нескольких допустимых значений, имеющих смысл, подобный спецификаторам формата printf() (ffFixed - %f, ffExponent - %e, ffGeneral - %g и т.п.).
В русской версии Windows в функциях StrToFloat(), FloatToStr(), FloatToStrF() дробная часть числа отделяется от целой запятой; а в английской версии Windows - точкой.

Советы по программированию


1. Выбирайте тип для переменных с учетом диапазона их возможных значений и требуемой точности представления данных.
2. Старайтесь давать переменным ID (имена), отражающие их назначение.
3. При вводе данных с клавиатуры выводите на экран пояснения: что нужно ввести, т.е. организуйте диалог. Для контроля сразу же после ввода выводите исходные данные на дисплей (хотя бы в процессе отладки).
4. При составлении выражений учитывайте приоритет используемых операций.
5. В функциях ввода/вывода printf и scanf для каждой переменной указывайте спецификацию формата, соответствующую ее типу. Не забывайте ставить '&' перед каждой переменной в функции scanf.
7. При использовании стандартных функций требуется с помощью директивы препроцессора #include подключить к программе соответствующие заголовочные файлы. Установить, какой именно файл необходим, можно с помощью справочной системы.
8. Данные при вводе разделяйте пробелами, символами перевода строки или табуляции, но не запятыми (если в управляющей строке scanf() вы не задали иное).

^ 6. Операторы языка С.


Основной частью любой программы являются

операторы

, то есть инструкции (действия), выполняемые машиной во время работы программы. В конце каждого оператора ставится точка с запятой.
^ Простые операторы:
- пустой оператор «;» ;
- оператор присваивания - выполнение операций присваивания;
- оператор вызова функции - выполнение операции вызова функции.
Примеры простых операторов:
;
b=3;
a=b+7;
printf("%lf\n", a);
Если в программе не указано иное, то операторы выполняются по очереди, один за другим, сверху вниз по тексту программы. Но существуют операторы, меняющие последовательность выполнения других операторов. К ним относятся условные операторы, операторы цикла и перехода.

^ 7. Составление разветвляющихся алгоритмов


7.1. Условные операторы


Условный оператор

if

используется для разветвления процесса выполнения кода программы на два направления.
В языке Си имеется две формы условного оператора: простая и полная. Синтаксис

простой

формы:

if (выражение) оператор;


выражение

– логическое или арифметическое выражение, вычисляемое перед проверкой, и, если выражение истинно (не равно нулю), то выполняется

оператор

, иначе он игнорируется;

оператор

– любой оператор языка Си. Если в случае истинности выражения необходимо выполнить несколько операторов (более одного), их необходимо заключить в фигурные скобки. (Группа операторов, заключенная в фигурные скобки, называется составным оператором или блоком).



Примеры записи:
if (x > 0) x = 0;
if (i != 1) j++, s = 1; – используем операцию «запятая»;
if (i != 1)
{
j++; s = 1; – последовательность операций (блок);
}
if (getch() != 27) k = 0; – если нажата любая клавиша, кроме “Esc”.
if (!x) exit (1); или так : if (x == 0) exit(1);
if ( i>0 && iСинтаксис

полной

формы условного оператора:
2014-07-19 18:44
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • © sanaalar.ru
    Образовательные документы для студентов.