Определение массива в Си
Массив представляет собой множество значений, которыми можно оперировать как группой, так и с отдельно каждым значением. Каждый элемент в массиве является как бы отдельной переменной, с которой можно обращаться, как с обычной переменной.
У каждого элемента в массиве есть свое положение — индекс элемента, т.е. его порядковый номер. Индекс элемента массива не имеет никакого отношения к присвоенному ему значению.
Для определения массива следует указать тип значений, которые он содержит, и максимальное количество элементов, которое может быть в него записано.
int имя_массива [макс_кол-во_элементов];Пример:
int f [10];Нумерация элементов массива начинается с 0.
Если определен массив, имеющий 10 элементов, значит максимальным возможным индексом является число 9.
После определения массива можно сразу присваивать начальные значения:
int f [10] = {2,4,-3,-6,-1,4,7,5,10,13};
Работа с массивами в Си
1 2 3 4 5 6 7 8 9 10 11 12 | main() { int f[9]; int i; f[0]=1; f[1]=1; for(i=2;i<=10;i++) { f[i]=f[i-1]+f[i-2]; printf("%d\t",f[i]); } } |
Заполнение случайными числами
Заполнение случайными числами в диапазоне [a;b]
1 A[i] = a + rand()% (b - a + 1);
Создание пользовательской функции для заполнения случайными числами:
Описание функции до main{}
1 2 3 4 int irand ( int a, int b ) { return a + rand()% (b - a + 1); }Заполнение массива (псевдо)случайными целыми числами в диапазоне от 20 до 100:
1 2 3 4 5 for ( i = 0; i < N; i++ ) { A[i] = irand ( 20, 100 ); cout << A[i] << " "; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | main() { int f[10]={2,4,-3,-6,-1,4,7,5,10,13}; int i,c,flag; flag=0; printf("vvedite obrazec"); scanf("%d",c); for(i=0;i<10;i++) { If (f[i]= =c) { printf("naiden"); flag=1; break; } } if (flag= =0) printf("net"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | var f: array[1..10] of integer; i,c,flag:integer; begin f[1]:=2; f[2]:=4; f[3]:=-3; f[4]:=-6; f[5]:=-1; f[6]:=4; f[7]:=7; f[8]:=5; f[9]:=10; f[10]:=13; flag:=0; writeln('vvedite obrazec'); readln(c); for i:=1 to 10 do begin If f[i]=c then begin writeln('naiden'); flag:=1; break; end; end; if flag= 0 then writeln('net'); end. |
* Из задачника М. Э. Абрамян (Array103)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <stdio.h> int main(void) { int a[11]; int n; printf("N: "); scanf("%i",&n); int i; for (i=1; i<=n; ++i){ printf("a[%i] : ",i); scanf("%i",&a[i]); } int amin=1,amax=1; for (i=1; i<=n; ++i){ if (a[amin]>a[i]) { amin=i; } if (a[amax]<a[i]){ amax=i; } } if (amax>amin) amax++; n++; for (i=n; i>=amin; --i) a[i]=a[i-1]; a[amin]=0; n++; for (i=n; i>amax+1; --i) a[i]=a[i-1]; a[amax+1]=0; for (i=1; i<=n; ++i) printf(" %i: %i\n",i,a[i]); return 0; } |
* Из задачника М. Э. Абрамян (Array92)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> int main(void) { int a[11]; int n,k=0; printf("N: "); scanf("%i",&n); int i; for (i=1; i<=n; ++i){ printf("a[%i] : ",i); scanf("%i",&a[i]); } for (i=1; i<=n; ++i){ if (a[i]%2==0){ ++k; a[k]=a[i]; } } printf("A - %i\n",k); for (i=1; i<=k; ++i) printf(" %i: %i\n",i,a[i]); return 0; } |
* Из задачника М. Э. Абрамян (Array88)
* Из задачника М. Э. Абрамян (Array90)
В первую очередь хочу выразить благодарность людям, которые сделали этот сайт, и оценить их огромную работу. Всё излагается достаточно просто и доступно. Особенно для тех, кто уже знаком с программированием.
Но есть, конечно, и недочёты. Например, я думаю, лучше сразу приучать начинающих программистов к грамотному, читабельному оформлению кода, потому что иногда в примерах хрен разберёшь что к чему относится. А переучиваться, как известно, сложнее, чем учиться с нуля.
Сами фрагменты кода написаны не везде корректно. Не всё работает (может и я что-то не так сделал, хотя как только ни пытался со всей мощностью гугла).
В некоторых примерах для решения нужны дополнительные знания (например, функция sizeof() в использовании для вычисления размера массива была бы очень удобна).
Пример: Дан массив размера N. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива.
* Из задачника М. Э. Абрамян (Array103)
В этом примере, считаю, есть лишние операции в той версии решения, которая предложена на сайте. Например в строке 4 задаётся размер массива — 11. А что если пользователь захочет ввести не 11, а, скажем, 25?
Это просто бессмысленная операция, так как двумя строками ниже программа всё равно попросит пользователя ввести размер массива.
И для тестовых примеров удобнее использовать показанную в предыдущих уроках функцию для рандомного задания значений.
Ниже моя версия реализации программы.
#include
int iRand(int a, int b)
{
return a + rand() % (b — a + 1);
}
int main(int argc, char **argv)
{
// Задание размера массива
int n;
printf(«Enter array’s size: «);
scanf(«%d», &n);
// Формирование массива
int a = -100, b = 100;
int mass[n];
for (int i = 0; i <= n; i++)
{
mass[i] = iRand(a, b);
printf("%d ", mass[i]);
}
printf("\n");
int iMin = 0, iMax = 0;
int min = mass[iMin];
int max = mass[iMax];
// Поиск индекса минимального и максимального значения массива
for (int i = 1; i <= n; i++)
{
if (mass[i] mass[iMax])
iMax = i;
}
printf(«\nMax = %d. iMax = %d.\nMin = %d. iMin = %d.\n\n», mass[iMax], iMax, mass[iMin], iMin);
// Замена на нули с проверкой на вхождение индекса в диапазон массива
if (iMin >= 0)
mass[iMin — 1] = 0;
if (iMax <= n)
mass[iMax + 1] = 0;
for (int i = 0; i <= n; i++)
printf("%d ", mass[i]);
puts("\n");
return 0;
}
____________________________________________________
А в целом, конечно, огромный респект создателям этого сайта!
спасибо за конструктивные замечания) Постараемся учесть
А если регистрацию сделаете, я буду первейшим вашим пользователем)