Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК-1_АЯП_рус.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.19 Mб
Скачать

Void main()

{int i,a[5],*pa,s=0;

pa=a; //pa=&a[0];

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

{scanf("%d",pa);

s+=*pa;

pa++;

}

pa-=5;

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

{printf("%d ",*pa);

pa++;

}

printf("\n s=%d",s);

getch();

}

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

#include<stdio.h>

Void main()

{int i,j,a[3][2],*pa,s=0;

pa=&a[0][0];

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

for(j=0;j<2;j++)

{scanf("%d",pa);

s+=*pa;

pa++;

}

pa-=6;

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

{for(j=0;j<2;j++)

{printf("%d ",*pa);

pa++;

}

printf("\n");

}

printf("\n s=%d",s);

getch();

}

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

#include<stdio.h>

#include<conio.h>

#include<string.h>

#define n 3

#define m 5

Void main()

{ char a[n][m],*pa,*paa,i,b[80],aa;

int k=0;

clrscr();

printf("vvedi");

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

{pa=a[i];

scanf("%s",pa); }

strcpy(b,a[0]);

strcat(b," ");strcat(b,a[1]);

strcat(b," ");strcat(b,a[2]);

pa=b;

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

{ // if(*pa=='a') {k++; }

printf("\nk=%c",*pa); pa++;}

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

{pa=a[i];

printf("\n%s ",pa); }

pa=b;

printf("\n%s ",pa);

getch();

}

Основная литература: 2[124-137]

Дополнительная литература:1,2,3,5

Контрольные вопросы:

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

2. Приведите пример связи указателя с матрицей.

3. Заполните массив int x[10][15] случайными числами из диапазона 1..100 с помощью указателя;

4. Заполните массив float x[15] [15] случайными числами из диапазона

0..1 с помощью указателя;

5.Имя массива может использоваться, как адрес нулевого элемента массива?

Лекция 11. Структура. Работа со структурами. Сложные структуры. Cтруктуры и указатели.

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

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

  Элементы структуры обозначаются идентификаторами, с которыми можно связываьб описатели типов. В результате структуру можно рассматривать как единое целое и осуществлять при необходимости выбор составляющих ее элементов.

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

tab_nom - табельный номер; fio - фамилия, имя, отчество; pol - пол; summa - зарплата;

Все эти понятия можно объединить в такую, например, структуру:

struct anketa { int tab_nom; char fio[30]; char data[10]; int pol; char adres[40]; float summa; };

  Эта запись называется описанием структуры. Она начинается с ключевого слова struct и состоит из заключенного в фигурные скобки списка описаний. За словом struct может следовать необязательное имя, которое называется именем типа структуры (иногда его называют тэгом или ярлыком структуры). Этот ярлык именует структуру и в дальнейшем может использоваться для сокращения подробного описания. Переменные, упоминающиеся в записи, называются элементами. Следом за правой фигурной скобкой, заканчивающей список элементов, может следовать список переменных, так же, как и в случае базисных типов. Вот почему в приведенном выше описании структуры после закрывающей фигурной скобки стоит точка с запятой; она завершает пустой список. Описание struct {....} p1, p2, p3; синтаксически аналогично int p1, p2, p3; в том смысле, что каждый из операторов описывает p1, p2, p3 как переменные соответствующего типа и приводит к выделению для них памяти. Описание же структуры без последующего списка переменных не выделяет никакой памяти. Оно только определяет форму сируктуры и действует как шаблон. Если такое описание снабжено ярлыком (именем типа), то его можно позже использовать при определении фактических экземпляров структуры. Например, используя указание выше описане anketa, можно с помощью строки

                      struct anketa a0, a1 ,a2;

описать структурные переменные a0, a1, a2, каждая из которых строится по шаблону, введенному структурой anketa. Любая переменная a0, a1, a2 содержит в строго определенном порядке элементы tab_nom, fio, data, pol, adres, summa. Все переменные , как и все остальные переменные языкаЮ получают места в памяти.

 Внешние и статические структуры можно инициировать, помещая следом за определением список начальных значений элементов:

                  struct anketa a0={ 1024, "Макагон В.М", "10.01.1943",0 , "Одесса, Варневская, 23/99", 175.00};

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

      имя_структуры.имя_елемента

Операция выделения элемента . (точка) связывает имя структуры в имя элемента. Например, мы можем с учетом введенных обозначений написать:

a0.data="10.01.43";

a1.summa=0.0; if(a2.pol==1) man=man+1;

Действия над структурами, в общем, ограничены. Все, что можно делать со структурой, - это взять ее адресс с помощью операции & и обращаться к ее элементам, как показано выше. Записи нельзя копировать или присваивать как единое целое; их нельзя передавать в функцию или получить оттуда целиком. Однако, к указателям на структуры это замечание не относится.

На практике структурные переменные обычно появляются в виде массива или списка. Нетрудно видеть, что наши три переменные a0, a1, a2 будет проще использовать, если их объединить в массив, сосотоящий из элементов типа struct anketa. Применив в программе описание

            struct anketa a[3];

мы можем употреблять в ней, например, такие операторы:

a[0].fio ="Макагон В.М"; if(a[i].tab_nom>a[i+1].tab_nom) { p=a[i].tab_nom; a[i].tab_nom=a[i+1].tab_nom; a[i+1].tab_nom=p;

Работа со структурами включает в себя три действия:

а) определение (создается шаблон), то есть определяется состав элементов структуры и их типы;

б) создание экземпляров структуры, то есть переменных типа структура

в) работа с экземплярами структуры или с переменными типа структура

Определение структуры

Стандартный тип

struct имя_структуры

{тип_переменной имя_переменной 1;

………………………………………

тип_переменной имя_переменной n;

};

Безимянный структурный тип при однократном определении структуры

struct

{тип_переменной имя_переменной 1;

………………………………………

тип_переменной имя_переменной n;

};

С помощью служебного слова typedef

typedef struct

{тип_переменной имя_переменной 1;

………………………………………

тип_переменной имя_переменной n;

} имя_структуры;

Создание экземпляров

Создание экземпляров при определении структуры

struct имя_структуры

{тип_переменной имя_переменной 1;

………………………………………

тип_переменной имя_переменной n;

}имя_экземпляра 1,…, имя_экземпляра n;

Создание экземпляров после определения структуры

struct имя_структуры имя_экземпляра;

Создание экземпляров после определения структуры с помощью служебного слова typedef

имя_структуры имя_экземпляра;

Работа с экземплярами

Доступ к отдельным элементам экземпляра структуры производится с

помощью операции-точки (операция доступа к элементам структуры)

Структуры бывают простые и сложные.

Сложные структуры

1. Структура может содержать в себе массивы.

struct

{ char fam[25];

char adr[20];

int gr;

inf;

2. Экземпляр структуры может быть массивом, элементы которого имеют одну и ту же структуру

{ struct ved

{ char FAM[15];

int PA;

int KR;

float SB;

} Stud[6];

3.Структура может содержать в себе структуры.

struct ses

{char dis;