Как ввести одномерный массив c
Перейти к содержимому

Как ввести одномерный массив c

  • автор:

Одномерный массив

Стандартный вид объявления одномерного массива следующий:

тип имя_переменной [размер];

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

общее число байт = sizeof (базовый тип) *число элементов

У всех массивов первый элемент имеет индекс 0. Поэтому, если написать

то будет объявлен массив символов из 10 элементов, причем эти элементы адресуются индексом от 0 до 9. Следующая программа загружает целочисленный массив числами от 0 до 9 и выводит его:

#include
int main(void)
int x[10]; /* резервирует место для 10 целочисленных элементов */
int t;
for(t=0; t for(t=0; t return 0;
>

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

Одномерные массивы это на самом деле списки информации одного типа. Например, таблица. показывает, как массив а располагается в памяти, если он начинается с адреса 1000 и объявлен следующим образом:

Таблица. Массив символов, включающий семь элементов и начинающийся по адресу 1000

a[0] a[1] a[2] a[3] a[4] a[5] a[6]
1000 1001 1002 1003 1004 1005 1006

Одномерные массивы

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

Переменные и массивы. Аналогия с коробками.

Рис.1 Переменные и массивы. Аналогия с коробками.

На картинке выше изображено три массива:

  • целочисленный массив из 8 элементов с именем arr_int
  • вещественный массив из 11 элементов с именем arr_float
  • символьный массив из 6 элементов с именем arr_char

У массива, как и у переменной, имеются свои имя и тип данных. Кроме того, у массива ещё есть одна дополнительная характеристика – размер массива. Размер массива – количество элементов, которые могут в нём храниться. В нашей аналогии с коробочками это количество коробок.

Нумерация элементов массива начинается с нуля, а не с единицы.

Объявление и инициализация массива

Объявление массива очень похоже на объявление переменной. Отличие лишь в том, что следует дополнительно указать размер массива в квадратных скобках. Вот несколько примеров:

int arr_int[8]; double arr_float[11]; float number[2000];

На имя массива накладываются ограничения, аналогичные тем, которые накладываются на имя переменной.

Правило именования массивов

Имя массива – любая последовательность символов, цифр и знака нижнего подчеркивания «_», которая начинается с буквы. Регистр букв важен.

Вот ещё несколько примеров объявления массивов:

int grades[50], order[10]; double prices[500];

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

int arr_int[5] = ; double arr_float[11] = ;

Если нужно присвоить нулевые значения всем элементам массива, то можно сделать вот так:

double arr[50] = ;

Работа с отдельными элементами массива

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

Давайте, например, выведем элементы массива из пяти элементов на экран.

#include int main(void)< int arr[5] = ; printf("%d %d %d %d %d\n",arr[0], arr[1], arr[2], arr[3], arr[4]); return(0); >

Конечно, если массив будет очень большой, то выводить его поэлементно подобным образом то ещё удовольствие. Да и с маленькими массивами так никто не делает. Лучше и правильнее использовать циклы. Например:

#include int main(void)< int arr[100] = ; for(int i = 0; i < 100; i = i + 1)< arr[i] = 2*i; >for(int i = 0; i < 100; i = i + 1)< printf("%d\t",arr[i]); >return(0); >

Программа в первом цикле сохраняет в массив первую сотню чётных чисел, а во втором цикле выводит их на экран.

Вооружившись новыми инструментами, давайте перепишем нашу программу из начала урока так, чтобы она использовала массив для хранения статистики выпадения случайных чисел.

#include #include #include int main(void) < srand(time(NULL)); int count[3] = ; int rand_number; for (int i = 0; i < 100000; i = i + 1)< rand_number = rand()%3; count[rand_number] = count[rand_number] + 1; >for(int i = 0; i < 3; i = i + 1)< printf("%d - %d\n", i, count[i]); >return 0; >

Обратите внимание на приём, который используется в этой программе.
В нулевом элементе массива хранится количество выпадений числа 0 , в первом элементе – количество выпадений числа 1 , во втором элементе – числа 2 . То есть само сгенерированное число позволяет определить, к какому элементу массива необходимо добавить единичку. Поэтому необходимость в операторе выбора switch отпадает. Удобно, не так ли?

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи:

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

Дополнительные материалы

  1. пока нет

Самый крупный донат:

sdanshin@yandex.ru 5000 руб.
Аноним, Тинькофф * 3167 1000 руб.
Аноним, WebMoney $1,05

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

Алекс 23.12.2017 в 19:15
>> вещественный массив из 11 элементов с именем arr_double
arr_float же XD
KaDeaT
Так точно! Поправил. Спасибо! )
JJJ 05.01.2018 в 22:37

Очень не хватает примеров задач, никак не могу понять, как можно решить даже самую первую задачу
#include
int main() int i,a,b,s,d,c,;
scanf(«%d%d%d%d%d%d», &i,&a,&b,&s,&d,&c);
int arr[i] = < a,b,s,d,c >;/считается недопустимым а как с помощью циклов я понять не могу
printf(«%d %d %d %d %d», c, d, s, b, a);
return 0;
>

KaDeaT

0. Создать массив из 100 элементов. Например, с именем arr. 100 — ‘то максимальный размер массива, который может быть в задачах.

1. Считать в целочисленную переменную, например, с именем N, количество чисел в массиве (длину массива).

2. Далее запустить цикл for от 0 до N. В теле цикла считывать число в очередной элемент массива, например, scanf(«%d», &arr[i]);

Всё. Теперь все данные, которые поступали на вход у вас хранятся в массиве.

не_робот 18.05.2019 в 12:32

Примеров мало, вообще не понятно с какой стороны подступиться к первой же задаче.
В вашем комментарии «1. Считать в целочисленную переменную, например, с именем N, количество чисел в массиве (длину массива).» всё здорово, кроме примера которого нет, для наглядности можно было его показать

Анатолий 06.05.2021 в 00:08

По листингу 6 — «Программа в первом цикле сохраняет в массив первую сотню чётных чисел, а во втором цикле выводит их на экран.»
На самом деле сохраняет первые две сотни четных чисел

Элай 25.08.2021 в 09:05
Не понимаю как работает код в листинге 7
Алеша 18.12.2021 в 20:00

Не бро, не похвалю твои уроки, новички не очень поймут , какой то ты странный и задачи странные, лучше уж видеоуроки на ютубе или Udemy

KaDeaT
Задачи — топ! =)
Но у каждого свой путь, конечно!
Руслан 05.05.2022 в 14:39
Листинг 6. 2*0 == 0 — это особенность Си?
Valeriy 20.06.2023 в 21:27

Задача проверку палиндромного массива. Не понимаю, почему не принимается ответ. Тестирую в визуал студио
Работает как в условии вроде

 
#include

int main(void)
int size;
int count = 0;
int out = 0;
scanf("%d", &size);
int array[size - 1];
while (count < size)
scanf("%d", &array[count]);
count++;
>
count = 0;

while (count < size / 2)
if (array[count] == array[size - 1 - count])
out = 1;
>
else
out = 0;
break;
>
count++;
>
if (out == 1)
printf("YES");
else
printf("NO");

return 0;
>

Valeriy 21.06.2023 в 19:16

Разделить массив на две части, поместив в первую элементы, большие среднего арифметического массива, а во вторую — меньшие.

задача решается, но не принимается системой

 
#include

main(void)
int size=0, count = 0;
float average = 0,sum=0;
scanf("%d", &size);
int array[size];
int res[size];
int begin_count;
int end_count;

while (count < size)
scanf("%d", &array[count]);
count++;
>
count = 0;
while (count < size)
sum += array[count];
count++;
>
average = sum / size;
// printf("AverAGE: %.2f n", average );

count = 0;
begin_count=0;
end_count=(size/2);
while (count if (array[count] > average )
res[begin_count] = array[count];
// printf("Begin Count - %d! Adding there %dn", begin_count, array[count]);
begin_count++;
>
else
res[end_count] = array[count];
// printf("End Count - %d! Adding there %dn", end_count, array[count]);
end_count++;
>

count++;
>

count = 0;
while (count < size)
printf("%d ", res[count]);
count++;
>
return 0;
>

Valeriy 21.06.2023 в 21:40

В заданном массиве поменять местами наибольший и наименьший элементы.

задача решается, но не принимается системой

 
#include

main(void)
int size, count;
int temp, min,max;
int min_position =0, max_position=0;
scanf("%d", &size);
int array[size];


min = array[0];max = array[0];count =0;
while (count < size)
scanf("%d", &array[count]);

if (array[count] < min)
min = array[count];

min_position= count;
>
if (array[count] > max)
< max = array[count];
max_position = count ;
>
count++;
>

temp = array[min_position];
array[min_position] = array[max_position];
array[max_position] = temp;
count = 0;

while (count < size)
printf("%d ", array[count]);
count++;
>
return 0;
>

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

Принцип работы следуюший. Если есть очередной элемент массива с индексом i , то мы смотрим имели мы с его значением дело уже ранее, рассматривая элементы в диапазоне [0, i) . Если уже имели с его значением дело, то просто пропускаем его. Иначе смотрим, попадается ли в диапазоне [i+1, N) еще элемент с таким же значением. Если да, то выводим его на консоль. Если же разрешается изменять порядок элементов в массиве после их ввода, то вы можете отсортировать массив, используя стандартный алгоритм std::sort следующим образом

std::sort( a, a + N ); 

включив предварительно заголовок

#include

а затем вывести последовательно элементы, которые совпадают по значению с рядом стоящими элементами. Например

#include #include #include #include int main() < const size_t N = 10; int a[N]; std::srand( ( unsigned int )std::time( nullptr ) ); for ( auto &x : a ) x = std::rand() % N; for ( auto x : a ) std::cout 1 ) < std::cout i = j; > std::cout

Что касается представленного вами кода, то по крайней мере данный цикл

for (int i = 0; i < N; i++) < if (p[i] == p[i + 1]||p[i]==p[i+i]) < mas[i] = p[i]; >> 

ведет к неопределенному поведению программы, так как в условии

 if (p[i] == p[i + 1]||p[i]==p[i+i]) 

которое к тому же не имеет смысла происходит выход за границу массива, адресуемым указателем p , при i равным N-1 , и к тому же не всем элементам массива, адресуемого указателем mas , будут присвоены значения. А этот массив изначально не инициализирован, а потому содержит неопределенные значения..

Ввод одномерного массива с клавиатуры

Организовать ввод с клавиатуры одномерного динамического массива
Организовать ввод с клавиатуры одномерного динамического массива произвольной длины. Найти.

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран.

Ввод одномерного массива
Нужно ввести с клавиатуры одномерный символьный массив и просто его вывести. почему нельзя сделать.

Заполнение одномерного массива с клавиатуры
Нужно заполнить массив int arr c клавиатуры. Вывести этот массив на экран

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *