Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

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






Инициализация массивов






Как и простые переменные, массивы могут быть инициализированы при объявлении. Инициализатор для объектов составных типов (каким является массив) состоит из списка инициализаторов, разделенных запятыми и заключенных в фигурные скобки. Каждый инициализатор в списке представляет собой либо константу соответствующего типа, либо, в свою очередь, список инициализаторов. Эта конструкция используется для инициализации многомерных массивов.

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

Если в списке инициализаторов меньше элементов, чем в массиве, то оставшиеся элементы неявно инициализируются нулевыми значениями. Если же число инициализаторов больше, чем требуется, то выдается сообщение об ошибке.

Примеры инициализации массивов:

nt a[3] = {0, 1, 2}; // Число инициализаторов равно числу элементов
double b[5] = {0.1, 0.2, 0.3}; // Число инициализаторов меньше числа элементов
int c[ ] = {1, 2, 4, 8, 16}; // Число элементов массива определяется по числу инициализаторов
int d[2][3] = {{0, 1, 2}, {3, 4, 5}}; // Инициализация двумерного массива. Массив состоит из двух строк, // в каждой из которых по 3 элемента. Элементы первой строки // получают значения 0, 1 и 2, а второй – значения 3, 4 и 5.
int e[3] = {0, 1, 2, 3}; // Ошибка – число инициализаторов больше числа элементов

Обратите внимание, что не существует присваивания массиву, соответствующего описанному выше способу инициализации.

int a[3] = {0, 1, 2}; // Объявление и инициализация
a = {0, 1, 2}; // Ошибка

26. Си. Примеры работы с одномерными массивами: ввод/вывод

 

В языке C нет возможности вводить и выводить весь массив одним оператором ввода/вывода. Можно вводить и выводить только один элемент массива. Следовательно, для того чтобы ввести весь массив, надо использовать цикл.

int a[10], n; printf(" Введите количество элементов массива (от 0 до 9): "); // Объявляем массив и переменную для количества элементов массива
scanf(" %d", & n); // Ввод количества элементов массива
if (n < 0 || n > 9) { printf(" Количество элементов массива должно быть от 0 до 9! \n"); return; } // Если входные данные// то печатаем соответствующее сообщение и выходим из программы
for (i = 0; i < n; i++) // Ввод массива по одному элементу
scanf(" %d", & a[i]); // Можно использовать scanf(" %d", a + i)

Вывод также осуществляется в цикле.

for (i = 0; i < n; i++) printf(" a[%d] = %3d\n", i + 1, a[i]);  

В результате на экране мы увидим примерно следующий текст:

a[1] = 4

a[2] = 15

a[3] = -2

...

 

27. Си. Примеры работы с одномерными массивами: суммирование значений

Даны три массива разной размерности. Определить в каком массиве больше сумма элементов.

#include < cstdio> #include < locale.h>   const int nmax = 100;  
int ArrayInput(int *n, double x[], char *fname); // Функция ввода массива из файла
double Sum(double x[], int n);   void main(int argc, char *argv[]) { double a[nmax], b[nmax], c[nmax]; double sa, sb, sc, max; int na, nb, nc;   setlocale(LC_ALL, " rus"); // Функция поиска суммы элементов массива     // Меняем кодировку для консольного приложения
if (argc < 4) { printf(" Недостаточно параметров! \n"); return; } if (! ArrayInput(& na, a, argv[1])) return; if (! ArrayInput(& nb, b, argv[2])) return; if (! ArrayInput(& nc, c, argv[3])) return;   sa = Sum(a, na); sb = Sum(b, nb); sc = Sum(c, nc);   max = sa; if (sb > max) max = sb; if (sc > max) max = sc;   if (sa == max) printf(" Массив А имеет максимальную сумму элементов: %9.3lf\n", max); if (sb == max) printf(" Массив B имеет максимальную сумму элементов: %9.3lf\n", max); if (sc == max) printf(" Массив C имеет максимальную сумму элементов: %9.3lf\n", max); }   double Sum(double x[], int n) { double s = 0;   for (int i = 0; i < n; i++) s += x[i];   return s; }   int ArrayInput(int *n, double x[], char *fname) { FILE *file;   if ((file = fopen(fname, " r")) == NULL) { printf(" Невозможно открыть файл '%s'\n", fname); return 0; } if (fscanf(file, " %d", n) < 1) { printf (" Ошибка чтения из файла '%s'\n", fname); fclose(file); return 0; } if (*n < 0 || *n > nmax) { printf(" Кол-во эл-тов массива должно быть от 1 до %d! (файл '%s')\n", nmax, fname); return 0; } for (int i = 0; i < *n; i++) if (fscanf(file, " %lf", & x[i]) < 1) { printf (" Ошибка чтения из файла '%s'\n", fname); fclose(file); return 0; } fclose(file); return 1; }

 

28. Си. Примеры работы с одномерными массивами: нахождение максимального элемента

#include < iostream>

using namespace std;

int main()

{

int m[10], I, min, max;

for(i=0; i< 10; i++){

cin> > m[i];

}

max=m[0];

for(i=1; i< 10; i++){

if(max< m[i])max=m[i];

}

min=m[0];

for(i=1; i< 10; i++){

if(min> m[i]) min = m[i];

}

cout< < " min = " < < min< < endl;

cout< < " max = " < < max;

 

system(" PAUSE");

return 0;

}


29. Си. Примеры работы с одномерными массивами: циклический сдвиг

 

//Cдвигает элементы массива на 1 влево

 

#include < iostream>

#include < iterator>

#include < algorithm>

 

 

int main() {

std:: size_t const arraySize = 10;

int array[arraySize] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

 

std:: rotate(array, array + 1, array + arraySize);

 

std:: copy(array, array + arraySize, std:: ostream_iterator< int> (std:: cout, " "));

std:: cout < < std:: endl;

}

 

30. Си. Примеры работы с одномерными массивами: поиск элемента

/* Бинарный поиск */

#include

main()

{

int k[100], v, i, j, m;

for (i=0; i< 100; i++)

scanf(" %d", & k[i]);

scanf(" %d", & v);

i=0; j=100; m=50;

while (k[m]! =v)

{

if (k[m] < v) i+=m;

else j=m-i;

m=(i+j)/2;

}

printf(" %d %d", v, m);

}

 

 

31. Си. Примеры работы с одномерными массивами: алгоритмы сортировки массивов


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.012 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал