Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Стандартные функции общего назначения (stdlib.h). Преобразование данных. Преобразование числа с плавающей точкой в строку. Преобразование строки в длинное целое.

Читайте также:
  1. II ступень общего среднего образования
  2. II. Северные лагеря особого назначения
  3. III Непрерывность дифференцируемой функции
  4. III этап. Стерилизация изделий медицинского назначения
  5. III. Требования к структуре основной образовательной программы основного общего образования
  6. III. Функции Бюро контрольных работ
  7. IV. Основные функции участников

Эти стандартные библиотечные функции и макросы составляют мощный набор средств преобразования данных, управления памятью и других, весьма разнообразных, действий. Наиболее часто встречаемые макросы и функции перечислены в таблице. Их объявления находятся в stdlib.h.

Макрос или функция Выполняемое действие
_exit() Завершение программы
_lrotl() Циклический сдвиг беззнакового длинного целого влево
_lrotr() Циклический сдвиг беззнакового длинного целого вправо
_rotl() Циклический сдвиг беззнакового целого вправо
_rotr() Циклический сдвиг беззнакового целого влево
abort() Аварийное (ненормальное) завершение программы
abs() Модуль (абсолютное значение) целого числа
atexit() Регистрация функции, вызываемой при завершении программы
atof() Преобразование строки в число с плавающей точкой
atoi() Преобразование строки в целое
atol() Преобразование строки в длинное целое
bsearch() Бинарный поиск по массиву
calloc() Отведение памяти

Преобразование данных

Первая важная группа функций, объявленных в stdlib.h, содержит функции преобразования. Основная задача этих функций — преобразование данных одного типа в данные другого типа. Например, функция atol() преобразует строку в длинное целое. Синтаксис этих функций задается следующими прототипами:

double atof(const char *s)

int atoi(const char *s)

long atol(const char *s)

char *ecvt(double value, int n, int * dec, int *sign)

char *fcvt (double value, int n, int * dec, int *sign)

Для всех этих функции *s является указателем на строку, value содержит преобразуемое значение, п указывает количество знаков в строке, в dec находится позиция десятичной точки относительно начала строки, sign содержит знак числа, *buf указывает на буфер символов, radix устанавливает основание системы счисления для преобразования, a endptr обычно равен нулю. Если же endptr содержит ненулевой адрес, то функция разместит по этому адресу символ, на котором закончился анализ строки.

Преобразование числа с плавающей точкой в строку

Функция fcvt() преобразует число с плавающей точкой в строку. Она также дает возможность получить информацию о знаке числа и о положении десятичной точки.

Преобразование строки в длинное целое

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

#include "stdafx.h"

#include <stdio.h>

#include <strstream>

#include <iostream>

using namespace std;

//#include <stdio.h>

//#include <stdlib.h>

main()

{ char *s="101101", *endptr; long long_number; long_number=strtol(s,&endptr,2);

// Двоичное число... равно десятичному...

printf("The binary value %s is equal to %ld decimal\n",s,long_number); return(0);}

38. Важнейшие библиотеки С и C++. Сортировка и поиск. Использование qsort()для сортировки целых чисел. Поиск целого числа в массиве.

Сортировка и поиск

Функция bsearch() используется для бинарного поиска в массиве. Функция qsort() производит быструю сортировку. Функция lfind() осуществляет линейный поиск по ключу в массиве последовательных записей, a lsearch() — линейный поиск в отсортированной или не отсортированной таблице.

void *bsearch(const void * key, const void *base,

size_t nelem, size_t width, int(*fcmp)(const void *,

const void *))

 

void qsort(void *base, size_t nelem, size_t width,

int(*fcmp)(const void *, const void *))

 

void *lfind(const void *key, const void *base,

size_t *num,size_t width, int(*fcmp)

(const void *, const void *))

 

void *lsearch(const void *key, const void *base,

size_t *num, size_t width, int(*fcmp)

(const void *, const void *))

 

Здесь key обозначает ключ поиска, *base — указатель на массив, в котором следует искать, nelem содержит количество элементов массива, a width — размер элемента в байтах. *fcmp — указатель на функцию, используемую для сравнения. В пит помещается количество элементов таблицы.

Использование qsort()для сортировки целых чисел

В Visual C++ есть функция qsort() для сортировки данных.

#include "stdafx.h"

#include <stdio.h>

#include <strstream>

#include <iostream>

using namespace std;

int int_comp(const void *i,const void *j);

int list[12]={95,53,71,86,11,28,34,53,10,11,74,-44};

main()

{ int i; qsort(list,12,sizeof(int),int_comp);

// Массив после сортировки

printf("The array after qsort:\n");

for(i=0;i<12;i++)

printf("%d ",list[i]);

printf("\n");

return (0);}

int int_comp(const void *i, const void *j)

{ return ((*(int *)i) - (*(int *)j));

}

 

Изначально массив list содержит целые числа со знаком. Функция qsort() упорядочивает их в том же массиве в порядке возрастания. В результате исходные числа оказываются отсортированными по возрастанию

39. Важнейшие библиотеки С и C++. Дополнительные функции. Использование генератора случайных чисел. Циклические сдвиги данных

Есть несколько функций, приведенных в таблице, которые выполняют разнообразные действия. Сюда входят вычисление абсолютной величины и циклические сдвиги. Функции циклического сдвига позволяют производить операции, которые до сих пор были доступны лишь программистам на ассемблере.

 

Функция Выполняемое действие
Завершение программы:  
void abort(void) Аварийно завершить программу с кодом возврата 3
int atexit(atexit_t func) Выполнить функцию func перед завершением
void exit(int status) Завершить программу с кодом status
void _exit(int status) Немедленно завершить программу
Математические  
int abs(int x) Вычислить абсолютную величину х
int rand(void) Выдать следующее случайное число
void srand(unsigned seed) Инициализировать чисел генератор случайных
Циклический сдвиг  
unsigned _rotl(unsigned val, int count) Циклический сдвиг целого val влево
unsigned _rotr(unsigned val, int count) Циклический сдвиг целого val вправо
Разное:  
char *getenv(const char *name) Прочитать переменную окружения
int putenv(const char *name) Записать значение переменной окружения
void _swap(char *from, char *to, int nbytes) Поменять местами заданное количество символов

В Visual C++ есть функция генерации случайного числа. Генератор случайных чисел может быть инициализирован функцией srand(). Функция инициализации принимает в качестве параметра целое число и инициализирует генератор случайных чисел.

#include <stdio.h>

using namespace std;

main()

{

int x;

srand(3);

for(x=0; x <8; x++)

printf("Trial #%d, random number=%d\n", x, rand());

return (0);

}

Генераторы случайных чисел важны для задач статистической обработки и программ, которые основаны на использовании случайных последовательностей. Важно, чтобы выдаваемые генератором числа были распределены равномерно, то есть чтобы вероятность появления числа была одной и той же для всех чисел.

С и C++ предоставляют средства поразрядного циклического сдвига целых и длинных целых чисел вправо и влево.

#include <stdio.h>

using namespace std;

main()

{

unsigned int val=0x2345;

printf("rotate bits of %X to the left 2 bits and get %X\n", val, _rotl(val, 2));

printf("rotate bits of %X to the right 2 bits and get %X\n", val, _rotr(val, 2));

return (0);

}

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

Символьные функции (ctype.h). Проверка, является ли символ цифрой, буквой или символом ASCII. Проверка на управляющий символ, разделительный символ (пробел, табуляция, перевод строки) и знак препинания. Преобразования в код ASCII, к верхнему и нижнему регистрам.

6.1. Символьные функции (ctype.h)

Символы (литеры) для большинства языков определяются как однобайтовые значения. В некоторых языках, например, китайском, требуются два байта. Макросы и функции для работы с символами, объявленные в ctype.h, принимают аргумент типа целое, но используют только младший его байт. Благодаря автоматическому приведению типов обычно можно передавать этим функциям и параметры символьного типа. Макросы и функции перечислены в таблице. Они позволяют проверять различные условия, а также приводить символы от верхнего регистра к нижнему и наоборот.

isalpha() Проверка, является ли аргумент буквой
isascii() Проверка, является ли аргумент символом из набора ASCII
isdigit() Проверка, является ли аргумент десятичной цифрой (от 0 до 9)
isgraph() Проверка, является ли аргумент отображаемым символом (не пробелом)
islower() Проверка, является ли аргумент строчной буквой
isprint() Проверка, является ли аргумент отображаемым символом
isupper() Проверка, является ли аргумент заглавной буквой
isxdigit() Проверка, является ли аргумент шестнадцатеричной цифрой
toascii() Преобразование аргумента в эквивалентный символ ASCII
tolower() Преобразование от верхнего регистра к нижнему
toupper() Преобразование от нижнего регистра к верхнему

6.1.1. Проверка, является ли символ цифрой, буквой или символом ASCII

Следующие три макроса позволяют осуществить эти проверки, пользуясь внутренней таблицей символов.

Макрос Проверка
int isalnum(ch) Буквы A-Z, a-z или цифры 0-9. ch целое
int isalpha(ch) Буквы A-Z, a-z. ch целое
int isascii(ch) Символы ASCII с кодами 0-127 (0-7Fh). ch целое

 

6.1.1. Проверка на управляющий символ, разделительный символ (пробел, табуляция, перевод строки) и знак препинания

Следующие процедуры реализованы и в виде макросов, и в виде функций:

 

Процедура Проверка
int iscntrl(ch) Управляющий символ
int isdigit(ch) Цифра от 0 до 9
int isgraph(ch) Отображаемый символ (не пробел)
int islower(ch) Строчная буква a-z
int isprint(ch) Отображаемый символ
int ispunct(ch) Знак препинания
int isspace(ch) Разделительный символ (пробел, табуляция, перевод строки)
int isupper(ch) Заглавная буква A-Z
int isxdigit(ch) Шестнадцатеричная цифра 0-9, a-f или A-F

 

Эти процедуры позволяют проверять целый аргумент ch при помощи внутренней таблицы. Если аргумент удовлетворяет условию, возвращается ненулевое значение (TRUE), если нет — ноль (FALSE). Предполагается, что аргумент входит в стандартный набор символов ASCII.

6.1.1. Преобразования в код ASCII, к верхнему и нижнему регистрам

Следующие макросы и функции позволяют преобразовывать целочисленные коды ASCII:

 

Макрос Преобразование
int toascii(ch) В символ ASCII
int tolower(ch) В символ верхнего регистра, если это символ нижнего регистра
int _tolower(ch) В символ верхнего регистра
int toupper(ch) В символ нижнего регистра, если это символ верхнего регистра
int _toupper(ch) В символ нижнего регистра

 


 


Дата добавления: 2015-12-08; просмотров: 118 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.013 сек.)