Краткие теоретические сведения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Краткие теоретические сведения



Массив – конечномерная последовательность данных одного типа. Массив – объект сложного типа, каждый элемент которого определяется ID массива и индексом (целое число), по которому к элементу массива производится доступ. Рассмотрим одномерные массивы. Индексы массивов в языке Си начинаются с 0. В программе одномерный массив объявляется следующим образом:

< тип > <ID массива >[ размер ];

размер – количество элементов в массиве - может задаваться константой или константным выражением. Нельзя задавать массив переменного размера, для этого существует отдельный механизм – динамическое выделение памяти.

Пример объявления массива целого типа:

int a [5];          

в массиве а первый элемент а [0], второй – а [1], …, пятый - а [4].

Пример:в массиве целых чисел найти индекс и значение максимального эле­мента, переставить его с первым элементом; в программе также дол­ж­но быть посчитано количество положительных и отрицательных элементов в массиве.

Программа может иметь вид:

#include <stdio.h>

#include <conio.h>

void main(void) {                                           

int a[4]={-1,-20,4,100};    // Индексы принимают значения от 0 до 3

int i, index=0, max, kp=0, ko=0, zam, n=4;

puts("\n Исходный массив ");

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

              printf("%d ",a[i]); // Вывод элементов исходного массива

     max = a[0];

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

if (a[i]>max) {

                       max=a[i];

index=i;    

}

              }

     if(index!= 0) {

zam=a[0];

a[0] = a[index];

a[index] = zam;

}

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

      if (a[i]<0) ko++;

                        else kp++;

              }

  puts("\n Результаты работы программы ");

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

        printf("%d ",a[i]);                      // Вывод элементов массива

printf("\n Положительных элементов: %d ", kp);

printf("\n Отрицательных элементов: %d ", ko);

}

Операция sizeof

Для определения размера памяти, необходимого для размещения объектов, в языке Си используется унарная операция sizeof (параметр), параметр – тип или ID объекта (кроме ID функции); результат - размер памяти в байтах, отводимый под объект. Если указан идентификатор сложного объекта (массив, структура, объединение), то результат - размер всего объекта. Например:

    sizeof(int)                 результат: 2 байта;

    int b[5]; sizeof(b)                       10 байт;

    int c[3][4]; sizeof(c)                     24 байта.

Указатели и операции над адресами

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

Указатель – это переменная, которая может содержать адрес некоторого объекта в памяти компьютера, например, адрес другой переменной. И через указатель, установленный на переменную, можно обращаться к участку оперативной памяти, отведенной компилято­ром под ее значения.

Указатель объявляется следующим образом:

< тип > * < ID >;

Например:     int *a, *d;

float *f;

здесь объявлены указатели a, d, которые можно инициализировать адресами переменных int, и указатель f - адресами float переменных.

С указателями связаны две унарные операции: & и *. Операция & означает «взять адрес», которая допустима только над переменными. Операция * - «значение, расположенное по указанному адресу».

Пример:

int x,               // переменная типа int

*y;               // указатель на элемент данных типа int

    y=&x;    // y - адрес переменной x

        *y=1;     // по адресу y записать 1, в результате x = 1

 

Связь указателей и массивов

Указатели и массивы тесно связаны между собой. ID массива является указателем на его первый элемент, т.е. для массива int v [10] v и v [0] имеют одинаковые значения, т.к. адрес первого (с индексом 0) элемента массива - это адрес начала последовательно расположенных его элементов. Рассмотрим обращение к элементам массива на примере: пусть объявлены - массив из 100 значений float и указатель на объект типа float:

float p[100];              

float *q;       

int i; 

если выполнить операцию q = p; то обращения к элементу массива p: p[i], *(q+i) и *(p+i) эквивалентны.

Таким образом, для любых указателей можно использовать две эквивалентные формы выражений для доступа к элементам массива: q[i] и *(q+i). Первая форма удобнее для читаемости текста, вторая - эффективнее по быстродействию программы.

 

Варианты заданий

В одномерном массиве, состоящем из n вводимых с клавиатуры целых элементов, вычислить:

произведение элементов массива, расположенных между максимальным и минимальным элементами.

сумму элементов массива, расположенных между первым и последним нулевыми элементами.

сумму элементов массива, расположенных до последнего положительного элемента.

сумму элементов массива, расположенных между первым и последним положительными элементами.

произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

сумму элементов массива, расположенных между первым и вторым отрицательными элементами.

сумму элементов массива, расположенных до минимального элемента.

сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.

сумму элементов массива, расположенных после последнего элемента, равного нулю.

сумму модулей элементов массива, расположенных после минимального по модулю элемента.

сумму элементов массива, расположенных после минимального элемента.

сумму элементов массива, расположенных после первого положительного элемента.

сумму модулей элементов массива, расположенных после первого отрицательного элемента.

сумму модулей элементов массива, расположенных после первого элемента, рав­ного нулю.

сумму положительных элементов массива, расположенных до максимального элемента.

 

Контрольные вопросы

1. Укажите типы массивов, применяемых в языке Си.

2. Формы (способы) работы с элементами массива.

    3. Что такое указатель?

    4. Операция sizeof.

    5. Связь указателей с одномерными массивами.

 


ЗАДАНИЕ 6. Циклические процессы с использованием



Поделиться:


Последнее изменение этой страницы: 2020-11-28; просмотров: 67; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.41.187 (0.009 с.)