7.5 تمارين الباب السابع كتاب لينكس الشامل >>

7.5 تمارين الباب السابع

هذه مجموعة من الأسئلة الأساسية حول فصول الباب السابع. يفترض أن تتمكن من الإجابة عليها بمجرد قراءة هذا الباب.

  1. ما فائدة الخيار O في مصنف gcc ؟
  2. ما فائدة الخيار s في مصنف gcc ؟
  3. ما فائدة الوظيفة srand ؟
  4. واحدة من التالية ليست قياسية : stdio.h أم conio.h أم unistd.h.
  5. ما مخرجات البرنامج التالي ؟
    #include <stdio.h>
    int main() {
    	int i=0;
    	printf("%d\n",++i);
    	return i++;
    }
    
  6. ما الخطأ في البرنامج التالي:
    // ...
    	if i<0 {
    		++i;
    		return 0;
    	}
    // ...
    }
    
  7. ما الفرق بين return و exit ؟
  8. لماذا لا يكون printf("%f",sin(30.0)) هو 0.5 ؟
  9. ما هو ناتج printf("%f",1/2*4) ؟ لماذا ؟
  10. لماذا لا تحمل الوظائف في مكتبة سي++ معرفات symbols تساوي اسمها عند عرضها في dl، وكيف نجبر سي++ على تسمية الوظائف بأسمائها من أجل تحميلها بواسطة dl.

هذه مجموعة من الأسئلة المتوسطة حول فصول هذا الباب. يفترض أن تتمكن من الإجابة عليها بعد قراءة وتطبيق هذا الباب.

  1. اكتب برنامج يطبع أرقام عشوائية من 5 إلى 10.
  2. ما مخرجات البرنامج التالي : (اشرح لماذا ليس 256)
    #include <stdio.h>
    #define f1(x) (x*x)
    int main() {
    	int i=15;
    	printf("%d\n",f(i+1));
    	return 0;
    }
    
  3. ما الخطأ المنطقي في البرنامج التالي:
    // ...
    	if (i=0) ++i;
    // ...
    }
    
  4. اكتب برنامج يقرب اقتران جيب الزاوية exp(x) أي عدد Euler مرفوع للقوة xمن خلال Exp(x)=Sumi=0(X^i/i!)
  5. ما مخرجات البرنامج التالي:
    // ...
    	char *foo="foobar";
    	foo+=3;
    	printf("%s\n",foo);
    // ...
    }
    
  6. ما مخرجات البرنامج التالي:
    // ...
    	char *foo="123456";
    	printf("%s\n",(char *)((int *)foo)+1));
    // ...
    
    
  7. اكتب برنامج يسأل عن URL ويطبع أقسامها بشكل منفصل على شكل PROTOCOL و USER و PASSWORD و ADDRESS و PORT و FILE تذكر أن بعضها قد لا يكون موجوداً وأنها تترتب كما يلي
    PROTOCOL://[USER[:PASSWORD]@]ADDRESS[:PORT]/FILE
  8. اعد كتابة البرنامج السابق ليستعمل Regular Expression.
  9. اكتب برنامج يقدم محث ليسأل المستخدم عن أمر ثم ينفذه ويخزن مخرجاته في ملف foo.out
  10. اكتب برنامج يرسل أول 10 أعداد من المربعات الكاملة 1 ، 4 ، 9 ، ... إلى bc ليجمعها بواسطة أنبوب.

هذه مجموعة من الأسئلة المتقدمة حول فصول هذا الباب. عليك أن تبحث (ربما في أبواب أخرى من الكتاب) وتفكر لكي تحصل على الإجابة

  1. أيها أسرع for (i=0;i<j;++i) أم for (i=0;i<j;i++) ؟
  2. أيها أخف على نظام التشغيل عند حجز منظومة ذات بعدين mxn بواسطة a[0]=(int *)malloc(sizeof(int)*m*n) ثم وضع كل a[i]=a[i-1]+n أم أم حجز كل a[i]=(int *)malloc(sizeof(int)*n).
  3. اعد كتابة برنامج حساب Exp(x)=Sumi=0(Xi/i!) وتسريعه، من خلال إيجاد النسبة بين كل حدين متتاليين.
  4. عند حساب التباديل combination وفق العلاقة Cin= n! / ((n-i)!.i!) اكتب برنامج يعمل حسابه لأي n و i مع استخدام طريقة لتجنب حساب المضروب للقيم الكبيرة.
  5. استخدم الأداة nc - netcat في دراسة سلوك بروتوكول HTTP (اكتب nc متبوعة باسم موقع ثم وفي المحث اكتب GET متبوعة بمسار ملف مثل index.html) ثم صمم مخدوم HTTP أي متصفح إنترنت لعبة يأخذ عنوان يبحث عن ما قبل أول / فيه على أنه الموقع والباقي على أنه مسار الملف ثم باستعمال socket بعائلة عناوين PF_INET وبطريقة SOCK_STREAM يعرض الملف عن بعد.


<< السابق كتاب لينكس الشامل التالي >>