- •2.1. Структуры
- •2.1.1. Определение структурных переменных
- •2.1.2. Доступ к компонентам структуры
- •2.1.3. Поля битов в структурах
- •2.2. Объединения
- •2.3. Перечисления
- •2.4. Переменные структуры
- •2.5. Указатели и структуры
- •2.6. Массив структур
- •2.7. Переименование типов
- •3. Методические указания
- •4. Порядок выполнения работы
- •5. Варианты заданий
2.7. Переименование типов
Формат
typedef старый_тип новый_тип
Примеры:
typedef long large;
/* определяется тип large, эквивалентный типу long */
typedef char *string;
/* тип string, эквивалентен типу char* */
Переименование типов используется для введения осмысленных или сокращенных имен типов, что повышает понятность программ, и для улучшения переносимости программ (имена одного типа данных могут различаться на разных ЭВМ).
Пример:
/* Реализован алгоритм, который позволяет определить
строки матриц, состоящие из одинаковых целых,
расположенных в различных столбцах. Используются
двумерные массивы и структуры. Сначала выполняется
сортировка строк по возрастанию. Отсортированные
строки сравниваются и выводятся на экран номера
одинаковых строк */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#define n 4 /*количество строк */
#define m 4 /*количество столбцов*/
typedef struct mas{int i,i1;} mas;
int m1[n][m]; /*исходный массив*/
struct mas{int i,i1;};
mas a[n*2];
/*массив типа mas, где будут лежать одинаковые
строки, a[1].i и a[1].i1 - одинаковые строки*/
void main()
{
clrscr();
int i,j;
randomize();
for(i=0;i<n;i++)
for(j=0;j<m;j++)
m1[i][j]=random(2);
/*случайным образом в массив заносим целые*/
for(i=0;i<n;i++) {
printf("\n %d) ",i);
for(int j=0;j<m;j++)
printf(" %d",m1[i][j]);
}
int min, p;
/* индекс минимального элемента после s-го элемента
i-ой строки сортировка строк массива по возрастанию */
for(i=0;i<n;i++) { /* i-сортировка i-ой строки */
for(int s=0;s<m-1;s++) {
min=m1[i][s+1];
for(int j=s;j<m;j++)
if(m1[i][j]<=min) {
min=m1[i][j];p=j;
}
/* запоминаем минимальный элемент в ряду после
s-го элемента */
if(m1[i][s]>=min) {
m1[i][p]=m1[i][s];m1[i][s]=min;
}
/* меняем местами s-й и p-й элемент,если
s-й > p-го(минимального) */
}
}
printf("\n");
for(i=0;i<n;i++) {
printf("\n %d) ",i);
for(int j=0;j<m;j++)
printf(" %d",m1[i][j]);
/* выводим отсортированный массив */
}
int s,k=0;
/*сколько элементов в i-й строке совпадают с элементами i1 строки*/
/*сколько строк совпали*/
int i1;
for(i=0;i<n-1;i++) /* верхняя строка i */
for(i1=i+1;i1<n;i1++) { /* нижняя строка i1 */
s=0;
for(int j=0;j<m;j++)
/* сравнение идет по j-му столбцу */
if(m1[i][j]==m1[i1][j]) s++;
/* если соответствующие элементы в i-й и i1-й строки совпадают то кол-во совпавших увеличивается на 1 */
if(s==m) {a[k].i=i;a[k].i1=i1;k++;}
/* если все элементы i-й и i1-й строки совпали, то они одинаковые */
}
printf("\n Совпадающие строки :");
for(i=0;i<k;i++)
printf("\n %d и %d",a[i].i,a[i].i1);
/* распечатываем a[i].i-ю и a[i].i1-ю совпадающую
строку */
getch();
}
3. Методические указания
Лабораторная работа предназначена для работы со структурами.
При разработке программы применить там, где это возможно другие способы задания пользовательских типов.