Engineering Programming A תרגול 3 Introduction to C - Fall 2010 - Amir Menczel
אופרטורים להשוואה הערה: שימו לב להבדל הבא: "==" הוא אופרטור להשוואה אשר מחזיר ערך 1 (אם מתקיים שוויון) או (0 אם לא מתקיים שוויון). "=" הוא אופרטור השמה. x = y;, משמעו שהמשתנה x מקבל את הערך y.
אופרטורים לוגיים
קדימויות של אופרטורים () ! ++ -- Casting * / % + - * / % + - < <= > >= == != && || = += -= /= *= %=
דוגמא – תנאים בוליאניים ולוגיים: void main() { int x=4,y=7,z; z=x<2; // z=0 z=y==7; // z=1 z=(y>=x); // z=1 z=2+(y-x>0)*2; // z=2+1*2=4 z=x!=4; // z=0 z=!(x==4); // z=!(1)=0 z=!x; // z=0 z=x=y; // z=7, x=7 z=x=0; // z=0, x=0 x=4; y=5; z=7<x<10; // z=1 z=(x<0 && y<0) || x>0; // z = (0 && 0) || 1 = 1 }
פקודת if-else: // SYNTAX: if (condition) command1; else // else is optional command2; אם condition שונה מ 0 (אמת) אז command1 תתבצע, אחרת command2 תתבצע. אם נרצה לבצע יותר מפקודה אחת במקום שבו נמצאות command1 או command2, נצטרך לשים את הפקודות בתוך "בלוק" אשר נתחם באמצעות סוגריים מסולסלות – { } : int x,y,max,min; // keyboard input -> x,y if (x>y) { max=x; min=y; } else { max=y; min=x; פקודת if-else:
דוגמה /*A program to determine how you did in the course:*/ #include <stdio.h> void main() { int grade; printf("Enter your grade: "); scanf("%d",&grade); if (grade >= 80) printf("Passed with a good grade\n"); else if (grade >= 56) printf("Passed\n"); else printf("Failed\n"); }
תרגיל 1 בתוכנית שלפניכם ישנם 4 קטעי קוד חסרים. מה צריך להיות כתוב במקומות החסרים, כך שפלט התכנית יהיה זהה לזה של התכנית שבדוגמא למעלה. /*A program to determine how you did in the course*/ void main() { int grade; printf("Enter your grade: "); scanf("%d",&grade); if( ______ ) printf("Passed with a good grade"); else printf( _____ ); printf( ______ ); }
תרגיל- 1 פתרון /* program to determine how you did in the course*/ תרגיל- 1 פתרון /* program to determine how you did in the course*/ void main() { int grade; printf("Enter your grade: "); scanf("%d",&grade); if(grade>=56) if(grade>=80) printf("Passed with a good grade\n"); else printf("Passed\n"); printf("Failed\n"); }
לולאות DO-WHILE WHILE FOR do { פקודות ; } while (תנאי ביצוע); פקודות ; } while (תנאי ביצוע); while (תנאי ביצוע) { } for (פקודת קידום; תנאי ביצוע; אתחול משתנים) { פקודות; כל עוד התנאי מתקיים, בצע בצע פקודות ובדוק אם התנאי מתקיים החל מ startValue=X ועד X=endValue, בצע
לולאות – מבנה לולאת while !=0 ==0 ביצוע גוף הלולאה חישוב תנאי מעבר לפקודה הבאה אחרי כל הלולאה
תרגיל 2 כתוב קוד המחשב את סכום הספרות במספר שלם חיובי הניתן כקלט. כתוב קוד המחשב את סכום הספרות במספר שלם חיובי הניתן כקלט. int num,sum; printf("Enter an integer number\n"); scanf("%d", &num); sum=0; while(num){ sum+=num%10; num=num/10; } printf("The digits sum is %d\n",sum);
תרגיל 3 מה יקרה לאחר הרצת הקוד הבא (יתכן כי יותר מתשובה אחת נכונה) ? מה יקרה לאחר הרצת הקוד הבא (יתכן כי יותר מתשובה אחת נכונה) ? int k = 10, sum = 0,j; for (j = 0;j < k; j = k - 1) sum = sum + 1; לאחר הביצוע k = 10. הקוד לא יעבור קומפילציה. לאחר הביצוע ערך j הוא 9. הביצוע יכנס ללולאה אינסופית. אף לא אחת מהתשובות לעיל. תשובה: 4.
תרגיל 4 מה יקרה לאחר הרצת הקוד הבא (יתכן כי יותר מתשובה אחת נכונה) ? מה יקרה לאחר הרצת הקוד הבא (יתכן כי יותר מתשובה אחת נכונה) ? int sum = 0,number; for (number = 1;number <= 10; number = number + 1) number = number - 1; printf("%d\n",sum); הקוד לא יעבור קומפילציה. ביצוע הקוד ידפיס 0. ביצוע הקוד ידפיס 55. ביצוע הקוד ידפיס 45. אף לא אחת מהתשובות לעיל. תשובה: 5. (כי יש לולאה אינסופית)
תרגיל 5 כתוב קוד המצייר ריבוע בגודל n*n של כוכביות. printf("Enter size of square\n"); scanf("%d",&n); for(i=0;i<n;i++){ for(j=0;j<n;j++) printf("*"); printf("\n"); } איך ניתן לשנות הקוד כדי שידפיס מסגרת של כוכביות?
תרגיל 5 - המשך כתוב קוד המצייר מסגרת של כוכביות printf("Enter size of square\n"); scanf("%d",&n); for(i=0;i<n;i++){ for(j=0;j<n;j++) if(i==0||i==n-1||j==0||j==n-1) printf("*"); else printf(" "); printf("\n"); }
תרגיל 5 - המשך כתוב קוד המצייר משולש של כוכביות לדוגמא עבור n=5: * ** *** **** ***** printf("Enter size of triangle\n "); scanf("%d",&n); for(i=0;i<n;i++){ for(j=0;j<=i;j++) printf("*"); printf("\n"); }
תרגיל 5 - המשך כתוב קוד המצייר משולש שווה שוקיים של כוכביות לדוגמא עבור n=7: * *** ***** ******* ניתן להניח ש-n תמיד אי זוגי printf("Enter size of triangle\n"); scanf("%d",&n); for(i=0;i<n;i+=2){ for(j=0;j<=(n-i)/2;j++) printf(" "); for(j=0;j<=i; j++) printf("*"); printf("\n"); }
תרגיל 6 מה יקרה לאחר הרצת הקוד הבא? (יתכן כי יותר מתשובה אחת נכונה) מה יקרה לאחר הרצת הקוד הבא? (יתכן כי יותר מתשובה אחת נכונה) int i; for (i=0;i<10; i=i+1) for (i=0;i<9; i=i+1) printf("*"); ביצוע הקוד ידפיס 90 פעם את התו '*'. התכנית תגרום ללולאה אינסופית. ביצוע הקוד ידפיס 9 פעמים את התו '*'. הקוד לא יעבור קומפילציה. אף לא אחת מהתשובות לעיל. תשובה: 3 (כי בשתי הלולאות יש שימוש באותו המשתנה i).
תרגיל 7 חשבו את הסכום הבא: n + 2n + 3n + … + n2 ללא שימוש בפעולות כפל.
תשובה :1 for(i=1,sum=0;i<=n;++i) for(j=1;j<=n;++j) sum+=i; תשובה :2 for(j=1;j<=i;++j) sum+=n;