Изучение операторов, управляющих структур, работа с целочисленными массивами
Основные принципы работы с массивом. Использование массива для временного хранения введенных пользователем данных, нахождение суммы и среднеарифметического значения всех элементов. Порядок использования цикла for для обхода всех элементов массива.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 13.01.2014 |
Размер файла | 323,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное агентство по образованию
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Учебный Центр Информационных Технологий «Информатика»
- Лабораторная работа № 2
- по дисциплине «Информатика и программирование (I часть)»
- Направление подготовки: 230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»
- Изучение операторов, управляющих структур, работа с целочисленными массивами
- Выполнил слушатель: Иванова Е.В.
- Группа: 2
- Преподаватель: Зальцбер Д.В.
- Новосибирск, 2013 г.
1 Задание
Найти в массиве элемент, наиболее близкий к среднему арифметическому суммы его элементов.
2 Теоретический материал
массив данные хранение
Операторы создают то, что в обыденном сознании ассоциируется с понятием алгоритм - описание последовательности действий, выполняемых программой, или логика ее работы. В Си реализован общий для большинства языков программирования «джентльменский набор» управляющих конструкций:
· линейная последовательность действий;
· условная конструкция (если-то-иначе);
· конструкция повторения (цикл);
· переход (и его разновидности).
Управляющая конструкция - линейная последовательность действий является основной в языках программирования.
В соответствии с принципом вложенности элементами последовательности могут быть не только элементарные действия (простые операторы), но и вложенные синтаксические конструкции, которые на текущем уровне также выполняются последовательно друг за другом.
В Си используется такой принцип: если составной частью управляющей конструкции является единственный оператор, то он никак синтаксически не выделяется. Если же составной частью является последовательность операторов, то она заключается в фигурные скобки ({}) и образует блок.
Блок, или составной оператор выступает как единая синтаксическая единица, вложенная в конструкцию верхнего уровня. В начале его могут быть определены собственные переменные блока, действие которых не распространяется за его пределы, а время существования совпадает с временем его выполнения. Операторы, составляющие блок, выполняются последовательно друг за другом.
Единственный условный оператор имеет две разновидности: с else и без него.
В качестве условия выступает выражение, которое может иметь любой целый результат и интерпретируется в соответствии с принятыми в Си соглашениями о логических значениях: 0 -«ложь», не 0 - «истина». Действует он как и во всех языках программирования: если значение выражения есть «истина», то выполняется первый оператор, если «ложь» - второй (после else). Конструкция является структурированной, обе ветви - прямая и альтернативная - «сливаются» в одну
В Си имеется три вида циклических конструкций. Общее у них одно: все условия в них являются условиями продолжения, то есть циклы продолжаются, пока значение этих условных выражений - «истина». Операторы цикла состоят из заголовка, в котором определяется характер циклического процесса и оператора - тела цикла. Скобки в заголовке цикла являются неотъемлемым элементом синтаксиса языка.
Метка default обозначает последовательность, которая выполняется «по умолчанию».
Массив - совокупность элементов одного типа.
тип имя_массива[количество_элементов]
тип - задает тип элемента массива и может быть как стандартный так и определенный пользователем.
имя_массива - задается пользователем и используется для обращения к массиву, может состоять из символов английского алфавита, цифр и символов подчеркивания но недолжно начинаться с цифры и недолжно совпадать с зарезервированными словами среды разработки.
количество_элементов - целочисленная константа определяющая сколько элементов будет в массиве.
Доступ к элементу массива осуществляется с помощью индекса, например A[0] - первый элемент, A[1] - второй элемент, A[n] - n-й элемент массива. Нумерация элементов начинается с нуля. В памяти элементы массива хранится последовательно т.е A[0], A[1], A[2]…A[n]. Имя массива это адрес ячейки памяти по которому находится первый элемент.
3 Описание алгоритма
Дано:
целочисленный массив.
Результат:
порядковый номер элемента, наиболее близкого к среднему арифметическому суммы элементов массива.
Метод решения:
вычислим среднеарифметическое значение элементов последовательности, сравним его с каждым элементом и найдем наиболее близкое значение, порядковый номер которого и будет результатом.
Алгоритм:
SZ - Количество элементов
B - массив чисел
sum - сумма всех элементов массива
avg - среднеарифметическое всех значений
xAvg - результат
Суммируем все элементы массива B (sum = A0 + А1 + … +Аn-1).
Делим сумму на количество элементов (avg=sum/SZ), получаем среднеарифметическое.
По умолчанию считаем что первый элемент массива, ближайший к среднеарифметическому (xAvg = 0)
Проходим по всем элементам массива, начиная с первого (i = 1).
Если |B[xAvg] - avg | больше |B[i] - avg |, то присваиваем результату новый индекс (avg = i)
Прибавляем к результату единицу (avg + 1) для получения номера элемента массива.
Выводим результат (avg) на экран.
4 Описание реализации
Подключаемые библиотеки:
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "math.h"
Используемые переменные:
SZ - размер массива (количество элементов) B
B - массив чисел
i - используется в циклах как индекс массива B
sum - сумма всех элементов массива
avg - используется для вычисления среднеарифметического значения элементов массива.
j - индекс элемента значение которого наиболее близкое к значению среднеарифметического всех элементов
Используемые конструкции:
if - для сравнения двух величин
for - для обхода всех значений последовательности (массива)
Функции, используемые в программе:
float SumArr(int A[ ],int n) - функция для нахождения суммы элементов массива.
int xAverage(int A[ ],int n,float x) - функция для нахождения наиболее близкого элемента.
Стандартные функции:
printf() - вывод форматированного текста на экран
system(“pause”)
fabs() - возвращает модуль вещественного числа
4.6. Тело функции нахождения суммы всех элементов массива:
float SumArr(int A[], int n)
{ int i; // переменная для обхода элементов массива
float s=0; //ввод переменной для суммы элементов
for(i=0;i<n;i++)
{
s+=A[i]; //вычисление суммы элементов массива
}
return s; //функция возвращает сумму элементов массива
Тело функции поиска в массиве элемента, наиболее близкого к среднему арифметическому суммы элементов массива:
int xAverage(int A[],int n,float x)
{ int i;
// по умолчанию считаем, что первый элемент массива равен среднеарифметическому
int j=0;
// ищем индекс элемента ближайшего к среднеарифметическому
// т.к. первый элемент находится в нулевой ячейке массива, то
// к индексу прибавляем единицу для получения номера элемента
for(i=1;i<n;i++)
{ if(fabs(A[j]-x)>fabs(A[i]-x))
{
j=i;
}
}
return j; // функция возвращает сумму индекс элемента
}
Основной блок программы:
void main ()
{
int B[SZ]={4,31,53,67,11,45}; //инициализация массива
int i; // переменная для обхода элементов массива
printf("Array B: "); //вывод на экран массива
for(i=0;i<SZ;i++)
{ printf("%d ",B[i]);
}
printf("\n");
float sum,avg; //объявление переменных
//вызов функции для нахождения суммы элементов массива
sum=SumArr(B,SZ);
printf("sum=%.3f\n",sum); //вывод на экран суммы элементов массива
avg=sum/SZ; // среднее арифметическое суммы элементов массива
printf("sr=%.3f\n",avg); //вывод на экран среднее арифметического
int xAvg;
//вызов функции для нахождения индекса элемента, наиболее близкого к среднему
//арифметическому суммы
xAvg=xAverage(B,SZ,avg);
//вывод на экран индекса элемента, наиболее близкого к среднему
//арифметическому суммы
printf("xAvg=%d\n",xAvg);
system("pause");
}
5 Пример работы программы
Рис. 1. Результат работы программы.
Тест №1
Вводим десять чисел от 0 до 50 с шагом 10, в сумме получаем 150, среднеарифметическое равно 25. Результат, второй элемент.
Тест №2
Вводим все одинаковые числа и получаем первый элемент, так как любое из значений будет равно среднеарифметическому всех значений.
Тест №3
Вводим числа, сумма которых равна нулю, тогда среднеарифметическое будет равно нулю. Так как последние 4 числа равны нулю, результатом будет номер первого элемента равного или близкого к нулю, в нашем случае это элемент с номером 2.
Выводы
В ходе выполнения лабораторной работы были изучены основные принципы работы с массивом. Использование массива для временного хранения введенных пользователем данных, нахождение суммы и среднеарифметического значения всех элементов, а так же использование цикла for для обхода всех элементов массива.
На приведенном наборе тестов программа работает корректно.
Приложение. Текст программы
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "math.h"
#define SZ 6
float SumArr(int A[],int n); //функция для нахождения суммы элементов массива
int xAverage(int A[],int n,float x); //функция для нахождения наиболее близкого
//элемента
void main ()
{
int B[SZ]={-100,100,0,0,0,0}; //инициализайия массива
int i; // переменная для обхода элементов массива
printf("Array B: ");
for(i=0;i<SZ;i++)
{
printf("%d ",B[i]); //вывод на экран заданного массива
}
printf("\n");
float sum,avg; //инициализация переменных
sum=SumArr(B,SZ); //вызов функции для нахождения суммы элементов массива
printf("sum=%.3f\n",sum);
avg=sum/SZ; // среднее арифметическое суммы элементов массива
printf("sr=%.3f\n",avg); //вывод на экран среднее арифметического
int xAvg;
xAvg=xAverage(B,SZ,avg); //вызов функции для нахождения наиболее близкого
// элемента к среднему арифметическому
printf("xAvg=%d\n",xAvg); //вывод на экран искомого значения
system("pause");
}
float SumArr(int A[], int n) //функция для нахождения суммы элементов массива
{
int i; // инициализация переменной для обхода элементов массива
float s=0; //ввод переменной для суммы элементов
for(i=0;i<n;i++)
{
s+=A[i]; //вычисление суммы элементов массива
}
return s;
}
int xAverage(int A[],int n,float x) //функция для нахождения наиболее близкого
{ //элемента
int i;
int j=0; //по умолчанию считаем, что первый элемент массива равен
for(i=1;i<n;i++) //среднему арифметическому
{
if(fabs(A[j]-x)>fabs(A[i]-x)) //находим минимальное значение по модулю
{ //разницы между текущим элементом и
j=i; //заданным
}
}
return j;
}
Размещено на Allbest.ru
Подобные документы
Выведение значения элементов массива, которые удовлетворяют неравенству. Подсчет количества отрицательных элементов массива. Изменение исходного массива. Тестирование программы. Проверка её работоспособности. Реакция программы на сообщение об ошибке.
лабораторная работа [1,3 M], добавлен 23.11.2014Подсчет количества отрицательных элементов массива. Изменение исходного массива перемещением всех его положительных элементов в начало с исходным порядком их следования. Вывод на дисплей количества перемещенных элементов. Алгоритм и код программы.
лабораторная работа [946,5 K], добавлен 23.11.2014Одномерные числовые массивы, образование элементами целочисленного массива невозрастающей последовательности. Программное нахождение суммы элементов каждой возможной строки матрицы и формирование массива из найденных сумм, вывод массива-результата.
лабораторная работа [12,8 K], добавлен 09.01.2011Особенности поиска среднеарифметического значения элементов массива. Общая характеристика проблем разработки в среде Turbo Pascal программы упорядочивания массива по возрастанию. Рассмотрение основных этапов разработки программы на языке PASCAL.
курсовая работа [896,7 K], добавлен 18.05.2014Заполнение массива из целых чисел с присвоением элементам разных значений. Варианты программы с использованием различных операторов организации циклов. Определение квадрата максимального из четных элементов массива и общего числа нулевых элементов.
лабораторная работа [259,3 K], добавлен 14.05.2011Вычисление суммы положительных элементов массива. Упорядочивание элементов массива по убыванию. Решение задачи с помощью алгоритма, реализованного в среде Microsoft Visual 2008 Express. Реализация и тестирование программы. Выполнение трассировки функций.
практическая работа [146,3 K], добавлен 23.01.2015Разработка и реализация типовых алгоритмов обработки одномерных массивов на языке Delphi. Максимальный и минимальный элемент массива. Значение и расположение элементов массива. Элементы массива, находящиеся перед максимальным или минимальным элементом.
лабораторная работа [12,8 K], добавлен 02.12.2014Сравнение различных способов обхода данных. Заполнение массива для случайного обхода. Изучение понятия кэш-памяти, ее основных размеров и функций. Оптимальный и неоптимальный алгоритм умножения двух матриц с точки зрения порядка обхода данных в памяти.
презентация [94,7 K], добавлен 02.06.2013Структура программного комплекса. Ввод информации из заданного файла. Создание набора данных. Добавление элементов в конец набора данных. Просмотр всех элементов набора данных. Копирование информации из НД в заданный файл. Сортировка массива по номерам.
курсовая работа [630,5 K], добавлен 01.06.2014Массив - это коллекция переменных, которые имеют общее имя и базовый тип. Функциональные возможности, виды массивов и их характеристика. Основные требования к входным и выходным данным массива. Использование IF THEN для перехвата всех возможных ошибок.
реферат [22,6 K], добавлен 01.12.2010