4307

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

Контрольная

Информатика, кибернетика и программирование

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

Русский

2012-11-24

58 KB

8 чел.

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

Массивы очень широко используются в программах. Массив позволяет программисту хранить в одном месте несколько элементов данных.

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

Объявление  одномерного массива имеет вид:

тип элемента имя[размер];

Размер определяет, сколько элементов содержит массив. Примеры объявлений массивов:

char str[80];

float b[30];

int a[8];

При объявлении массива под него отводится память. Число байт, отводимое под массив определяется как произведение размера типа элемента массива на количество элементов массива:

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

Например, под массив str будет выделено

            sizeof (char) * 80 =  1*80 = 80 байт.

Под массив b будет выделено:

sizeof (float) * 30 =  4*30 =120 байт

Под массив a будет выделено:

sizeof (int) * 8 =  2*8 =16 байт

Первый элемент массива имеет индекс 0, а старший имеет индекс на единицу меньше, чем количество элементов массива. Таким образом, первый элемент массива str   - это str[0], а последний – это str[79].

Отводимая под массив память представляет собой непрерывную область (линейную последовательность байт).  Элементы массива хранятся в памяти, непосредственно примыкая друг к другу. Например, массив а будет расположен в памяти, как показано на рисунке 1. Здесь одна клеточка таблицы условно изображает один байт в памяти.

a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

                             Рис. 1. Размещение в памяти массива a типа int.

Для обращения к элементу массива следует записать имя массива и индекс элемента. Например, str[5] – это шестой элемент массива str, a[4] – пятый элемент массива а.

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

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

Пример 1. Программа, которая выводит информацию о количестве дней в каждом месяце.

#include <stdio.h>

#define MONTHS 12

   void main (void)

    {

// объявление и инициализация массива days

//каждая константа в списке инициализации представляет собой количество дней

// в соответствующем месяце

   int days[MONTHS] =    {31,28,31,30,31,30,31,31,30,31,30,31};

     int index;

вывод массива

     for(index = 0; index < MONTHS; index++)

     printf("Месяц %d имеет %d дней \n",index +1, days[index]);

     }

Присвоение значений элементам массива.  Элементам массива можно присваивать значения в процессе работы программы.

Пример 2. Присваивание элементам массива значений случайных чисел, находящихся в диапазоне от –50 до  +50

#include <stdio.h>
        #include <conio.h>
         #include <stdlib.h>
         #include <time.h>


           
#define N 100 //количество элементов в массиве


         
int main(void)

{
              int a[N];  /* резервирование памяти под N элементов массива */
              int i;
           clrscr();


             randomize(); //инициализация датчика случайных чисел


                for(i=0; i<N; i++)
                 a[i] = random(101)-50;        // заполнение массива случайными

                             // числами от -50 до 50

puts (“    Массив, заполненный случайными числами из диапазона от –50 до +50”);

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

{   printf("%6d ", a[i]); // вывод массива по 10 элементов в строке

  if(i%10==9) // если выведено 10 элементов, перевести курсор в начало следующей

                       // строки

  printf("\n");

  }


                getch();

              return 0;
                  }

 

Ввод элементов массива.  Значения элементов массива можно вводит в диалоговом режиме, в процессе работы программы. Для этого следует организовать цикл, как показано в примере 3.

Пример3.

// ввод элементов массива в диалоговом режиме

#include <stdio.h>

#include <conio.h>

void  main(void)

{

 int i;

 int a[10]; //объявление массива  данных  целого типа

 clrscr();

// цикл для ввода элементов массива

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

  {

 //вывод индекса элемента массива, значение которого необходимо ввести

    printf("\nВведите элемент массива с индексом %d  ",i);

    scanf("%d",&a[i]);   //функция scanf получает адрес элемента массива

  }

  printf("\n\n   Вы ввели  массив  \n\n");

// цикл для вывода элементов массива

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

  printf("%4d ", a[i]); // вывод массива

  getch();

}

Рассмотрим ряд примеров решения задач, в которых используются массивы.

Пример 4. Программа, выполняющая  вывод всех цифр числа целого числа в правильном порядке. В программе реализован алгоритм  нахождения цифр числа в виде остатков от деления на  основание системы счисления – 10. Цифры числа записываются в массив x[6], а затем этот массив выводится в обратном порядке.

#include <stdio.h>

#include <conio.h>

int main(void)

{

 int x[6];  /* резервирование памяти под 6 элементов массива */

 int n,n1=0,i;

 clrscr();

 puts("введите число не больше, чем 32767");

 scanf("%d", &n);

//  присваиваем элементам массива х значения цифр числа

    for(;;)

    {

    x[n1]=n%10;  //вычисление остатка от деления числа на 10

 n1++;

      n/=10;  // вычисление результата деления числа на 10

      if(n==0)

      break;

     }

   printf("число состоит из %d цифр\n",n1);

   printf("цифры числа\n");

   n1--;   // так как индексация массива - с нуля

// вывод цифр числа из массива х

  for(i=n1; i>=0; i--)

   printf("%d  ",x[i]);

  getch();

 return 0;

}

Пример 5 Поиск минимального элемента массива

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

void main(void)

{

 int a[20],min;

int i;

clrscr();


         randomize();


           for(i=0;i<20;i++)
          a[i]=random(201)-100; //
сл. числа в диапазоне -100,100


           
min=a[0];     // присваиваем мин. элементу значение нулевого элемента

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

   for(i=1; i<20; i++)

      if(a[i] < min) //если очередной элемент массива меньше, чем значение min

// изменяем значение min

min=a[i];

 printf("\n\n\n                   Массив\n");


 //
вывод массива
  for (i=0; i<20; i++)
   printf("%d ",a[i]);


 
//вывод минимального элемента масиива
   printf("\n\nминимальный элемент массива равен %d\n",min);
   getch();
 }

Пример 6.

//Программа записывает натуральное положительное
          // число в обратном порядке


               #include <stdio.h>    //директивы препроцессора

   #include <conio.h>

   void main(void)

    {

   int s[11];  // резервирование памяти под массив длиной 11 элементов

  unsigned long  chislo;  // выделение памяти под вводимое число

  int i=0,j,ost;

  clrscr();

  puts("\nBведите целое число с количеством цифр не более 10");

  puts("Значение числа не должно превышать величины 4 294 967 295");

  scanf("%lu",&chislo); //ввод числа в диалоговом режиме

    do

      {                   //вычисление одной цифры числа как остатка от

  ost=chislo%10;   //деления числа на основание системы счисления -10

   s[i]=ost;

  i++;

     }while ((chislo/=10)!=0);

    puts("Перевернутое число");

// вывод массива по одному элементу

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

 printf("%d",s[j]);

getch();

      }

Пример 7. Сортировка массива  по возрастанию методом пузырька.

Сущность алгоритма. Выполняется сравнение двух рядом стоящих элементов массива. Если   значение предыдущего элемента массива больше, чем следующего т.е. mas[i] > mas[i+1] , то выполняется их перестановка. сравнения выполняются до тех пор, пока не будут просмотрены все элементы массива. В результате элемент массива, имеющий наибольшее значение, окажется на последнем месте в массиве. Затем количество элементов массива уменьшается на 1, и вновь выполняются сравнения и  при необходимости, перестановки элементов массива. Сортировка заканчивается, если на предыдущем шаге не было выполнено ни одной перестановки.

    

#include <stdlib.h>

 #include <time.h>

 #include <stdio.h>

 #include <conio.h>

// с помощью MAXKOL задаем максимально возможное количество элементов массива

 #define MAXKOL 100

void main(void)

{

 int mas[MAXKOL],kol,i,j,temp,FLAG;

 clrscr();

  for(;;) // Проверка правильности ввода значения переменной kol

  {

  puts("Количество элементов");

  scanf("%d",&kol);

  if(kol>0 && kol <= MAXKOL)

      break; //выход из цикла, если ввод выполнен правильно

      printf("Недопустимое количество элементов\n");

    }

  randomize();

// Заполнение массива случайными числами

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

  mas[i]=rand();

   puts("Не отсортированный массив ");

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

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

   {

      printf("%6d",mas[i]);

     if( i%10==9)

      printf("\n");

      }

// Алгоритм сортировки массива

     j=kol-1;

  do{

  FLAG=0;

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

  {

   if( mas[i] > mas[i+1])

   {

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

    temp=mas[i];

    mas[i]=mas[i+1];

    mas[i+1]=temp;

    FLAG=1;

   }

  }

   j=j-1;

 }while(FLAG); // сортировка заканчивается, если на предыдушем шаге

               // не было выполнено ни одной перестановки в массиве

  puts("\n\n Отсортированный массив ");

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

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

   {

     printf("%6d",mas[i]);

     if( i%10==9)

      printf("\n");

    }

    getch();

}

Пример 8. Вывод всех трехзначных чисел, которые содержат заданную цифру. Значение цифры вводится с клавиатуры.


#include <stdio.h>
#include <conio.h>

int main(void)
{
 int x[6];               /* резервирование памяти под 6 элементов массива */

 int n, i, c ,cifra;         

 clrscr();


 puts("
введите цифру");
 scanf("%d", &cifra);


   
printf("Все трехзначные числа, содержащие цифру %d\n",cifra);

// во внешнем цикле  перебираются все трехзначные числа

 for(n=100; n<999; n++)     {

             c=n;   //запомним анализируемое число

//во внутреннем цикле находятся все цифры для каждого трехзначного числа
    for(;;)
    {
    x[n1]=n%10;  //вычисление остатка от деления числа на 10


if(x[n1]==cifra)  //проверка, имеется ли цифра в числе
 {printf("%d " ,c); //вывод числа, если цифра в нем есть
  break;   //выход из цикла, если цифра в числе есть

  }


      n/=10;  // вычисление результата деления числа на 10
      if(n==0) //если найдены все цифры числа- выход
break;
     }
     n=c;  //восстанавливаем значение числа
    }


  getch();
 return 0;
}


 

А также другие работы, которые могут Вас заинтересовать

29034. Расчёт фундаментов по второй группе предельных состояний. Определение конечной осадки фундаментов мелкого заложения методом послойного суммирования 34 KB
  Расчёт оснований фундаментов по второй группе предельных состояний по деформациям производится исходя из условия: s ≤ su 1 где s конечная стабилизированная осадка фундамента определённая расчётом; su предельное значение осадки устанавливаемое соответствующими нормативными документами или требованиями проекта. После определения размеров подошвы фундамента и проверки условия pII ≤ R где рII среднее давление на основание по подошве фундамента a R расчётное сопротивление грунта ось фундамента совмещают с литологической колонкой...
29035. Расчёт фундаментов по второй группе предельных состояний. Определение конечной осадки фундаментов мелкого заложения методом эквивалентного слоя 31.5 KB
  Расчёт фундаментов по второй группе предельных состояний по деформациям заключается в выполнении условия s ≤ sw 1 где s конечная стабилизированная осадка фундамента определённая расчётом; sw предельное значение осадки устанавливаемое соответствующими нормативными документами или требованиями проекта. Конечная стабилизированная осадка фундамента может быть определена методом эквивалентного слоя. Осадка с учётом жёсткости и формы подошвы фундамента в случае однородного основания определяется по формуле: s=p0hэmv 2 где p0 ...
29036. Определение расчётного сопротивления грунтов основания по таблицам СНиП 23 KB
  Тип песчаного грунта пески гравелистые крупные средней крупности и т. Плотность сложения песчаного грунта плотный средней плотности рыхлый. Устанавливается по таблице в зависимости от типа песчаного грунта и его коэффициента пористости: 1 где γ удельный вес грунта; γs удельный вес твердых частиц; w влажность грунта. Степень влажности песчаного грунта Sr маловлажный влажный насыщенный водой: 2 где γs удельный вес воды.
29037. Условия применения свайных фундаментов. Конструктивные решения. Виды свайных фундаментов в зависимости от расположения свай в плане 32 KB
  Условия применения свайных фундаментов. Виды свайных фундаментов в зависимости от расположения свай в плане. В этих условиях чаще всего прибегают к устройству фундаментов из свай. Группы или ряды свай объединённые поверху распределительной плитой или балкой образуют свайный фундамент.
29038. Условия применения свайных фундаментов. Классификация свай по материалу, форме продольного и поперечного сечения 42.5 KB
  Сваи погружаемые в грунт в готовом виде в зависимости от материала из которого они изготовляются подразделяются на железобетонные деревянные стальные и комбинированные. Железобетонные сваи получившие наибольшее распространение в практике строительства подразделяются: по форме поперечного сечения на квадратные квадратные с круглой полостью полые круглого сечения прямоугольные тавровые и двутавровые рис.1; по форме продольного сечения на призматические цилиндрические с наклонными боковыми гранями пирамидальные...
29039. Понятие о висячих сваях и сваях-стойках. Определение несущей способности свай-стоек 28.5 KB
  По характеру передачи нагрузки на грунт сваи подразделяются на висячие сваи и сваистойки. К сваямстойкам относятся сваи прорезающие толщу слабых грунтов и опирающиеся на практически несжимаемые скальные или малосжимаемые грунты крупнообломочные грунты с песчаным заполнителем глины твёрдой консистенции. Сваястойка практически всю нагрузку на грунт передаёт через нижний конец так как при малых вертикальных перемещениях сваи не возникают условия для проявления сил трения на её боковой поверхности рис. Сваястойка работает как сжатый...
29040. Определение несущей способности висячих свай по таблицам СНиП. Понятие о негативном трении и его учёт при определении несущей способности свай 35.5 KB
  Расчёт несущей способности вертикально нагруженных висячих свай производится как правило только по прочности грунта так как по прочности материала сваи она всегда заведомо выше.0385 широко применяемый в практике проектирования и известный под названием практического метода позволяет определять несущую способность сваи по данным геологических изысканий. Метод базируется на обобщении результатов испытаний большого числа обычных и специальных свай вертикальной статической нагрузкой проведенных в различных грунтовых условиях с целью...
29041. Динамический метод определения несущей способности одиночной сваи. Понятие об отказе. Уравнение работ. Контроль за сопротивлением свай при их забивке 28.5 KB
  Динамический метод определения несущей способности одиночной сваи. При молотах ударного действия скорость погружения сваи принято характеризовать величиной её погружения от одного удара называемой отказом сваи. По величине отказа который замеряется при достижении сваей проектной отметки можно судить о её сопротивлении поскольку чем меньше отказ тем очевидно больше несущая способность сваи. Динамический метод и заключается в определении несущей способности сваи по величине её отказа на отметке близкой к проектной.
29042. Определение числа свай в фундаменте. Конструирование ленточных свайных фундаментов 27 KB
  Определение числа свай в фундаменте. Конструирование ленточных свайных фундаментов. Зная несущую способность сваи Fα и принимая что ростверк обеспечивает равномерную передачу нагрузки на все сваи фундамента необходимое число свай n на 1 м длины ленточного фундамента определяется по формуле: 1 где γк коэффициент надёжности принимаемый в зависимости от способа определения несущей способности сваи; N01 расчётная нагрузка на 1 м длины ленточного фундамента. Число свай на 1 м найденное по формуле 1 может быть дробным.