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

Programmirovanie_-_1_kurs / Методические указания к лабораторным работам 3-4

.pdf
Скачиваний:
58
Добавлен:
09.06.2015
Размер:
700.69 Кб
Скачать

Функция сравнивает строки str1 и str2 и возвращает нулевой результат в случае их совпадения. Если строка str1 предшествует строке str2 в алфавитном порядке, то результат будет отрицательным. Наоборот, если строка str2 опережает строку str1, то результат будет положительным.

char str1[] = "String #1"; char str2[] = "String #2"; int res = strcmp(str1,str2);

cout << strcmp("World", "world");

// -1

cout << strcmp("world", "world");

// 0

cout << strcmp("cat", "dog");

// -1

cout << strcmp("aabaxxx", "aacaxxx");

// -1

cout << strcmp("aadaxxx", "aacaxxx"); // 1

cout << strcmp("Иванов Иван",

// 1

"Андреев Андрей");

Еще одна функция stricmp сравнивает строки без учета регистра:

int stricmp(const char *str1, const char *str2);

Пример:

cout << stricmp("World", "world"); // 0 cout << stricmp("World", "wOrLd"); // 0

Сравнение части строки может выполняться при помощи функции strncmp:

int strncmp(const char *str1, const char *str2, size_t num);

Пример:

cout << strncmp("football", "footstep", 4); // 0

cout << strncmp("football", "footstep", 5); // -1

cout << strncmp("football", "Footstep", 4); // 1

Функция strnicmp делает то же самое, только без учета регистра:

40

int strnicmp(const char *str1, const char *str1, size_t num);

Пример:

cout << strnicmp("football", "Footstep", 4); // 0

5.3.5.Прочие строковые функции

Дополнительные строковые функции, определенные в заголовочном файле string.h приведены в таблице 4.

Таблица 4. Дополнительные строковые функции

Имя

Описание

Пример использования

функции

 

 

 

strlwr

Изменяет

регистр

char str[] = "UPPER";

 

символов на нижний

strlwr(str2);

 

 

 

cout << str; // "upper"

strupr

Изменяет

регистр

char str[] = "lower";

 

символов на верхний

strupr(str);

 

 

 

cout << str; // "LOWER"

strrev

Переворачивает

char str[] = "abcdefg";

 

строку задом наперед

strrev(str);

 

 

 

cout << str; // "gfedcba"

strset

Инициализирует

char str[10] = "abcdef";

 

строку

заданным

strset(str,'?');

 

символом

 

cout << str; // "??????"

 

 

 

strchr

Возвращает указатель

char str[] = "abcd!xyz!qwe";

 

на первое вхождение

cout << strchr(str,'!');

 

заданного

символа в

// "!xyz!qwe"

 

if (strchr(str,'$')==NULL)

 

строку

 

cout << "Символ $ не найден ";

strrchr

Возвращает указатель

char str[] = "abcd!xyz!qwerty";

 

на

последнее

cout << strrchr(str,'!');

 

вхождение

заданного

// "!qwerty"

 

 

 

символа в строку.

 

strstr

Возвращает указатель

char str[] = "tennis hockey

 

на первое вхождение

voleyball pool football";

 

заданной подстроки в

cout << strstr(str,"ball");

 

исходную строку.

// "ball pool football"

 

 

5.3.6.Преобразование строки в число

Строка может быть преобразована в эквивалентное числовое значение. Данная операция выполняется при

41

помощи специальных функций, определенных в заголовочном файле stdlib.h:

int

atoi(const

char

*str);

long

atol(const

char

*str);

double atof(const char *str);

Функция atoi (сокр. от ASCII to integer) преобразует строку str в целое число типа int, atol (сокр. от ASCII to long integer) – в целое число типа long, atof (сокр. от ASCII to float) – в вещественное число double.

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

int

a

= atoi("123");

// a = 123

int

b

= atoi("asd");

// b = 0

double c

= atol("15.8");

// c = 15.8

double d

= atol("sa5.8");

// d = 0

char s[]

= "125";

 

int

x =

atoi(s); // x = 125

5.3.7.Преобразование числа в строку

Обратная операция, преобразование числа в строку выполняется при помощи функций itoa, ltoa и gcvt. Данные функции также определены в заголовочном файле stdlib.h

char * itoa(int value, char *str, int radix); char * ltoa(long value, char *str, int radix); char * gcvt(double value, int ndec, char *str);

Функции itoa (сокр. от integer to ASCII) и ltoa (сокр. от long integer to ASCII) преобразовывают соответственно число типа int и long в строку, которая записывается по адресу str. Преобразование выполняется в системе счисления с основанием radix.

char s[20]; int x = 15263;

itoa(x,s,10); // s: "15263"

42

char s[20]; int x = 64;

itoa(x,s,2); // s: "1000000"

char s[20]; int x = 64;

itoa(x,s,16); // s: "40"

Функция gcvt (сокр. от convert, символ g в названии функции определяет формат выходного значения) формирует строку на основе вещественного числа value и записывает ее в строку str. При этом количество знаков ограничивается значением ndec.

char s[20];

double x = 12.876532; gcvt(x,4,s); // s: "12.88" gcvt(x,6,s); // s: "12.8765"

5.3.8. Работа с отдельными символами

К отдельным символам строки можно обращаться как к самостоятельным элементам массива.

Пример 1 (изменение символа):

char s[] = "Предлажение с ошибкой";

s[5] = 'о'; // s: "Предложение с ошибкой"

Пример 2 (извлечение слова из строки):

//Строка Elements содержит несколько слов,

//разделенных пробелом

char Elements[] = "15 10 18 27 35"; // Строка s предназначена для хранения

//отдельного элемента char s[10] = "";

//N - порядковый номер элемента,

//который мы хотим записать в строку s

//(нумерация начинается с нуля)

int N = 2;

// ИТАК, НАЧНЕМ

int cur_el = 0; // текущий элемент

43

// Проходим по всем символам

for (int i=0 ; i<strlen(Elements) ; i++)

{

//Если встретили пробел,

//считаем что перешли к новому элементу if (Elements[i] == ' ')

cur_el++;

//Если текущий элемент не пробел,

//и мы дошли до нужного элемента

else if (cur_el==N)

{

int k = strlen(s); s[k] = Elements[i]; s[k+1] = '\0';

}

}

// Выводим на экран элемент с номером N cout << s; // "18"

6. ЛАБОРАТОРНАЯ РАБОТА №3. Массивы

6.1. Цель работы

Цель настоящей работы – ознакомление с массивами и механизмом динамического выделения памяти.

6.2. Постановка задачи

1.Разработайте программу, выполняющую обработку массивов в соответствии с заданием для вашего варианта. Используйте статическое выделение памяти для массивов.

2.Модифицируйте программу (1), реализовав динамическое выделение памяти для массивов.

6.2.1. Варианты заданий Вариант №1

На основе исходных массивов A и B с рабочим размером n сформировать массив C, элементы которого вычисляются по формуле: Ci = Ai * Bi. Упорядочить массив С по возрастанию, используя метод выбора. Вывести элементы массива С на экран.

44

Массивы A, B и C являются целочисленными. Значение n и значения элементов массива A и B вводятся с клавиатуры. При этом значения элементов внутри массива A не должны повторяться.

Вариант №2

На основе исходных массивов A и B с рабочим размером n сформировать массив C, элементы которого вычисляются по формуле: Ci = Ai + Bi. Упорядочить массив С по возрастанию, используя метод «пузырька». Вывести массивы A, B и С на экран.

Массивы A, B и C состоят из вещественных чисел. Значение n вводится пользователем с клавиатуры. Значения элементов массивов A и B генерируются при помощи датчика случайных чисел. При этом значения элементов внутри массива B не должны повторяться.

Вариант №3

На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел, которые одновременно входят как в массив A, так и в массив B. Упорядочить массив С по возрастанию, используя метод выбора. Вывести элементы массива С на экран.

Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массива A и B вводятся с клавиатуры

Вариант №4

На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел, которые входят в массив A, но при этом не входят в массив B. Упорядочить массив С по возрастанию, используя метод «пузырька». Вывести элементы массива С на экран.

45

Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массива A и B вводятся с клавиатуры.

Вариант №5

На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел, которые входят в массив B, но при этом не входят в массив A. Упорядочить массив

Спо возрастанию, используя метод «пузырька». Вывести элементы массивов A, B и С на экран.

Массивы A, B и C являются целочисленными. Значения m и n вводятся пользователем с клавиатуры. Значения элементов массивов A и B генерируются при помощи датчика случайных чисел.

Вариант №6

На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать двумерный

массив C[n][m], элементы которого будут вычисляться по формуле: Cji = Ai * Bj. Вывести элементы массивов A, B и

Сна экран.

Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массивов A и B вводятся пользователем с клавиатуры. Перед заполнением массива С, следует упорядочить массивы A и B по возрастанию, используя метод выбора.

Вариант №7

На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать двумерный массив C[n][m], элементы которого будут вычисляться по формуле: Cji = Ai + Bj. Вывести элементы массивов A, B и С на экран.

Массивы A, B и C содержат вещественные числа. Значения m и n вводятся пользователем с клавиатуры.

46

Значения элементов массивов A и B генерируются при помощи датчика случайных чисел. Перед формированием массива С, следует упорядочить массивы A и B по возрастанию, используя метод «пузырька».

Вариант №8

На основе исходных массивов A и B с рабочим размером n сформировать двумерный массив C[n][n], элементы которого будут вычисляться по формуле: Cji = A2i – B2j. Вывести элементы массивов A, B и С на экран.

Массивы A, B и C содержат целые числа. Значение n вводятся пользователем с клавиатуры. Значения элементов массивов A и B генерируются при помощи датчика случайных чисел.

Вариант №9

На основе исходного двумерного массива С с рабочим размером n х n сформировать массив A с размером n, i-й элемент которого будет равняться сумме элементов i-й

n 1

строки массива C: Ai Cij . Упорядочить массив A по

j 0

убыванию, используя метод «пузырька». Вывести массивы A и С на экран.

Массивы A и C должны содержать целые числа. Значение n вводятся пользователем с клавиатуры. Значения элементов массива С генерируются при помощи датчика случайных чисел.

Вариант №10

На основе исходного двумерного массива С с рабочим размером n х m сформировать массив A с размером n, i-й элемент которого будет равняться произведению

m 1

элементов i-й строки массива C: Ai Cij . Упорядочить

j 0

47

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

Массивы A и C должны содержать вещественные числа. Значения n и m вводятся пользователем с клавиатуры. Значения элементов массива С также вводятся пользователем с клавиатуры.

Вариант №11

На основе исходного двумерного массива С с рабочим размером n х m сформировать массив B с размером n, i-й элемент которого будет равняться среднему арифметическому значению для элементов i-й строки

m 1Cij

массива C: B

j 0

. Упорядочить массив B по

 

i

m

 

 

 

возрастанию, используя метод «пузырька». Вывести массивы B и С на экран.

Массив C должен состоять из целых чисел, массив B – из вещественных. Значения n и m, а также значения элементов массива C вводятся пользователем с клавиатуры.

Вариант №12

Используя метод «пузырька», упорядочить по возрастанию значения, содержащиеся в строках двумерного массива C с рабочим размером n х m. Вывести массив C на экран.

Массив C должен состоять из целых чисел. Значения n и m, а также значения элементов массива C вводятся пользователем с клавиатуры. Элементы в столбцах массива C не должны повторяться.

Вариант №13

Используя метод выбора, упорядочить по убыванию значения, содержащиеся в строках двумерного массива C с рабочим размером n х n. Вывести массив C на экран.

48

Массив C должен состоять из целых чисел. Значение n вводится пользователем с клавиатуры. Значения элементов массива С генерируются при помощи датчика случайных чисел. Элементы в строках массива C не должны повторяться.

Вариант №14

На основе исходного двумерного массива C с рабочим размером n x n, сформировать одномерный массив A. Массив A должен содержать только те числа, которые встречаются в массиве C только один раз. Упорядочить массив A по убыванию, используя метод выбора. Вывести массив A на экран.

Массивы A и C должны состоять из целых чисел. Значение n, а также значения элементов массива C вводятся пользователем с клавиатуры.

Вариант №15

На основе исходного двумерного массива C с рабочим размером n x n, сформировать одномерный массив A. Массив A должен содержать только те числа, которые встречаются в массиве C более одного раза. Упорядочить массив A по убыванию, используя метод «пузырька». Вывести массивы C и A на экран.

Массивы A и C должны состоять из целых чисел. Значение n вводится пользователем с клавиатуры. Значения элементов массива С генерируются при помощи датчика случайных чисел.

6.3. Требования к оформлению отчета

По данной лабораторной работе требуется подготовить отчет. Отчет должен включать в себя:

титульный лист;

постановку задачи;

блок-схему программы (1);

49