ساختارهاي تكرار
ساختارهاي تكرار ، تحت شرايط خاصي امكان اجراي مكرر دستور يا مجموعه اي از
دستورات را فراهم ميكنند. اين ساختارها در زبان هاي برنامه سازي مختلف به اشكال
متفاوتي وجود دارند كه ذيلا" انواع مختلف اين ساختارها در زبان C ، مورد بررسي
قرار مي گيرد .
ساختار تكرار for
ساختار for يكي ازامكانات ايجاد حلقه تكرار ميباشد كه بصورتهاي زير استفاده
مي شود :
(َ1) ;دستور(گام حركت ;شرط حلقه ;مقدار اوليه انديس حلقه ) for
(َ2) (گام حركت ;شرط حلقه ;مقدار اوليه انديس حلقه ) for {
مجموعه دستورات }
for(;;( )3)
{
مجموعه دستورات }
نكاتي كه بايد در مورد نحوه كاربرد ساختار تكرار for در نظر داشت عبارتند
از : 1
دستوري كه بعد از ساختار for آمده است مي تواند در خط ديگري تايپ شود . 2
ساختار forبه ; ختم نمي شود . زيرا در غير اين صوتر مجموعه دستوراتي كه
اجراي آنها بايد تكرار شود ، فقط يك بار اجرا خواهند شد . 3
علامت { در نحوه كاربرد دوم و سوم ، مي توانند در همان خطي كه ساختار for
آمده است قرار گيرند . 4
بعد از اولين مقدار انديس حلقه و شرط حلقه ; قرار مي گيرد .
ساختار for در مواردي مفيد است كه تعداد دفعات تكرار مجموعه اي از دستورات
معلوم باشد ، هر حلقه تكرار داراي يك شمارنده است كه تعداد دفعات تكرار اجراي
دستورات داخل حلقه را مشخص مي كند. اين شمارنده ، انديس حلقه نامگذاري مي شود.
انديس حلقه مي تواند مثبت ، منفي ، صحيح و يا اعشاري باشد . مقدار اوليه انديس
حلقه مشخص مي كند كه شمارنده ، از چه مقداري شروع مي شود. شرط حلقه مشخص ميكند
كه مجموعه دستورات داخل حلقه تكرار ، تحت چه شرايطي اجرا مي شوند . گام حركت
مشخص مي كند كه در هر بار اجراي مجموعه دستورات داخل تكرار ، چه مقداري به
شمارنده حلقه اضافه مي شود . گام حركت مي تواند مثبت منفي ، صحيح و يا اعشاري
باشد . بعنوان مثال در دستور : for( i=0;i<5;i++)
printf("\n the value of i is:%d / i);
i
انديس حلقه تكرار است كه مقدار اوليه آن برابر با صفر است . شرط حلقه
تكرار اين است كه i كوچكتر از 5 باشد و گام حركت نيز 1 است كه با i++ مشخص شده
است . خروجي حاصل از اجراي اين دستور بصورت زير است : 0
1
2
3
4
مثال 1: برنامه اي كه تعداد 10 عدد را از ورودي خوانده ، ميانگين آنها را
محاسبه كرده و به خروجي مي برد : main)(
{
int i / sum=0 / num ;
float ave ;
for(i=1 ; i<=10 ; i++)
{
printf("enter number %d: "/i );
scanf("%d"/&num );
sum+=num ;
printf("\n" );
}
ave-sum/10 ;
printf("\n the average is:%f "/ave);
}
خروجي حاصل از اجراي برنامه مثال 1 : enter number 1 : 12
enter number 2 : 13
enter number 3 : 17
enter number 4 : 18
enter number 5 : 16
enter number 6 : 20
enter number 7 : 23
enter number 8 : 28
enter number 9 : 31
enter number 10 : 14
the average is:19.000000
مثال 2: برنامه زير جدول كدهاي اسكي را در خروجي چاپ مي كند : main)(
{
int i ;
for(i=41 ; i<=120 ; i++)
{
printf("%3d=%c\t"/i/i );
if(i%5==0 )printf("\n" );
}
}
برنامه فوق با چند دستور ساده توانسته است جدول زير را در خروجي چاپ كند . 41= )42=* 43=+ 44=/ 45=-
46= .47=/ 48=0 49=1 50=2
51=3 52=4 53=5 54=6 55=7
56=8 57=9 58= :59=; 60=<
61== 62=> 63=? 64=@ 65=A
66=B 67=C 68=D 69=E 70=F
71=G 72=H 73=I 74=J 75=K
76=L 77=M 78=N 79=O 80=P
81=Q 82=R 83=S 84=T 85=U
86=V 87=W 88=X 89=Y 90=Z
91=[ 92=\ 93=] 94=^ 95=_
96=` 97=a 98=b 99=c 100=d
101=e 102=f 103=g 104=h 105=i
106=j 107=k 108=l 109=m 110=n
111=o 112=p 113=q 114=r 115=s
116=t 117=u 118=v 119=w 120=x
اگر بخواهيم اين برنامه را در زبانهاي ديگر بنويسيم ، برنامه طولاني تري به
دست مي آيد .
مثال 3: برنامه اي كه جدول ضرب اعداد از 1 تا 10 را درصفحه نمايش چاپ ميكند. main)(
{
int i/j ;
for(i=1 ; i<=10 ; i++)
{
for(j=1 ; j<=10 ; j++)
printf("%3d "/i*j );
printf("\n" );
}
}
خروجي حاصل از برنامه فوق : 1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
مثال 4: برنامه اي كه تعداد حروف يك جمله را شمارش مي كند ( انتهاي جمله با
نقطه مشخص شده است ) . در اين برنامه از دستور # include استفاده شده است . #include "stdio.h"
main)(
{
char ch ;
int count ;
for(count=0;(ch=getchar))(!='.'
; count++ );
printf("\n length of statement");
printf(" is:%d"/count );
}
به نمونه اي از خروجي برنامه مثال 4 توجه نماييد : i like C very much.
length of statement is:18
از نحوه كاربرد سوم for براي ساخت حلقه هاي تكرار بينهايت استفاده مي شود .
ساختار تكرار while while
( يكي از ساختارهاي تكرار در زمان C ) در مواقعي مورد استفاده قرار
مي گيرد كه تعداد دفعات تكرار مجموعه دستورات مورد نظر مشخص نباشد .
ساختار while بصورت هاي زير استفاده مي شود : ;
دستور (شرط) while(1(
(شرط) while(2( {
مجموعه اي از دستورات }
وقتي كه كنترل اجراي برنامه به ساختار while رسيد ، شرطي كه در آن ذكر شده
است تست مي شود . اگر اين شرط داراي ارزش منطقي " درست " باشد ، دستور يا
دستورات داخل حلقه تكرار اجرا ميشوند واجراي اين دستورات تا برقراري شرط مذكور
ادامه مي يابد. لذا بايد توجه داشت كه در داخل بدنه حلقه تكرار ، شرط حلقه نقض
شود ، وگرنه دستورات داخل حلقه ، بينهايت بار اجرا خواهند شد .
مثال 5: برنامه اي كه يك جمله رااز ورودي خوانده و تعداد كاراكترهاي آن جمله
را شمارش مي كند ( انتهاي جمله به كليد enter ختم مي شود ) . main)(
{
int count=0 ;
printf("type a statement and ENTER");
printf(" to end.");
while(getche )(!='\r')
count ++ ;
printf("\n length of statement is:");
printf("%d/count );
}
حلقه هاي تكرار بينهايت
با استفاده از ساختارهاي تكرار forو whileو مي توانيم حلقه هاي تكراري درست
كنيم كه جهت ختم آنها بايد از كليد CTL+BREAK استفاده كرد . به اين حلقه هاي
حلقه هاي بينهايت گفته مي شود . براي ساختن حلقه تكرار از while مي توانيم بجاي
شرط از يك (1) به معني ارزش درستي ، استفاده كنيم .
مثال 6: برنامه اي كه تعداد نامحدودي عدد رااز ورودي خوانده و فاكتوريل آنها
را محاسبه مي كند :
جهت ختم اجراي برنامه بايد از CTL+BREAK استفاده نمود . main)(
{
long int answer ;
int number ;
while(1)
{
printf("\n type number: " );
scanf("%d/&number );
answer=1 ;
while(number>1)
answer*=number --;
printf("\n factorial is: " );
printf("%1d\n"/answer );
}
}
به نمونه اي از خروجي برنامه مثال 6 توجه نماييد : type number: 5
factorial is: 120
type number: 4
factorial is: 24
type number: 6
factorial is: 720
type number: ^c
همانطور كه قبلا" گفته شد براي ساختن حلقه تكرار بينهايت از ساختار for كافي
است كه اين ساختار را بصورت (;for بكار ببريم ( مثال 7 ) .
مثال 7: مساله محاسبه فاكتوريل ( مثال 6 ) با استفاده از حلقه for : main)(
{
long int answer ;
int number ;
for(;
{
printf("\n type number: " );
scanf("%d/&number );
answer=1 ;
while(number>1)
answer*=number --;
printf("\n factorial is: " );
printf("%1d\n"/answer );
}
}
ساختار تكرار do
ساختار تكرار do مشابه ساختار تكرار while است . با اين تفاوت كه در ساختار while
شرط حلقه در ابتداي حلقه تست ميشود ولي در ساختار do شرط حلقه در انتهاي
حلقه تكرار تست خواهد شد. لذا در ساختار do مجموعه دستورات داخل ساختار، حداقل
يكبار انجام مي شوند . اين ساختار بصورت زير استفاده مي شود : do
{
;
مجموعه دستورات ;
(شرط) } wwhile
وقتي كنترل اجراي برنامه به ساختار do رسيد مجموعه دستورات داخل حلقه تكرار
اجرا مي شوند و سپس شرط ذكر شده در اين ساختار تست مي گردد . چنانچه اين شرط
برقرار باشد مجموعه دستورات داخل حلقه تكرار مجددا" اجرا مي شود ، وگرنه كنترل
اجراي برنامه از حلقه تكرار خارج مي گردد .
مثال 8: برنامه اي كه عددي را از ورودي خوانده و سپس آنرا بصورت معكوس در
خروجي چاپ مي كند .
مثلا" عدد 2153 را بصورت 3512 چاپ مي نمايد . main)(
{
int number / digit ;
printf("enter a number: " );
scanf("%d/&number );
do {
digit=number%10 ;
printf("%d/digit );
number/=10 ;
}while(number!=0 );
}
نمونه اي از خروجي حاصل از اجراي برنامه مثال 8 : enter a number:2153
3512
ساخت حلقه هاي تكرار بينهايت با استفاده از ساختار do نيز امكان پذير است . استفاده گردد .