Раздел 4. ЛАБОРАТОРНЫЕ РАБОТЫ
10. ИСПОЛЬЗОВАНИЕ УКАЗАТЕЛЕЙ BC++
Цель работы:
· Изучить указатели на объекты и на функции;
· Изучить арифметику указателей;
· Научиться использовать указатели в С-программах.
Задание: Разработать программы, содержащие следующие задачи:
Задача 1. Составить программу на языке С/С++, содержащую:
· объявления и инициализацию указателей на различные типы объектов: переменные, массивы, структуры;
· объявления и инициализацию указателей с различными модификаторами (const, near, far, huge);
· преобразования указателей различных типов, в том числе типа void.
Задача 2. Составить программу на языке С/С++, содержащую:
· простейшие действия с одномерными массивами (как числовыми, так и символьными), используя указатели, методы доступа к элементам массивов через указатели;
· простейшие действия с многомерными массивами (как числовыми, так и символьными), используя указатели, методы доступа к элементам массивов через указатели;
· всевозможные операции с указателями.
Задача 3. Составить программу на языке С/С++, содержащую:
· объявления указателей на функции и передачи аргументов с помощью указателей;
· доступ к содержимым по указателям.
Задача 4. Составить программу на языке С/С++, содержащую:
· динамическое размещение массивов;
· интерпретацию составных описателей.
Примечание: предметную область задач выбрать самостоятельно. При решении задач использовать материалы лекции 9. В разработанных программах должен соблюдаться стиль программирования, каждый раздел ее должен быть прокомментирован, программы должны носить индивидуальный характер.
В качестве примера приведем некоторые фрагменты программы решения задачи 1 на использование указателей.
// Задача 1(фрагмент)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main(void)
{
clrscr(); // Очистка экрана
{ // Указатели на целое:
int *prt, tmp=10;
prt=&tmp; // Инициализация указателя
printf("Адрес - %p, Значение - %d\n",prt,*prt);
*prt+=5; // Декремент значения указателя
printf("Адрес - %p, Значение - %d\n",prt,*prt);
}
// Указатель на одномерный массив:
{
int i,mass1[ ]={9,8,7,6,5,4,3,2,1};
int *pM1=&(mass1[0]); // Инициализация указателя
for (i=0;i<9;i++) printf("%2d",*(pM1+i)); // Доступ к элементам массива
printf("\n");
}
{ Указатель на двумерный массив (матрицу):
int **A,n,i,j; // Объявлен указатель на указатель
printf("Введите порядок матрицы:\n n = ");
scanf("%d",&n); // Запрос порядка матрицы
for(i=0;i<n;i++) A[i]=(int *)calloc(n,sizeof(int)); // Выделение памяти под матрицу
printf("Введите элементы матрицы:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("A(%d,%d) = ",i+1,j+1);
scanf("%d",&(*(*(A+i)+j))); // Инициализация матрицы
}
printf("\n\tИсходная матрица:\n");
for(i=0;i<n;i++)
{
for (j=0;j<n;j++) printf("%d\t",*(*(A+i)+j)); // Вывод исходной матрицы на экран
printf("\n");
}
printf("\n\Транспонированная матрица:\n");
for(i=0;i<n;i++) // Определяем выходную матрицу
{
for (j=0;j<n;j++) printf("%d\t",*(*(A+j)+i)); // Доступ к элементам матрицы
printf("\n");
}
getch(); // Ожидание нажатия клавиши
{ // Указатель на структуру:
struct MyStruct
{
char *name,
*phone_number;
int age;
} *pMyFriend;
pMyFriend->name="Олег"; // Доступ к элементам структуры
pMyFriend->phone_number="3-40-08";
pMyFriend->age=18;
printf("\nИмя: %s\n", pMyFriend->name);
printf("\nНомер телефона: %s\n", pMyFriend->phone_number);
printf("\nВозраст: %d\n",pMyFriend->age);
}
}
}
Тестирование программы:
Адрес – FFF4, Значение – 10
Адрес – FFF4, Значение – 15
9 8 7 6 5 4 3 2 1
Введите порядок матрицы:
n = 2
Введите элементы матрицы:
А(1,1) =1
А(1,2) =2
А(2,1) =32
А(2,2) =4
Исходная матрица:
1 2
32 4
Транспонированная матрица:
1 32
2 4
Имя: Олег
Номер телефона: 3 – 40 – 08
Возраст: 18
Примечание: в задаче 1 представлены только отдельные ее фрагменты. Аналогично должны быть разработаны и представлены остальные задачи на указатели. Отчет должен содержать титульный листок, постановку задач, алгоритм их решения, отлаженные программы на алгоритмическом языке и результаты расчета. На кафедру сдать отчет на бумажной основе, выполненный в Word’e и исходные файлы программ.
11. РАЗРАБОТКА РЕКУРСИВНЫХ ПРОГРАММ
Цель работы:
· Изучить описание рекурсии математическими терминами;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.