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

5.2. Массивы

Массивы — это группа элементов одинакового типа. Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве. Объявление массива имеет два формата:

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

Элементами массива не могут быть функции и элементы типа void.

Константное выражение в квадратных скобках задает количество элементов массива

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

Примеры:

int a[2][3]; /* представлено в виде матрицы

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][2] */

double b[10]; /*вектор из 10 элементов типа double */

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

Примеры:

int s[2][3];

Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.

int b[2][3][4];

При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4.

Пример. Найти среднее арифметическое элементов одномерного массива.

#include <stdio.h>

const int n=10;

int main()

{

int a[n],sum;

float av;

printf("Введите %d чисел\n",n);

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

scanf("%d",&a[i]);

sum=0;

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

sum=sum+a[i];

av=(float) sum/n;

printf("Среднее:%5.2f\n",av);

return 0;

}

5.3. Строки

Для представления текстовой информации в языке Си не введено отдельного типа в отличие от некоторых других языков, например языка Паскаль. Строковые константы представляются последовательностью символов, заключенной в кавычки. Размещая строку в памяти, транслятор автоматически добавляет в ее конце символ '\0'. Т.о. если строка содержит один символ, например "a", то в памяти она будет занимать два байта. Принято, что строка — это массив символов, т.е. типа char[].

Строка

"Borland C++"

в памяти будет выглядеть так

'B','o','r','l','a','n','d',' ','C','+','+','\0'

Разместить строку в массиве символов оператором присваивания нельзя. Поместить строку в массив можно либо при инициализации массива (см. далее), либо с помощью функций ввода, либо функцией копирования строк (см. далее).

Ввод строк можно осуществить следующими функциями:

1. Функция scanf() со спецификатором ввода %s. Функция scanf() вводит символы до первого пробела.

2. Функция gets() позволяет вводить строки с пробелами. Ввод оканчивается нажатием клавиши Enter.

Обе функции объявлены в библиотеке stdio.h и автоматически ставят в конце строки символ '\0'.

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

Пример.

#include <stdio.h>

int main()

{

char str[80];

printf("Введите строку: ");

gets(str);

printf("%s\n", str);

puts(str);

return 0;

}

Рассмотрим некоторые функции для работы со строками, содержащиеся в библиотеке string.h.

1. strcpy(s1,s2) Копировать строку s2 в s1. Если места в массиве s1 не достаточно, то это не прервет к завершению программы, но может привести к порче других данных.

2. strcat(s1,s2) Присоединить строку s2 к s1. Нулевой байт строки s1 будет замещен первым символом строки s2. Проверки объема строки приемника также не происходит.

3. strcmp(s1,s2) Сравнить строки s1 и s2. Если строки равны, то функция возвращает 0, если s1>s2 — положительное значение, если s1<s2 — отрицательное.

4. strlen(s) Определить длину строки. Нулевой символ не учитывается.

Пример.

#include <stdio.h>

#include <string.h>

int main()

{

char s1[20], s2[20];

strcpy(s1, "Hello");

strcpy(s2, "C++");

strcat(s1,s2);

puts(s1);

return 0;

}