148
printf("circle.area %f\n", circle.area);
change_struct (&circle ); /* функцияны шақыру */
/* функцияға мән бергеннен кейін */
printf("After\n") ;
printf("circle.type %d\n", circle.type);
printf("circle.color %c\n", circle.color);
printf("circle.radius %f\n", circle.radius) ;
printf("circle.area %f\n", circle.area);
}
/* функцияны сипаттау */
void change_struct (Shape *shape)
{
shape -> type = 0;
shape -> color = 'r';
shape -> radius =5.0;
shape -> area = PI * shape -> radius * shape -> radius;
}
Программа жҧмысы нәтижесі
(9.2-сурет):
Before
circle.type 1
circle.color b
circle.radius 2.000000
circle.area 4.000000
After
circle.type 0
circle.color r
circle.radius 5.000000
circle.area 78.500000
Press any key to continue
Қҧрылымдардың ӛрістерінің ӛздері де қҧрылым бола алады. Енді соған бір
мысал келтірейік.
5 мысал. Қызметкерлер туралы мәліметтерді қҧрылым тҥрінде жазу
struct Employee { /* "Қызметкер" құрылымы */
char name[64];
// фамилиясы
int age;
// жасы
unsigned employee_number; // реттік нөмірі
struct Date { // датасы
int day;
// күні
int month;
// айы
int year;
// жылы
} hiredate;
// жұмысқа алынған мерзімі
float salary;
// жалақысы
} new_employee;
// жаңа қызметкер
9.2-сурет
149
Ішкі қҧрылым элементін пайдалану ҥшін
. (нҥкте) операциясы қолданылады.
Алдымен сыртқы қҧрылым элементі, сонан соң ішкі қҧрылым элементі кӛрсе-
тіледі. Мысалы:
new_employee.hire_date.month = 12;
Қҧрылымдар жиымын қҧруға да бір мысал келтірейік.
6 мысал. Қҧрылымдар жиымы
/* struct_6 Құрылымдар жиымын құру */
#include
#define STR15 16
#define MAX 50
struct boat // "қайық" құрылымы
{
char model[STR15];
int year;
float price;
};
void main ()
{ int i, k;
boat Boats[MAX];
/* Қанша қайық бар? */
printf("How many boats? ");
scanf("%d", &k);
for (i = 0; i < k; i++)
{
flushall() ; /* буферді тазалау алдыңғы scanf()
функциясын орындаудан қалған кіріс ағынындағы жаңа жолға көшу
символын алып тастау үшін керек */
/* қайық моделін енгізу */
printf("\n Input a model of the boat: ");
gets(Boats[i].model);
/* қайықтың шыққан жылын енгізу */
printf("\n Input the year of the creation of the boat: ");
scanf("%d",&Boats[i].year);
/* қайықтың бағасын енгізу */
printf("\n Input the price of the boat: ");
scanf("%f",&Boats[i].price);
}
printf("\n\n");
/* циклде барлық қайықтар туралы мәлімет шығару */
for (i = 0; i < k; i++)
{
printf("The boat %s, the year of the creation %d\n",
Boats[i].model, Boats[i].year);
printf("This boat was sold for %8.2f $.\n",
Boats[i].price);
}
}
150
Программаны орындау нәтижелері:
How many boats? 3
Input a model of the boat: Guldyz
Input the year of the creation of the boat: 2006
Input the price of the boat: 142200
Input a model of the boat: Tulpar
Input the year of the creation of the boat: 2009
Input the price of the boat: 162000
Input a model of the boat: Superi
Input the year of the creation of the boat: 2011
Input the price of the boat: 284000
The boat Guldyz, the year of the creation 2006
This boat was sold for 142200.00 tenge.
The boat Tulpar, the year of the creation 2009
This boat was sold for 162000.00 tenge.
The boat Superi, the year of the creation 2011
This boat was sold for 284000.00 tenge.
9.7 Құрылым жиымдарын функция аргументі ретінде пайдалану
Егер
қҧрылымдар орнына оларға арналған нҧсқауышты жазатын бол-
сақ, онда қҧрылымдар функцияларға мәні бойынша беріледі де, програм-
маның орындалуы жылдамдайды, ӛйткені мҧндайда бастапқы мәлімет-
тердің кӛшірмелері жасалмайды. Келесі мысалда қҧрылымдар орнына
нҧсқауышты пайдалану кӛрсетілген.
// struct_5
құрылымдар орнына оған арналған нұсқауышты қолдану мысалы
#include
#define STR15 16
#define MAX 50
int k;
struct boat
{ char model[STR15];
int year;
float price;
};
void print_data(boat *);
void main()
{ int i;
boat Boats[MAX], *pastBoats;
pastBoats = &Boats[0];
cout << "How many boats? ";
cin >> k;
for (i = 0; i < k; i++)
{