- •1.Учебно-методический комплекс дисциплины
- •Данные о преподавателе:
- •1.2 Данные о дисциплине:
- •Выписка из учебного плана
- •1.3 Пререквизиты
- •1.4 Постреквизиты
- •1.5 Цели и задачи дисциплины
- •1.6 Перечень и виды заданий и график их выполнения
- •Виды заданий и сроки их выполнения
- •1.7 Список литературы
- •1.8 Контроль и оценка знаний.
- •1.9 Политика и процедура курса
- •2 Содержание Активного раздаточного материала
- •2,1 Тематический план курса
- •2.2 Конспект лекционных занятий
- •#Define millenium 1000
- •// Нельзя изменять
- •/* Это моя первая программа на Си*/
- •Void main()
- •Void main ()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main(void)
- •If (логическое выражение) оператор 1;
- •Void main()
- •If (логическое выражение)
- •If (условие 1 )
- •If (условие 1 )
- •If (X) printf ("Число не равно нулю");
- •Void main()
- •Void main(void)
- •Void main()
- •Void main()
- •Int n; // Количество узлов интерполяции
- •Int k; // Номер узла
- •Void main()
- •Vvedi 5 7
- •Int *a; // Указатель на массив целых чисел
- •Void main()
- •Int vect[10], s1[50];
- •Int vect [n];
- •Void main( )
- •Int min; // номер минимального элемента
- •Int random ( int n )
- •Void lin(char a)
- •Void z1(int * X, int * y)
- •Void z1(int*, int*);
- •Int имя переменной;
- •Void main()
- •8 Есть цифра
- •8 Есть буква или цифра
- •Int integ;
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Int ocen;
- •Void main( )
- •File *указатель на файл;
- •Fclose(имя_указателя);
- •Void main()
- •Int h; /*дескриптор создаваемого файла*/
- •Void main()
- •Initgraph(&g_driver,&g_mode," ");
- •Vgamed 1 640x350
- •Vgahi 2 640x480
- •Initwindow ( 400, 300 ); // открыть окно для графики 400 на 300
- •Void main(void)
- •Int g_driver,g_mode,g_error;
- •2.3 Планы лабораторных занятий
- •Планы занятий в рамках самостоятельной работы студентов под руководством преподавателя (срсп).
- •2.5 Планы занятий в рамках самостоятельной работы студентов (срс).
- •2.6 Тестовые задания для самоконтроля с указанием ключей
- •Глоссарий
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;
