Работа с массивами. Одномерные массивы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа с массивами. Одномерные массивы



Цель работы: Ознакомиться со структурой массивов. Понять, как объявлять одномерный массив и обращаться к отдельным элементам массива.

 

Теоретические сведения

 

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

int temp[20];

Квадратные скобки ([]) говоря о том, что temp – имя массива, а число, заключенное в скобки, указывает количество элементов массива. Нумерация элементов массива начинается с нуля, поэтому temp[0] является первым, а temp[19] последним элементом массива. Отдельный элемент массива определяется при помощи его номера или индекса. Элементы массива размещаются в памяти последовательно, друг за другом. Имя массива является указателем на первый элемент массива.

 

float mas[10]; // массив mas содержит 10 элементов типа float

int mas1[20]; // массив mas1 содержит 20 элементов типа int

int n=5;

int mm[n]; // ошибка, переменная не может задавать размер массива

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

int mas[5]={1,2,3,4,5};

Количество элементов в фигурных скобках не должно превышать размерность массива. Инициализировать можно не все элементы, а любое количество первых элементов:

int mas[10]={1,2,3,4,5,6};

Все остальные четыре элемента будут проинициализированы нулями.

Инициализировать массив можно следующим образом:

int mas[]={11,22,33,44,55}; // массив из пяти элементов

В этом случае число элементов массива определяется по списку инициализации.

Пример: Ввести массив чисел и вычислить сумму положительных значений

#include<stdio.h>

#include<conio.h>

#define N 100

void main(void)

{

int mas[N]; // массив чисел

int summa=0; // сумма положительных значений

int n; // количество чисел

int i;

printf(“\nВведите количество чисел не более %3d”,N-1);

scanf(“%d”,&n);

printf(“\nВведите %3d элементов массива”,n);

for(i=0; i < n; i++) // цикл по элементам массива

scanf(“%d”, &mas[i]); // ввод i-го элемента массива

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

{

if(mas[i]>0) // если i-ый элемент массива положительный

summa+=mas[i]; // суммируются положительные элементы

}

printf(“\n сумма положительных значений равна %3d”,summa);

}

 

Порядок выполнения работы

1. Изучить краткие теоретические сведения.

2. Составить блок-схему алгоритма.

3. По разработанной блок-схеме алгоритма написать программу.

4. Отладить и выполнить программу.

 

Варианты заданий

 

1. Дано натуральное n (n >= 2). Найти все меньшие n простые числа используя решето Эратосфена. Решетом Эратосфена называют следующий способ. Выпишем подряд все целые числа от 2 до n. Первое простое число 2. Подчеркнем его, а все большие числа, кратные 2, зачеркнем. Первое из оставшихся чисел 3. Подчеркнем его как простое, а все большие числа, кратные 3, зачеркнем. Первое число из оставшихся теперь 5, так как 4 уже зачеркнуто. Подчеркнем его как простое, а все большие числа, кратные 5, зачеркнем и т.д.

2. Пусть дан массив a1,…,an. Требуется переставить a1,…,an так, чтобы вначале в массиве шла группа элементов, больших того элемента, который в исходном массиве располагался на первом месте, затем – сам этот элемент, потом – группа элементов, меньших или равных ему.

3. Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательности нулей и единиц. Из-за помех возможен ошибочный прием некоторых сигналов: нуль может быть воспринят как единица и наоборот. Можно передавать каждый сигнал трижды, заменяя, например, последовательность 1,0,1 последовательностью 1,1,1, 0,0,0, 1,1,1. Три последовательные цифры при расшифровке заменяются той цифрой, которая встречается среди них по крайней мере дважды. Такое утраивание сигналов существенно повышает вероятность правильного приема сообщения. Написать программу расшифровки.

4. Задан массив положительных чисел a1,…,an. Для каждого a[i] среди элементов массива следующих по порядку за a[i] и больших чем a[i], выберем элемент с наименьшим номером j и заменим значение a[i] на a[j]. Если такого элемента a[j] не найдется, то заменим значение a[i] нулем. Распечатать получившийся массив.

Пояснение. Например, массив 2,9,8,5,9,3,4,5,2 после замены станет таким

9,0,9,9,0,4,5,0,0.

5. Дан массив a1,…,an. Исключить из него пять минимальных элементов, сдвинув оставшиеся элементы к левому краю.

6. Даны два целочисленных массива a1,…,an и b1,…,bn. Вывести на печать все пары индексов, для которых a[i]* b[i] > 10. Подсчитать число пар и сумму этих произведений.

7. Дан одномерный массив a1,…,an. Найти и напечатать номер элемента, произведение которого с предыдущим максимально.

8. Рассортировать одномерный массив по возрастанию (убыванию) элементов (метод Шелла).

9. Рассортировать одномерный массив по возрастанию (убыванию) элементов (метод пузырька).

10. В одномерном массиве a1,…,an заменить отрицательные элементы нулями, подсчитать число замен m, вычислить m!.

 

Лабораторная работа №5

Работа с массивами. Двухмерные массивы

Цель работы: Понять, как объявляются двухмерные массивы, как располагаются двухмерные массивы в памяти компьютера, как обращаться к элементам массива

Теоретические сведения

Двухмерный массив – это массив массивов, т.е. массив, элементами которого являются массивы.

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

int mas[4][5];

Число в первых квадратных скобках указывает количество строк массива, а число во вторых квадратных скобках указывает количество столбцов массива. Для доступа к элементу двухмерного массива необходимо указать все его индексы:

rez= mas[1][2]; //переменной rez присваивается значение третьего элемента второй строки.

Элементы многомерных массивов располагаются в памяти компьютера построчно. Многомерные массивы можно инициализировать. Например:

int mas[3][3]={1,2,3,

4,5,6,

7,8,9};

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

int mas[3][3]={{1},

{2,3},

{4,5,6}

};

Пример программы: отсортировать главную диагональ двухмерного массива по возрастанию

#include<stdio.h>

#include<conio.h>

#include N 4

int main()

{

int i,j;

int temp;

int mas[N][N]; // двухмерный массив

printf(“\nВведите элементы массива\n”);

for(i=0; i < N; i++) // цикл по строкам массива

for(j=0; j < N; j++) // цикл по столбцам массива

scanf(“%d”,&mas[i][j]); // ввод элемента массива

printf(“\nИсходный массив\n”);

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

{

printf(“\n”);

for(j=0; j < N; j++)

printf(“%4d”, mas[i][j]);

}

for(j=N-1; j > 0; j--)

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

if(mas[i][i] > mas[i+1][i+1}

{

temp=mas[i][i];

mas[i][i]=mas[i+1][i+1];

mas[i+1][i+1]=temp;

}

printf(“\nРезультат\n”);

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

{

printf(“\n”);

for(j=0; j < N; j++)

printf(“%4d”, mas[i][j]);

}

 

}

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

Порядок выполнения работы

1. Изучить краткие теоретические сведения.

2. Составить блок-схему алгоритма.

3. По разработанной блок-схеме алгоритма написать программу. Размеры

массивов брать как константу.

4. Отладить и выполнить программу.

 

Варианты заданий

1. Даны действительные числа a1,…,an. Получить квадратную матрицу порядка n следующего вида:

a1 a2 a3 … an-2 an-1 an

a2 a3 a4 … an-1 an a1

a3 a4 a5 … an a1 a2

......................

an a1 a2 … an-3 an-2 an-1

2. Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы.

 

3. Дан двухмерный массив А размером n*m. Определить количество положительных, отрицательных и равных нулю элементов матрицы А.

4. Написать программу сортировки i-ой строки матрицы ММ методом «пузырька». Исходную и преобразованную матрицу вывести на печать.

5. Отсортировать строки массива А размером n*m по убыванию.

6. В двухмерном массиве определить сумму элементов, имеющих нечетные значения и стоящих на четных местах.

7. В матрице целых чисел определить максимальный элемент на главной диагонали, и есть ли такой элемент ниже главной диагонали, если есть, то определить его координаты.

8. В двухмерном массиве определить количество элементов, кратных минимальному элементу массива.

9. Дана действительная квадратная матрица порядка 2n. Получить новую квадратную матрицу, переставляя ее блоки размера n*n следующим образом:

 

10. Дана квадратная матрица порядка n. Выполнить транспонирование матрицы относительно главной диагонали. Вывести на экран исходную и транспонированную матрицу.

 

 

Лабораторная работа №6



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 624; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.246.193 (0.019 с.)