Слайд 2Определение массива
Массив – это линейный тип данных или последовательность ячеек
памяти одинакового типа. Массивы используются практически в любой программе. Массивы
могут быть одномерными, двумерными и многомерными. Одномерные массивы соответствуют строке, двумерные – матрице.
Слайд 3Объявление массивов
При объявлении массива указывают тип его элементов и в
квадратных скобках размер массива.
Для одномерного массива объявление запишется в виде:
int
a[10];
Слайд 4Одномерные массивы
Удобно использовать при объявлении массива директиву препроцессора #define:
#define SIZE
10 // определили поименованную константу, задающую
размер массива
void main()
{
int a[SIZE];
…
}
Слайд 5Одномерные массивы
Для доступа к элементу массива указывают в квадратных скобках
его номер. При этом следует отметить, что в языке С
индексация элементов массива начинается с нуля.
То есть для инициализации первого элемента массива единицей необходимо записать оператор:
a[0]=1;
Слайд 6Одномерные массивы
Для работы с массивами обычно используют цикл for.
Инициализировать
массив можно разными способами.
Если требуется можно инициализировать элементы массива сразу
после объявления:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Слайд 7Одномерные массивы
Можно заполнить элементы массива непосредственно в программе:
int a[10];
a[5] =
5;
for (int i=0; i
элементу массива присваивается значения пять, затем все элементы массива обнуляются.
Слайд 8Одномерные массивы
Инициализация одномерного массива пользователем запишется в виде:
int a[10];
for (int
i=0; i
сначала элементам массива присваиваются значения введенные пользователем.
Слайд 9Примеры
Рассмотрим пример нахождения количества отрицательных элементов массива.
int a[10], count=0;
…
for (int
i=0; i
Слайд 10Примеры
Пример нахождения суммы отрицательных элементов массива.
int a[10], sum=0;
…
for (int i=0;
i
Слайд 11Примеры
Пример нахождения минимального элемента массива и его индекса.
int a[10], min,
mini;
…
min=a[0];
for (int i=1; i
Слайд 12Использование многомерных массивов
При создании двухмерного массива после его имени ставится
два значения – количество строк и столбцов:
int a[10][12];
Слайд 13
Многомерные массивы инициализируются так же, как и одномерные. В следующем
примере массив sqrs инициализируется числами от 1 до 10 и
их квадратами:
int sqrs[10][2] = {
1, 1,
2, 4,
3, 9,
4, 16,
5, 25,
6, 36,
7, 49,
8, 64,
9, 81,
10, 100
};
Слайд 14
Далее на примере показаны инициализация и вывод элементов двухмерного массива.
int
a[10][20];
for (int i=0; i
= 0;
Слайд 17Алгоритм сортировки пузырьком
6 2 7 3 1 5
flag=0, i=0:
2 6 7 3 1 5, flag=1
flag=1, i=1:
2 6 7 3 1 5
flag=1, i=2: 2 6 3 7 1 5, flag=1
flag=1, i=3: 2 6 3 1 7 5, flag=1
flag=1, i=4: 2 6 3 1 5 7, flag=1
flag=0, i=0: 2 6 3 1 5 7
flag=1
flag=1
flag=0, i=1: 2 3 6 1 5 7, flag=1
flag=1, i=2: 2 3 1 6 5 7, flag=1
flag=1, i=3: 2 3 1 5 6 7, flag=1
flag=1, i=4: 2 3 1 5 6 7, flag=1
flag=1
flag=0, i=0: 2 3 1 5 6 7, flag=0
flag=0, i=1: 2 1 3 5 6 7, flag=1
Слайд 19Результат работы
srand(4); for (int i=0; i
a[i] = rand()*10;
srand(4); for (int i=0; i
a[i] = rand()*10;
Слайд 20
Функция srand() устанавливает исходное число для последовательности, генерируемой функцией rand().
(Функция rand() возвращает псевдослучайные числа.)
Часто функция srand() используется, чтобы
при различных запусках программа могла использовать различные последовательности псевдослучайных чисел, — для этого она должна задавать различные исходные числа. Кроме того, с помощью функции srand() можно многократно генерировать одну и ту же последовательность псевдослучайных чисел, — для этого нужно задавать в качестве исходного числа одно и то же значение. Иными словами, чтобы многократно генерировать одну и ту же последовательность псевдослучайных чисел, нужно вызывать данную функцию с одним и тем же значением параметра seed до начала генерации этой последовательности.
Слайд 21
Функция rand() генерирует последовательность псевдослучайных чисел.
При каждом обращении к
функции возвращается целое в интервале между нулем и значением RAND_MAX,
которое в любой реализации должно быть не меньше числа 32 767.
Слайд 23Строковые константы
Строковая константа – это последовательность символов кода ASCII, заключённая
в кавычки "..." и имеющая тип char.
Примеры:
char str="This is character
string"
char str1="Это строковая константа"
char str2="A"
char str3="1234567890"
char str4="0"
char str5="$"
В конце каждой строки компилятор помещает нулевой байт '\0', отмечающий конец данной строки
Слайд 24
Каждая строковая константа, даже если она идентична другой строковой константе,
сохраняется в отдельном месте памяти
Если необходимо ввести в строку символ
кавычек ("), то перед ним надо поставить символ (\)
В строку могут быть введены любые специальные символьные константы, перед которыми стоит символ \. При этом символ \ и следующий за ним символ новой строки игнорируется
Строковые константы размещаются в статической памяти. Вся фраза в кавычках является указателем на место в памяти, где записана строка. Это аналогично использованию имени массива, служащего указателем на расположение массива.
Слайд 25
/* Строки в качестве указателей */
main( )
{
printf("%s, %u, %c\n",
"We", "love“,*"Pascal");
}
В
примере, формат %s выводит строку We.
Формат %u выводит целое без знака. Если слово "love" является указателем, то выдается его значение, являющееся адресом первого символа строки.
Наконец, *"Pascal" должно выдать значение, на которое ссылается адрес, т.е. первый символ строки "Pascal".
Вот что выдаст программа:
We, 34, P
Слайд 26Массивы символьных строк и их инициализация
При определении массива символьных строк
необходимо сообщить компилятору требуемый размер памяти
Первый способ - инициализация массива
при помощи строковой константы
Например:
char m1[]="Только ограничьтесь одной строкой.";
Здесь оператор инициализировал внешний по умолчанию массив m1 для указанной строки
Слайд 27
char m1[ ]={
'T','o','л','ь','k','o','
','o','г'','p','a','н','и','ч','ь','т','e','c','ь','
',o','д','н','o','й','
','c','т','p','o','k','o','й','.','\0'
}
Слайд 28
Без символа ‘\0’ мы имеем массив символов, а не строку.
Для той и другой формы компилятор подсчитывает символы и таким
образом получает размер памяти.
Как и для других массивов, имя m1 является указателем на первый элемент массива:
m1==&m1[0]
*m1=='T', и
*(m1+1)==m1[1]=='o’
* - оператор разыменования
& - оператор взятия адреса
Слайд 30Чтение и запись строк
Функция gets() читает строку символов, введенную с
клавиатуры, и записывает ее в память по адресу, на который
указывает ее аргумент
char *gets(char *cmp);
Здесь cmp - это указатель на массив символов, в который записываются символы, вводимые пользователем, gets() также возвращает cmp.
Функция puts() отображает на экране свой строковый аргумент, после чего курсор переходит на новую строку. Вот прототип этой функции:
int puts(const char *cmp);
Слайд 31Пример использования
Следующая программа читает строку в массив str и выводит
ее длину:
#include
#include
int main(void) {
char
str[80];
gets(str);
printf("Длина в символах равна %d", strlen(str));
return 0;
}
Слайд 32Функции для обработки строк
Для выполнения описанных в этом подразделе функций
необходимо подключить файл string.h командой
#include
Слайд 34Пример 1:
/* сцепить две строки */
#include
#include
#include
int main(void)
{
char destination[25];
char *blank = " ",
*c = "C++", *turbo = "Turbo";
strcpy(destination, turbo);
strcat(destination, blank);
strcat(destination, c);
printf("%s\n", destination);
getch();
return 0;
}
Слайд 35
char destination[25];
char blank[10], c[10], turbo[10];
printf
("введите строку");
gets(blank);
gets(c);
gets(turbo);
strcpy(destination,
turbo);
strcat(destination, blank);
strcat(destination, c);
puts(destination);
getch();
return 0;
}
Слайд 36Пример 2:
/* cцепить две строки, причем из второй строки копировать
не более n символов*/
#include
#include
#include
int main(void)
{
char destination[25];
char *source = "structured ";
strcpy(destination, "programming");
strncat(destination, source, 11);
printf("%s\n", destination);
getch();
return 0;
}
Слайд 37
int main(void)
{
char buf1[] = "aaabbb", *buf2 = "bbbccc",
*buf3 = "ccc";
int ptr;
clrscr();
ptr
=;
if (strncmp(buf2,buf1,3)> 0)
printf("buffer 2 is greater than buffer 1\n");
else
printf("buffer 2 is less than buffer 1\n");
ptr = strncmp(buf2,buf3,3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3\n");
else
printf("buffer 2 is less than buffer 3\n");
getch();
return(0);
}
Слайд 38
#include
#include
#include
int main(void)
{
char string[20];
char *ptr, c
= 'r';
strcpy(string, "This is a string");
ptr
= strchr(string, c);
if (ptr)
printf("The character %c is at position: %d\n", c, ptr);
else
printf("The character was not found\n");
getch();
return 0;
}