
- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
2.3. Возврат значений из функции с помощью ссылочного типа
В этом случае ссылочный тип используется следующим образом:
-
в заголовке функции параметрырезультаты (в нашем примере y, z) записываем как переменные ссылочного типа, то есть с символом &;
-
в тексте функции никакие дополнительные символы для этих переменных не используем, то есть работаем, как с обычными переменными;
-
при вызове функции в качестве фактических параметров, указываем простые переменные соответствующего типа (cs, sn), объявленные обычным образом;
-
входные параметры как параметрызначения используются по тем же правилам (см. §1);
-
вызов функции с несколькими результатами осуществляется как вызов любой функции типа void, то есть отдельно, а не в выражении (см. § 1).
Почему полученное значение возвращается в вызывающую функцию? С помощью ссылочного типа определяется другое имя ячейки. Поэтому для формального (y) и фактического (cs) параметров отводится одна и та же ячейка, которая в функции называется y, а при вызове в головной функции — cs. Поэтому если в функции получим y, то этим самым определим и значение cs, то есть полученное в функции значение возвращается в вызывающую функцию. Аналогичная ситуация имеет место для переменных z и sn.
Аналогично ссылочный тип используется и в случае, если значение переданной в функцию переменной надо изменить и это изменённое значение надо возвратить в точку вызова, то есть если одна и та же переменная является и входным, и выходным параметром. Например, составим функцию для перестановки значений двух переменных:
void CHANGE (float &u, float &v)
{ float temp;
temp=u; u=v; v=temp;
}
Тогда вызвать её можно, например, следующим образом:
float a=1.1, b=2.2;
CHANGE( a, b);
Так как a и u — это два имена одной и той же ячейки, то изменение u с 1.1 на 2.2 автоматически приведёт к изменению переменной a. Аналогично изменится и переменная b, если изменили значение переменной v. И тогда оператор cout<<a<<” “<<b; выведет изменённые значения 2.2 и 1.1, полученные в результате их перестановки.
Задачи и упражнения
-
Составить и проверить функцию, которая в текстовом режиме с помощью символов псевдографики рисует границу прямоугольника, не заполняя его внутреннюю область.
void ramka (int x0, int y0, int, int);
int main ()
{ ramka (2,5, 10, 30); getch(); return 0;
}
void ramka (int x0, int y0, int n1, int n2)
{ int x,y,i; x=x0; y=y0;
gotoxy(x,y++); printf("%c",218); // символ левого верхнего угла
for (i=0;i<n1-2;i++)
{ gotoxy(x,y++); printf("%c", 179); // для вертикальной линии
}
gotoxy(x++,y); printf("%c",192); // левый нижний угол
for (i=0;i<n2-2;i++)
{ gotoxy(x++,y); printf("%c",196); // для горизонтальной линии
}
gotoxy(x,y--); printf("%c",217); // правый нижний угол
for(i=0;i<n1-2;i++)
{ gotoxy(x,y--); printf("%c",179);
}
gotoxy(x--,y); printf("%c",191); // правый верхний угол
for(i=0;i<n2-2;i++)
{ gotoxy(x--,y); printf("%c",196);
}
}
Коды всех символов, в том числе и символов псевдографики, можно вывести с помощью следующей программы:
main()
{ clrscr(); textcolor(2);
for (int i=1; i<256; i++)
{ cprintf("%4d",i); printf("%c%c" , i, i%12?' ':'\n');
}
getch(); return 0;
}
Здесь по формату "%4d” выводим код символа указанным в textcolor вторым цветом, а по формату "%c” выводим символ с этим кодом цветом по умолчанию. При этом если i кратно 12, то выполняется переход на следующую строку экрана.
-
Составить функцию для нахождения действительных корней квадратного уравнения a∙x2 + b∙x + c =0. Используя ее, составить и проверить функцию решения биквадратного уравнения a∙z4 + b∙z2 + c =0.
-
Составить и проверить функцию решения линейного уравнения вида a∙x=b.
-
Вывести n параллельных горизонтальных линий разными цветами. Составить и использовать функцию для рисования одной горизонтальной линии.
-
Вывести n параллельных вертикальных линий разными цветами. Составить и использовать функцию для рисования одной вертикальной линии.
-
В текстовом режиме заполнить все окно вывода следующими фигурами, не заполняя их внутри:
-
ромбами;
б) равнобедренными треугольниками;
в) прямоугольными треугольниками с прямым углом внизу слева;
г) прямоугольными треугольниками с прямым углом внизу справа.
Составить и использовать функцию для рисования границы одной фигуры в зависимости от варианта.
-
В текстовом режиме нарисовать последовательность заполненных внутри прямоугольников, разместив их одним из следующих способов:
а) по диагонали окна, начиная с левого верхнего угла;
б) по диагонали окна, начиная с левого нижнего угла;
в) в шахматном порядке.