КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Переименование типов
Массив структур Указатели и структуры Рассмотрим метку структуры student, описание которой было дано выше как struct student { char name[25]; int id, age; char sex; } Указатель new_student определен как struct student *new_student; Предположим, что память выделена таким образом, чтобы new_student указывал на объект student. Тогда на компоненты этого объекта можно ссылаться следующим образом: (*new_student).name (*new_student).id (*new_student).age (*new_student).sex Поскольку указатели часто используются для указания на структуры, в языке Си специально для ссылок на компоненты таких структур введен оператор выбора стрелка вправо ->. Например, ссылки на вышеприведенные компоненты структуры можно записать с использованием оператора стрелки вправо -> как: new_student->name new_student->id new_student->age new_student->sex Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива: struct book libry[MAXBKS]; Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book. Таким образом, libry[0] является book-структурой, libry[1] - второй book-структурой и т.д. Определение элементов массива структур. При определении элементов массива структур мы применяем те же самые правила, которые используются для отдельных структур: сопровождаем имя структуры операцией получения элемента и имени элемента: libry[0].value value - первый элемент массива libry[4].title title - пятый элемент массива Формат 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(); }
15. Лекция: Библиотека языка Си и файлы ввода-вывода.
-Библиотека языка Си содержит множество функций и макроопределений. -Библиотеки меняются от системы к системе, но есть ядро функций (стандартная библиотека). -Распределение памяти.
Дата добавления: 2014-01-05; Просмотров: 401; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |