You are on page 1of 34

‫מבוא למחשב בשפת ‪C‬‬

‫הרצאה ‪ :2‬צעדים ראשונים בשפת ‪C‬‬

‫מבוסס על השקפים שחוברו ע"י שי ארצי‪ ,‬גיתית רוקנשטיין ז"ל‪,‬‬


‫איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב"‪.‬‬
‫עודכן ע"י דן רביב‪ .‬עדכון אחרון‪ :‬מרס ‪ 2015‬יחיאל קמחי‬

‫נכתב על‪-‬ידי טל כהן‪ ,‬נערך ע"י איתן אביאור‪ © .‬כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל‬
‫תוכנייה‬

‫• שימוש בסביבת העבודה‬

‫• מבנה תוכנית בשפת ‪C‬‬


‫– הערות )‪(Comments‬‬
‫– פונקציות )‪(Functions‬‬
‫– הכללת קבצים ע"י ‪#include‬‬

‫• תוספות ושיפורים לתוכנית מהשיעור הקודם )סיכום ‪ 100‬מספרים(‬

‫• אבני בניין של השפה‬


‫– מילות מפתח )‪(Keywords‬‬
‫– מזהים )‪(Identifiers‬‬
‫– הגדרת סמלים לקבועים באמצעות ‪#define‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪2‬‬


‫שימוש בסביבת העבודה‬

‫• )הדגמה חיה(‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪3‬‬


‫תוכנייה‬

‫• שימוש בסביבת העבודה‬

‫• מבנה תוכנית בשפת ‪C‬‬


‫– הערות )‪(Comments‬‬
‫– פונקציות )‪(Functions‬‬
‫– הכללת קבצים ע"י ‪#include‬‬

‫• תוספות ושיפורים לתוכנית מהשיעור הקודם )סיכום ‪ 100‬מספרים(‬

‫• אבני בניין של השפה‬


‫– מילות מפתח )‪(Keywords‬‬
‫– מזהים )‪(Identifiers‬‬
‫– הגדרת סמלים לקבועים באמצעות ‪#define‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪4‬‬


‫מבנה תוכנית בשפת ‪C‬‬

‫‪/* The traditional first program in honor of‬‬


‫‪Dennis Ritchie who invented C at Bell Labs‬‬
‫‪in 1972 */‬‬
‫הכללת קובץ‬ ‫הערה‬
‫>‪#include <stdio.h‬‬

‫)(‪int main‬‬ ‫הפונקציה ‪main‬‬


‫{‬
‫;)"‪printf("Hello World!\n‬‬
‫;‪return 0‬‬
‫}‬
‫הדפסה למסך ע"י‬
‫ערך מוחזר‬ ‫קריאה לפונקציה‬

‫אנו נעבור על כל אחד ממרכיבי התוכנית בשקפים הבאים‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪5‬‬


‫הערות‬

‫• הערה )‪ – (Comment‬טקסט בתוך ‪/* ... */‬‬


‫– ההערה מתחילה בצירוף *‪ /‬ומסתיימת בצירוף ‪*/‬‬
‫– הערה יכולה להשתרע על פני מספר שורות‬

‫• דוגמה‪:‬‬
‫‪/* In this part of the program we handle the‬‬
‫‪computation of the final grades. */‬‬

‫• בשפות תכנות אחרות ישנם סימונים אחרים להערות‪ .‬למשל ב‪,C++ -‬‬
‫אשר דומה לשפת ‪ ,C‬מותר גם להשתמש ב‪ // -‬בתחילת שורה‪ .‬הערה‬
‫בסגנון זה אינה חוקית ב‪ ansi-C -‬אבל חוקית ב‪.C99 -‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪6‬‬


‫פונקציות‬
‫• פונקציה )‪ – (Function‬יחידת חישוב אשר יכולה‪:‬‬
‫קלט\פלט‬ ‫לקבל ערכים )פרמטרים‪/‬ארגומנטים(‬ ‫–‬
‫לחשב חישוב מסוים‬ ‫–‬
‫פרמטרי‬ ‫ערכי‬
‫כניסה‬ ‫פונקציה‬ ‫מוצא‬ ‫לבצע קלט‪/‬פלט )ודברים נוספים(‬ ‫–‬
‫להחזיר ערך‬ ‫–‬
‫• בשפות אחרות מוכרים גם המונחים הבאים‪ :‬נוהל )‪,(Procedure‬‬
‫שגרה )‪ (Routine‬תת‪-‬שגרה )‪...,(Subroutine‬‬
‫– והם משמשים בעיקר ככינוי לפונקציות שאינן מחזירות ערך‪.‬‬
‫• לכל פונקציה יש‪:‬‬
‫– הצהרה המתארת את שמה‪ ,‬הפרמטרים שהיא מקבלת ואת ערך החזרה‪.‬‬
‫– הגדרת הפונקציה – הכוללת הצהרה על הפונקציה ואת גוף הפונקציה‪.‬‬
‫• לפני השימוש בפונקציה רצוי מאוד שתבוא הצהרה עליה‪.‬‬
‫• אנו נרחיב אודות פונקציות בהמשך הקורס‪.‬‬
‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪7‬‬
‫פונקציות – דוגמה‬

‫טיפוס מוחזר‬ ‫שם‬ ‫• הצהרה בלבד‪:‬‬


‫;)‪double power(double x, int n‬‬

‫שני פרמטרים‬

‫• הגדרה‪:‬‬
‫)‪double power(double x, int n‬‬
‫{‬
‫;‪double p‬‬
‫‪int‬‬ ‫;‪i‬‬

‫;‪p = 1.0‬‬
‫‪for‬‬ ‫;‪( i = 0‬‬ ‫;‪i < n‬‬ ‫)‪i++‬‬
‫;‪p = p * x‬‬
‫;‪return p‬‬
‫}‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪8‬‬


‫קבצי כותרת והכללתם ע"י ‪#include‬‬

‫• קובץ כותרת )‪ :(Header File‬קובץ בעל סיומת "‪ ".h‬אשר מכיל‬


‫הצהרות על עצמים חיצוניים‪.‬‬
‫מכיל הצהרות על פונקציות קלט‪-‬פלט ‪#include <stdio.h> //‬‬
‫מכיל הצהרות על פונקציות מתמטיות ‪#include <math.h> //‬‬

‫הנחיה להכליל קובץ כותרת‬

‫• בתוכנית ‪ HelloWorld‬שראינו‪ ,‬ישנה הכללה של ‪ stdio.h‬כיוון‬


‫שאנו משתמשים בפונקציה ‪ printf‬המוצהרת שם‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪9‬‬


‫פלט מובנה ע"י ‪printf‬‬

‫• פרמטרים‪ :‬הארגומנט הראשון הוא מחרוזת תסדיר )‪) (format‬פירוט‬


‫בתרגול(‪ ,‬ואחריה באים הערכים אותם יש לכתוב לפי התסדיר‪.‬‬
‫– כל ארגומנט מתאים לקוד ה‪ %-‬הבא בתור במחרוזת התסדיר‪.‬‬
‫– מחרוזת התסדיר יכולה גם להכיל טקסט רגיל )ללא ‪ (%‬שיודפס כמו שהוא‪.‬‬
‫• ערך החזרה‪ :‬מספר התווים שנכתבו‪ ,‬או מספר שלילי בעת כישלון‪.‬‬

‫• דוגמות‪:‬‬
‫;)"‪printf("Just printing text.\n‬‬

‫;‪int i = 5‬‬
‫;)‪printf("The sum of %d and %d is %d", i, 2, 2+i‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪10‬‬


‫קלט מובנה ע"י ‪scanf‬‬

‫• פרמטרים‪ :‬הארגומנט הראשון הוא מחרוזת תסדיר )‪) (format‬פירוט‬


‫בתרגול(‪ ,‬ואחריה באים המשתנים אותם יש לקרוא לפי התסדיר‪.‬‬
‫– כל ארגומנט מתאים לקוד ה‪ %-‬הבא בתור במחרוזת התסדיר‪.‬‬
‫– יש להוסיף & לפני שם המשתנה )נבין מדוע בהמשך(‪.‬‬
‫• ערך החזרה‪ :‬מספר הנתונים שנקראו בהצלחה – ייתכן ‪,0‬‬
‫או ערך שלילי במקרה של כישלון כללי של הקלט )למשל סוף הקלט(‪.‬‬

‫לא לשכוח‬ ‫• דוגמה‪:‬‬


‫את ה‪&-‬‬
‫‪int‬‬ ‫;‪i‬‬
‫;‪double x‬‬
‫;‪float y‬‬
‫;)‪scanf("%d%lf%f", &i, &x, &y‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪11‬‬


‫הפונקציה ‪main‬‬

‫• תוכנית סטנדרטית בשפת ‪ C‬צריכה להכיל פונקציה אשר שמה הוא‬


‫‪,main‬‬
‫– הביצוע המעשי של התוכנית יחל בפונקציה זו‪.‬‬
‫)(‪int main‬‬
‫{‬
‫‪...‬‬
‫;‪return rc‬‬
‫}‬
‫• בשלב זה נניח כי ‪ main‬אינה מקבלת פרמטרים‪.‬‬
‫– הפרמטרים של ‪ main‬הינם מעבר להיקף הקורס שלנו‪.‬‬
‫• הערך המוחזר ממנה הוא "קוד סיום התוכנית"‪ ,‬אשר מוחזר למערכת‬
‫ההפעלה – לגבי קוד זה‪ ,‬המוסכמה היא ש‪:-‬‬
‫– ‪ :0‬סיום בהצלחה‬
‫– שונה מ‪ :0-‬בעיה כלשהי‬
‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪12‬‬
‫תוכנייה‬

‫• מבנה תוכנית בשפת ‪C‬‬


‫– הכללת קבצים ע"י ‪#include‬‬
‫– פונקציות )‪(Functions‬‬
‫– הערות )‪(Comments‬‬

‫• תוספות ושיפורים לתוכנית מהשיעור הקודם )סיכום ‪ 100‬מספרים(‬

‫• אבני בניין של השפה‬


‫– מילות מפתח )‪(Keywords‬‬
‫– מזהים )‪(Identifiers‬‬
‫– הגדרת סמלים לקבועים באמצעות ‪#define‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪13‬‬


‫ מספרים – מהשיעור שעבר‬100 ‫תוכנית לסיכום‬

#include <stdio.h>

int main()
{
int ind = 0, sum = 0;
while(ind < 100) {
int num;
scanf("%d", &num);
sum += num;
++ind;
}
printf("%d\n", sum);
return 0;
}

‫הרצאה‬2 © ‫ כל הזכויות שמורות‬.C ‫מבוא למחשב בשפת‬ 14


‫תוכנית לסיכום מספרים – שיפורים‬

#include <stdio.h>

int main()
{
int ind = 0, sum = 0;
printf("Please enter %d integers\n“, 100);
while (ind < 100) {
int num;
printf("Enter the next integer: "); /* sometimes */
scanf("%d", &num);
sum += num;
++ind;
}
printf("The sum of the %d numbers is %d\n", 100, sum);
return 0;
}

‫הרצאה‬2 © ‫ כל הזכויות שמורות‬.C ‫מבוא למחשב בשפת‬ 15


‫הסברים על התוספות‬

‫• תכנית אינטראקטיבית הינה תכנית הכוללת דו‪-‬שיח עם המשתמש דרך‬


‫פעולות קלט ופלט‪.‬‬

‫• על התכנית להיות "ידידותית למשתמש" – להסביר לו במשפטים‬


‫ברורים מה עליו לבצע ומהו הפלט שניתן לו – אבל בלי להגזים‪.‬‬
‫– הדפסת ההודעה בתוך הלולאה היא‪ ,‬ברוב המקרים )כולל כאן( הגזמה‪.‬‬

‫• מספר הערכים המסוכמים נקבע מראש )אבל כמה קשה לשנות?(‪.‬‬

‫• ואם המשתמש יכניס אות במקום מספר?‬


‫– בדיקת חוקיות הקלט מונעת שיבוש ריצת התכנית בשל הימצאות ערכים‬
‫שגויים בקלט‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪16‬‬


‫תוכנית לסיכום מספרים – שיפורים‬

#include <stdio.h>
#define MANY 100
int main()
{
int ind = 0, sum = 0;
printf("Please enter %d integers\n“, MANY );
while (ind < MANY ) {
int num;
if (scanf("%d", &num) != 1) {
printf("Input Error\n");
return 1;
}
sum += num;
++ind;
}
printf("The sum of the %d numbers is %d\n", MANY , sum);
return 0;
}

‫הרצאה‬2 © ‫ כל הזכויות שמורות‬.C ‫מבוא למחשב בשפת‬ 17


‫הסברים על התוספות‬

‫• אנחנו רוצים לאפשר למשתמש להודיע על כמות המספרים לסיכום‪.‬‬


‫– כך נמנע את הצורך לעדכן את התוכנית מפעם לפעם‪.‬‬

‫• התוכנית תקלוט את המספר הנדרש )אורך הקלט(‪.‬‬


‫– יש צורך לבדוק שהמשתמש הכניס ערך הגיוני‪.‬‬
‫– יש להבדיל בין הכנסת "לא מספר" לבין הכנסת "מספר לא מתאים"‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪18‬‬


‫תוכנית לסיכום מספרים – שיפורים‬
#include <stdio.h>
int main()
{ int ind = 0, sum = 0, many;
printf("Please enter quantity of numbers to add");
if (scanf("%d", &many) != 1) {
printf("Input is not a number\n");
return 1;
}
if (many < 0) {
printf("Input is a negative number\n");
return 1;
}
printf("Please enter %d integers\n", many);
while (ind < many) {
int num;
if (scanf("%d", &num) != 1) {
printf("Input Error\n");
return 1;
}
sum += num;
++ind;
}
printf("The sum of the %d numbers is %d\n", many, sum);
return 0;
}

‫הרצאה‬2 © ‫ כל הזכויות שמורות‬.C ‫מבוא למחשב בשפת‬ 19


‫תוכנייה‬

‫• שימוש בסביבת העבודה‬

‫• מבנה תוכנית בשפת ‪C‬‬


‫– הערות )‪(Comments‬‬
‫– פונקציות )‪(Functions‬‬
‫– הכללת קבצים ע"י ‪#include‬‬

‫• תוספות ושיפורים לתוכנית מהשיעור הקודם )סיכום ‪ 100‬מספרים(‬

‫• אבני בניין של השפה‬


‫– מילות מפתח )‪(Keywords‬‬
‫– מזהים )‪(Identifiers‬‬
‫– הגדרת סמלים לקבועים באמצעות ‪#define‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪20‬‬


‫אבני הבניין של שפת ‪C‬‬

‫• אוסף הסימנים )תווים – ‪ (characters‬שמהם מורכבת תכנית בשפת‬


‫‪ C‬מכיל‪ :‬אותיות קטנות‪ ,‬אותיות גדולות‪ ,‬ספרות‪ ,‬סימני רווח‪ ,‬ומספר‬
‫סימנים מיוחדים‪.‬‬
‫• תכנית בשפת ‪ C‬הינה סדרה של תווים מהאוסף הנ"ל‪.‬‬
‫• השלב הראשון בקריאת תוכנית )למשל בתהליך ההידור )קומפילציה((‬
‫הוא חלוקת סדרת התווים ל"מילים" )‪.(tokens‬‬
‫• סוגי המילים )‪ (tokens‬בשפת ‪ :C‬מילים שמורות )או מילות מפתח(‪,‬‬
‫מזהים‪ ,‬קבועים‪ ,‬קבועי מחרוזת‪ ,‬סימני פעולה )אופרטורים( וכן סימני‬
‫פיסוק‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪21‬‬


C ‫תווים בשפת‬

Lowercase letters a b c d … z
Uppercase letters A B C D … Z
Digits 0 1 2 3 4 5 6 7 8 9
Other characters + - * / = ( ) { } [ ]
< > ' " ! # % & _ | \
^ ~ . , ; : ?
White space characters blank, newline, tab, etc.

‫הרצאה‬2 © ‫ כל הזכויות שמורות‬.C ‫מבוא למחשב בשפת‬ 22


‫רווחים לבנים )‪(White Spaces‬‬

‫רווח לבן )‪ – (White Space‬רצף של אחד או יותר מהדברים הבאים‪:‬‬ ‫•‬


‫רווח‬ ‫–‬
‫‪Tab‬‬ ‫–‬
‫הערה‬ ‫–‬
‫מעבר שורה‬ ‫–‬

‫רווחים לבנים משמשים להפרדה בין מילים )‪ (tokens‬צמודות‪.‬‬ ‫•‬


‫– מלבד זאת‪ ,‬אין להם משמעות‪.‬‬
‫ָתב בשורה אחת‪ ,‬פרט לשורות המתחילות ב ‪#‬‬ ‫• תוכנית ‪ C‬יכולה ל ִ‬
‫ְהּכ ֵ‬
‫ָתב ללא רווחים‪ ,‬בתנאי שלא נוצרת מילה חדשה‬ ‫• תוכנית ‪ C‬יכולה ל ִ‬
‫ְהּכ ֵ‬
‫– את ;‪ int a = 3‬אפשר לכתוב ;‪ ,int a=3‬אבל אי אפשר לכתוב ;‪inta = 3‬‬

‫על מנת להפוך את התוכנית לקריאה יותר לאדם‪:‬‬ ‫•‬


‫– נהוג להשתמש ברווחים על מנת לבצע "הזחה" )שינּות – ‪,(Indentation‬‬
‫– נהוג להשתמש ברווחים על מנת להפריד בין מילים גם כאשר אין בהם הכרח‬
‫– נהוג לרשום כל פסוק בשורה נפרדת‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪23‬‬


‫סוגי המילים‬

‫‪ int while return‬וכו'‪.‬‬ ‫• מילות מפתח )‪:(keywords‬‬


‫וכו'‪.‬‬ ‫= ‪+ - * / %‬‬ ‫• סימני פעולה )‪:(operators‬‬
‫וכו'‪.‬‬ ‫) (‪{ } ; ,‬‬ ‫• סימני פיסוק )‪:(punctuation‬‬
‫בכל אחת משלש הקבוצות הללו יש מספר סופי של ‪ tokens‬אפשריים‪.‬‬

‫‪sum value main scanf‬‬ ‫• מזהים )‪:(identifiers‬‬


‫• קבועים )‪ :(literals‬קבועי מספרים וקבועי טקסט‬
‫‪2e6‬‬ ‫‪.7‬‬ ‫‪7.‬‬ ‫‪2.5‬‬ ‫"ממשיים"‬ ‫שלמים ‪0123 123 0‬‬ ‫– מספרים‪:‬‬
‫מחרוזות "‪"hello" "Sum is %d.‬‬ ‫’ ’‬ ‫’‪’a‬‬ ‫תווים ’‪’\n‬‬ ‫– טקסט‪:‬‬

‫בכל אחת משלש הקבוצות הללו אין ֵח ֶסם למספר ה ‪ tokens‬אפשריים‪.‬‬


‫אבל מספר התווים הוא סופי‬
‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪24‬‬
‫מילות מפתח ומילים שמורות‬

‫• מילות מפתח )‪ (key words‬הן מילים שיש להן משמעות קבועה‬


‫מראש בשפה‪.‬‬
‫• בשפת ‪ ,C‬מילות המפתח הן מילים שמורות )‪(reserved words‬‬
‫ועל כן‪ ,‬אסור לעשות בהן שימוש אחר מלבד השימוש שלהן כמילות‬
‫מפתח‪.‬‬

‫• מלבד מילות המפתח השמורות קיימות בסביבת העבודה מילים‬


‫נוספות מוגדרות מראש‪ ,‬שמומלץ לא להגדיר את משמעותן מחדש‪:‬‬
‫– מזהים של רכיבים סטנדרטיים בתוכניות בשפת ‪ C‬כגון‪:‬‬
‫‪ scanf ,printf ,main‬וכדומה‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪25‬‬


C ‫המילים השמורות של שפת‬
:‫ ואילו הן‬,‫ מילים שמורות‬32 ‫ ישנן‬ANSI-C -‫• ב‬
auto do goto signed unsigned
break double if sizeof void
case else int static volatile
char enum long struct while
const extern register switch
continue float return typedef
default for short union
.‫• המילים הנוטות אינן בשימוש שכיח‬

‫הרצאה‬2 © ‫ כל הזכויות שמורות‬.C ‫מבוא למחשב בשפת‬ 26


‫מזהים‬

‫• כשנכתוב תוכנית‪ ,‬יהיו בה רכיבים שונים שנרצה לתת להם שמות‪.‬‬


‫– למשל‪ :‬פונקציות‪ ,‬משתנים‪ ,‬טיפוסים ועוד‪.‬‬
‫• שם של רכיב כזה נקרא מזהה‪.‬‬
‫• מזהה מורכב מרצף )באורך כלשהו( של ספרות‪ ,‬אותיות וקו תחתון )_(‪,‬‬
‫אך אינו יכול להתחיל בספרה ואיננו יכול להיות מלה שמורה‪.‬‬
‫• דוגמאות למזהים חוקיים‪:‬‬
‫‪x‬‬ ‫‪factor‬‬ ‫‪total‬‬ ‫‪sort_data‬‬ ‫‪result12‬‬
‫‪After2OClock‬‬ ‫‪_AVOID‬‬
‫• דוגמאות לרצפים שאינם מזהים חוקיים‪:‬‬
‫‪2day‬‬ ‫‪12‬‬ ‫‪register‬‬ ‫‪you&me‬‬ ‫‪ibm.com‬‬
‫• אות גדולה ואות קטנה אינן שקולות זו לזו‪.‬‬
‫– לכן‪ ,‬המזהה ‪ x‬שונה מהמזהה ‪.X‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪27‬‬


‫חשיבותם של מזהים בעלי משמעות‬

‫• מבחינת המחשב‪ ,‬לא חשוב כלל באיזה מזהה תבחרו עבור כל חלק‬
‫בתוכנית‪.‬‬
‫– זכותכם לקרוא "‪ "sin‬לפונקציה שמחשבת קוסינוס‪.‬‬
‫• יחד עם זאת‪ ,‬חשוב מאוד לבחור מזהים בעלי משמעות‪ ,‬שיסייעו להבנת‬
‫התוכנית!‬

‫• שימו לב‪ ,‬כמה בלתי מובנים הם הביטויים הבאים‪:‬‬


‫‪t = p * tr‬‬
‫‪sA = gr + fff‬‬
‫וכמה קל להבין את התפקיד של הביטויים עכשיו‪:‬‬
‫‪tax = price * tax_rate‬‬
‫‪grade_of_semester_A = test_grade + factor‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪28‬‬


‫קבועים‬

‫• קבוע )‪ (literal‬הוא רצף תווים המתאר עצם המתקבל מילולית )‪.(as is‬‬
‫‪.‬‬
‫‪.‬‬ ‫• בפסוקים אלה מופיעים‪:‬‬
‫‪.‬‬
‫;‪num_of_students = 600‬‬ ‫– קבוע שלם‬
‫;'‪success_sign = '+‬‬ ‫– ‪ 2‬קבועי תווים‬
‫;'‪failure_sign = 'F‬‬ ‫– קבוע ממשי‬
‫‪if ( failure_rate > 0.25 ) ...‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫• קבוע משמש אותנו להביע ערך הידוע בזמן כתיבת התוכנית‪,‬‬
‫ואי‪-‬אפשר לשנותו בזמן ריצתה‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪29‬‬


‫קבועים מספריים – שלמים ושבורים‬

‫‪0x1B7‬‬ ‫‪032‬‬ ‫‪10000‬‬ ‫‪4‬‬ ‫• דוגמאות לקבועים שלמים‪:‬‬


‫• דוגמאות לקבועים ממשיים‪:‬‬
‫הקסדצימאלי‬ ‫אוקטלי‬
‫)בסיס ‪(16‬‬ ‫)בסיס ‪(8‬‬ ‫‪2.0‬‬ ‫‪.53‬‬ ‫– ‪2.5 6.‬‬
‫‪3.3e+9‬‬ ‫‪2e7‬‬ ‫– ‪.2e-7‬‬
‫‪3.3e+9 → 3.3×109‬‬ ‫‪2e7 → 2×107‬‬ ‫– ‪.2e-7 → 0.2×10−7‬‬

‫• הקבוע ‪) 2.0‬מספר ממשי( מיוצג בזיכרון באופן שונה מהקבוע ‪2‬‬


‫)מספר שלם(‪.‬‬

‫• על מנת להביע ערכים שליליים‪ ,‬ניתן להקדים סימן מינוס לקבוע )שלם‬
‫או ממשי(‪:‬‬
‫‪-4‬‬ ‫‪-10000‬‬ ‫‪-2.0‬‬ ‫‪-6.‬‬ ‫– ‪-.2e-7‬‬
‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪30‬‬
‫קבועי תו ומחרוזת‬

‫• תו כלשהו המוקף בגרשים יחידים הינו קבוע תו )תו מיוצג ע"י מספר(‪:‬‬
‫'‪'a‬‬ ‫'‪'B‬‬ ‫'‪'+‬‬ ‫'"'‬ ‫– ' '‬
‫• ישנם תווים מיוחדים שעל מנת לרשום את קבוע התו שלהם יש‬
‫להשתמש בלוכסן הפוך )‪:(backslash‬‬
‫– '‪ '\n‬הוא התו המציין מעבר לשורה חדשה )‪(newline‬‬
‫– ''\' הוא התו גרש עצמו‬
‫– ועוד‪.‬‬
‫ׁשיֵים( הינו קבוע‬
‫ֵר ַ‬
‫• רצף תווים כלשהם המוקף במרכאות כפולות )ג ְ‬
‫מחרוזת‪:‬‬
‫– "‪"I am a string‬‬
‫– "‪"I am a string\nwith embedded newlines!\n‬‬
‫– בתוך מחרוזת‪ ,‬אין משמעות לביטוי או פסוק‪ ,‬והוא לא יתבצע‪:‬‬
‫• "‪ "a = b + c‬לא יגרום לשינוי ערכו של ‪.a‬‬
‫מעמדם של קבועי תו וקבועי מחרוזת בתוכנית שונה‪ ,‬ויש להיזהר לא לערבב ביניהם שלא כדין!!‬
‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪31‬‬
‫קבועים המופיעים בתוכנית‬
‫• התוכנית שלנו עשויה להכיל קבועים מסוגים שונים‪:‬‬
‫‪3.14159265358979323846‬‬ ‫– קבועים מתמטיים‪ ,‬כגון‪:‬‬
‫‪6.02212179e+23‬‬ ‫– קבועים פיזיקאליים‪ ,‬כגון‪:‬‬
‫– קבועים של גודל הבעיה‪ ,‬כגון‪ :‬אורך הקלט‪,‬‬
‫– קבועים הנובעים משיטת הפיתרון )האלגוריתם(‪,‬‬
‫– קבועים נוספים‪.‬‬
‫• שני הסוגים הראשונים הם באמת קבועים‪ ,‬ולא ישתנו )ואולי כן?(‬
‫• הסוגים האחרים הם קבועים בזמן ריצת התוכנית‪ ,‬אבל עם הזמן‬
‫עשויים להשתנות‪ ,‬ואז יש צורך לשנותם ולתרגם מחדש את התוכנית‪.‬‬
‫• בכל מקרה‪ ,‬לא נרצה שהתוכנית שלנו תהיה זרועה במופעים רבים של‬
‫הקבועים הללו‪ ,‬כי‪ .1 :‬משמעות המספר איננה ברורה ברוב המקרים‪.‬‬
‫‪ .2‬אנחנו שואפים לכתוב כל דבר רק פעם אחת )קל להכניס שינויים(‪.‬‬
‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪32‬‬
‫הגדרת סמלים לקבועים באמצעות ‪#define‬‬

‫‪#define MAX_SIZE 1000‬‬ ‫• אחרי ההגדרה‪:‬‬


‫– המהדר יתייחס לסדרת התווים ‪ MAX_SIZE‬כאילו היא סדרת התווים ‪1000‬‬
‫– בפועל זה מתבצע )בד"כ( ע"י שלב מקדים להידור‪ ,‬הנקרא עיבוד‪-‬מקדים‬
‫)‪ (pre-processing‬ובו מוחלפות סדרות התווים בגוף התוכנית‪.‬‬
‫• רק מופע של ‪ MAX_SIZE‬כמלה עצמאית )‪ (token‬יוחלף‪:‬‬
‫– הסדרה ‪ MAX_SIZE2‬לא תוחלף לסדרה ‪ MAX_SIZE2) 10002‬היא מלה חדשה(‬
‫• מופעים של ‪ MAX_SIZE‬בתוך קבוע מחרוזת )בין מרכאות( אינם מוחלפים‪.‬‬
‫• למשל‪ ,‬הגדרת הקבוע הנ"ל מאפשרת‪ ,‬באמצעות שינוי בודד‪ ,‬להפוך תכנית‬
‫המטפלת ב‪ 1000-‬נתונים לתכנית המטפלת ב‪ 2500-‬נתונים‪.‬‬
‫• יש לשים לב כי ‪ MAX_SIZE‬איננו משתנה‪ ,‬ועל כן‪ ,‬לא מוקצה עבורו זיכרון‪.‬‬
‫• הגדרת קבוע‪ ,‬למשל‪#define PI 3.14159265358979323846 :‬‬
‫תורמת לקריאּות של התכנית וחוסכת בזמן כתיבת התוכנית‪ ,‬ובעריכת שינויים‪.‬‬

‫כלל אצבע‪ :‬כל קבוע שאיננו ‪ ,1 ,0‬או ‪ ,2‬ראוי שיוגדר באמצעות סמל בעל משמעות‪.‬‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪33‬‬


‫המשך ‪#define‬‬
‫• לעיתים נרצה להגדיר סמל קבוע ע"י ביטוי‪-‬קבוע‪ ,‬ולא ע"י מספר‪.‬‬
‫• לדוגמה‪ :‬נניח שפרק זמן מסוים מוגדר כ"שעתיים וארבעים וחמש דקות"‪.‬‬
‫‪#define PERIOD 165‬‬ ‫• נוכל להגדיר‪:‬‬
‫– אבל אז קשה קצת להבין מה המשמעות של המספר ‪ 165‬ומנין נלקח‪.‬‬
‫‪#define PERIOD‬‬ ‫‪2*60 + 45‬‬ ‫• ואולי נעדיף להגדיר‪:‬‬
‫• מה יקרה אם נרצה לחשב את משך הזמן של שתי תקופות?‬
‫‪twice = PERIOD * 2 → twice = 2*60 + 45 * 2‬‬
‫)‪#define PERIOD (2*60 + 45‬‬ ‫• על כן‪ ,‬נגדיר‪:‬‬
‫• ואז נקבל‪:‬‬
‫‪twice = PERIOD * 2‬‬ ‫→‬ ‫‪twice = (2*60 + 45) * 2‬‬
‫כלל אצבע‪ :‬אם בהגדרה מופיע ביטוי )ולא מלה פשוטה( – הקף אותו בסוגריים‬

‫נוהג שכדאי לאמץ‪ :‬הגדר שמות קבועים באותיות גדולות בלבד‬

‫‪2‬הרצאה‬ ‫מבוא למחשב בשפת ‪ .C‬כל הזכויות שמורות ©‬ ‫‪34‬‬

You might also like