You are on page 1of 85

‫سلسلة حلول متارين كتاب‬

‫مقدمة إىل الربجمة بلغة سي‬

‫إعداد ‪ :‬م‪ /‬حمند أمحد عنر دريبيكة‬


‫‪092-7829424‬‬
‫مقدمة‬
‫إن الحمد هلل نحمده ونستعينه ونستغفره ونتوب إليه ‪ ،‬ونصلّي ونسلم على سيدنا محمد وعلى آله وصحبه أجمعين ‪.‬‬

‫͏ سبحانك ال علم لنا إالّ ما ع ّلمتنا إنك أنت العليم الحكيم‬

‫وبعددد ‪ ،،‬بفضددم مددن ه كددان النجددا ال د ا حللتدده السلسددل األولددى مددن حلددوم تمددارين الكتدداب الملددرر ملدم د إلددى‬
‫البرمج بلغ سي للدكتور الفاضم بشير اللائد ‪ ،‬ها أنا أضع بين أيديكم باقي تلك السلسل والتي أبصدرت الندور‬
‫نتيج تفكير وبحث عميلين ‪ ،‬سائالً المولى ّ‬
‫عز وجم ّ أن يجعم ه ا العمم خالصا ً لوجهه الكريم ‪.‬‬

‫للد كان التشجيع من الجميع دافعا ً وحافزاً ‪ ،‬كما كان النلد الب ّناء من خالم المالحظدات الل ّيمد مدن الدزمالء ومدن كدم‬
‫نعتز به كثيراً ‪.‬‬
‫من قرأ السلسل األولى – والتي ع ّبرت رسائلهم إلينا – ك ّنا ّ‬

‫منهدا تحليدا أقصدى فائددم ولتكدون بمثابد نمدا ي يلتدد بهدا فدي‬ ‫ه ه السلسل تشدمم كدم هائدم مدن البدرامد الهدد‬
‫إعداد برامد مماثل في حياتك ‪ ،‬وستشمم ه ه السلسل في اللريب العاجم إن شاء ه شرو مفصل لكم تمرين‪.‬‬

‫إن طموحاتنا كبيرم وآمالنا عظيم وثلتنا باهلل بغير حدود ‪ ،‬ول لك فإننا نناشد كم صداحب قلدم أو فكدر مدن المهتمدين‬
‫والمختصين في مجام البرمجد أن يضدع يدده بديددينا لكدي نخدري أفكداراً وربمدا مالفدات إلدى الندور ونسداهم فدي سدد‬
‫العجز الهائم في ه ا المجام ‪.‬‬

‫للد حاولت في ه ه السلسل أن أزيدم الحداجز النفسدي بدين عامد المسدتخدمين ولغدات البرمجد خاصد لغد ‪ C‬التدي‬
‫تعتبر أقو لغات البرمج للمحترفين على اإلطالا ‪ ،‬وال نطلب منك إالّ أن تعطينا الفرصد وتشداركنا عمليد تحويدم‬
‫المستخدم إلى مبرمد يصبح غيره مستخدما لما ينتجه ‪.‬‬

‫بعض دا ً مددن مواهبددك ‪ ...‬ه د ا مددا‬ ‫فدددن تكددون منش د الشدديء ال مددن يسددتخدمه ‪ ...‬ه د ا مددا نرتضدديه لددك ‪ ،‬أن تكتش د‬
‫سنساعدك عليه ‪.‬‬

‫المللي في ساح العطاء ‪ ...‬ه ا ما نصبوا إليه ‪.‬‬ ‫موق‬ ‫أن تل‬

‫م‪ /‬محمد أحمد عمر دريبيك‬

‫‪Page ii‬‬
‫احملتويات‬
‫‪....................................................................................................................‬‬ ‫المحتويات‬

‫‪....................................................................................................................‬‬ ‫المقدمة‬

‫‪01‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب األول‬

‫‪03‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الثاني‬

‫‪07‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الثالث‬

‫‪11‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الرابع‬

‫‪16‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الخامس‬

‫‪29‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب السادس‬

‫‪32‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب السابع‬

‫‪38‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الثامن‬

‫‪41‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب التاسع‬

‫‪50‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب العاشر‬

‫‪56‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الحادي عشر‬

‫‪61‬‬ ‫‪....................................................................................................................‬‬ ‫إجابة الباب الثاني عشر‬

‫‪i‬‬
‫إجابة الباب األول‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬

‫‪ )6‬اشرح ما هو المقصود بالمعرفات مع ذكر بعض منها ‪.‬‬ ‫‪ )6‬وضح الفرق بٌن كل من ‪-:‬‬
‫‪long‬‬ ‫‪short‬‬
‫المعرف هو ذلك السم الذي ٌخزن به قٌم المتغٌرات متل التابت أو المتغٌر‬
‫أو الدالة ‪.‬‬ ‫سعة التخزٌن‬ ‫حجمه ‪ 64‬بت‬ ‫حجمه ‪ 66‬بت‬
‫المدى‬ ‫‪-2147483648 to‬‬ ‫‪-32768 to‬‬
‫‪ )3‬حدد صالحٌة أو عدم صالحٌة كل من التوابت اآلتٌة مع ذكر نوعها ‪-:‬‬ ‫‪+2147483647‬‬ ‫‪32767‬‬

‫‪oxdk‬‬ ‫غٌر صالح و ٌجد أن ٌكون بٌن عالمتً‬ ‫‪double‬‬ ‫‪float‬‬


‫التنصٌص المزدوجة و ذا تم اعتباره سلسلة‬
‫سعة التخزٌن‬ ‫حجمه ‪ 66‬بت‬ ‫حجمه ‪ 23‬بت‬
‫’‪‘//2‬‬ ‫غٌر صالحوألنه ال ٌمكن وضع أكتر من حرف‬
‫المدى‬ ‫‪1.7E-308 to‬‬ ‫‪3.4E-38 to‬‬
‫أو رمز واحد داخل عالمتً التنصٌص المفردة‪.‬‬
‫‪1.7E+308‬‬ ‫‪3.4E+38‬‬
‫‪0.126e3‬‬ ‫صالحو (عدد حقٌقً) ‪.‬‬
‫‪-456‬‬ ‫صالح و(عدد صحٌح) ‪.‬‬
‫‪string‬‬ ‫‪character‬‬
‫‪oxAF‬‬ ‫غٌر صالح و ٌجد أن ٌكون بٌن عالمتً‬ ‫هً مجموعة من الحروف‬ ‫هو حرف أو رقم أو رمز‬
‫التنصٌص المزدوجة و ذا تم اعتباره سلسلة‬ ‫أواألرقام أو الرموز سواء كانت‬ ‫ٌوضع بٌن عالمتً‬
‫‪56L‬‬ ‫غٌر صالح و ألنه ٌجد أن ٌكون بٌن‬ ‫رموز خاصة أو غٌر ذلك بشرط‬ ‫التنصٌص المفردة (')‬
‫عالمتً التنصٌص المزدوجة ‪.‬‬ ‫أن توضع بٌن " "‬
‫‪012‬‬ ‫صالح و (عدد صحٌح) ‪.‬‬
‫‪ )2‬ماهً المعرفات غٌر المقبولة مع ذكر السبد لآلتً ‪-:‬‬ ‫‪variables‬‬ ‫‪identifiers‬‬
‫هو ذلك االسم الذي ٌخزن هً أسماء رمزٌة ٌخصص لهها‬
‫‪Double‬‬ ‫مقبول‬ ‫بههه قههٌم المتغٌههرات و وقههد أمههاكن تخهههزٌن بالههذاكرة تتغٌهههر‬
‫?‪Whynot‬‬ ‫غٌر مقبول وٌحتوي على رمز خاص؟‬ ‫ٌكهههون تابهههت او متغٌهههر او قٌمتههها حسههد الدخههالو وٌمكههن‬
‫الرجهههههوه لٌهههههها أتنهههههاء تنفٌهههههد‬ ‫دالة ‪.‬‬
‫‪-tax-rate‬‬ ‫غٌر مقبول وٌحتوي على رمز خاص‪-‬‬
‫‪K:66‬‬ ‫غٌر مقبول وٌحتوي على رمز خاص ‪:‬‬ ‫البرنامج‬
‫‪Student‬‬ ‫مقبول‬ ‫‪ )7‬أعط بعض األمتلة عن كل فقرة من فقرات التمرٌن (‪.)6‬‬
‫‪name‬‬ ‫مقبول‬
‫غٌر مقبول وٌحتوي على رمز خاص‪-‬‬ ‫‪long‬‬ ‫;‪x=500000000‬‬ ‫‪string‬‬ ‫"‪"Ali‬‬
‫‪nice-to-meet-you‬‬
‫‪short‬‬ ‫;‪x=0‬‬ ‫'&'=‪character x‬‬
‫‪5tests‬‬ ‫غٌر مقبول و ٌبدأ برقم‬
‫‪double‬‬ ‫;‪x=6.6E6‬‬ ‫‪identifier x_1‬‬
‫”‪“Quctation‬‬ ‫غٌر مقبول وٌحتوي على رمز خاص"‬
‫‪float‬‬ ‫;‪x=3.4‬‬ ‫‪varibles‬‬ ‫‪z‬‬
‫‪totalsum‬‬ ‫مقبول‬
‫‪first name‬‬ ‫غٌر مقبول وألنه ٌحتوي على فراغ‬ ‫‪ )8‬حدد أي التعرٌفات اآلتٌة غٌر صحٌحة مع ذكر السبد ‪.‬‬

‫‪ )6‬عرف الكلمات المحجوزة مع ذكر تالث منها ‪.‬‬ ‫;‪int FLOAT‬‬ ‫صحٌح ‪.‬‬
‫هً الكلمات التً ال ٌمكن استعمالها كمتغٌرات حتى ال تسبد رباك‬
‫غٌر صحٌح و ألن ‪ٌ LONG‬جد أن‬
‫للمترجم أتناء تنفٌذ البرنامج‬
‫;‪LONG integer‬‬ ‫تكون باألحرف الصغٌرة حتى ٌتعامل‬
‫)‪(for - if - else‬‬
‫معها المترجم بالشكل الصحٌح ‪.‬‬
‫;‪unsigned float x‬‬ ‫‪ unsigned‬هو نوه من أنواه العدد‬
‫الصحٌح ولٌس العدد الحقٌقً ‪.‬‬
‫‪ )5‬ما هو المقصود بكلمة ‪ comment‬؟ ومتى ٌتم استخدامها مع عطاء‬ ‫;‪char char1;char2‬‬ ‫ٌجد أن توضع فاصلة غٌر منقوطة‬
‫بعض األمتلة على ذلك ‪.‬‬ ‫بٌن المتغٌرٌن ‪cha1,char2‬‬
‫هً أوامر اٌضاحٌة لٌس لها أي تأتٌر وال تعتبر جزء من البرنامج و‬
‫;‪double density‬‬ ‫صحٌح ‪.‬‬
‫تستخدم لتسهٌل عادة قراءة البرنامج أو تعدٌله من قبل المبرمج و أو لشرح‬
‫وبٌان السبد وراء أي شًء تفعله و ٌبدأ التعلٌق بالرمزٌن (*‪ )/‬وٌنتهً‬ ‫;‪short way,to_go‬‬ ‫صحٌح ‪.‬‬
‫بالرمزٌن (‪. )*/‬‬

‫الباب األول‬ ‫‪Page 1‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬

‫‪)8‬‬
‫‪long float x and y‬‬ ‫ٌجد أن توضع فاصلة بٌن المتغٌرٌن ‪ x,y‬بدال من ‪ and‬و كما‬
‫ٌجد أن تضاف فاصلة منقوطة بنهاٌة الجملة ‪.‬‬
‫;)‪char string(50‬‬ ‫ٌجد أن ٌوضع طول السلسلة بٌن قوسٌن مربعٌن ]‪.[50‬‬

‫‪ )9‬اذكر ما هو الخطأ ذا كان هناك خطأ مع ذكر السبد لما ٌلً ‪-:‬‬

‫‪a‬‬ ‫‪/* This is an example /* using */ comment statement */‬‬

‫كلنا ٌعلم بأن التعلٌق ٌبدأ بالرمز (*‪ )/‬وٌنتهً بالرمز (‪ )*/‬و علٌه ٌنتهً التعلٌق عند كلمة )‪ )using‬و‬
‫وبالتالً ٌكون الجزء الباقً (‪ )comment statement */‬هو غٌر معرف لذا المترجم ‪.‬‬

‫‪b‬‬ ‫‪/* This is an example /* using comment statement*/‬‬

‫لٌس هناك خطأ‬

‫‪c‬‬ ‫‪//* This is an example using comment statement *//‬‬

‫هذا النوه من التعلٌقات ٌسمى التعلٌق بالسطر الواحد و فً حٌن أن التعلٌقات السابقة تسمى التعلٌقات‬
‫باألسطر العدٌدة و التعلٌق بالسطر الواحد دائما ٌبدأ بالرمزٌن ‪ //‬و تمت ضافة هذه الخاصٌة فً لغة ‪C++‬‬
‫القٌاسٌة و الكتاد المقرر غٌر متطرق أبدا لهذا النوه من التعلٌقات ‪.‬‬

‫الباب األول‬ ‫‪Page 2‬‬


‫إجابة الباب الثاني‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

‫) إجعل الحاسب يطبع اسمك كامال بداية من العمود التاسع والسطر‬1 : ‫) اكتب برنامجا لقراءة أطوال أضالع مستطيل مع حساب‬5 G
.‫السادس‬ . ‫محيطه = مجموع أطوال أضالعه‬
. ‫ العرض‬x ‫مساحته = الطول‬ G
#include<stdio.h>
main() #include<stdio.h>
{ main()
printf("\n\n\n\n\n\t mohamed"); {
} float l,w,x,y;
printf("Enter value of long and wide \n");
‫) المطلوب كتابة برنامج مهمته طباعة اسمك كامال في السطر‬2
scanf("%f%f",&l,&w);
‫ وعمرك في السطر‬، ‫ وعنوانك في السطر السادس‬، ‫الثالث‬
x=l+w+l+w;
. ‫ واحدة فقط‬printf() ‫الثامن باستخدام دالة‬
y=l*w;
#include<stdio.h>
printf("circumference = %.3f \n area = %.3f ",x,y);
main()
}
{
printf("\n\n Mohamed Drebika \n\n\n Tripoli -: ‫) أوصف ناتج اآلتي‬6
\n\n 25years”);
} ‫ت‬ ‫المعادلة‬ ‫النتيجة‬
a printf(“a=%05d”,555); a=00555
‫) اكتب جمل اإلشهار المناسبة لرقم الدواء وسعره وتاريخ‬3
. ‫صالحيته‬ b printf(“b=%5s”,”abc”); b=bbabc
long number;
float cost; c printf(“c=%E”,23.68956); c=2.368956E+01
char date[15]; d printf(“d=%.2f”,23.63936); d=23.64
‫ المطلوب قراءة هذه البيانات‬، )3( ‫) باستخدام االشهار بالتمرين‬4
e printf(“e=%.0f”,23.61234); e=24
. ‫مع طباعتها بالشكل المناسب‬
#include<stdio.h> f printf(“f=%ld”,2368956); f=2368956
main()
{ g printf(“g=%d”,0<=!(9) ); g=1
long number; h printf(“h=%11.2f”,94.5678); h=bbbbbb94.57
float cost ;
char date[15] ; i printf(“i=%7.4f”,94.5377); i=94.5377
printf("Enter Serial No. of medicine\n"); j printf(“j=%2c”,’&’); j=b&
scanf("%ld",&number);
printf("Enter cost of medicine\n"); k printf(“k=%8d”,-4321); k=bbb-4321
scanf("%f",&cost) ;
l printf(“l=%d”,’A’>’a’); I=0
printf("Enter Expired date of medicine \n");
scanf("%s",&date); m printf(“m=%2c”,’&’); m=b&
n printf(“n=%f”,3456.4321); n=3456.432100
printf("Serial No. of medicine is %ld \ncost of
medicine is %f \nExpired date is %s”,number,cost
,date);
}

‫الباب الثاني‬ Page 3


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

G
-: ‫) افحص األخطاء مع التصحيح إن وُ جدت في البرامج اآلتية‬7 G
a) b printf(“\nA*B===>%ld”,2000*1000);
‫قبل التصحيح‬ ‫بعد التصحيح‬
#include<sdio.h> ‫الناتج‬ A*B===>2000000
main() main() c printf(“\nSUB\nTRAC\nTION\n%d”,35-8);
{ {
int a,y,float b, SUB
int a,y; float b;
‫الناتج‬ TRAC
scanf(“%D”;A); scanf(“%d”,&a);
TION
printf(“%f”,b); scanf(“%f”,&b); 27
printf(“/n/n”)y=A+b; printf(“\n\n”);y=a+b; d short M=-9;
printf(“A=%d , B= printf(“A=%d , B= printf(“\nM equal to %d”,-M);
%d, Y=%d,a,b,y”); %f, Y=%d”,a,b,y); ‫الناتج‬ M equal to 9
} }
،scanf() ‫ عن طريق الدالة‬55,66,5,6 ‫) بعد إدخال القيم‬9
b) ‫ واحدة ينتج عنها إظهار البيانات‬printf () ‫اكتب دالة‬
‫قبل التصحيح‬ ‫بعد التصحيح‬ -: ‫السابقة بالشكل اآلتي‬
#include<sdio.h> THE SUM OF 66 AND 55 = 121
main() main() THE PRODUCT OF 6 TIMES 5 IS EQUAL TO 30
{ {
#include<stdio.h>
int x, float y ,x; long X; float y ,x; main()
x=45.0; X=9876543; x=45.0; {
scanf(“A=%f” ,x); X=9876543; int a,b,c,d;
printf(“x+y=%d”,&x,&y); printf(“x=%f” ,x); scanf(“%d%d%d%d”,&a,&b,&c,&d);
} y=X+x; printf("THE SUM OF %d AND %d = %d \nTHE
printf(“x+X=%f”,y); PRODUCT OF %d TIMES %d IS EQUAL TO %d”
} ,b,a,a+b,d,c,c*d);
}
-: ‫) استخدم الورقة والقلم أوال ثم جهاز الحاسب ثانيا إليجاد الناتج اآلتي‬8
‫ بحيث‬17-2-2011 ‫) اكتب برنامجا يقوم بإدخال التاريخ‬10
‫يتم قراءة اليوم والشهر والسنة بالمتغيرات‬
a printf(“\n%.0f plus %.2f <%.3f”,25.86,16.013,50.5662);
‫ مع إظهارها بالصورة اآلتية‬day,manth,yaer
our date is 17/2/2011
‫الناتج‬ 26 plus 16.01 < 50.566

‫الباب الثاني‬ Page 4


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

)10 ‫) أعــد كتابة البرنامج بالتمرين السابق عـلى أن تكون النتائج بالشكل التالي‬12 G
#include<stdio.h> -:
main() Student Report G
{ -----------------
int day,month,year; Id Number test_1 test_2 test_3 total avg
printf("Enter day month and year\n"); -------------------------------------------------------------------------------
scanf("%d %d %d",&day,&month,&year);
17022011 69.5 71.0 80.0 22.05 73.5
printf("out date is %d/%d/%d",day,month,year);
#include<stdio.h>
}
main()
{
‫) قم بكتابة برنامج يقوم باستقبال رقم قيد الطالب ودرجاته في‬11
long int ID;
-: ‫ثالثة امتحانات التي قد تكون على النحو التالي‬
float test1,test2,test3,total,avg;
Student ID# is 17022011 printf("Enter student ID number\n");
Test1==>69.5 scanf("%ld",&ID);
Test2==>71.0 printf("Enter mark of first test please\n");
Test3==>80.0 scanf("%f",&test1);
Average==>7305 printf("Enter mark of second test please\n");
scanf("%f",&test2);
#include<stdio.h>
printf("Enter mark of third test please\n");
main()
scanf("%f",&test3);
{
total=test1+test2+test3;
long int ID;
float test1,test2,test3,avg;
avg=(total)/3;
printf("Enter ID number of student\n");
scanf("%ld",&ID);
printf("\t\tStudent Report\n");
printf("Enter mark of first test please\n");
printf("\t\t--------------\n");
scanf("%f",&test1);
printf("Id Number\ttest_1\ttest_2\ttest_3\ttotal\tAvg\n");
printf("Enter mark of second test please\n");
printf("--------------------------------------------\n");
scanf("%f",&test2);
printf("Enter mark of third test please\n");
printf("%8ld\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f",ID,test1,test2,
scanf("%f",&test3);
test3,total,avg);
}
avg=(test1+test2+test3)/3;
-: ‫) علي فرض أنك أعطيت اإلشهار بالشكل التالي‬13
printf("Student ID# is %ld\n",ID);
long a=-77665544; float b=765.56713;
printf("-----------------------\n");
int x=8764; char c= ‘R’ ;
printf("Test 1 ==> %.1f \n",test1); -: ‫صف ناتج كل فقرة من الفقرات اآلتية‬
printf("Test 2 ==> %.1f \n",test2);
printf("Test 3 ==> %.1f \n",test3); a) printf(“\nA1=%9ld B1=%f”,a,b);
printf("Average ==> %.1f \n",avg);
} ‫ الناتج‬A1=-77665544 B1=765.567139

‫الباب الثاني‬ Page 5


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

G
)13 ‫ مع إيجاد حاصل‬X,Y ‫) قم بكتابة برنامج مهمته قراءة قيمتين‬15
c) printf(“\nA3=%11ld B3=%10.3f”,a,b); -: ‫جمعهما وضربهما على أن يكون الناتج بالصورة التالية‬ G

‫ الناتج‬A3=bb-77665544 B3=bbb765.567 X Y X+Y X*Y


-----------------------------------------
d) printf(“A4=%8ld B4=%.0f”,a,b); …. …. …. ….

‫ الناتج‬A4=-77665544 B4=766 #include<stdio.h>


main()
e) printf(“\nA5=%11ld B5=%10.3f”,a,b); {
float x,y;
‫ الناتج‬A5=bb-77665544 B5=bbb765.567 printf("Enter Value of x and y\n");
scanf("%f%f",&x,&y);
f) printf(“\nB6=%E B7=%.2f”,b,b); printf("X\tY\tX+Y\tX*Y\n");
printf("-----------------\n");
‫ الناتج‬B6=7.655671E+02 B7=765.57 printf("%3.1f\t%3.1f\t%3.1f\t%3.1f",x,y,x+y,x*y);

g) printf(“\nX1=%07d X2=%2d C=%4c”,x,x,c); }

‫ الناتج‬X1=0008764 X2=8764 C=bbbR

-: ‫) إذا ما أعطيت اإلعالنات التالية‬14

float X; long Y; int A ; char B,C;


‫ بفرض أن المدخالت ستكون كالتالي‬ ‫) اكتب برنامجا يقرأ درجة الحرارة بالفهرنهايت ثم يطبعها‬16
B=’b’ A=77 C=’c’ Y=123456789 X=123.456444 𝟓 -: ‫مستخدما المعادلة‬
C = (F-32)
𝟗

a) scanf(“%f%d%c’,&X,&A,&C); #include<stdio.h>
printf(“\nX=%f A=%d C=%c”,X,A,C); main()
‫الناتج‬ X=123.456444 A=77 C=c {
float c,f;
b) scanf(“%c%c%f”,&B,&C,&X,&A);
printf("Enter Value of F\n");
printf(“\nB=%3cC=%cX=%fA=%d”,B,C,X,A);
scanf("%f",&f);
‫الناتج‬ B=bbbC=cX=123.456444A=77
c=5.0/9*(f-32);
c) scanf(“%ld%c%f”,&Y,&C,&X);
printf("C=%f",c),
printf(“Y=%ld X=%.0fC=%c”,Y,X,C);
}
‫الناتج‬ Y=123456789 X=123C=c
d) scanf(“%ld%f”,&Y,&X);
printf(“\nY=%ld X=%f”,Y,X);
‫الناتج‬ Y=123456789 X=123.456444

‫الباب الثاني‬ Page 6


‫إجابة الباب الثالث‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
4799297090 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫) تمرٌنات‬7.3، ‫) المطلوب قراءة مجموعة من البٌانات الصحٌحة من السطر األول‬4
int i=5,j=-3; ‫ والحرفٌة من السطر الثالث مع طباعة‬، ً‫والحقٌقٌة من السطر الثان‬
char x=’A’; -:ً‫) على فرض أن لدٌنا اإلعالن أوجد ناتج اآلت‬1 ً‫البٌانات الحرفٌة فً السطر األول والحقٌقٌة فً الثانً والصحٌحة ف‬
a) printf(“%d”,i*(-j)); 15 . ‫السطر الثالث‬
#include<stdio.h>
b) printf(“%o”,i*(-j)); 17 main()
{
c) printf(“%d”,x+2==67); 1 int i,j,k;
float a,b,c;
e) printf(“%d”,++j + --i); 2 char w, x,y,z;
scanf("%d%d%d",&i,&j,&k);
f) printf(“%d”,i++ + j++ + ++i); 9 scanf("%f%f%f",&a,&b,&c);
scanf("%c%c%c",&w,&x,&y,&z);
g) printf(“%d”,(i!=5) || (!(i<j)) 1 printf("%5c%5c%5c\n%5.2f%5.2f%5.2f\n%5d%5d%5d",
x,y,z,a,b,c,i,j,k);
h) printf(“%d”,!(i==j) &&i+j != i*(i-j)) 1 }

i) printf(“%d”,(i==j)|| i+j == i*(i-j)); 0 ‫) على فرض أن لدٌنا اإلعالن‬1


int i=5,j=-3;
k) printf(“%d”,(i<=j)&&(j !=i-8) || (j<0)); 1 -: ً‫أوجد ناتج اآلت‬

-: ‫) أي من الجمل التخصٌص اآلتٌة مقبولة‬9 a) printf(“A=%d”,i/=3); A=1

a) A B = a+b+c,2d; ‫غٌر مقبولة‬ b) printf(“B=%d”,(i*(j*j)+i*4)<=’A’); B=1


b) 5m=5[m+3n]; ‫غٌر مقبولة‬
c) printf(“C1=%d C2=%d”,++i,++i); C1=7 C2=6
c) X=Y=5=Z; ‫غٌر مقبولة‬
d) printf(“D=%d”,i--*i); D=20
d) char=c1-c2+’a’ ‫غٌر مقبولة‬
e) printf(“E=%d”, i++ +j++ + ++i); E=9
e) ++k/=k++; ‫مقبولة‬
f) printf(“F=%d”,(i !=5) || (!(i<j)) ); F=1
-: ً‫) أوصف ناتج اآلت‬3 g) printf(“G=%d”,!(i==j)&& i+j !=i*(i-j)); G=1
a) printf(“I=%05d”,555); I=00555
h) printf(“H=%d”,(i==j)||i+j==i*(i-j)); H=0
b) printf(“k-->%5s”,abc); k-->bbabc
c) printf(“k-->%E”,23.689); k-->2.368900E+01 i) printf(“I=%d”,(i<=j)&&(j !=i-8) || (j<0)); I =1
d) printf(“k-->%.2f”,23.689); k-->23.69

e) printf(“k-->%.0f”,23.689); k-->24

f) printf(“k-->%d”,0<!(-9)); k-->0

‫الباب الثالث‬ Page 7


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪4799297090‬‬

‫‪ )2‬أوجد قٌمة المتغٌر ‪ R‬لكل من التعابٌر اآلتٌة فً حالة ‪-:‬‬ ‫‪ ‬إجابة تمرٌن رقم (‪)9‬‬
‫;‪int R,a=4,b=9,c=7‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫{‬
‫‪a) R=(b%a + ++a/2/2) %2‬‬ ‫‪R=1‬‬ ‫;‪int n,weeks,days‬‬
‫;)"‪printf("Enter total number of Days \n‬‬
‫‪b) R=b*4%(b-a)<=1‬‬ ‫‪R=1‬‬
‫;)‪scanf("%d",&n‬‬
‫)‪c‬‬ ‫‪R=++a+ b-- == (a* (a-2)) R=0‬‬ ‫;‪weeks=n/7‬‬
‫)‪d) R=a+a%b/ (b/5-1‬‬ ‫‪divide error‬‬ ‫;‪days=n%7‬‬
‫)‪e‬‬ ‫‪R=c++ % a + c/3‬‬ ‫‪R=5‬‬ ‫;)‪printf("%d weeks and %d days",weeks,days‬‬
‫}‬
‫)‪f‬‬ ‫‪R=b+b/a-(c+ ++a)/2‬‬ ‫‪R=4‬‬
‫)‪g‬‬ ‫‪R=a+(++b*a)%c*c-a‬‬ ‫‪R=35‬‬

‫‪ )10‬المطلوب كتابة برنامج إلٌجاد قٌمة المتغٌر ‪ y‬حٌث ‪:‬‬


‫‪ )3‬قم بكتابة برنامجا كامالً ٌقرأ نصف قطر دائرة ‪ R‬ثم ٌحسب‬
‫وٌطبع مساحتها ‪ A‬ومحٌطها ‪ B‬علما ً بأن ‪:‬‬
‫‪y‬‬ ‫‪+‬‬

‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫>‪#include<stdio.h‬‬
‫{‬ ‫>‪#include<math.h‬‬
‫;‪float r,pi,A,B‬‬ ‫)(‪main‬‬
‫;‪pi=22.0/7‬‬
‫{‬
‫;)"‪printf("Enter value of R \n‬‬
‫;)‪scanf("%f",&r‬‬ ‫;‪float n,b,y‬‬
‫;‪A=pi*r*r‬‬ ‫;)"‪printf("enter value of b and y and n \n‬‬
‫;‪B=2*pi*r‬‬ ‫;)‪scanf("%f %f %f",&b,&y,&n‬‬
‫;)‪printf("A=%5.3f \n B=%5.3f",A,B‬‬ ‫;‪y=pow((y-b)/5,n)+b/3‬‬
‫}‬

‫‪ )4‬سؤال مكرر – مالحظة ‪ -:‬ترقٌم األسئلة كما هو موجود بالكتاب‬ ‫;)‪printf("y=%5.3f",y‬‬


‫}‬
‫‪ )9‬صمم برنامجا ٌقرأ عدد أٌام ثم تحوٌله إلى أسابٌع وأٌام مع‬
‫طباعة الناتج فمثال ‪ٌ 27‬وم ٌطبع عدد األسابٌع ‪ 3‬وعدد األٌام‬
‫المتبقٌة ‪.6‬‬

‫الباب الثالث‬ ‫‪Page 8‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪4799297090‬‬

‫‪ )11‬اكتب برنامجا إلسناد اسم الطالب ‪ SOFYAN SOHIAB GAYED‬إلى المتغٌر ‪ name‬وعمره ‪ 4.5‬إلى ‪ age‬ثم اكتب دالة اإلخراج‬
‫المناسبة إلظهار هذه البٌانات بالشكل التالً ‪-:‬‬

‫‪Hi****SOFYAN SOHAIAB GAYED **** your age is 4.5 years old‬‬

‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫{‬
‫;"‪char name[]="SOFYAN SOHAIB GAYED‬‬
‫;‪float age=4.5‬‬
‫;)‪printf("Hi****%s****your age is %5.1f years old",name,age‬‬
‫}‬

‫‪ )12‬اكتب برنامجا كامال لقراءة العجلة الثابتة ‪ A‬والزمن ‪ T‬ثم احسب المسافة ‪ D‬والسرعة النهائٌة ‪ V‬حٌث ‪-:‬‬

‫*‪D=0.5*A‬‬
‫‪V=AT‬‬
‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫{‬
‫;‪float A,T,D,V‬‬
‫;)"‪printf("Enter Value of A and T\n‬‬
‫;)‪scanf("%f%f",&A,&T‬‬
‫;‪D=0.5*A*T*T‬‬
‫;‪V= A*T‬‬
‫;)‪printf("D=%5.2f V=%5.2f",D,V‬‬
‫}‬

‫الباب الثالث‬ ‫‪Page 9‬‬


‫إجابة الباب الرابع‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫) تمرٌنات‬6.4 ‫ تمثل درجة الحرارة‬a ‫) صمم برنامجا لقراءة قٌمة‬2
-: ‫) باستخدام جمل اإلشهار والتخصٌص اآلتٌة‬1 ‫ أو‬c ‫ ٌمثل نوع هذه الدرجة (مئوٌة‬op ‫وحرفا‬
int x=2,y=4,z=8,w=5; ‫ إذا كانت الدرجة مئوٌة‬f ‫ ) ثم ٌحسب‬f ‫فهرنهٌت‬
int r,a=1,b=0; :‫ إذا كانت فهرنهٌت حٌث‬c ‫وٌحسب‬
‫ لكل من الفقرات اآلتٌة‬z ‫ أو‬r ‫أوجد قٌمة المتغٌر‬
a if(a)
z+=x+y; f= [32+a] c= [a-32]
else
r=z-y;
‫ ناتج البرنامج‬z=14
#include<stdio.h>
b if(!a || b && !y) main()
Z=x+y; {
else float a,f,c;
r=z+w*y; char op;
‫ ناتج البرنامج‬r=28 printf("Enter Type Of Operation, c For
c if(z/y==x) Celsius f For Fahrenheit\n");
z=++x+y; scanf("%c",&op);
else printf("Enter Value Of a\n");
r=--z-y; scanf("%f",&a);
‫ناتج البرنامج‬ z=7 switch(op)
{
d if(w!=x+z|| b !=a) case 'c':
z=--x+y; f=9.0/5*(32+a);
else printf("F=%5.3f",f);
r=++z+y; break;
‫ ناتج البرنامج‬z=5
case'f':
e if(2*x<=z && (w*x-z+x)) c=5.0/9*(a-32);
{ printf("C=%5.3f",c);
int a=3; break;
z/=a*x+y;
}
default :printf("Input Error!");
else
}
z=a*y+z;
}
r=z+y;
‫ ناتج البرنامج‬r=4 z=0

f if(a==!b && !(x+y==z-x))


z+=w;
else {
a+=6; w+=a; }
r=z+w;
‫ ناتج البرنامج‬r=20

‫الباب الرابع‬ Page 10


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬
‫‪ )3‬اكتب برنامجا ٌقرأ ثالثة امتحانات وٌطبع األكبر فٌهم‬ ‫‪ )5‬مستخدما جملة ‪ switch‬أوجد قٌمة المتغٌر ‪ y‬حٌث ‪-:‬‬
‫‪x+10 if x>0‬‬
‫>‪#include<stdio.h‬‬ ‫=‪y‬‬ ‫‪1000 if x=0‬‬
‫)(‪main‬‬ ‫‪25-x if x<0‬‬
‫{‬
‫;‪float a,b,c,max=0‬‬ ‫>‪#include<stdio.h‬‬
‫;)"‪printf("Enter three marks\n‬‬ ‫)(‪main‬‬
‫;)‪scanf("%f %f %f",&a,&b,&c‬‬ ‫{‬
‫))‪if ((a>=b)&&(a>=c‬‬ ‫;‪int x,y‬‬
‫;‪max=a‬‬ ‫;)"‪printf("Enter Value Of x\n‬‬
‫‪else‬‬ ‫;)‪scanf("%d",&x‬‬
‫))‪if((b>=a)&&(b>=c‬‬ ‫)‪switch(x>0‬‬
‫;‪max=b‬‬ ‫{‬
‫‪else‬‬ ‫;)‪case 1: printf("y=%d",x+10‬‬
‫;‪max=c‬‬ ‫;‪break‬‬
‫)‪case 0: switch(x<0‬‬
‫;)‪printf("Max=%5.3f",max‬‬ ‫{‬
‫}‬ ‫;)‪case 1: printf("y=%d",25-x‬‬
‫;‪break‬‬
‫‪ )4‬المطلوب كتابة برنامج ٌقرأ مرتب البائع ومقدار مبٌعاته ثم ٌحسب‬ ‫;)"‪default :printf("y=1000‬‬
‫النسبة المئوٌة التً هً على النحو التالً ‪-:‬‬ ‫}‬
‫‪ %2‬إذا كان مبٌعاته أقل من أو تساوي ثالثة أضعاف مرتبه ‪.‬‬ ‫}‬
‫‪ %3‬إذا كانت مبٌعاته أكثر من ثالثة أضعاف مرتبه ‪.‬‬ ‫}‬
‫‪ %4‬إذا زادت مبٌعاته على خمسة أضعاف مرتبه ‪.‬‬
‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫‪ )6‬اكتب برنامجا لقراءة سطر واحد ٌحتوي على رقم صحٌح ‪A‬‬
‫ورقم حقٌقً ‪ B‬وحرفً ‪ C‬ثم احسب العملٌات‪A/B , A*B ,A-B‬‬
‫{‬
‫‪ A+B‬اعتماداً على الحرف ‪ C‬الذي قد ٌكون أحد المؤثرات‬
‫;‪float salary,sell,percent,bonus‬‬
‫(‪ )+,-*,/‬اطبع الرسالة المناسبة مع األخد فً اإلعتبار أن‬
‫;)"‪printf("Enter Value of Salary and sell \n‬‬ ‫الحرف المدخل لم ٌكن أحد المؤثرات السابقة مستخدما ً جملة‬
‫;)‪scanf("%f%f",&salary,&sell‬‬ ‫‪ if‬مرة وجملة ‪ switch‬مرة اخرى ‪.‬‬
‫)‪if(sell>5*salary‬‬
‫;‪percent=0.04‬‬ ‫‪ ‬لحل هذه المسألة نبدأ أوال باستخدام جملة التبدٌل ‪Switch‬‬
‫‪else‬‬ ‫‪Statement‬‬
‫)‪if(sell>3*salary‬‬
‫;‪percent=0.03‬‬
‫‪else‬‬
‫;‪percent= 0.02‬‬
‫;‪bonus=percent*sell‬‬
‫;)‪printf("percent is %.3f and bonus is %.3f",percent,bonus‬‬
‫}‬

‫الباب الرابع‬ ‫‪Page 11‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
Switch Statement ‫) باستخدام جملة التبدٌل‬6 ‫ األولى تمثل‬، ‫) اكتب برنامجا ٌقوم بادخال ثالث قٌم صحٌحة‬7
‫ ثم اطبع هذه البٌانات‬، ‫الٌوم والثانٌة تمثل الشهر والثالثة السنة‬
#include<stdio.h> . ‫مع كتابة الٌوم بالحروف‬
main() #include <stdio.h>
{ main ()
int a; {
float b; int y,d,m,c,D;
char c; printf("input the year :");
printf("Enter first number then type of operation scanf("%d",&y);
after that enter second number\n"); printf("\n input the month: ");
scanf("%d%c%f",&a,&c,&b); scanf("%d",&m);
switch(c) printf("\ninput date today: ");
{ scanf("%d",&D);
case '+': printf("answer is %5.2f",a+b);
d=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7+(D+1);
break;
case '-': printf("answer is %5.2f",a-b);
if(y>=2000 && y<=10000 &&D>=1 && D<=31 &&
break;
m>=1 &&m<=12)
case '*': printf("answer is %5.2f",a*b);
{
break;
if((y%4==0)&&(y%100!=0)||(y%400==0))
case '/': printf("answer is %5.2f",a/b);
{
break;
if(m==1)
c=d;
default :printf("Input Error!");
else
if(m==2)
}
c=(31%7)+d;
}
else
if(m==3)
if statement ‫) باستخدام جملة إذا‬6 c=(60%7)+d;
#include<stdio.h> else
main() if(m==4)
{ c=(91%7)+d;
int a; else
float b; if(m==5)
char c; c=(121%7)+d;
printf("Enter first number then type of operation else
after that enter second number\n"); if(m==6)
scanf("%d%c%f",&a,&c,&b); c=(152%7)+d;
if(c=='+') printf("answer is %5.2f",a+b); else
else if(c=='-') printf("answer is %5.2f",a-b); if(m==7)
else if(c=='*') printf("answer is %5.2f",a*b); c=(182%7)+d;
else if(c=='/') printf("answer is %5.2f",a/b); else
else printf("Input Error!");
}

‫الباب الرابع‬ Page 12


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
i )7( ‫ باقً إجابة تمرٌن رقم‬ ii )7( ‫ باقً إجابة تمرٌن رقم‬
if(m==8) else
c=(213%7)+d; if(m==10)
else c=(273%7)+d;
if(m==9) else
c=(244%7)+d; if(m==11)
else c=(304%7)+d;
if(m==10) else
c=(274%7)+d; if(m==12)
else c=(334%7)+d;
if(m==11) }
c=(305%7)+d; printf("%d/%d/%d is",D,m,y);
else switch(c%7)
if(m==12) {
c=(335%7)+d; case 0:printf(" Fri");
} break;
else case 1:printf(" Saturday");
{ break;
if(m==1) case 2:printf(" Sunday");
c=d; break;
if(m==2) case 3:printf(" Monday");
c=(31%7)+d; break;
else case 4:printf(" Tuesday");
if(m==3) break;
c=(59%7)+d; case 5:printf("Wednesday") ;
else break;
if(m==4) case 6:printf("Thursday");
c=(90%7)+d; break;
else }
if(m==5) }
c=(120%7)+d; else
else printf(" there is error in one of inputs\n\n");
if(m==6) }
c=(151%7)+d;
else ‫) اكتب برنامجا لقراءة ثالث درجات مع إٌجاد مجموع أعلى‬8
if(m==7) . ‫درجتٌن‬
c=(181%7)+d; #include<stdio.h>
else main()
if(m==8) {
c=(212%7)+d; float a,b,c,max=0;
else printf("Enter three marks\n");
if(m==9) scanf("%f %f %f",&a,&b,&c);
c=(243%7)+d;

‫الباب الرابع‬ Page 13


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

if ((a>=b)&&(b>=c)) else
max=a+b; if(x==4||x==-4)
if((b>=c)&&(c>=a)) {
max=b+c; y=x*x;
if((c>=a)&&(a>=b)) printf("X=%d and X*X= %d\n",x,y);
max=c+a; }
if((a>=c)&&(c>=b)) else
max=a+c; printf("Sorry data out of range\n");
if((b>=a)&&(a>=c)) }
max=b+a; ‫) المطلوب كتابة برنامج مهمته استقبال رقم قٌد الطالب ودرجاته‬11
if((c>=b)&&(b>=a))
‫فً االمتحان األول والثانً والنهائً ثم ٌطبع رقم القٌد ومجموع‬
max=c+b;
-: ً‫درجاته مع حالته استناداً على اآلت‬
printf("Max=%5.3f",max); ‫الحالة‬ ‫الدرجة‬
} Fail 51 ‫أصغر من‬
if ‫) مستخدما جملة‬4-5-4( ‫) أعد كتابة مثال‬9 Pass 65 ‫ وأصغر من‬51 ‫أكبر من أو تساوي‬
#include<stdio.h> Good 75 ‫ وأصغر من‬65 ‫أكبر من أو تساوي‬
main() V.Good 85 ‫ وأصغر من‬75 ‫أكبر من أو تساوي‬
{ Exel. 111 ‫ وأصغر من أو تساوي‬85 ‫أكبر من أو تساوي‬
int x,y;
#include<stdio.h>
printf("Enter Value Of X\n");
main()
scanf("%d",&x);
{
if(x==-6)
long int ID;
{
float test1,test2,final,total;
y=(x*x)-x;
printf("Enter ID number for student\n");
printf("X=%d and (x*x)-x= %d\n",x,y);
scanf("%ld",&ID);
}
printf("Enter marks of test1,test2 and final\n");
else
scanf("%f%f%f",&test1,&test2,&final);
if(x==1||x==5)
total=test1+test2+final;
{
y=(x*10)/2; printf("ID number of student is %ld\n",ID);
printf("X=%d and (X*10)/2= %d\n",x,y); printf("Total mark of student is %f\n",total);
} if (total<50) printf("Fail\n");
else else
if(x==2) if ((total>=50)&&(total<65)) printf("Pass\n");
{ else
y=x+x; if ((total>=65)&&(total<75)) printf("Good\n");
printf("X=%d and X+X= %d\n",x,y); else
} if ((total>=75)&&(total<85)) printf("V.Good\n");
else
if ((total>=85)&&(total<=100)) printf("Exel.\n");
}

‫الباب الرابع‬ Page 14


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)11 )13
#include<stdio.h> -: ً‫ماهو الناتج عند تنفٌد اآلت‬
main()
{ a { int x=11,y=9;
int x; if(x<10)
float y; if(x>y)
printf("Please enter number\n"); printf("Yes User\n");
scanf("%d",&x); else
if(x%2==0) y=x/2.0; printf("No User\n");
else y=x/4.0; printf("Good Bye User\n");
printf("%f",y); }
} ‫ ناتج البرنامج‬Good Bye User
: ‫) صمم برنامجا لحساب معادلة من الدرجة الثانٌة‬12


x=
b { int x=11,y=9;
‫ إذا‬x= ‫موجبا وطباعة‬ ‫وطباعة الجذرٌن فً حالة التعبٌر‬ if(x==11)
. ‫كان التعبٌر صفرا وطباعة الرسالة المناسبة إذا كان غٌر ذلك‬ if(y<x)
#include<stdio.h> printf("Yes User\n");
#include<math.h> else
main() printf("No User\n");
{ printf("Good Bye User\n");
float a,b,c,x1,x2; }
printf("Program to find roots of ax^2+bx +c \n"); ‫ ناتج البرنامج‬Yes User
printf("enter value of a,b and c \n"); Good Bye User
scanf("%f %f %f", &a ,&b ,&c );
if((b*b-4*a*c)>0)
{
x1=(-b+ sqrt(b*b-4*a*c))/(2*a);
x2=(-b- sqrt(b*b-4*a*c))/(2*a);
printf("the roots of this equation is %5.2f and
%5.2f",x1,x2);
}
if((b*b-4*a*c)==0)
{
x1=x2=-b/2*a;
printf("the roots is equaly %5.2f %5.2f",x1,x1);
}
else
printf("Input Error!");
}

‫الباب الرابع‬ Page 15


‫إجابة الباب اخلامس‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫) تمرٌنات‬7.5 )2
‫' وذلك على‬Z' ‫' إلى‬A' ‫ اطبع الحروف من‬for ‫) باستخدام جملة‬1 65 37
-: ً‫النحو اآلت‬ 22 51
ً
‫ حرفا واحدا فً كل سطر‬ 19 91
#include<stdio.h> 25 52
main() 14 87
{ 74 12
char i;
for(i='A';i<='Z';i++) ‫ثم ٌحسب متوسط كل عمودٌن أوال ومتوسط كل صف ثانٌا مع إٌقاف‬
printf("%c\n",i); . ‫البرنامج إما بعدد السطور أو بادخال قٌمة سالبة فً نهاٌة القٌم‬
} #include<stdio.h>
main()
{
. ‫خمسة حروف بالسطر الواحد‬  int i;
#include<stdio.h> float a,b,sum1=0,sum2=0,avg,avg1,avg2;
main() printf("enter numbers\n");
{ scanf("%f%f",&a,&b);
char i; i=0;
int j=0; while( i<6 && a>=0 && b>=0 )
for(i='A';i<='Z';i++) {
{ sum1=sum1+a;
printf("%c",i); sum2=sum2+b;
j=j+1; avg=(a+b)/2.0;
if(j%5==0) printf("average of row(%d) is %.3f\n",i+1,avg);
printf("\n");
} printf("enter numbers\n");
} scanf("%f%f",&a,&b);
i++;
. ‫كل الحروف فً سطر واحد‬  }
#include<stdio.h> avg1=sum1/i;
main() avg2=sum2/i;
{ printf("average of column 1 is %.3f \n average of
char i; column 2 is %.3f",avg1,avg2);
for(i='A';i<='Z';i++) }
printf("%c",i);
} ‫ من النوع‬n ‫ اكتب برنامجا لقراءة‬، while ‫) باستخدام جملة‬3
-: ً‫الصحٌح ثم أوجد واطبع اآلت‬
-: ‫) المطلوب كتابة برنامج مهمته قراءة القٌم اآلتٌة‬2 a) sum1= 1+2+3+ ... + n
b) sum2= 1-2+3-4+ ... n
c) sum3=x + x/2! + x/3! + ... + x/n!

‫الباب الخامس‬ Page16


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
a) sum1= 1+2+3+ ... + n b ‫) فقرة‬3( ‫ بقٌة إجابة تمرٌن رقم‬
else
#include<stdio.h> sum2=sum2+i;
main() i++;
{ }
int i,n,sum1; printf("%d = ",sum2);
printf("Enter Value of n\n");
scanf("%d",&n); i=1;
sum1=0; while(i<=n)
i=1; {
while(i<=n) if(i==1)
{ printf("%d",i);
sum1=sum1+i; else
i++; if(i%2==0)
} printf("-%d",i);
printf("%d=",sum1); else
printf("+%d",i);
i=1; i++;
while(i<=n) }
{ }
if(i==1)
printf("%d",i); c) sum3=x + x/2! + x/3! + .. + x/n!
else
printf("+%d",i); #include<stdio.h>
i++; main()
} {
} int i,n,fact;
float x,sum3=0;
b) sum2= 1-2+3-4+ ... n
printf("Enter Value of x\n");
scanf("%f",&x);
#include<stdio.h> printf("Enter Value of n\n");
main() scanf("%d",&n);
{ fact=1;
int i,n,sum2; i=1;
printf("Enter Value of n\n"); while (i<=n)
scanf("%d",&n); {
sum2=0; fact=fact*i;
i=1; sum3=sum3+x/fact;
while(i<=n) i++;
{ }
if(i%2==0) printf(" %.2f =",sum3);
sum2=sum2-i;

‫الباب الخامس‬ Page17


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
c ‫) فقرة‬3( ‫ بقٌة إجابة تمرٌن رقم‬ b) sum2= 1-2+3-4+ ... n

i=1; #include<stdio.h>
while(i<=n) main()
{ {
fact=fact*i;
if(i==1) int i,n,sum2;
printf("%.0f/%d!",x,i); printf("Enter Value of n\n");
else scanf("%d",&n);
printf("+%.0f/%d!",x,i); sum2=0;
i++;
} for(i=1;i<=n;i++)
} {
. for ‫) باستخدام جملة‬3( ‫) أعد كتابة حل تمرٌن‬4 if(i%2==0)
sum2=sum2-i;
a) sum1= 1+2+3+ ... + n
else
sum2=sum2+i;
#include<stdio.h>
main() }
{
printf("%d =",sum2);
int i,n,sum1;
printf("Enter Value of n\n");
for(i=1;i<=n;i++)
scanf("%d",&n);
{
sum1=0; if(i==1)
for(i=1;i<=n;i=i+1) printf("%d",i);
sum1=sum1+i; else
printf("%d =",sum1); if(i%2==0)
printf("-%d",i);
for(i=1;i<=n;i=i+1) else
{
printf("+%d",i);
if(i==1)
printf("%d",i);
else }
printf("+%d ",i); } ‫ حلول هذه المتسلسالت ٌتكون من حلقتٌن‬-: ‫ مالحظة‬
} . = ‫ لطباعة الناتج وعالمة ٌساوي‬-: ‫ األولى‬
}
. ‫ لطباعة مكونات المتسلسلة‬-: ‫ الثانٌة‬
‫الغرض من وجود حلقتٌن وذلك ألن المطلوب لٌس إٌجاد‬
. ‫ بل إٌجاد الناتج وطباعة شكل المتسلسلة‬، ‫الناتج فحسب‬

‫الباب الخامس‬ Page18


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
c) sum3=x + x/2! + x/3! + .. + x/n! ‫) أكتب برنامجا ٌحسب حاصل جمع مربعات األعداد الصحٌحة الفردٌة‬5
.‫الواقعة بٌن عددٌن صحٌحٌن ٌتم إدخالهما عن طرٌق لوحة المفاتٌح‬

#include<stdio.h> #include<stdio.h>
main() main()
{ {
int i,n,fact; int a,b,i,temp,sum=0;
float x,sum3; printf("Enter two numbers\n");
printf("Enter Value of x\n"); scanf("%d%d",&a,&b);
scanf("%f",&x); if(a>b)
{
printf("Enter Value of n\n"); temp=a;
scanf("%d",&n); a=b;
b=temp;
fact=1; }
sum3=0; if(a%2==0)
for (i=1;i<=n;i=i+1) a=a+1 ;
{ for(i=a;i<=b;i=i+2)
fact=fact*i; sum=sum+i*i;
sum3=sum3+x/fact; printf("Answer is %d",sum);
} }
printf("%.2f=",sum3);
‫) المطلوب كتابة برنامج ٌقرأ متغٌرٌن من النوع الصحٌح ثم ٌحسب قٌمة‬6
-: ‫ حٌث‬p
fact=1;
p=( )
for (i=1;i<=n;i=i+1)
do while , while ,for ‫) وذلك باستخدام جمل‬n>m( ‫فً حالة‬
{
fact=fact*i; for( ) ‫باستخدام جملة‬ 
if(i==1)
#include<stdio.h>
printf("%.0f/%d!",x,i);
main()
else
{
printf("+%.0f/%d!",x,i);
int n,m,k,i;
}
long float fact1=1,fact2=1,p;
}
printf("Enter Value Of n\n"); scanf("%d",&n);
printf("Enter Value Of m\n"); scanf("%d",&m);
k=n-m;
if(k>0)
{
for(i=1;i<=n;i++)
fact1=fact1*i;
for(i=1;i<=k;i++)
fact2=fact2*i;

‫الباب الخامس‬ Page19


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
for( ) ‫ باستخدام جملة‬-‫ بقٌة إجابة السؤال السادس‬ do while ‫باستخدام جملة‬ 
p=fact1/fact2; #include<stdio.h>
printf("P=%.2lf",p); main()
} {
else int n,m,k,i;
printf("Input Error!"); float fact1=1,fact2=1,p;
} printf("Enter Value Of n\n");
scanf("%d",&n);
while ( ) ‫باستخدام جملة‬  printf("Enter Value Of m\n");
scanf("%d",&m);
#include<stdio.h>
k=n-m;
main()
if(k>0)
{
{
int n,m,k,i;
i=1;
double fact1=1,fact2=1,p;
do
printf("Enter Value Of n\n");
{
scanf("%d",&n);
fact1=fact1*i;
printf("Enter Value Of m\n");
i++;
scanf("%d",&m);
} while(i<=n);
k=n-m;
i=1;
if(k>0)
do
{
{
i=1;
fact2=fact2*i;
while(i<=n)
i++;
{
} while(i<=k);
fact1=fact1*i;
i++;
p=fact1/fact2;
}
i=1;
printf("P=%5.2f",p);
while(i<=k)
}
{
else
fact2=fact2*i;
printf("Input Error!");
i++;
}
}
while ‫) أوجد ناتج الفقرات التالٌة أوال ثم أعد كتابتها باستخدام جملة‬7
p=fact1/fact2; . ‫ثانٌا‬
printf("P=%5.2f",p);
}
else
printf("Input Error!");
}

‫الباب الخامس‬ Page20


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
d) while( ) ‫باستخدام جملة‬
a) while( ) ‫باستخدام جملة‬ inti,j,a=1,b=5; inti,j,a=1,b=5;
for(y=2005;y<2011;y+=2) y=2005; for(i=1;i<=5;++i) i=1;
printf("spring %d ",y); while(y<2011) { { while(i<=5)
printf("spring %d ",y); for(j=a;j<=b;++j) {
y+=2; } printf("\t%d",j); j=a;
printf("\n"); while(j<=b)
‫ناتج البرنامج‬ a+=5;b+=5; {
spring2005spring2007spring2009 } printf("\t%d",j);
++j;
b) while( ) ‫باستخدام جملة‬ }
for(j=10;j>=4;j--) j=10; printf("\n");
printf("j*j=%3d",j*j); while(j>=4){ a+=5;b+=5;
printf("j*j=%3d",j*j); ++i;
j--;} }
‫ناتج البرنامج‬
j*j=100j*j= 81j*j= 64j*j= 49j*j= 36j*j= 25j*j=16 ‫ناتج البرنامج‬

1 2 3 4 5
6 7 8 9 10
c) while( ) ‫باستخدام جملة‬ 11 12 13 14 15
for(a=1;a<=3;a++) a=1; 16 17 18 19 20
for(b=a;b<=5;b+=2) while(a<=3) 21 22 23 24 25
printf("a*b=%3d",a*b); {
b=a;
e) while() ‫باستخدام جملة‬
while(b<=5)
{ for(i=1;i<=20;++i) i=1;
printf("a*b=%3d",a*b); if((i%5!=0) while(i<=20)
printf("\t%d",i); {
b+=2; else if((i%5!=0)
} printf("\t%d\n",i); printf("\t%d",i);
a++; else
} printf("\t%d\n",i);
‫ناتج البرنامج‬ ++i;
a*b= 1 a*b= 3 a*b= 5 a*b= 4 a*b= 8 a*b= 9 a*b= 15 }

‫ناتج البرنامج‬
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

‫الباب الخامس‬ Page21


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
w ‫) أكتب برنامج مستخدما الجمل المتداخلة مهمته حساب قٌمة‬8 : ‫ أكتب برنامجا إلخراج األشكال اآلتٌة‬، ‫) باستعمال الجمل المتداخلة‬11
‫حٌث‬ a) 1 2
a)
w= 3 4 5
( )( 6) #include<stdio.h>
6 7 8 9
x ‫ وذلك لكل قٌمة من قٌم‬y= 2,4,6,..,10 ‫ وقٌمة‬x=5,4,3,2,1 ‫ حٌث‬main() 10 11 12 13 14
{
#include<stdio.h> int i,j,k=1;
main() for(i=2;i<=5;i++)
{ {
float x,y, w; for(j=1;j<=i;j++)
{
for(x=5;x>=1;x=x-1)
printf("%3d", k) ;
for(y=2;y<=10;y=y+2)
k+=1;
{
}
w=(2*x-3*y)/((x-3)*(y-6));
printf("\n");
printf("W=%f\n",w);
}
}
}
}

7 ‫) أكتب برنامجا ٌحسب معدل أعمار أسرتك المحصورة بٌن‬9


. ‫ سنة‬51 ‫سنوات و‬
#include<stdio.h> b) b) A
main() #include<stdio.h> A B
{ main() A B C
int n,i,j=0; { A B C D
float age,sum=0,avg=0; int i,j;
printf("how many members in your family?\n"); char k;
scanf("%d",&n); for(i=1;i<=4;i++)
for(i=1;i<=n;i++) {
{ k='A';
printf("What are ages?\n"); for(j=1;j<=i;j++)
scanf("%f",&age); {
if((age>=7&&age<=50)) printf("%2c", k) ;
{ k+=1;
sum=sum+age; }
j++; printf("\n");
} }
} }
if(j != 0) avg=sum/j;
printf(“Average of family is %5.3f “,avg);
}

‫الباب الخامس‬ Page22


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫ من الطلبة ثم‬N ‫) المطلوب كتابة برنامج لقراءة درجات لفصل به‬11 ‫ فمثال‬، ‫) اكتب برنامجا ٌعكس أي قٌمة صحٌحة موجبة أو سالبة‬13
. ‫ٌحسب أعلى وأقل درجة فً هذا الفصل‬ . -54321 ‫ تصبح‬-12345 ‫القٌمة‬
#include<stdio.h> #include<stdio.h>
main() main()
{ {
int i,n; long number,inverse=0,temp;
float max,min,mark; printf("Enter number\n");
printf("Enter total number of students\n"); scanf("%ld",&number);
scanf("%d",&n); temp=number;
printf("Enter student's mark No.1\n"); if(temp<0)
scanf("%f",&mark); number=number*-1;
max=min= mark; while (number>0)
for(i=2;i<=n;i++) {
{ inverse = inverse *10;
printf("Enter student's mark No.%d \n",i); inverse = inverse +(number%10);
scanf("%f",&mark); number= number/10;
if( mark > max ) }
max = mark; if(temp<0)
else inverse=inverse*-1;
if( mark < min ) printf("inverse of %ld is %ld\n",temp,inverse);
min = mark; }
} ‫) أوجد ناتج طباعة هذه البرامج باستخدام الورقة والقلم أوال‬14
printf("MAX =%.3f \n",max); . ‫والحاسب ثانٌا‬
printf("MIN =%.3f \n",min); a) ‫ناتج البرنامج‬
} #include<stdio.h> m=1END
‫) المطلوب كتابة برنامج إلٌجاد طول أي عدد صحٌح موجب ٌتم‬12 main() m=2END
‫ وأٌضا ً طباعة‬، 5 ‫ ٌنتج عنه الطول‬54321 ‫ فمثالً العدد‬، ‫إدخاله‬ { m=3N=5END
15= 5+4+3+2+1 ‫ أي‬، ‫مجموع األعداد المتكون منها‬ int m,n; m=4N=6N=7END
#include<stdio.h> for(m=1;m<=5;m++) m=5N=7N=8N=9END
main() { BYE
{ printf("m=%d",m);
long number,sum=0,size=0; for(n=m+2;n<2*m;n++)
printf("Enter number\n"); printf("N=%d",n);
scanf("%ld",&number); printf("END\n");
while (number>0) }
{ printf("BYE");
sum=sum+(number%10); }
size++; }
number=number/10;
}
printf("sum= %ld size= %d\n",sum,size);
}

‫الباب الخامس‬ Page23


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
b) ‫ناتج البرنامج‬ )15
#include<stdio.h> s1=4 printf("What is staff ID number? \n"); scanf("%ld",&ID);
main() s1=9 printf("What is his name? \n");
{ s1=15 scanf("%s",&name);
int m=1,n=3,s1=0,s2=0; s2=9 printf("What is number of overtime hours?\n");
for(;m<=n;) scanf("%d",&hour);
{ printf("What is the fare each hour?\n");
int n=1; scanf("%f",&fare);
for(;n<2;) total=hour*fare;
{ sum=sum+total;
s2+=n*m; printf("Student ID\tName\t Overtime\tfare\t\tTotal \n");
n+=2; printf("%ld\t%s\t%3d\t%f\t%f",ID,name,hour,fare,total);
s1+=m+n; }
printf("S1=%d\n",s1); printf("over total for all staff is %f\n",sum);
} }
++m; ‫ اكتب برنامجا لقراءة رقم الطالب‬، ‫ طالبا‬51 ‫) فصل دراسً به عدد‬16
} : ‫ المطلوب‬، ‫ أنثى ) ودرجته فً ثالثة امتحانات‬2 ، ‫ ذكر‬1( ‫والجنس‬
printf("S2=%d\n",s2); -: ‫ والمطلوب‬، ‫إٌقاف البرنامج عندما ٌكون رقم الطالب سالبا‬
} ‫حساب متوسط هذه اإلمتحانات لكل طالب مع طباعة رقمه‬
-: ً‫ومتوسطه والحرف المقابل لمتوسطه على النحو اآلت‬
ً‫) اكتب برنامجا ً إلدخال رقم الموظف وعدد ساعات العمل اإلضاف‬15
‫ من‬N ‫التً اشتغلها وأجر كل ساعة ثم حساب المبلغ اإلجمالً لعدد‬ ‫الحرف‬ ‫المتوسط‬
-: ً‫ على أن ٌكون مشابها ً لآلت‬، ‫الموظفٌن فً مؤسسة ما‬ A 111 - 85 ‫من‬
B 84 - 70 ‫من‬
‫المبلغ‬ ‫أجرة كل‬ ‫الساعات‬ ‫اسم‬ ‫رقم‬ C 69 - 55 ‫من‬
ً‫اإلجمال‬ ‫ساعة‬ ‫اإلضافٌة‬ ‫الموظف‬ ‫الموظف‬ D 54 - 45 ‫من‬
- - - - - F 45 ‫أقل من‬
- - - - -
- - - - - .F,A ‫ عدد المتحصلٌن على تقدٌرات‬
. ‫ المتوسط العام للفصل مع طباعة رقم قٌد الطالب وأكبر متوسط‬
#include<stdio.h>
main() #include<stdio.h>
{ main()
int n,i,hour; { int i=0,j,gender,a=0,f=0;
long ID; long ID;
float fare,total,sum=0; float mark,sum,max=0,avg,avgt=0;
char name[15]; printf("Enter student ID\n");
printf("Enter number of staff\n"); scanf(“%ld”,&ID);
scanf("%d",&n); while(ID >=0 && i< 50)
for(i=1;i<=n;i++) {
{ printf("gender ? :=> 1 for Male, 2 for Female\n");
scanf("%d",&gender);

‫الباب الخامس‬ Page24


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
16 ‫) باقً إجابة تمرٌن رقم‬16 ‫ إذا كان‬yes ‫) قم بكتابة برنامج ٌقرأ رقم صحٌح ثم ٌطبع كلمة‬17
sum=0; ‫ األرقام‬، ‫ إذا كان غٌر ذلك‬no ‫هذا الرقم أرمسترونق وٌطبع‬
for(j=1;j<=3;j+=1) ‫التالٌة تعتبر أرمسترونق‬
{
printf("Enter test mark No%d for student NO%d\n",j,i); 153 = + +
scanf("%f",&mark); 371 = +
sum+=mark; #include<stdio.h>
} #include<math.h>
avg=sum/3; main()
printf("Mark average of student No.%d is %.2f\n",i,avg); { long number,sum=0,temp;
printf("Enter number\n");
printf("ID student No.%d is %d\n",i+1,ID); scanf("%ld",&number);
if(avg>=85 &&avg<=100) temp=number;
{ while (number>0)
printf("A\n"); {
a++; sum=sum+pow((number%10),3);
} number=number/10;
else }
if(avg>=70 &&avg<=84) if(sum==temp)
printf("B\n"); printf("yes");
else else
if(avg>=55 &&avg<=69) printf("no");
printf("C\n"); }
else
if(avg>=45 &&avg<=54) A ‫) المطلوب كتابة برنامج لحساب مجموع األعداد الزوجٌة من‬18
printf("D\n");
else
Z ‫إلى‬
if(avg<=45) #include<stdio.h>
{ main()
printf("F\n"); {
f++; int i,sum=0;
} for(i='A';i<='Z';i++)
if(max<avg) max=avg; {
avgt+=avg; if(i%2==0)
printf("Enter student ID\n"); sum+=i;
scanf(“%ld”,&ID); }
i++; printf("Sum=%d",sum);
} }
if(i > 0) avgt/=i;
printf("number of A is %d \n",a); ‫ وطباعة حاصل‬z,x,y ‫) صمم برنامجا ً كامالً لقراءة قٌم المتغٌرات‬19
printf("number of f is %d \n",f); . ‫جمعهم طالما أن أحد هذه المتغٌرات غٌر سالبة‬
printf("total verage of mark is %.2f\n",avgt);
printf("maximum average is %.2f\n",max);
}

‫الباب الخامس‬ Page25


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)19 ً‫ قٌم وٌطبع مجموع القٌم الفردٌة والت‬11 ‫) أكتب برنامج ٌقرأ‬21
#include<stdio.h> ‫ وحاصل ضرب القٌم الزوجٌة التً تقبل‬5 ‫تقبل القسمة على‬
main() . 3 ‫القسمة على‬
{ #include<stdio.h>
int i,a,b,c,d; main()
printf("Enter 3 numbers\n"); {
scanf("%d%d%d",&a,&b,&c); int a,i,sum=0,product=1;
while (a>=0 && b>=0 &&c>=0) for(i=1;i<=10;i++)
{ {
d=a+b+c; printf("Enter number\n");
printf("sum=%d",d); scanf("%d",&a);
printf("Enter 3 numbers\n"); if((a%2!=0) && (a%5==0))
scanf("%d%d%d",&a,&b,&c); sum+=a;
}
} if((a%2==0) && (a%3==0))
product*=a;
‫) أكتب برنامجا ً ٌطبع عدد القٌم الفردٌة وحساب متوسط القٌم الزوجٌة‬21 }
. ‫ أوقف البرنامج عند إدخال قٌمة صفرٌة‬، printf("sum of odd numbers is %d\n",sum);
#include<stdio.h> printf("product of even numbers is %d\n",product);
main() }
{
-: ً‫ اكتب برنامجا إلٌجاد طباعة اآلت‬while ‫) باستخدام جملة‬22
int a,i,sum=0,odd=0,even=0; 1 5 7 𝑁
b) sum2 = − − ⋯±
float avg; 4 6 8 (𝑁+1)

printf("Enter one value \n");


scanf("%d",&a); #include<stdio.h>
while(a!=0) main()
{ if (a%2!=0) {
odd++; int i,j,n,fact;
else float sum=0;
{ printf("Enter value of n\n"); scanf("%d",&n);
sum=sum+a; i=2;
even++; while(i<=n)
} {
printf("Enter another value \n"); if(i%4==0)
scanf("%d",&a); { fact=1;
} j=1;
while(j<=i-1)
printf(" number of odd values is %d\n",odd); {
avg=sum/float(even); fact=fact*j;
printf("average of even values is %f\n",avg); j++;
}
} sum=sum-float(fact)/i;

‫الباب الخامس‬ Page26


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
else 22 ‫ باقً إجابة تمرٌن رقم‬
{ fact=1;
j=1; ‫) صمم برنامجا كامالً إلٌجاد القاسم المشترك األكبر لمتغٌرٌن‬24
while(j<=i) . ‫ٌتم ادخالهما عن طرٌق المستخدم‬
{ #include<stdio.h>
fact=fact*j; main()
j++; {
} int x,y,m;
sum=sum+(i-1)/float(fact); printf("Enter the number x: ");
} scanf("%d",&x);
i=i+2; } printf("Enter the number y: ");
scanf("%d",&y);
printf("%.2f =",sum); if(x<y)
i=2; m=x;
while(i<=n) else
{ if(i==2) printf("%d/%d!",i-1,i); m=y;
else while(!((m%x==0)&&(m%y==0)))
if(i%4==0) printf("-%d!/%d",i-1,i); m++;
else printf("+%d/%d!",i-1,i);
printf("The LCM is %d ",m);
i=i+2; }
}
}
-: ‫ حٌث‬Y ‫) صمم برنامجا كامال مهمته حساب قٌمة المتغٌر‬23 ‫( المطلوب كتابة برنامج لعٌادة طبٌة بها ثالثة تخصصات‬25
Y=f(X)+g(X) ، ‫ من الزوار فً الٌوم الواحد‬N ‫ وٌتردد علٌها‬C,B,A
( ) = +A -: ‫أوجد‬
X= -5,-4.5,-4,….,4.5,5 . B ‫) أكبر عدد من الزوار للتخصص‬1
𝑋 𝑋, 𝑖𝑓 𝑓(𝑋) > 0 . C,A ‫) عدد الزوار المترددٌن من التخصصٌن‬2
𝑔(𝑥) =
#include<stdio.h> 2𝑋 , 𝑖𝑓 𝑓(𝑋) ≤ 0 11 ‫) إٌجاد مجموع إٌراد العٌادة علما ً بان الرسوم‬3
main() . C,B ‫ للتخصص‬15 ، A ‫دٌنارات للتخصص‬
{ #include<stdio.h>
floatx,A,fx,gx,y; main()
printf("Enter value of A\n"); scanf("%f",&A); {
for(x=-5;x<=5;x=x+0.5) int N,i,a=0,b=0,c=0,s,sum=0;
{ printf("Enter value of visters\n");
fx=x*x+A; scanf("%d",&N);
if(fx > 0) gx= x*x+x; for(i=1;i<=N;i++)
else gx= 2*x+5; {
y=fx+gx; printf("in which section is visitor No.%d\n press 1 for
printf("X=%5.1f \t Y=%5.1f\n",x,y); section A, 2 for section B , 3 for section C\n",i);
} scanf("%d",&s);
}
‫الباب الخامس‬ Page27
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
998 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

25 ‫ باقً إجابة تمرٌن رقم‬


if(s==1)
{
a++;
sum+=10;
}
else
if(s==2)
{
b++;
sum+=15;
}
else
if(s==3)
{
c++;
sum+=15;
}
else
printf("Input Error!\n");
}
printf("number of visitor in section A is %d\n",a);
printf("number of visitor in section B is %d\n",b);
printf("number of visitor in section C is %d\n",c);
printf("total input money is %d",sum);
}

‫الباب الخامس‬ Page28


‫إجابة الباب السادس‬
‫حل تمارٌن كتاب " مقدمة إلى البرمجة بلغة سً" الطبعة الخامسة‬
‫‪298-4289787‬‬ ‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي"‬
‫‪ )5.6‬تمرينات ‪Exercises‬‬ ‫‪ )3‬افحص البرنامج اآلتً وصححه إذا كان به أخطاء وإال فأوجد ما‬
‫ٌطبعه ‪:‬‬
‫>‪#include<stdio.h‬‬
‫‪ )1‬اذكر الفرق بٌن جملة ‪ break‬والدالة )(‪. exit‬‬
‫)(‪main‬‬
‫{‬
‫)(‪exit‬‬ ‫‪break‬‬
‫;‪int x=6,y=2,z=3‬‬
‫هذه الدالة تسخدم للخروج من‬ ‫تسخدم هذه الدالة للخروج من‬
‫)‪no : if(z>=x && x>=y‬‬
‫حلقة التكرار ولٌس الخروج من البرنامج وإنهائه نهائٌا ً ‪.‬‬
‫البرنامج بالكامل‪.‬‬ ‫;‪goto yes‬‬
‫;‪x+=2‬‬
‫;‪z+=3‬‬
‫;‪y++‬‬
‫‪ )2‬إذا كان لدٌنا المقطع اآلتً من برنامج غٌر كامل ‪:‬‬ ‫;)‪printf("\n%d %d %d",x,y,z‬‬
‫; ‪goto no‬‬
‫)‪if(5*a+b<=5*b+b‬‬ ‫;)"‪yes : printf("\ngood bye user‬‬
‫;‪goto done‬‬ ‫}‬
‫{‬
‫;‪c=b+10‬‬ ‫ناتج التنفٌذ‬
‫;‪goto net_yet‬‬
‫}‬ ‫‪8 2 5‬‬
‫;‪done :c=a+3*a*b‬‬ ‫‪01 3 9‬‬
‫;)‪net_yet : printf("\n%d",c‬‬ ‫‪01 4 01‬‬
‫‪good bye user‬‬

‫المطلوب تتبعه واستنتاج مخرجاته ‪ ،‬على فرض أن المتغٌرات ‪ b,a‬كانت‬ ‫‪ )4‬أعد كتابة التمرٌن (‪ )2‬بدون استخدام جملة ‪goto‬‬
‫لها القٌم اآلتٌة ‪-:‬‬
‫>‪#include<stdio.h‬‬
‫‪a) a=3,b=4‬‬ ‫‪b) a= 5,b=2‬‬
‫)(‪main‬‬
‫‪c) a=-2,b=-7‬‬ ‫‪d) a= 6,b=6‬‬
‫{‬
‫;‪int x=6,y=2,z=3‬‬
‫)‪while ( z<x || x<y‬‬
‫)‪a‬‬ ‫‪a=3‬‬ ‫‪b=4‬‬
‫{‬
‫الناتج‬ ‫‪29‬‬ ‫;‪x+=2‬‬
‫;‪z+=3‬‬
‫)‪b‬‬ ‫‪a=5‬‬ ‫‪b=2‬‬
‫;‪y++‬‬
‫الناتج‬ ‫‪12‬‬ ‫;)‪printf("\n%d %d %d",x,y,z‬‬
‫)‪c‬‬ ‫‪a=-2‬‬ ‫‪b=-7‬‬ ‫}‬
‫;)"‪printf("\ngood bye user‬‬
‫الناتج‬ ‫‪3‬‬ ‫}‬
‫)‪d‬‬ ‫‪a= 6‬‬ ‫‪b=6‬‬
‫‪ )5‬المطلوب إٌجاد ناتج البرامج اآلتٌة أوال واعادة كتابتها ثانٌا‬
‫الناتج‬ ‫‪114‬‬ ‫باستخدام جملة ‪ for‬وبدون استخدام جملة ‪continue‬‬
‫)‪a‬‬

‫الباب السادس‬ ‫‪Page 29‬‬


‫حل تمارٌن كتاب " مقدمة إلى البرمجة بلغة سً" الطبعة الخامسة‬
‫‪298-4289787‬‬ ‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي"‬
‫‪ ‬إجابة تمرٌن رقم (‪(4-a‬‬ ‫‪ ‬إجابة تمرٌن رقم (‪)5-b‬‬
‫)‪a‬‬ ‫)‪b‬‬
‫>‪#include<stdio.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪short i=3‬‬ ‫;‪short a,b=0,s=0‬‬
‫‪do‬‬ ‫)‪for(a=5;a>0;a--‬‬
‫{‬ ‫{‬
‫;‪i++‬‬ ‫)‪if(a%2!=1‬‬
‫;)‪printf("\nI=%d",i‬‬ ‫;‪b--‬‬
‫)‪if(i!=5‬‬ ‫‪else‬‬
‫;‪continue‬‬ ‫;‪b+=a‬‬
‫;)‪printf("\n%d",i*i‬‬ ‫;‪s+=b‬‬
‫;)‪} while (i!=9‬‬ ‫;‪continue‬‬
‫;)"‪printf("\n\nALL DONE‬‬ ‫}‬
‫}‬ ‫;)‪printf("\na==>%d",s‬‬
‫}‬
‫)‪a‬‬ ‫ناتج التنفٌذ‬ ‫ناتج التنفٌذ )‪b‬‬
‫‪I=4‬‬ ‫‪a==>29‬‬
‫‪I=5‬‬
‫‪25‬‬
‫‪I=6‬‬ ‫‪ ‬فً التمرٌن رقم ‪ )b( 4‬الدالة ‪ continue‬لٌس لها أي تأثٌر وال‬
‫‪I=7‬‬ ‫تحدث أي تغٌٌر سواء بوجودها أو بعدمها نظرا لوجودها قبل‬
‫‪I=8‬‬ ‫القوس المغلق مباشرة } الدال على نهاٌة جملة ‪ ، for‬وبالتالً‬
‫‪I=9‬‬ ‫ٌمكننا إلغاؤها ‪.‬‬

‫‪ALL DONE‬‬ ‫‪ )5‬اكتب برنامجا مستخدما فٌه جملة ‪ goto‬وجملة ‪ ، if‬ثم استبدالها‬
‫مستعمال جملتً ‪switch, while‬‬
‫‪ ‬تنفٌذ تمرٌن رقم ‪ )a( 5‬باستخدام جملة ‪for‬‬
‫‪ ‬البرنامج التالً ٌطبع األعداد الفردٌة من ‪ 0‬إلى ‪ 21‬ثم ٌطبع‬
‫>‪#include<stdio.h‬‬
‫الرسالة ‪ Thank You‬فً سطر جدٌد‬
‫)(‪main‬‬ ‫أوالً باستخدام جملة ‪ goto‬وجملة ‪if‬‬ ‫‪.i‬‬
‫{‬ ‫>‪#include<stdio.h‬‬
‫;‪short i‬‬ ‫)(‪main‬‬
‫)‪for(i=4;i<=9;i++‬‬ ‫{‬
‫{‬ ‫;‪int a=1‬‬
‫)‪no: if(a>30‬‬
‫;)‪printf("\nI=%d",i‬‬
‫;‪goto yes‬‬
‫)‪if(i==5‬‬ ‫)‪if(a%2!=0‬‬
‫;)‪printf("\n%d",i*i‬‬ ‫;)‪printf("%3d",a‬‬
‫}‬ ‫;‪a++‬‬
‫;)"‪printf("\n\nALL DONE‬‬ ‫;‪goto no‬‬
‫}‬ ‫;)"‪yes: printf("\nThank You‬‬
‫}‬

‫الباب السادس‬ ‫‪Page 30‬‬


‫حل تمارٌن كتاب " مقدمة إلى البرمجة بلغة سً" الطبعة الخامسة‬
‫‪298-4289787‬‬ ‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي"‬

‫باستخدام جملتً ‪switch ,while‬‬ ‫‪.ii‬‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫{‬
‫;‪int a=1‬‬
‫)‪while (a<=30‬‬
‫{‬
‫)‪switch(a%2!=0‬‬
‫{‬
‫;)‪case 1: printf("%3d",a‬‬
‫;‪a+=2‬‬
‫}‬
‫}‬
‫;)"‪printf("\nThank You‬‬
‫}‬

‫الباب السادس‬ ‫‪Page 31‬‬


‫إجابة الباب السابع‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬
‫‪ )7.8‬تمرينات ‪Exercise‬‬ ‫‪ -: ispunct‬ػٍ غشٌمها ٌرى انرؼشف ػ ًّا إرا كاٌ انًرغٍش انًذخم هى‬
‫ػاليح ذشلٍى (يثم شاسزح أو فاصهح ) أو ال ! ‪ ،‬زٍث ذشخغ تمًٍح غٍش‬
‫‪ )1‬اركش انفشق تٍٍ دوال ) (‪getch( ) , getche( ) , getchar‬‬ ‫صفشٌح إرا كاٌ انًذخم ػاليح ذشلٍى ‪ ،‬وذشخغ تصفش إرا كاٌ غٍش رنك‪.‬‬
‫يغ ذىظٍر رنك تثؼط األيثهح‬ ‫‪ -: isprint‬ذشخغ تمًٍح غٍش صفشٌح إرا كاٌ انًذخم لاتم نهطثاػح‬
‫‪ .a‬الدالة ) (‪ٌ -: getchar‬مىو ترؼشٌفها يهف ‪ ، stdio.h‬ذسرخذو‬ ‫وذشخغ تصفش إرا كاٌ غٍش رنك ‪.‬‬
‫إلدخال زشف وازذ وٌظهش ػهى انشاشح تؼذ انكراتح وال ذسًر‬
‫‪ )3‬أي يٍ انرؼثٍشاخ اَذٍح ذؼطً َرٍدح (‪ )1‬صىاب ‪-:‬‬
‫تاإلَرمال إنى األيش انرانً إال إرا ظغػ انًسرخذو يفراذ اإلدخال‬
‫‪. ENTER‬‬ ‫;)"‪printf("%d","MARK FOX"=="MARK BOX‬‬ ‫‪0‬‬
‫‪ ‬يثال ‪-:‬‬
‫;)"‪printf("%d","street no 234" < "street no 432‬‬ ‫‪1‬‬
‫;‪char a‬‬
‫;)(‪a=getchar‬‬ ‫;)"‪printf("%d","all done" != "all go‬‬ ‫‪1‬‬
‫;)‪printf("%c",a‬‬

‫‪ .b‬الدالة )(‪ٌ -: getche‬مىو ترؼشٌفها يهف ‪ conio.h‬ذسرخذو‬


‫إلدخال زشف وازذ وٌظهش ػهى انشاشح ونكُها ذخرهف ػهى‬
‫) (‪ getchar‬فً أَها ال ذسراج إنى انعغػ ػهى يفراذ اإلدخال‬
‫‪ ENTER‬نإلَرمال إنى انسطش انرانً ‪.‬‬
‫‪ ‬يثال ‪-:‬‬ ‫‪ )4‬أكرة تشَايدا نمشاءج اسًك تانكايم تاسرخذاو دانح )(‪ gets‬ودانح‬
‫;‪char a‬‬ ‫‪ getche‬يغ ذىظٍر انفشق تٍُهًا ‪.‬‬
‫;)(‪a=getche‬‬
‫;)‪printf("%c",a‬‬ ‫تاسرخذاو )(‪gets‬‬ ‫تاسرخذاو )(‪getche‬‬
‫>‪#include<stdio.h‬‬ ‫>‪#include<conio.h‬‬
‫‪ .c‬الدالة )(‪ٌ -: getch‬مىو ترؼشٌفها يهف ‪ conio.h‬ذسرخذو‬ ‫)(‪main‬‬ ‫)(‪main‬‬
‫إلدخال زشف وازذ ونكُها ذخرهف ػٍ انذانرٍٍ انساتفرٍٍ فً أٌ‬ ‫{‬ ‫{‬
‫هزا انسشف ال ٌظهش ػهى انشاشح وال ذسراج إنى انعغػ ػهى‬ ‫;]‪char name[20‬‬ ‫;]‪char name[20‬‬
‫يفراذ اإلدخال ‪ ، ENTER‬كًا ذسرخذو أٌعاً نرثثٍد شاشح‬ ‫;)‪gets(name‬‬ ‫;‪int c=0‬‬
‫ػشض انُرائح تذالً يٍ انعغػ ػهى يفرازً ‪ Alt‬و ‪. F5‬‬ ‫}‬ ‫)'‪while((name[c]=getche())!='\r‬‬
‫‪ ‬يثال ‪-:‬‬ ‫;‪c++‬‬
‫;‪char a‬‬ ‫}‬
‫;)(‪a=getch‬‬
‫;)‪printf("%c",a‬‬
‫‪ )4‬يا هى انفشق تٍٍ ‪-:‬‬ ‫يؼُى '‪ ، name[c]=getche())!='\r‬أي أن ٌتم تخزٌن السالسل‬
‫‪printf() and puts() .a‬‬ ‫النصٌة حرفا بحرف داخل المصفوفة الحرفٌة ‪ num‬والتً طولها ‪، 02‬‬
‫ٌستمر المستخدم فً اإلدخال حتى الضغط على زر ‪ ENTER‬والذي‬
‫) (‪ -: puts‬ذسرخذو نطثاػح ػثاسج زشفٍح ‪ string‬زٍث ذطثغ‬
‫ٌرمز له فً لغة ‪ C‬بهذا الشكل '‪ ، '\r‬عندما ٌضغط المستخدم على هذا‬
‫تذوٌ ذىصٍف شكم انًخشخاخ ‪ًٌ ،‬كٍ ذداهم سيز ‪ \n‬ألَها ذعغ‬
‫الزر عندها ستكون عملٌة اإلدخال قد انتهت‪ ،‬وٌنتقل من بعدها المترجم‬
‫كم َص فً سطش ‪ ،‬ال ًٌكُها انرؼايم يغ يرغٍشاخ يٍ َىع أسلاو‬
‫أمر آخر ‪.‬‬
‫إلى ٍ‬
‫أو يرغٍش زشفً ‪.‬‬
‫الفرق بٌن )(‪ gets‬و )(‪ getche‬أن األخٌرة تقوم بتخزٌن السلسلة حرفا‬
‫) (‪ -: printf‬ذسرخذو نطثاػح انثٍاَاخ تدًٍغ أَىاػها ( ‪string,‬‬
‫بحرف ‪ ،‬وبالتالً ٌمكن حساب طول السلسلة المدخلة دون اللجوء إلى الدالة‬
‫‪ )char ,int ,float‬كًا أَها ذطثغ انرىصٍفاخ انًطهىتح ‪.‬‬ ‫)(‪ strlen‬إذا ما وضعت بالطرٌقة الموضحة أعاله ‪ ،‬كما أن الدالة )(‪getche‬‬
‫‪ٌ -: atof‬مىو ترؼشٌفها يهف ‪ ، math.h‬يهًرها ذثذٌم انسشف فً‬ ‫ٌتم تعرٌفها من خالل ملف ‪ ، conio.h‬أيا )(‪ gets‬فٍرى ذؼشٌفها يٍ لثم‬
‫انشفشج إنى ػذد زمٍمً يعاػف ‪. double‬‬ ‫يهف انؼُاوٌٍ ‪. stdio.h‬‬

‫‪ٌ -: atoi‬مىو ترؼشٌفها َفس انًهف انساتك ‪ ،‬نكُها ذمىو ترثذٌم‬ ‫‪ )5‬انًطهىب كراتح تشَايح ٌمىو تُسخ انسهسهح ‪ S1‬فً انسهسح ‪S2‬‬
‫انسشف فً انشفشج إنى ػذد صسٍر ‪. int‬‬

‫الباب السابع‬ ‫‪Page 32‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)3( ‫ إجابة تمرٌن رقم‬ ‫ إذا‬positive ‫) المطلوب كتابة برنامج ٌستقبل سلسلتٌن مع طباعة‬5
#include<stdio.h> ‫ إذا كانت الثانٌة‬negative ‫كان السلسة األولى أكبر من الثانٌة و‬
#include<string.h> . ‫ إذا كانتا متطابقتٌن‬zoro ‫أكبر من األولى و‬
#include<conio.h>
main() #include<stdio.h>
{ #include<string.h>
clrscr(); main()
char *S1,*S2; {
puts("Enter string one"); char *string1,*string2;
gets(S1); int result;
puts("Enter string two"); puts("Enter string one");
gets(S2); gets(string1);

strcpy(S1,S2);
puts("Enter string two");
puts(S1); gets(string2);
} result=strcmp(string1,string2);
‫ فً سلسلة تم‬B,G,N ‫) أكتب برنامجا لحساب عدد الحروف‬4 if(result>0)
. ‫ادخالها عن طرٌق لوحة المفاتٌح‬ puts("positive");
#include<stdio.h>
#include<conio.h> if(result<0)
main() puts("negitive");
{ else
char ch[20]; puts("zero");
int c=0,b=0,g=0,n=0; }
while((ch[c]= getche()) != '\r') ‫) أكتب برنامجا ً لقراءة سلسلة حرفٌة حرفا ً حرفا ً ثم اطبع هذه‬6
{ ‫) مع إٌقاف البرنامج إذا تم‬ascii( ‫الحروف بما ٌقابلها بالشفرة‬
if(ch[c]=='B') )?( ‫إدخال الرمز‬
b++; #include<stdio.h>
if(ch[c]=='G') #include<conio.h>
g++; main()
if(ch[c]=='N') {
n++; int i,c=0;
char *str ;
c++ printf("Enter Letters\n");
} while((str[c]=getche())!='?')
printf("number of B is %d\n",b); c++;
printf("number of G is %d\n",g); printf("\nAnswer is \n");
printf("number of N is %d\n",n); for(i=0;i<c;i++)
} {
‫ فً هذا الباب‬، gets() ‫ ٌمكن حل هذا التمرٌن باستخدام الدالة‬ printf("%d",*str);
‫سنتطرق للحل بأكثر من طرٌقة حتى نغطً تطبٌقات أغلب‬ str++;
} ‫ توجد طرٌقة حل أخرى‬-: ‫ مالحظة‬
. ‫الدوال المقررة لهذا الباب‬
} . ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬

‫الباب السابع‬ Page 33


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
، ‫ حرفــا‬02 ‫ جمل ال تتعدى الواحدة منها‬3 ‫) اكتب برنامجا ٌقرأ عدد‬7 ‫) المطلوب كتابة برنامج مهمته استقبال سلسلة حرفٌة غٌر‬00
. ‫ثم اطبع أقصر هذه الجمل‬ ‫معروفة الطول ثم طباعتها عكسٌا مع تحوٌل الحروف الصغٌرة‬
#include<stdio.h> . ‫إلى كبٌرة‬
#include<string.h>
main() #include<stdio.h> ‫ توجد طرٌقة حل أخرى‬-: ‫ مالحظة‬
{ char ch; ‫باعتبار أن‬، 00 ‫تم تحدٌد طول السلسة‬ #include<string.h> . ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬
char a[21],b[21]; ‫ المترجم ٌضٌف فً نهاٌة كل سلسلة‬#include<ctype.h>
int x,y; ‫ لذلك فإنه قد‬، ‫\) تلقائٌا‬2( ‫ رمز النهاٌة‬main()
puts("Enter string"); ‫{ تم حجز مكان له فً الذاكرة‬
gets(a);
x=strlen(a); int i,n;
int i=2; char *string1,*string2;
while(i<=5) printf("Enter String Please\n");
{ gets(string1);
puts("Enter string"); n=strlen(string1)-1;
gets(b); for(i=n;i>=0;i--)
y=strlen(b);
{
if(y < x)
string2=string1+i;
strcpy(a,b);
i++; printf("%c",toupper(*string2));
} }
puts(a); }
} ً ‫ حرفا‬32 ‫) أكتب برنامجا ً لقراءة سلسلة حرفٌة ال ٌزٌد طولها عن‬00
‫) أكتب برنامجا ً لقراءة سلسلة حرفٌة مع إٌجاد مكان حرف معٌن بهذه‬02 ‫ حٌث ٌكون من ضمنها الرمز (*) المطلوب تحدٌد طولها ثم‬،
. ‫السلسة‬ ، ‫طباعة الحروف التً تسبق الرمز (*) فً السطر األول‬
#include<stdio.h> . ً‫والحروف التً تلً الرمز (*) فً السطر الثان‬
‫ توجد طرٌقة حل أخرى‬-: ‫ مالحظة‬ #include<stdio.h>
#include<string.h>
main() . ‫الباب‬ ‫هذا‬ ‫إجابة‬ ‫بنهاٌة‬ ‫التمرٌن‬ ‫لهذا‬ #include<string.h>
{ int i,n; main()
char *letter,wanted,position; {
printf("Enter String\n"); int i,n;
gets(letter); char string[51] ;
n=strlen(letter); puts("Enter Number");
printf("\nEnter wanted letter\n"); gets(string);
scanf("%c",&wanted);
n=strlen(string);
for(i=0;i<n;i++)
printf("It has %d character\n",strlen(string));
{ if(*letter==wanted)
for(i=0;i<n;i++)
position=i+1;
{
letter++;
printf("%c",string[i]);
}
if(string[i]=='*') printf("\n");
if(position>0) printf("the letter is No.%d",position);
}
else printf("Not Found");
}
}

‫الباب السابع‬ Page 34


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
-: ‫) المطلوب كتابة برنامج ٌستقبل سلسلة حرفٌة ثم حساب‬01 )12( ‫ بقٌة إجابة تمرٌن رقم‬
‫ عدد الفرغات بالسلسلة‬ for(int a=1;a<=N;a++)
. ‫ عدد األرقام بالسلسلة‬ {
‫ بالسلسلة‬K ‫ عدد تكرار الحرف‬ printf("\nEnter Phone Number\n");gets(num);
#include<stdio.h>
len=strlen(num);
#include<string.h> ‫ توجد طرٌقة حل أخرى‬-: ‫ مالحظة‬
#include<ctype.h> . ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬ printf("\nNumber is \n");
main()
if(*num=='3') printf("33");
{
int i,n,space=0,K=0,number=0; if(*num=='4') printf("44");
char *string ; for(i=0; i<len ;i++)
puts("Enter String"); {
gets(string); printf("%c",*num);
n=strlen(string); num++;
for(i=0;i<n;i++) }
{ }
if(isspace(*string)) }
space++; ‫) المطلوب كتابة برنامج مهمته قراءة سلسلة حرفٌة ال ٌزٌد‬03
if(*string=='K') ‫ حرفا ً ثم اطبع هذه السلسلة عدد مرات طولها‬02 ‫طولها على‬
K++; ‫مع إلغاء الحرف األخٌر من هذه السلسلة فً كل مرة ٌتم فٌها‬
if(isdigit(*string)) ‫ ستطبع‬STRING ‫ فمثال السلسلة‬، ‫طباعتها وحتى النهاٌة‬
number++; STRING -: ً‫بالشكل التال‬
STRIN
string++; STRI
} #include<stdio.h> STR
printf("Number of spaces %d\n",space); #include<string.h> ST
printf("Number of Ks %d\n",K); main() S
printf("Number of numbers %d\n",number); {
} int i,n,j;
‫ المطلوب‬، ‫ من أرقام الهواتف‬N ‫) اكتب برنامجا ً إلدخال عدد‬02 char strng[21] ;
، 1 ‫ من الناحٌة الٌسرى للرقم الذي ٌبدأ بالرقم‬11 ‫إضافة الرقمٌن‬
.2 ‫ من الناحٌة الٌسرى للرقم الذي ٌبدأ بالرقم‬22 ‫وإضافة الرقمٌن‬ puts("Enter String Please");
gets(strng);
#include<stdio.h>
n=strlen(strng)-1;
#include<string.h>
main() for(i= n; i>=0 ; i--)
{ {
int i,N,len; for(j=0; j<= i ; j++)
printf("How many telephone numbers\n"); printf("%c",strng[j]);
scanf("%d",&N); printf("\n");
getchar();
}
‫ توجد طرٌقة حل أخرى‬-: ‫مالحظة‬ 
char *num; }
. ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬

‫الباب السابع‬ Page 35


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
-: ً‫) أوجد ناتج تنفٌذ البرنامج اآلت‬04 -‫ حل آخر‬- )2( ‫ بقية إجابة تمرين رقم‬

for(i=0;i<c;i++)
#include<stdio.h> {
main() printf("%d",str[i]);
{ }
char *str1="aaabbb", }
*str2="bbbccc",
*str3="ccc";
if(strncomp(str2,str1,3)>0)
printf("\nstr2>str1"); )02( ‫طريقة أخرى لحل تمرين رقم‬ 
else #include<stdio.h>
printf("\n str1 > str2"); #include<string.h>
if(strncomp(str2,str3,3)>0) main()
printf("\n str2>str3"); {
else int i,n;
printf("\n str3 > str2"); char letter[10],wanted ;
printf("Enter String\n");
}
‫ ناتج البرنامج‬str2>str1
gets(letter);
str3 > str2 n=strlen(letter);
printf("\nEnter wanted letter\n");
scanf("%c",&wanted);
‫ وهذا‬، ‫) السؤال السابع عشر ٌحتاج إلى استدعاء دالة فرعٌة‬05
‫ استدعاء الدوال‬، ‫الموضوع لٌس من مواضٌع الباب السابع‬ for(i=0;i<n;i++)
. ‫مغطى بشكل جٌد فً الباب التاسع والعاشر والثانً عشر‬ {
if(letter[i]==wanted)
‫حلول أخرى لبعض التمارين السابقة من هذا الباب‬ printf("the letter is No.%d",i+1);
}
)2( ‫طريقة أخرى لحل تمرين رقم‬  }

#include<stdio.h>
#include<conio.h> )00( ‫طريقة أخرى لحل تمرين رقم‬ 
main() #include<stdio.h>
{ #include<string.h>
int i,c=0; #include<ctype.h>
char *str ; main()
{
printf("Enter Letters\n");
int i,n;
while((str[c]=getche())!='?') char str[50] ;
c++;
printf("Enter String\n");
printf("\nAnswer is \n"); gets(str);

‫الباب السابع‬ Page 36


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
-‫ حل آخر‬- )11( ‫ بقية إجابة تمرين رقم‬
)07( ‫طريقة أخرى لحل تمرين رقم‬ 
n=strlen(str)-1;
for(i=n ;i>=0 ;i--)
#include<stdio.h>
printf("%c",toupper(str[i]));
#include<conio.h>
} main()
{
int i,N,len;
)03( ‫طريقة أخرى لحل تمرين رقم‬ 
printf("How many telephone numbers\n");
#include<stdio.h>
scanf("%d",&N);
#include<string.h>
getchar();
#include<ctype.h>
main() char num[03] ;
{ for(int a=1;a<=N;a++)
int i,n,space=0,K=0,number=0; {
char string[50] ; printf("\nEnter Phone Number\n");
puts("Enter String"); gets(num);
gets(string); len=strlen(num);
n=strlen(string);
printf("\nNumber is \n");
for(i=0;i<n;i++)
if(num[0] == '3') printf("33");
{
if(isspace(string[i])) if(num[0] == '4') printf("44");
space++; for(i=0; i<len ;i++)
if(string[i]=='K') printf("%c",num[i]);
K++; }
if(isdigit(string[i])) }
number++;
}
printf("Number of spaces %d\n",space);
printf("Number of Ks %d\n",K);
printf("Number of numbers %d\n",number);
}

‫الباب السابع‬ Page 37


‫إجابة الباب الثامن‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫‪4799297090‬‬ ‫إعداد م – محمد أحمد دريبيكة مبرمج لغة سي‬
‫‪ )6.8‬تمرينات ‪Exercises‬‬ ‫‪ )3‬أعد كتابة الفقرات (‪ )f,d‬بالتمرٌن (‪ )2‬باستخدام جملة ‪if‬‬
‫‪ )1‬على فرض أن لدٌنا الجزء اآلتً من البرنامج‬ ‫فقط ‪.‬‬
‫;‪int n=8‬‬ ‫)‪d‬‬
‫;‪n=n%5‬‬ ‫)‪if(--z==y++‬‬
‫)‪if(n==1‬‬ ‫;‪result=i*k‬‬
‫;)"‪printf("one‬‬ ‫‪else‬‬
‫‪else‬‬ ‫;‪result=i*j‬‬
‫)‪if(n==2‬‬
‫)‪f‬‬
‫;)"‪printf("two‬‬
‫)‪if(k%(i+j)==1‬‬
‫‪else‬‬
‫;‪result= k>>1‬‬
‫;)"‪printf("three‬‬
‫‪else‬‬
‫‪ ‬ما هو الناتج ؟‬
‫;‪result= k>>1‬‬
‫الناتج‬ ‫‪ )4‬المطلوب كتابة برنامج ٌقوم باستقبال ‪ M‬من األعداد‬
‫‪three‬‬
‫الصحٌحة الموجبة ‪ ،‬ثم تحوٌلها إلى النظام الثمانً والستة‬
‫عشري ‪.‬‬
‫‪ ‬أعد كتابة البرنامج السابق باستخدام المؤثر الشرطً (?) ‪.‬‬
‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪int n=8‬‬
‫{‬
‫;‪n=n%5‬‬
‫;‪int i,j,x,m=128,M‬‬
‫;)"‪printf("Enter Value of M\n‬‬
‫;)"‪n==1 ? printf("one") : n==2 ? printf("two") : printf("three‬‬
‫;)‪scanf("%d",&M‬‬

‫)‪for(i=1;i<=M;i++‬‬
‫هل المؤثر الشرطً ٌحل محل جملة ‪ if – else‬دائما ً ؟‬ ‫‪‬‬
‫{‬
‫نعم ‪ ،‬بإمكانه أن ٌحل محل جملة ‪ if – else‬دائما إذا ما وُ ضع‬ ‫;)"‪printf("Enter number\n‬‬
‫بالطرٌقة الصحٌحة ‪ٌ ،‬مكن استخدام مؤثر الفاصلة والقوسٌن ( ) فً‬ ‫;)‪scanf("%d",&x‬‬
‫حالة وجود أكثر من جملة داخل جملة ‪. if‬‬ ‫;)"‪printf("Decimal\tHexadecimal\tOctal\tBinary\n‬‬
‫;)‪printf("%d\t%4X\t\t%4o\t",x,x,x‬‬
‫‪ )5‬إذا ما أعطٌت الجمل ‪:‬‬ ‫)‪for(j=1;j<=8;j++‬‬
‫;‪int result ,i=2,j=3,k=11‬‬ ‫{‬
‫;’‪char x=’a’; y=’b’ , z=’c‬‬ ‫;)'‪putchar( m&x ? '1' : '0‬‬
‫;‪x<<=1‬‬
‫)‪a‬‬ ‫;‪result =i % j == I ? k : j‬‬ ‫‪11‬‬ ‫}‬
‫)‪b‬‬ ‫;‪result=i*j == k-(j+i) ? x: k‬‬ ‫‪97‬‬ ‫;)"‪printf("\n‬‬
‫}‬
‫)‪c‬‬ ‫;‪result=y-1 != x ? k : j‬‬ ‫‪3‬‬
‫}‬
‫)‪d‬‬ ‫;‪result= --z == y++ ? i*k : i*j‬‬ ‫‪22‬‬
‫)‪e‬‬ ‫; ‪result = z >= x + i ? z:x‬‬ ‫‪99‬‬
‫‪ )5‬إذا تم إشهار المتغٌرٌن ‪ b,a‬من النوع الصحٌح و ُخصصت‬
‫)‪f‬‬ ‫;‪result = k % (i+j) == 1 ? k>>1 : k>>1‬‬ ‫‪5‬‬
‫لهما القٌم ‪ 79,90‬علً التوالً ‪ ،‬أوجد قٌم كل الفقرات اآلتٌة ‪:‬‬

‫الباب الثامن‬ ‫‪Page 38‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
4799297090 ‫إعداد م – محمد أحمد دريبيكة مبرمج لغة سي‬
b)
a) a&b; 74 #include<stdio.h>
b) a|b; 95 main()
c) a^b ; 21 {
d) a<<1 ; 180 int a=9,b=4;
e) b >> 1; 39 printf("\n a=%d b=%d c=%d",a,a>>1,a>>2);
‫) اكتب برنامجا مهمته تحوٌل رقم صحٌح إلى ما ٌقابله فً النظام‬6 printf("\n d=%d e=%d f=%d",b,b>>1,b>>2);
}
11111111 ‫ ٌعطً الباٌت‬43 ‫ فمثال الرقم‬، ‫الثنائً ثم ٌعكس الناتج‬
‫ ناتج البرنامج‬a=9 b=4 c=2
. ً‫ هو الناتج النهائ‬11111111 ‫فً حٌن‬
d=4 e=2 f=1
#include<stdio.h>
main()
{
c)
int j,x,y,M,m=128;
#include<stdio.h>
printf("Enter number\n");
main()
scanf("%d",&x); {
y=x; int m=0xe,n=2;
for(j=1;j<=8;j++) printf("%x\n",(m|(1<<n)));
{ printf("%x\n",(m&(1<<n)));
m&x ? printf(“1”) : printf(“1”); printf("%x\n",(n^(1<<n)&(m^0)));
x<<=1; }
‫ ناتج البرنامج‬e
}
4
printf("\n"); f
for(j=1;j<=8;j++)
{
m&y ? pintf(“1”) :printf(“1”);
y<<=1;
}
}
-: ‫) أوجد ناتج تنفٌذ البرامج اآلتٌة‬7
a) #include<stdio.h>
main()
{
char ch1,ch2=’A’;
printf(“\nThe result ==> %c & %c”,(ch1=ch2,ch1=’B’));
}
‫ناتج البرنامج‬ The result ==>A & B

‫الباب الثامن‬ Page 39


‫إجابة الباب التاسع‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫) تمرٌنات‬9.09 9 ‫ بقٌة إجابة تمرٌن رقم‬
‫) أكتب برنامجا ٌقرأ سلسلة حرفٌة ثم ٌستدعً دالة مهمتها الرجوع بكلمة‬9
‫ إذا كان‬no ‫ إذا كان الرمز المدخل موجوداً فً السلسلة وبكلمة‬yes int repetition(char symbol,char *string)
‫ ثم ٌستدعً دالة أخرى إلٌجاد عدد تكرار هذا الحرف‬، ‫غٌر ذلك‬ {
#include<stdio.h> . ‫بالسلسلة‬ int n,count=0;
n=strlen(string);
#include<string.h>
‫ توجد طرٌقة حل أخرى‬-: ‫مالحظة‬  for(int i=0;i<n;i++)
main() . ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬ {
{ if(*string== symbol)
int n; count++;
char *string, symbol; string++;
char *check(char symbol , char *string); }
int repetition(char symbol , char *string); return count;
}
puts("Enter String");
gets(string);
-: ‫) صف مخرجات البرامج اآلتٌة‬2
printf("Enter wanted symbol\n");
scanf("%c",&symbol); a)
printf("%s\n",check(symbol,string)); char f_2(char *c1,char *c2)
printf("and repeated %d times",repetition(symbol,string)); {*c1+=2; *c2-=1;
} return *c1==*c2 ? *c1:*c2;
char *check(char symbol,char *string) }
{ int f_1(char m,char n)
{ m+=2; n-=1;
int n,found;
if(m==n)
char *a="yes"; return m+=1;
char *b="no"; else
n=strlen(string); return n+=2;
for(int i=0;i<n;i++) }
{
if(*string== symbol) main()
{ {
found =1; char x='A',y='D',a='X',b='B',c;
break; x=f_1(x,y);printf("X=%c",x);
} c=f_2(&a,&b);printf("X=%cY=%cC=%c",a,b,c);
else }
found =0; ‫ ناتج البرنامج‬X=DX=ZY=AC=A
string++;
}
return (found==1) ? a : b;
}

‫الباب التاسع‬ Page 40


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
b) d)
fun(int *a,int *b) int i;
{ main()
int c; {
c=*a; *a=*b; *b=c; int fun(int);
} for(i=7;i>=2;i-=2)
main() printf("FUN = %d\n",fun(i));
{ }
int x,y; x=10; y=11; int fun(int b)
fun(&x,&y); {
printf("\nX=%d Y=%d",x,y); static int a=5;
} a+=b-1;
return(a++ % 2 == 0 ? 1 : 0);
‫ناتج البرنامج‬ X=11 Y=10 }
FUN = 0
‫ناتج البرنامج‬ FUN = 1
c) FUN = 0
int x=3; d)
main() void cat(int n);
{ void rat(int *n);
int i; int *a;
int fun(int i); main()
for(i=1;i<=5;i++) {
printf("\nX=%d F=%d",x,fun(i)); int b=2,c=3;
} a=&c;
int fun(int b) printf("\nA=%d",*a);
{ cat(*a);
static int c=1; printf("A=%d\n",*a);
c+=x+b; {
x-=b; int a=4,c=5;
return c; rat(&b);
} printf("A=%d B=%d C=%d",a,b,c);
X=2 F=5 {
X=0 F=9 int a=6,b=7,c=8;
‫ ناتج البرنامج‬X=-3 F=12 cat(c);
X=-7 F=13 printf("\nA=%d B=%d C=%d",a,b,c);
X=-12 F=11 }
}
rat(a);
printf("\nA=%d B=%d C=%d",*a,b,c);
}

‫الباب التاسع‬ Page 41


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
3 ‫ بقٌة إجاٌة تمرٌن رقم‬
 d) ‫بقٌة‬ else
printf("Input Error!");
void cat(int n)
}
{
*a !=0 ? --(*a) : ++(*a); float factorial(int n)
rat(&n); {
} int i,fact=1;
void rat(int *n) for(i=1;i<=n;i++)
{ fact=fact*i;
if(*n) return fact;
*n=*n+*a; }
else : ‫) اكتب برنامجا ً ٌستدعً دالة لحساب‬4
n=a; sum=
}
#include<stdio.h>
A=3A=2
main()
A=4 B=4 C=5
{
‫ناتج البرنامج‬ A=6 V=7 C=8
int n;
A=2 B=4 C=2
float sum;
float sumation(int);
printf("Enter Value Of n\n");
. ‫) بالفصل الخامس‬6( ‫ أعد كتابة تمرٌن‬، ‫) عن طرٌق الدالة‬3 scanf("%d",&n);
sum=sumation(n);
printf("Sum =%5.2f",sum);
P=( ) }
#include<stdio.h>
main() float sumation(int n)
{ {
int n,m,k; float i,sum=0;
float p; for(i=1;i<=n;i++)
float factorial(int); sum=sum+(i+1)/(2*i+1);
printf("Enter Value Of n\n"); return sum;
scanf("%d",&n); }
printf("Enter Value Of m\n");
scanf("%d",&m);
k=n-m; ‫) بالفصل الخامس وذلك باستخدام‬95( ‫) أعد كتابة تمرٌن‬5
if(k>0) . ‫المتغٌرات الخارجٌة والمتغٌرات الساكنة‬
{
p=factorial(n)/factorial(k);
printf("P=%5.2f",p);
}

‫الباب التاسع‬ Page 42


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)5( ‫ إجابة تمرٌن رقم‬ ‫) باستخدام الدالة الفارغة‬9( ‫) أعد كتابة البرنامج فً التمرٌن‬6
#include<stdio.h> ً‫على أن ٌتم استدعاؤها ثالث مرات من قبل البرنامج الرئٌس‬
int i,n; #include<stdio.h>
int hour; #include<string.h>
long ID; main() ‫ توجد طرٌقة حل أخرى‬-: ‫ مالحظة‬
float fare,total,sum=0; { . ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬
char name[15]; int n,i;
main() char *string, symbol;
{ void check(char symbol , char *string);
int call(int); void repetition(char symbol , char *string);
printf("Enter number of staff\n"); for(i=1;i<=3;i++)
scanf("%d",&n); {
call (n); puts("Enter String");
} gets(string);
int call(int n) puts("Enter wanted symbol");
{ scanf("%c",&symbol);
for(i=1 ;i<=n;i++) getchar();
{ check(symbol,string);
static int j=1; repetition(symbol,string);
printf("What’s employee ID number? \n"); }
scanf("%ld",&ID); }
printf("What’s his name? \n"); void check(char symbol,char *string)
scanf("%s",&name); {
printf("What’s value of overtime hours?\n"); int n,found;
scanf("%d",&hour); n=strlen(string);
printf("What’s the fare each hour?\n"); for(int i=0;i<n;i++)
scanf("%f",&fare); {
total=hour*fare; if(*string== symbol)
sum=sum+total; {
printf("No.\tStudent ID\tName\t Overtime\tfare\t\tTotal \n"); found =1;
printf("%d\t%9ld\t%s\t%3d\t%f\t%f\n\n", break;
j,ID,name,hour,fare,total); }
j++; else
} found =0;
printf("over total for all staff is %f\n",sum); string++;
return 0; }
} if (found==1) printf("yes"); else printf("no");
}

‫الباب التاسع‬ Page 43


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)6( ‫ بقٌة إجابة تمرٌن رقم‬ ‫) أكتب برنامجا ً ٌقوم بقراءة متغٌرٌن من نوع سلسلة حرفٌة ثم‬8
‫ٌستدعً دالة تقوم بنسخ محتوٌات السلسلة األولى بالسلسلة‬
void repetition(char symbol,char *string) R,F,A ‫الثانٌة فٌما عدا الحروف‬
{
int n,count=0; #include<stdio.h>
n=strlen(string); #include<string.h>
for(int i=0;i<n;i++) main()
{ {
if(*string== symbol) char *strng1,*strng2;
count++; char *copy(char strng1[ ],char strng2[ ]);
string++;
puts("Enter first string");
}
printf("%d times",count); gets(strng1);
} puts("Enter second string");
gets(strng2);
‫ حٌث نرجع‬S2,S1 ‫ تستقبل متغٌرٌن‬find ‫) أكتب دالة تحت اسم‬7
‫ إذا كان‬. ‫ وترجع بالقٌمة‬S2 ً‫ ف‬S1 ‫بموقع أول حرف من‬ printf("string2 after copy %s",copy(strng1,strng2));
. ‫غٌر ذلك‬
#include<stdio.h> }
#include<string.h> ‫ توجد طرٌقة حل أخرى‬-: ‫ مالحظة‬
main() . ‫لهذا التمرٌن بنهاٌة إجابة هذا الباب‬ char *copy(char S1[ ],char S2[ ])
{char *S1,*S2; {
int find(char *S1,char *S2); int i,n;
puts("Enter string S1"); n=strlen(S1);
gets(S1); for(i=0;i<n;i++)
puts("Enter string S2");
{
gets(S2);
printf("Answer is %d",find(S1,S2)); if(S1[i] !='A '&& S1[i] !='F' && S1[i]!='R')
S2[i]=S1[i];
}
else
int find(char *S1,char *S2)
S2[i]=' ';
{
char char_1=*S1; }
int count =0 , n=strlen(S2); return S2;
for(int i=0;i<n;i++) }
{
if(char_1==*S2) ً‫ تعاملنا مع السلسلة الحرفٌة فً البرنامح الرئٌس‬
count=i+1; ‫أما فً البرنامج الفرعً فتم التعامل معها‬، ‫كمؤشر‬
S2++; .[ ] ‫كمصفوفة حرفٌة‬
}
return (count==0 ? 0 : count) ;
}

‫الباب التاسع‬ Page 44


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

‫ حرفا ثم‬25 ‫) المطلوب قراءة سلسلة حرفٌة ال ٌزٌد طولها عن‬9 #include<stdio.h>
: ‫استدعاء دالتٌن‬ #include<ctype.h>
. ‫ األولى مهمتها تحدٌد طول السلسلة‬ main()
. ‫ الثانٌة طباعتها عكسٌا‬ {
strlen(( ‫← من المفترض أن تكون طرٌقة الحل بدون استخدام الدلة‬ char letter;
‫ للقراءة حرفا بحرف ثم نحسب عدد‬getche( ) ‫لذلك سنلجأ إلى الدالة‬ void capital_small(char letter);
. ‫هذه الحروف‬ void small_capital(char letter);
#include<stdio.h> int is_punct(char letter);
‫باعتبار أن‬، 26 ‫تم تحدٌد طول السلسة‬
#include<conio.h> int is_digit(char letter);
‫المترجم ٌضٌف فً نهاٌة كل سلسلة‬
main()
‫ لذلك فإنه قد‬، ‫\) تلقائٌا‬.( ‫رمز النهاٌة‬
{ printf("Enter letter \n");
‫تم حجز مكان له فً الذاكرة‬
char string[26]; scanf("%c",&letter);
int strlong(int c); if(isupper(letter))
void reverse(char string[ ],int c); capital_small( letter);
int c=0; else
printf("Enter string\n"); small_capital(letter);
while((string[c]=getche())!='\r') printf("is this special symbol %d\n",is_punct(letter));
c++; printf("is this digital number %d\n",is_digit(letter));
printf("long of string is %d\n",strlong(c)); }
reverse(string,c); void capital_small(char ch)
} {
int strlong(int c) printf("%c\n",tolower(ch));
{ }
return (c>0 ? c : 0) ; void small_capital(char ch)
} {
void reverse(char string[ ],int c) printf("%c\n",toupper(ch));
{ c=c-1; }
for(int i=c ; i>=0 ; i--) int is_punct(char ch)
printf("%c",string[i]); {
} return ispunct(ch) > 0 ? . : 9 ;
}
‫) أكتب برنامجا ً إلدخال حرف عن طرٌق لوحة المفاتٌح‬9. int is_digit(char ch)
-: ً‫وباستخدام الدوال اعمل اآلت‬ {
‫ تحوٌل الحرف الكبٌر إلى حرف صغٌر‬ return isdigit(ch) > 0 ? 1 : 0;
‫ تحوٌل الحرف الصغٌر إلى حرف كبٌر‬ }
‫) فً حالة كون الحرف المدخل رمزا‬.( ‫ ترجٌع قٌمة‬
‫ ثم كتابة دالة مهمتها‬num ‫) اكتب برنامجا لقراءة عدد صحٌح‬99
ً‫) فً حالة كونه من النوع الرقم‬9( ‫خاصا ً والرقم‬
‫ أي العدد الذي ٌقبل القسمة على‬، ‫إٌجاد وطباعة األرقام األولٌة‬
. num ‫ إلى‬9 ‫الواحد وعلى نفسه فقط وذلك من‬

‫الباب التاسع‬ Page 45


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
99 ‫ إجابة تمرٌن رقم‬ 93 ‫ بقٌة إجابة تمرٌن رقم‬
#include<stdio.h> float power(float x,int n)
main() {
{ int i;
int num,i,j; float product=1;
void primary(int num); for(i=1;i<=n;i++)
printf("Enter number\n"); product=x*product;
scanf("%d",&num); return 1/product;
primary(num); }
} ‫ ثم احسب مساحة‬a,b,c ‫) صمم برنامجا ً لقراءة أطوال أضالع مثلث‬94
-: ‫ عن طرٌق المعادلة الثالٌة‬area
void primary(int num)
{ area=√ ( )( )( )
int i,j,f;
for(i=1;i<num;i++) s=
{ aa ‫ والمساحة باستخدام‬ss ‫ باستخدام الدالة‬s ‫علً أن تحسب قٌمة‬
f=1; #include<stdio.h>
for(j=2;j<i;j++) #include<math.h>
if(i%j==0) main()
f=0; {
if(f==1) float a,b,c,s,area;
printf("%3d",i);
float ss(float a,float b,float c);
}
} float aa(float a,float b,float c,float s);
printf("Enter value of a,b,c\n");
n ‫) أكتب برنامجا ً ٌقرأ قٌمتٌن األولى من العدد الصحٌح الموجب‬93
‫ مهمتها الرجوع‬power ‫ ودالة‬x ً‫والثانٌة من النوع الحقٌق‬ scanf("%f%f%f",&a,&b,&c);
-: ‫بقٌمة‬ s=ss(a,b,c);
area=aa(a,b,c,s);
printf("S =%f area = %f",s,area);
#include<stdio.h> }
main()
{ float ss(float a,float b,float c)
int n; {
float x; float s;
float power(float x,int n); s=(a+b+c)/2;
return s;
printf("Enter value of x\n"); }
scanf("%f",&x); float aa(float a,float b,float c,float s)
printf("Enter value of n\n"); {
scanf("%d",&n); float area;
printf("Answer is %.3f",power(x,n)); area=sqrt(s*(s-a)*(s-b)*(s-c));
} return area ;
}

‫الباب التاسع‬ Page 46


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

‫ من‬N ‫) صمم برنامجا كامالً وظٌفته قراءة درجات لفصل به‬95 ‫ باستخدام المؤشرات‬
‫ المطلوب استدعاء دالة تقوم بحساب متوسط درجات‬، ‫الطالب‬
#include<stdio.h>
‫طلبة وإٌجاد أكبر درجة على أن تطبع المطالٌب بالدالة الرئٌسٌة‬
.‫باستعمال المتغٌرات الخارجٌة أوال وعن طرٌق المؤشرات ثانٌا‬ main()
{
‫ باستخدام المتغيرات الخارجية‬ int i, n;
float mark,sum=0,avg,max=0;
#include<stdio.h> float maximum (float *max,float mark);
float avg,max=0; float average(float *avg,float sum,int n);
main()
{ printf("Enter number of student\n");
int i,n; scanf("%d",&n);
float mark,sum=0;
for(i=1;i<=n;i++)
int maximum (float mark);
int average(int n,float sum); {
printf("Enter mark of student No.%d\n",i);
printf("Enter number of student\n");
scanf("%f",&mark);
scanf("%d",&n);
maximum(&max,mark);
for(i=1;i<=n;i++) sum=sum+mark;
{ }
printf("Enter mark of student No.%d\n",i);
scanf("%f",&mark); average(&avg,sum,n);
printf("maximum =%f avg=%f",max,avg);
maximum(mark);
sum=sum+mark; }
} float maximum (float *max,float mark)
average(n,sum);
{
printf("%f %f",max,avg);
} if(mark>*max) *max=mark;
return 0;
int maximum (float mark) }
{ float average(float *avg,float sum,int n)
max=(mark>max)? mark : max ;
{
return 0;
} *avg=sum/n;
return 0;
int average(int n, float sum) }
{
avg= sum/n; -: ً‫) تتبع البرنامج اآلت‬96
return 0;
}

‫الباب التاسع‬ Page 47


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
-‫ حل آخر‬- )1( ‫ بقية إجابة تمرين رقم‬
)96( ‫ إجابة تمرٌن رقم‬
printf("%s\n",check(symbol,string));
int a=4; printf("and repeated %d times",repetition(symbol,string));
Fun_2() }
{
int x=7,y=11; int *ptr1,*ptr2; ptr1=&x; ptr2=&y; char *check(char symbol,char string[ ])
*ptr1=*ptr2+2; *ptr2=*ptr1+2; {
printf("X=%d B=%d",x,y); int n,found;
} char *a="yes";
int Fun_1(int x,int *p,char *y)
char *b="no";
{ a=*p; *p+=x; a=*p+3; ++*y;}
main() n=strlen(string);
{int b=5; char c='B'; for(int i=0;i<n;i++)
Fun_1(a,&b,&c); {
printf("A=%d B=%d C=%c",a,b,c); if(string[i]== symbol)
Fun_2(); {
} found =1;
break;
‫ناتج البرنامج‬ A=12 B=9 C=CX=13 B=15
}
else
found =0;
}
‫حلول أخرى لبعض التمارين السابقة من هذا الباب‬ return (found==1) ? a : b;
)1( ‫طريقة أخرى لحل تمرين رقم‬  }

#include<stdio.h> int repetition(char symbol,char string[ ])


#include<string.h> {
main()
{ int n,count=0;
int n; n=strlen(string);
char string[30], symbol;
char *check(char symbol , char string[ ]); for(int i=0;i<n;i++)
int repetition(char symbol , char string[ ]); if(string[i]== symbol)
puts("Enter String"); count++;
gets(string);
printf("Enter wanted symbol\n"); return count;
scanf("%c",&symbol); }

‫الباب التاسع‬ Page 48


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)6( ‫طريقة أخرى لحل تمرين رقم‬  -‫ حل آخر‬- )6( ‫ بقٌة إجابة تمرٌن رقم‬
#include<stdio.h>
void repetition(char symbol,char string[ ])
#include<string.h>
main() {
{ int n,count=0;
int n,i; n=strlen(string);
char string[30], symbol; for(int i=0;i<n;i++)
void check(char symbol , char string[ ]); {
void repetition(char symbol , char string[ ]); if(string[i]== symbol)
count++;
for(i=1;i<=3;i++)
}
{
puts("Enter String"); printf("%d times\n",count);
gets(string); }
puts("Enter wanted symbol"); )7( ‫طريقة أخرى لحل تمرين رقم‬ 
scanf("%c",&symbol);
#include<stdio.h>
getchar();
#include<string.h>
check(symbol,string); main()
repetition(symbol,string); {
} char S1[30],S2[30];
} int find(char S1[ ],char S2[ ]);

void check(char symbol,char string[ ]) puts("Enter string S1");


{ gets(S1);
int n,found; puts("Enter string S2");
n=strlen(string); gets(S2);
for(int i=0;i<n;i++) printf("Answer is %d",find(S1,S2));
{ }
if(string[i]== symbol)
{ int find(char S1[],char S2[])
found =1; {
break; char char_1=S1[0];
} int count =0 , n=strlen(S2);
else
for(int i=0;i<n;i++)
found =0;
{
}
if(char_1==S2[i])
if (found==1) printf("yes"); else printf("no");
count=i+1;
}
}
return (count==0 ? 0 : count) ;
}

‫الباب التاسع‬ Page 49


‫إجابة الباب العاشر‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
Exercise ‫) تمرينات‬01.6 (3( ‫ بقٌة إجابة تمرٌن رقم‬
‫ باستخدام الماكرو‬، ‫) اكتب برنامجا ً لقراءة أطوال أضالع مستطٌالت‬1 int odd(int m)
-: ‫ علما ً بأن‬، ‫المطلوب حساب مساحته ومحٌط المستطٌل‬ {
if(m%2==0)
‫المساحة = الطول × العرض‬
m=m-1;
)‫ العرض‬+ ‫× (الطول‬2 = ‫المحٌط‬
if(m>=0)
#include<stdio.h>
{
#define area(a,b) a*b
return (m+odd(m-2));
#define circum(a,b) 2*(a+b)
} else
main()
return 0;
{
}
float l,w,A,C;
printf("Enter long and width\n"); ‫) أكتب برنامجا ٌقرأ قٌمة من النوع الصحٌح وباستخدام الماكرو‬3
scanf("%f%f",&l,&w); ‫ إذا كانت غٌر‬odd ‫ واطبع‬even ‫إذا كانت القٌمة زوجٌة اطبع‬
A=area(l,w); ‫ذلك‬
C=circum(l,w); #include<stdio.h>
printf("Area =%5.2f",A); #define kind(a) { if(a%2==0) printf("even"); \
printf("\nCircumference =%5.3f",C); else printf("odd"); \
} }
‫ مستخدما ً فٌه الماكرو إلرجاع القٌمة‬، ‫) اكتب برنامجا ً الستقبال رمز‬2 main()
‫ إذا كانت غٌر‬3 ، ‫ إذا كانت القٌمة سالبة‬2 ، ‫ إذا كان القٌم موجبة‬1 {
‫ذلك‬ int x;
#include<stdio.h> printf("Enter number\n");
#define compare(a) a>=0 ? 1 : a<0 ? 2 : 3; scanf("%d",&x);
main() kind(x);
{ }
int x,result; ‫) بالفصل التاسع‬4( ‫ أعد كتابة تمرٌن‬، ‫) باستخدام اإلعادة الذاتٌة‬4
printf("Enter value of x\n");
sum=
scanf("%d",&x);
result = compare(x); #include<stdio.h>
printf("resulr = %d",result); main()
} {
‫) صمم برنامجا ً باستخدام اإلعادة الذاتٌة ٌوجد مجموع األعداد‬3 float summation(float);
N ‫ إلى‬1 ‫الفردٌة من‬ float n;
#include<stdio.h> printf("Enter value of n\n");
main() scanf("%f",&n);
{ printf("sum=%f", summation(n));
int odd(int),n; }
printf("Enter value of n\n"); float summation(float m)
scanf("%d",&n); {
printf("%d",odd(n)); if(m==0) return 0;
} else
return ((m+1)/(2*m+1)+summation(m-1));
}

‫الباب العاشر‬ Page 50


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫) المطلوب كتابة برنامجا كامالً إلدخال سلسلة حرفٌة بسطر واحد‬6 (7( ‫ بقٌة إجابة تمرٌن رقم‬
ً‫وعن طرٌق دالة المعاودة الذاتٌة اطبع هذا السطر بترتٌب عكس‬ B=fact;
. ‫بدون فرغات‬ p=A/B;
#include<stdio.h> printf("P=%f",p);
#include<string.h> }
main()
{ ‫) بالفصل الخامس لحساب متوسط االمتحانات‬16( ‫) أعد كتابة تمرٌن‬11
int i,n; . ‫ باستخدام دالة اإلعادة الذاتٌة‬A ,F ‫لكل طالب وعدد التقدٌرات‬
char str[50]; #include<stdio.h>
int print(char[ ],int); #include<process.h>
printf("Enter String\n"); float fun(int );
gets(str); int A(float);
n=strlen(str); int F(float);
printf("\nAnswer is \n"); main()
print(str,n-1); {
} int i,gender,a=0,f=0 long int ID; float max=0,avg,avgt;
for(i=1;i<=50;i++)
int print(char str[ ],int m)
{
{
printf("Enter ID for student %d\n",i);
if(m>=0)
scanf("%ld",&ID);
{
if(ID<0)
if(str[m] != ' ')
exit(0);
printf("%c", (str[m]));
printf("Gender?: 1 for Male, 2 for Female\n");
return (print(str,m-1));
scanf("%d",&gender);
} else
return 0; avg=fun(i); /*for calculate average*/
} if(avg>=85 &&avg<=100) printf("A\n");
if(avg>=70 &&avg<=84) printf("B\n");
‫) بالفصل‬6( ‫ المطلوب إعادة تمرٌن‬، ً‫) باستخدام المعالج األول‬7 if(avg>=55 &&avg<=69) printf("C\n");
‫الخامس‬ if(avg>=45 &&avg<=54) printf("D\n");
#include<stdio.h> if(avg<=45) printf("F\n");
#define factorial(n,fact) { fact=1; \ if(max<avg) max=avg;
for (i=1;i<=n;i++) fact=fact*i;\ avgt+=avg;
}
a=A(avg);
main()
f=F(avg);
{
}
float i,fact,A,B,p;
printf("number of A =%d f=%d\n",a,f);
int n,m;
avgt/=50;
printf("Enter value of n and m\n");
printf("total verage of mark is %f\n",avgt);
scanf("%d%d",&n,&m);
printf("maximum average is %f\n",max);
factorial(n,fact);
}
A=fact;
float fun(int i)
factorial(n-m,fact);
{ float mark,avg,sum=0;
for(int j=1;j<=3;j++)
{

‫الباب العاشر‬ Page 51


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
(8( ‫ بقٌة إجابة تمرٌن رقم‬ (11( ‫ بقٌة إجابة تمرٌن رقم‬
printf("Enter mark %d for student %d \n",j,i); #include<stdio.h>
scanf("%f",&mark); main()
sum=sum+mark; {
avg=sum/3; int POW_1(float,int);
}
int x,n;
printf("average for student No.%d=%f\n",i,avg);
return avg ; printf("Enter value of x and n\n");
} scanf("%d%d",&x,&n);
int A(float avg) printf("Answer is %d",POW_1(x,n));
{ static int A=0; }
if(avg>=85 &&avg<=100) int POW_1(float y,int m)
A++; {
return A; if(m>0)
} {
int F(float avg) return (y*POW_1(y,m-1));
{ static int F=0; }
if(avg<=45) else
F++; return 1;
return F; }
}
‫) قم بكتابة برنامج إلٌجاد أكبر قٌمة وأصغر قٌمة ألي قٌمتٌن‬11
1 ‫) باستخدام دالة اإلعادة الذاتٌة أوجد مجموع مربع األعداد من‬11
. ‫باستخدام الماكرو‬
n ‫إلى‬ #include<stdio.h>
#include<stdio.h> #define biggst(a,b,max) if(a>=b) max=a; else max=b;
main() #define small(a,b,min) if(a<=b) min=a; else min=b;
{ main()
int square(int); {
int n; float x,y,max,min;
printf("Enter value of n\n"); printf("enter two values\n");
scanf("%d",&n); scanf("%f%f",&x,&y);
printf("Answer is %d",square(n)); biggst(x,y,max);
} small(x,y,min);
int square(int m) printf("maximum number is %f\n",max);
{ printf("minimum number is %f\n",min);
if(m>=0) }
{
return (m*m+square(m-1)); ‫ ثم أوجد اآلتً باستخدام‬N ‫) اكتب برنامجا ً لقراءة قٌمة المتغٌر‬12
} else -: ‫الماكرو‬
return 0;
}
‫ اكتب برنامج لحساب‬POW_1 ‫) باستخدام دالة اإلعادة الذاتٌة‬11
‫ أي عدد كسري‬X ‫ عدد صحٌح موجب‬N ‫بحٌث تكون‬

‫الباب العاشر‬ Page 52


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

a) S=2! + 4! + 6! + … + N! -C- ‫( فقرة‬12( ‫ إجابة تمرٌن رقم‬


#include<stdio.h>
#define factorial(m,sum) { sum1=0;fact=1; \
#include<stdio.h> for (i=2;i<=m;i+=4) \
#define factorial(m,sum) { sum=0; for (i=2;i<=m;i+=2) \ { for(j=1;j<=i;j++) \
{ fact=1; \ fact =fact*j; \
for(j=1;j<=i;j++) \ sum1=sum1 +((i-1)/fact); } \
fact=fact*j; \ sum2=0;fact=1; for (i=3;i<=m;i+=4) \
sum=sum+fact;} } { for(j=1;j<=i;j++) \
main() fact =fact*j; \
{ sum2=sum2 +(fact/(i+1)); } \
int n,s,i,j,fact; sum=sum1-sum2; }
printf("Enter value of n\n"); main()
scanf("%d",&n); {
factorial(n,s); int i,j,n;
printf("S=%d",s); float s,fact,sum1,sum2;
} printf("Enter value of n \n");
scanf("%d",&n);
b) S =
factorial(n,s);
#include<stdio.h>
#define factorial(m,sum) { sum=0;fact=1; \ printf("S=%f",s);
for (i=2;i<=m;i++) \ }
{ fact =fact*i; \
‫) المطلوب تتبع البرنامج اآلتً أوالً ثم تحوٌله باستخدام‬13
if(i%2==0) \ . ‫الدالة العادٌة ثانٌا‬
sum=sum +(1/fact); \
else sum=sum-(1/fact); } } #include<stdio.h>
main() int fun(int m,int n);
{ main()
int i,n; {
float s,fact; int n=7;
printf("Enter value of n \n"); printf("fun=%d",fun(n,n));
scanf("%d",&n); }
factorial(n,s); int fun(int m,int n)
printf("S=%f",s); {
} if(m>0)
return (n+fun(m-1,n));
c) S = }

‫ناتج البرنامج‬ fun=49

‫الباب العاشر‬ Page 53


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
‫) باستخدام الدوال الفرعٌة العادٌة‬13( ‫ إجابة تمرٌن رقم‬ ‫ ) باستخدام الدالة الفارغة‬a-14( ‫ إعادة كتابة تمرٌن رقم‬
#include<stdio.h>
#include<stdio.h>
main()
int fun(int n);
{
main()
void function();
{
function();
int n=7; }
printf("fun=%d",fun(n)); void function()
} {
int fun(int n) int a=5,b=6,product;
{ float c,d;
int i, sum=0; printf("Enter 2 values-->");
for(i=1;i<=n;i++) scanf("%f%f",&c,&d);
sum=n+sum; printf("\n%d*%d=%d",a,b,a*b);
return sum; printf("\n%.2f*%.2f = %.2f",c,d,c*d);
} }

‫) أوجد ناتج تنفٌذ البرامج التالٌة‬14


a) b)
#include<stdio.h> #include<stdio.h>
#define write printf("Enter 2 values-->"); #define write(a,b) printf("\nA=%d B=%d",a,b);
#define read_cd scanf("%f%f",&c,&d); #define use_for { for(i=1;i<=n;i++) \
#define mult(n,m) n*m { \
main() scanf("%d",&x); \
{ if(x%2 == 1) \
int a=5,b=6; s1++; \
float c,d; else \
write; s2++; \
read_cd; } \
printf("\n%d*%d=%d",a,b,mult(a,b)); }
printf("\n%.2f*%.2f = %.2f",c,d,mult(c,d)); main()
} {
ً‫ ٌكون الناتج كالتال‬c=1,d=2 ‫عندما نقوم بإدخال قٌمة‬ int i,s1,s2,x,n=5;
5*6=30 s1=s2=0;
1.00*2.00 = 2.00 use_for;
write(s1,s2);
}
‫هذا البرنامج مهمته إٌجاد عدد القٌم الزوجٌة المدخلة والفردٌة من‬
. ‫خالل خمسة أعداد ٌقوم بإدخالها المستخدم‬
ً‫ سٌكون الناتج كالتال‬5 4 3 2 1 ‫ إذا كان اإلدخال‬: ‫مثال‬
A=2 B=3

‫الباب العاشر‬ Page 54


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬
‫إعادة كتابة تمرٌن رقم (‪ ) a-14‬باستخدام الدالة الفارغة‬ ‫‪‬‬
‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫{‬
‫;)(‪void function‬‬
‫;)(‪function‬‬
‫}‬
‫)( ‪void function‬‬
‫{‬
‫;‪int i,s1,s2,x,n=5‬‬
‫;‪s1=s2=0‬‬
‫)‪for(i=1;i<=n;i++‬‬
‫{‬
‫;)‪scanf("%d",&x‬‬
‫)‪if(x%2==0‬‬
‫;‪s1++‬‬
‫‪else‬‬
‫;‪s2++‬‬
‫}‬
‫;)‪printf("\nA=%d B=%d",s1,s2‬‬
‫}‬

‫الباب العاشر‬ ‫‪Page 55‬‬


‫شر‬ ‫إجابة الباب احلاي‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬
‫‪ )7144‬تمرينات ‪Exercise‬‬ ‫‪ ‬باستخدام جمل التكرار‬
‫>‪ )1 #include<stdio.h‬قم بكتابة برنامج ٌقوم بقراءة ‪ 01‬قٌم وتخزٌنها بالمصفوفة ‪ mat‬ثم اطبع‬
‫هذه المصفوفة بالعكس ‪.‬‬ ‫)(‪main‬‬
‫>‪#include<stdio.h‬‬ ‫{‬
‫)(‪main‬‬ ‫;]‪int i,j,a=11,list[4][5‬‬
‫{‬ ‫)‪for(i=0;i<4;i++‬‬
‫;]‪int i,mat[10‬‬ ‫)‪for(j=0;j<5;j++‬‬
‫)‪for(i=0;i<10;i++‬‬ ‫;‪list[i][j]=a++‬‬
‫;)]‪scanf("%d",&mat[i‬‬
‫)‪for(i=0;i<4;i++‬‬
‫)‪for(i=9;i>=0;i--‬‬ ‫{‬
‫;)]‪printf("%3d",mat[i‬‬ ‫)‪for(j=0;j<5;j++‬‬
‫}‬ ‫;)]‪printf("%3d",list[i][j‬‬
‫‪ )2‬المطلوب كتابة برنامج لطباعة المصفوفة الثنائٌة التالٌة وذلك باستخدام القٌم‬ ‫;)"‪printf("\n‬‬
‫المبدئٌة مرة وجمل التكرار مرة أخرى ‪ ،‬على أن تظهر المصفوفة بالشكل‬ ‫}‬
‫اآلتً ‪-:‬‬ ‫}‬
‫‪00 01 02 03 04‬‬
‫‪05 06 07 08 11‬‬ ‫‪ )3‬اذكر موقع القٌمة ‪ 06‬بالنسبة للمصفوفة ‪ matrix‬إذا أعطٌت‬
‫‪10 11 12 13 14‬‬ ‫اإلشهار التالً ‪-:‬‬
‫‪15 16 17 18 21‬‬ ‫‪int‬‬ ‫{=]‪matrix[4][4‬‬
‫‪{10,11,12,-1},‬‬
‫‪ ‬باستخدام القٌم اإلبتدائٌة‬ ‫‪{13,14,15,-2},‬‬
‫>‪#include<stdio.h‬‬ ‫‪{16,17,18,-3},‬‬
‫)(‪main‬‬ ‫‪{19,20,21,-4},‬‬
‫{‬ ‫;}‬
‫;‪int i,j‬‬
‫{=]‪int list[4][5‬‬ ‫>‪#include<stdio.h‬‬
‫‪{11,12,13,14,15},‬‬ ‫)(‪main‬‬
‫‪{16,17,18,19,20},‬‬ ‫{‬
‫‪{21,22,23,24,25},‬‬ ‫;‪int i,j‬‬
‫‪{26,27,28,29,30},‬‬ ‫{=]‪int matrix[4][4‬‬
‫;}‬ ‫‪{10,11,12,-1},‬‬
‫‪{13,14,15,-2},‬‬
‫‪{16,17,18,-3},‬‬
‫)‪for(i=0;i<4;i++‬‬ ‫‪{19,20,21,-4},‬‬
‫{‬ ‫;}‬
‫)‪for(j=0;j<5;j++‬‬ ‫)‪for(i=0;i<4;i++‬‬
‫;)]‪printf("%3d",list[i][j‬‬ ‫)‪for(j=0;j<4;j++‬‬
‫;)"‪printf("\n‬‬ ‫)‪if(matrix[i][j]==17‬‬
‫}‬ ‫;)‪printf("position at:- row(%d) column(%d)",i+1,j+1‬‬
‫}‬
‫}‬

‫الباب الحادي عشر‬ ‫‪Page 56‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
mat ‫) المطلوب كتابة برنامج كامل لقراءة مصفوفة ذات بعدٌن‬3 ‫ لها‬fat ‫) اكتب برنامجا ً لقراءة عدد من القٌم وتخزٌنها فً مصفوفة‬5
‫ أوجد حاصل ضرب‬، ‫ من الصفوف واألعمدة‬n ‫تحتوي على‬ ‫ أوجد مجموع عناصرها وأكبر‬، ‫ثالثة صفوف وأربعة أعمدة‬
ً‫عناصر القطر الرئٌسً وحاصل جمع العناصر أسفل القطر الرئٌس‬ . ‫عنصر فٌها‬
#include<stdio.h> #include<stdio.h>
#define max 10 main()
main() {
{ int i,j,fat[3][4],sum,max;
int i,j,row,column,product=1,sum=0; printf("Enter items of matrix\n");
int mat[max][max];
for(i=0;i<3;i++)
printf("Enter value of row and column\n");
for(j=0;j<4;j++)
scanf("%d%d",&row,&column);
scanf("%d",&fat[i][j]);
for(i=0;i<row;i++) sum=0;
{ max=fat[0][0];
printf("Enter items of row %d\n",i+1); for(i=0;i<3;i++)
for(j=0;j<column;j++) for(j=0;j<4;j++)
scanf("%d",&mat[i][j]); {
} sum=sum+fat[i][j];
for(i=0;i<row;i++) if(fat[i][j]>max)
for(j=0;j<column;j++) max=fat[i][j];
{ }
if(i==j) printf("summation is %d\n",sum);
product=product*mat[i][j]; printf("maximum item is %d",max);
if(j<i) }
sum=sum+mat[i][j]; ً ‫ اكتب برنامجا‬int fun(int a[ ],int n,int x) ‫) باستخدام الدالة‬6
} ‫ بحٌث‬x ‫ وقٌمة‬a ‫ٌقوم بقراءة عدد من القٌم وتخزٌنها فً مصفوفة‬
printf("product of main diagonal items =%d",product); . a ‫ فً المصفوفة‬x ‫تقوم هذه الدالة بإرجاع عدد تكرار‬
printf("sum of items under main diagonal =%d",sum); #include<stdio.h>
} main()
ً ً
. ‫) أكتب برنامجا لتخزٌن اسمك كامال فً مصفوفة ذات بعدٌن‬4 {
#include<stdio.h> int fun(int a[ ] ,int n , int x);
main() int i,n,x,result,a[30];
{ printf("Enter number of items\n");
int i; scanf("%d",&n);
char name[3] [8]= { "mohamed", printf("Enter items of matrix\n");
" Ahmed", for(i=0;i<n;i++)
" Drebika", scanf("%d",&a[i]);
};
printf("my name is "); printf("\nEnter value of x\n");
for(i=0;i<3;i++) scanf("%d",&x);
printf("%s",name[i]); result =fun(a,n,x);
} printf("number of repetation=%d",result);
}

‫الباب الحادي عشر‬ Page 57


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)6( ‫ بقٌة إجابة تمرٌن رقم‬ )8( ‫ إجابة تمرٌن رقم‬
int fun(int a[ ], int n ,int x)
{ #include<stdio.h>
int i,count=0; main()
for(i=0;i<n;i++) {
{ int i, count=0;
if(a[i]==x) float stdn[20],sum=0,avg=0;
count++; printf("Enter mark of students\n");
} for(i=0;i<20;i++)
return count; { scanf("%f",&stdn[i]);
} if (stdn[i]>=50)
4 ‫ كل واحدة منها تحتوي على‬B , A ‫) اكتب برنامجا ً ٌقرأ مصفوفتٌن‬7 sum=sum+stdn[i];
‫ وأوجد حاصل جمعهما وحاصل ضربهما على أن ٌكون‬،‫عناصر‬ if(stdn[i]<50)
-: ً‫الناتج بالشكل التال‬ count++;
A B A+B A*B }
------------------------------------------------------------- if(count<20) avg=sum/(20-count);
. . . .
printf("average mark of success students = %f",avg);
. . . .
printf("number of failed students = %d ",count);
-------------------------------------------------------------
}
#include<stdio.h>
main() ً‫) أعد كتابة البرنامج بالتمرٌن السابق مع تخزٌن الطلبة الناجحٌن ف‬01
{ ‫ مع‬fail ‫ والطلبة الغٌر ناجحٌن فً مصفوفة‬pass ‫مصفوفة‬
int i,A[5],B[5]; . ‫طباعة هاتٌن المصفوفتٌن‬
printf("Enter items of matrix A\n"); #include<stdio.h>
for(i=0;i<5;i++) main()
scanf("%d",&A[i]); {
int i,stdn[20],pass[20],fail[20],a=0,b=0;
printf("Enter items of matrix B\n"); float sum=0,avg=0;
for(i=0;i<5;i++) printf("Enter marks of students\n");
scanf("%d",&B[i]); for(i=0;i<20;i++)
printf("A\tB\tA+B\tA*B\n"); {
printf("---------------------------\n"); scanf("%d",&stdn[i]);
if(stdn[i]>=50)
for(i=0;i<5;i++) {
printf("%d\t%d\t%d\t%d\n",A[i],B[i],A[i]+B[i],A[i]*B[i]); pass[a]=stdn[i];
printf("----------------------------\n"); a=a+1;
} sum=sum+stdn[i];
‫ المطلوب كتابة برنامج لقراءة درجات‬، ً ‫ طالبا‬11 ‫) فصل دراسً به‬8 }
‫ مع إٌجاد متوسط درجات‬stdn ‫هؤالء الطلبة وتخزٌنها فً مصفوفة‬ else
. ‫الطلبة الناجحٌن وعدد الطلبة الغٌر ناجحٌن‬ {
fail[b]=stdn[i];
b=b+1;
}
}

‫الباب الحادي عشر‬ Page 58


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)01( ‫ بقٌة إجابة تمرٌن رقم‬ b)
#include<stdio.h>
if(a !=0) avg=sum/a; #define R 3 #define C 4
printf("marks of pass student\n"); main()
for(i=0;i<a;i++) {
int M[R][C]={11,-2,-5,13,-9,20,
printf("%3d\n",pass[i]);
16,-3,17,-7,19,10};
printf("marks of fail student\n"); int i,j;
for(i=0;i<b;i++) for(i=0;i<R;i++)
for(j=0;j<C;j++)
printf("%3d\n",fail[i]);
if(M[i][j]<12)
printf("average of success student = %f\n",avg); ++M[i][j];
printf("number of failed student= %d ",b); for(i=0;i<R;i++)
{
}
for(j=0;j<C;j++)
-: ‫) أوجد ناتج تنفٌذ البرامج اآلتٌة‬00 printf("%5d",M[i][j]);
a) printf("\n");
#include<stdio.h> }
main() }
{
12 -1 -4 13
int i;
‫ناتج البرنامج‬ -8 20 16 -2
char M[]="Look C is good language";
for(i=0;M[i]!='\0';i++) 17 -6 19 11
if(i%2!=0) ‫ كل واحد‬B,A ‫) المطلوب كتابة برنامج ٌقوم بقراءة مصفوفتٌن‬01
M[i]='*'; ‫ عناصر مع دمج عناصر هاتٌن‬4 ‫منهما تحتوي على‬
for(i=0;M[i]!='\0';i++)
‫ وترتٌب عناصرها‬C ‫المصفوفتٌن وحفظ النتائج فً مصفوفة‬
printf("%c",M[i]);
} A=1,3,9,4,5 ‫ فمثالً إذا كانت‬، ‫ترتٌبا ً تصاعدٌا قبل الطباعة‬
C=1,1,2,3,3,4,5,6,9,9 ‫ علٌه تكون‬B=3,6,2,1,9
‫ناتج البرنامج‬ L*o* * *s*g*o* *a*g*a*e
#include<stdio.h>
main()
{
int A[5],B[5],C[10];
int i,j,temp;

printf("Enter items of matrix A\n");


for(i=0;i<5;i++)
scanf("%d",&A[i]);

for(i=0;i<5;i++)
C[i]=A[i];

‫الباب الحادي عشر‬ Page 59


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

)01( ‫ بقٌة إجابة تمرٌن رقم‬


printf("Enter items of matrix B\n"); for(i=0;i<3;i++)
for(i=5;i<10;i++) {
scanf("%d",&B[i]); printf("Enter ID number for student %d\n",i+1);
scanf("%ld",&ID[i]);
for(i=5;i<10;i++) sum=0;
C[i]=B[i]; for(j=0;j<3;j++)
{
for(i=0;i<10-1;i++) printf("Enter mark of Test %d For student %d\n",j+1,i+1);
for(j=i+1;j<10;j++) scanf("%f",&TEST[i][j]);
{ sum=sum+TEST[i][j];
if(C[j] < C[i]) }
{ AVGT[i]=sum/3.0;
temp=C[i]; }
C[i]=C[j];
C[j]=temp; for(j=0;j<3;j++)
} {
} sum=0;
for(i=0;i<3;i++)
for(i=0;i<10;i++) sum=sum+TEST[i][j];
printf("%3d",C[i]); AVG[j]=sum/3.0;
} }
‫ طلبه اكتب برنامح لقراءة أرقام القٌد‬2 ‫) فصل دراسً به‬02
، ‫وثالثة امتحانات لكل طالب وبعد تخزٌن هذه البٌانات‬ printf("NO\tID\tTEST_1\t\tTEST_2\t\tTEST_3\t\tAVG\n");
‫المطلوب إٌجاد متوسط كل طالب ومتوسط كل امتحان‬
-: ً‫بحٌث ٌكون الناتج اآلت‬ for(i=0;i<3;i++)
{
NO ID TEST_1 TEST_2 TEST_3 AVG
printf("%d\t%ld\t",i+1,ID[i]);
1 … … … … …
for(j=0;j<3;j++)
2 … … … … …
printf("%f\t",TEST[i][j]);
3 … … … … …
printf("%f\n",AVGT[i]);
AVG … … …
}
printf("-------------------------------------------------------\n");
printf("AVG");
#include<stdio.h>
for(j=0;j<3;j++)
main()
printf("\t\t%f",AVG[j]);
{
}
int i,j,sum;
long int ID[3];
float TEST[3][3];
float AVGT[3],AVG[3];

‫الباب الحادي عشر‬ Page 60


‫إجابة الباب الثاني عشر‬
‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
Exercise ‫) تمرينات‬41.8 . ‫) أعد التمرٌن السابق باستخدام دالة واحدة عوضا ً عن دالتٌن‬2
‫) قم بكتابة برنامج لقراءة عدد من القٌم وتخزٌنها فً مصفوفة ذات‬1 #include<stdio.h>
‫أربعة صفوف وخمسة أعمدة ثم استدعً دالة ترجع بمجموع‬ #define ROW 4
‫عناصر العمود الثانً والخامس ودالة أخرى ترجع بحاصل‬ #define COL 5
. ‫ضرب عناصر الصف األول والثالث‬ int array[ROW][COL];
#include<stdio.h> int i,j,product=1,sum=0;
#define ROW 4 main()
#define COL 5 {
main() void sum_product();
{
int array[ROW][COL]; for(i=0;i<ROW;i++)
int i,j; for(j=0;j<COL;j++)
scanf("%d",&array[i][j]);
int A(int array[ ][COL]); sum_product();
int B(int array[ ][COL]);
printf("2th column + 5th column= %d\n",sum);
for(i=0;i<ROW;i++) printf("1st row x 3th row= %d ",product);
for(j=0;j<COL;j++) }
scanf("%d",&array[i][j]); void sum_product()
{
printf("2th column + 5th column= %d\n",A(array));
printf("1st row x 3th row= %d ",B(array)); for(i=0;i<ROW;i++)
} for(j=0;j<COL;j++)
if(j==1 || j==4)
int A(int list[ROW][COL]) sum=sum+array[i][j];
{
int i,j,sum=0; for(i=0;i<ROW;i++)
for(i=0;i<ROW;i++) for(j=0;j<COL;j++)
for(j=0;j<COL;j++) if(i==0 || i==2)
if(j==1 || j==4) product=product*array[i][j];
sum=sum+list[i][j]; }
return sum;
} ‫) صمم برنامجا ً ٌقوم بقراءة عدد من القٌم وتخزٌنها فً مصفوفة‬3
‫ وٌستدعً دالتٌن‬، ‫ لها ثالثة صفوف وأربعة أعمدة‬mat
int B(int matrix[ ][COL])
‫األولى ترجع بمجموع عناصر هذه المصفوفة وثانٌة ترجع‬
{
. ‫بأكبر عنصرها‬
int i,j,product=1; #include<stdio.h>
for(i=0;i<ROW;i++) #define ROW 3
for(j=0;j<COL;j++) #define COL 4
if(i==0 || i==2) main()
product=product*matrix[i][j]; {
return product; int mat[ROW][COL];
} int i,j;

‫الباب الثاني عشر‬ Page 61


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)3( ‫ بقٌة إجابة تمرٌن رقم‬ )4( ‫ بقٌة إجابة تمرٌن رقم‬
int summation(int mat[ROW][COL]); printf("Enter Items of matrix\n");
int maximum(int mat[ROW][COL]); for(i=0;i<MAX;i++)
scanf("%d",&mat[i]);
for(i=0;i<ROW;i++)
for(j=0;j<COL;j++)
printf("%d neg.numbers",check(mat,&odd_number));
scanf("%d",&mat[i][j]);
printf(" and %d odd numbers ",odd_number);
printf("summation of matrix = %d\n",summation(mat)); }
printf("max item in matrix= %d ",maximum(mat)); int check(int mat[ ],int *odd)
} {
int i,neg=0;
int summation(int matrix[ROW][COL])
*odd=0;
{
for(i=0;i<MAX;i++)
int i,j,sum=0;
{
for(i=0;i<ROW;i++)
if(mat[i] < 0) neg=neg+1;
for(j=0;j<COL;j++)
if(mat[i] %2 !=0) *odd=*odd+1;
sum=sum+matrix[i][j];
}
return sum; return neg;
} }
int maximum(int list[ROW][COL]) ‫) صمم برنامجا ً ٌقوم باستدعاء دالة تقرأ مصفوفتٌن كل واحدة‬5
{ ‫ أوجد حاصل جمعهما عن طرٌق‬، ‫ عناصر‬4 ‫تحتوي على‬
int i,j,max=list[0][0]; ‫ ودالة ثالثة‬mul ‫ وحاصل ضربهما عن طرٌق دالة‬add ‫دالة‬
. ‫ مهمتها طباعة الناتج‬print
for(i=0;i<ROW;i++)
#include<stdio.h>
for(j=0;j<COL;j++)
#define size 4
if(list[i][j]>max)
int i,j;
max=list[i][j];
main()
return max; {
}
int A[size],B[size],C[size],D[size];
‫ من القٌم الصحٌحة وتخزٌنها فً مصفوفة‬01 ‫) أكتب برنامج ٌقرأ‬4
‫ذات بعد واحد ثم استدعً دالة واحدة ترجع بعدد القٌم السالبة‬ void read(int a[ ]);
. ‫وعدد القٌم الفردٌة‬ void add(int a[ ],int b[ ],int c[ ]);
#include<stdio.h> void mul(int a[ ],int b[ ],int d[ ]);
#define MAX 10 void write(int c[ ],int d[ ]);
main() -: ‫مالحـظة‬
read(A);
{ ‫من شروط عملٌة الضرب الجبري لمصفوفتٌن‬
read(B);
int i,mat[MAX]; ‫هو أن ٌكون عدد عناصرالصف بالمصفوفة‬
add(A,B,C);
int odd_number; ‫األولى مساوٌا ً لعدد عناصر العمود بالمصفوفة‬
mul(A,B,D);
int check(int mat[ ],int *odd ); write(C,D); ، ‫ وهذا الشرط غٌر متحقق بهذا التمرٌن‬، ‫الثانٌة‬
} ‫لذا ستكون عملٌة الضرب هً ضرب كل‬
ً ‫ مشابهة تماما‬، ‫عنصر فً العنصر المقابل له‬
. ‫لطرٌقة الحل بالتمرٌن الثامن فً الباب السابق‬

‫الباب الثاني عشر‬ Page 62


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)5( ‫ بقٌة إجابة تمرٌن رقم‬ )6( ‫ بقٌة إجابة تمرٌن رقم‬
void read(int a[ ])
{ printf("Enter mark of students\n");
static int m=1; for(i=0;i< M;i++)
printf("Enter elements of matrix %d\n",m); {
for(i=0;i<size;i++) scanf("%f",&stdn[i]);
scanf("%d",&a[i]); }
m++; printf("driffernt between max and min %f",diff(stdn));
} }
void add(int a[ ],int b[ ],int c[ ])
float diff(float mark[ ])
{
{
for(i=0;i<size;i++)
int i;
c[i]=a[i]+b[i];
float max,min,different;
}
max=min=mark[0];
void mul(int a[ ],int b[ ],int d[ ])
for(i=1;i< M;i++)
{
{
for(i=0;i<size;i++)
if(mark[i]> max)
d[i]=a[i]*b[i];
max=mark[i];
}
void write(int c[ ],int d [ ]) if(mark[i]< min)
{ printf("Summation of two matrix is\n"); min=mark[i];
for(i=0;i<size;i++) }
printf("%3d",c[i]); different=max-min;
printf("\nMultiplicatio of two matrix is\n"); return different;
for(i=0;i<size;i++) }
printf("%3d",d[i]); ‫ اكتب برنامجا ً لقراءة وتخزٌن رقم‬،‫) عن طرٌق المصفوفات‬7
} ‫ طلبة استخدم دالة لطباعة أكبر درجة‬01 ‫الطالب ودرجته لعدد‬
‫ طلبة وتخزٌنها‬01 ‫) قم بكتابة برنامجا ً لقراءة درجات لعدد‬6 . ‫وأصغر درجة ورقم القٌد‬
‫فً مصفوفة مع استدعاء دالة لحساب الفرق بٌن أكبر درجة‬ #include<stdio.h>
. ‫وأصغر درجة بالمصفوفة‬ #define M 10
#include<stdio.h> main()
#define M 10 {
main() void prnt(float mark[ ],int Id[ ]);
{ float mark[M];
int i;
int Id[M];
float stdn[M];
float diff(float stdn[ ]); int i;

‫الباب الثاني عشر‬ Page 63


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)7( ‫ بقٌة إجابة تمرٌن رقم‬ )8( ‫ بقٌة إجابة تمرٌن رقم‬
printf("Enter Id number and mark for students\n");
for(i=0;i< M;i++) main()
{ {
scanf("%d",&Id[i]); char want[ ]="ALI";
scanf("%f",&mark[i]); char name[MAX][LEN];
} int i,num;
float mark[MAX];
prnt(mark,Id);
printf("Enter number of student\n");
} scanf("%d",&num);
void prnt(float mark[ ],int Id[ ]) for(i=0;i<num;i++)
{ {
int i,a=0,b=0; printf("Enter mark and name of student %d\n",i+1);
float max,min; scanf("%f",&mark[i]);
max=min=mark[0]; getchar();
for(i=1;i< M;i++) gets(name[i]);
{ }
if(mark[i]> max)
{ for(i=0;i<num;i++)
max=mark[i]; {
a=i; if(! strncmp(name[i],want,3))
} printf("%s %f\n",name[i],mark[i]);
}
if(mark[i]< min)
}
{
min=mark[i]; a -: ‫) ما هو ناتج البرامج التالٌة‬9
b=i; ) #include<stdio.h>
} #define R 3
} #define C 4
printf("maximum mark is %f and his Id is %d\n",max,Id[a]); int i,j,k=0;
printf("minimum mark is %f and his Id is %d\n",min,Id[b]); main()
} {
‫ من‬num ‫) اكتب برنامجا ً كامالً لقراءة درجات الطالب واسمه لعدد‬8 int M[R][C]={10,8,-5,13,-9,20,16,-3,17,
‫ ثم أوجد واطبع قائمة بأسماء الطلبة الذٌن لهم االسم األول‬، ‫الطلبة‬ -7,18,15};
‫ مع درجاتهم‬ALI int use_fun(int M[ ][C]);
#include<stdio.h> use_fun(M);
#include<conio.h> for(i=0;i<R;i++)
#include<string.h> {
#define MAX 51 for(j=0;j<C;j++)
#define LEN 12 printf("%5d",M[i][j]);
printf("\n");
}

‫الباب الثاني عشر‬ Page 64


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
(a) ‫ فقرة‬9 ‫ بقٌة تمرٌن‬ (a) ‫ فقرة‬9 ‫ بقٌة تمرٌن‬

printf("K=%d",k); {
} sum+=*(ptr+i);
++b;
int use_fun(int N[ ][C])
}
{ return (c=sum/b);
for(i=0;i<R;i++) }
for(j=0;j<C;j++) ‫ ناتج البرنامج‬The avg 12.50
if(N[i][j] %2 ==0)
{ ‫ ذات البعد الواحد‬mat ‫) اكتب برنامجا ً رئٌسٌا لقراءة مصفوفة‬01
N[i][j]=N[i][j] / 2; ‫ ثم ٌقوم باستدعاء الدالة بالصورة‬21 ‫ الٌزٌد عن‬size ‫حجمها‬
k+=N[i][j]; int max(int size , int mat[ ]) -: ‫التالٌة‬
} . ‫بحٌث ترجع بمتوسط القٌم الزوجٌة الموجبة‬
}
#include<stdio.h>
5 4 -5 13 main()
‫ناتج البرنامج‬ -9 10 8 -3 { int max(int size,int mat[ ]);
17 -7 9 15 int i,size,mat[20],result;
k=36
b) printf("Enter size of array less than or equal 20\n");
scanf("%d",&size);
#include<stdio.h>
for(i=0;i<size;i++)
#define L 10
main() {
{ printf("\nEnter item No. %d\n",i+1);
int rat[L]={7,1,-4,2,9,7,3,-10,16,5}; scanf("%d",&mat[i]);
float ans,use_fun(int rat[ ]); }
ans=use_fun(rat); result=max(size,mat);
printf("\n The avg %.2f ",ans); printf("avg = %d",result);
return 0; }
}
int max(int size,int mat[ ])
float use_fun(int rat[ ])
{ { int i,sum=0,even=0 ;
int a,b,i,*ptr; for(i=0; i<size ;i++)
float c,sum; { if(mat[i] % 2 ==0 && mat[i] >=0 )
sum=b=0; {
ptr=rat; sum=sum+mat[i];
a=*ptr; even=even+1;
for(i=1;i<L;i++) }
if(*(ptr+i)>a) }
return sum/even;
}

‫الباب الثاني عشر‬ Page 65


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
: ‫ واستخدم دالة ترجع بالرسالة‬A ‫) اكتب برنامجا ً ٌقرأ مصفوفة مربعة‬00 ‫) المطلوب شرح ما الذي ٌفعله البرنامج التالً ثم تنفٌده وادخال‬02
The matrix is symmetric . ‫البٌانات المناسبة وإٌجاد الناتج‬
‫ أو الرسالة‬n,m ‫ لجمع قٌم‬A(m,n)=A(n.m) ‫فً حالة التماثل أي‬ #include<stdio.h>
The matrix is not symmetric #include<conio.h>
‫فً حالة عدم التماثل‬ #include<stdlib.h>
#include<stdio.h> main()
#define MAX 10 { int i,j,*s,n,size,ma,mi,t;
main() float ss=0,avg;
{ clrscr();
int i,j,size,mat[MAX][MAX]; printf("Type size of array ==>");
scanf("%d",&n);
char *check(int mat[ ][MAX],int size );
s=(int*)malloc(n*sizeof(int));
printf("square matrix has same value of row and column\n"); printf("Enter elements of array ==>");
for(i=0;i<n;i++)
printf("enter one value to represent row or column \n");
{
scanf("%d",&size);
scanf("%d",(s+i))
printf("Enter Items of matrix\n"); ss +=*(s+i);
for(i=0;i<size;i++) }
ma=mi=*s;
for(j=0;j<size;j++)
for(i=0;i<n;i++)
scanf("%d",&mat[i][j]); {
if(ma < *(s+i))
printf("%s",check(mat,size));
ma = *(s+i);
}
if(mi > *(s+i))
char *check(int mat[ ][MAX],int size ) mi=*(s+i);
{ }
int i,j, symtrc; printf("MA ==>%d\nMI ==>%d\n",ma,mi);
char *a="The matrix is symmetric";
char *b="The matrix is not symmetric"; for(i=0;i<n ;i++)
for(j=0;j<n ;j++)
for(i=0;i<size;i++) {
for(j=0;j<size;j++) if(*(s+i) <= *(s+j))
{ {
if( mat[i][j] != mat[j][i]) t=*(s+i);
{ *(s+i) = *(s+j);
symtrc =0; *(s+j) = t;
break; }
} }
else for(i=0;i<n;i++)
symtrc =1; printf("A[%d] ==>%d ",i,*(s+i));
} avg=ss/n;
return (symtrc ==1) ? a : b; printf("The average ==> %.2f",avg);
} }

‫الباب الثاني عشر‬ Page 66


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي" ‪298 4289787‬‬

‫‪ ‬إجابة تمرٌن رقم (‪)02‬‬


‫هذا البرنامج ٌقوم بتخزٌن مصفوفة ذات بعد واحد حجمها‬ ‫;‪int *max,maximum‬‬
‫ٌعتمد على المستخدم ‪ٌ ،‬قوم البرنامج بإٌجاد أعلى قٌمة فً‬ ‫;‪max=&maximum‬‬
‫المصفوفة المدخلة وأقل قٌمة بها ‪ ،‬كما ٌقوم بترتٌب‬ ‫;) ‪int check(int mat[ ][MAX],int *max‬‬
‫المصفوفة تصاعدٌا وإٌجاد المتوسط الحسابً لها‪.‬‬
‫;)"‪printf("enter row && column \n‬‬
‫تنفٌذ البرنامج وإدخال البٌانات‬ ‫‪‬‬ ‫;)‪scanf("%d%d",&row,&column‬‬
‫‪Type size of array ==>5‬‬
‫;)"‪printf("Enter Items of matrix\n‬‬
‫‪Enter elements of array ==>5‬‬
‫)‪for(i=0;i<row;i++‬‬
‫‪2‬‬
‫)‪for(j=0;j<column;j++‬‬
‫‪3‬‬
‫;)]‪scanf("%d",&mat[i][j‬‬
‫‪4‬‬
‫‪0‬‬ ‫;))‪printf("positive =%d\n",check(mat,max‬‬
‫‪MA ==>5‬‬ ‫;)‪printf("negitive =%d max =%d",neg,maximum‬‬
‫‪MI ==>1‬‬ ‫}‬
‫‪A[0] ==>1 A[1] ==>2 A[2] ==>3 A[3] ==>3 A[4] ==> 5‬‬ ‫)‪int check(int mat[ ][MAX],int *max‬‬
‫‪The average ==> 3.00‬‬ ‫{‬
‫‪ )03‬تتبع البرنامج اآلتً ‪:‬‬ ‫;‪int i,j, pos=0‬‬
‫)(‪main‬‬ ‫;]‪*max=mat[0][0‬‬
‫{‬
‫)‪for(i=0;i<row;i++‬‬
‫;}‪static int array[ ] = {15,30,55,20,40,10‬‬
‫;‪int m,*ptr‬‬ ‫)‪for(j=0;j<column;j++‬‬
‫;‪ptr = array‬‬ ‫{‬
‫)‪for(m=2;m<=8;m+=2‬‬ ‫)‪if( mat[i][j] >=0‬‬
‫;)‪printf("%5d",*ptr++‬‬ ‫;‪pos++‬‬
‫}‬ ‫‪else‬‬
‫ناتج البرنامج‬ ‫‪15 30 55 20‬‬ ‫;‪neg++‬‬
‫‪ )04‬اكتب برنامجا ً لقراءة مصفوفة ذات بعدبن ‪ ،‬ثم استخدم دالة‬ ‫)‪if(mat[i][j]>*max‬‬
‫واحدة فقط ترجع بمجموع القٌم الموجبة عن طرٌق ‪return‬‬ ‫;]‪*max=mat[i][j‬‬
‫‪ ،‬وعدد القٌم السالبة من خالل متغٌر خارجً ‪ ،‬وأكبر قٌمة‬ ‫}‬
‫من خالل متغٌر من نوع المؤشر ‪.‬‬ ‫;‪return pos‬‬
‫>‪#include<stdio.h‬‬
‫}‬
‫‪#define MAX 10‬‬
‫‪ )05‬اكتب برنامجا ً كامالً لقراءة درجات فصل به ‪ 01‬طلبة‬
‫;‪int row,column,neg=0‬‬
‫وتخزٌنها فً مصفوفة مع استدعاء ثالثة دوال ‪ ،‬األولى‬
‫)(‪main‬‬
‫تحسب متوسط درجات الطلبة الناجحٌن والثانٌة تحسب عدد‬
‫{‬
‫الطلبة الغٌر ناجحٌن ‪ ،‬الثالثة لطباعة الناتج ‪.‬‬
‫;]‪int i,j,mat[MAX][MAX‬‬

‫الباب الثاني عشر‬ ‫‪Page 67‬‬


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)05( ‫ إجابة تمرٌن رقم‬ )05( ‫ بقٌة إجابة تمرٌن رقم‬
#include<stdio.h> void prnt()
#define size 10 {
float avg=0; printf("avg mark of success students = %f\n",avg);
int i,j,f=0; printf("number of failed student= %d ",f);
main() }
{ ‫) أعد كتابة البرنامج بالتمرٌن السابق وتخزٌن الطلبة الناجحٌن‬06
float stdn[size]; ‫ ثم‬fail ‫ والطلبة الغٌر ناجحٌن فً مصفوفة‬pass ‫فً مصفوفة‬
. ‫استدعاء دالة لطباعة هاتٌن المصفوفتٌن‬
void average(float stdn[ ]); #include<stdio.h>
void fail(float stdn[ ]); #define size 10
void prnt(); float avg=0,stdn[10],faild[size],pass[size];
printf("Enter mark of students\n"); int i,j,f=0,a=0;
for(i=0;i<size;i++) main()
scanf("%f",&stdn[i]); {
average(stdn); void average();
fail(stdn); void fail();
prnt(); void prnt();
} void print_matrix();
void average(float stdn[ ]) printf("Enter mark of students\n");
{ for(i=0;i<size;i++)
float sum=0; scanf("%f",&stdn[i]);
int a=0; average();
for(i=0;i<size;i++) fail();
{
prnt();
if(stdn[i]>=50)
{ print_matrix();
sum=sum+stdn[i]; }
a=a+1; void average()
} {
} float sum=0;
if(a>0) avg=sum/a; for(i=0;i<size;i++)
} {
void fail(float stdn[ ]) if(stdn[i]>=50)
{ {
for(i=0;i<size;i++) sum=sum+stdn[i];
{ pass[a]=stdn[i];
if(stdn[i]<50) a=a+1;
f=f+1; }
} }
} if(>0) avg=sum/a;
}

‫الباب الثاني عشر‬ Page 68


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬
)06( ‫ بقٌة إجابة تمرٌن رقم‬ )07( ‫ بقٌة إجابة تمرٌن رقم‬
void fail() xxx(A,B,C);
{ yyy(C);
for(i=0;i<size;i++) zzz(C);
{ }
if(stdn[i]<50)
{ void xxx(int A[ ],int B[ ],int C[ ])
faild[f]=stdn[i]; {
f=f+1; printf("Enter items of matrix A\n");
} for(i=0;i<size;i++)
} scanf("%d",&A[i]);
} for(i=0;i<size;i++)
C[i]=A[i];
void prnt()
{ printf("Enter items of matrix B\n");
printf("average mark of success students = %f\n",avg); for(j=size;j<MAX;j++)
printf("number of failed student= %d\n ",f); scanf("%d",&B[j]);
} for(j=size;j<MAX;j++)
void print_matrix() C[j]=B[j];
{ }
printf("marks of pass student\n"); void yyy(int C[ ])
for(i=0;i<a;i++) {
printf("%3f\n",pass[i]); int temp;
printf("marks of fail student\n"); for(i=0;i<MAX-1;i++)
for(i=0;i<f;i++) for(j=i+1;j<MAX;j++)
printf("%3f\n",faild[i]); {
} if(C[j] < C[i])
‫ كل واحدة‬B , A ‫) المطلوب كتابة برنامج ٌقوم بقراءة مصفوفتٌن‬07 {
‫ عناصر مع دمج عناصر هاتٌن المصفوفتٌن‬5 ‫منها تحتوي على‬ temp=C[i];
ً ‫ وترتٌبها ترتٌبا‬xxx ‫ عن طرٌق دالة‬C ‫وحفظ الناتج فً مصفوفة‬ C[i]=C[j];
zzz ‫ وطباعة الناتج عن طرٌق دالة‬yyy ‫تصاعدٌا عن طرٌق دالة‬ C[j]=temp;
#include<stdio.h> }
#define size 5 }
#define MAX 10 }
int i,j; void zzz(int C[ ])
main() {
{ for(i=0;i<MAX;i++)
int A[size],B[size],C[MAX]; printf("%3d",C[i]);
}
void xxx(int A[ ] ,int B[ ] ,int C[ ] );
void yyy(int C[ ]);
void zzz(int C[ ]);

‫الباب الثاني عشر‬ Page 69


‫حل تمارين كتاب " مقدمة إلى البرمجة بلغة سي" الطبعة الخامسة‬
298 4289787 "‫إعداد م – محمد أحمد دريبيكة "مبرمج لغة سي‬

ً‫ من النوع الصحٌح ف‬X ‫) اكتب برنامجا ً ٌبحث عن قٌمة‬08 )08( ‫ بقٌة إجابة تمرٌن رقم‬
، 21 ‫ ذات البعد الواحد التً طولها ال ٌزٌد عن‬LIST ‫مصفوفة‬
if (found==1)
‫ واطبع‬، ‫ موجودة فاطبع مكان وجودها‬X ‫فإذا كانت قٌمة‬
printf("it's at postion No. %d",i+1);
‫الرسالة التالٌة عند عدم وجودها‬
The value of X not found else
printf("The value of X not found");
#include<stdio.h> }
#include<process.h>
#define MAX 20
main()
{
int i,n,X,found;
int LIST[MAX];

printf("Give number of values\n");


scanf("%d",&n);

if(n > MAX || n <=0)


exit(0);

printf("Enter elements of the list\n");

for(i=0;i<n;i++)
scanf("%d",&LIST[i]);

printf("Enter wanted number X\n");


scanf("%d",&X);

for(i=0;i<=n;i++)
if(LIST[i] == X)
{
found=1;
break;
}
else
found =0;

‫الباب الثاني عشر‬ Page 70

You might also like