1
آرایه ها یا رشته ها Arrays
ارایه ها برای کمیتهایی مورد استفاده قرار می گیرند که قرار است بر روی انها عملیات یکسانی انجام گیرد
اینگونه کمیتها معمولاً به صورت متغیرهای اندیس دار نشان داده می شوند
در زبان های برنامه نویسی جهت انجام عملیات مختلف بر روی چنین متغیرهایی تسهیلاتی خاص در نظر گرفته شده است
2
تعریف رشته Array
عبارتست از مجموعه ای از اطلاعات (Data) به صورت اسکالر که همگی از یک نوع باشند بطوریکه کلیه اعضای آن با یک الگوی منظم به ترتیب چیده شده باشند
هر آرایه با یک اسم مشخص می گردد
یک بعدی (سطری یا ستونی) در ریاضی به آن Vector می گویند
دو بعدی ( دسته ای از کمیتها که عناصر آن به صورت سطر و ستون مرتب می شوند و به آن ماتریس Matrix می گویند)
چند بعدی (با مرتبه های بالاتر)
3
مزایای استفاده از آرایه
اعلان ساده تر (اعلان یک متغییر بجای ده ها و هزاران)
سادگی کار با آنها ( عملیات ریاضی یکسانی بر روی آنها انجام می گیرد)
انعطاف پذیری بیشتر (به روشهای مختلف می توان آنها را پردازش نمود)
سهولت فهم برنامه
کاهش اندازه برنامه نوشته شده
4
مثال آرایه یک بعدی :
نمرات درسی دانشجویان با نام Grade:
88, 84, 93, 25, 47, 62, 95, 38, 82, 58
هر عنصر با یک اندیس Index مشخص می شود که نشان دهنده محل عنصر در آرایه است:
Grade1=88 Grade6=62
5
مثال آرایه دو بعدی:
تعداد کالاهای فروخته شده در شرکتی در شهرهای مختلف را به صورت یک ارایه دو بعدی با نام Sold_items نشان می دهیم:
6
ادامه….
هر عنصر با اندیسی دو رقمی نشان داده می شود Sold_itemsi,j
رقم اول (i) شماره ردیف و رقم دوم (j) شماره ستون محل هر عنصر است
Sold_items1,2=800 Sold_items4,3=1300
اندازه ارایه حاصل ضرب ارقام حداکثر اندیس است
7
کاربرد آرایه ها در مهندسی
جریان یک سیال نسبت به زمان مثل Flow(I) و Time(I) و یا هر فرایند مشابه دیگر
رسم نمودار (گرافیک) هر مقدار (به صورت عدد و یاکاراکتر) می تواند در مختصاتی مثل i و j ذخیره گردد
ایجاد پایگاه های اطلاعاتی (database Management) مثل لیست کارکنان، نتیجه ارزشیابی و غیره
عملیات ماتریسی مثل جمع، تفریق و ضرب ماتریس ها
باید تعداد ستون های اولی با تعداد ردیفهای دومی برابر بوده انگاه نتیجه دارای تعداد ردیف اولی و تعداد ستون دومی خواهد بود
8
انواع آرایه در فرترن
آرایه استاتیکی (Static Arrays) :
اندازه آن در زمان اعلان و در طول برنامه ثابت است
در زمان اعلان اندازه Dimension آن باید به گونه ای تعیین شود که تمام اطلاعات در ان جا داده شود
آرایه های نیمه دینامیکی (Semi- Dynamic Arrays) :
این نوع ارایه ها پس از اینکه وارد یک ساب روتین می شوند اندازه آنها متناسب با نیاز آن ساب روتین است. به این نوع ارایه، ارایه اتوماتیک در فرترن گفته می شود
آرایه های دینامیکی (Dynamic Arrays) :
اندازه آنها در طی اجرای برنامه ممکن است بر حسب نیاز تغییر کند.
سبب انعطاف پذیری برنامه می شوند
سبب افزایش زمان اجرای برنامه می گردند
به آنها Allocatable Arrays هم گفته می شود
9
خصوصیات آرایه ها
قیود آرایه درهربعد (Bounds):
حد بالا Lower و حد پایین Upper
اندازه بعد ارایه ( (Extent: تعداد المان در هر بعد
شکل ارایه (Shape) : مشخص کننده نوع (مرتبه) و اندازه ارایه است مثال: [8] و [2,4] به ترتیب ارایه یک بعدی با 8 عضو و ارایه دو بعدی با دو سطر و 4 ستون (8عضو) را نشان می دهند.
اندازه آرایه (Size) : حاصل ضرب اندازه ابعاد ارایه
مطابقت ((Conformance : به مجموعه ای از ارایه های هم شکل گفته می شود
10
مشخصه های ارایه Specification
هر ارایه با مشخصه های زیر معلوم می گردد
نام آرایه: حداکثر 31 کاراکتر با همان محدودیتهای نام برای متغیر های معمولی
نوع آرایه (Type): منظور Real, Integer, Character, Logical
ابعاد (مرتبهRank) : حداکثر می تواند 7 باشد
11
قیود ابعاد آرایه Lower & Upper bounds for each dimension
لزومی ندارد شماره ابعاد ارایه ها ( حد پایین) از 1 شروع شود
اگر حد پایین مشخص نشود فرترن آن را 1 در نظر می گیرد.
فرم کلی اعلان آرایه:
برای مواقعی که بخواهیم چندین آرایه را با قیود و نوع یکسان اعلان کنیم
TYPE, DIMENSION (bound) :: name
اگر آرایه ها نوع و قیود مختلف داشته باشند
TYPE :: name (bound)
12
مثال
حالت اول:
INTEGER, DIMENSION(6) :: a دارای 6 عضو
REAL, DIMENSION(0:9) :: bدارای 10 عضو
LOGICAL, DIMENSION(2,2) :: yes_no
حالت دوم:
INTEGER :: a(6)
REAL :: b(0:9)
LOGICAL :: yes_no(2,2)
REAL:: zero_band (0:2,0:3)
13
ترکیب دو نوع اعلان در یک برنامه امکان پذیر است
INTEGER, DIMENSION(8) :: x,y
REAL:: alpha(1:3), beta(4:9)
REAL, DIMENSION(0:5,12:45,6) :: data
CHARACTER(len=10) :: names(25(
14
المان های مجزا در آرایه ها Individual Elements
برای دسترسی به یک عنصر مشخص در یک ارایه باید از نام آرایه و از یک یا چند عدد صحیح درداخل پرانتزکه همان اندیس متناظر با محل عنصر است استفاده شود.
فرم کلی:
array (index)
مثال:
REAL, DIMENSION(8) ::a
INTEGER, DIMENSION(5,4) ::b
a(4)المان چهارم
b(4,2) المان واقع در تقاطع ردیف4 و ستون 2
15
مقاطع در ارایه ها Sections
برای نشان دادن مقطع ( محدوده ای) از یک آرایه از دو عدد صحیح در داخل پرانتز که توسط “ : “ از هم جدا شده باشد استفاده می شود.
فرم کلی:
array ([lower]:[upper]:[step](
ِDefault حد پایین و بالا چیزی است که در مرحله اعلان مشخص می گردد
ُStep گام یا نمو است که به صورت Default برابر 1 است
16
مقاطع در ارایه
مثال:
a(3:5)المانهای 3، 4 و 5
a(1:5:2) المانهای 1؛ 3 و 5 ! Step=2
b(1:3, 2:4) المانهای ردیف 1 تا 3 و ستون 2 تا 4
Beta (3,1:7:2) المانهای1 ، 3، 5 و 7 روی سطر سوم
Beta (1,2:11:2) المانهای 2، 4، 6، 8 و 10 روی ردیف اول
استفاده از “ : “ ما را قادر می سازد که به بخشی و یا تمامی المانها در یک ستون و یا سطر دسترسی پیدا کنیم
B (:,4) تمام المانها در ستون 4
برای تعیین مقاطع می توان از عبارات محاسباتی در مود صحیح هم استفاده کرد
Alpha (2*k) 2*k المان موجود در نقطه ای با موقعیت
17
زیر نویس های برداری Vector Subscripts
روشی ساده و کوتاه جهت دسترسی به المانهایی خاص از یک ارایه
زیر نویس های برداری نوعی INTEGER هستند که به صورت زیر بیان می شوند:
/List/
مثال:
REAL, DIMENSION(9) :: a
INTEGER, DIMENSION(3) :: random
random=(/6,3,8/) مقادیر 6، 3و 8 به المان های ارایه
a(random)=0.0 المانهای 6، 3 و 8 از این ارایه به صفر تبدیل می گردد
a((/7,8,9/))=1.2نوعی دیگر از زیرنویس برداری که المانهای 7، 8و 9 برابر 2/1 می گردند
در دستور شماره 3 مقادیر جدید جایگزین مقادیر قبلی ارایه random می شود
random(1)=6و random(2)=3 و random(3)=8
18
نکته مهم در زیرنویس های برداری
باید دقت شود که از دوبله شدن مقادیر در زیر نویس ها جلوگیری شود
REAL, DIMENSION(5) :: a
INTEGER, DIMENSION(3) :: list
list=(/2,3,2/)
a(list)=(/1.1, 1.2, 1.3/) !illegal element 2 set twice
19
تخصیص مقدار به ارایه ها َArray assignment
تخصیص کامل آرایه Whole Array assignment
موقعی که بخواهیم به تمام المان ها مقدار یکسانی اختصاص دهیم.
مواقعی که بخواهیم از آرایه دیگری کپی شود
REAL, DIMENSION(100) :: a, b, c
REAL :: d(10,10) = 0.0
b=2*a+4
a=2.0
c=b*a
c=d ! Illegal statement
دستورات سوم، چهارم و پنجم قابل قبول هستند چون a ، b و c با هم مطابقت دارند. دستور آخر قابل قبول نیست چون دو آرایه هم مرتبه نیستند.
20
در مواقعی که به بخشی از آرایه بخواهیم مقادیری اختصاص دهیم.
REAL, DIMENSION(10) :: alpha, beta
REAL :: gamma(20)
alpha(1:5)=2.0
alpha(1:10:2)=beta(1:5)/6.
alpha(2:10)=alpha(1:9)
gamma(11:20)=beta
در دستور اول مقدار2 به 5 المان اول alpha اختصاص داده شده است
در دستور دوم دو بخش قابل انطباق از دو ارایه مورد نظر است لذا دستور درست است.
alpha(1)=beta(1)/6; alpha(3)=beta(2)/6; alpha(5)=beta(3)/6;
alpha(7)=beta(4)/6; alpha(9)=beta(5)/6
دستور شماره 3 یک عمل قدرتمند است. بدون نیاز به عملیات تکرار Do به طور اتوماتیک جابجا می شوند. بطوریکه در این مثال 9 المان از این آرایه با شروع از دومین المان، مقادیر 9 المان اول را بخود می گیرند .یعنی دو المان اول مقادیر یکسانی خواهند داشت
دستور 4 ویژگی مهم دیگری را نشان می دهد اگر چه دو ارایه با هم قابل انطباق نیستند ولی چون بخشهای مورد نظر انطباق دارند دستور درستی است
تخصیص مقطعی آرایه ها Array Section Assignment
21
مقدار دهی اولیه به آرایه ها
سازند ها (Constructors)
این نوع برای ارایه های یک بعدی مفید است که نیاز است المان ها مقادیر مختلف بگیرند
array = (/ list /)
لیست می تواند شامل موارد زیر باشد:
لیستی از مقادیر مختلف
INTEGER :: a(6)=(/1,2,3,6,7,8/)
لیستی از متغیر های مختلف
REAL::b(2)= (/sin(x), cos(x)/)
بخشی از یک آرایه
INTEGER :: c(5)=(/0,a(1:3),4/)
استفاده از حلقه Do ضمنی Implied DO loop
REAL:: d(100) = (/REAL(i), I=1,100/)
22
تابع تغییر شکل Reshape
جهت مقدار دهی اولیه به آرایه هایی با مرتبه بیشتر از یک
برای مقدار دهی یک آرایه با شکل مشخص از روی المانهای یک آرایه معین
فرم کلی
RESHAPE (list,shape)
List عبارت است از مقادیر یک آرایه به صورت یک بعدی یا یک سازند Constructor که حاوی Data است
Shapeعبارتست از یک آرایه یک بعدی که شامل ابعاد جدید آرایه است
INTEGER, DIMENSION(2,3) :: a
a=RESHAPE((/)i,i=0,5(/),(/2,3/))
با دستور آخر شکل آرایه تغییر می کند
RESHAPE((/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /)) as the value
23
دستور Data
موقعی استفاده می شود که روشهای دیگر خسته کننده باشند
فرم کلی
DATA variable / list / …
مثال:
INTEGER :: a(4), b(2,2), c(10)
DATA a/4,3,2,1/ مقدار هر یک از الما نها را مشخص می کند
DATA a/4*0/ 4 بار مقدار صفر تکرار شده و هر بار به یک المان نسبت داده می شود (با ضرب اشتباه نشود)
DATA b(1,:)/0,0/ ; DATA b(2,:)/1,1/ دو المان ردیف اول صفر و دو ردیف دوم 1 می شود
DATA (c(i),i=1,10,2)/5*1/ ); DATA (c(i),i=2,10,2)/5*2/ (
استفاده از Implied DO به صورتیکه المان های فرد مقدار 1 و المانهای زوج مقدار 2 می گیرند (با ضرب اشتباه نشود)
24
دستور WHERE
موقعی که بخواهیم یک المان یا تعدادی از المانها تحت برآورده شدن شرایطی مقدار خاصی بگیرند
فرم کلی
WHERE (condition) statement
INTEGER :: a(2,3,4)
WHERE(a< 0) a=0
WHERE(a*3>10) a=999
باید Condition به صورت TRUE باشد
25
WHERE (condition)
block1
[ELSEWHERE
block2]
ENDWHERE
مثال
INTEGER :: b(8,8)
WHERE (b<=0)
b=0
ELSEWHERE
b=1/b
ENDWHERE
دستور WHERE(ادامه…. )
26
توابع آماده مربوط به آرایه ها Array Intrinsic Functions
ALL (condition, [DIM])
مشخص می کند که آیا تمام المان ها در امتداد یک بعد شرط ارائه شده در Condition را دارند یا خیر؟ DIM شماره هر بعد است (DIM ستون 2 است)
خروجی این تابع یک اسکالر (مقدار واحد) منطقی است اگر DIM حذف شود. در این حالت اگر اولین المان شرط ارائه شده در Condition را داشته باشد، خروجی تابع .TRUE. است
اگر DIM در آرگومان باشد خروجی آرایه منطقی است
LOGICAL :: test, test2(3), test3(2)
REAL, DIMENSION(3,2) :: a
a = (/5,9,6,10,8,12/)
…
test=All(a>5) !false چون اولین المان ارایه بزرگتر از پنج نیست
test2=All(a>5, DIM=1) !false, true, true بر اساس اولین المان هر ردیف
test3=All(a>5, DIM=2) !false, true بر اساس اولین المان هر ستون
27
SIZE (array, [DIM])
تعداد کل المان های ارایه (اندازه) را می دهد
اگر DIM آورده شود اندازه همان بعد را می دهد (تعداد سطر یا ستون)
REAL, DIMENSION(3,2) :: a
num=Size(a) !num=6
num=Size(a,DIM=1) !num=3
num=Size(a,DIM=2) !num=2
توابع آماده مربوط به آرایه ها Array Intrinsic Functions
28
توابع آماده مربوط به آرایه ها Array Intrinsic Functions
SPREAD (array, DIM, ncopies)
بعد DIM از ارایه داخل ارگومان را به تعداد ncopies تکرار می کند. خروجی ارایه است
REAL, DIMENSION(3) :: a=(/2,3,4/)
REAL, DIMENSION(3,3) :: b
REAL, DIMENSION(3,2) :: c
b=SPREAD(a, DIM=1, NCOPIES=3)
c=SPREAD(a, DIM=2, NCOPIES=2)
29
MAXLOC(array, [DIM], mask])
موقعیت بزرگترین المان از ارایه (یابعدی DIM از آرایه )داخل ارگومان را به عنوان خروجی INTEGER ارائه می کند
اگر mask باشد شرط مورد نظر را نیز در نظر می گیرد
REAL :: a(5); a=(/2,8,5,3,4/)
num = MAXLOC( a ) !num=2
num = MAXLOC( a, MASK=a<5 ) !num=5
num = MAXLOC( a(2:4) ) !num=1
توابع آماده مربوط به آرایه ها Array Intrinsic Functions
30
LBOUND (Array)
UBOUND (Array)
قیود پایین و بالای یک آرایه و یا زیر نویسی از آرایه را به صورت یک INTEGER و یا آرایه
ای INTEGER ارائه می کنند
LOGICAL:: c(0:2,0:2,0:2,0:3)
INTEGER:: numarray(4)
REAL:: a(21:30), b(10)
NUM= LBOUND (a) !num=21
NUM= UBOUND (a) !num=30
NUM= LBOUND (b) !num=1
NUM= UBOUND (b) !num=10
Numarray=LBOUND (c) !numarray=(/0,0,0,0/)
Numarray=UBOUND (c) !numarray=(/2,2,2,3/)
توابع آماده مربوط به آرایه ها Array Intrinsic Functions
31
آرایه ها در زبان C
فرم کلی اعلان ارایه
<type> <variableName> [size];
مثال
Int A[10];
اندیس نشان دهنده دسترسی به المان خاص
مثلاً =8; A[3]
اولین اندیس از صفر شروع میشود A[0] (در فرترن پیش فرض 1 است)
هر نوع عملیاتی که بر روی متغیر های معمولی قابل انجام باشد بر روی المان های ارایه قابل انجام است
32
پردازش ارایه ها از طریق حلقه های تکرار
مثل چاپ، خواندن، مقدار دهی و محاسبات مختلف
مثال:
int i;
for (i=0; i<10; i++)
scanf(“%d”, &a[i]);
33
نکات مهم در ارتباط با آرایه ها در C
اندازه ارایه ها در برنامه ثابت بوده و باید توسط یک مقدار ثابت صحیح بیان شود
int n;
n= 100;
int A[n]; // compiler error
اندیس ارایه از0 شروع می شود که گاهی سبب اشتباه می شود A[0] یعنی عنصر اول ارایه و A[3] یعنی چهارمین آرایه
در C مرز آرایه ها بررسی نمی شود یعنی اگر شماره اندیسی خارج از محدوده تعیین شده باشد خطای کامپایلری بروز نمی کند ولی مسلماً برنامه را دچار خطای منطقی می کند
Int A[10];
A[12]= 20; // not a syntax but a logical error
34
مقدار دهی اولیه ارایه های یک بعدی
مثال int A[3]={5,2,8};
می توان فقط به تعدادی از المان ها مقدار اولیه داد بقیه المان ها بطور خود کار مقدار صفر می گیرند
Int B[10]={5,8} ;
از المان B[2] به بعد صفر خواهد بود
در صورت مقدار دهی اولیه ارایه میتوان تعداد عناصر آن راذکر نکرد
Int C[ ] = {10,15,20} // یعنی ارایه با سه عضو
35
استفاده از متغیر های ثابت جهت تعیین اندازه آرایه
بجای عدد صحیح (ثابت صحیح) می توان از متغیر ثابت استفاده کرد
اول اعلان و مقدار دهی متغیر بعد استفاده برای تعیین اندازه ارایه
باعث خوانایی برنامه می شود
تنها با تغییر مقدار متغیر در برنامه اندازه ارایه تغییر می کند
36
مثال: دانشکده دارای ده رشته با ده کد عددی (1 تا 10) است برنامه ای بنویسید که کد رشته را دریافت و سپس تعداد دانشجویان را چاپ کند
# include <stdio.h>
const int majorno=10; تعیین اندازه متغیر ثابت
void main() {
int count [majorno] // ارایه حاوی شمارنده هر رشته
int code, // کد رشته دانشجو
i,n;
printf(“enter number of students:”);
scanf(“%d”&n); //در یافت تعداد دانشجویان
// حلقه دریافت کد دانشجویان
for (i=0; i<n; i++){
printf(“enter major code:”);
scanf(“%d”, &code);
if (code>=1 && code<=majorno)
count [code-1]++;
}
// حلقه چاپ تعداد دانشجویان هر رشته
for (i=0; i<majorno; i++)
printf(“major code= %d count= %d n “, i+1, count[i];
}
37
برنامه ای بنویسید که واریانس تعدادی عدد اعشاری را محاسبه کند
# include <stdio.h>
const int size=100;
void main() {
float data [size] ; // ارایه نگهداری داده ها
float difference;
float average=0.0, variance=0.0;
int i, n;
printf(“enter n: ”);
scanf(“%d”, &n);
// حلقه دریافت داده ها و محاسبه میانگین آنها
for (i=0; i<n; i++){
printf( “enter number:”);
scanf(“%f”, &data [i]);
average+= data[i];
}
average/=n;
/// حلقه محاسبه واریانس
for (i=0; i<n; i++){
difference= data[i] – average
variance = difference * difference
}
variance/=n;
printf(“variance =%f”, variance);
}
38
آرایه های چند بعدی در C
فرم کلی اعلان
<type> <var-name> [<size 1>] [<size 2>]… [<size n>];
مثال اعلان ارایه دو بعدی int A[5] [8];
ارایه ای با 5 ردیف و 8 ستون
برای دسترسی به هر عنصر باید از اندیس انها استفاده کرد (از صفر)
A[3][1] = 24;
A[2][3]
A[1][6]
0
1
2
3
4
0
1
2
3
4
5
6
7
39
ارایه های چند بعدی
ارایه با ابعاد بالا تر
Int B [3][4][6]; // ستون، سطر عمق
مثال: مقدار در عمق صفر، سطر2 و ستون3 B[0][2][3] = 12;
برای پرداز ش روی تمام عناصر باید به تعداد ابعاد حلقه تکرار متداخل استفاده شود ( برای دو بعدی دو حلقه متداخل)
مثال دریافت مقادیر از کاربر
int i,j;
int a[5][8];
for (i=0; i<5; i++)
for (j<0; j<8; j++) scanf(“%d”, &a[i][j]);
40
مقدار دهی اولیه به ارایه های چند بعدی
استفاده از {} برای کل ارایه و برای هر ردیف
مثال ارایه دو بعدی
Int A[3][4]={{12,5,3,8},{-3,7,-9,2},{4,22,18,6}};
مثال ارایه 3 بعدی
Int A[2][3][4]={{{12,5,3,8},{-3,7,-9,2},{4,22,18,6}},
{{8,1,-3,4},{-2,8,11,21},{7,3,-15,-8}}};
بصورت دو ارایه 3Χ4 در نظر گرفته شده است
مثل ارایه یک بعدی اگر هر ردیف ناقص مقدار دهی شود عناصر بعد صفر می شود
41
مثال
مدیر یک شرکت تولید قطعات یدکی تراکتور می خواهد از مشتریان خود در مورد کیفیت محصولات تولیدی خود نظر سنجی نماید. تعداد محصولات 20 عدد با کد از یک تا 20 و کد اعمال نظر بصورت زیر می باشد
1- عالی؛ 2- متوسط ؛ 3- ضعیف ؛ 4- نخریده ام.
بر نامه ای بنویسید که برای محصولات 20 گانه برای هر یک از محصولات به تفکیک اراء مشتریان چاپ شود
42
#include <stdio.h>
const int productNo=20;
void main(){
int votes[productNo][4]={{0}};
int voteCode;
int i,j,n;
printf(“enter number of customers:”);
scanf(“%d”,&n);
for (i=0; i<n; i++){ // حلقه دریافت اراء مشتریان
printf(“ customer no %d:” i+1);
// حلقه دریافت نظر مشتری برای هر محصول
for (j=0; j<productNo; j++) {
printf(“ enter vote for product no %d:” j+1);
scanf(“%d”,&voteCode);
if(voteCode>=1 && voteCode<=4) votes [j][voteCode-1]++;
}
}
// حلقه چاپ ارای مشتریان
for (i=0; i<productNo; i++) {
printf (product no %d:”, i+1);
printf( “ecllent=%d intermediate= %d bad= %d no purchase=%dn”,
votes{i][0], votes{i][1], votes{i][2], votes{i][3]);
{
{
43
ارایه های نویسه ای در C
برای این کار از یک آرایه دو بعدی استفاده می کنیم
مثال:
char nameList [5][10]={“ali”, “reza”,”ahmad”,”babak”,”hamid”};
یعنی ارایه ای 5 عضوی هر کدام با 10 کاراکتر
شماره عضو ها از صفر شروع می شود
nameList[0]مقدار ali را بخود گرفته است
دسترسی به اعضا از طریق دو اندیس
nameList[0][0] برابر ‘a’ است
برای کل رشته هم باید از اندیس اول استفاده نمود.
nameList[4] مقدار “hamid” را در خود جای داده است
می توان از روش فوق برای ارگومان توابع هم استفاده نمود
Gets (nameList[2])
دستور فوق مقدار سومین رشته را از کاربر دریافت می کند
44
مثال: برنامه ای بنویسید که شماره دانشجویی، نام و معدل تعدادی دانشجو را دریافت و با دریافت شماره دانشجویی هر فرد اطلاعات او را جستجو و در صورت پیدا شدن چاپ نماید برنامه با شماره دانشجویی صفر خاتمه می یابد
# include<stdio.h>
Const int maxStudent=100; // حداکثر تعداد دانشجو
Const int maxNameLen=20; // حداکثر طول نام هر دانشجو
Void main () {
Long int idList[maxStudent]; //ارایه حاوی شماره دانشجویی
Float averageList[maxStudent]; // ارایه حاوی معدل دانشجویان
Char nameList[maxStudent][maxNameLen]; // ارایه حاوی نام دانشجویان
Long int searchId;
Int i,n;
Printf(“please enter number of students:’);
Scanf(“%d”,&n);
// در یافت اطلاعات دانشجویان
For (i=0; I<n; i++) {
printf(“student #%d:n”,i+1);
printf(“enter id:”);
scanf(“%ld”, &idlist[i]);
printf(“enter name:”);
scanf(“%s”, nameList[i]; /// gets (nameList[i]) مشابه هم
printf(“enter average:”);
scanf(“%f”, &averageList[i]);
}
45
// حلقه جستجوی دانشجو
While (1) { // حلقه ای بدون انتها
Prinf(“enter student id (0 to exit):”);
Scanf(“%ld”, &searchId);
If (!searchId)break;
For (i=0; i<n; i++)
if (idList[i]==searchId) break;
If(i<n) {
printf(“student specification:n);
printf( “id=%ld name= %s average =%fn”, idList[i], nameList[i], averageList[i]);
}
else printf (“student not found”);
}
}