ТОП 10:

Статические массивы. Объявление массивов.



массивы – это упорядоченная последовательность, имеющая общее имя. Это общее понятие массива, хочется заметить, что массивы бывают статические и динамические. Массив имеет фиксированное число членов. Динамический массив может менять число членов в течение выполнения программы.

Сверху идут индексы массива, а снизу элементы.

 

После рассмотрения общей теории по массивам, рассмотрим уже конкретно по языку программирования С.

 

Синтаксис массива в языке программирования С

 

Для начала посмотрим, как описывается массив на языке С.

 

<тип элементов массива> идентификатор (имя массива) [размерность массива];

 

Вот так выглядит описание массива в общем виде, теперь расскажу подробнее. Сначала вы указываете тип данных, который имею все элементы массива (это важно, что все элементы массива должны быть одного типа. Например, в целочисленный массив вы не можете добавить строку в качестве элемента). Идентификатор – это то, как будет называться массив в вашей программы, то же самое что имя и обычной переменной. Размерность массива – это то количество элементов, которое может иметь ваш массив. Нумерация элементов массива начинается с 0, поэтому в качестве размерности нужно указывать число n-1, где n-количество элементов в массиве. Напомню, что в статическом массиве число элементов постоянно в течение выполнения всей программы, и поэтому в качестве размерности массива может быть либо целое число, либо константное выражение целого типа данных.

 

Обращаются к элементам массива следующим образом: имя массива [номер элемента]; где номер элемента это целое число или переменная, причем небольшие, чем n-1, где n – количество элементов массива.

 

Теперь мы узнали, как объявлять массив и как обращаться к его элементам, но мы еще не можем использовать их в программе, пока мы не узнаем несколько алгоритмов для работы с массивами и начнем мы с заполнения и вывода массива.

 

Заполнение и вывод массива

 

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

 

1. Самый нерекомендуемый, но иногда применяемый способ – заполнение массива вручную, то есть вид a[1]=x1; a[2]=x2, a[3]=x3 … a[n-1]=xn_m1, то есть вы в коде даете элементам массива значения, которые придумываете сами (значения должны совпадать с типом элементов массива)

 

2. Заполнение с клавиатуры – это заполнение идет чаще всего циклом, но пользователь с клавиатуры вводит значения элементов массива. Вот так это будет выглядеть for(int i=0;i<n;i++) scanf(“%i”,&a[i]); В этом примере у нас есть одномерный целочисленный массив a размерности n и цикл, идущий от 0 до n-1, и оператор scanf, про который вы можете найти в уроке «Основные элементы языка С», который считывает с клавиатуры элементы массива.

 

3. Заполнение случайными числами – заполнение массива идет чаще всего циклами, но дополнительно используются функции rand и srand, которые вы найдете в библиотеке stdio.h

 

Мы рассмотрели способы ввода массивов, способы вывода абсолютно такие же только везде вместо scanf нужно писать printf и не ставить &.

 

Теперь мы смогли заполнить массив, но нам нужно произвести с ним какие-либо действия, я покажу такие действия: нахождение максимума и минимума, нахождение суммы и произведения элементов массива и подсчет элементов массива, удовлетворяющих определенному условию. Сортировки и перестановки в массивах достойны отдельного урока.

 

Нахождение максимального и минимального элемента в массиве

 

Алгоритм нахождение максимального (минимального) элемента массива прост. Для начала мы берем гипотезу, что первый элемент максимальный, а затем сравниваем все элементы массива с максимумом, если встречен элемент больше максимума, то максимумом становиться тот элемент, и продолжаем сравнивание элементов с новым максимумом. Точно также находится и минимальный элемент массива. Все коды программ вы найдете в примерах, а здесь объясняется только принцип.

 

Нахождение суммы и произведения элементов массива

 

Тут, казалось бы, все просто складывай или перемножай себе элементы массива без разбору и все нормально будет, но на самом деле все не так просто. Я тут хочу обратить внимание на два нюанса, а все остальное действительно просто, умножай или складывай. Первое о чем я хочу сказать, перед нахождением суммы переменная, в которой это сумма храниться должна быть равна 0, а переменная, в которой храниться произведение должна быть равна 1, так как любое число, умноженное на 0, будет 0. Второе и очень важное, надо следить, чтобы переменная не вышла за диапазон значений, отдающийся под ее тип данных, часто бывает необходимым использовать типы long , это касается и суммы и произведения, особенно произведения.

 

Подсчет элементов массива, удовлетворяющих определенному условию

 

На самом деле тут ничего сложного нет. Надо просто завести еще одну переменную-счетчик, которая изначально равна 0, затем просматривать все элементы массива, и если данный элемент удовлетворяет условию, приведенному в задаче, то увеличивать эту переменную на 1.

 

Примеры

 

1.найти номер максимального элемента массива.

#include<stdio.h>

#include<stdlib.h>

int main()

{

const int n=10;

int nArray[n];

//заполнение массива

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

scanf("%i",&nArray[i]);

//инициализация номера максимального элемента и максимального элемента

int nMax=0, nNuberofMax=nArray[0];

//поиск максимального элемента и его номера

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

if(nArray[i]>nMax)

{

nMax=nArray[i];

nNumberofMax=i;

}

//вывод номера максимального элемента

printf("%i",nNumberofMax);

return 0;

}

Билет №14

Динамические массивы. Объявление массивов.

Во всех вышеприведенных примерах объявлялись статические массивы, поскольку нижняя граница равна нулю по определению, аверхняя всегда задавалась в этих примерах константой. Напомню, что в C# все массивы, независимо от того, каким выражением описывается граница, рассматриваются как динамические, и память для них распределяется в "куче". Полагаю, что это отражение разумной точки зрения: ведь статические массивы, скорее исключение, а правилом является использование динамических массивов. В действительности реальные потребности в размере массива, скорее всего, выясняются в процессе работы в диалоге с пользователем.

Чисто синтаксически нет существенной разницы в объявлении статических и динамических массивов. Выражение, задающее границу изменения индексов, в динамическом случае содержит переменные. Единственное требование - значения переменных должны быть определены в момент объявления. Это ограничение в C# выполняется автоматически, поскольку хорошо известно, сколь требовательно C# контролирует инициализацию переменных.

Приведу пример, в котором описана работа с динамическим массивом:

public void TestDynAr()

{

//объявление динамического массива A1

Console.WriteLine("Введите число элементов массива A1");

int size = int.Parse(Console.ReadLine());

int[] A1 = new int[size];

Arrs.CreateOneDimAr(A1);

Arrs.PrintAr1("A1",A1);

}//TestDynAr

Билет №15

Адреса и ссылки.

Ссылки

Гипертекстовый документ - это документ, содержащий ссылки на другие документы, позволяющие при помощи нажатия кнопки мыши быстро перемещаться от одного документа к другому. Часто подобные ссылки можно увидеть и в файлах справки программных продуктов.

 

Гипермедийный документ - основан на гипертекстовом документе, но в дополнение к тексту содержит разнообразную графику, видео- и аудиообъекты. В таких документах в качестве ссылок часто используются изображения. Существует очень много типов мультимедийных объектов, которые могут быть размещены на Web - странице.

 

Ссылка состоит из двух частей. Первая из них - это то, что вы видите на странице; она называется указатель (anchor). Вторая часть, дающая инструкцию браузеру, называется адресной частью ссылки (URL - адресом, URL reference). Когда вы щелкаете мышью по указателю ссылки, браузер загружает документ, адрес которого определяется URL - адресом. Составные части ссылки рассмотрены ниже.

В языке C++ появился новый механизм работы с переменными — ссылки. Функция swap() была хороша, только не слишком удобно применять разыменование. С помощью ссылок функция swap() может выглядеть аккуратнее.

#include void swap(double& a, double& b) { double temp = a; a = b; b = temp;}

А вызов функции тогда будет уже без взятия адреса переменных.

swap(x, y);

Конструкция double& объявляет ссылку на переменную типа double. При таком объявлении функции в стек будут положены не значения переменных, а их адреса.

Ссылка — это указатель, с которым можно работать, как с обычной переменной.

Ссылка не может быть равна NULL. Указатель может. Ссылка не может быть непроинициализирована. Указатель может.

Для взятия адреса переменной и для объявления ссылки используется одинаковый символ — амперсанд. Но в случае взятия адреса & стоит в выражении, перед именем переменной. А в случае объявления ссылки — в объявлении, после объявления типа.







Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.66.217 (0.01 с.)