( تعداد نمایش : 2015 )

ساختارهای تکرار – آموزش سی قسمت یازدهم

ساختارهای تکرار ، تحت شرایط خاصی امکان اجرای مکرر دستور یا مجموعه ای از
دستورات را فراهم میکنند. این ساختارها در زبان های برنامه سازی مختلف به اشکال
متفاوتی وجود دارند که ذیلا” انواع مختلف این ساختارها در زبان C ، مورد بررسی
قرار می گیرد .

ساختار تکرار for
ساختار for یکی ازامکانات ایجاد حلقه تکرار میباشد که بصورتهای زیر استفاده
می شود :
(َ۱) ;دستور(گام حرکت ;شرط حلقه ;مقدار اولیه اندیس حلقه ) for
(َ۲) (گام حرکت ;شرط حلقه ;مقدار اولیه اندیس حلقه ) for {

مجموعه دستورات }
for(;;( )3)
{

مجموعه دستورات }

نکاتی که باید در مورد نحوه کاربرد ساختار تکرار for در نظر داشت عبارتند
از : ۱
دستوری که بعد از ساختار for آمده است می تواند در خط دیگری تایپ شود . ۲
ساختار forبه ; ختم نمی شود . زیرا در غیر این صوتر مجموعه دستوراتی که
اجرای آنها باید تکرار شود ، فقط یک بار اجرا خواهند شد . ۳
علامت { در نحوه کاربرد دوم و سوم ، می توانند در همان خطی که ساختار for
آمده است قرار گیرند . ۴
بعد از اولین مقدار اندیس حلقه و شرط حلقه ; قرار می گیرد .
ساختار for در مواردی مفید است که تعداد دفعات تکرار مجموعه ای از دستورات
معلوم باشد ، هر حلقه تکرار دارای یک شمارنده است که تعداد دفعات تکرار اجرای
دستورات داخل حلقه را مشخص می کند. این شمارنده ، اندیس حلقه نامگذاری می شود.
اندیس حلقه می تواند مثبت ، منفی ، صحیح و یا اعشاری باشد . مقدار اولیه اندیس
حلقه مشخص می کند که شمارنده ، از چه مقداری شروع می شود. شرط حلقه مشخص میکند
که مجموعه دستورات داخل حلقه تکرار ، تحت چه شرایطی اجرا می شوند . گام حرکت
مشخص می کند که در هر بار اجرای مجموعه دستورات داخل تکرار ، چه مقداری به
شمارنده حلقه اضافه می شود . گام حرکت می تواند مثبت منفی ، صحیح و یا اعشاری
باشد . بعنوان مثال در دستور : for( i=0;i<5;i++)
printf(“\n the value of i is:%d / i);
i
اندیس حلقه تکرار است که مقدار اولیه آن برابر با صفر است . شرط حلقه
تکرار این است که i کوچکتر از ۵ باشد و گام حرکت نیز ۱ است که با i++ مشخص شده
است . خروجی حاصل از اجرای این دستور بصورت زیر است : ۰
۱
۲
۳
۴

مثال ۱: برنامه ای که تعداد ۱۰ عدد را از ورودی خوانده ، میانگین آنها را
محاسبه کرده و به خروجی می برد : 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);
}

خروجی حاصل از اجرای برنامه مثال ۱ : 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

مثال ۲: برنامه زیر جدول کدهای اسکی را در خروجی چاپ می کند : main)(
{
int i ;
for(i=41 ; i<=120 ; i++)
{
printf(“%3d=%c\t”/i/i );
if(i%5==0 )printf(“\n” );
}
}

برنامه فوق با چند دستور ساده توانسته است جدول زیر را در خروجی چاپ کند . ۴۱= )۴۲=* ۴۳=+ ۴۴=/ ۴۵=-
۴۶= .۴۷=/ ۴۸=۰ ۴۹=۱ ۵۰=۲
۵۱=۳ ۵۲=۴ ۵۳=۵ ۵۴=۶ ۵۵=۷
۵۶=۸ ۵۷=۹ ۵۸= :۵۹=; ۶۰=<
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

اگر بخواهیم این برنامه را در زبانهای دیگر بنویسیم ، برنامه طولانی تری به
دست می آید .

مثال ۳: برنامه ای که جدول ضرب اعداد از ۱ تا ۱۰ را درصفحه نمایش چاپ میکند. main)(
{
int i/j ;
for(i=1 ; i<=10 ; i++)
{
for(j=1 ; j<=10 ; j++)
printf(“%3d “/i*j );
printf(“\n” );
}
}

خروجی حاصل از برنامه فوق : ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
۲ ۴ ۶ ۸ ۱۰ ۱۲ ۱۴ ۱۶ ۱۸ ۲۰
۳ ۶ ۹ ۱۲ ۱۵ ۱۸ ۲۱ ۲۴ ۲۷ ۳۰
۴ ۸ ۱۲ ۱۶ ۲۰ ۲۴ ۲۸ ۳۲ ۳۶ ۴۰
۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰
۶ ۱۲ ۱۸ ۲۴ ۳۰ ۳۶ ۴۲ ۴۸ ۵۴ ۶۰
۷ ۱۴ ۲۱ ۲۸ ۳۵ ۴۲ ۴۹ ۵۶ ۶۳ ۷۰
۸ ۱۶ ۲۴ ۳۲ ۴۰ ۴۸ ۵۶ ۶۴ ۷۲ ۸۰
۹ ۱۸ ۲۷ ۳۶ ۴۵ ۵۴ ۶۳ ۷۲ ۸۱ ۹۰
۱۰ ۲۰ ۳۰ ۴۰ ۵۰ ۶۰ ۷۰ ۸۰ ۹۰ ۱۰۰

مثال ۴: برنامه ای که تعداد حروف یک جمله را شمارش می کند ( انتهای جمله با
نقطه مشخص شده است ) . در این برنامه از دستور # include استفاده شده است . #include “stdio.h”
main)(
{
char ch ;
int count ;
for(count=0;(ch=getchar))(!=’.’
; count++ );
printf(“\n length of statement”);
printf(” is:%d”/count );
}

به نمونه ای از خروجی برنامه مثال ۴ توجه نمایید : i like C very much.
length of statement is:18

از نحوه کاربرد سوم for برای ساخت حلقه های تکرار بینهایت استفاده می شود .

ساختار تکرار while while
( یکی از ساختارهای تکرار در زمان C ) در مواقعی مورد استفاده قرار
می گیرد که تعداد دفعات تکرار مجموعه دستورات مورد نظر مشخص نباشد .
ساختار while بصورت های زیر استفاده می شود : ;
دستور (شرط) while(1(
(شرط) while(2( {

مجموعه ای از دستورات }

وقتی که کنترل اجرای برنامه به ساختار while رسید ، شرطی که در آن ذکر شده
است تست می شود . اگر این شرط دارای ارزش منطقی ” درست ” باشد ، دستور یا
دستورات داخل حلقه تکرار اجرا میشوند واجرای این دستورات تا برقراری شرط مذکور
ادامه می یابد. لذا باید توجه داشت که در داخل بدنه حلقه تکرار ، شرط حلقه نقض
شود ، وگرنه دستورات داخل حلقه ، بینهایت بار اجرا خواهند شد .

مثال ۵: برنامه ای که یک جمله رااز ورودی خوانده و تعداد کاراکترهای آن جمله
را شمارش می کند ( انتهای جمله به کلید 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 می توانیم بجای
شرط از یک (۱) به معنی ارزش درستی ، استفاده کنیم .

مثال ۶: برنامه ای که تعداد نامحدودی عدد رااز ورودی خوانده و فاکتوریل آنها
را محاسبه می کند :
جهت ختم اجرای برنامه باید از 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 );
}
}

به نمونه ای از خروجی برنامه مثال ۶ توجه نمایید : type number: 5
factorial is: 120

type number: 4
factorial is: 24
type number: 6
factorial is: 720

type number: ^c

همانطور که قبلا” گفته شد برای ساختن حلقه تکرار بینهایت از ساختار for کافی
است که این ساختار را بصورت (;;)for بکار ببریم ( مثال ۷ ) .

مثال ۷: مساله محاسبه فاکتوریل ( مثال ۶ ) با استفاده از حلقه 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 رسید مجموعه دستورات داخل حلقه تکرار
اجرا می شوند و سپس شرط ذکر شده در این ساختار تست می گردد . چنانچه این شرط
برقرار باشد مجموعه دستورات داخل حلقه تکرار مجددا” اجرا می شود ، وگرنه کنترل
اجرای برنامه از حلقه تکرار خارج می گردد .

مثال ۸: برنامه ای که عددی را از ورودی خوانده و سپس آنرا بصورت معکوس در
خروجی چاپ می کند .
مثلا” عدد ۲۱۵۳ را بصورت ۳۵۱۲ چاپ می نماید . main)(
{
int number / digit ;
printf(“enter a number: ” );
scanf(“%d/&number );
do {
digit=number%10 ;
printf(“%d/digit );
number/=10 ;
}while(number!=0 );
}

نمونه ای از خروجی حاصل از اجرای برنامه مثال ۸ : enter a number:2153
3512

ساخت حلقه های تکرار بینهایت با استفاده از ساختار do نیز امکان پذیر است . استفاده گردد .

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن