C (שפת תכנות)
תוכן עניינים:
1.הקדמה.
2.מבוא.
3.מה זה שפת C?
4.למה C?
5.איך להוריד C?
6.התוכנית הראשונה שלך.
7.מושגים בתכנות ומימושם בשפת C.
תת נושאים
משתנים.
מבני בקרה.
מבנים.
שונות.
1.הקדמה.
שפת C פותחה בשנות ה 70 על ידי דניס ריצרד שעבד בחברת bell.
בעבודה ביקשו ממנו לכתוב מעבד תמלילים אבל השפות שהיו אז היו
כל כך מגעילות, אז דניס המציא שפה חדשה שנקראה C.
וכתב לאחר מכן את המעבד תמלילים בשפת C.
שפת C היא אחת השפות החזקות הקיימות היום
יש אפשרות גם לשלב פקודות אסמבלי בשפת C.
שפת C נחשבת גם לשפה של האקרים במובן מסויים
הרבה אקספלוייטים,ווירוסים וסוסים טרוייאנים כתובים ב C.
וגם תוכנות בשפת C מוגנות יותר מבחינת רוורסינג
כלומר אם אתה הולך לדיבאגר וממיר את התוכנה שכתבת בסי תקבל שפת אסמבלי
אבל אם תלך לשפת דור שלישי כמו דוט נט או JAVA.
מספיק להיות ילד בכיתה ו שיודע קצת תכנות בשביל להבין מה שהולך שם.
אומנם יש כל מיני הצפנות שאפשר לעשות לקוד כדי שלא יקראו את הקוד.
אבל כל זה לא עוזר, כי אם מחשב יכול לקרוא את זה בסופו של דבר
תמיד תהיה דרך להגיע לקוד הלא מקודד.
בקיצור שפת C כבשה את השוק והרבה חברות היי טק משתמשות בה עד היום
אבל מה שהשאיר את C למעלה היה השידרוג ב1983
הוציאו את C++
שם יש גם OOP שזה תכנות מונחה עצמים, ששם אתה מדבר כבר על אובייקטים.
אובייקט זה אוסף של כמה פונקציות שנועדו לבצע דבר מסויים.
ניתן לומר שאובייקט זה מטפורה של חיה כמו חתול.
חתול עושה מייאו
לכל חתול יש שם
כל חתול יודע ללכת
כל חתול יודע לקפוץ וכו.
משתמשים ב C++ לפרוייקטים גדולים.
אבל אנחנו מדברים על שפת C, אז לא נדבר על אובייקטים פה.
אבל סתם לידע כללי כדאי להבין ולדעת את הדברים.
2.מבוא.
נגדיר מהי תוכנית מחשב: באופן בלתי פורמאלי זוהי סדרת פקודות לביצוע עבור מחשב. סדרת פקודות זו מתחילה ממקום קבוע מראש ומסתיימת באמצעות פקודות סיום שנכתבות על ידי המתכנת.
נגדיר מהי תוכנית בשפת c : תוכנית בשפת c היא תוכנית אשר אוסף הפקודות שבה שייכות לשפה מוסכמת מראש - שפת c. אוסף פקודות זה מוכר למתכנת ולתוכנה מסוימת הנקראת "מהדר לשפת c" או קומפיילר c ,אשר אחראי לתרגום התוכנית משפת c לתוכנית המכילה פקודות המוכרות למחשב.
3. מה זה שפת C?
שפת C היא שפת תכנות פרוצדורלית. זוהי שפה עילית הכוללת בקרת זרימה ומבני נתונים, ועם זאת היא מאפשרת ניצול מרבי של יכולות המחשב, בדומה לשפת סף. C היא אחת השפות היעילות והמהירות בתעשייה, והיא השפיעה על שפות תכנות רבות, ובמיוחד על C++, שנכתבה בתחילה כהרחבה של C.
4.למה C?
כדאי ללמוד C כי C זה הבסיס להכול.
5. איך להוריד C?
אפשר להוריד C פה.
6.התוכנית הראשונה שלך.
תוכנית בסיסית של שפת C נראית
כך:
כך נראית כל תוכנית בסיסית, זו הפונקציה הראשית של התוכנית, בה
ווינדוס או כל מערכת הפעלה תתחיל להריץ.
במילים מקצועיות זה ה EP של התוכנית -entry point.
קיימות בסי ספריות בעזרתם המחשב מבין את הפקודות.
בשפת סי קיים קומפיילר שמטרתו לקחת את הקוד בשפת C וליצור
קובץ EXE בסופו של דבר.
אחרי שהוא חקר את כל הפונקציות הקשורות לתוכנית בעזרת הlinker(מקשר)
שמקשר את כל הדברים לתוכנית הוא יוצר ת קובץ EXE .
הפונקציה הראשונה שנלמד נמצאת בספרייה
stdio.h
זו הספריה הסטנדרטית של שפת סי.
יש עוד מלא ספריות אבל כרגע זה לא חשוב.
אנו נסתכל על פונקציה מאוד שימושית שם, של הדפסה.
קוד:
printf(const char* str,...)
זה הכותרת של הפונקציה
הפרמטר הראשון זה המחרוזת הקבועה שאנחנו מכניסים
הפרמטר השני זה סוג רקורסיבי (מעבר לחומר הלימוד שלנו כרגע)
אבל זה אומר שיש לנו יכולת לשים אינספור פרמטרים להדפסה שם.
נסביר את זה מאוחר יותר(לא בטוח בשיעור הזה).
טוב אז בשביל להדפיס משהו נכתוב כך:
\n זו ירידת שורה
נוהגים להשתמש בחלק המקומות בעוד תו מיוחד
\r
ואז נכתוב \r\n
משתמשים לזה לפרוטוקולים בסוקטים אבל זה מעבר לחומר של שפת C
לפי הרמה שמוסברת כעת.
זה יגיע בהמשך.
כדי לקרוא לספריות בשפת C אנחנו משתמשים בפקודת מאקרו ב C
#include
מטרתה להכליל ת ספריות
אז כדי להכליל את stdio
נכתוב
לסיכום התוכנית שלנו בשפת C הראשונה תהיה זו:
קוד:
#include <stdio.h>
#include <windows.h>
void main()
{
printf("hello world\n");
system("pause");
7.מושגים בתכנות ומימושם בשפת C.
כאמור, הייחוד של השפה הוא הפשטות והיעילות שבה, והדבר מתבטא בין השאר גם באופן מימושם של המושגים הבסיסיים בתכנות. למשל, כל המבדיל בין הכרזה על משתנה והכרזה על פונקציה הוא כתיבת () (סוגריים עגולים) לאחר שם הפונקציה המוכרזת. זאת בניגוד לשפות אחרות כמו פסקל, שבהם הכרזת פונקציה נעשית בעזרת מילה שמורה.
משתנים (תת נושא)
משתנה - כינוי לחלק זיכרון שמכיל מידע מסוים. למשל אם מוגדר משתנה מטיפוס מספר שלם (Integer) בשם x אז x יהיה כינוי למספר שאת ערכו תוכל התוכנית לשנות או לקרוא.
לדוגמה, הגדרת משתנה מסוג int, המייצג מספר שלם בגודל 16 ביט לכל הפחות:
מצביע - משתנה המכיל כתובת בזיכרון המחשב - כתובת של משתנה או של פונקציה. משמש בין היתר ליצירה של מבני נתונים דינמיים.
לדוגמה, מצביע למשתנה מסוג short, או מערך של מספרים מסוג זה, שהוא משתנה המייצג מספר שלם:
דגל - טיפוס נתונים המכיל אחד משני ערכים המציינים קיומו או סתירתו של תנאי. בתקן השפה C99 נוסף טיפוס בוליאני מיוחד הקרוי _Bool. במקרה ואין בעיות תאימות לקוד ישן, ניתן להשתמש בסיפרייה <stdbool.h> על מנת להשתמש בשם המקובל bool.
אתחול משתנה - מתן ערך התחלתי למשתנה. לעתים (בעיקר בזמן דיבאג) המהדר נותן ערך התחלתי למשתנים, ולעתים לא, תלוי בסוג המשתנה (לפי התקן, משתנים סטטיים וגלובאליים מאופסים על ידי המהדר, משתנים מקומיים שמוקצים על המחסנית - לא). אם לא ניתן ערך התחלתי על ידי המהדר, הערך התחלתי של המשתנה הוא נתון אקראי או נתון סתמי (ערך התחלתי כזה מכונה לעתים זבל והוא מכיל את מה שהכיל האזור הזה בזיכרון לפני היווצרות המשתנה), על כן אין להסתמך על כך שערכו ההתחלתי של משתנה מספרי יהיה אפס. הנחה כזו היא שגיאה נפוצה אצל מתחילים.
לדוגמה, איתחול משתנה מסוג char, המייצג תו בייצוג כלשהו:
מערך - אוסף של משתנים המסודרים ברצף בזיכרון. גם כאן, באה לידי ביטוי החסכוניות שבשפה, מאחר ש'מערך' הוא בעצם מצביע קבוע (const), וכל מה שאפשר לעשות עם מצביע אפשר לעשות עם מערך ולהפך (למעט קידום והסגה של המערך). מספרו הסידורי של התא הראשון במערך בשפת C הוא 0, ולכן האיבר האחרון במערך בן חמישה איברים יהיה איבר מס' 4. גישה לאיבר מתבצעת על ידי רישום מספרו בתוך סוגריים מרובעים.
לדוגמה, הגדרת מערך של מספרים מסוג float, המייצג מספר נקודה צפה בן ארבע בתים (דיוק יחיד):
לחלופין, ניתן להגדיר מערך על ידי איתחול ערכיו. נגדיר מערך של מספרים מסוג double, המייצג מספר נקודה צפה בן שמונה בתים (דיוק כפול):
קוד:
double n[] = {3.14, 2.71, 0.8, 5, 32};
רשומה (מכונה גם מבנה) - קבוצה של משתנים, שניתן להגדירם בבת אחת ותחת שם זהה, כאשר כל אחד מהמשתנים הוא עצמאי. בניגוד למערך, לא כל המשתנים צריכים להיות מאותו הסוג. רשומה מאפשרת לאחד מספר משתנים העוסקים באותו פריט מידע לתוך משתנה יחיד.
חשוב לציין, כי ב C אין משמעות למבנה בפני עצמו, אלא רק כסימון (tag) המאחד טכנית את המשתנים הכלולים בו. ולכן אין מובן לשם המבנה בפני עצמו, אלא רק בתוספת המילה השמורה struct.
לדוגמה, רשומה (או מבנה) המתארת שם וגיל של אדם. היא מכילה שני שדות:
קוד:
struct person {
char *name;
int age;
};
אפשרות נוספת היא להשתמש במילה שמורה typedef שמסמנת למהדר להתייחס להגדרה הבאה אחריה כטיפוס חדש. למשל:
קוד:
typedef struct person {
char *name;
int age;
} tPerson;
tPerson moshe;
מגדיר משתנה בשם moshe מהסוג struct person.
מחרוזת - מיוצגת בשפת C כמערך של תווים המסתיים בבית בערך אפס. הטיפול במחרוזת נעשה על ידי פונקציות של הספרייה התקנית.
לדוגמה, המחרוזת:
קוד:
char name[] = "John";
הזהה מבחינת תוכנה למערך:
קוד:
char name[] = {'J', 'o', 'h', 'n', '\0'};
מבני בקרה.
לולאה - מבנה בקרה שמאפשר חזרה על אותו קוד ברצף מספר פעמים. ב־C נהוגים שלושה סוגי לולאות: לולאות while שמבוססות על בדיקת תנאי להמשך הלולאה לפני ביצוע הקוד, לולאות do-while שדומות ללולאות while רק שהתנאי נבדק ביציאה, ולולאות for, שבנוסף לבדיקת התנאי גם משלבות בצורה טבעית משתני עזר שיפקחו על ריצת הלולאה (למשל, ספירת מספר הפעמים שהלולאה חזרה על עצמה).
לולאת for:
קוד:
int i;
for (i=0; i < 5; i++) {
/*your code here... */
}
לולאת while עם בקרה בכניסה:
קוד:
int i;
for (i=0; i < 5; i++) {
/*your code here... */
}
לולאת do-while עם בקרה ביציאה:
קוד:
do {
/*your code here... */
} while (/*some boolean condition*/);
מבנים.
פונקציה - המבנה הבסיסי של השפה שבו יכולות להתבצע פקודות ומבני בקרה. אוסף של פקודות (אלגוריתם) שיכול (אך לא חייב) לקבל ערכים כקלט ולהחזיר משתנה יחיד כפלט. שינוי בערכי משתני הקלט בפונקציה לא ישפיע על ערכיהם בחלקים אחרים בתוכנית, אלא אם מדובר במשתנים מיוחדים שהוגדרו מראש כגלובליים, או לחלופין, אם הערך שהועבר לפונקציה לא היה ערך של משתנה, אלא ערך של המיקום בזיכרון שבו נמצא המשתנה, כלומר מצביע.
לדוגמה, פונקציה המקבלת שני מספרים ומצביע למקום בזיכרון, מחזירה את הפרשם, ושמה במקום שבזיכרון את סכומם:
קוד:
int add(int a, int b, int *sum) {
*sum = a + b;
return a - b;
}
מודול - יחידה עצמאית של תוכנה (או חומרה). למשל: טיפול במדפסת נעשה על ידי מודול למדפסת אשר לא כולל דבר בנוסף למדפסת וטיפולה. כל מודול מקומפל בנפרד אולם הם כולם יוצרים קשר אחד עם השני, בשפת C הקשר נוצר על ידי קובצי h. שמכילים את ההגדרות של המודולים האחרים. בכל תוכנה יש מודול אחד ראשי שמכיל את הפונקציה main שבה מתחילה התוכנית.
ספריה - אוסף של פקודות המאוגדות יחד במקום אחד המאפשר לנו להשתמש בהן ללא צורך לכתיבתן מחדש. בשפת C יש צורך לבצע פקודת include# לקובץ שמכיל את ההגדרה של הספרייה בשביל להשתמש בה.
לדוגמה, הכללת הספרייה string, המכילה פונקציות לטיפול במחרוזות:
לפני תרגום התוכנית לשפת מכונה, תוכנית הנקראת "קדם מעבד" (pre-processor) יוצרת קובץ חדש הכולל בנקודה בה מוכרזת ההכללה את תוכן הקובץ המוכלל, ואז מועבר הקובץ להידור לשפת מכונה.
ספריות סטנדרטיות - שפת C היא בעיקרון שפה מינימאלית. היא אינה מכילה פקודות הקושרות אותה למערכת הפעלה מסוימת או לתחום תוכנה מסוים. מסיבה זו, פקודות ספציפיות שכאלה (למשל לקלט ופלט, לחישובים מתמטיים, לעבודה עם מחרוזות ולהקצאות זיכרון דינמיות) נמצאות בספריות סטנדרטיות, שאינן חלק מתחביר השפה אך עונות לקונבנציה מוכרת וקבועה ומהוות חלק מהתקן הרשמי שלה. ספריות אלה מסופקות עם המהדר עבור מערכת הפעלה וחומרה מסוימות והתוכנה מקושרת (linked) עימן על פי צורך והגדרת כותב הקוד.
שונות.
סוגי קבצים - קובץ טקסט וקובץ בינארי. קובץ טקסט יכול לעלות על ידי כל מעבד תמלילים. קובץ בינארי לעומתו מכיל ייצוגים של נתונים וכדומה ואינו מיועד לקריאה על ידי כל מעבד תמלילים. הגישה השונה מתבצעת על ידי קריאה לפונקציות ספריה שונות.
גישה לקובץ - גישה לקובץ נעשית לרוב על ידי חוצץ הנוטל בכל פעם קטע נתונים מהקובץ. המיקום של החוצץ ניתן על ידי המצביע לקובץ. ב־C ישנה אפשרות לעקוף את החוצץ אולם היא בשימוש רק בתוכנות המפעילות גישה ברמה נמוכה (מערכות הפעלה למשל).
הערה - שימוש בשפה המדוברת להסברת שלבי התוכנית. אינו משפיע על ריצת התוכנית עצמה, אך הכרחי להבנתה בידי מתכנתים אחרים או בזמן מאוחר יותר. (מופיע בין התווים /* */). ראה דוגמאות למעלה. בתקן C99 נוספה האפשרות לסמן הערה של שורה אחת על ידי // (שני לוכסנים סמוכים).
שגיאת ריצה - תקלה הנגרמת על ידי התוכנית בזמן הרצתה. למשל: חלוקה באפס, כתיבה לאזור שמור בזיכרון.
זהו עד כאן המאמר שלי על שפת C.
מקווה שתלמדו משהו!
אין להעתיק.
כל הזכויות שמורות.
YairKingD!~!
Iatraf.co.il..
אם אפשר להכניס ללינקיה ולנעוץ.
תודה.