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

5.3.2. Пример создания консольного приложения

Текст программы может иметь следующий вид (обратите внимание на то, что функция main используется в простейшей форме – без параметров и не возвращает результатов):

. . .

#include <stdio.h>

#include <conio.h>

void main()

{

int a[10],n, i, kol=0;

randomize(); // Изменение начального адреса для random()

printf("Input N (<=10) ");

scanf("%d", &n);

puts("\n Massiv A");

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

a[i] = random(21)-10; // Заполнение массива А случайными числами

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

}

//Удаление отрицательных элементов из массива А

for(i=0; i<n;i++)

if(a[i]>=0) a[kol++] = a[i];

puts("\n Rezult massiv A");

for(i=0; i<kol;i++) printf("%4d", a[i]);

puts("\n Press any key ... ");

getch();

}

С заполненным случайными числами массивом А результат программы может быть следующим:

Лабораторная работа №6. Обработка двухмерных динамических массивов

Цель работы: изучить понятие «указатель», правила создания и приемы обработки динамических массивов на примере двухмерного массива.

6.1. Краткие теоретические сведения Особенности применения указателей

Обращение к объектам любого типа в языке C может проводиться по имени, как мы до сих пор делали, и по указателю (косвенная адресация).

Указатель – это переменная, которая может содержать адрес некоторого объекта в памяти компьютера, например, адрес другой переменной. Через указатель, установленный на переменную, можно обращаться к участку оперативной памяти (ОП), отведенной компилято­ром под ее значение.

Указатель объявляется следующим образом:

тип * ID указателя;

Перед использованием указатель должен быть инициирован либо конкретным адресом, либо значением NULL (0) – отсутствие указателя.

С указателями связаны две унарные операции: & и *. Операция & означает «взять адрес», а операция разадресации * – «значение, расположенное по адресу», например:

int x, *y; // х – переменная типа int , у – указатель типа int

y = &x; // y – адрес переменной x

*y = 1; // по адресу y записать 1, в результате x = 1

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

Операции сложения, вычитания и сравнения (больше/меньше) имеют смысл только для последовательно расположенных данных – массивов. Операции сравнения «==» и «!=» имеют смысл для любых указателей, т.е. если два указателя равны между собой, то они указывают на одну и ту же переменную.

Связь указателей с массивами

Указатели и массивы тесно связаны между собой. Идентификатор массива является указателем на его первый элемент, т.е. для массива int a[10], выражения a и a[0] имеют одинаковые значения, т.к. адрес первого (с индексом 0) элемента массива – это адрес начала размещения его элементов в ОП.

Пусть объявлены – массив из 10 элементов и указатель типа double:

double a[10], *p;

если p = a; (установить указатель p на начало массива a), то следующие обращения: a[i] , *(a+i) и *(p+i) эквивалентны, т.е. для любых указателей можно использовать две эквивалентные формы доступа к элементам массива: a[i] и *(a+i). Очевидна эквивалентность следующих выражений:

&a[0]  &(*p)  p