قالب وردپرس افزونه وردپرس
خانه / دوره آموزش مقدماتی C و ++C / قسمت دوازدهم آموزش C – ساختارهای تصمیم

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

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

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

if(شرط)
دستور ;

در روش بالا شرط ذکر شده بررسی می شود و در صورت برقرار بودن ، دستور بعد از آن اجرا می شود و در غیر اینصورت کنترل اجرای برنامه به دستور بعد از if
منتقل می گردد .

if(شرط)
{
دستورات ;
}
else
دستورات ;

در روش بالا شرط ذکر شده بررسی می شود و در صورت برقرار بودن ، مجموعه دستورات در if اجرا میشوند و در غیر اینصورت مجموعه دستورات در else اجرا خواهند شد. لازم به ذکر است که وجود else در ساختار if اختیاری است .

استفاده از ساختار if بصورت لانه ای ( تو در تو ) نیز امکان پذیر است که در اینصورت اولین else به آخرین if بر می گردد .

مثال ۱ :  برنامه ای که با خواندن یک جمله از ورودی ، تعداد کاراکترها و کلمات موجود در جمله را محاسبه می کند . کلمات با فاصله (blank) از یکدیگر جدا شده و انتهای جمله به کلید enter ختم می گردد .

#include <stdio.h>
#include <conio.h>
void main()
{
int charcount=0 ;
int wordcount=0 ;
char ch ;
printf("type a statement:\n");
while((ch=getche())!='\r')
{
charcount ++ ;
if(ch==' ')
wordcount ++ ;
}
printf("\n character count is:");
printf("%d" , charcount );
printf("\n word count is:");
printf("%d" , wordcount );
getch();
}

به نمونه ای از خروجی برنامه مثال ۱ توجه نمایید :

: type a statement
.this book is my fifth book
character count is:27
word count is:6

مثال ۲ :  برنامه ای که تعداد کل کاراکترهای یک جمله و همچنین تعداد ارقام موجود در آن را شمارش می کند .

#include <stdio.h>
#include <conio.h>
void main()
{
int charcnt=0 ;
int digtcnt=0 ;
char ch ;
printf("\n enter a statement: \n");
while((ch=getche())!='\r')
{
charcnt++ ;
if(ch>=47 && ch<=58)
digtcnt++ ;
}
printf("\n character count is:");
printf("%d" , charcnt );
printf("\ndigit count is:");
printf("%d" , digtcnt);
getch();
}

به نمونه ای از خروجی برنامه مثال ۲ توجه نمایید :

:type a statement
.my telephone number is 817694
character count is:31
digit count is:6

نکته ای که باید در مورد برنامه مثال ۲ توضیح داد این است که در دستور if جهت تشخیص این که ، آیا کاراکتر وارد شده ، یکی از ارقام ۰ تا ۹ است یا خیراز اعداد ۴۷ و ۵۸ استفاده شده است . زیرا کدهای اسکی ارقام ۰ تا ۹ در بین این دو عدد ( از ۴۸ تا ۵۷ ) می باشند . ساختار تصمیم else if تاکنون ساختار if را مطالعه نمودیم و مثال هایی را در این زمینه مشاهده کردیم . نکته ای باید به آن توجه داشت این است که اگر در ساختار if خواسته باشیم چندین شرط را مورد بررسی قرار دهیم ، باید ساختار if را به صورت تودرتو بکار ببریم که نه تنها موجب طولانی شدن برنامه می گردد ، بلکه خوانایی آن را نیز پایین می آورد . ساختار else if که یک ساختار انتقال کنترل شرطی است می تواند در این زمینه به ما کمک کرده تا بتوانیم از افزایش بی رویه طول برنامه جلوگیری کنیم . جهت روشن شدن مطلب به برنامه بعدی که با ساختار else if برای حل یک مساله نوشته شده اند توجه کنید . این برنامه دو عدد و یکی از عملگرهای چهار عمل اصلی را از ورودی خوانده و عملگر را بر روی دو عدد اجرا می کنند .

مثال ۴ :

#include <stdio.h>
#include <conio.h>
void main()
{
int num1 , num2 ;
char op ;
while(1)
{
printf("type number/operator/");
printf("number \n");
scanf("%d%c%d",&num1,&op,&num2);
if(op=='+')
printf("\n sum=%d" , num1+num2);
else if(op=='-')
printf("\n subtract=%d" , num1-num2);
else if(op=='*')
printf("\n multiple=%d" , num1*num2);
else if(op=='/')
printf("\n divition=%d" , num1+num2);
else
printf("\n operator is illegal");
printf("\n\n");
getch();
}

همانطورکه ملاحظه میشود برنامه ای که با ساختار else if نوشته شده است از خوانایی بهتری برخوردار است . لذا توصیه می شود که در این گونه موارد از else if بجای ساختار if استفاده گردد .

انتقال کنترل غیرشرطی ساختارهای if و  else if را تحت عنوان انتقال کنترل شرطی مورد بررسی قرارداده ایم . چند دستور در زبان C وجود دارند که بدون تست کردن شرطی سبب انتقال کنترل برنامه ، از جایی به جایی دیگر می شوند . نام این دستور انتقال کنترل غیرشرطی می باشد که در ذیل مورد بررسی قرار می گیرند .

دستور goto در زبان C علاوه بر ساختارهای تصمیم ، دستوری بنام goto نیز وجود دارد که سبب انتقال کنترل اجرای برنامه ، از نقطه ای به نقطه دیگر می گردد. این دستور بصورت
زیر بکار می رود :
; برچسب دستور goto
برچسب دستور ، همانند یک متغیر نامگذاری شده و به دو نقطه (:) ختم می شود . پیشنهاد می گردد حتی الامکان از دستور goto که معمولا” سبب کاهش میزان خوانایی برنامه می شود ، استفاده نگردد .

مثال ۵ :  برنامه ای که با استفاده از دستور goto یک حلقه تکرار می سازد .

#include <stdio.h>
#include <conio.h>
void main()
{
int x=1 ;
loop1:
x++ ;
if(x<100 )goto loop1 ;
printf("\n the maximum value");
printf("of x is:%d" , x );
getch();
}

خروجی حاصل از اجرای برنامه مثال ۵ : the maximum value of x is:100

یکی از خواص goto درC این است که از تابعی به تابع دیگر نمی توان انشعاب کرد و فقط انتقال کنترل در یک تابع امکان پذیر است . یعنی برچسب goto باید در تابعی باشد که این دستور در آن تابع بکار رفته است . دستور break این دستور یکی از دستورات انتقال کنترل غیر شرطی است و به صورت زیر مورد استفاده قرار می گیرد :

دستور break به دو منظور استفاده می شود :

الف ) خاتمه داده به case درساختار switch

ب ) خاتمه دادن به حلقه تکرار ( حلقه های تکرار ممکن با for do یا while ساخته شوند ) . پس از اجرای دستور break در داخل ساختارهای تکرار کنترل اجرای برنامه به اولین دستور پس از حلقه تکرار منتقل می شود .

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

ساختار switch ساختار switch که یکی از ساختارهای جالب جهت بالا بردن توانایی برنامه است بصورت زیر استفاده می شود :

switch(عبارت)
{
case 1 :
دستورات ;
break;
case 2 :
دستورات ;
break;
defult :
دستورات ;
}

نحوه عمل ساختار switch بدین صورت است که : عبارت ذکر شده در switch ارزیابی می شود ، سپس نتیجه ارزیابی از بالا به پایین با مقادیر ذکر شده ( مقدار ۱ مقدار ۲ و … ) مقایسه می شود ( ابتدا با مقدار۱ مقایسه می گردد ) اگرنتیجه ارزیابی با این مقدار برابر باشد مجموعه دستورات داخل آن case اجرا میشود و با دستور break کنترل اجرای برنامه از این ساختار خارج می شود . اگر نتیجه ارزیابی با مقدار۱ برابر نباشد ، مقایسه با مقدار۲ انجام می شود واین روند تا انتهای این ساختار ادامه پیدا می کند . اگر هیچکدام از مقادیری که در case ذکر شده اند با نتیجه ارزیابی عبارت برابر نباشند ، مجموعه دستورات پس از defaule اجرا می شود . defaule اختیاری است و ممکن است در ساختار switch استفاده نگردد. در این صورت اگر هیچکدام از مقادیر ۱، ۲ و … با نتیجه ارزیابی عبارت برابر نباشند ، کنترل به بعد از ساختار switch برخواهد گشت . حداکثر تعداد case که در یک ساختار switch می تواند قرار گیرد برابر با ۲۵۷ است .

مثال ۶ :  برنامه ای که دو عدد و یکی از عملگرهای چهار عمل اصلی را از ورودی خوانده و عملگر را بر روی دو عدد عمل می کند .

#include <stdio.h>
#include <conio.h>
void main()
{
int num1 , num2 ;
char op ;
while(1)
{
printf("\ntype number/operator/number\n");
scanf("%d%c%d", &num1 , &op , &num2);
switch(op)
{
case '+':
printf("\nsum=%d" , num1+num2);
break ;
case '-':
printf("\nsubtract=%d" , num1-num2);
break ;
case '*':
printf("\nmultiple=%d" , num1*num2);
break ;
case '/':
printf("\ndivition=%d" , num1/num2);
break ;
default:
printf("\n operator is illegal");
printf("\n\n");
getch();
}
}
}

به نمونه ای از خروجی حاصل از اجرای برنامه مثال ۶ توجه نمایید :

type number/operator/number
۱۲ + ۲۳
sum=35

type number/operator/number
۲*۲۶
multiple=52

type number/operator/number
۴%۲

operator is illegal

قسمت دوازدهم آموزش C هم تمام شد امیدوارم با پشتکاری که داشتین تا اینجا همراه ما پیش آمده باشین و در ادامه هم با میکــروپـدیا همراه باشید و از برنامه نویسی لذت ببرید .

نقد و بررسی

User Rating: ۴٫۷۱ ( ۷ votes)

درباره ی آریـان پــور

سلام . آریــان پور هستم . از نویسندگان میکروپـدیا .. علاقه مــند به برنامه نویسی و طراحی وب و شبکه ! دیدگاه ها و نظرات شما دوستان بررسی میشه و باعث دلگرمـی برای نوشتن مطالب بهتر و به روزتر . در تماس باشید با : aryanpour [at] micropedia [dot] ir با مـا همراه باشید ..

مطلب پیشنهادی

قسمت بیست و چهارم آموزش C – عملگرهای اشاره گر

این جلسه بسیار ساده و کوتاه خواهد بود. دو عملگر در مورد اشاره گرها مورد …

پاسخی بگذارید

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

پاسخ عبارت زیر را وارد کنید: *