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

שיעור 5: פרטים

אופרטורים וקדימויות של אופרטורים

האופרטורים ב C דומים לאופרטורים בפסקל, כפי שמוצג בטבלה שלהלן:

Pascal

C

+

+

-

-

/

/

*

*

div

/

mod

%

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

void main()  
{    
    float a; 
    a=10/3;    
    printf("%f\n",a);  
} 

קוד זה מדפיס ערך נקודה צפה כיוון שהוא מוצהר כטיפוס float, אבל a יהיה 3.0 כיוון שהקוד מבצע חלוקה של מספרים שלמים.

קדימויות אופרטורים ב C דומות גם הן לאלו שבפסקל. כמו בפסקל, סוגריים שולטים בקדימויות. ראה שיעור 14 למידע נוסף על קדימויות, שהופך למורכב במידת מה ב C ברגע שמכניסים מצביעים.

המרת טיפוסים

C מאפשרת לך לבצע המרת טיפוסים בזמן ריצה. עושים זאת לעיתים קרובות ביותר כאשר משתמשים במצביעים. המרת טיפוסים מתרחשת גם בעת פעולת השמה לטיפוסים מסוימים. לדוגמא, בקוד לעיל, ערך ה int הומר אוטומטית ל float.

מבצעים המרת טיפוסים ב C באמצעות שימת שם הטיפוס בסוגריים והנחתו לפני הערך אותו רוצים לשנות. כך, בקוד הנ"ל, החלפת השורה ;a=10/3 בשורה ;a=(float)10/3 מכניסה 3.33333 ל a כיוון ש 10 מומר לערך נקודה צפה לפני החלוקה.

טיפוסים

מצהירים על טיפוסים מוגדרים ומכונים בשם על ידי המשתמש ב C באמצעות הפקודה typedef. הדוגמא הבאה מציגה טיפוס שמופיע לעיתים קרובות בקוד C:

#define TRUE  1  
#define FALSE 0 
typedef int boolean; 
 
void main()  
{    
    boolean b; 
    
    b=FALSE;    
    blah blah blah  
} 

הקוד מאפשר לך להצהיר על טיפוסים בוליאנים בתוכניות C.

אם אתה לא אוהב את המילה "float" למספרים ממשיים, אתה יכול לכתוב:

typedef float real;

ומאוחר יותר לכתוב:

real r1, r2, r3;

ניתן לשים פקודות typedef בכל מקום בתוכנית C כל עוד הן באות לפני השימוש הראשון בהן בקוד. אין צורך לקבץ אותן ביחד כמו בפסקל, ולא צריכים מילה מיוחדת לסמן את התחלת הבלוק כמו בפסקל.

רשומות

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

type    
    rec=record      
        a,b,c:integer;      
        d,e,f:real;    
    end;  
var    
    r:rec;

ב C, אותו קוד נראה כך:

struct rec  
{    
    int a,b,c;    
    float d,e,f;  
}; /* Note semicolon */ 
 
struct rec r;

כפי שמוצג כאן, בכל פעם שתרצה ליצור רשומות מטיפוס rec, עליך לכתוב struct rec. שורה זו נשכחת בנקל, ואתה עשוי לקבל הרבה שגיאות מהדר בגלל שבטעות השמטת את ה struct. ניתן לתמצת את הקוד לצורה:

struct rec  
{    
    int a,b,c;    
    float d,e,f;  
} r; 

שבה הצהרת הטיפוס של rec והמשתנה r מוצהרים באותה פקודה.

ניגשים לשדות של רשומות בדיוק כמו בפסקל, על ידי שימוש בנקודה (.), לדוגמא, ;r.a=5. ניתן להצהיר על typedef לרשומה. לדוגמא, אם אינך אוהב לכתוב struct rec r בכל פעם שאתה רוצה להצהיר על רשומה, אתה יכול לכתוב:

typedef struct rec rec_type;

ואחר כך להצהיר על רשומות מסוג rec_type על ידי כתיבת:

rec_type r;

מערכים

ניתן להצהיר על מערכים על ידי הכנסת גודל מערך אחרי הצהרה רגילה, כפי שמוצג להלן:

int a[10];        /* array of integers */  
char s[100];      /* array of characters (a C string) */  
float f[20];      /* array of reals */  
struct rec r[50]; /* array of records */ 

הגדלה

דרך ארוכה

דרך קצרה

i = i + 1;

i++;

i = i - 1;

i--;

i = i + 3;

i += 3;

i = i * j;

i *= j;

תרגילים

1. נסה קטעים שונים של קוד כדי לבחון המרת טיפוסים וקדימויות. נסה int, char, float, וכן הלאה.

2. צור מערך של רשומות וכתוב קוד כלשהו למיין את המערך בשדה של מספר שלם אחד.

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

1. כמתואר לעיל, שימוש באופרטור / עם שני מספרים שלמים לעיתים קרובות ייצר תוצאה לא צפויה, לכן נסה לחשוב על זה כל אימת שתשתמש בו.




לדף הראשון

<< לדף הקודם

לדף הבא >>