ساختمان ها یا structures

از ویکی جامع پردیس دانشگاهی دانشگاه قم
پرش به: ناوبری، جستجو
برنامه نویسی پیشرفته
مقاله بعدی:union
مقاله قبلی:رشته


ساختمان ها یا structures:

برای ذخیره سازی چند عنصر غیر هم نام تحت یک نام در حافظه از ساختمان ها استفاده می شود.

struct نام ساختمان {

اجزاء ساختمان;

};

نام ساختمان از قوانین نام گذاری متغیرها تبعیت می کند. اجزاء ساختمان می توانند متغیرها، آرایه ها و یا حتی ساختمان های دیگری باشند.

مثال:

struct student{

char name[30];

int id;

float avg;

};

روش های تعریف متغیری از جنس ساختمان:

1- در حین تعریف ساختمان متغیری را نیز از جنس ساختمان تعریف می کنیم.

struct student{

char name[30];

int id;

float avg;

} std1,std2;

std1 و std2 متغیرهایی از جنس ساختمان هستند.

2- پس از تعریف ساختمان و در طول برنامه

struct student{

char name[30];

int id;

float avg;

};

main(){

struct student std1,std2;

}

std1 و std2 متغیرهایی از جنس ساختمان هستند.

دسترسی به اجزاء ساختمان:

اسم جزء. اسم متغیر ساختمانی

std1.avg=16.34;

std.id=901222;

مقداردهی اولیه به یک ساختمان:

struct student s1 = {"ali akbari",9012222,16.34};

struct student s2;

s2=s1;

انتساب در ساختمان ها:

مثال: برنامه ای بنویسید که نام و نام خانوادگی و معدل 10 دانشجو را از ورودی بخواند و مشخصات دانشجوی نمونه را چاپ کند.


#include <iostream>
#include <conio.h>

struct student{
 char name [20];
 char family [20];
 float avg;
};

void main(void)
 {
  struct student s , max;
  int i;
  cin>>s.name>>s.family>>s.avg;
  max = s;
  for (i=1; i<10; i++)
  {
   cin>>s.name>>s.family>>s.avg;
   if(max.avg<s.avg)
    max = s;
  }
  cout<<"name="<<max.name<<endl;
  cout<<"family="<<max.family<<endl;
  cout<<"avg="<<max.avg<<endl;
  getch();
 }

آرایه ای از ساختمان ها:


struct student{
 char name [20];
 char family [20];
 float avg;
};

struct student s[10];

strcpy (s[0].name, "ali");
strcpy (s[0].family, "akbari");
s[0].avg = 16.34;

تعریف ساختمان ها به صورت تودرتو:

روش اول:

struct date{

int day;

int month;

int year;

};

struct employee {

char name [30];

struct date d;

int salary;

};

struct employee emp;

strcpy(emp.name,"ali akbari");

emp.d.day = 2;

emp.d.month = 8;

emp.d.year = 1380;

emp.salary = 300000;

روش دوم:

struct employee{

char name[30];

struct date{

int day;

int month;

int year;

}d;

int salary;

};

اشاره گری از نوع ساختمان:

علت استفاده از اشاره گر ساختمان:

1- فراخوانی توسط ارجاع را امکان پذیر می کند.

2- برای ایجاد لیست های پیوندی مورد نیاز است.

struct student{

char name [30];

int id;

float avg;

};

struct student s = {"ali",9012222,16.34};

struct student *p;

p=&s;

برای دسترسی به فیلدها با استفاده از اشاره گر:

روش اول:

(*p).id = 304;

روش دوم:

p->id=304;