Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Downloads / Lektsia_SI_kratko_1

.pdf
Скачиваний:
19
Добавлен:
15.03.2016
Размер:
893.04 Кб
Скачать

Пусть r – строка, с – столбец.

int **matr = new int *[r]; // объявлена переменная типа «указатель

// на указатель на int

/* организуется цикл для выделения памяти под каждую строку массива*/ for (int i=0; i<r; i++)

matr [i] = new int [c];

Освобождение памяти из-под массива

delete [] имя_массива

Обращение к элементам двумерного динамического массива

Адресация элементов динамического массива осуществляется с помощью индексированного имени.

Синтаксис:

ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];

Например:

mas[5][7] – индекс задается как константа, sl[i][j] – индекс задается как переменная,

array[4*p][p+5] – индекс задается как выражение.

Лекция. Символьные данные и строки.

Для представления текстовой информации в языке С++ используются символы

(константы), символьные переменные и строки (строковые константы), для которых в языке С++

не введено отдельного типа в отличие от некоторых других языков программирования.

Для символьных данных в С++ введен тип char. Описание символьных переменных:

char список_имен_переменных;

Например:

const char c='c';

//символ – занимает один байт, его значение не меняется

char a,b;

/*символьные переменные, занимают по одному байту,

значения меняются*/

const char *s="Пример строки\n";

//текстовая константа

Строка – это последовательность символов, заключенная в двойные кавычки (" ").

Размещая строку в памяти, транслятор автоматически добавляет в ее конце символ '\0'

(нулевой символ или нулевой байт, который является признаком конца строки). В записи строки может быть и один символ: ”А” (заключен в двойные кавычки), однако, в отличие от символьной константы 'А' (используются апострофы), длина строки ”А” равна 2 байтам.

В языке С++ строка – это пронумерованная последовательность символов (массив символов), она всегда имеет тип char[]. Все символы строки нумеруются, начиная с нуля. Символ конца строки также нумеруется – ему соответствует наибольший из номеров. Таким образом,

строка считывается значением типа «массив символов». Количество элементов в таком массиве на 1 больше, чем изображение соответствующей строки, так как в конец строки добавлен нулевой символ '\0' (рис. 1).

A

 

\0

 

A

 

 

 

 

 

”А”

 

 

'А'

строка

 

 

символ

(2 байта)

 

 

(1 байт)

Рис.1 Представление строки и символа

Символьная строка в программном коде может располагаться на нескольких строках. Для переноса используется символ '\' с последующим нажатием клавиши ввод. Символ '\'

игнорируется компилятором, и следующая строка считается продолжением предыдущей.

Присвоить значение строке с помощью оператора присваивания нельзя, так как для массивов не определена операция прямого присваивания. Поместить строку в символьный массив можно либо при вводе, либо с помощью инициализации:

char s1*+ = ”ABCDEF”; //инициализация строки

char s2[]={'A','B','C','D','E','F','\0'};//инициализация строки

Операция вычисления размера (в байтах) sizeof действует для объектов символьного типа и строк.

Функции для работы со строками

Функции для работы со строками содержатся в библиотеке string.lib (под-ключение:

#include <string.h>).

Наиболее часто применяются следующие функции:

char *strcpy (st1, st2) – копирует содержимое строки st2, включая нуле-вой символ, в

строку st1.

char *strcat (st1, st2) – добавляет справа к строке st1 содержимое строки st2.

int strcmp (st1, st2) – сравнивает содержимое строк st2 и st1. Если st1 < st2, то результат равен –1, если st1 = st2 – результат равен 0, если st1 > st2 – результат равен 1.

char *strstr (st1, st2) – возвращает указатель на первое появление под-строки st2 в строке

st1.

char *strchr (st, ch) – возвращает указатель на первое появление символа ch в строке st.

char *strtok (st1, st2) – возвращает указатель на лексему, находящуюся в строке st1. При первом вызове функция возвращает указатель на первый сим-вол st1, а после первой лексемы устанавливает нулевой символ. При после-дующих вызовах функции со значением NULL в

качестве первого аргумента указатель аналогичным образом переходит к следующим лексемам.

После того как закончились все лексемы, указатель устанавливается в NULL.

int strlen (st) – возвращает длину строки st.

char *strrev (st) – изменяет порядок следования символов в строке на противоположный.

сhar *strdup (st); – дублирует строку st.

сhar *strlwr (st) – конвертирует символы строки st к нижнему регистру.

сhar *strupr (st) – конвертирует символы строки st к верхнему регистру.

int atoi (st) – преобразует строку st в число целого типа (int).

double atof (st) – преобразует строку st в число действительного типа.

char *itoa (a, st, base) – преобразует число целого типа a в строку st (base – основание

системы счисления).

char *gcvt (a, dec, st); – преобразует число действительного типа a в строку st. Значение dec

указывает на число десятичных разрядов

Описание функции

Функцией называется именованный набор операторов, выполняющий определенную

задачу.

Структура функции похожа на структуру программы main. Описание функции содержит заголовок функции, объявления переменных и операторы:

тип_функции имя_функции (список _формальных_параметров)

{объявления переменных;

оператор1;

……………

оператор n; }

Здесь:

тип_функции - тип возвращаемого в основную программу результата;

Если в функции не предусмотрен возврат значения, то перед именем функции должно указываться void.

имя_функции – уникальное имя, соответствующее по смыслу операции, которую

выполняет функция;

список _формальных_параметров – перечень формальных параметров.

Если функция не имеет параметров, то внутри круглых скобок указывается или void или

ничего.

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

Прототипы функций

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

Пример прототипа: void row(void);

Первый void указывает компилятору тип данных, возвращаемых функцией (в данном случае это

«ничего»). Второй void указывает количество параметров, которое ожидает функция, тип параметров и ожидаемый порядок их следования (в данном случае также «ничего»). Компилятор игнорирует имена переменных, указанные в прототипе функции. Например обе записи прототипа правильные:

int maximum (int a, int b, int c);

int maximum (int , int , int );

Рекомендуется использовать короткие записи.

Прототип функции можно не указывать, если описание функции предшествует обращению

к ней.

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

имя_функции (список _фактических_параметров)

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

Для возвращения вычисленного значения в основную программу в функциях используется оператор return (результат)

Способы передачи аргументов в функцию

В VC++ имеются два способа обращения к функциям: вызов по значению и вызов по ссылке.

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

Структура

Структура – это составной тип данных, в котором под одним именем объ-единены данные различных типов. Отдельные данные структуры называются полями. Объявление структуры осуществляется с помощью ключевого слова struct, за которым указывается ее имя и список элементов, заключенных в фи-гурные скобки:

struct имя

{

тип_элемента_1 имя_элемента_1;

тип_элемента_2 имя_элемента_2;

...

тип_элемента_n имя_элемента_n;

} ;

Правила работы с полями структуры идентичны работе с переменными со-ответствующих типов. К полям структуры можно обращаться через составное имя. Формат обращения:

имя_структуры.имя_поля

или

указатель_на_структуру–>имя_поля

Соседние файлы в папке Downloads