۱-۴ آشنایی با آرایهها و رشتهها
۲۸ دی ۱۳۹۷۳-۴ آشنایی با توابع در C
۲۸ دی ۱۳۹۷در زبان برنامهنویسی C ساختارهای تکرار و تصمیم جز مهمترین اجزای زبانی هستند.
با استفاده از این ساختارها در برنامه، قدرت تصمیمگیری به برنامهنویس داده میشود و یک برنامهنویس با استفاده از این ساختارها میتواند با توجه به شرایط ایجاد شده در برنامه تصمیم لازم را اتخاذ کند و عمل مناسب با آن تصمیم را انجام دهد.
ساختارهای تصمیم
مهمترین ساختار تصمیمگیری در زبان برنامهنویسیC دستور if است. دستور if ساختاری شبیه زیر دارد.
[php] if (expression){ Statements; } [/php]
در بخش expression توضیحات و شروطی میآید که ما دوست داریم در صورت برقرار بوردن این شرایط دستورات داخل if که با عنوان Statements آورده شدهاند اجرا شوند.
همچنین با ساختار if _ else میتوان شرطی را گذاشت که در صورت برقرار نبودن آن شرط، دستورات دیگری اجرا شوند که در واقع شرط اجرای آنها برقرار نبودن شرط اولیه است. به ساختار زیر نگاه کنید:
[php] if(expression){ statements; } else{ statements; } [/php]
در عبارت بالا ابتدا شرط مورد نظر را در دستور if قرار میدهیم سپس دستورات لازم در صورت برقراری این شرط را در بخش statements مینویسیم. سپس در بخش statements در دستور else باید دستوراتی را بنویسیم که میخواهیم در صورت برقرار نبودن شرط اجرا شوند.
مثلا به قطعه کد زیر نگاه کنید:
[php] if ( i > 0 ) y = x / i; else { x = i; y = j; } [/php]
در قطعه کد بالا به این صورت عمل شده است که ابتدا متغیر i با عدد 0 مقایسه شده و در صورت برقرار بودن شرط بزرگتر بودن مقدار y برابر x/10 قرار داده شده و در صورت برقرار نبودن شرط if یعنی در زمانی که متغیر i کوچکتر یا مساوی 0 است دستور else اجرا میشود که در آن متغیر x برابر i قرار داده میشود و متغیر y نیز برابر j قرار داده میشود. اگر بخش statements در دستورات if یا if _ else تنها یک دستور باشد میتوان از آوردن براکت خودداری کرد.
در زبان برنامهنویسی C دستورات روبرو به دلیل این که دستورات شرطی تنها یک جمله هستند از آوردن براکت خودداری شده است.
[php] if ( i >= 0 ) /* Without braces */ if ( j < i ) x = j; else x = i; [/php]
ساختارهای تکرار
در ساختارهای تکرار به دنبال آن هستیم که یک بخش خاصی از دستورات به تعداد مشخصی انجام شوند.
در ادامه با ارائهی مثالهای متنوع به طور کامل با این ساختارها آشنا خواهید شد.
در ساختار های تکرار چند بخش وجود دارد. یک بخش که در همهی ساختارها وجود دارد بخش شرط است.
در این بخش در واقع به دنبال آن هستیم که اگر شرط مورد نظر برقرار بود ساختار تکرار ما اجرا شود.
بخش دیگر در ساختارهای تکرار بخش تعداد تکرارها است.
در این بخش نیز میخواهیم ساختار تکرار ما به تعداد مشخصی یک بخش خاص از برنامه را تکرار کند.
ساختار تکرار for
در زبان برنامهنویسی C ساختار تکرار for به این شکل به کار میرود. به ساختار زیر نگاه کنید:
[php] for (Variable initialization ; Conditions ; Variable Updates){ Codes to be executed when the condition is true; } [/php]
در ساختار بالا که همان ساختار for است سه بخش را مشاهده میکنید:
۱- بخش مقداردهی اولیه به متغیرها
۲- بخش شرط ها
۳- بخش تغییر دادن متغیرها در حین اجرای دستور for
حال به تفضیل راجع به هریک از بخشهای بالا صحبت خواهیم کرد.
۱- بخش مقدار دهی اولیه به متغیرها
در این بخش که ابتداییترین بخش یک دستور for است به متغیرهای خاصی که بخواهیم، میتوانیم
مقداردهی اولیه کنیم. این بخش در ساختار for تنها یک بار اجرا میشود.
۲- بخش شرط ها
در این بخش شرط اجرای حلقهی تکرار در هر مرحله قرار میگیرد. در واقع قبل از هر بار اجرای یک برنامه که در داخل حلقهی تکرار قرار گرفته است ابتدا این بخش چک میشود و در صورت برقرار بودن شرط، برنامهی داخل حلقه اجرا میشود و در غیر اینصورت اجرای حلقه به پایان میرسد.
۳- بخش تغییر دادن متغیرها در حین اجرای دستور for
در این قسمت متغیرهایی که لازم داریم به هنگام هربار اجرای حلقه مقدار آنها تغییر کند را به همراه تغییرات آنها قرار میدهیم. به این قطعه کد نگاه بیندازید:
[php] int x; for(x=0 ; x<10; x++) printf(“ %d \n”,x); [/php]
در قطعه کد بالا ابتدا یک متغیر به نام x را تعریف کردهایم. سپس با استفاده از یک ساختار for کاری کردهایم که اعداد 0 تا 9 بر روی مانیتور به ترتیب چاپ شوند. اما اتفاقی که در واقع رخ میدهد این است که پس از ورود به حلقهی for ابتدا مقدار x برابر 0 قرار داده میشود. سپس شرط اینکه x کمتر از 10 باشد بررسی میشود و در صورت برقراری این شرط دستور printf اجرا میشود و مقدار 0 بر روی مانیتور چاپ میشود.
سپس مقدار x یک واحد افزایش مییابد (طبق تعریف x++ که دربخش آخر for انجام دادیم). این عمل تا به 9 رسیدن x ادامه پیدا میکند. زمانی که 9 چاپ میشود به مقدار x یک واحد افزوده میشود و مقدار x برابر با 10 میشود. در این حالت زمانی که به چک کردن دوبارهی شرط حلقه میرسیم میبینیم که شرط برقرار نیست و اجرای حلقه در اینجا به پایان میرسد.
با استفاده از حلقههای تکرار میتوان بر روی آرایهها و رشتهها حرکت کرد. مثلا به قطعه کد زیر که تمام عناصر یک آرایه را مقداردهی میکند نگاه کنید.
[php] int arr[10]; int i=0; for( i=0; i<10; i++){ // Initializing each element separately arr[i]=i; } [/php]
در قطعه کد بالا به تمام عناصر آرایه اعدادی بین صفر تا 9 داده شده است. در واقع اندیس هر عنصر به عنوان مقدار آن عنصر در نظر گرفته شده است. همچنین با استفاده از ساختار for میتوان به جستجو در آرایهها پرداخت. مثلا به قطعه کد زیر نگاه کنید:
[php] int x=15; int i=0; int amount=0; int arr[]={'18','15','6','7','39','15'}; for (i=0;i<6;i++){ if(arr[i] == 15){ amount++; printf(“Place %d”,i); } printf(“Number of 15 in your array was %d”,amount); } [/php]
در قطعه کد بالا به دنبال آن هستیم که اگر مقدار 15 را در هر خانهی آرایه پیدا کردیم شمارهی آن خانه و در نهایت کل تعداد اعداد 15 را روی مانیتور چاپ کند.
همانطور که میبینید در ساختار for پس از هربار پیدا کردن عدد 15 در خانههای آرایه ابتدا به مقدار amount یک واحد افزوده میشود و سپس شمارهی خانهایی که در آن هستیم را چاپ میکنیم.
در آخر پس از پایان حلقه پس از ۶ بار اجرا مقدار کل اعداد 15 موجود در آرایه چاپ میشوند.
دستور while
دستور while در زبان C دارای ساختاری مشابه روبرو است.
[php] while(Conditions ){ Statements; } [/php]
در بخش Conditions شرط ورود و ادامهی حلقه میآید به این نحو که قبل از ورود به while ابتدا شرط ورود چک میشود و در ادامه به هنگام هربار تکرار، دوباره این شرط چک میشود و تا زمانی که این شرط برقرار باشد حلقه ی while تکرار میشود.
مثلا به قطعه کد زیر نگاه کنید:
[php] int i=0; while( i<10){ printf(“%d \n”,i); i++; { [/php]
در قطعه کد بالا حلقهی while به تعداد ۱۰ بار تکرار میشود. به یاد داشته باشید که به هنگام استفاده از دستور while عمل Variable Upgrading باید داخل حلقه انجام شود.
دستور do _ while
در این دستور ساختاری شبیه به while داریم با این تفاوت که در ابتدای این حلقه تمام دستورات داخل حلقه یکبار بدون در نظر گرفتن هیچ شرطی انجام میشوند. بنابراین باید در استفاده از این دستور همواره دقت داشته باشید که حلقههای شما بیش از نیازتان تکرار نشوند.
مثلا به قطعه کد زیر نگاه کنید:
[php] int x=0; do{ printf(“Hello World”); }while(x!=0); [/php]
در قطعه کد بالا از آنجایی که دستور do _ while در ابتدا بدون در نظر گرفتن هیچ شرطی اجرا میشود، کلمهی Hello World یک بار بر روی صفحهی مانیتور چاپ میشود.
همواره به یاد داشته باشید که در زبان برنامهنویسی C پس از استفاده از دستور do _ while باید در آخر این دستور از علامت ; استفاده کنید.
دستورات break و continue
گاهی اوقات میخواهیم اگر شرط خاصی برقرار است به طور ناگهانی و قبل از چک شدن شرط پایان حلقه از یک حلقه خارج شویم، برای این کار از دستور break استفاده میکنیم. و یا گاهی اوقات میخواهیم در صورت برقراری یک شرط خاص بدون ادامهی بقیه دستورات داخل حلقه به ابتدای حلقه رفته و حلقه را از اول آغاز کنیم، در این شرایط از دستور continue استفاده میکنیم. مانند کد زیر
[php] int n; do { printf(" \nEnter the number :"); scanf("%d", &n); if (n <0) { break; } if (n >10) { printf("Skip the value\n"); continue; } printf("The number is: %d", n); } while (n!= 0); } [/php]
در قطعه کد بالا پس از گرفتن ورودی از کاربر مقدار ورودی در داخل متغیر n قرار میگیرد. سپس اگر مقدار n کمتر از صفر باشد از حلقه به طور کامل خارج میشویم. حال اگر مقدار n بزرگتر از 10 باشد پس از چاپ کردن عبارت Skip the value حلقه از اول دوباره اجرا خواهد شد.
دستور switch case
این دستور در زبان برنامهنویسی C در واقع زمانی استفاده میشود که در برنامه حالتی پیش میآید که شروط مشابهی روی یک متغیر خاص وجود دارد و ما به جای نوشتن چندین if متوالی از این دستور استفاده میکنیم.
ساختار این دستور به شکل زیر است:
[php] switch ( expression ) { declarations case constant-expression : statements executed if the expression equals the value of this constant-expression break; default : statements executed if expression does not equal any case constant-expression } [/php]
در ساختار بالا همانطور که میبینید در ابتدا متغیری که میخواهیم روی آن شروط متفاوت تعریف کنیم را به switch پاس میدهیم.
سپس در بخش declaration به تعریف و یا مقداردهی به متغیرهایی که احتمالا در برنامه نیاز میشوند میپردازیم.
سپس با نوشتن عبارت case و در مقابل آن عدد یا کاراکتری که به ازای میخواهیم دستور خاصی اجرا شود را مینویسیم.
در واقع این عدد یا کاراکتر همان عدد یا کاراکتر متغیر اولیهای است که به switch پاس دادیم و میخواهیم در شرط چک شوند.
پس از هر case باید از break استفاده کنیم تا شروط دیگر چک نشوند.
در زبان برنامهنویسی C در بخش default نیز دستوراتی را میآوریم که میخواهیم زمانی اجرا شوند که هیچ شرطی روی متغیر ما درست نبوده است، چراکه اگر یک شرط درست باشد هیچگاه به default نمیرسیم.
[php] switch( c ) { case 'A': capa++; case 'a': lettera++; default : total++; } [/php]
در قطعه کد بالا روی کاراکتر c شروطی تحت دستور switch تعریف کردهایم. مثلا اگر کاراکتر c برابر با a باشد مقدار متغیر capa یک واحد زیاد میشود.
[php] switch( i ) { case -1: n++; break; case 0 : z++; break; case 1 : p++; break; } [/php]
در دستور switch بالا دستور را روی یک متغیر int تعریف کردهایم. همچنین برای جلوگیری از چک شدن بقیهی case ها از دستور break نیز استفاده کردهایم.
همانطور که میبینید استفاده از دستور default اجباری نیست و هرجا که نیاز باشد از آن استفاده میکنیم.