Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Форма отчета по лабораторной работе




Отчет должен содержать: титульный лист; цель работы; условие задачи; текст программы с комментариями; в зависимости от задачи для проверки правильности работы алгоритма представить результаты работы программы по расчету контрольного примера вместе с ручным расчетом контрольного примера или результаты работы программы и заранее известное точное значение решения задачи; выводы по работе.

Вопросы для самоконтроля

1. Разновидности операторов циклов в языке Си.

2. Итерация цикла.

3. Условие выполнения цикла.

4. Тело цикла.


 

Лабораторная работа № 3. Изучение массивов в языке Си

Цель и задачи работы, требования к результатам ее выполнения

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

- изучить учебный материал, посвященный массивам в языке Си [1, 3];

- разработать программу на языке Си для решения заданных вариантов заданий;

- отладить программу;

- выполнить решение контрольного примера небольшой размерности с помощью программы и ручной расчет контрольного примера;

- подготовить отчет по лабораторной работе.

Краткая характеристика объекта изучения

Дадим следующее определение массива

Массив – это производный тип, представляющий собой множество элементов, все элементы массива имеют один и тот же тип и следуют в памяти друг за другом.

Массивы бывают одномерными и многомерными.

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

Формат определения одномерного массива:

<type> <имя_массива>[<конст_выражение>];

Примеры:

int A[100]; // Объявление массива из 100 элементов типа int

char C1[20], C2[150]; // Объявляются 2 массива элементов типа char из

// 20 и 150 элементов

Описание массива может не содержать число элементов.

extern float y[]; // Описание

…….

float y[20]; // Определение

Обращение к элементам массива осуществляется с помощью специальной операции [] – обращение по индексу.

int m[10];

m[0]=1; // Элементу массива с индексом 0 присваивается значение 1

m[1]=2; // Элементу массива с индексом 1 присваивается значение 2

…;

m[9]=10; // Элементу массива с индексом 9 присваивается значение 10

Индексация всегда начитается с 0, последний элемент имеет индекс n-1.

Элемент массива может участвовать в любом выражении, где допустимо использование переменной соответствующего типа.

m[5]=m[3]+m[4]*100;

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

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

int a1[4]={ 2, 5, 9, 10 }; // Массив из 4-х элементов

int a2[7]={ 3, 4, 5 }; // Массив из 7 элементов, проинициализированы первые 3

char c1[]={ ‘A’, ‘g’, ‘1’, ‘y’, ‘I’ }; // Массив из 5 элементов,

// размерность определяется по умолчанию

Если массив объявлен за пределами блоков, то по умолчанию его элементы инициализируются 0.

Массивы и указатели

Имя массива, используемое внутри выражения без [], является указателем на первый элемент массива (элемент с индексом 0). Данный указатель является константным, т.е. его значение нельзя изменять.

Для некоторого массива, например

int A[10];

выполняется равенство A==&A[0]

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

for (int i=0; i<10; i++) A[i]=2*i;

for (int i=0; i<10; i++) *(A+i)=2*i; // Наличие скобок обязательно,

// так как приоритет операции * выше,

// чем операции +

Кроме того имя массива без скобок является указателем, тип которого соответствует указателю на тип элемента массива. Допустим следующий порядок работы с массивом:

int a[10];

int *p;

p=a;

for(int i=0; i<10; i++) p[i]=i*i;

или

for(int i=0; i<10; i++) *(p+i)=i*i;

 

Строки

Строка – это символьный массив, заканчивающийся символом с кодом 0 (символ NULL) – это служебный символ, являющийся признаком конца строки.

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

Примеры:

char str[]=“ABCD”; // Это строка, выделяется память под 5 символов (последний 0)

char c[]={‘A’, ‘B’, ‘C’, ‘D’ }; // Это просто массив из 4-х символов

char *s=“Пример строки”; // Допустимо такое определение строки

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

int len=0; // Длина строки

for(; s[len]; len++);

Динамические массивы

Память для массива может выделяться и уничтожаться динамически с помощью специальных функций, например, для выделения памяти могут использоваться функции: malloc, calloc, realloc, а для освобождения памяти функция free (в Си++ существуют специальные операторы new и delete). Особенно это удобно в том случае, когда число элементов заранее не известно, а становится известным только во время выполнения программы, например, число элементов может вычисляться при работе программы, вводиться с клавиатуры и т.д.

Функция malloc имеет заголовок, определенный в заголовочном файле stdlib.h:

void * malloc(unsigned int _Size);

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

Возвращает выделенную память обратно операционной системе функция с упрощенным заголовком (заголовочный файл stdlib.h):

void free(void * _Memory);

Функция имеет один параметр – указатель на блок освобождаемой памяти.

Ниже представлен пример выделения памяти под массив, размерность которого вводится с клавиатуры, далее массив заполняется случайными числами, выводится на печать, в конце работы программы выделенная память освобождается. Пример реализован на языке Си (файл с расширением. c). Если реализовывать его на языке Си++ (файл с расширением .cpp), то при использовании malloc необходимо применять операцию явного преобразования типа.

#include <stdio.h>

#include <stdlib.h>

void main()

{

int *p; // Указатель, может быть использован для выделения памяти под массив динамически

int n; // Заранее неизвестное число элементов массива

int i; // Индексная переменная

printf_s("n="); scanf_s("%d", &n); // Ввод с клавиатуры числа элементов массива

p = malloc(n*sizeof(int)); // Выделяем память под массив динамически в Си

// p=(int *) malloc(n*sizeof(int)); в Си++ требуется преобразование типа!!!!!!

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

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

{

p[i] = rand() % 100; // Получаем псевдослучайное целое число в интервале

// 0..99

printf_s("%d ", p[i]);

}

free(p); // Возвращаем выделенную память операционной системе,

// когда она не нужна

system("pause");

}

Многомерные массивы

Многомерный массив – это массив массивов.

Пример определения:

int A[2][3];

Данное определение можно раскрыть следующим образом: А – массив из двух элементов, элементами массива являются массивы из трех элементов типа int.

Элементы следуют в памяти в следующем порядке:

A[0][0], A[0][1], A[0][2], A[1][0], A[1][1], A[1][2]

Обращаться к элементам массива можно с помощью индексного выражения или с помощью указателей

A[0][1]=5;

A[i][j]=i+j; // или

*(*(A+i)+j)=i+j;





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


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 460 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если вы думаете, что на что-то способны, вы правы; если думаете, что у вас ничего не получится - вы тоже правы. © Генри Форд
==> читать все изречения...

2215 - | 2158 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.