Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП для экзаменов.docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
288 Кб
Скачать
☆

26.Құрылымдарды пайдалану

Құрылымдарды пайдалану" \f C \l "1" Си тіліндегі құрылымдар өзара логикалық байланысқан әртүрлі типті мәліметтерді байланыстырады. Мәліметтердің құрылымдық тип­те­рі келесі сипаттаумен анықталады:

struct  құрылым_ аты

{

  элементтерді сипаттау;

};

Құрылымға компьютер жадынан орын бөлу үшін құрылымдық айнымалыны анықтап алу керек:

struct құрылым_аты айнымалы_аты;

Құрылымдарды анықтау барысында олардың элементтеріне бас­тап­қы мәндерді меншіктеуге болады. Құрылым элементтерінің мәнде­рін енгізу үшін ағымдық енгізу операторы cin>> немесе форматпен енгізу операторы – scanf қолданылады.

Құрылымдармен келесі амалдарды орындауға болады:

1) Құрылымның адресін алу амалы. Құрылымның адресін алу үшін құрылымдық айнымалыға нұсқауыш (&) амалы қолданылады.

2) Құрылымның элементін пайдалану үшін нүкте (.) амалы (тіке­лей ену) немесе (->) (нұсқауыш бойынша ену) амалы қолданылады.

Құрылымдық айнымалы float, int, char типті айныма­лы­лар сияқты пайдаланылуы мүмкін. Мысалы:

struct gr /* құрылым аты */

{char fio[10];             /* құрылым элементі */

 int est[25]:    /* құрылым элементі */                                         

 int nomer;    /* құрылым элементі */

}

gruppa1;            /*құрылымдық айнымалы аты */

struct gr gruppa2;  /* құрылымдық айнымалыны хабарлау*/

Егер құрылымды сипаттаушы берілген файлдағы барлық функция­лар­дың алдында орналасса, онда ол құрылымды осы файлда­ғы барлық функциялар пайдалана алады. Құрылымдық айнымалыны анықтау барысында оған алғашқы мәндерді меншіктеуге болады (құрылым өрістеріне мән беруге болады). Мысалы:

      struct date { int day,month,year;};

  d[5]={{1,3,1980},

        {5,1,1990},

        {1,1,2002}};

Құрылымдарды пайдалану мысалы:

#include <stdio.h>

#include <string.h>

#include <conio.h>

struct Spisok {

char Fio[20];

char Grup[10];

int Ot[3];

float S_Bal;

}*sved;

 void Vvod(int nom,struct Spisok *sved)

{printf("\n Мәліметтерді енгізіңіз:");

scanf(“%d”,nom+1);

printf("\n фамилиясы - ");

gets(sved.Fio);

printf("топ нөмірі - ");

gets(sved.Grup);

float s=0;

for(int i=0;i<3;i++) {

printf("\n бағалары - ");

scanf(“%d”,sved.Ot[i]);

s+=sved.Ot[i];

}

sved.S_Bal=s/3.;

return;}

 

void main(void)

{struct Spisok Stud[50]; int i,N; char Bukva;

clrscr();

printf("\n 50-ден кіші бүтін сан енгізіңіз");

scanf(“%d”,&N);

for(i=0;i<N;i++) Vvod(i,&Stud[i]);

printf ("\n студенттердің тізімі:");

for(i=0;i<N;i++)

printf("\n %20s  %10s  %4.2f",Stud[i].Fio, 

       Stud[i].Grup,Stud[i].S_Bal);

printf ("\n  Фамилиядағы әріпті іздеу");

scanf(“%c”,&Bukva);

printf("\n  Студенттер туралы мәлімет");

int kod_p=0;

for(i=0;i<N;i++)

if(Stud[i].Fio[0]==Bukva){ kod_p=1;

printf("\n %20s  %10s%4.2f",Stud[i].Fio,

        Stud[i].Grup,Stud[i].S_Bal);}

if(kod_p==0) printf("Ондай жазба жоқ!");

      printf ("\n Жазбаны іздеу");              

                        Vvod(-1,sved);

kod_p=0;

for(i=0;i<N;i++)

if(memcmp(sved,&Stud[i],sizeof(sved))==0) { kod_p=1;

printf("\n Іздеу: \n  %20s  %10s",Stud[i].Fio, 

       Stud[i].Grup);}

 if(kod_p==0) printf("Ондай жазба жоқ!");

    getch();}

Си тілінде құрылымдарда өрістердің ерекше типі– биттік өрістер­ді қолдануға мүмкіндік жасалған. Биттер өрісі дегеніміз – компьютер жадында бүтін типті айнымалылардың аймағында орналасқан көрші разрядтар (биттік – екілік) топтары.

Ақпараттарды мәліметтер құрылымдарында сақтау үшін бірнеше бит жеткілікті болса, биттер өрістерін пайдаланған ыңғайлы.

Биттік өрісті сипаттаудың синтаксисі:

тип[аты]:ені;

Құрылымның элементтері бір немесе бірнеше құрылымдық айны­малы болуы мүмкін. Құрылымдармен жұмыс істеудің бірнеше мыса­лын қарастырайық.

1-мысал.

/* Программа sum функциясында st құрылымының avans және zarp элементтерін пайдалануды көрсетеді */

 #include<conio.h>  #include<stdio.h> #definek2   #define PE  printf("\n айға алдын-ала берілетін жалақы мөлшері%d...",k); #define PE1printf("\n==============================="); #define PE2 printf("\n"); struct fund{ char *mes_avans; float avans; char *mes_zarp; float zarp; }; main() {static struct fund st={"тамыз",600000, "қазан",900000}; float sum(),res; res=sum(st.avans,st.zarp); printf(" \n Жалпы сома тең %8.2f тенге.",res); PE2;PE1;getch(); } float sum(x,y) float x,y; { clrscr();PE;PE1;PE2; return(x+y);}