Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование программ и программирование на С++ Часть 1. Структурное.pdf
Скачиваний:
18
Добавлен:
15.11.2022
Размер:
3.8 Mб
Скачать

17.5.Функции и массивы

17.5.1.Передача одномерных массивов как параметров функции

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

//Удалить из массива все четные элементы

#include ciostream.h> #include <stdlib.h>

//формирование массива //массив передается в функцию по адресу int formfint *а)

{

int n;

cout<<"\nEnter n"; cin>>n;

for(int i=0;i<n;i++) a[i]=rand()%100;

//возвращается количество элементов в массиве return n;

//печать массива

void print(int *a,int n)

{

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

cout«"\n" ;

}

/^удаление четных элементов из массива, массив передается по адресу, количество элементов переда­ ется по адресу как ссылка*/

void del(int *а, int& n)

{

int j=0,i,b[100]; for(i=0;i<n;i++)

if(a[i]%2!=0)

{

b [j ] = a [ i ] ;

j++;

n=D;

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

a [i ] = b [i ]

}

void main()

{

int a [100]; int n;

n=form(a);//вызов функции формирования //массива

print(a,n);//вызов функции печати массива del(а,п);//вызов функции удаления элементов

//массива

print(а,п);//вызов функции печати массива

}

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

/^Удалить из массива все элементы, совпадающие

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

ние памяти.*/

#include <iostream.h>

#include <stdlib.h>

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

возвращает указатель на динамический массив*/ int* form(int& n)

{

cout«"\nEnter n"; cin»n;

//выделить динамическую область памяти под //массив

int* a=new int[n]; for(int i=0;i<n;i++)

a[i]=rand()%100; //заполнить массив //вернуть указатель на динамическую область

//памяти return а;

}

void print(int*a,int n)//печать массива

/*в функцию передается указатель на массив и количество элементов в массиве*/

{

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

c o u t « ,f\nlf;

}

/*удаление из массива в функцию передается указатель на массив и количество элементов в мас­

сиве по адресу, как ссылка*/ int* del(int* a,int& n)

{

int k,j,i;

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

if(a [i] !=a[0])k++;

int* b;

//выделяем память под вспомогательный массив b=new int[k];

/*переписываем элементы из старого массива во вспомогательный*/

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

if(a[i]!=a[0])

 

{

b [ j ] = a [i

] ;

 

 

 

 

 

 

j + + ;

 

 

 

 

 

 

}

 

 

 

 

 

п=к;

/ / м е н я е м

к о л и ч е с т в о эл е м ен то в

//во звр ащ аем новый м ассив

как

р е з у л ь т а т функции

r e t u r n

b;

 

 

 

 

}

 

 

 

 

 

v o i d m a i n ()

 

 

 

 

i n t *

а;

//у к а з а т е л ь

на

динамический массив

i n t n;

/ / к о л и ч е с т в о эл е м ен то в в м а с с и в е

a = f o r m ( n ) ;

//ф о р м и р у ем м асси в

p r i n t ( a , n ) ;

/ / п е ч а т а е м

м асси в

a = d e l ( a , n ) ;

/ / у д а л я е м

элем ен ты

p r i n t ( a , n ) ;

/ / п е ч а т а е м

м асси в

17.5.2. Передача строк в качестве параметров функций

Строки при передаче в функции могут передаваться как одно­ мерные массивы типа char или как указатели типа c h a r * . В отличие от обычных массивов в функции не указывается длина строки, так

как в конце строки есть признак конца строки ' \ 0 '

 

//Н а й т и

к о л и ч е ст в о гл асн ы х

букв в

с т р о к е

//Функция

п о и ска з а д а н н о г о

си м вола

в с т р о к е

i n t f i n d ( c h a r * s , c h a r с)

 

 

{

 

 

 

 

 

f o r

( i n t

1=0; K s t r l e n (s) ; I++)

 

i f ( s [ I ] = = c ) r e t u r n I ;

 

 

r e t u r n

- 1

 

 

 

}

 

 

 

 

 

v o i d

m a i n ()

 

 

{

 

 

 

 

 

c h a r

s [2 5 5 ] ;

 

 

g e t s

(s)

 

 

 

 

c h a r

g l = " a o u i e y " ; / / с т р о к а ,

к о т о р а я

содерж ит

/ / гласные

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