Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб.раб по С.doc
Скачиваний:
14
Добавлен:
04.11.2018
Размер:
307.71 Кб
Скачать

Лабораторная работа 7 указатели и массивы

ЦЕЛЬ РАБОТЫ: Изучить новые производные типы данных, такие как

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

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

1. Порядок выполнения работы

1.1. В программе 1 - массив "a" объявить в классе

памяти static;

- изменить длину массива с.

Изучить отличие результатов исходной программы от модифициро-ванных.

1.2. В программе 2 изменить взаиморасположение объектов

index, dates, a, bills. Проанализировать отличие между результата-ми исходной программы и модифицированной.

1.3. Повторить п.1.2 с другим (по отношению к п.1.2) взаимо-расположением указанных объектов.

1.4. Доказать, что имя массива определяет его первый эле-мент, т.е. если а[], то а==&a[0].

1.5. В программе 3 в строке А0 массив А[] описать с типом

static. Сравнить результаты работы двух версий программы.

1.6. В функции 4А программы 4 вычислить и вывести на экран

- сумму элементов второй строки массива na;

- сумму элементов третьей строки массива ma;

Текст программ

/* Программа 1 */ // Проверка содержимого массива

#include <stdio.h>

main()

{

int c[282];

int b[2], a[2];

printf(" %d %d %d\n",a[1],b[1],c[1]);

}

/* Программа 2 */ // Указатели и расположение объектов в памяти

#include <stdio.h>

main()

{

int index,dates[4],*pti,a;

float bills[4],*ptf;

for (index=0;index<4;index++)

printf("Адреса %d значения массивов %u %u\n",

index,&dates[index],&bills[index]);

pti=dates;

ptf=bills;

for (index=0;index<4;index++)

printf("Указатель + %d %u %u\n",

index,pti+index,ptf+index);

printf ("Адрес переменной index = %u\n",&(index));

printf ("Адрес переменной a = %u",&(a));

}

/* Программа 3 */ // Операции с указателями

#include <stdio.h>

#define PR(x) printf("x= %u,*x= %d,&x= %u\n",x,*x,&x)

void main(void)

{

int A[]={100,200,300,400}; // строка А0

int *pt1,*pt2;

pt1=A; // строка А1

printf ("A= %u\n",A);

printf ("A[0]= %u\n",A[0]);

printf ("A[2]= %u\n",*(pt1+2)); // строка А2

pt2=&A[2];

printf ("pt2= %u\n",pt2);

printf ("&A[0]= %u\n",&A[0]);

printf ("&A[1]= %u\n",&A[1]);

printf ("&A[3]= %u\n",&A[3]);

printf ("&A[4]= %u\n",&A[4]);

PR(pt1); PR(pt2);

printf("Адрес А =%u\n",&A); // строка А3

pt1++; // строка А4

PR(pt1);

++pt2; PR(pt2);

printf("pt2-pt1 = %u\n",pt2-pt1); // строка А5

}

/* Программа 4 */ // передача массива в функцию

#include <stdio.h>

static int ma[][4]={

{2,4,6,8},

{100,200,300,400},

{10,40,60,80}

};

void main(void)

{

void prog4A(int *);

static int na[][5]={

{1,3,5,7,9},

{101,201,301,401},

};

prog4A(na);

printf("Размер массива ма равен %u\n",sizeof ma);

printf("Размер массива nа равен %u\n",sizeof na);

printf("%d\n",ma[2][2]); printf("%d",ma[2][2]);

}

void prog4A(int *u)

{

printf("%d\n",ma[2][2]);

printf("%d\n",*u);

printf("%d\n",*(u+1));

printf("%d\n",u[2]);

printf("%d\n",*(u+3));

printf("%d\n",*u+4);

printf("Размер u = %u\n",sizeof u);

printf("%d\n",*(u+8));

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]