C/C++ מדריכי
C הקדמה לתכנות ב
C++ הקדמה להיררכית מחלקות ב הצגה מזורזת :C++ הבנת דף הבית

שיעור 3: הסתעפויות ולולאות

פקודות if ולולאות while ב C מסתמכות שתיהן על הרעיון של ביטויים בוליאנים, כמו בפסקל. אולם, ב C אין טיפוס בוליאני: משתמשים במספרים שלמים רגילים במקום זאת. הערך 0 ב C הוא שקר, בעוד שכל מספר שלם אחר הוא אמת. להלן תרגום פשוט מפסקל ל C. ראשית, הקוד בפסקל:

if (x=y) and (j>k) then     
    z:=1  
else    
    q:=10;

התרגום ל C דומה מאוד, אבל יש מספר הבדלים חשובים, בהם נדון מיד לאחר מכן.

if ((x==y) && (j>k))    
    z=1;  
else    
    q=10;

שים לב ש = בפסקל הופך ל == ב C. זהו הבדל חשוב מאוד, כי C תקבל = בודד כאשר תהדר, אבל תתנהג בצורה שונה כאשר תריץ את התוכנית. ה and בפסקל הופך ל && ב C. כמו כן שים לב שבסוף הביטוי ;z=1 ב C יש נקודה פסיק, ש C משמיטה את ה then, ושביטויים בוליאנים צריכים להיות מוקפים בסוגריים. הטבלה הבאה מראה את התרגום של כל האופרטורים הבוליאנים מפסקל ל C:

Pascal

C

=

==

<

<

>

>

<=

<=

>=

>=

<>

!=

and

&&

or

||

not

!

סימן ה == הוא בעייתי כיוון שמדי פעם אתה עשוי לשכוח ולכתוב רק =. כיוון שמספרים שלמים מחליפים משתנים בוליאנים, הקוד שלהלן הוא חוקי ב C:

void main()  
{    
    int a; 
    
    printf("Enter a number:");    
    scanf("%d", &a);    
    if (a)    
    {      
        blah blah blah    
    }  
}

אם a הוא כל דבר פרט ל 0, הקוד אותו מייצג blah blah blah יתבצע. נניח שתיקח את פקודת הפסקל הבאה:

if a=b then

ותתרגם אותה בצורה לא נכונה ל C כגון:

if(a=b)  /* if (a==b) :אמור להיות */ 

ב C, פירושו של ביטוי זה הוא: "בצע השמה של b לתוך a, ולאחר מכן בדוק את הערך הבוליאני של a." כך שאם a הופך ל 0, ביטוי ה if הוא שקר, אחרת, הוא אמת. הערך של a משתנה גם כן. זו אינה הפעילות הרצויה (למרות שתכונה זו שימושית כאשר משתמשים בה נכון), לכן יש להיזהר עם המרות ה = וה ==.

פקודות while הן קלות לתרגום באותה מידה. לדוגמא, קוד הפסקל הבא:

while a < b do  
begin    
    blah blah blah  
end;

הופך ב C ל:

while (a < b)  
{    
    blah blah blah  
}

C גם מספקת מבנה של do-while שמחליף את פקודת ה "repeat-until" של פסקל, כפי שמוצג להלן:

do  
{    
    blah blah blah  
}  
while (a < b);

לולאת ה for ב C היא שונה במידת מה מלולאת for של פסקל, כיוון שגרסת C היא פשוט דרך מקוצרת לבטא פקודת while. לדוגמא, נניח שיש לך את הקוד הבא ב C:

x=1;  
while (x<10)  
{    
    blah blah blah    
    x++; /* x++ is the same as saying x=x+1. It's an increment. */  
}

ניתן להמיר אותו ללולאת for כדלהלן:

for(x=1; x<10; x++)  
{    
    blah blah blah  
}

שים לב שלולאת הwhile מכילה שלב אתחול (x=1), שלב בדיקה (x<10), ושלב הגדלה (++x). לולאת ה for מאפשרת לך לשים את כל שלושת החלקים בשורה אחת, אבל ניתן לשים כל דבר בשלושת הקטעים הללו. לדוגמא, נניח שיש לך את הלולאה הבאה:

a=1;  
b=6;  
while (a < b)  
{    
    a++;    
    printf("%d\n",a);  
}

ניתן גם להחליף אותו בפקודת for:

for (a=1, b=6; a<b; a++, printf("%d\n",a));

זה מבלבל, אך זה אפשרי. אופרטור הפסיק מאפשר לך להפריד בין מספר פקודות שונות בקטעי האתחול וההגדלה של לולאת ה for (אבל לא בקטע הבדיקה). מתכנתי C רבים אוהבים לדחוס הרבה מידע בשורה אחת של קוד C. אני חושב שזה הופך את הקוד לקשה יותר להבנה, לכן אני מפרק את זה.

שגיאות ב C מהן יש להימנע:

1. כתיבת = כאשר מתכוונים ל == בפקודת if או while.

2. כתיבת ; בטעות בסוף לולאת for או פקודת if, כך שלפקודה אין כל השפעה. לדוגמא:

for (x=1; x<10; x++);    
    printf("%d\n",x);

מדפיס רק ערך אחד בגלל ה ; שאחרי פקודת ה for.




לדף הראשון

<< לדף הקודם

לדף הבא >>