Similar presentations:
Массив из n элементов
1.
Дан массив из n элементов. Написатьпрограмму, передвигающюю все четные
элементы массива в начало.
int n;
printf("Введите размер массива: ");
scanf("%d",&n);
int *x = (int*)malloc(n*sizeof(int));
int i,m=0,j;
for(i=0;i<n;i++)
{x[i] = rand()%20;
printf("%4d",x[i]);}
printf("\n");
2.
for(i=1;i<n;i++)if(x[i]%2==0)
{m= x[i];
for(j=i-1;j>=0&&x[j]%2;j--)
x[j+1]=x[j];
x[j+1]= m;
}
printf("Результат \n");
for(i=0;i<n;i++)
{printf("%4d",x[i]);}
system("PAUSE");
printf("\n");
3.
Дан массив из n элементов. Найти самуюдлинную последовательность элементов,
которые расположены по неубыванию
значений и вывести ее на экран.
ii = 0; d = 1; m=1;
for(i=0;i<n-1;i++)
if(x[i]<=x[i+1])
{m++;
} else {if (d<m){d=m;ii=i;}
m=1;}
if (d<m){d=m;ii=i;}
printf("Результат %d\n",d);
for(i=ii-d+1;i<=ii;i++)
{printf("%4d",x[i]);}
4.
Дан массив из n элементов. Изменить размермассива следующим образом: если в массиве
есть повторения первого элемента, то удалить
все элементы между ними. Дополнительный
массив не использовать.
12341213456
1113456
ii = 0;
for(i=1;i<n;i++)
{ while(i<n&&x[i]!=x[0])i++;
if(x[i]==x[0]){
m = i-ii-1;
for(d=i;d<n;d++)
x[d-m] = x[d];
5.
ii++;i = ii+1;
n-=m;
}
}
printf("\n");
for(i=0;i<n;i++)
{printf("%4d",x[i]);}
6.
ДИНАМИЧЕСКИЕ МАССИВЫint *x,n,i;
printf("n = ");
scanf("%d",&n);
x=(int*)calloc(n,sizeof(int));
for(i=0;i<n;i++){
printf("%3d",x[i]);
}
printf("\n");
free(x);
7.
ДИНАМИЧЕСКИЕ МАССИВЫНайти индекс первого минимального элемента
массива
int *x,n,i;
printf("n = ");
scanf("%d",&n);
srand(time(NULL));
x=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
*(x+i) = rand()%50;
printf("%3d",*(x+i));
}
8.
printf("\n");int imin = 0;
for(i=1;i<n;i++){
if(*(x+imin)>*(x+i)) imin = i;
}
printf("imin = %d \n", imin);
free(x);
9.
ДИНАМИЧЕСКИЕ МАССИВЫ.ПЕРЕРАСПРЕДЕЛЕНИЕ ПАМЯТИ
• Выполняет перераспределение блоков памяти.
• Размер блока памяти, на который ссылается
параметр ptrmem изменяется на size байтов.
• Блок памяти может уменьшаться или
увеличиваться в размере.
10.
ДИНАМИЧЕСКИЕ МАССИВЫ.ПЕРЕРАСПРЕДЕЛЕНИЕ ПАМЯТИ
• Функция может перемещать блок памяти на
новое место, в этом случае возвращается
указатель на новое место в памяти.
• Содержание блока памяти сохраняется даже
если новый блок имеет меньший размер, чем
старый.
• Отбрасываются только те данные, которые не
вместились в новый блок.
• Если новое значение size больше старого, то
содержимое вновь выделенной памяти будет
неопределенным.
11.
ДИНАМИЧЕСКИЕ МАССИВЫ.ПЕРЕРАСПРЕДЕЛЕНИЕ ПАМЯТИ
ptrmem = NULL, функция
ведет себя как malloc.
• В случае, если size равен 0, ранее
• В случае, если
выделенная память будет освобождена, и
возвращается нулевой указатель.
С клавиатуры осуществляется ввод данных
до первого отрицательного числа. Написать
программу, которая сохраняет введенные
данные в динамическом массиве
(отрицательное число в массиве не
сохраняется)
12.
ДИНАМИЧЕСКИЕ МАССИВЫ.ПЕРЕРАСПРЕДЕЛЕНИЕ ПАМЯТИ
13. Сортировка массивов
Сортировка обменом (пузырьковаясортировка)
5
3
5
2
5
0
5
1
5
4
x[i]>x[i+1]
14.
32
3
0
3
1
4
5
2
0
2
1
3
4
5
x[i]>x[i+1]
15.
…for (i=0; i<n-1; i++){
flag = 0;
for (j=0; j<n-i-1; j++)
if (x[j]>x[j+1]) {
flag = 1;
temp = x[j];
x[j]=x[j+1];
x[j+1]=temp; }
if (flag==0) break;
…
16.
Сортировка выбором5
3
2
0
1
5
5
3
2
0
0
i=0
4
Поиск
минимального
элемента на
текущую
позицию
17.
03
2
5
1
i=1
3
2
2
1
0
1
2
5
3
2
2
2
2
5
3
4
5
3
3
i=2
0
i=3
1
4
1
4
18.
01
2
i=4
3
5
4
5
4
…
for(int i=0;i<n-1;i++)
{ int k = i;
for (int j=i+1;j<n;j++)
if (x[k]>x[j]) k=j;
if(k!=i) { int temp=x[i]; x[i]=x[k] ;
x[k]=temp;}
}…
19. Сортировка вставками
53
2
0
1
4
3
vs =x[1]
j=-1
j=0
Пока vs<x[j] и
j>=0
20.
52
vs =x[2]
2
3
0
1
4
j=-1
j=1
j=0
Пока vs<x[j] и
j>=0
21.
23
vs =x[3]
5
0
1
4
0
j=-1
j=2
j=1
j=0
Пока vs<x[j] и
j>=0
22.
02
vs =x[4]
3
5
1
4
1
j=3
j=0
j=1
j=2
Пока vs<x[j] и
j>=0
23.
01
vs =x[5]
2
3
5
4
4
j=4
j=3
Пока vs<x[j] и
j>=0
24. Многомерные массивы
Инициализация матрицi
j
00
01
…
0n-2 0n-1
10
11
…
1n-2 1n-1
…
…
…
…
m-20
m-21
…
m-2n-2 m-2n-1
m-10
m-11
…
m-1n-2
…
m-1n-1
25.
Механизмвыделения
памяти
int **x, i;
x=(int**)malloc(sizeof( int*)*n);
for(i=0;i<n;i++)
x[i] = (int*)malloc(sizeof(int)*m);
x[0]
x00
x01 … X0m-1
x[1]
x10
x11 … X1m-1
x[2]
x20
x21 … X2m-1
xi0
xi1 … Xim-1
…
x[i]
…
x[n-1]
Xn-10 Xn-11 … Xn-1m-1
26.
Механизмосвобождения
памяти
for(i=n-1;i>=0;i--)
free (x[i]);
free(x);
x[0]
x00
x01 … X0m-1
x[1]
x10
x11 … X1m-1
x[2]
x20
x21 … X2m-1
xi0
xi1 … Xim-1
…
x[i]
…
x[n-1]
Xn-10 Xn-11 … Xn-1m-1
27. Обращение к элементу матрицы x[i,j]
фиксируется строкаfor(i=0;i<n;i++)
фиксируется столбец
for(j=0;j<m;j++)
…
индекс строки
индекс столбца
X[i][j]
28.
ij
00
01
…
0m-2 0m-1
10
11
…
1m-2 1m-1
…
…
…
…
n-20
n-21
…
n-2m-2 n-2m-1
n-10
n-11
…
n-1m-2
…
n-1m-1
29.
for(i=0;i<m;i++)for(j=0;j<n;j++)
… x[j][i]
фиксируется строка
фиксируется столбец
i
j
00
01
…
0m-2 0m-1
10
11
…
1m-2 1m-1
…
…
…
…
n-20
n-21
…
n-2m-2 n-2m-1
n-10
n-11
…
n-1m-2 n-1m-1
…
30. Инициализация элементов матрицы. Ввод данных с клавиатуры.
…float **A;
int n,m,i,j;
printf ("Введите количество строк матрицы: ");
scanf("%d",&n);
printf ("Введите количество столбцов матрицы: ");
scanf("%d",&m);
A = (float**) malloc(sizeof(float*)*n);
31.
for(i=0;i<n;i++)A[i] = (float*) malloc(sizeof(float)*m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf("A[%d][%d]= ",i,j);
scanf("%f",&(A[i][j]));
}
…
32. Получение значений случайным образом
…float **x;
int n,m,i,j;
…
x = (float**) malloc(sizeof(float*)*n);
for( i=0;i<n;i++)
x[i] = (float*)malloc(sizeof(float)*m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
x[i][j] = rand()%200/(rand()%100+1.);
…
33. Печать элементов матрицы
ij
00
01
… 0m-2 0m-1 “/n”
10
11
… 1m-2 1m-1 “/n”
…
…
…
n-20
n-21
…
n-2m-2 n-2m-1
n-10
n-11
…
n-1m-2 n-1m-1
…
…
34.
…for(i=0;i<n;i++)
{
for( j=0;j<m;j++)
printf("%8.3f ",x[i][j]);
// переход на новую строку экрана
printf("\n");
}
…