Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Обработка массивов




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

/* Программа 9. Программа демонстрирует типовые процедуры обработки массивов: ввод, вывод, анализ и обработка данных массива.*/

#include <stdio.h>

#include <math.h>

void in_arr(float *arr, int n); // ввод с клавиатуры n элементов массива

void out_arr(float *arr, int n); // вывод на экран n элементов массива

int array_processing(double *arr, int n, double *p sum, double *p prod);

/* Определение суммы s, произведения p и количества k " + "-ых элементов массива, расположенных после первого “ “-го элемента. Размер массива n <= 50.

ТЕСТ: x = { 1, 2, -1, 2, -2, 3, -3 }, n=7. Результаты: s=5, p=6, k=2.

p sum, p prod, – переменные-указатели. C указателями связаны две специальные операции: & и *. Оператор & x означает "взять адрес" переменной x, оператор *p x – "значение, расположенное по адресу p x".

*/

float max2(float *arr, int n); // поиск в массиве максимальной по модулю
// разности двух чисел. ТЕСТ: x = { 1, 5, 3, 0, -1, 2, 4}, n = 7, результат: = 6.

int max_eqw(float *arr, int n); // определение максимального числа равных
// соседних чисел. ТЕСТ: x = { 3, 1, 3, 0, 1, 1, 1, 1, 2}, n = 9, результат: 4.

main()

{ float x[50], p, s;

int i, k, n;

printf("\n Введите размер массива n: ");

scanf("%d", &n);

in_arr(x, n);

printf(" \n Исходный массив размером %d: \n", n);

out_arr(x, n);

k = array_processing(x, n, &s, &p);

printf("\n В массиве после первого \”-\“-го числа %d чисел x[i]>0, \

их сумма = %.3f, произведение = %.3f ", k, s, p);

printf("\n Макс-я по модулю разность двух чисел = %.3f ", max2(x, n));

printf("\n Макс-е число равных соседних чисел = %.3f ", max_eqw (x, n));

} // Конец main()

/* В комментариях функций in_arr() и out_arr() записаны операторы с элементами массива, обращение к которым выполняется по указателю без операции индексации arr [ i ] */.

void in_arr(float *arr, int n)

{ printf("\n Введите %d элементов массива: ", n);

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

scanf("%e", &arr[i]); // scanf("%e", arr++);

}

void out_arr(float *arr, int n)

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

{ printf(" %.3f ", x[i]); // printf(" %.3f ", *x++);

if ((i+1) % 8 == 0) // вывод массива по 8 чисел в строке:

printf("\n");

}

}

int array_processing(double *arr, int n, double *psum, double *pprod)

{ int i;

*psum = 0; *pprod = 1; k = 0, m = -1; // инициализация

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

if (arr[m] < 0) break;

for (i = m+1; i < n; i++)

if (arr[i] > 0)

{ *psum += arr[i];

*pprod *= arr[i];

k += 1;

}

return k;

}

float max2(float *arr, int n)

{ float k; int k, m = 0;

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

for(k = i+1; k < n; k++)

if(fabs(x[i]-x[k]) > m) m = fabs(x[i] - x[k]);

return m;

}

 

int max_eqw(float *arr, int n)

{ int i, k=0, m=0;

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

if(x[i] == x[i+1]) m++;

else if(m > k) k = m, m = 0;

return k+1;

}

Вопросы и упражнения

1. Как организован одномерный массив в программе: тип элементов массива, их расположение в памяти компьютера?

2. Как объявить массив в программе?

3. Какое значение имеет объект программы имя массива? Можно ли изменить это значение?

4. Как обратиться по указателю к элементу arr[i] массива?

5. Есть ли ошибка в списке инициализации массива: int х[3] = {1, 2, 3, 4};?

6. Напишите операторы вывода элементов одномерного массива по заданному условию: а) каждого k-го элемента, б) m последних элементов, в) только отрицательных или только положительных элементов.

7. Напишите функции: а) поиск минимального (максимального) элемента массива, б) поиск двух наибольших (наименьших) чисел в массиве.

8. Выполните упражнение 6 c выбором элементов массива по указателямю.

9. Определите значение m как результат операторов:

int m = 0, n = 10; // x[10] = { 1, 2, 2, 3, 4, 4, 5, 6, 6, 7 }

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

if(x[i]!= x[i+1]) m++; else m - -;

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 581 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2510 - | 2261 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.