- •Введение
- •Блок-схема алгоритма
- •Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Основные понятия языка С(С++)
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Структура программы на языке С(С++)
- •Операции и выражения
- •sizeof
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Операторы языка С(С++)
- •Понятие пустого и составного операторов
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Примеры программ
- •Массивы
- •Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Передача массива в функцию
- •inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Вершина стека
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Стек
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Файлы
- •Примеры программ
- •Литература
{printf("Вводите элемент [%d][%d]= ",i,j);
do { fflush(stdin); } while(!scanf("%d",*(p+i)+j));
}
clrscr();
printf("\nВведенный массив"); for(i=0;i<n;i++) // вывод массива
{printf("\n");
for(j=0;j<s;j++)
printf("%3d",*(*(p+i)+j));
} |
|
|
k=0; |
|
|
s1=*(*p+1); |
//для поиска max ст-ца выше диагонали |
|
s2=*(*(p+n-1)+s-2); //для поиска min ст-ца ниже диагонали |
||
j1=1; j2=s-2; |
//номера анализируемых ст-цов |
|
for(j=0;j<s;j++) |
|
|
{ for(i=0;i<n;i++) |
|
|
if(i!=j) k+=*(*(p+i)+j); |
//выбран для суммы не элемент диагонали |
|
else |
|
|
{ if(s1<k) {s1=k; j1=j;} |
// оценка значения выше диагонали |
|
k=0; |
|
// т.к. выбран элемент диагонали |
} |
|
|
if(s2>k && j<s-1) {s2=k; j2=j;} // остальные элементы ниже диагонали k=0; // сброс суммы
}
for(i=0;i<n;i++)
{if(i<j1) *(*(p+i)+j1)=0; if(i>j2) *(*(p+i)+j2)=0;
}
printf("\n\nПреобразованный массив"); for(i=0;i<n;i++) // вывод массива { printf("\n");
for(j=0;j<s;j++)
printf("%3d",*(*(p+i)+j));
}
for(i=0;i<n;i++) free(*(p+i)); free(p); getch();
}
Символьные строки
В С(С++) для работы со строками обычно используются указатели char*: char* str;
Как и обычный указатель, указатель на тип char может быть инициализирован при его описании. Для этого используется строковая константа, при этом адрес ее первого символа будет присвоен указателю, например:
char *str="строка";
При этом выделяется память для строки размером семь байт и указатель инициализируется адресом символа с. Признаком окончания символьной строки является нуль-символ (\0). При его отсутствии информация в массиве будет являться набором символов, но не символьной строкой. В выражениях, где применяется указатель, компилятор подставляет адрес константы. Строковая константа - это любое выражение, заключенное в двойные кавычки. При встрече строковой константы ее символы и символ ’\0’ записываются в последовательные ячейки памяти. Строковые константы размещаются в статической памяти.
Также можно создать массив указателей типа char (массив строк). char *str[5]; // массив из 5-ти указателей
Инициализацию массива строк (массива указателей char*) можно выполнить следующим образом:
char str1[][8]={"строка1","строка2"}; char *str2[2];
str2[0]="строка1"; str2[1]="строка2”;
сhar *str3[2]={ "строка1","строка2"};
Строковая константа, как и любая другая константа в С(С++), может быть также определена с помощью директивы #define, например:
#define st1 ”Минск” #define st2 ”каф. ЭВМ”
В чем состоит отличие объявления символьной строки через указатель на тип char и с использованием массива типа char. Эти два подхода имеют общие стороны: имя массива является также указателем. В то же время имя массива (например, mas) является константным значением. То есть мы не можем изменить значение mas, так как это по существу означало бы изменение адреса массива в памяти. Следовательно, для доступа к очередному элементу массива можно использовать выражение вида mas+1, но не ++mas.
При использовании указателей происходит выделение в статической области не только памяти под строку, но и под переменную str, являющуюся указателем на строку. При этом значение этой переменной может изменяться, таким образом ++str будет указывать на следующий символ строки.
Ввод/вывод строк.
Ранее мы рассматривали функции ввода/вывода информации (scanf(), printf(), getchar(), putcchar()), которые могут быть с успехом использованы при вводе символьных строк. Кроме этих функций, в С(С++) имеется еще одна пара функций (gets(), puts()), предназначенных для ввода/вывода символьных строк. Функция gets читает все символы до тех пор, пока во входном потоке не встретится символ ’\n’ (нажатие клавиши Enter), после этого символ ’\n’ заменяется на ноль-символ (\0) и функция gets передает введеннную строку символов вызывающей функции. Ниже рассмотрен пример с несколькими вариантами использования функции gets():
#include <stdio.h>