שפת C/פעולות חשבוניות: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Atavory (שיחה | תרומות)
אין תקציר עריכה
Atavory (שיחה | תרומות)
אין תקציר עריכה
שורה 8:
שפת C מאפשרת לחבר (ע"י +), לחסר (ע"י -), להכפיל (ע"י *), לחלק (ע"י /), ולמצוא שארית (ע"י %). להלן מספר דוגמאות:
 
<source lang = "cppc">
int x = 2, y = 3;
 
שורה 26:
 
אפשר לבצע פעולות חשבוניות על מספרים, משתנים, או כל שילוב של משתנים ומספרים:
<source lang = "cppc">
int x = 2, y = 3;
 
שורה 34:
סדר פעולות החשבון בשפת C הוא המקובל
ב[[אלגברה תיכונית/חוקי החשבון/חוקי פעולות החשבון#הסכם סדר הפעולות|אלגברה בסיסית]], ולכן כפל (*), לדוגמה, מבוצע לפני חיבור (+). השורה הבאה, לדוגמה, תדפיס 17
<source lang = "cppc">
printf("%d\n" % 2 + 3 * 5);
</source>
בדיוק כבאלגברה בסיסית, ניתן להשתמש בסוגריים כדי לציין סדר פעולות שונה. השורה הבאה, לדוגמה, תדפיס 25
<source lang = "cppc">
printf("%d\n" % (2 + 3) * 5);
</source>
שורה 44:
===השמה ואתחול===
כפי שראינו ב[[שפת C/משתנים|משתנים]], אפשר להשתמש בסימן = להשמה ואתחול.
<source lang = "cppc">
int x = 2, y = 3;
 
שורה 50:
</source>
חשוב להבין מה קורה כאן בשורה השניה. ראשית מעריכים את הביטוי x + y + 5 (ערכו כאן 10). משימים ערך זה למשתנה z. אפשר גם להשים למשתנה ערך חדש שתלוי בערכו הקודם. נתבונן לדוגמה בשורה
<source lang = "cppc">
x = x+2;
</source>
שורה 57:
===סימני קיצור בהשמה עצמית===
כפי שראינו,
<source lang = "cppc">
x=x+2;
</source>
משמעו השמה עצמית של x לערכו הקודם ועוד משהו (2 במקרה זה). בפועל, סוג זה של השמה עצמית נפוץ מאד. שפת C ידועה בקצרנותה הרבה לביטויים נפוצים. אפשר לכתוב את הביטוי הקודם גם באופן הבא, הקצר יותר:
<source lang = "cppc">
x += 2;
</source>
שורה 67:
 
שפת C כוללת סימונים מקוצרים להשמות עצמיות לכל חמש [[שפת C/פעולות חשבוניות#הפעולות הבסיסיות|פעולות החשבון הבסיסיות]]:
<source lang = "cppc">
/* x = x + 1 */
x += 1;
שורה 87:
===הגדלה עצמית===
נניח שאנו רוצים לקדם את x ב1. כבר ראינו שאפשר לרשום זאת כך:
<source lang = "cppc">
x = x + 1
</source>
או, באופן קצר יותר, כך:
<source lang = "cppc">
x += 1;
</source>
כשנגיע ל[[שפת C/תנאים ולולאות#לולאות|לולאות]], נראה שהגדלה עצמית משתנה דווקא ב1 (כלומר, שהמשתנה מקבל את ערכו הקודם ועוד 1) היא פעולה נפוצה במיוחד. פעולה זו, הגדלה עצמית (increment) יכולה להיכתב כך:
<source lang = "cppc">
x++;
</source>
או כך:
<source lang = "cppc">
++x;
</source>
שורה 107:
 
באותו אופן כהגדלה עצמית, ניתן להוריד 1 מערך משתנה כך:
<source lang = "cppc">
x--;
</source>
או כך:
<source lang = "cppc">
--x;
</source>
===הגדלה עצמית והקטנה עצמית לכתחילה ובדיעבד===
לעתים, קיים ביטוי בו משתנה הן מקודם והן מוערך. נניח, לדוגמה, שx מכיל את הערך 3, ונתבונן בשורה:
<source lang = "cppc">
z = x++;
</source>
שורה 123:
* z מקבל ערך כלשהו
השאלה היא, אבל, מה קודם למה. אם קודם x מקודם, אז בסיום השורה, z יכיל את הערך 4. מצד שני, אם קודם z מקבל ערך, אז בסיום השורה, z יכיל את הערך 3 (כי x קודם ל4 רק אחרי שz קיבל את ערכו הקודם). לצורך כך מכילה שפת C הן הגדלה עצמית לכתחילה, והן הגדלה עצמית בדיעבד. משמעות הגדלה עצמית בדיעבד (post-increment)
<source lang = "cppc">
x++
</source>
היא הערך את x ורק אז קדם אותו. לעומת זאת, משמעות הגדלה עצמית לכתחילה (pre-increment)
<source lang = "cppc">
++x
</source>
היא קדם את x והערך את התוצאה. הדבר דומה להקטנה עצמית בדיעבד (post-decrement)
<source lang = "cppc">
x--
</source>
לעומת הקטנה עצמית לכתחילה
(pre-decrement)
<source lang = "cppc">
--x
</source>
שורה 145:
 
כבר ראינו ב[[שפת C/משתנים|משתנים]] על ההבדלים בין שלמים לנקודות צפות. כדאי לשים לב לנקודה, שכן בלעדיה נוכל לקבל תוצאות מפתיעות. נתבונן בקטע הקוד הבא:
<source lang = "cppc">
int x = 3, y = 8;
 
שורה 167:
 
נתבונן בקטע הקוד הבא:
<source lang = "cppc">
char x = 3;
 
שורה 179:
 
נתבונן בקטע הקוד הבא:
<source lang = "cppc">
int x = 3;
 
שורה 191:
 
כאשר המהדר מבצע חישובים על מספר ערכים מסוגים שונים, הוא עורך המרות מרחיבות במידת הצורך עד שהחישוב פועל על ערכים מאותו סוג. לדוגמה, נתבונן בקטע הקוד הבא:
<source lang = "cppc">
int x = 2, y = 3;
 
שורה 203:
 
נניח שc מייצג טמפרטורה נתונה במעלות בשיטת [[w:en:Celsius|Celsius]], ואנו רוצים למצוא את f, המעלות בשיטת [[w:en:Fahrenheit|Fahrenheit]]. על פי נוסחה ידועה, f הוא {{משמאל לימין|9 / 5 * c + 32}}. נניח גם שהדיוק אינו חשוב לנו במיוחד, ואנו מוכנים לעבוד במספרים שלמים (על אף שגיאת העיגול). להלן תכנית המקבלת כקלט מעלה בFahrenheit, ומדפיסה אותו בCelsius:
<source lang = "cppc">
#include <stdio.h>
 
שורה 223:
 
נוכל לתקן זאת על ידי כך שנחליף את {{משמאל לימין|9 / 5}} ב1.8, שהוא מספר נקודה צפה:
<source lang = "cppc">
f = 1.8 * c + 32;
</source>