چگونه از حلقه های تکرار در زبان C استفاده کنیم

در حالت عادی دستورات برنامه از اولین دستور به آخرین دستور اجرا می‌شود اگر بخواهیم بعضی از دستورات چندین بار اجرا شوند و بعضی تحت شرایط خاص اجرا شده و بعضی دیگر اجرا نشوند ساختارهای تکرار و تصمیم استفاده می کنیم. حلقه های تکرار، برای تکرار اجرای دستورات مورد استفاده قرار میگیرد. حلقه های تکرار تحت شرایط خاصی یک یا چند دستور را چندین بار اجرا می کند. به عنوان مثال اگر بخواهیم تعداد ۱۰۰ عدد را از ورودی بخوانیم و آنها را باهم جمع کنیم، باید عمل خواندن عدد را ۱۰۰ بار تکرار کنیم. ساختارهای تکرار در زبان های برنامه سازی مختلف به شکل های گوناگون مورد استفاده قرار می‌گیرد، که در این بخش، حلقه های تکرار  در زبان C را مورد بررسی قرار می‌دهیم.

حلقه های تکرار در زبان C

اصولا حلقه های تکرار در زبان C  را میتوان به دو دسته تقسیم کرد:

  • حلقه تکرار For  : در این حلقه ها تعداد تکرار دستورات داخل حلقه از قبل برای ما مشخص است.
  •  حلقه تکرار While : تعداد تکرار دستورات داخل حلقه برای ما مشخص نیست. تا زمانی که شرط حلقه نقض نگردد، دستورات داخل حلقه ادامه دارند.

حلقه تکرار For ۱- حلقه تکرار For 

ساختار تکرار FOR یکی از امکانات ایجاد حلقه است و معمولاً در حالتی که تعداد دفعات تکرار حلقه، از قبل مشخص باشد به کار می رود. در این ساختار متغیر ی وجود دارد که تعداد دفعات تکرار حلقه را کنترل می‌کند این متغیر را شمارنده یا اندیس حلقه تکرار می گوییم.
اندیس حلقه دارای یک مقدار اولیه  می باشد، و در هر بار اجرای دستورات حلقه، مقداری به آن اضافه می شود این مقدار را که پس از هر بار اجرای حلقه، به شمارنده اضافه می شود گام حرکت گفته می شود.

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

  • تنظیم
  • شرط خروج برای اینکه حلقه کی تمام شود.
  • بخشی که تکرار می شود که دستوراتی که باید تکرار شوند، هستند.

حلقه تکرار For زمانی از حلقه for استفاده می کنیم که تعداد دفعات تکرار حلقه رو از قبل بدانیم و شکل کلی این ساحتار به صورت زیر هست که مشاهده می کنید :

for( مقدار اولیه شمارنده ; شرط حلقه  ; گام حرکت شمارنده ) {

دستور اول ;
دستور دوم ;
.
.
.
.
امn دستور ;
}

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

۱-۱- نکات حلقه for در c :

  •  شمارنده حلقه میتواند از هر نوعی باشد.
  • حلقه for تازمانی اجرا میشود که شرط حلقه برقرار باشد.
  •  اگر در جلوی for سیمیکلون یا ; بگذاریم این دستور تا موقعی که شرط حلقه برقرار باشد اجرا میشود، و پـس از نقض شرط حلقه از حلقه خارج شده و دستورات بعد از اون اجرا میشوند.
  • اگر بعد از for یک دستور داشته باشیم نیازی به کلوشه { } نداریم.
  • ( ; ; )for برای ایجاد حلقه بی نهایت مورد استفاده قرار میگیرد. حلقه بی نهایت فاقد شرط پایان است پس هیچ وقت متوقف نخواهد شد. در چنین مواقعی توقف اجرای برنامه از کلید هایBreak + Ctrl مورد استفاده قرار می گیرند.

for (int i=0;i<3;i++ )
printf("%i",i);
printf("ok");

در این مثال چون {} نداریم پس فقط دستور اول بعد از for مربوط به حلقه و لوپ ما میشود.

پس خروجی ۰ تا ۲ را شمارش کرده و چاپ میکند، هر موقع از حلقه خارج شد به دستور پرینت ok خواهد رسید و و آنرا نیز چاپ خواهد کرد.
خروجی کد بالا:

0 1 2 ok

#include <stdio.h>
 
int main () {

   int a;
	
   /* for loop execution */
   for( a = 10; a < 20; a = a + 1 ){
      printf("value of a: %d\n", a);
   }
 
   return 0;
}

خروجی: اعداد ۱۰ تا کوچکتر از ۲۰ را شمارش می کند.
خروجی کد بالا:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

۱-۲- حلقه های تکرار تودرتو:

اگر حلقه تکراری داخل حلقه تکرار دیگری قرار بگیرد اصطلاحا، حلقه های تودرتو گفته می شود. قانونی که بر حلقه های تکرار تو در تو حاکم است این است که، به ازای هر بار اجرای حلقه تکرار خارجی، حلقه تکرار داخلی به طور کامل اجرا می شود. ضمناً، انتهای حلقه تکرار داخلی، زودتر از حلقه تکرار خارجی مشخص میشود
مثلا در دستور زیر حلقه تکرار با اندیس i حلقه خارجی است و حلقه تکرار با اندیس j حلقه تکرار داخلی می باشد.

for (i=0; i>5: i++){
.....
for (j=0; j>6: j++){
...
}
...
}

 اگر حلقه های تکرار تو در تو، از یک جا شروع و به یک جا ختم شوند حلقه خارجی نیاز به آکولاد ندارد. به مثال زیر توجه کنید:

for (i=0; i>5: i++)
for (j=0; j>6: j++){
...
}

۱-۳– عملگر کاما , :

عملگر کاما انعطاف پذیری بیشتری به حلقه ی for می بخشد.با استفاده از این عملگر می توان در قسمت های مقدار اولیه و گام حرکت , دو یا چند عبارت را با هم ترکیب کرد.مثال:

for(i=0 , m+=i ; i<10 ; i++ , m++){

...

}

در این حلقه تکرار اولین کاما، دو متغییر i و m را مقدار اولیه می دهد و دومین کاما، در هر تکرار، یک واحد به i و یک واحد به m اضافه می‌کند.

 
حلقه تکرار While ۲- حلقه تکرار While
ساختار تکرار while یکی دیگر از امکاناتی که برای تکرار اجرای دستورات به کار می رود. ساختار تکرار while به صورت زیر قابل استفاده می باشد:

حلقه while  در c

while(شرط یا شروط)
{
;مجموعه دستورات
}

در مواردی که در ابتدای کار تعداد تکرار های دستورالعمل ها مشخص نمی باشد معمولا از این ساختار استفاده می شود. این ساختار به روش فوق مورد استفاده قرار می گیرد. در صورتی که دستورات تکرار شونده فقط یکی باشد نیازی به و نمی باشد.هنگام اجرای این دستور , اگر شرط حلقه ارزش درستی داشته باشد دستورات حلقه اجرا میشوند وگرنه کنترل برنامه از حلقه خارج می شود.برای اینکه حلقه خاتمه یابد , شرط حلقه باید داخل حلقه نقض شود.یعنی باید شرایطی در داخل حلقه ایجاد شود تا شرط حلقه بعد از مدتی ارزش نادرستی پیدا کرده و حلقه خاتمه یابد.اگر شرط حلقه همیشه درست باشد (هیچ گاه نقض نشود), حلقه تکرار بی نهایت ایجاد می شود.
// Program to find factorial of a number
// For a positive integer n, factorial = 1*2*3...n

#include <stdio.h>
int main()
{
    int number;
    long long factorial;

    printf("Enter an integer: ");
    scanf("%d",&number);

    factorial = 1;

    // loop terminates when number is less than or equal to 0
    while (number > 0)
    {
        factorial *= number;  // factorial = factorial*number;
        --number;
    }

    printf("Factorial= %lld", factorial);http://sourceiran.com/wp-admin/post.php?post=23815&action=edit#

    return 0;
}

خروجی کد بالا:

Enter an integer: 5
Factorial = 120

۳- حلقه تکرار do…while 
حلقه do…while، کاملا شبیه حلقه While است، با یک تفاوت کوچک. در حلقه  do…while شرط حلقه در انتهای آن بررسی می شود و این امر باعث می شود که همیشه کدهای داخل حلقه do…while  حداقل یک مرتبه اجرا شود.(حتی اگر شرط از اول غلط باشد). اگر شرط برقرار باشد، تکرار کدها ادامه پیدا می کند، اما اگر شرط برقرار نباشد برنامه از حلقه خارج می شود.
ساختار این حلقه به صورت زیر است :

حلقه تکرار do...while

do
{
کد هایی که در زمان برقراری شرط حلقه تکرار می شوند
}
While( شرط حلقه );

do
{
PORTD=a;
a++;
}
While( a<16 );

  • دقیقا مانند مثال حلقه while است اما با یک تفاوت:
  • بار اول بدون بررسی شرط، یک بار دستورات حلقه اجرا می شوند.
  • در انتهای حلقه شرط بررسی می شود. اگر شرط برقرار بود دوباره حلقه تکرار می شود و این روال تا زمانی که شرط حلقه برقرار باشد تکرار خواهد شد.

#include <stdio.h>
 
int main () {

   /* local variable definition */
   int a = 10;

   /* do loop execution */
   do {
      printf("value of a: %d\n", a);
      a = a + 1;
   }while( a < 20 );
 
   return 0;
}

تنها تفاوت استفاده ا زحلقه do while است. پس از کامپایل و اجرای برنامه بالا ، نتایج زیر حاصل می شود:
خروجی کد بالا:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

از کدام حلقه تکرار استفاده کنیم ؟

حال که با دستورات و ساختار حلقه های تکرار در زبان C، آشنا شدیم این پرسش به وجود می آید که از کدام حلقه در چه موقع باید استفاده کرد؟

معمولا وقتی که تعداد حلقه تکرار مشخص، وگام حرکت نیز معین باشد، از حلقه FOR استفاده می شود. در موارد دیگر سعی کنید از حلقه های while و do…while استفاده کنید.اگر شرایطی وجود داشت که، چه شرط حلقه درست باشد و چه نادرست، دستورات حلقه حداقل یک بار باید اجرا شوند، از حلقه do…while  و گرنه از حلقه while استفاده کنید.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *