Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 4.doc
Скачиваний:
20
Добавлен:
13.03.2016
Размер:
404.99 Кб
Скачать

Упражнения

  1. Определить результат выполнения программы:

#include <iostream.h>

void mul(int, int);

int S;

void main()

{int a=2, b=3;

mul(a,b); a=2*S; mul(a,b);

cout<<S;

}

void mul(int x, int y)

{S=x*y;}

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

3. Даны натуральные числа n и m; найти НОД(n,m). Составить рекурсивную функцию вычисления НОД, основанную на соотношении НОД(n, m) = НОД(m, r), где r –– остаток от деления n на m (n>m).

4.10. Массивы

Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве.

Формат описания массива следующий:

<тип_элементов> <имя> [<константное_выражение>]

Константное выражение определяет размер массива, т.е. число элементов этого массива. Например, согласно описанию

int a[100];

char b[20];

float d[50];

В первой строке объявлен массив а из 100 элементов целого типа: а[0], а[1], ..., а[99] (индексация всегда начинается с нуля). Во второй строке элементы массива b имеют тип char, а в третьей - float.. Имя массива — константа указатель.

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

int p[]={2, 4, 6, 10, 1};

В этом случае создается массив из пяти элементов со следующими значениями:

p[0]=2, p[1]=4, p[2]=6, p[3]=10, p[4]=1.

Количество элементов в массиве в этом случае можно определить так:

n=sizeof(p)/sizeof(int);

В результате следующего объявления массива

int M[6]={5, 3, 2};

будет создан массив из шести элементов. Первые три элемента получат инициализированные значения. Значения остальных будут либо неопределенными, либо равны нулю, если массив внешний или статический.

Пример 1. Сортировка массива методом пузырька.

//Сортировка массива

#include <iostream.h>

#include<conio.h>

void main()

{ int X[]={6,4,9,3,2,1,5,7,8,10};

int i=0,j,n,A,P=1;

clrscr();

n=sizeof(X)/sizeof(X[0]);

while (P)

{ P=0;

for(j=0; j<n-1-i; j++)

if(X[j]>X[j+1]) {A=X[j]; X[j]=X[j+1]; X[j+1]=A; P=0}

i++;

}

for(i=0; i<n; i++) cout<<X[i]<<" ";

}

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

1 2 3 4 5 6 7 8 9 10.

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

Пример 2.

//Сортировка массива, вариант 2

#include <stdlib.h>

#include <stdio.h>

void main()

{int *X;

int i=0,j,n,A,P=1;

clrscr();

printf("\n n-?"); scanf("%d",&n);//количество элементов

// выделение динамической памяти

X=(int*)malloc(n*sizeof(int));

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

{ printf("%d:",i); scanf("%f",&X[i]);}

while (P)//сортировка

{ P=0;

for(j=0; j<n-1-i; j++)

if(X[j]>X[j+1]) {A=X[j]; X[j]=X[j+1]; X[j+1]=A; P=0}

i++;

}

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

printf("%6d ",X[i]);

free(X);//освобождение памяти из-под массива

}

Многомерные массивы. Двумерный массив трактуется как одномерный массив, элементами которого является массив с указанным в описании типом элементов. Например, оператор

float R[5][10];

объявляет массив из пяти элементов, каждый из которых есть массив из 10-ти вещественных чисел. Отдельные величины этого массива обозначаются именами с двумя индексами: R[0][0], R[0][1], … , R[4][9]. Объединять индексы в одну пару скобок нельзя, т.е. запись R[2,3] – ошибочна.

Пример описания трехмерного массива:

double X[3][7][20];

Порядок расположения элементов многомерного массива в памяти такой, что быстрее всего меняется последний индекс, затем предпоследний и т.д., и лишь один раз пробегает свои значения первый индекс.

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

int M[3][3] = { {11, 12, 13},

{21, 22, 23},

{31, 32, 33} };

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

int M[3][] = { {11, 12, 13},

{21, 22, 23},

{31, 32, 33} };

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

Пример 3.

#include <stdlib.h>

#include <stdio.h>

void main()

{float **a,b;

int n,m,i,j;

printf("\n n,m-?");//ввод размера матрицы

scanf("%d%d",&n,&m);

//выделение динамической памяти под массив указателей

a=(float**)malloc(n*sizeof(float*));

//выделение динамической памяти под элементы матрицы

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

{a[i]=(float*)malloc(m*sizeof(float));

}

//ввод значений

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

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

{ printf("%d,%d:",i,j);

scanf("%f",&b);

a[i][j]=b;

}

//печать матрицы по строкам на экране

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

{printf("\n");

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

printf("%4.2f ",a[i][j]);

}

printf("\n");

//освобождение динамической памяти

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

free(a[i]);

free(a);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]