Задание 3. Работа с массивами и строками.




Массив - упорядоченная структура, предназначенная для хранения однотипных данных.

Упорядочение элементов в массиве происходит по их индексам. Индекс - порядковый номер элемента (нумерация с 0).

Массив задается именем, типом хранимых данных и размерностью. Размерность - максимально возможное количество элементов в массиве.

Массивы бывают одномерные (линейные), двумерные (матрицы) и многомерные.

Объявление массива происходит следующим образом:

int ma[10];

/* Объявлен одномерный массив с именем ma на 10 элементов целого типа*/

float b[10][5]

/* Объявлен 2-мерный массив (матрица) с именем b

на 10 строк по 5 элементов вещественного типа в каждой.*/

int c[5] = {5,6,1,8,9};

//Объявление массива

// и задание начальных значений при объявлении

 

Для обращения к элементу массива в программе (записи или чтении данных из массива) указывается имя массива и в квадратных скобках индексы элемента.

Пример:

Присвоение переменной х значения ячейки №0 массива mа:

x = ma [0];

 

Ввод значения c клавиатуры в ячейку №2 массива ma:

scanf (“%d”, &ma[2]);

 

Изменение значения ячеек массивов:

ma [i] = 5; /*ячейке массива ma, номер которой записан в переменной i, присвоено значение 5*/

b [1][2] = 3; /*ячейке массива b с индексами 1, 2(строка массива 1, элемент 2 в строке) присвоено значение 3 */

Вывод значения ячейки №2 массива ma на экран:

printf (“%d”, ma[2]);

Типичными задачами работы с массивом являются поиск по массиву, ввод-вывод значений элементов, сортировка массивов и т.п. Такие задачи решаются обработкой значения каждой ячейки массива. При этом над каждой ячейкой массива совершаются одни и те же действия (используются одни и те же операторы, функции и т.п.), а изменяется только номер элемента. Таким образом, происходит последовательное перемещение по массиву. Для перемещения вместо конкретного номера элемента в квадратных скобках ставится переменная целочисленного типа (обычно int). Значение переменной можно изменять с помощью цикла for или простейших математических действий (сложения, вычитания) в циклах while и do while.

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

1. значение текущего элемента записывается в буферную переменную;

2. значение заменяемого элемента присваивается текущему;

3. значение буферной переменной присваивается заменяемому элементу.

При поиске по массиву происходит сравнение проверяемой ячейки (далее – текущей) с каким либо граничным значением. Например, крайними значениями диапазона, условным минимумом или максимумом и др.

Локальные максимумы (минимумы) – это значения элементов массива, которые больше (меньше) обоих соседних, т.о. первый и последний элементы не могут являться ими.

Строки в С++ представляются в виде массива целых чисел типа char - кодов букв (от -128 до 127). Символом, обозначающим конец строки, является нулевой байт ‘\0’. Символы, расположенные в массиве после него игнорируются. Соответственно, объявление строки не отличается от объявления массива. Количество ячеек массива должно быть на 1 больше максимальной возможной длины строки (для нулевого байта). При работе со строками элементы массива сравнивают с граничными значениями, представленными в виде символьных констант, например:

 

char str[26]; // объявлена строка с именем str.

//Длина строки – не более 25 символов

if (str[i] = = ‘f’) /*Если элемент строки str номер i содержит

символ f, то … */

 

Для ввода строк с клавиатуры можно использовать функцию gets (str) [1, с. 25], где str – имя массива типа char, в котором будет храниться строка.

 

Пример 1: Дан целочисленный массив на 10 элементов. Преобразовать и вывести его возведя все отрицательные элементы в квадрат.

 

#include <conio.h>

#include <stdio.h>

//Подключаем библиотеки

int main (int argc, char * argv[])

{

int mas[10] = {-5, 7, 9, -8, 12, -4, -2, 1, -6, 2}, i, col; //*

//Объявление массива и переменных i и col целого типа.

for (i = 0; i <= 9; i++) /*Начало цикла:

(изменяем значение счетчика i от 0 до 9 с шагом 1)*/

{

if (mas[i] < 0) //Если элемент массива отрицательный, то …

{

mas[i] = mas[i] * mas[i]; /*его значение возводится в

квадрат*/

}

printf ("\n Элемент № %d = %d", i, mas[i]);

// Вывод преобразованных элементов

}

//Конец цикла.

getche ();

/*Ожидание нажатия любой клавиши

для завершения программы*/

 

return 0;

//Конец программы

}

 

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

 

Пример 2: Дана строка. Подсчитать долю в % первых четырех букв русского алфавита (а,б,в, г) от всех символов строки.

 

#include <conio.h>

#include <stdio.h>

//Подключаем библиотеки

int main (int argc, char * argv[])

{

int i, col =0, str_l; //Объявление переменных целого типа.

char str[50]; //Объявление строки на 49 символов

printf (“\n Введите строку:”);

gets (str); //Ввод строки с клавиатуры

str_l = strlen (str); //Определяем длину введенной строки

for (i = 0; i < str_l; i++) /*Начало цикла:

(изменяем значение счетчика i от 0 до номера последнего

элемента строки с шагом 1)*/

{

if (((str[i] >= ‘А’) && (str[i] <= ‘Г’)) ||

((str[i] >= ‘а’) && (str[i] <= ‘г’)))

/*Если буква № i строки str является строчной или

прописной буквой в интервале от а до г, то …*/

{

col = col +1; /*счетчик увеличивается на 1

}

} //Конец цикла

printf ("\n Доля букв а,б,в,г = %f %%", col*100/str_l); //*

// Вычисление и вывод результата

getche ();

/*Ожидание нажатия любой клавиши

для завершения программы*/

 

return 0;

//Конец программы

}

* Для вывода на экран символа % его необходимо напечатать 2 раза.

 

№ вар. Задание
1. Найти минимальный и максимальный элемент в массиве из десяти элементов.
2. Найти номера минимального и максимального элемента в массиве из десяти элементов.
3. Найти минимальный положительный из десяти элементов массива. Если требуемые элементы отсутствуют, то вывести 0.
4. Найти максимальный отрицательный из десяти элементов массива. Если требуемые элементы отсутствуют, то вывести 0.
5. Дан массив на десять чисел. Вывести их среднее арифметическое.
6. Дан целочисленный массив на десять элементов. Преобразовать и вывести его, прибавив к элементам с четным номером первый элемент. Первый и последний элементы массива не изменять.
7. Дан целочисленный массив на десять элементов. Преобразовать и вывести его, прибавив к элементам с нечетным номером последний элемент. Первый и последний элементы массива не изменять.
8. Дан массив на 10 элементов. Найти первый его локальный минимум.
9. Дан массив на 10 элементов. Найти первый его локальный максимум.
10. Дано число k (0 < k < 9) и массив (матрица) размера 10 x 10. Найти сумму элементов k-го столбца данного массива.
11. Дано число k (0 < k < 9) и массив (матрица) размера 10 x 10. Найти произведение элементов k-го столбца данной массива.
12. Дана матрица размера 10 x 10. Найти сумму элементов главной диагонали (имеют одинаковые индексы – 1,1; 3,3 и т.п.).
13. Дано число k (0 < k < 9) и массив (матрица) размера 10 x 10. Найти максимальный элемент k-ой строки данного массива.
14. Дано число k (1 < k < 9) и массив (матрица) размера 10 x 10. Поменять местами 1-й и k-ый столбец массива.
15. Дана строка произвольных символов. Подсчитать количество содержащихся в ней цифр.
16. Дана строка произвольных символов. Подсчитать количество содержащихся в ней прописных английских букв.
17. Дана строка произвольных символов. Подсчитать количество содержащихся в ней строчных английских букв.
18. Дана строка произвольных символов. Если она представляет собой запись целого числа (все символы - цифры), то вывести 1, если нет, то 0.
19. Дана строка, состоящая из слов, разделенных пробелами. Определить количество слов в строке.
20. Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть каждой открывающей соответствует одна закрывающая), то вывести число 0. В противном случае вывести число 1.

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: