Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы для подготовки к экзамену по ОП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
297.52 Кб
Скачать

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

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

#include <conio.h>

#include <stdio.h>

#define ROWS 4

#define COLS 3

void main() {

int a[ROWS][COLS] =

{{1, 4, 5},

{2, 6, 8},

{1, 0, 9},

{4, 2, 8}};

int i, j, tmp, flag;

do {

flag = 0;

for (i = 1; i < ROWS*COLS; i++) {

if (a[0][i] < a[0][i-1]) {

tmp = a[0][i];

a[0][i] = a[0][i-1];

a[0][i-1] = tmp;

flag = 1;

}

}

} while(flag);

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

for (j = 0; j < COLS; j++) {

printf("%3d", a[i][j]);

}

printf("\n");

}

_getch();

}

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

Тема №7 Строки в си. Введение

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

Для хранения строк используются массивы типа char. Ещё раз повторюсь – тип char – числовой, он хранит один байт данных. Но в соответствии с таблицей кодировки каждое из этих чисел связано с символом. И в обратную сторону – каждый символ определяется своим порядковым номером в таблице кодировки.

Например.

#include <conio.h>

#include <stdio.h>

void main() {

char c = 'A';

int i = 65;

printf("display as char %c\n", c);

printf("display as int %d\n", c);

printf("display as char %c\n", i);

printf("display as char %d\n", i);

getch();

}

Мы создали две переменные, одна типа char, другая int. Литера 'A' имеет числовое значение 65. Это именно литера, а не строка, поэтому окружена одинарными кавычками. Мы можем вывести её на печать как букву

printf("display as char %c\n", c);

Тогда будет выведено

A

Если вывести её как число, то будет

65

Точно также можно поступить и с числом 65, которое хранится в переменной типа int.

Спецсимволы также имеют свой номер.

#include <conio.h>

#include <stdio.h>

void main() {

printf("%c", '\a');

printf("%d", '\a');

printf("%c", 7);

getch();

}

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

Строка в си – это массив типа char, последний элемент которого хранит терминальный символ '\0'. Числовое значение этого символа 0, поэтому можно говорить, что массив оканчивается нулём.

Например.

#include <conio.h>

#include <stdio.h>

void main() {

char word[10];

word[0] = 'A';

word[1] = 'B';

word[2] = 'C';

word[3] = '\0';

//word[3] = 0; эквивалентно

printf("%s", word);

getch();

}

Для вывода использовался ключ %s. При этом строка выводится до первого терминального символа, потому что функция printf не знает размер массива word.

Если в этом примере не поставить.

word[3] = '\0';

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

#include <conio.h>

#include <stdio.h>

void main() {

char word[10] = "ABC";

char text[100] = {'H', 'E', 'L', 'L', 'O'};

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

printf("%s", text);

getch();

}

В данном случае всё корректно. Строка "ABC" заканчивается нулём, и ею мы инициализируем массив word. Строка text инициализируется побуквенно, все оставшиеся символы, как следует из главы про массивы, заполняются нулями.