اعضای ساختار معمولاً به صورت مستقل و جدا از هم پردازش میشوند، یعنی هر عضو ساختار، به عنوان هویت مستقل، به صورت جداگانه پردازش میشود. به هر عضو یا عنصر ساختار با استفاده از عملگر `.´ یا عملگر عضویت (که گاهی آن را عملگر period یا dot نیز نامند) دستیابی یا رجوع میشود. با استفاده از این عملگر میتوان به هر عنصر ساختار به صورت زیر دست یافت.
structure-name. element-name
یا
variable. member
اپراتور نقطه نسبت به سایر اپراتورها، حتی اپراتورهای یکانی، تقدم بالایی دارد. برای مثال دو عبارت
+ + (variable. member) و + + variable. member
معادل هماند؛ یعنی اپراتور + + به عضو ساختار عمل خواهد کرد نه به تمام متغیر ساختار. به طریق مشابه، دو عبارت
&variable. member و &(variable. member)
معادل یکدیگرند. بنابراین هر دو عبارت مزبور به آدرس عضو ساختار دسترسی مییابند، نه به آدرس متغیر ساختار.
مثال برنامهای بنویسید که عملیات زیر را انجام دهد.
۱٫ مشخصات n دانشجو را که فرمت آن به صورت زیر است، به آرایهای از ساختار بخواند و سپس سابقه هر دانشجو را در سطری جدا چاپ کند. n حداکثر ۲۵ است که از دستگاه ورودی استاندارد دریافت میشود.
۲٫ شماره دانشجویی را از ورودی بخواند و در لیست دانشجویان جستجو کند. اگر وجود داشت بقیه مشخصات وی چاپ شود، وگرنه پیغام “not found” چاپ گردد.
۳٫ سوابق دانشجویان برحسب شماره دانشجویی به صورت صعودی مرتب شود و سپس سابقه هر دانشجو در سطری جدا چاپ گردد.
متغیرهای st-no، l-name، f-name و grade به ترتیب معرف شماره دانشجویی، نام خانوادگی، اسم کوچک و نمره امتحانی دانشجوست. درضمن ملاحظه میکنید که سابقه هر دانشجو ساختاری شامل ۳ فیلد دارد: st-no، name، grade که در آن فیلد یا عضو name خودش ساختاری دوعضوی است. پس در اینجا با ساختارهای تودرتو مواجهیم. اگر اسم ساختار اصلی را با strec نمایش دهیم، به هرکدام از اعضای آن میتوان بهترتیب با strec.grade , strec.name , strec.st-no رجوع کرد. همچنین به عناصر یا اعضای name میتوان با strec.name.l-name , strec.name.f-name رجوع کرد. ملاحظه میکنید که برای دستیابی به اعضای درونی ساختار، با اپراتور نقطه به صورت تکراری یا تودرتو مواجهیم. اگر اسم ساختار اصلی را با strec نمایش دهیم به هرکدام از اعضای آن میتوان بهترتیب با strec.st-no , strec.name , strec.grade رجوع کرد. همچنین به عناصر یا اعضای name میتوان با strec.name.l-name , strec.name.f-name رجوع کرد. ملاحظه میکنید که برای دستیابی به اعضای درونی ساختار، اپراتور نقطه بهصورت تکراری یا تودرتو به کار رفته است.
برنامه مورد نظر به صورت زیر است.
# include <stdio.h>
main ()
{ struct rec
{
int st-no ;
struct name ;
{
char l-name[15] ;
char f-name[15] ;
} name1 ;
float grade ;
} ;
int i , j , n , s-n ;
struct rec strec[25] , temp ;
printf(“enter the number of students \n”) ;
scanf (“%d” , &n) ;
printf (“\n\n enter your data: \n”) ;
for (i=0 ; i<n ; + + i)
{
scanf (“%d” , &strec[i]. st-no) ;
scanf (“%s %s” , strec[i].name.l-name , strec[i].name.f-name) ;
scanf (“%f” , &strec[i].grade) ;
}
printf(“display the records of students”) ;
for (i=0 ; i<n ; + + i)
printf(“\n %d %s %s %f” , strec[i].st-no ,
strec[i].name.l-name , strec[i].name.f-name , strec[i].grade) ;
printf (“\n enter a student number for search”) ;
scanf (“%d” , &s-no) ;
printf (“\n search through list for indicated student”) ;
for (i=0 ; i<n ; + + i)
if (s-no = = strec [i].st-no)
break ;
if (i < n)
printf (“\n %s %s %f” , strec[i].name.l-name ,strec.name.f-name , strec[i].grade) ;
else
printf(“\n sort the student records in ascending order);
printf (“\n sort the student records in ascending order with respect to the student number”) ;
for (i=0 ; i<n ; + +i)
for (j=i+1 ; j<n ; + + j)
if (strec[i]. st-no>strec[i]. st-no)
{
temp = strec[i] ;
strec[i] = strec[j] ;
strec[j] = temp ;
}
printf (“\n display the sorted records of students”) ;
for (i=0 ; i<n ; + + i)
printf (“\n %d %s %s %f” , strec[i].st-no ,
strec[i].name.l-name , strec[i].name.f-name , strec[i].grade) ;
}