مهندس موفق الکترونیک

حلقه ها در زبان C

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

در این مبحث خواهیم آموخت:

  • حلقه چیست؟
  • انواع حلقه
  • حلقه while
  • حلقه Do-While
  • حلقه For
  • دستور Break
  • دستور Continue
  • کدام حلقه را انتخاب کنیم؟

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

بسته به این که دستور کنترلی در کدام قسمت برنامه باشد، حلقه ها به دو دسته تقسیم می شوند:

  1. حلقه کنترل حین ورود
  2. حلقه کنترل حین خروج

در حلقه کنترل حین ورود، شرط پیش از ورود به بدنه حلقه چک می شود. همچنین با اسم حلقه پیش چک(pre-checking) شناخته می شود.

در حلقه کنترل حین خروج، شرط پس از اجرای بدنه حلقه چک می شود. همچنین با عنوان حلقه پس چک(post-checking) شناخته می شود.

حلقه ها در زبان C

شرط کنترلی باید به درستی تعریف و مشخص شده باشد  وگرنه حلقه بی نهایت بار اجرا خواهد شد. حلقه ای که متوقف نشده و دستورات را به دفعات نامحدود پردازش کند حلقه بی نهایت (infinite loop) نامیده میشود. حلقه بی نهایت با نام “حلقه بی پایان”(Endless loop) هم شناخته می شود.برخی از خصوصیات حلقه بی نهایت در زیر آورده شده است:

  1. هیچ شرط پایان دهی برای آن مشخص نیست.
  2. شرط مشخص شده هرگز ارضا نمی شود.

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

زبان برنامه نویسی ‘C’ سه ساختار حلقه فراهم آورده است:

  1. حلقه while
  2. حلقه do-while
  3. حلقه for

حلقه while در زبان C

حلقه while سرراست ترین ساختار حلقه است.شکل پایه ای این حلقه به صورت زیر است:

while (condition) {

             statements;

}

در اینجا منظور از کلمه condition همان شرط است و statements همان دستوراتی هستن که باید اجرا بشن.

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

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

در حلقه while، اگر شرط true نباشد، آنگاه بدنه حلقه حتی یکبار هم اجرا نخواهد شد. از این بابت با حلقه do-wile متفاوت بوده که در ادامه با آن آشنا خواهیم شد.

مطلب پیشنهادی:  اشاره گر ها در زبان C همراه با مثال

برنامه زیر یک حلقه while را نمایش می دهد:

#include<stdio.h>

#include<conio.h>

int main()

{

         int num=1;       //initializing the variable

         while(num<=10)   //while loop with condition

         {

                 printf("%d\n",num);

                 num++;           //incrementing operation

         }

         return 0;

}

خروجی:

1

2

3

4

5

6

7

8

9

10

برنامه فوق طرز استفاده از حلقه while را نشان می دهد.  در این برنامه، یک سری از اعداد از 0 تا 10 را با اسفاده از حلقه while چاپ کرده ایم.

حلقه while در زبان C

  1. متغیری با نام num1 را با مقدار 1 آغاز کرده ایم. می خواهیم از 1 تا 10 را چاپ کنیم بنابراین متغیر با مقدار 1 مقداردهی اولیه شده است. اگر می خواستیم از 0 شروع به چاپ کنیم، آنگاه باید با مقدار 0 متغیر را آغاز می کردیم.
  2. در حلقه while ، یک شرط (num<=10) را فراهم آورده ایم، که بدین معنی است که حلقه بدنه اش را تا زمانی که مقدار num مساوی 10 شود اجرا می کند. بعد از آن حلقه به پایان رسیده و کنترل به خارج از حلقه می رود.
  3. در بدنه حلقه، تابع print را داریم که عدد ما را چاپ می کند و یک عملگر افزایشی برای افزایش مقدار متغیر در هربار اجرای حلقه داریم. مقدار اولیه num برابر 1 است، بعد از اجرای اول، برابر 2 می شود، و در حین اجرای بعدی، برابر 3 می شود. این روند تا زمانی که برابر 10 شود ادامه پیدا می کند و سری اعداد را روی صفحه چاپ کرده و حلقه پایان می یابد.

\n برای مقاصد فرمت بندی بکار می رود و معنای آن این است که مقدار روی یک خط جدید چاپ شود.

حلقه Do-While

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

شکل پایه ای حلقه do-while به صورت زیر است:

do {

  statements

} while (expression);

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

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

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

تفاوت اساسی بین حلقه while و do-while در این است که در حلقه while شرط در ابتدا نوشته می شود. در حلقه do-while شرط در انتها نوشته می شود و با یک سمی کولون(;) خاتمه می یابد.

برنامه زیر از حلقه do-while بهره می گیرد:

قصد داریم جدولی از عدد 2 را با استفاده از حلقه do-while چاپ کینم:

#include<stdio.h>

#include<conio.h>

int main()

{

         int num=1;       //initializing the variable

         do       //do-while loop

         {

                 printf("%d\n",2*num);

                 num++;           //incrementing operation

         }while(num<=10);

         return 0;

}

خروجی:

2

4

6

8

10

12

14

16

18

20

در مثال بالا، جدول مضرب های عدد 2 را با استفاده از حلقه do-while چاپ کرده ایم. بگذارید ببینیم برنامه چگونه سری اعداد را چاپ می کند.

مطلب پیشنهادی:  زبان برنامه نویسی C چیست؟ معرفی، تاریخچه و مفاهیم اولیه

حلقه Do-While 

  1. در ابتدا، متغیر ‘num’ را با مقدار 1 آغاز کردیم. آنگاه حلقه do-while را نوشته ایم.
  2. در حلقه، از تابع print برای چاپ سری، با ضرب مقدار num در عدد 2 استفاده کرده ایم.
  3. بعد از هربار افزایش، مقدار num 1 واحد افزایش یافته و روی صفحه چاپ می شود.
  4. در ابتدا، مقدار num برابر 1 است، در بدنه حلقه، تابع print به این طریق اجرا می شود:2*num ، که num=1 و بنابراین 2*1=2 و مقدار 2 چاپ می شود. این روند تار زمانی که num برابر 10 شود ادامه می یابد. پس از ان حلقه خاتمه یافته و دستوری که فوراً بعد از حلقه هست اجرا می شود. در این مورد عدد 0 برگردانده می شود.

حلقه For در برنامه نویسی C

حلقه for ساختار بهینه تری در برنامه نویسی ‘C’ است. ساختار کلی حلقه for به صورت زیر است:

for (initial value; condition; incrementation or decrementation )

{

  statements;

}
  • مقداردهی اولیه در حلقه For تنها یکبار انجام می شود.
  • شرط یک عبارت منطقی بوده که بعد از هر تکرار شمارنده را با یک مقدار ثابت مقایسه کرده و زمانی که شرط نادرست شود اجرای حلقه for را متوقف می کند.
  • incrementation/decrementation مقدار شمارنده را به اندازه یک مقدار مشخص افزایش (یا کاهش) می دهد.

برنامه زیر از یک حلقه for ساده استفاده می کند:

#include<stdio.h>

int main()

{

         int number;

         for(number=1;number<=10;number++) //for loop to print 1-10 numbers

         {

                 printf("%d\n",number);             //to print the number

         }

         return 0;

}

خروجی:

1

2

3

4

5

6

7

8

9

10

این برنامه سری اعداد از 1 تا 10 را با استفاده از حلقه for چاپ می کند.

حلقه For در برنامه نویسی C

  1. متغیری از نوع int برای ذخیره مقدار اعلان کرده ایم.
  2. در حلقه for ، در بخش آغازین(initialization)، مقدار 1 را به متغیر number اعمال کرده ایم. در بخش condition، شرطمان را قرار داده و سپس هم بخش افزایشی رامشخص کرده ایم.
  3. در بدنه حلقه، تابع print را برای چاپ اعداد روی خط جدید به کار برده ایم. عدد یک را در number ذخیره داریم، بعد از اولین تکرار، مقدار افزایش یافته و برابر 2 خواهد شد. اکنون متغیر number مقدار 2 را داراست. شرط مجدداً بررسی شده و چون کماکان برابر true است حلقه اجرا خواهد شد، و عدد 2 را روی صفحه چاپ می کند. این حلقه به اجرا شدن ادامه داده تا زمانی که متغیر برابر 10 گردد. پس از آن، حلقه خاتمه یافته و سری اعداد 1-10 چاپ شده روی تصویر هستند.

در زبان C، حلقه for می تواند دارای چندین عبارت بوده  که با کاما از یکدیگر جدا شده اند.

برای مثال

for (x = 0, y = num; x < y; i++, y--) {

  statements;

}

همچنین، می توانیم با قراردادن یک یک سمی کالون، از روی عبارت مقداردهی اولیه، شرط  و/یا افزایش پرش کنیم.

مطلب پیشنهادی:  آموزش دانلود و نصب کامپایلر GCC برای زبان C روی ویندوز، لینوکس و مک

مثال:

int i=0;

int max = 10;

for (; i < max; i++) {

  printf("%d\n", i);

}

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

مثال زیر را درنظر بگیرید، در این مثال از حلقه های for تودرتو باری چاپ جدول ضرب استفاده می شود:

#include <stdio.h>

int main() {

int i, j;

int table = 2;

int max = 5;

for (i = 1; i <= table; i++) { // outer loop

  for (j = 0; j <= max; j++) { // inner loop

    printf("%d x %d = %d\n", i, j, i*j);

  }

  printf("\n"); /* blank line between tables */

}}

خروجی:

1 x 0 = 0

1 x 1 = 1

1 x 2 = 2

1 x 3 = 3

1 x 4 = 4

1 x 5 = 5




2 x 0 = 0

2 x 1 = 2

2 x 2 = 4

2 x 3 = 6

2 x 4 = 8

2 x 5 = 10


تودرتویی حلقه های for را می توان تا هر سطحی انجام داد. حلقه های تودرتو باید به اندازه کافی تورفتگی داشته باشند تا کد خوانا باشد. در برخی نسخه های زبان ‘C’ ، تودرتویی به 15 حلقه محدود شده است، اما برخی مقدار بیشتری فراهم کرده اند.

حلقه های تودرتو بیشتر در مورد آرایه ها کاربرد داشته که در مباحث آینده به آنها خواهیم پرداخت.

دستور Break

دستور break بیشتر در دستور switch استفاده می شود. همچنین برای قطع ناگهانی حلقه ها هم مناسب است.

برنامه زیر را که در آن از دستور break باری خروج از حلقه while استفاده می شود ملاحظه می کنیم:

#include <stdio.h>

int main() {

int num = 5;

while (num > 0) {

  if (num == 3)

    break;

  printf("%d\n", num);

  num--;

}}

خروجی:

5

4

دستور Continue

هنگامی که بخواهیم از روی تکرار بعدی پرش کنیم ولی کماکان درون حلقه بمانیم، باید از دستور continue استفاده کنیم.

برای مثال:

#include <stdio.h>

int main() {

int nb = 7;

while (nb > 0) {

  nb--;

  if (nb == 5)

    continue;

 printf("%d\n", nb);

}}

خروج:

6

4

3

2

1

0

بنابراین، مقدار 5 نادیده گرفته می شود.

کدام حلقه را انتخاب کنیم؟

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

  • مسئله را تحلیل کرده و بررسی کنید که آیا به حلقه پیش چک یا پس چک نیاز دارید.
  • اگر حلقه پیش چک نیاز است، از حلقه while یا for استفاده کنید.
  • اگر حلقه پس چک نیاز است، از حلقه do-while استفاده کنید.

خلاصه

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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

3 دیدگاه

  1. سلام من دانشجوی رشته مهندسی کامپیوتر هستم و خیلی این مطالب بهم توی یادگیری کمک کرد ممنونم از سایت خوبتون .

  2. عالی بود