زبان برنامه نویسی سی/حلقه do while و while: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
خط ۱۱۹:
 
مثال بالا کاراکترهای قابل مشاهده اسکی ( ASCII ) را در خروجی خط‌دستوری چاپ می‌کند . در قطعه کد بالا ابتدا فایل سرآیند stdio را جهت استفاده از تابع کتابخانه‌ای printf ضمیمه برنامه خود نمودیم و در تابع اصلی برنامه ( یعنی تابع mian ) یک متغیر صحیح با نام a ایجاد نمودیم و به آن مقدار 32 دادیم که اولین مقدار برای کاراکترهای قابل مشاهده کاراکترست اسکی می‌باشد . سپس با کمک دستور حلقه while از زمانی که a بزرگ‌تر از ۳۱ و کوچک‌تر از ۱۲۷ است که می‌شود ۳۲ تا ۱۲۶ تابع کتابخانه‌ای printf را به اجرا می‌گذارد و سپس یک واحد به a اضافه می‌کند و سپس تا زمانی که شرط برقرار باشد تکرار می‌شود . تابع کتابخانه‌ای printf مقدار متغیر صحیح a را با مقدار معادل آن در اسکی ( با کمک کاراکتر کنترلی c% ) در خروجی خط‌دستوری به عنوان کاراکتر چاپ می‌کند و خط را می‌شکند . در پایان برنامه تابع main مقداری باز نمی‌گرداند و اجرای برنامه به پایان می‌رسد
 
مثال :
 
{{چپ‌چین}}
<source lang=C#>
#include <stdio.h>
 
int main()
{
int i, j, rows;
 
printf("Enter number of rows : ");
scanf("%d", &rows);
 
i = 1;
while(i<=rows)
{
 
j=i;
while(j<rows)
{
printf(" ");
j++;
}
j=1;
while(j<=(2*i-1))
{
printf("*");
j++;
}
 
printf("\n");
i++;
}
 
return 0;
}
</source>
{{پایان چپ‌چین}}
 
مثال بالا یک مثلث متساوی‌الاضلاع به شکل یک هرم با کاراکتر ستاره ( استریسک ) در خروجی خط‌دستوری چاپ می‌کند . اما چگونه ؟ پس از ضمیمه نمودن فایل سرآیند stdio که standard input/output می‌باشد ( ورودی/خروجی‌های استاندارد ) در تابع اصلی برنامه که برنامه را فرا می‌خواند و به اجرا می‌گذارد یعنی تابع main سه متغیر تعریف نموده‌ایم ( با نام‌های i و j و rows ) با کمک تابع کتابخانه‌ای printf که در stdio تعریف شده‌است چاپ می‌کنیم تعداد سطرها ( خط‌ها ) را کاربر وارد کند ، سپس با کمک تابع کتابخانه‌ای scanf که همچون printf در فایل سرآیند stdio تعریف شده است عدد را گرفته و در متغیر rows ذخیره می‌کنیم . سپس دستور می‌دهیم تا مقدار متغیر i یک باشد ( 1 ) و تا زمانی که i کوچک‌تر مساوی عدد وارد شده توسط کاربر است ( rows ) حلقه while بیرونی اجرا و تکرار شود . در این حلقه دو حلقه while دیگر نیز تعریف شده‌اند . اولی ابتدا دستور می‌دهد تا مقدار i داخل j گذاشته شود و سپس تا زمانی که j از عدد وارد شده یعنی rows کوچک‌تر است فضای خالی ( space ) چاپ کند ( که با کمک ++j متغیر j مقدارش افزایش می‌یابد و در نهایت حلقه می‌شکند ) یعنی حلقه داخلی اول از i تا rows فضای خالی چاپ می‌کند . سپس دستور می‌دهیم تا مقدار 1 در j ذخیره شود تا در حلقه while داخلی و درونی دومی تا زمانی که j کوچک‌تر از یکی کم‌تر از دوبرابر i است استریسک چاپ کند که با کمک ++j مقدار j افزایش می‌یابد و حلقه می‌شکند ( اگر از جبر به یاد داشته باشید اعداد فرد را به صورت 2k-1 نشان می‌دهیم که اینجا به جای k از i استفاده نموده‌ایم ) سپس داخل حلقه while بیرونی خط می‌شکند و i یک واحد افزایش می‌یابد . نتیجه این می‌شود که i مرتب افزایش می‌یابد و j که در حلقه درونی اول مقدار i را می‌گیرد و تا rows ادامه می‌دهد تا فضای سفید چاپ کند در هر دفعه اجرای while بیرونی کمتر تکرار می‌شود ( اول 1 است و تا عدد وارد شده مثلا ۶ اجرا و تکرار می‌شود و در خط بعدی از ۲ شروع می‌کند که کمتر می‌شود ) درست بعد از فضاهای سفید به تعداد اعداد فرد ( و دو برابر i منهای یکی ) ، ستاره چاپ می‌شود و سپس خط می‌شکند و دوباره فضاهای سفید چاپ می‌شوند که مدام کمتر می شوند و در عوض ستاره‌ها بیشتر می‌شوند . نتیجه کامپایل این قطعه کد ، برنامه‌ای است که به تعداد خطوط وارد شده توسط کاربر ، یک مثلث متساوی‌الاضلاع به شکل هرم چاپ می‌شود
 
'''دقت کنید :''' همان طور که گفته شد می‌توان داخل while یا do while حلقه for به کار برد و داخل حلقه‌های for می‌توان while یا do while به کار بست . در پست بالا ما می‌توانیم هر کدام از while ها را ( چه بیرونی و چه داخلی‌ها ) به صورت for بنویسیم
 
[[رده:زبان برنامه نویسی سی]]