תכנות בשפת c תרגול 15 תרגול חזרה 2 תרגילים ממבחנים 12.06.2011

Post on 22-Dec-2015

231 Views

Category:

Documents

9 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Cתכנות בשפת 15תרגול

2 תרגול חזרהתרגילים ממבחנים

12.06.2011

fscanf - format specification Fields

A format specification has the following form:%[*] [width] type

If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.

For example: fscanf( ptr, "%20[^#] %*c %9d", name, &id);

the function fscanf reads 20 characters, or till letter (‘#') , or till newline from the input stream and stores them in field name, then it reads the next 9 characters and converts them into integer id, then it reads one symbol which is not stored.

2

- רשימות1תרגיל מחזירה הפונקציה.הפונקציה הבאה מחפשת את האמצע של הרשימה ושם חוצה את הרשימה לשתי רשימות

את המצביע לחצי השני של הרשימה. .השלם את הקטעים החסרים

Node* middle(Node* source){Node *fast, *slow, *source2;if (source==NULL || ?? 1 ?? )

return NULL;slow = source;fast = ?? 2 ?? ;while (?? 3 ??) {

fast = fast->next;if ( ?? 4 ?? ) {

slow = slow->next;fast = fast->next;

}}source2 = slow->next;slow->next = ?? 5 ?? ;return ?? 6 ?? ;

}

3

typedef struct node{int value;struct node* next;

}Node;

רשימות1פתרון תרגיל

 

1: !source->next

2: source->next

3: fast->next

4: fast->next

5: NULL

6: source2

4

רקורסיה2תרגיל :4'שאלה מס

באמצעות Xשמדפיסה את האות void X(int lines) רקורסיביתכתוב פונקציה X(9)תמיד אי-זוגית). לדוגמא עבור lines שורות (נניח ש-linesכוכביות ב-

יודפס: * * * * * * * * * * * * * * ** * 

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

5

2פתרון תרגיל :פתרון

, אחר כך לפתור את Xהלוגיקה היא להדפיס את השורה הראשונה של ללא השורה הראשונה והאחרונה ואז להדפיס את השורה Xתת-הבעיה עבור

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

התרשים הבא:

6

2פתרון תרגיל void X(int lines){

int static blank;

int I;

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

putchar(' ');

putchar('*');

  if(lines==1){

puts("");

return;

}  

for (i=0; i<lines-2; i++)

putchar(' ');

puts("*");

  blank++;

X(lines-2);

blank--;

for (i=0; i<blank; i++) putchar(' ');

putchar('*');

for (i=0; i<lines-2; i++)

putchar(' ');

puts("*");

}7

רקורסיה3תרגיל נתונה התכנית הבאה:•

int what1(char *str){if(*str == '\0')return 0;if(*str >= '0' && *str <='9')

return what1(str+1)*10 + *str - '0';return what1(str+1);

} void what2(char **arr, int num){

if(!num)return;

printf("%d\n",what1(*arr));what2(arr+1, num-1);

} void main(){

char *a[ ]={"e=mc2", "1=one, 2=two, 3=three", "one, two, three", "(4+5)*5-7=38"};what2(a, 4);

}  8

מה הפלט של התכנית הנ"ל ? 

הסבר במשפט אחד מה יעודה של ?what1הפונקציה

 הסבר במשפט אחד מה יעודה של

?what2הפונקציה

3פתרון תרגיל

א. מה הפלט של התכנית הנ"ל ?23210

837554 ?what1ב. הסבר במשפט אחד מה יעודה של הפונקציה

הפונקציה מחזירה מספר מורכב מספרות המחרוזת בסדר הפוך.  

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

מורכבים מספרות המחרוזות בסדר הפוך ומדפיסה אותם. 

9

עצים4תרגיל

נתונה ההגדרה: typedef struct treeNode treeNode;struct treeNode{

int value;treeNode *left, *right;

}; 

שמקבלת שורש treeNode* freeMin(treeNode* root)כתוב פונקציה של עץ בינארי ממוין (לפי הכלל "שמאל קטן- ימין גדול"). הפונקציה

משחררת את הקודקוד המכיל את הערך הקטן ביותר בעץ ומעדכנת את העץ בהתאם.

) ממבנה למבנה.valueאין להעתיק ערך (

10

עצים4תרגיל

לדוגמא:•

11

4פתרון תרגיל

treeNode* freeMin(treeNode* root){treeNode *temp;if(!root)

return NULL;if(! root->left){

temp = root ->right;free(root);return temp;

}root->left = freeMin(root ->left);return root;

}

12

מחרוזות5תרגיל

שמקבלת void blank(char *sentence)כתוב פונקציה מחרוזת שהיא משפט ומצמצמת רווחים במשפט.

אין להשאיר רוח לפני המילה הראשונה1.

אין להשאיר רוח בסוף המשפט2.

אסור שיהיו שני רווחים ברצף במשפט3.

אין ליצור או להשתמש במערך או במחרוזת עזר.4.דוגמה:

 הפונקציה תהפוך את המחרוזת

" this is an example of sentence . ””.this is an example of sentenceל- "

13

5פתרון תרגיל void blank(char *sentence){

int i=0, j=0, first=0;

while(sentence[i]){

if(sentence[i]!=' '){

first=1;

sentence[j++]=sentence[i++];

}

else if(first){

sentence[j++]=sentence[i++];

first=0;

}

else

i++;

}

if(sentence[j]==' ') j--;

sentence[j]='\0';

}14

רשימות6תרגיל  

שמקבלת עוגן של רשימה משורשרת void reduce(item *head)הפונקציה ומצמצמת את הרשימה כך שמכל רצף של אותו itemשל מבנים מטיפוס

) occurמספר נשאר רק מבנה אחד עם המספר עצמו ומספר המופעים )של המספר ברצף )שאר המבנים באותו רצף משתחררים). 

15

 typedef struct item{int number; //המספר int occur; // מספר המופעיםstruct item *next;}item;

רשימות6תרגיל השלימו בדפי התשובות את הקטעים החסרים.

void reduce(item *head){item* temp;int count = ?? 1 ??;

 if ?? 2 ?? ;

 while(?? 3 ??)

if( ?? 4 ?? ){?? 5 ??; ?? 6 ??;?? 7 ?? ;count++;

}else{

head->occur = count;?? 8 ?? ;?? 9 ?? ;

}?? 10 ?? ;

}16

6פתרון תרגיל void reduce(item *head){

item* temp;

int count = 1;

if(!head) return; 

while(head->next)

if(head->number == head->next->number){

temp = head->next;

head->next = temp->next;

free(temp);

count++;

}

else{

head->occur = count;

head = head ->next;

count = 1;

}

head->occur = count;

}

17

top related