Массивы — очень полезные сущности, особенно в тех случаях, когда необходимо под одним именем объединить группы переменных одного и того же типа, обращаться к таким переменным можно через целочисленный индекс. Например, всем известная игра крестики нолики может быть представлена в виде массива. Размер поля — 3*3 клетки (левая верхняя ячейка может быть нулевым элементом, а правая нижняя клетка 8-м элементом массива). На самом деле, массивы — это самый эффективный способ для хранения большого количества однотипной информации под одним и тем же названием. Массивы могут иметь абсолютно любой тип данных, включая структуры и классы.
Массив можно представить как набор ячеек:
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
Каждая пара квадратных скобочек — это элемент массива, в каждом элементе массива можно хранить отдельное значение.
Пора приступить к изучению синтаксиса объявления массива:
int instanceArray[10]; // мы объявили массив
Мы только что объявили целочисленный массив размером 10 ячеек (мест, в которых значения массива хранятся). Чтобы обратиться к конкретному элементу массива, нужно просто указать имя массива и в квадратных скобках — порядковый номер. Единственно, вам следует знать, что на самом деле первый элемент массива имеет индекс — 0, тогда индекс последнего элемента равен размеру массива минус один. Например, индексы для массива из 10 элементов будут соответствовать этому диапазону: от 0 до 9. Будьте осторожны, никогда не выходите за пределы массива, это может привести к непредсказуемым ошибкам.
Но как вы можете применить только что полученные знания? Допустим, вам нужно сохранить строку, но язык Cи не имеет встроенный типа данных для строк, в таком случае мы можем воспользоваться массивом. Например:
char string[10];
Этот код позволит нам объявить массив символов из 10 элементов. И мы сможем сохранить в этот массив данные, которые введет пользователь. Первый входной символ сохраниться в нулевую ячейку, второй символ — в 1-ю ячейку и т. д. Таким образом работать со строками — сравнительно легко, потому что это позволяет работать со строками любой длинны и вся строка хранится в одной переменной. А теперь представьте ситуацию, когда пришлось бы хранить строку не в массиве, а в десятках переменных — это не очень удобно. Кроме того, с массивами очень легко работать в цикле, поочереди перебирая каждый элемент массива:
char string[10]; // символьный массив на 10 элементов
scanf( "%s", string ); // использование scanf для ввода строки - это очень хороший способ
int ct = 0;
for ( ct = 0; ct < 10; ++ct )
{
if ( string[ct] == 'a' )
{
printf( "Вы ввели символ a!\n" );
}
}
Давайте посмотрим, что в этой программе происходит. Функция scanf() считывает вводимую пользователем строку. Первый её параметр — %s говорит о том, что необходимо считать строку. Во втором параметре мы не используем амперсанд, так как второй параметр это указатель на первый элемент массива string. То есть имя массива — это указатель на первый элемент массива, запомните это. Так что мы просто передаем массив непосредственно в scanf() без использования амперсанда и это работает прекрасно.
Кроме того, обратите внимание, что для доступа к элементу массива, мы просто используем квадратные скобки, внутри которых ставим значение, которое нас интересует. В данном случае, мы перебираем элементы от 0 до 9 и проверяем каждый элемент на равенство символу — a. Обратите внимание, что в данном примере есть один не маловажный момент, если пользователь введет строку размером — более 10 символов, то вся строка не поместится в массив и часть строки будет отброшена. Но вы пока на это не обращайте внимание, более подробно работу строк мы рассмотрим в следующем уроке.
Комментарии
avraal
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <math.h> int main() { setlocale(LC_ALL, "rus"); int mas[10]; int i, sum; sum = 0; for(i = 0; i < 10; i++) { printf("Введите число: "); scanf("%d", mas); if(mas[i] >= 0) { sum = sum + 1; } } printf("Количество позитивных чисел: %d", sum); return 0; }Если я после запуска ввожу числа от 1 до 10, то пишет, что положительных чисел 8
В чем ошибка?
ilyahal
scanf("%d", &mas[i]);