תרגילים ופתרונות בשפת C

קורס שפת C | שפת C | לימודי שפת C

עודכן לאחרונה: 12 אוגוסט, 2026

שאלות ותשובות בשפת C | הכנה לריאיון עבודה ותרגילים

 

למה שפת C היא עדיין הלב הפועם של תעשיית ה-Embedded וההייטק?

שפת C ממשיכה להיות שפת התכנות המרכזית והחשובה ביותר בעולמות ה-Low-Level, מערכות משובצות מחשב (Embedded Systems), ופיתוח Real-Time.

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

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

מעוניין ללמוד בהרחבה על כל הנושאים המצוינים בתרגילים? הגעת למקום הנכון!
קורס C של Real Time College, נותן לכם את המענה המלא על שפה בסיסית אך חשובה זו, כדי להשתלב במהרה בתעשיית ההייטק.
הקורס מועבר בצורה של תרגול מעשי, יחס אישי והכנה לשוק העבודה.

שפת C

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

שאלה 1 – בנושא לולאות :

כתוב פונקציה שמחזירה את עצרת של מספר נתון. החתימה של הפונקציה תהיה כזו:

int factorial (int num);

שאלה 2 – בנושא מערכים:

כתוב פונקציה להפיכת הערכים בתוך המערך.
החתימה של הפונקציה תהיה כזו:

void reverse(int Array[ARRAY_SIZE]);

ARRAY_SIZE הינו קבוע שמוגדר להיות 10

שאלה 3 – בנושא מחרוזות:

מחרוזת תווים נקראת פלינדרום (Palindrome) אם אנו מקבלים אותה תוצאה בקריאה מימין לשמאל ומשמאל לימין.
הגדרה משוכללת של פלינדרום: מדלגים על כל סימני הקריאה והרווחים.
כתוב קוד שבודק אם המחרוזת היא פלינדרום ע"פ ההגדרה המשוכללת. לדוגמה המחרוזת הבאה הינה פולינדרום בהגדרה המשוכללת:
Madam! I’m Adam

שאלה 4 – בנושא Bitwise:

כתוב קוד שמעלה טווח של ביטים למעלה מבלי לשנות את שאר הביטים במשתנה.
לדוגמה: יש להעלות את הביטים 1-3 .

שאלה 5 – מצביעים גנריים:

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

void swap_any(void * p_var1,void * p_var2,size_t size);

 

תשובה 1

תשובה לתרגיל מספר 1 בנושא לולאות – שפת C תרגילים ופתרונות





# include < stdio.h >



//declare a function that find the factorial of the number

int factorial (int num);



//============================

int main()

{

    	int Num1, tmp;



    	printf("ENTER the Nuber its factorial you want : ");

    	scanf("%d",&Num1);

    	tmp=Num1;

    	printf(" **************************************** n ");

    	printf(" The factorial of %d is %d n",tmp,factorial(Num1));





	return 0;



}

//==========================

int factorial(int num){

	int  retfactorial=1;

	while (num>0)

    	{

        	retfactorial *= num;

        	num = num - 1;

    	}

    	return retfactorial;



}



חזרה למעלה

תשובה 2

תשובה לתרגיל מספר 2 בנושא מערכים – שפת C תרגילים עם פתרונות מלאים





#include < stdio.h >



#define ARRAY_SIZE 10



void reverse(int Array[ARRAY_SIZE]);



int main()

{

	int i, Array[ARRAY_SIZE];



	printf(" Enter elements into the Array :n ");



	for (i=0; i< ARRAY_SIZE ; i++)



	{

		printf("Enter %2d elements : ",i);

		scanf("%d",&Array[i]);



	}

	printf("n************************nn");



	reverse(Array);

	printf("************************nn");

	printf(" here is the new Array : n ");





	for (i=0; i< ARRAY_SIZE ; i++)

	{

		printf("%4d",Array[i]);

	}





	return 0;

}

//==========================

void reverse(int Array[ARRAY_SIZE]){

	int temp,i;

	for ( i=0; i < (ARRAY_SIZE/2) ; i++)

	{

		temp = Array[ARRAY_SIZE-1-i];

		Array[ARRAY_SIZE-1-i] = Array[i];

		Array[i] =temp;

	}



}

חזרה למעלה

תשובה 3

תשובה לתרגיל מספר 3 בנושא מחרוזות – שפת C תרגילים עם פתרונות מלאים





#include < stdio.h >

#include < ctype.h >



int main()

{



	char palindr2[] = "madam,I'm Adam";

	int i,j,len;



	len = sizeof(palindr2) - 1;

	for(i = 0, j = len - 1;i < len, j >= 0; i++,j--)

	{

		while(! isalpha(palindr2[i])) i++;

		while(! isalpha(palindr2[j])) j--;

		if((tolower(palindr2[i]) != tolower(palindr2[j])))

		{

			printf("%s - It's not a palindromen",palindr2);

			return 0;

		}

	}

	printf("%s - It's a palindromen",palindr2);

	return 0;

}

חזרה למעלה

תשובה 4

תשובה לתרגיל מספר 4 בנושא Bitwise – תרגילים ופתרונות בשפת C



#include < stdio.h >



void bitup(int *num,int bit);

void bits_up(int *num,int frombit,int tobit);



int main(){

    int num=1;

    bits_up(&num,1,2);

    printf("%dn",num);

}

//=================

//help function

void bitup(int * num,int bit){

    (*num) |= (1<< bit);

}

//===============

void bits_up(int *num,int frombit,int tobit){

    int i;

    for(i=frombit;i< =tobit;i++)

        bitup(num,i);

}

חזרה למעלה

תשובה 5

תשובה לתרגיל מספר 5 בנושא מצביעים גנריים – שפת C תרגילים ופתרונות





#include < stdio.h >

#include < stdlib.h >



void swap_any(void * p_var1,void * p_var2,size_t size);



int main(int argc,char ** argv){



    int a=3,b=4;

    printf("Before Swap: a is %d, b is %dn",a,b);

    swap_any(&a,&b,sizeof(a));

    printf("After Swap: a is %d, b is %dn",a,b);

    return EXIT_SUCCESS;

}

//------------

void swap_any(void * p_var1,void * p_var2,size_t size){



    void * temp=malloc(size);

    memcpy(temp, p_var1, size);

    memcpy(p_var1, p_var2, size);

    memcpy(p_var2,temp, size);



}



חזרה למעלה

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

שאלות נפוצות

 

מה ההבדל בין Stack ל-Heap בשפת C?
זיכרון ה-Stack מנוהל אוטומטית על ידי המהדר ומיועד למשתנים מקומיים וקריאות לפונקציות. הוא מהיר מאוד אך מוגבל בגודלו. זיכרון ה-Heap מוקצה דינמית על ידי המפתח בזמן ריצה באמצעות פונקציות כמו malloc() ומשוחרר באמצעות free(). עבודה לא נכונה ב-Heap עלולה להוביל לזליגות זיכרון (Memory Leaking).

מה תפקיד המילה השמורה volatile בשפת C?
המילה volatile מורה למהדר (Compiler) לא לבצע אופטימיזציה למשתנה, מכיוון שערכו עשוי להשתנות על ידי גורם חיצוני לקוד (כגון פסיקת חומרה, פריפריאל או הליכי עבודה אחרים במקביל).

מה ההבדל בין Struct ל-Union בשפת C?
ב-Struct, לכל איבר יש מקום זיכרון נפרד משלו, וגודל ה-Struct הוא לפחות סכום גודלי איבריו. ב-Union, כל האיברים חולקים את אותו מיקום בזיכרון, וגודל ה-Union נקבע לפי גודל האיבר הגדול ביותר.

איך מונעים זליגת זיכרון (Memory Leak) בשפת C?
זליגת זיכרון נמנעת על ידי הקפדה על שחרור כל בלוק זיכרון שמוקצה דינמית ב-Heap באמצעות הפונקציה free(), ואיפוס המצביע ל-NULL לאחר השחרור כדי למנוע Dangling Pointers.

מהו מצביע (Pointer) בשפת C ומהו Dangling Pointer?
מצביע הוא משתנה המכיל כתובת זיכרון של משתנה אחר. Dangling Pointer הוא מצביע הממשיך להצביע על כתובת זיכרון ששוחררה כבר (למשל בעזרת free), ושימוש בו עלול לגרום לקריסת התוכנית או לבאג אבטחה.


תחומי לימוד הכי מבוקשים בהייטק בשנת 2026

© כל הזכויות שמורות Real Time Group