|
Программирование >> Процедурные приложения
Судно Чайка 1982 гола в1пуска с регистрационн1м номером #XA1011, отработавшее 34187 моточасов. Великолепное судно для морских прогулок. ВСЕГО $18132.00 Судно Метеорит 1988 года выпуска с регистрационн1м номером #КИ8096, отработавшее 27657 моточасов. Отлично выглядит, прекрасные ходовые качества. ВСЕГО $20533.00 Судно Спрут 1993года выпуска с регистрационн1м номером #ДД7845, отработавшее 1000 моточасов. Надежно и экономично. ВСЕГО $36234.00 Указатели на структуры Следующая программа является вариантом предыдущего примера, в котором для получения доступа к отдельным членам структуры применяются указатель и оператор ->. * structpt.c * Эта программа на языке С демонстрирует применение оператора ->. #include <stdio.h> #define iSTRINGIS 15 #define 1STRING20 20 #define iNULL CHAR 1 #define iMAX BOATS 50 struct stboat { char szmodel[iSTRING15 + iNULL CHAR]; char szserial[iSTRING20 + iNULL CHAR] ; char szcomment[80]; int iyear; long lmotor hours; float fsaleprice; } ; int main(void) int i, iinstock; struct stboat astBoats[iMAX BOATS], *pastBoats; pastBoats= sastBoats[0]; printf( Информацию о скольких лодках следует ввести в базу данных? ); scanf( %d ,Siinstock); for (i =0;i < linstock; i++) { flushall(); /* очисткабуфер */ printf( \nВведите модель судна: ); gets (pastBoats->szmodel) ; printf( \nВведите регистрационн1й номер судна: ); gets(pastBoats->szserial) ; printf( \nВведите строку заметок о судне: ); gets(pastBoats->szcomment);, printf( \nВведите год изготовления судна: ); scanf( %d ,SpastBoats->iyear) ; printf( \nВведите число моточасов, наработанных двигателем: ); scanf( %d ,SpastBoats->lmotor hours); printf( \nВведите стоимость судна: ); scanf( %f ,&pastBoats- >fsaleprice) ; pastBoats++; pastBoats = SastBoats [0]; printf ( \n\n ); for (d = 0; i < linstock; i++) { printf ( Судно%s %d года выпуска с регистрационн1м номером#%s,\n , pastBoats->szmodel, pastBoats->iyear, pastBoats->szserial) ; printf ( отработавшее%d моточасов . \n ,pastBoats->lmotor hours) ; printf ( %s\n ,pastBoats->szcomment) ; printf ( ВСЕГО$%8.2f .\n\n ,pastBoats->fsaleprice) ; pastBoats++; return(0); К отдельному члену структуры, представленной указателем, можно обратиться и таким способом: gets ( (*pastBoats) .szmodel) ; Дополнительная пара скобок необходима, поскольку оператор прямого доступа к члену структуры (.) имеет больший приоритет, чем оператор раскрытия указателя (*). Использование оператора косвенного доступа (->) делает запись проще и аккуратнее: gets (pastBoats->szmodel) ; Передача массива структур в качестве аргумента функции Ранее в этой главе уже говорилось о том, что структуры передаются в функции по значению. Если же вместо самой структуры передавать указатель на нее, то это может существенно ускорить выполнение программы. * structaf. с * В этой программе на языке С в функцию передается указатель на структуру. #include <stdio.h> #define i STRING 15 15 #define 1STRING20 20 #define iNULL CHAR 1 #define iMAX BOATS 50 int linstock; struct stboat { char szmodel[iSTRING15 + iNULL CHAR] ; char szserial[iSTRING20 + iNULL CHAR] ; char szcomment [80]; int iyear; long lmotor hours; float fsaleprice; void vprint data(struct stboat *stused boatptr); int main(void) { int i; struct stboat astBoats[iMAX BOATS], *pastBoats; pastBoats= SastBoats[0]; printf( Информацию о скольких лодках следует ввести в базу данных? ); scanf( %d ,Siinstock); for(i= 0; i < iinstock; i++) { flushall(); /* очищаетбуфер */ printf( \nВведитемодельсудна: ); gets(pastBoats->szmodel); printf( \nВведите регистрационн1й номер судна: ); gets(pastBoats->szserial); printf( \nВведите строку заметок о судне: ); gets (pastBoats->szcoiranent) ; printf( \nВведите год изготовления судна: ); scanf( %d ,&pastBoats->iyear); printf( \nВведите число моточасoв, наработанных двигателем: ); scanf( %d /&pastBoats->lmotor hours); printf( \nВведите стоимость судна: ); scanf( %f ,spastBoats->fsaleprice); pastBoats++; pastBoats = SastBoats[0]; vprint data(pastBoats); return(0); } void vprint data (struct stboat *stused boatptr) { int i; printf ( \n\n ); for(i=0;i < linstock; i++){ printf ( Судно%s %d года выпуска с регистрационн1м номером#%s,\n , stused boatptr->szmodel, stused boatptr->iyear, stused boatptr->szserial) ; printf( отработавшее %dмоточасов. \n ,stused boatptr->lmotor hours) printf ( %s\n ,stused boatptr->szcomment) ; printf ( ВСЕГО$%8.2f\n\n ,stused boatptr->fsaleprice) ; stused boatptr++; Структуры в C++ Ниже показана программа на C++, являющаяся аналогом рассмотренного в предыдущем параграфе примера на языке С. В обоих случаях для работы со структурой применяется одинаковый синтаксис. struct. срр В этой программе на языке C++ в функцию передается указатель на структуру. #include <iostream.h> #define 1STRING15 15 #define 1STRING20 20 #define iNULL CHAR 1 #define iMAX BOATS 50 int linstock; struct stboat { char szmodel[iSTRING15 + iNULL CHAR]; char szserial[iSTRING20 + iNULL CHAR]; char szcomment[80]; int iyear; long lmotor hours; float fsaleprice; ); void vprint data (stboat *stused boatptr) ; int main (void) { int i; char newline; stboat astBoats [iMAX BOATS] , *pastBoats; pastBoats = SastBoats [0]; cout<< Информацию о скольких лодках следует ввести в базу данных? cin >> linstock; ford = 0; i < linstock; i++) { cout << \nВведите модель судна: ; cin >> pastBoats->szmodel;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |