Professional Documents
Culture Documents
נושא 1- הקדמה לשפת C
נושא 1- הקדמה לשפת C
נושא 1- הקדמה לשפת C
תקן -ANSI Cתקן אמריקאי לסטנדרט כתיבה בו נכתוב את הקוד שלנו בקורס.
כלומר חשוב לזכור שכלל המשתנים ,אם הם מספרים או תווים ,מיוצגים בזיכרון המחשב על ידי מחרוזת בינארית ,שמייצגת
מספר .על פי הטיפוס שנייחס למשתנה המחשב ידע כיצד להתייחס למחרוזת זו )כלומר אם למחרוזת שמייצגת את המספר
' '97לייחס את המספר 97או את האות ' ,('aולכן גם בפקודת הדפסה ,כאשר אנחנו רוצים שערך משתנה יפלט יש להגדיר
כיצד התוכנה תפרש את המחרוזת שמאוכסנת במשתנה זה.
קבועים מחרוזתיים -אם יש למשל מחרוזת " ,"abcdמבחינת הזיכרון יש סיקוונס של 5אותיות ) ‘a’,’b’,c’,’d’ :(Charואז
התו ’ .‘/0לתו האחרון הזה יש חשיבות שכן הוא מסמל את הסיום של מחרוזת.
נשים לב להבדל חשוב ‘a’ -זה טיפוס מסוג ,Charשבעצם מכיל את הערך המספרי 97ובהקשר המתאים התוכנה יודעת לפרש
אותו כאות ולא כערך המספרי הזה .לעומתו " "aזה רצף של מספר ,Charsשאחד מהם הוא אותו ’ ‘aוהשני ’ .‘/0מדובר
בשני עצמים שונים לחלוטין.
הצהרת פרמטרים -בדומה לג'אווה ,בעת יצירת משתנה יש להצהיר על הסוג שלו תחילה.
כמו כן ניתן לבצע castingשל טיפוס מסוג אחד לסוג אחר .למשל במשתנה מאוכסן המספר העשרוני 3.3כטיפוס .double
במידה וניקח את המשתנה ונעשה לו קאסטינג ל ,d-זה יעגל את המספר כלפי מטה וישמור במשתנה את הערך .3
"טיפוס בוליאני" אינו קיים בשפת .Cבמקום זה ,מה שמכיל את המספר 0ייחשב כמה שהכרנו ,Falseומה שמכיל את
המספר 1ייחשב כמה שהכרנו כ.True -
אופרטורים בוליאניים קיימים כמו בג'אווה .כאשר נכתוב ביטוי שכזה ,תוך שימוש ב && -או ||\ הביטוי יקבל ערך " "0או
" "1בהתאם לערך האמת של הפסוק.
פונקציות-
העברת פרמטרים לפונקציה בשפת Cנעשית תמיד .by valueכלומר ,אנחנו מעבירים את הערך של משתנה מסוים לפריים
הספציפי של פונקציה וכעת הוא מאוכסן במשתנה פורמלי של הפונקציה הזו -משתנה שחי ומת בפריים הגלובלי של
הפונקציה .במידה ולמשל ניקח את המשתנה החיצוני המקורי ונשנה אותו לא יקרה כלום לזה שבפנים ,וגם אפילו אם נשנה
את המשתנה הפורמלי בפנים מבלי ל ה ח ז י ר א ו ת ו ב א ו פ ן מ פ ו ר ש ,ע ר ך ה מ ש ת נ ה ה מ ק ו ר י ש ה י ה ל נ ו ב ח ו ץ ל א י ש ת נ ה כ ל ל .א ם
נרצה לשלוף את הערך שחישבנו בפונקציה אחרי כל השינויים לפריים הכללי ,נצטרך להשתמש בפקודת Returnולשמור את
ערך זה במשתנה חדש )או אפילו לדרוס מפורשות את הישן(.
במילים אחרות כאשר מעבירים ארגומנט לפונקציה ,מתבצעת העתקה של ערך המשתנה למשתנה מקומי של הפונקציה ,כך
שאין שום קשר אמיתי בין השניים .דבר זה נכון עבור כל טיפוס שהוא ,ללא יוצא מן הכלל )בניגוד לבג'אווה ופייתון(.
הצהרת -Staticעבור משתנים ופונקציות ,בדומה לג'אווה ,אם נגדיר משהו כ Static -הוא יאוחסן בזיכרון באופן אחר.
משתנה סטטי חי בתוך ה Scope -של הפונקציה בו הוא מוגדר בלבד ,אך הוא נשאר קבוע לאורך כל זמן ריצת התוכנית .כך
למשל אם נאתחל משתנה סטטי בתוך פונקציה -הערך שלו יאותחל בקריאה הראשונה לפונקציה והוא לא "יידרס" לערך
התחלתי זה כל פעם שנפעיל את הפונקציה .תמיד הוא יהיה שמור ברקע עם הערך העכשווי שלו ,וגם ניתן יהיה לשנות אותו
באופן אקטיבי במהלך התוכנית )אם נרצה למשל לעשות לו פלוס 2בכל פעם שנעשה משהו ספציפי בפונקציה למשל( -אך
האתחול שלו יתבצע רק בפעם הראשונה.
המילה Staticכאמור יכולה להיצמד גם להצהרה של פונקציה .המשמעות של זה בהקשר הזה זה שלפונקציות אלו ניתן
לקרוא אך ורק מאותו הקובץ ולא מקבצים אחרים )ניתן להסתכל על זה כמו על הצהרת Privateעל פונקציה בג'אווה(.
Prototype
הקומפיילר של שפת Cהוא עצלן ועובר על התוכנית רק פעם אחת .לכן ,בניגוד לבג'אווה או פייתון למשל ,לא נוכל להשתמש
בפונקציה V1אם הגדרנו אותה רק בשורה יותר תחתונה לאיפה שקראנו אליה .כלומר על מנת
להשתמש בפונקציה ,חייבת להיות הצהרה עליה בכלשהי שורה מעל השורה שבה קראנו לה .נשים לב
שתנאי זה מחייב אך ורק לקומפילציה .לכן ,ניתן לפתור בעיה זו על ידי יצירת .Prototype
במקרה הרגיל ,היינו מגדירים פונקציה ואז משתמשים בה .אם נרצה לממש פיזית את הפונקציה
מאוחר יותר ,אך להשתמש בה בשורות עליונות יותר בקוד עוד לפני שכתבנו אותה ,נוכל לרשום
Prototypeלפונקציה זו שהוא פשוט הצהרה ריקה על הפונקציה והארגומנטים שהיא מקבלת מבלי
להיכנס למימוש הספציפי -רק להגיד שפונקציה שכזו עם חתימה שכזו קיימת בפריים של התוכנית.
כעת נוכל לרשום ו"להפעיל" את V1כמה פעמים שנרצה ,למרות שעדיין לא כתבנו את המימוש שלה,
ורק באיזושהי שורה מתחת לכתוב את המימוש הקונקרטי של .V1בצורה זו הקומפיילר לא יתקל
בבעיה ,והתוכנית תתקמפל באופן רגיל -ולאחר הקומפילציה בקובץ ה Exe-שמסתכל על התמונה
הכוללת ייחשב גם אותו מימוש לפונקציה שכתוב במקום מאוחר יותר בתוכנית ,ואז בכל קריאה של
V1המחשב ידע מה הוא צריך לעשות.
פקודת :Import
פקודת -Scanf
פקודה שבאמצעותה ניתן לקלוט קלט מהמשתמש בזמן ריצה .התחביר שלה דומה מאד לתחביר של ,Printfכלומר תחילה
רושמים עם מחרוזת בקרה )כלומר עם ה (%-את סוג המשתנים שרוצים להכניס ואז מגדירים את הפרמטרים שיעביר
המשתמש.
נשים לב שאת הפרמטרים שאנו קובעים שיושמו בהם הערכים נרשום תחילה עם & ,כלומר אנחנו רוצים שבמשתנה בעל
ה כ ת ו ב ת ש ל ה מ ש ת נ ה aי ו ש ם ה ע ר ך ש ר צ י נ ו ל ש י ם .ח ש ו ב ל ז כ ו ר ש ע ל מ נ ת ב א מ ת ל ב צ ע ה ש מ ה ש ל ע ר כ י ם מ ה מ ש ת מ ש במשתנים
ספציפיים יש לאתחל אותם קודם.