Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_3.doc
Скачиваний:
13
Добавлен:
03.11.2018
Размер:
84.48 Кб
Скачать

Теоретические положения. Массивы и указатели.

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

Объявление массива в программе.

Основная форма объявления массива размерности N такова:

тип <имя массива>[размер1] [размер2]…[размерN];

Чаще всего используются одномерные массивы:

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

тип – базовый тип элементов массива,

размер – количество элементов одномерного массива.

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

тип <имя массива> [размер1][размер2];

В этом описании можно трактовать объявление двумерного массива как объявление массива массивов, т.е. массив размера [размер2], элементами которого являются одномерные массивы <имя массива> [размер1].

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

Обсудим более подробно одномерные массивы.

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

int a [100];

это значит, что массив содержит 100 элементов от a[0] до [99]. Для одномерного массива легко подсчитать, сколько байт в памяти будет занимать этот массив:

колич. байт =<размер базового типа>*<колич. элементов>.

В языке С под массив выделяется непрерывное место в оперативной памяти.

В языке С не проверяется выход индекса за пределы массива. Если массив a[100] описан как целочисленный массив, имеющий 100 элементов, а в программе указать [200], то сообщение об ошибке не будет выдано, а в качестве значения элемента а[200] будет выдано некоторое число, занимающее соответствующие 2 байта. Можно определить массив любого определенного ранее типа, например

unsigned arr[40], long double[1000], char ch[80].

Массивы символов. Строки.

Однако массивы типа char – символьные массивы – занимают в языке особое место. Во многих языках есть специальный тип данных - строка символов (string). В языке С отдельного типа строки символов нет, а реализована работа со строками путем использования одномерных массивов типа char. В языке С символьная строка – это одномерный массив типа char, заканчивающийся нулевым байтом. Нулевой байт – это байт, каждый бит которого равен нулю. Для нулевого байта определена специальная символьная константа ‘\0’. Это следует учитывать при описании соответствующего массива символов. Так, если строка должна содержать N символов, то в описании массива следует указать N+1 элемент.

Например, описание

char str[11];

предполагает, что строка содержит 10 символов, а последний байт зарезервирован под нулевой байт. Здесь задан обычный одномерный массив, но если нужно трактовать его как строку символов, то это будет строка максимум из 10 элементов.

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

Borland C++”, “Это строковая константа”.

В конец строковой константы не надо ставить символ ‘\0’. Это сделает компилятор, и строка “Borland C++” в памяти будет выглядеть так:

B

o

r

l

a

n

d

C

+

+

\0

Есть два простых способа ввести строку с клавиатуры. Первый способ воспользоваться функцией scanf() со спецификатором ввода %s. Надо помнить, что функция scanf( ) вводит символы до первого пробельного символа. Второй способ – воспользоваться специальной библиотечной функцией gets( ), объявленной в файле stdio.h. Функция gets( ) позволяет вводить строки, содержащие пробелы. Ввод оканчивается нажатием клавиши ENTER. Обе функции автоматически ставят конец строки нулевой байт. Не забудьте зарезервировать для него место. В качестве параметра в этих функциях используется просто имя массива.

Вывод строк производится функциями printf() и puts(). Обе функции выводят содержание массива до первого нулевого байта. Функция puts() добавляет в конец выводимой строки символ новой строки. В функции printf() переход на новую строку надо предусматривать в строке формата самим.

Пример. Ввод строки с клавиатуры.

#include<stdio.h>

void main( )

{

char str[80]; /* Зарезервировали место для строки */

printf("Введите строку длиной менее 80 символов:");

gets(str); /* читает строку с клавиатуры, пока не нажмете клавишу Enter */

printf("Вы ввели строку %s \n", str);

printf("Введите еще одну строку длиной менее 80 символов:");

scanf("%s", str); /* читает строку с клавиатуры,

пока не встретится пробел */

printf("Вы ввели строку");

puts(str);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]