Автор работы: Пользователь скрыл имя, 21 Декабря 2010 в 13:59, лабораторная работа
1.Цель
Изучить операторы, управляющие структуры, поработать с целочисленными массивами. Научиться решать задачи с использованием циклов, массивов.
2.Вариант задания
Найти в массиве элемент, наиболее близкий к среднему арифметическому суммы его элементов.
Изучить операторы, управляющие структуры, поработать с целочисленными массивами. Научиться решать задачи с использованием циклов, массивов.
Найти в массиве элемент, наиболее близкий к среднему арифметическому суммы его элементов.
Массив — Упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов.
Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д.
<тип> <имя массива> [размер];
Способы объявления:
int Array[10]; // размер 10, тип данных - целое число
double Array[12][15]; // массив, двумерный, тип данных – число с дробной частью
int a[]={10,14,13}; //массив из 3 элементов, сразу проинициализирован.
int b[2][3]={{10,12,5},{24,3,2}}; //двумерный массив, сразу проинициализирован.
Все элементы массива нумеруются с нуля. В памяти элементы массива чаще всего распологаются друг за другом.
При обращении к элементу массива необходимо указать его имя и порядковый номер:
Int a[3]={12,13,23}; //имеется массив а, состоящий из 3 элементов, необходимо переменной с присвоить значение второго элемента массива, получим:
Int c=a[1];
Управляющая структура IF – структура условного управления
Общий вид:
IF (логическое выражение)
{блок операторов 1}
Else
{блок операторов 2};
Т.е. если выполняется условие, то выполняется блок операторов 1, если условие не выполняется, то блок операторов 2. Else можно опустить и структура if будет выполняться только при выполнении условия.
Цикл FOR
Циклы – разновидность управляющей конструкции в языках программирования, предназначенная для организации многократного исполнения набора инструкций.
Синтаксис цикла for
For (инициализация; условие продолжения; наращивание)
{блок операторов};
При обнаружении в программе цикла for первым выполняется инициализация, в котором обычно устанавливается счетчик цикла. Это происходит только один раз перед запуском цикла. Затем анализируется условие продолжения, которое также называется условием прекращения цикла. Пока оно равно true, цикл не прекращается.
Каждый раз после всех строк тела цикла выполняется наращивание, в котором происходит изменение счетчика цикла. Как только проверка условие продолжения даст результат false, все строки тела цикла и наращивание будут пропущены и управление будет передано первому выражению, следующему за телом цикла.
Директива препроцессора #define – используется для создания идентификатора и для макроподстановок.
#define N 100 //при препроцессорной обработке везде где есть N в программе, происходит ее замена на 100.
Входные данные: массив данных
Результат: один элемент массива, наиболее близкий к среднеарифметическому суммы элементов данного массива
Метод решения: нахождение с помощью цикла элемента , у которого разница между значением этого элемента и среднеарифметическим по модулю будет минимальна.
В алгоритме разобран 1-ый способ ввода массива
n – размер массива
a[n] – массив, в котором необходимо найти элемент, удовлетворяющий условию задачи
srednee – среднеарифметическое суммы элементов массива a[n]
s- переменная, используемая для обозначения искомого элемента в массиве
#define abs(a) ((a)<0 ? -(a) : (a)) – макроподстановка, используемая вместо функции «по модулю»
Так же для реализации построенного алгоритма на языке Си были использованы следующие стандартные функции:
Scanf() – функция, используемая для ввода данных с клавиатуры
srand(time(NULL)) – для формирования псевдослучайной последовательности
rand() – для присвоения случайного числа элементу массива
textcolor() и сprintf() – для вывода на экран необходимых значений в цветном виде
getch() – читает один символ, непосредственно. с консоли, без вывода его на экран. Нами используется в качестве паузы J
В этом пункте следует описать результаты тестирования вашей программы. Набор тестов должен быть необходимым и достаточным. На каждую ветку программы должен быть отдельный тест. Кроме того, должны быть приведены тесты на частные случаи в соответствие со спецификой задачи. Каждый тест должен сопровождаться пояснением: чем характерен этот случай, какой результат ожидается получить.
Каждый тест должен сопровождаться скриншотом (белый фон, черные символы –обязательно!!!): PrintScreen – копирует в буфер обмена изображение с экрана, Atl+PrintScreen – изображение активного окна.
Тест №1
Поиск искомого элемента, используя случайно заполненный массив:
Как видно из теста программа верно ведет поиск элемента
Тест №2
Поиск искомого элемента, используя массив, заданный вручную:
Программа работает корректно.
Тест №3
Поиск искомого элемента, используя массив, заданный вручную + частный случай: массив имеет одинаковые значения
Опять таки все ок
Приложение№1. Текст программы
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<time.h>
#define abs(a) ((a)<0 ? -(a) : (a)) //макро подстановка функции «по модулю»
void main()
{
clrscr(); //очистка экрана от предыдущих значений
const int n=20; //размерность массива
char c; //переменная, используемая для выбора режима ввода массива
int a[n];
int i;
float summ=0.0;
printf("Enter \"1\" if wish to fill a array automatically,\n\renter other figure if wish to fill a array manually\n\r");
scanf("%d",&c);
if (c==1)
{ //если пользователь выбрал заполнение массива случайными числами
srand(time(NULL)); //формирование псевдослучайной последовательности
for(i=0;i<n;i++) //цикл заполнения массива случайными числами (от -50 до 50)
{
a[i]=rand()%100-50;
textcolor(10);
cprintf("%4d ", a[i]);
if ((i+1)%10==0)
cprintf("\n\r");
summ+=a[i];
}
}
else
{
printf("enter array elements\n\r");
for(i=0;i<n;i++) //ручной ввод массива
{
scanf("%d",&a[i]);
summ+=a[i];
}
}
float mean=summ/n; //среднеарифметическое суммы элементов массива
printf("\n\rarithmetic-mean = %.2f\n\r",mean);
float k=abs(a[0]-mean);
int s=0;
for(i=1;i<n;i++) //цикл для поиска элемента массива, наиболее близкого к среднему
if ((abs(a[i]-mean))<k)
{
k=abs(a[i]-mean);
s=i;
}
printf("The closest element to the arithmetic-mean = %d\n\r",a[s]);
getch();
}