310 likes | 506 Views
توابع ورودي-خروجي. توابع ورودي- خروجي در C. اغلب برنامه ها بايد اطلاعاتي را از كاربر بگيرند و روي آنها پردازش دهند و نتيجه پردازش را به كاربر اعلام نمايند در زبان برنامه نويسي C توابع متنوعي براي عمليات ورودي-خروجي تعريف شدهاند كه هر كدام ويژگيهاي خاص خود را دارند
E N D
توابع ورودي- خروجي در C • اغلب برنامه ها بايد اطلاعاتي را از كاربر بگيرند و روي آنها پردازش دهند و نتيجه پردازش را به كاربر اعلام نمايند • در زبان برنامه نويسي C توابع متنوعي براي عمليات ورودي-خروجي تعريف شدهاند كه هر كدام ويژگيهاي خاص خود را دارند • عمومي ترين توابع ورودي-خروجي در زبان C تابع scanf براي ورود اطلاعات و printf براي نمايش اطلاعات ميباشند
توابع ورودي- خروجي در C(ادامه) • توابع ورودي-خروجي ديگري كه در C وجود دارند و از آنها ميتوان استفاده كرد عبارتند از: • getch, getchar, putch, putchar, gets, puts • در زبان C++ نيز براي سهولت عمليات ورودي خروجي توابعي درنظر گرفته شده است: • cin براي ورود اطلاعات و cout براي نمايش اطلاعات
تابع printf • اين تابع براي نمايش اطلاعات به كاربر بر روي خروجي استاندارد (مانيتور) بكار ميرود. • قالب استفاده از اين دستور به شكل زير ميباشد • printf(“رشته كنترلي”[,متغيرها]); • اين تابع در كتابخانه stdio.h تعريف شده است • رشته كنترلي كه داخل كتيشن (“”) قرارميگيرد از متنهاي ثابت و كاراكترهاي كنترلي تشكيل ميشود • در بخش متغيرها، متناظر با هر كاراكتر كنترلي در رشته كنترلي بايد يك متغير وجود داشته باشد • كاراكتر كنترلي بايد متناسب با نوع متغير باشد
كاراكترهاي كنترلي • كاراكترهاي كنترلي با % آغاز ميشوند. • با استفاده از كاراكترهاي كنترلي ميتوان خروجي را به شكل دلخواه نشان داد • فهرست كاراكترهاي كنترلي به شرح ذيل ميباشند:
مثال • Ex 1. نمايش يك عدد صحيح در خروجي • int n=2; • printf("n is an integer = %d" , n ); • Ex 2.نمايش عمليات جمع دو عدد صحيح • int a(3),b(4); • printf(" %d+%d=%d", a , b , a+b);
مثال 3 int main() { int event; char heat; float time; event = 5; heat = ‘C’; time = 27.25; printf( “The winning time in heat %c" , heat); printf( “ of event %d was %f" , event, time); return 0; } خروجي: The winning time in heat C of event 5 was 27.250000
مثال 4 int main() { int x=31; float y=148.5; char z[10] = {"computer"}; printf ( "%d %f %s" , x , y , z ); return 0; } خروجي: 31 148.500000 computer
مثال 5 int main() { float x=50.0, y=0.25; printf ( "%f %f %f %f\n" , x , y , x*y , x/y ); printf ( "%e %e %e %e" , x , y , x*y , x/y ); return 0; } خروجي: 50.000000 0.250000 12.500000 200.00000 5.000000e+01 2.500000e-01 1.250000e+01 2.000000e+02
%6.2f %.3f %6d ***.** **.*** ****** كاراكترهاي تعيين ميدان • در برنامه قبل ديديم كه متغير اعشاري y با 6 رقم مميز چاپ شده است، درحالي كه تنها دو رقم از اين ارقام با ارزش هستند. • از اين كاراكترها براي مرتب شدن خروجي و زير هم بودن اطلاعات استفاده ميشود.
123 123.456 123.5 1.234560e+02 1.23456e+02 1.235e+02 خروجي: مثال 6 int main() { float x=123.456; printf ( "%7.0f\n%7.3f\n%7.1f\n\n" , x , x , x , x ); printf ( "%12e\n%12.5e\n%12.3e" , x , x , x , x ); return 0; }
در صورتي كه بخواهيم خانه هاي خالي با صفر جايگزين شود، بعد از علامت % از كاراكتر 0(صفر) استفاده ميكنيم
رشته هاي گريز • در رشته كنترلي كاراكترهايي ميتوان استفاده كرد كه موقعيت مكان نما را براساس نياز ما تغيير ميدهد. • رشته هاي گريز با \ آغاز ميشوند و نمونه اي از آنها عبارت است از:
مثال 7- مثال • برنامه اي بنويسيد كه خروجي زير را بصورت مرتب نمايش دهد. num1 num2 sumation 1 2 3 100 2 102 1010 256 1266 5 56 61
مثال 7 int main() { printf ( "num1\t num2\t sumation\n" ); printf ( "%4d\t %4d\t %8d\n" , 1 , 2 , 3 ); printf ( "%4d\t %4d\t %8d\n" , 100 , 2 , 102 ); printf ( "%4d\t %4d\t %8d\n" , 1010 , 256 , 1266 ); printf ( "%4d\t %4d\t %8d\n" , 5 , 56 , 61 ); return 0; }
تمرين • 1- برنامه اي بنويسيد كه خروجي به شكل زير توليد نمايد ************* * Hello World * ************* • 2- برنامه اي بنويسيد كه نام شما را در وسط صفحه نمايش چاپ كند (براي اينكار از تابع gotoxy استفاده كنيد. • 3- برنامه اي بنويسيد كه عدد PI را با دقتهاي 1،2،5 و 10 رقم اعشار نمايش دهد
تابع scanf • مهمترين تابع ورودي در C ميباشد كه براي گرفتن اطلاعات از IO استاندارد يعني كيبرد بكار برده ميشود. • قالب استفاده از اين دستور به شكل زير ميباشد • scanf(<رشته كنترلي>,<آدرس متغيرها>); • اين تابع در كتابخانه stdio.h تعريف شده است • رشته كنترلي داخل كتيشن (“”) نوشته شده و از كاراكترهاي كنترلي تشكيل ميشود. • در بخش متغيرها، متناظر با هر كاراكتر كنترلي در رشته كنترلي بايد آدرس يك متغير وجود داشته باشد. • كاراكتر كنترلي استفاده شده در اين تابع همانند كاراكترهاي كنترلي در تابع printf هستند
اپراتورهاي & و * • همانطور كه اشاره شد متغيرها آدرس محلهايي در حافظه هستند • با استفاده از نام متغير به تنهايي ما ميتوانيم به محتويات آن دسترسي پيدا كنيم • در برخي موارد لازم است ما آدرس محل حافظه را داشته باشيم در اينصورت از اپراتور & استفاده ميكنيم. • اپراتور * براي دسترسي به محتويات يك خانه حافظه استفاده ميشود. يعني اين اپراتور آدرس يك خانه حافظه را گرفته و محتويات آنرا برميگرداند. (در ادامه درس، بخش اشاره گرها مفصل در اين زمينه صحبت خواهد شد)
مثال: • &(نام متغير) آدرس حافظه (آدرس متغير) • *(آدرس حافظه) مقدار حافظه • فرض كنيد متغير ch از نوع كاراكتر تعريف شده باشد و سيستم عامل خانه 110 را به آن اختصاص داده باشد و ما مقدار 44 را در آن ذخيره كرده باشيم. در اينصورت: • &(ch) 110 • ch 44 • *(110) 44
Value:2, Address:3536 خروجي: مثال2: برنامه نمايش يك متغير به همراه آدرس متغير int main() { int num ; num = 2; printf( "Value:%d, Address:%d" , num , &num ); return 0; }
please type your age in years: 5 you are 1825.0 days old. خروجي: مثال2: برنامه تبديل سن شخص به روزهاي زندگي int main() { float years , days ; printf( "please type your age in years: " ); scanf ( "%f" , &years ); days = years * 365; printf( "\nyou are %.1f days old.\n" , days ); return 0; }
تمرين • 1- برنامه اي بنويسيد كه 3 عدد صحيح را از كاربر گرفته و حاصل جمع آنها را نمايش دهد • 2- برنامه اي بنويسيد كه 3 عدد اعشاري را از كاربر گرفته و حاصل جمع آنها را نمايش دهد • 3- برنامه اي بنويسيد كه x و y را از كاربر گرفته xy را نمايش دهد. براي محاسبه توان از تابع pow استفاده نماييد • 4- برنامه اي بنويسيد كه يك عدد صحيح را از كاربر گرفته و در خروجي زوج يا فرد بودن آنرا نمايش دهد اگر زوج بود عدد 0 و اگر فرد بود عدد 1 نمايش داده شود. • 5- برنامه اي بنويسيد كه x , y از كاربر گرفته و باقيمانده تقسيم x بر y را نمايش دهد • 6- برنامه اي بنويسيد كه شعاع يك كره را گرفته و مساحت جانبي و حجم آنرا در خروجي نمايش دهد • 7- برنامه اي بنويسيد كه طول، عرض و ارتفاع يك مكعب مستطيل را گرفته و مساحت جانبي و حجم آنرا در خروجي نمايش دهد • 8- برنامه اي بنويسيد كه يك مقدار درخواستي پول را از كاربر گرفته و تعداد اسكناسهاي 1000 توماني، 100 توماني، 50 توماني و 1 توماني مورد نياز را محاسبه نمايد.
مثال 3: گرفتن چند متغير از كاربر و نمايش int main() { int event; char heat; float time; printf( "Type numbers for event heat and time: "); scanf( "%d %c %f", &event , &heat , &time); printf( "The winning time in heat %c" , heat); printf( " of event %d was %f" , event, time); return 0; } خروجي: Type numbers for event heat and time: 4 B 36.34 The winning time in heat B of event 4 was 36.340000
Enter a b c: 1 -5 6 x1=3.000000 , x2=2.000000 خروجي: تمرين كلاسي: برنامه اي بنويسيد كه ضرايب معادله درجه 2 را گرفته و ريشه هاي معادله را نمايش دهد. int main() { float a , b , c; printf("Enter a b c: "); scanf( "%f %f %f", &a , &b , &c); float delta; delta= b * b–4 * a * c ; float x1 , x2 ; x1 = (-b + sqrt( delta )) / (2 * a); x2 = (-b - sqrt( delta )) / (2 * a); printf( "x1=%f , x2=%f " , x1 , x2); return 0; }
توابعgetch()، getche() و getchar() • توابعgetch()، getche() و getchar() براي گرفتن يك كاراكتر از كاربر استفاده ميشوند. • تابع getch با فشار دادن يك كليد، كد آن را برميگرداند و هيچ كاراكتري در روي مانيتور نمايش داده نميشود. • تابع getche همانند تابع getch عمل ميكند با اين تفاوت كه كاراكتر وارد شده روي مانيتور نقش ميبندد • تابع getchar همانند تابع getche عمل نموده و براي وارد كردن كاراكتر لازم است بعد از كاراكتر مورد نظر كليد Enter هم فشرده شود
مثال 1: برنامه اي بنويسيد كه يك كاراكتر از كاربر بگيرد و در خروجي با يك پيام نمايش دهد int main() { char ch; printf( "Enter a character: "); ch = getch(); printf( “\nInput character is: %c" , ch); return 0; } Enter a character: Input character is: a
كد اسكي ascii • هر كاراكتر در سيستم ANSI در يك بايت ذخيره ميشود. • در زبان C نوع داده اي char براي ذخيره يك كاراكتر استفاده ميشود. • هر كاراكتر با يك كد ارائه ميگردد كه به آن كد اسكي ميگويند. • براي نمونه كد مربوط به كاراكتر A برابر 65 ميباشد
متغيرهاي char در زبان C • مقداردهي به متغير char به شكل زير را در نظر بگيريد: • char ch=‘A’ • دستور فوق باعث ميشود كد اسكي كاراكتر A در متغير ch قرارگيرد • ميتوان بجاي دستور فوق از دستور زير استفاده نمود • char ch=65 • هر دو دستور فوق يك عمل را انجام ميدهند. • كامپايلر C انواع دادهاي از نوع كاراكتر را به كد اسكي آنها تبديل ميكند
مثال 2: كد اسكي int main() { char ch; ch= ’A’; printf( "character is: %c\n" , ch); printf( "code is: %d\n" , ch); return 0; } int main() { char ch; ch= 65 ; printf( "character is: %c\n" , ch); printf( "code is: %d\n" , ch); return 0; }