Что произойдет, если указатель (адрес) передать в качестве параметра в функцию?
ЭТО ПОЗВОЛИТ ВЕРНУТЬ ВСЕ ЗНАЧЕНИЯ, ХРАНЯЩИЕСЯ ПО ЭТОМУ АДРЕСУ В ГЛАВНУЮ ФУНКЦИЮ
Примеры программ
ЗАДАЧА 1. В заданном массиве найти длину самой длинной серии элементов, состоящей из единиц.
Fl были (1) или нет (0) серии элементов из единиц, k-длина текущей серии, max – самая длинная серия.
intmain()
{
int *x,max,i,k,fl,n,b;
printf("\n n=");
scanf("%d",&n);
x=new int[n];
for (i=0;i<n;i++)
{
printf("\n x(%d)=",i);
scanf("%d",&b);
*(x+i)=b;
}
for (k=1,fl=0,i=0;i<n-1;i++)
{
if (*(x+i)==1 && *(x+i+1)==1)
k++;
else if (k!=1)
{
if (!fl)
{
max=k;
fl=1;
k=1;
}
else if (k>max)
max=k;
k=1;
}
}
if (fl==0)
printf("V massive net seriy iz 1\n");
else
{
if (k>max)
max=k;
printf("\n %d",max);
}
delete [] x;
return 0;
}
ЗАДАЧА 2. Из массива целых чисел удалить все простые числа меньшие среднего арифметического. Полученный массив упорядочить по возрастанию.
Кроме главной функции main() при решении этой задачи необходимо написать следующие функции:
-bool prostoe(int n), которая будет проверять является ли число n простым;
-void udal(int *x, int m, int *n) функция удаления элемента с номером m в массиве x из n элементов.
-void upor(int *x, int N, bool pr=true) функция упорядочивания массива по возрастанию (если pr=true) или по убыванию (если pr=false);
-float sr_arifm(int x[], int n) функция вычисления среднего арифметического в массиве x из n элементов.
Блок-схема функции prostoe
Блок-схема функции udal
Блок-схема функции sr_arifm
Блок-схема функции upor
#include "stdafx.h"
#include <iostream.h>
|
|
#include <malloc.h>
bool prostoe(int n)
{
bool pr;
int i;
for(pr=true, i=2;i<=n/2;i++)
if(n%i==0)
{pr=false;break;}
return(pr);
}
void udal(int *x, int m, int *n)
{
int i;
for(i=m;i<=*n-2;i++)
*(x+i)=*(x+i+1);
--*n;
realloc((int *)x,*n*sizeof(int));
}
void upor(int *x, int n, bool pr=true)
{
int i,j,b;
if (pr)
{
for(j=1;j<=n-1;j++)
for(i=0;i<=n-1-j;i++)
if (*(x+i)>*(x+i+1))
{
b=*(x+i);
*(x+i)=*(x+i+1);
*(x+i+1)=b;
}
}
else
for(j=1;j<=n-1;j++)
for(i=0;i<=n-1-j;i++)
if (*(x+i)<*(x+i+1))
{
b=*(x+i);
*(x+i)=*(x+i+1);
*(x+i+1)=b;
}
}
float sr_arifm(int x[], int n)
{
int i;
float s=0;
for(i=0;i<n;i++)
s+=x[i];
if (n>0)
return(s/n);
else return 0;
}
int main()
{
int *a,n,i;
float sr;
cout<<"n=";
cin>>n;
a=(int *)calloc(n,sizeof(int));
cout << "Vvedite massiv A\n";
for(i=0;i<n;i++)
cin>>*(a+i);
sr=sr_arifm(a,n);
cout<<"sr="<<sr<<endl;
for(i=0;i<n;)
{
if(prostoe(*(a+i))&& *(a+i)<sr)
udal(a,i,&n);
else i++;
}
cout << "Massiv A\n";
for(i=0;i<n;i++)
cout<<*(a+i)<<"\t";
cout<<endl;
upor(a, n);
cout << "Upor Massiv A\n";
for(i=0;i<n;i++)
cout<<*(a+i)<<"\t";
cout<<endl;
free(a);
return 0;
}
n=10
Vvedite massiv A
6 20 5 3 10 301 17 11 6 8
sr=38.7
Massiv A
6 20 10 301 6 8
Upor Massiv A
6 6 8 10 20 301
Press any key to continue
Контрольные вопросы
1. Какие массивы называются динамическими?
2. Что называется указателем?
3. Каким образом описывается указатель?
4. Укажите основные операции, используемые при работе с указателями.
5. Охарактеризуйте операцию присваивания указателей.
6. Охарактеризуйте арифметические операции над адресами.
|
|
7. Укажите алгоритм выделения участка памяти заданного размера (динамический массив) с помощью указателей для хранения данных определенного типа.
Дата добавления: 2019-09-13; просмотров: 234; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!