نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

زبان سی سی C مبانی

مبانی ج

معرفی

فصل 1 ج مبانی

1.1. الفبا

1.2. ساختارهای پایه C

1.3. ورودی خروجی.

1.3.1. نتیجه

1.4. انواع پایهداده های زبان C

1.4.1. شناسه ها

1.4.2. ثابت های تایپ شده

1.4.3. متغیرها

1.4.3.1. انواع عدد صحیح

1.4.3.2. انواع واقعی

1.4.3.3. انواع شخصیت ها

1.4.4. رشته نوع داده

1.4.5. سازه های

1.4.5.1. آرایه ها

1.4.5.2. ورودی های

1.4.6 دامنه و طول عمر متغیرها

1.5. اپراتورهای اصلی

1.6. پیش پردازنده

1.7. برنامه ها. کارکرد

1.8. اشاره گرها

1.9. اشاره گرها و توابع

1.10. فایل ها

1.11. توابع اضافیشی

1.11.1. توابع تبدیل

توابع تبدیل رشته کاراکتر: atoi()، atof(). 37.

1.11.3. توابع رشته

1.12. ویژگی های برنامه نویسی C

1.12.1. ماژول ها برنامه نویسی چند ماژول

1.12.2. مدل های حافظه

1.12.3. برنامه نویسی در داس و ویندوز

1.12.4. استفاده از زبان اسمبلی در برنامه های C

فصل 2 ج مثالها

2.1. مرتب سازی

2.2. الگوریتم های بازگشتی

2.3. وظیفه "برج های هانوی"

فصل 3 مبانی C++

3.1. تفاوت های C++ و C

3.2. برنامه نویسی شی گرا در C++

3.2.1. کلاس ها

3.2.2. اضافه بار عملکرد

3.2.3. سازندگان

3.2.4. ویرانگرها

3.2.5. سازندگان با پارامترها

3.2.6. مقدمه ای بر وراثت

3.2.7. توابع مجازی

3.2.8. اشاره گر به اشیاء

فصل 4. مبانی برنامه نویسی C++Builder

4.1. ویژگی های C++Builder

4.2. اجزای VCL خواص. مناسبت ها. مواد و روش ها

4.2.1. انواع کامپوننت

4.2.2. سلسله مراتب کلاس های VCL

4.3. ساختار فایل در C++Builder

4.4. اجزای بصری (VCL)

4.5. برنامه ها، مدیریت رویداد، استثنائات

4.6. استراتژی اشکال زدایی برای برنامه های ویندوز

4.7. استفاده از اجزای VCL در توسعه برنامه

4.8. اجزای گرافیکی

4.9. چند رسانه ای

4.10. گرافیک اسپرایت

4.11. فناوری شی OLE2

4.12. DLL ها

4.13. توسعه اجزای بصری

4.14. مقدمه ای بر برنامه نویسی CGI

3.15. برنامه نویسی پایگاه داده

3.16. بسته ها

نتیجه

ادبیات

پیوست N1

معرفی

در سال 1804، مخترع فرانسوی ژوزف ماری ژاکارد یک ماشین بافندگی "کنترل شده با برنامه" ایجاد کرد. برای کنترل دستگاه از کارت های پانچ که به صورت نواری به یکدیگر متصل شده بودند استفاده شد. پین‌های چوبی «ریدر» دستگاه، با محل سوراخ‌های کارت پانچ شده، تعیین می‌کردند که کدام نخ‌ها را باید بالا برد و کدام را پایین آورد تا الگوی مورد نظر به دست آید.

در سال 1890، در ایالات متحده آمریکا، مخترع هرمان هولریث یک الکترومکانیکی ساخت. ماشین حساب- برای جدول بندی نتایج سرشماری ایالات متحده از جدولی که توسط کارت های پانچ کنترل می شد استفاده شد. شرکت جدول‌ساز که توسط هولریث تأسیس شد، بعداً به شرکت ماشین‌های تجاری بین‌المللی (IBM) تبدیل شد.

در سال 1936، آلن تورینگ، دانشجوی بیست و پنج ساله انگلیسی در دانشگاه کمبریج، مقاله ای را با عنوان "در مورد اعداد قابل محاسبه" منتشر کرد که در آن یک دستگاه فرضی ("ماشین تورینگ") مناسب برای حل هر نوع ریاضی یا قابل تصمیم گیری در نظر گرفته شد. کار منطقی، - نمونه اولیه یک کامپیوتر قابل برنامه ریزی.

در سال 1941 مهندس آلمانی Konrad Zuse ساخت کامپیوتر عامل Z3 که استفاده کرد سیستم دودوییحساب کردن برنامه ها روی نوار پانچ ضبط می شد.

در سال 1945، در مدرسه عالی فنی دانشگاه پنسیلوانیا (ایالات متحده آمریکا)، فیزیکدان جان ماچلی و مهندس پروسپر اکرت، به طور کامل ساختند. ماشین الکترونیکی"انیاک". برنامه نویسی نیاز به تنظیم دستی هزاران کلید و وصل کردن صدها دوشاخه به سوکت پانل تماس داشت.

در 1 ژوئن 1945، گزارشی توسط جان فون نویمان، ریاضیدان آمریکایی متولد مجارستان، با عنوان "گزارش مقدماتی در مورد ماشین Advak" ارسال شد که حاوی مفهوم ذخیره دستورالعمل های رایانه در حافظه داخلی خود بود.

در 21 ژوئن 1948، در دانشگاه منچستر (بریتانیا)، اولین برنامه جهان ذخیره شده در حافظه دستگاه بر روی ماشین Mark-1 اجرا شد - جستجو برای بزرگترین عامل یک عدد معین.

در سال 1949، تحت رهبری موریس ویلکس، کامپیوتر Edsack ساخته شد. طراحان Edsac سیستمی از نمادهای یادگاری را معرفی کردند که در آن هر دستورالعمل ماشین با یک نشان داده می شد. حرف بزرگو تنظیم زیربرنامه ها را در یک مکان خاص در حافظه به طور خودکار انجام دهید. موریس ویلکز مدار یادگاری و کتابخانه زیر روال را یک سیستم مونتاژ نامید - از این رو کلمه " اسمبلر " نامیده می شود.

در سال 1949، در فیلادلفیا (ایالات متحده آمریکا)، تحت رهبری جان ماچلی، "کد کوتاه" ایجاد شد - اولین مفسر ابتدایی یک زبان برنامه نویسی.

در سال 1951، گریس هاپر برنامه نویس آمریکایی اولین برنامه پخش را در رمینگتون رند توسعه داد. هاپر آن را کامپایلر (کامپایلر - پیوند دهنده) نامید.

در سال 1957، در طبقه بیستم مقر IBM در خیابان مدیسون نیویورک، زبان فرترن (FORmula TRANslation - ترجمه فرمول ها) متولد شد. تیم توسعه توسط ریاضیدان 30 ساله جان بکوس رهبری می شد. فرترن اولین زبان سطح بالا "واقعی" است.

در سال 1972، دنیس ریچی، برنامه نویس سیستمی 31 ساله در آزمایشگاه بل، زبان برنامه نویسی C را توسعه داد.

در سال 1984، فیلیپ کان، ریاضیدان و ساکسیفونیست فرانسوی Borland International را تأسیس کرد.

C در ابتدا به عنوان یک زبان برنامه نویسی برای سیستم عامل یونیکس توسعه داده شد.

به زودی شروع به گسترش به برنامه نویسان عملی کرد. در اواخر دهه 70، مترجم های C برای ریز کامپیوترها توسعه یافتند سیستم عامل SR/M.

پس از ظهور رایانه شخصی IBM، کامپایلرهای C نیز شروع به ظاهر شدن کردند (اکنون بیش از 20 مورد برای این رایانه وجود دارد).

در سال 1983، موسسه استانداردهای آمریکا (ANSI) کمیته فنی X3J11 را برای ایجاد استانداردی برای زبان C تشکیل داد. زبان C++ Borland که در بازار ظاهر شده است، با اکثر الزامات استاندارد مطابقت دارد.

در هسته خود، C زبان توابع است. برنامه نویسی در C با نوشتن توابع و فراخوانی توابع کتابخانه انجام می شود. اکثر توابع مقداری را برمی‌گردانند که می‌تواند در عبارات دیگر استفاده شود.

در میان مزایای فراوان زبان C باید به مهمترین آنها اشاره کرد:


جهانی بودن (تقریباً در تمام رایانه های موجود استفاده می شود).

فشرده بودن و جهانی بودن کد؛

سرعت اجرای برنامه؛

انعطاف پذیری زبان؛

ساختار بالا


فصل 1 ج مبانی

1.1. الفبا

الفبای زبان از کاراکترهای زیر تشکیل شده است:

حروف بزرگ و کوچک لاتین حروف A-Z، a-z و خط زیر. اعداد از 0 تا 9 شخصیت های خاص + - * / = > < . ; , : { } () # $.

فضای کاراکترها، برگه، تغذیه خط، بازگشت کالسکه فضای خالی نامیده می شوند.

یک برنامه C++ دنباله ای از کاراکترهای ACSII است که متن منبع آن را نشان می دهد.

1.2. ساختارهای پایه C

در نظر گرفتن یک برنامه سادهچاپ عبارت "Hello from the computer" روی صفحه نمایش

#عبارتند از

// برنامه

printf("سلام از کامپیوتر\n");

ساختار برنامه را در نظر بگیرید

دستور #include شامل فایل stdio.h در برنامه ما است. فایل حاوی اطلاعاتی در مورد عملکردهای I/O است.

فایلی با نام stdio.h حاوی اطلاعاتی در مورد I/O است.

نماد # نشان می دهد که قبل از ترجمه برنامه، لازم است توابعی از فایل stdio.h در آن گنجانده شود - این به اصطلاح پردازش پیش پردازنده است که قبل از کامپایل، برخی از پردازش های اولیه متن برنامه را انجام می دهد.

خط main() حاوی نام تابعی است که برنامه همیشه با آن شروع می شود. پرانتزهای خالی نشان می دهد که این یک تابع است، اما هیچ پارامتری ندارد.

کاراکترهای // با نظرات (برای یک خط) دنبال می شوند (کاراکترهای بین /* و */ نیز نظر نامیده می شوند).

بریس ها() شروع و پایان بدنه یک برنامه یا تابع را نشان می دهد. آنها همچنین برای گروه بندی چندین دستور برنامه در یک بلوک استفاده می شوند.

خط printf ("سلام از کامپیوتر\n") حاوی تابع چاپ استاندارد C است. رشته کاراکتر محصور در پرانتز (Argument) اطلاعات ارسال شده است توابع printf() از ما عملکرد اصلی main(). هنگامی که عملکرد کامل شد، کنترل به حالت عادی برمی گردد برنامه اصلی. نماد \n نشان‌دهنده تغذیه خطی است خط جدیدپس از چاپ

در نظر گرفتن مثال بعدیبرنامه ای برای تبدیل متر به سانتی متر بنویسید.

#عبارتند از

#عبارتند از

printf("M?\n");

printf(" %d M حاوی %d cm\n"، I,J);

این برنامه دو متغیر عدد صحیح I و J را تعریف می کند.

تابع scanf ("%d"،&I) معرفی شد. که به شما اجازه ورود می دهد عدد اعشاریاز صفحه کلید و مقدار را به متغیر I اختصاص دهید، سپس با دستور J=100*I; محاسبه در حال انجام 4.

خط بعدی printf(" %d M شامل %d cm\n"، I,J); عبارتی را چاپ می کند %d اول (d یک متغیر عدد صحیح است) با مقدار I جایگزین می شود و %d دوم با مقدار J جایگزین می شود.

تابع getch() به شما امکان می دهد یک تصویر را روی صفحه نگه دارید و برای تکمیل کار به هر کاراکتری نیاز دارد.

بیایید مثال دیگری را در نظر بگیریم. بیایید یک تابع بنویسیم و آن را از برنامه خود فراخوانی کنیم.

#عبارتند از

#عبارتند از

printf("با من تماس گرفتی؟\n");

printf("من در حال فراخوانی تابع سرپرست هستم.\n");

printf("بله. ببینید کدام دانش آموزان خوابیده اند و آنها را بیدار کنید.\n");

اصول و ظرافت های زبان برنامه نویسی C++. وظایف عملیو تست ها آیا می خواهید برنامه نویسی را یاد بگیرید؟ پس شما در جایگاه درست قرار دارید. چه تجربه برنامه نویسی داشته باشید چه نداشته باشید، این درس ها به شما کمک می کند تا شروع به ایجاد، کامپایل و اشکال زدایی برنامه های C++ در محیط های مختلف توسعه کنید: استودیوی تصویری، کد:: بلوک ها، Xcode، Eclipse و سایر IDE ها. مثال های فراوان و توضیحات مفصل. ایده آل برای هر دو مبتدی (قلمک) و پیشرفته تر. همه چیز از ابتدا تا ریزترین جزئیات توضیح داده شده است. این درس ها (200+) به شما پایه / پایه خوبی در درک برنامه نویسی نه تنها در C ++، بلکه در سایر زبان ها می دهد. و این کاملا رایگان است!

تنها چیزی که نیاز دارید یک میل و میل به یادگیری است. هر چیز دیگری که می توانید اینجا پیدا کنید.

برای ارسال مجدد +20 به کارما و سپاسگزاری من!

فصل شماره 0. معرفی. شروع کار

فصل شماره 1. مبانی C++

فصل شماره 2. متغیرها و انواع داده های پایه در C++

فصل شماره 3. اپراتورها در C++

فصل شماره 4. دامنه و انواع دیگر متغیرها در C++

این آموزش ها برای همه است، چه شما در برنامه نویسی تازه کار هستید و چه در حال حاضر تجربه برنامه نویسی گسترده ای در زبان های دیگر دارید! این موادبرای کسانی که می خواهند C / C ++ را از اصول اولیه تا پیچیده ترین ساختارها یاد بگیرند.

C++ یک زبان برنامه نویسی است، دانش این زبان برنامه نویسی به شما این امکان را می دهد که کامپیوتر خود را بر روی آن کنترل کنید بالاترین سطح. در حالت ایده‌آل، می‌توانید کاری کنید که رایانه هر کاری که می‌خواهید انجام دهد. سایت ما به شما در یادگیری زبان برنامه نویسی C++ کمک می کند.

در حال نصب /IDE

اولین کاری که باید قبل از شروع یادگیری C++ انجام دهید این است که مطمئن شوید که یک IDE دارید - یک محیط توسعه یکپارچه (برنامه ای که در آن برنامه نویسی خواهید کرد). اگر IDE ندارید، پس اینجا هستید. وقتی تصمیم بگیرید انتخاب IDEرا نصب کنید و ایجاد پروژه های ساده را تمرین کنید.

مقدمه ای بر C++

زبان C++ مجموعه ای از دستورات است که به کامپیوتر می گوید چه کاری انجام دهد. این مجموعه دستورالعمل معمولا نامیده می شود منبعیا فقط کد دستورات یا "توابع" یا "کلمات کلیدی" هستند. کلمات کلیدی (کلمات رزرو شده C/C++) بلوک های اصلی زبان هستند. توابع بلوک های ساختمانی پیچیده ای هستند زیرا بر حسب تعداد بیشتر نوشته شده اند توابع ساده- این را در اولین برنامه ما که در زیر نشان داده شده است خواهید دید. این ساختار توابع شبیه محتویات یک کتاب است. فهرست مطالب می تواند فصول کتاب را نشان دهد، هر فصل در کتاب می تواند فهرست مطالب خود را داشته باشد که از پاراگراف ها تشکیل شده است، هر پاراگراف می تواند زیر پاراگراف های خاص خود را داشته باشد. اگرچه C++ بسیاری را فراهم می کند توابع مشترکو کلمات رزرو شده ای که می توانید استفاده کنید، هنوز نیاز به نوشتن توابع خود دارید.

در چه قسمتی از برنامه شروع کردید؟ هر برنامه در C++ یک تابع دارد که به آن تابع اصلی یا اصلی می گویند، اجرای برنامه با این تابع شروع می شود. از تابع main، می توانید هر تابع دیگری را نیز فراخوانی کنید، چه توسط ما نوشته شده باشد و چه همانطور که قبلاً ذکر شد توسط کامپایلر ارائه شده باشد.

بنابراین چگونه به این توابع استاندارد دسترسی دارید؟ برای دسترسی ویژگی های استانداردکه همراه با کامپایلر است، باید وصل شوید فایل هدربا استفاده از دستورالعمل پیش پردازنده - #include . چرا موثر است؟ بیایید به یک مثال نگاه کنیم برنامه کاری:

#عبارتند از << "Моя первая программа на С++\n"; cin.get(); }

بیایید نگاهی دقیق تر به عناصر برنامه بیندازیم. #include یک دستورالعمل "پیش پردازنده" است که به کامپایلر می گوید قبل از ایجاد فایل اجرایی، کد را از فایل هدر iostream در برنامه ما قرار دهد. با گنجاندن یک فایل هدر در برنامه خود، به بسیاری از توابع مختلف دسترسی خواهید داشت که می توانید در برنامه خود از آنها استفاده کنید. برای مثال، دستور cout به یک iostream نیاز دارد. خط با استفاده از namespace std. به کامپایلر می گوید که از گروهی از توابع که بخشی از کتابخانه استاندارد std هستند استفاده کند. این خط همچنین به برنامه اجازه می دهد تا از عملگرهایی مانند cout استفاده کند. نقطه ویرگول بخشی از نحو C++ است. به کامپایلر می گوید که این پایان دستور است. کمی بعد خواهید دید که نقطه ویرگول برای پایان دادن به اکثر دستورات در C++ استفاده می شود.

خط مهم بعدی برنامه int main() است. این خط به کامپایلر می گوید که تابعی به نام main وجود دارد و این تابع یک عدد صحیح برمی گرداند. int را تایپ کنید. مهاربندهای فرفری (و) شروع (و پایان) یک تابع را سیگنال می دهند. بریس های فرفری در سایر بلوک های کد نیز استفاده می شوند، اما آنها همیشه به یک معنی هستند - به ترتیب ابتدا و انتهای بلوک.

در C++، شیء cout برای نمایش متن (تلفظ "cout") استفاده می شود. او از شخصیت ها استفاده می کند<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

دستور بعدی cin.get() است. این فراخوانی تابع دیگری است که داده ها را از جریان داده ورودی می خواند و منتظر می ماند تا کلید ENTER فشار داده شود. این دستور تا زمانی که کلید ENTER را فشار دهید پنجره کنسول بسته نمی شود. این به شما فرصت می دهد تا به خروجی برنامه نگاه کنید.

پس از رسیدن به انتهای تابع اصلی (بسته بند فرفری)، برنامه ما مقدار 0 را برای سیستم عامل برمی گرداند. این مقدار بازگشتی مهم است زیرا با تجزیه آن، سیستم عامل می تواند قضاوت کند که آیا برنامه ما با موفقیت انجام شده است یا خیر. مقدار بازگشتی 0 به معنای موفقیت است و به طور خودکار برگردانده می شود (اما فقط برای نوع داده int، سایر توابع از شما می خواهند که مقدار را به صورت دستی برگردانید)، اما اگر می خواستیم چیز دیگری مانند 1 را برگردانیم، باید آن را به صورت دستی انجام دهیم. .

#عبارتند از با استفاده از namespace std. int main() (cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

برای ادغام مطالب، کد برنامه را در IDE خود تایپ کرده و اجرا کنید. بعد از اینکه برنامه اجرا شد و خروجی را دیدید، مقداری دستور cout را آزمایش کنید. این به شما کمک می کند تا به زبان عادت کنید.

حتما در مورد برنامه های خود نظر بدهید!

نظرات را به کد اضافه کنید تا نه تنها برای خودتان بلکه برای دیگران نیز واضح تر شود. کامپایلر هنگام اجرای کد، نظرات را نادیده می گیرد، که این امکان را می دهد تا از هر تعداد نظر برای توصیف کد واقعی استفاده شود. برای ایجاد یک نظر از // استفاده کنید که به کامپایلر می گوید که بقیه خط یک نظر است یا /* و به دنبال آن */. هنگامی که در حال یادگیری برنامه نویسی هستید، مفید است که بتوانید روی بخش های خاصی از کد نظر دهید تا ببینید نتیجه برنامه چگونه تغییر می کند. شما می توانید جزئیات مربوط به تکنیک نظر دادن را مطالعه کنید.

با همه این نوع متغیرها چه باید کرد؟

گاهی اوقات داشتن چندین نوع متغیر ممکن است گیج کننده باشد، زمانی که به نظر می رسد برخی از انواع متغیرها زائد هستند. استفاده از نوع متغیر صحیح بسیار مهم است، زیرا برخی از متغیرها به حافظه بیشتری نسبت به بقیه نیاز دارند. علاوه بر این، به دلیل نحوه ذخیره اعداد ممیز شناور در حافظه، انواع داده های شناور و دوگانه «نادقیق» هستند و در صورت نیاز به ذخیره یک عدد صحیح دقیق، نباید از آنها استفاده کرد.

اعلان متغیرها در C++

برای تعریف یک متغیر، از نوع نحو استفاده کنید<имя>; . در اینجا چند نمونه از اعلان متغیرها آورده شده است:

int num; شخصیت؛ float num_float;

مجاز است چندین متغیر از یک نوع را در یک خط اعلام کنید، برای این کار باید هر یک از آنها با کاما از هم جدا شوند.

int x, y, z, d;

اگر دقت کرده باشید، ممکن است دیده باشید که یک اعلان متغیر همیشه با یک نقطه ویرگول دنبال می شود. شما می توانید اطلاعات بیشتری در مورد کنوانسیون - "در مورد نامگذاری متغیرها" بخوانید.

اشتباهات رایج هنگام اعلان متغیرها در C++

اگر سعی کنید از متغیری استفاده کنید که اعلان نشده است، برنامه شما کامپایل نمی شود و با خطا مواجه می شوید. در C++، تمام کلمات کلیدی زبان، همه توابع و همه متغیرها به حروف بزرگ و کوچک حساس هستند.

استفاده از متغیرها

بنابراین اکنون می دانید که چگونه یک متغیر را تعریف کنید. در اینجا یک برنامه نمونه است که استفاده از یک متغیر را نشان می دهد:

#عبارتند از با استفاده از namespace std. int main() (int number; cout<< "Введите число: "; cin >> شماره؛ cin.ignore(); کوت<< "Вы ввели: "<< number <<"\n"; cin.get(); }

بیایید نگاهی به این برنامه بیندازیم و کد آن را خط به خط مطالعه کنیم. کلمه کلیدی int می گوید که عدد یک عدد صحیح است. تابع cin >> مقدار را به صورت عدد می خواند، کاربر باید بعد از عدد وارد شده اینتر را فشار دهد. cin.ignore() تابعی است که یک کاراکتر را می خواند و آن را نادیده می گیرد. ما ورودی خود را در برنامه سازماندهی کرده ایم، پس از وارد کردن یک عدد، کلید ENTER را فشار می دهیم، کاراکتری که به جریان ورودی نیز ارسال می شود. ما به آن نیاز نداریم، پس آن را دور می اندازیم. به خاطر داشته باشید که متغیر به عنوان یک عدد صحیح اعلام شده است، اگر کاربر سعی کند یک عدد اعشاری را وارد کند، کوتاه می شود (یعنی قسمت اعشاری عدد نادیده گرفته می شود). سعی کنید یک عدد اعشاری یا دنباله کاراکتر را هنگام اجرای برنامه مثال وارد کنید، پاسخ به مقدار ورودی بستگی دارد.

توجه داشته باشید که هنگام چاپ از یک متغیر از علامت نقل قول استفاده نمی شود. عدم وجود نقل قول به کامپایلر می گوید که یک متغیر وجود دارد و بنابراین برنامه باید مقدار متغیر را بررسی کند تا در هنگام اجرا نام متغیر را با مقدار آن جایگزین کند. چندین عملگر شیفت در یک خط کاملاً قابل قبول هستند و خروجی به همان ترتیب انجام خواهد شد. شما باید حرف های رشته ای (رشته های نقل شده) و متغیرها را جدا کنید و به هر کدام یک عملگر شیفت متفاوت بدهید<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

تغییر و مقایسه ارزش ها

البته، مهم نیست که از چه نوع داده ای استفاده می کنید، متغیرها علاقه چندانی ندارند مگر اینکه مقدار آنها قابل تغییر باشد. در زیر برخی از عملگرهای مورد استفاده در ارتباط با متغیرها را نشان می دهد:

  • * ضرب،
  • - منها کردن،
  • + اضافه کردن،
  • / تقسیم،
  • = تکلیف،
  • == برابری،
  • > بیشتر
  • < меньше.
  • != مساوی نیست
  • >= بزرگتر یا مساوی
  • <= меньше или равно

عملگرهایی که توابع ریاضی را انجام می دهند باید در سمت راست علامت تخصیص استفاده شوند تا نتیجه را به متغیر سمت چپ نسبت دهیم.

در اینجا چند نمونه آورده شده است:

A = 4 * 6; // از نظر خط و نقطه ویرگول استفاده کنید، a برابر 24 a = a + 5 است. // برابر است با مجموع مقدار اصلی و پنج a == 5 // تخصیص داده نشده پنج، چک، و برابر با 5 یا خیر

شما اغلب از == در ساختارهایی مانند دستورات شرطی و حلقه ها استفاده می کنید.

آ< 5 // Проверка, a менее пяти? a >5 // بررسی کنید که a بزرگتر از پنج است؟ a == 5 // بررسی کنید که آیا a پنج است؟ a != 5 // بررسی کنید که a برابر با پنج نیست؟ a >= 5 // بررسی کنید که a بزرگتر یا مساوی پنج است؟ آ<= 5 // Проверка, a меньше или равно пяти?

این مثال‌ها استفاده از علائم مقایسه را خیلی واضح نشان نمی‌دهند، اما وقتی شروع به مطالعه عملگرهای انتخاب می‌کنیم، متوجه خواهید شد که چرا این کار ضروری است.

گروه: اتوماسیون و فناوری اطلاعات

مبانی ج

معرفی

فصل 1 ج مبانی

1.1. الفبا

1.2. ساختارهای پایه C

1.3. ورودی خروجی.

1.3.1. نتیجه

1.4. انواع داده های پایه C

1.4.1. شناسه ها

1.4.2. ثابت های تایپ شده

1.4.3. متغیرها

1.4.3.1. انواع عدد صحیح

1.4.3.2. انواع واقعی

1.4.3.3. انواع شخصیت ها

1.4.4. رشته نوع داده

1.4.5. سازه های

1.4.5.1. آرایه ها

1.4.5.2. ورودی های

1.4.6 دامنه و طول عمر متغیرها

1.5. اپراتورهای اصلی

1.6. پیش پردازنده

1.7. برنامه ها. کارکرد

1.8. اشاره گرها

1.9. اشاره گرها و توابع

1.10. فایل ها

1.11. توابع C اضافی

1.11.1. توابع تبدیل

توابع تبدیل رشته کاراکتر: atoi()، atof(). 37.

1.11.3. توابع رشته

1.12. ویژگی های برنامه نویسی C

1.12.1. ماژول ها برنامه نویسی چند ماژول

1.12.2. مدل های حافظه

1.12.3. برنامه نویسی در داس و ویندوز

1.12.4. استفاده از زبان اسمبلی در برنامه های C

فصل 2 ج مثالها

2.1. مرتب سازی

2.2. الگوریتم های بازگشتی

2.3. وظیفه "برج های هانوی"

فصل 3 مبانی C++

3.1. تفاوت های C++ و C

3.2. برنامه نویسی شی گرا در C++

3.2.1. کلاس ها

3.2.2. اضافه بار عملکرد

3.2.3. سازندگان

3.2.4. ویرانگرها

3.2.5. سازندگان با پارامترها

3.2.6. مقدمه ای بر وراثت

3.2.7. توابع مجازی

3.2.8. اشاره گر به اشیاء

فصل 4. مبانی برنامه نویسی C++Builder

4.1. ویژگی های C++Builder

4.2. اجزای VCL خواص. مناسبت ها. مواد و روش ها

4.2.1. انواع کامپوننت

4.2.2. سلسله مراتب کلاس های VCL

4.3. ساختار فایل در C++Builder

4.4. اجزای بصری (VCL)

4.5. برنامه ها، مدیریت رویداد، استثنائات

4.6. استراتژی اشکال زدایی برای برنامه های ویندوز

4.7. استفاده از اجزای VCL در توسعه برنامه

4.8. اجزای گرافیکی

4.9. چند رسانه ای

4.10. گرافیک اسپرایت

4.11. فناوری شی OLE2

4.12. DLL ها

4.13. توسعه اجزای بصری

4.14. مقدمه ای بر برنامه نویسی CGI

3.15. برنامه نویسی پایگاه داده

3.16. بسته ها

نتیجه

ادبیات

پیوست N1


معرفی

در سال 1804، مخترع فرانسوی ژوزف ماری ژاکارد یک ماشین بافندگی "کنترل شده با برنامه" ایجاد کرد. برای کنترل دستگاه از کارت های پانچ که به صورت نواری به یکدیگر متصل شده بودند استفاده شد. پین‌های چوبی «ریدر» دستگاه، با محل سوراخ‌های کارت پانچ شده، تعیین می‌کردند که کدام نخ‌ها را باید بالا برد و کدام را پایین آورد تا الگوی مورد نظر به دست آید.

در سال 1890، در ایالات متحده، مخترع هرمان هولریث، یک ماشین محاسبه الکترومکانیکی را توسعه داد - یک جدول‌بندی که توسط کارت‌های پانچ کنترل می‌شد، برای جمع‌آوری جداول با نتایج سرشماری ایالات متحده استفاده شد. شرکت جدول‌ساز که توسط هولریث تأسیس شد، بعداً به شرکت ماشین‌های تجاری بین‌المللی (IBM) تبدیل شد.

در سال 1936، یک دانشجوی بیست و پنج ساله در دانشگاه کمبریج به نام آلن تورینگ انگلیسی، مقاله ای با عنوان "درباره اعداد قابل محاسبه" منتشر کرد که یک دستگاه فرضی ("ماشین تورینگ") را مناسب برای حل هر ریاضی یا حل پذیری می دانست. مشکل منطقی - نمونه اولیه یک کامپیوتر قابل برنامه ریزی.

در سال 1941، مهندس آلمانی Konrad Zuse یک کامپیوتر کارآمد Z3 ساخت که از سیستم اعداد باینری استفاده می کرد. برنامه ها روی نوار پانچ ضبط می شد.

در سال 1945، در دانشکده فنی عالی دانشگاه پنسیلوانیا (ایالات متحده آمریکا)، فیزیکدان جان ماچلی و مهندس پروسپر اکرت یک ماشین کاملاً الکترونیکی انیاک ساختند. برنامه نویسی نیاز به تنظیم دستی هزاران کلید و وصل کردن صدها دوشاخه به سوکت پانل تماس داشت.

در 1 ژوئن 1945، گزارشی توسط جان فون نویمان، ریاضیدان آمریکایی متولد مجارستان، با عنوان "گزارش مقدماتی در مورد ماشین Advak" ارسال شد که حاوی مفهوم ذخیره دستورالعمل های رایانه در حافظه داخلی خود بود.

در 21 ژوئن 1948، در دانشگاه منچستر (بریتانیا)، اولین برنامه جهان ذخیره شده در حافظه دستگاه بر روی ماشین Mark-1 اجرا شد - جستجو برای بزرگترین عامل یک عدد معین.

در سال 1949، تحت رهبری موریس ویلکس، کامپیوتر Edsack ساخته شد. طراحان Edsac سیستمی از نمادهای یادگاری معرفی کردند که در آن هر دستورالعمل ماشین با یک حرف بزرگ نشان داده می شد و تنظیم زیربرنامه ها را در یک مکان خاص در حافظه به طور خودکار انجام می داد. موریس ویلکز مدار یادگاری و کتابخانه زیر روال را یک سیستم مونتاژ نامید - از این رو کلمه " اسمبلر " نامیده می شود.

در سال 1949، در فیلادلفیا (ایالات متحده آمریکا)، تحت رهبری جان ماچلی، "کد کوتاه" ایجاد شد - اولین مفسر ابتدایی یک زبان برنامه نویسی.

در سال 1951، گریس هاپر برنامه نویس آمریکایی اولین برنامه پخش را در رمینگتون رند توسعه داد. هاپر آن را کامپایلر (کامپایلر - پیوند دهنده) نامید.

در سال 1957، در طبقه بیستم مقر IBM در خیابان مدیسون نیویورک، زبان فرترن (FORmula TRANslation - ترجمه فرمول ها) متولد شد. تیم توسعه توسط ریاضیدان 30 ساله جان بکوس رهبری می شد. فرترن اولین زبان سطح بالا "واقعی" است.

در سال 1972، دنیس ریچی، برنامه نویس سیستمی 31 ساله در آزمایشگاه بل، زبان برنامه نویسی C را توسعه داد.

در سال 1984، فیلیپ کان، ریاضیدان و ساکسیفونیست فرانسوی Borland International را تأسیس کرد.

C در ابتدا به عنوان یک زبان برنامه نویسی برای سیستم عامل یونیکس توسعه داده شد.

به زودی شروع به گسترش به برنامه نویسان عملی کرد. در اواخر دهه 1970 مترجم های C برای ریز کامپیوترها برای سیستم عامل CP/M توسعه یافتند.

پس از ظهور رایانه شخصی IBM، کامپایلرهای C نیز شروع به ظاهر شدن کردند (اکنون بیش از 20 مورد برای این رایانه وجود دارد).

در سال 1983، موسسه استانداردهای آمریکا (ANSI) کمیته فنی X3J11 را برای ایجاد استانداردی برای زبان C تشکیل داد. زبان C++ Borland که در بازار ظاهر شده است، با اکثر الزامات استاندارد مطابقت دارد.

در هسته خود، C زبان توابع است. برنامه نویسی در C با نوشتن توابع و فراخوانی توابع کتابخانه انجام می شود. اکثر توابع مقداری را برمی‌گردانند که می‌تواند در عبارات دیگر استفاده شود.

در میان مزایای فراوان زبان C باید به مهمترین آنها اشاره کرد:


جهانی بودن (تقریباً در تمام رایانه های موجود استفاده می شود).

فشرده بودن و جهانی بودن کد؛

سرعت اجرای برنامه؛

انعطاف پذیری زبان؛

ساختار بالا


فصل 1 ج مبانی

1.1. الفبا

الفبای زبان از کاراکترهای زیر تشکیل شده است:

حروف بزرگ و کوچک نامه ها A-Z، A-Z و خط زیر. اعداد از 0 تا 9. کاراکترهای ویژه + - * / =>

فضای کاراکترها، برگه، تغذیه خط، بازگشت کالسکه فضای خالی نامیده می شوند.

یک برنامه C++ دنباله ای از کاراکترهای ACSII است که متن منبع آن را نشان می دهد.

1.2. ساختارهای پایه C

یک برنامه ساده برای چاپ عبارت Hello from the computer روی صفحه در نظر بگیرید.

// برنامه

printf ("سلام از کامپیوتر");

ساختار برنامه را در نظر بگیرید

برنامه سی
# دستورالعمل های پیش پردازنده
اصلی
اپراتورها
تابع 1()
اپراتورها
تابع n()
اپراتورها
توضیحات
تکالیف
کارکرد
دفتر
خالی

دستور #include شامل فایل stdio.h در برنامه ما است. فایل حاوی اطلاعاتی در مورد عملکردهای I/O است.

فایلی با نام stdio.h حاوی اطلاعاتی در مورد I/O است.

نماد # نشان می دهد که قبل از ترجمه برنامه، لازم است توابعی از فایل stdio.h در آن گنجانده شود - این به اصطلاح پردازش پیش پردازنده است که قبل از کامپایل، برخی از پردازش های اولیه متن برنامه را انجام می دهد.

خط main() حاوی نام تابعی است که برنامه همیشه با آن شروع می شود. پرانتزهای خالی نشان می دهد که این یک تابع است، اما هیچ پارامتری ندارد.

کاراکترهای // با نظرات (برای یک خط) دنبال می شوند (کاراکترهای بین /* و */ نیز نظر نامیده می شوند).

بریس های فرفری () ابتدا و انتهای بدنه یک برنامه یا تابع را مشخص می کنند. آنها همچنین برای گروه بندی چندین دستور برنامه در یک بلوک استفاده می شوند.

خط printf ("سلام از کامپیوتر") حاوی تابع چاپ استاندارد C است. رشته کاراکتر محصور در براکت (آگومان) اطلاعاتی است که از تابع main() ما به تابع printf() ارسال می شود. پس از تکمیل عملکرد، کنترل به برنامه اصلی باز می گردد. کاراکتر - نشان دهنده یک تغذیه خط به یک خط جدید پس از چاپ است.

مثال زیر را در نظر بگیرید - برنامه ای برای تبدیل متر به سانتی متر بنویسید.

printf(" %d M شامل %d cm"، I, J);

این برنامه دو متغیر عدد صحیح I و J را تعریف می کند.

تابع scanf ("%d"،&I) معرفی شد. که به شما اجازه می دهد یک عدد اعشاری را از صفحه کلید وارد کنید و یک مقدار به متغیر I اختصاص دهید، سپس با دستور J=100*I; محاسبه در حال انجام 4.

خط بعدی printf(" %d M حاوی %d cm ", I, J); عبارتی را چاپ می کند %d اول (d یک متغیر عدد صحیح است) با مقدار I جایگزین می شود و %d دوم با مقدار J جایگزین می شود.

تابع getch() به شما امکان می دهد یک تصویر را روی صفحه نگه دارید و برای تکمیل کار به هر کاراکتری نیاز دارد.

بیایید مثال دیگری را در نظر بگیریم. بیایید یک تابع بنویسیم و آن را از برنامه خود فراخوانی کنیم.

printf ("با من تماس گرفتی؟");

printf("من تابع سرپرست را فراخوانی می کنم.");

printf("بله. ببینید کدام دانش آموزان خوابیده اند و آنها را بیدار کنید.");

ابتدا تابع supervisor() را توصیف می کنیم و سپس با استفاده از دستور supervisor(); به آن در برنامه اصلی اشاره می کنیم. نتیجه یک دیالوگ است:

من تابع سرپرست را صدا می زنم.

تو به من زنگ زدی؟

آره. ببینید کدام دانش‌آموزان خواب هستند و آنها را بیدار کنید.

1.3 ورودی/خروجی
برای حل یک مشکل در هر منطقه مشکل، لازم است برنامه ای بنویسید که در آن دستوراتی وجود داشته باشد که اجازه می دهد:
- اختصاص فضا برای ذخیره سازی داده ها؛

داده های اولیه را وارد کنید؛

پردازش داده های اولیه با توجه به الگوریتم؛

خروجی خروجی

C شامل توابع مورد نیاز برای انجام این اقدامات است. همه توابع را با مثال در نظر می گیریم و با توابع ورودی-خروجی شروع می کنیم.

1.3.1. نتیجه

خروجی روی صفحه نمایش، چاپگر، هارد دیسک (فلاپی دیسک)، پورت انجام می شود. بیایید به عملکردهای نمایشگر نگاه کنیم.

تابع printf برای این منظور طراحی شده است. فرمت: printf([,argument1],...).

قالب یک رشته دو نقل قول است که روی صفحه چاپ می شود. قبل از خروجی، printf همه اشیاء در رشته را با توجه به مشخصات آرگومان جایگزین می کند. به عنوان مثال، printf(" %d M شامل %d cm ", I, J); %d در رشته قالب، مشخصات آرگومان است.

مشخصات آرگومان با علامت درصد (%) و یک حرف واحد که نوع داده را نشان می دهد شروع می شود.

%d استفاده شده در مشخصات نشان می دهد که مقداری عدد صحیح مورد انتظار است. در اینجا چند مشخصات فرمت رایج دیگر وجود دارد:

- %d عدد صحیح؛

- %u عدد صحیح بدون علامت.

- %ld عدد صحیح طولانی؛

- مقدار نشانگر %p؛

- %f عدد ممیز شناور؛

- %e عدد ممیز شناور به صورت نمایی.

- کاراکتر %c؛

- رشته %s

- %x عدد صحیح در قالب هگزادسیمال.

می توانید عرض فیلد را تنظیم کنید، به عنوان مثال %6d - عرض فیلد 6.

مقدار با جابجایی به راست چاپ می شود (فضاهای جلوتر)، بنابراین عرض کل فیلد 6 است.

برای فرمت اعداد واقعی، می توانید یک قسمت کسری را مشخص کنید، به عنوان مثال %8.4f - یک فیلد با عرض 8، قسمت اعشاری 4.

در انتهای رشته فرمت، می توانید کاراکترها را قرار دهید:

ترجمه خطی؛.

f (تبدیل فرمت یا پاک کردن صفحه نمایش)

(برگه)

xhhh (نویسه با کد ASCII hhh وارد کنید، جایی که hhh شامل 1 تا 3 رقم هگز است)

برای خروجی می توانید از توابع putchar و putchar استفاده کنید.

تابع puts یک رشته را روی صفحه چاپ می کند. مثلا:

puts ("سلام دانش آموز");

تابع putchar یک کاراکتر را روی صفحه نمایش چاپ می کند.

1.3.2 ورودی

ورودی C عمدتا از صفحه کلید، از فایل و پورت انجام می شود.

عملکرد scanf مشابه printf است. فرمت آن scanf([,argument1],...) است. scanf از همان فرمت مشخص کننده های printf استفاده می کند. لازم به ذکر است که scanf یک ویژگی دارد: آرگومان های زیر رشته قالب باید آدرس باشند، نه مقادیر (این در مورد متغیرهای کاراکتر صدق نمی کند). قبلا در مثال ها دیدیم که هنگام وارد کردن یک عدد صحیح تابع به صورت زیر نوشته می شد:

scanf("%d"، &a);

& عملگر آدرس است که آدرس ها را به scanf می دهد.

هنگام وارد کردن چندین متغیر که با کاما از هم جدا شده اند، می توانید از یک کاما در قالب استفاده کنید. مثال:

scanf("%d، %d"، &a، &b);

اکنون می توانید مثلاً 23.56 را وارد کنید.

برای وارد کردن یک رشته کاراکتر از چند کلمه مشکلاتی وجود دارد - فقط داده ها تا اولین فاصله وارد می شوند. یک تابع get برای حل این مشکل وجود دارد.

printf("نام شما چیست:");

printf("سلام %s"، نام);

تابع gets هر آنچه را که تایپ می شود می خواند تا زمانی که Enter فشار داده شود.

در C++، I/O نه تنها با توابع، بلکه با عملیات نیز قابل انجام است. عملیات خروجی >.

فرمت خروجی صفحه: cout

فرمت ورودی صفحه کلید: cin

هنگام استفاده از عملیات I/O، فایل iostream.h باید در برنامه گنجانده شود.

ورودی/خروجی چند مقدار امکان پذیر است (با یک فاصله جدا شده است).


1.4 انواع داده های C پایه

1.4.1 شناسه ها

نام هایی که به ثابت ها، انواع داده ها، متغیرها و توابع داده می شود، شناسه نامیده می شوند. در C، قوانین زیر برای ایجاد شناسه ها باید با یک حرف (a...z،A...Z) یا زیرخط (_) شروع شود، بقیه شناسه باید شامل حروف، زیرخط و/یا اعداد باشد (0). ...9).

1.4.2 ثابت های تایپ شده

C از ثابت ها استفاده می کند که نامی هستند که به یک مقدار داده می شود. شناسه نام می تواند هر طولی داشته باشد، اما 32 کاراکتر اول شناسایی می شوند. شناسه با یک حرف لاتین یا زیرخط شروع می شود، کاراکترهای بعدی می توانند اعداد، حروف لاتین و زیرخط باشند.

کامپایلر C با حروف بزرگ و کوچک به عنوان کاراکترهای مختلف رفتار می کند.

ثابت های تایپ شده عبارتند از: اعداد صحیح، ممیز شناور، ثابت کاراکترها و رشته های کاراکتر.

ثابت ها به صورت یک عدد صحیح اعشاری، اکتال یا هگزادسیمال نمایش داده می شوند.

شرح ثابت ها با شروع می شود کلمه کلیدی const، سپس نوع و مقدار را تایپ کنید، برای مثال const int Nalog=2.

1.4.3 متغیرها

متغیر یک مقدار نامگذاری شده است که مقدار آن می تواند در طول اجرای برنامه تغییر کند. متغیر متعلق به یک نوع خاص است.


1.4.3.1 انواع عدد صحیح

اعداد صحیح با انواع عدد صحیح نشان داده می شوند. نوع عدد صحیح یک نوع عمومی است که نمایش آن به سیستم عامل و نوع پردازنده بستگی دارد.

انواع اصلی اعداد صحیح را در نظر بگیرید:

بیایید یک مثال ساده را در نظر بگیریم.

const int Tax= 2;

Symma = Rate * Tax;

printf("Symma tax = %d ",Symma);

مثال یک متغیر ثابت و دو متغیر از نوع عدد صحیح را اعلام می کند.

1.4.3.2 انواع واقعی

نوع واقعی برای ذخیره اعداد با قسمت کسری استفاده می شود.

در C++ انواع اصلی اعداد حقیقی زیر وجود دارد:

مثال زیر را در نظر بگیرید.

const float Tax= 0.7;

Symma = Rate * Tax;

printf("مالیات سیما = %8.4f ",Symma);

AT این مثالنوع واقعی با متغیر Symma نشان داده می شود.

1.4.3.3 انواع کاراکترها

نوع کاراکتر -Char برای ذخیره یک کاراکتر طراحی شده است، بنابراین اندازه آن یک بایت است.

یک مثال را در نظر بگیرید:

printf("A=%c B=%c",A,B);

printf("C= %c",C);

در این مثال، متغیر A روی 'D^، متغیر B روی '!^' و متغیر C روی '*^' تنظیم شده است.

1.4.4 رشته نوع داده

برای نمایش رشته ای از کاراکترها در C، آرایه هایی از نوع char استفاده می شود.

یک مثال را در نظر بگیرید.

charA; /* طول می تواند تا 256 کاراکتر باشد */

strcpy (A"IBM PC Pentium");

strcpy (B"Windows 95")؛

strcpy(C,""); /* متغیر پاک */ printf("A= %s ",A);

printf("B= %s ",B);

printf("C= %s",C);

در این مثال، سه رشته کاراکتر A، B، C وجود دارد.

با دستور، به عنوان مثال، strcpy (A"IBM PC Pentium")؛ خط A حاوی متن IBM PC Pentium است.

علاوه بر مثال بالا، می توانید از یک اشاره گر به کاراکترها برای تعریف رشته ها استفاده کنید. مثال:

msg = "سلام دانش آموز";

ستاره قبل از msg به این معنی است که msg یک نشانگر کاراکتر است - i.e. msg می تواند آدرس یک نماد را ذخیره کند. با این حال، این حافظه را برای تطبیق کاراکترها اختصاص نمی دهد.

دستور msg = "Hi, student" آدرس شروع این رشته - (آدرس کاراکتر U) را به متغیر msg اختصاص می دهد. دستور puts(msg) کاراکترها را چاپ می کند تا زمانی که با یک کاراکتر تهی مواجه شود که نشان دهنده انتهای رشته است.

1.4.5 سازه ها

مجموعه ای از داده های به هم پیوسته که در حافظه قرار می گیرد یک ساختار را نشان می دهد. در C، ساختارهای زیر در نظر گرفته می شوند: آرایه ها، رکوردها و ترکیبات آنها.

1.4.5.1 آرایه ها

مجموعه ای با نام از داده های همگن آرایه نامیده می شود. هر عنصر آرایه در یک ناحیه حافظه جداگانه ذخیره می شود و دارای شماره مخصوص به خود (از صفر شروع می شود).

یک مثال را در نظر بگیرید.

B=10; B=20; B=30;

printf("B= %d",B);

printf("B= %d",B);

printf("B= %d",B);

printf("B= %d",B);

در مثال در نظر گرفته شده، یک آرایه B تعریف شده است که از چهار عنصر صحیح تشکیل شده است. عناصر آرایه را می توان مانند متغیرهای معمولی دستکاری کرد.

آرایه های چند بعدی وجود دارد، به عنوان مثال:

آرایه A یک آرایه دو بعدی است (شامل چهار ردیف و سه ستون):

آرایه A یک آرایه چهار بعدی است.

مثالی از کار با آرایه دو بعدی را در نظر بگیرید.

B = 1.2; B = 1.3;

printf("B= %4.2f B= %4.2f B= %4.2f ", B,B,B);

printf("B= %4.2f B= %4.2f B= %4.2f ", B,B,B);

1.4.5.2 ورودی ها

برخلاف آرایه‌ها، یک رکورد به شما امکان می‌دهد تا داده‌های مختلف را ذخیره کنید. ورودی بعد از کلمه کلیدی struct شروع می شود. بیایید مثالی را در نظر بگیریم - اطلاعات دانش آموزان در یک رکورد ذخیره می شود: نام خانوادگی، سال تولد، شماره گروه.

تایپ دف ساختار A (

strcpy (B.Fio"Ivanow G.I."); ب خدا = 1977;

printf("Fio = %s ",B.Fio);

printf("God = %d ",B.God);

در مثال در نظر گرفته شده، رکورد دارای ساختار زیر است:

ساختار A ( /* نام رکورد) */

charFio; /* 1 فیلد رکورد */

بین خدا /* 2 فیلد رکورد */

کلید typedef به ساختارها یک نام می دهد.

مثال را می توان به صورت زیر بازنویسی کرد.

ساختار typedef (

strcpy (B.Fio"Ivanow G.I.");

printf("Fio = %s ",B.Fio);

printf("God = %d ",B.God);

printf("Gruppa = %d ",B.Gruppa);

در مثال، ما یک رکورد را در نظر گرفتیم، اما در زندگی واقعی، یک دانش آموز در یک گروه نمی تواند وجود داشته باشد، بنابراین می توانیم یک آرایه و یک رکورد را ترکیب کنیم و یک آرایه از رکوردها ایجاد کنیم. یک مثال را در نظر بگیرید.

تایپ دف ساختار A (

WGruppa.God = 1977;

WGruppa.Gruppa = 384;

WGruppa.God = 1978;

WGruppa.Gruppa = 384;

printf("Fio2 = %s ",WGruppa.Fio);

printf("God2 = %d",WGruppa.God);

printf("Gruppa2 = %d ",WGruppa.Gruppa);

ما در ابتدا ساختار A را تعریف کردیم و سپس هنگام اعلام ساختار WGruppa به عنوان یک آرایه از 12 ورودی ساختار B از آن استفاده کردیم.

حال برای آدرس دهی باید شماره عنصر آرایه و نام فیلد را مشخص کنیم.

هنگامی که یک ورودی حاوی ورودی دیگری باشد، گزینه‌هایی وجود دارد، به عنوان مثال، اضافه کردن یک آدرس به ورودی دانشجویی که در بالا بحث شد. مثال.

آدرس typedef struct(

char Street_Nd_Kw; )

تایپ دف ساختار A (

آدرس D_addr; )

strcpy(WGruppa.Fio"Ivanow G.I.");

WGruppa.God = 1977;

WGruppa.Gruppa = 384;

strcpy(WGruppa.D_addr.City"Shadrinsk"); strcpy(WGruppa.D_addr.Street_Nd_Kw,"Lenina 10 kw.1");

strcpy(WGruppa.Fio"Petrow R.G.");

WGruppa.God = 1978;

WGruppa.Gruppa = 384;

strcpy(WGruppa.D_addr.City"Kataisk"); strcpy(WGruppa.D_addr.Street_Nd_Kw,"Akulowa 1 kw.2");

printf("Fio1 = %s ",WGruppa.Fio);

printf("God1 = %d",WGruppa.God);

printf("Gruppa1 = %d ",WGruppa.Gruppa);

printf("City= %s ",WGruppa.D_addr.City);

printf("Fio2 = %s ",WGruppa.Fio);

printf("God2 = %d",WGruppa.God);

printf("Gruppa2 = %d ",WGruppa.Gruppa);

printf("City= %s ",WGruppa.D_addr.City);

printf("خیابان= %s ",WGruppa.D_addr.Street_Nd_Kw);

1.4.6 دامنه و طول عمر متغیرها

بر اساس دامنه، متغیرهای C را می توان به سه گروه تقسیم کرد:

1. متغیر تعریف شده در تمام ماژول ها (فایل ها) برنامه. چنین متغیری با استفاده از کلمه کلیدی خارجی تعریف می شود. این متغیر در تمام نقاط برنامه قابل مشاهده خواهد بود. چنین متغیری برای کل برنامه جهانی است.

2. متغیری که در یکی از ماژول ها (فایل) قبل از متون تمام توابع تعریف شده است. چنین متغیری برای این ماژول جهانی خواهد بود، i.e. در تمام نقاط این ماژول قابل استفاده است.

3. متغیر تعریف شده در این تابع. این متغیر فقط در این تابع قابل استفاده است. ما چنین متغیری را local می نامیم.

با توجه به طول عمر، همه متغیرها را می توان به دو گروه تقسیم کرد:

1. متغیرهایی که در طول برنامه زندگی می کنند.

2. متغیرهایی که پس از خروج از تابع از بین می روند.

متغیرهای سراسری از نظر طول عمر از نوع اول هستند. متغیرهای محلی با خروج تابع از بین می روند. در موردی که می خواهیم یک متغیر محلی را طولانی مدت بسازیم، از کلمه static استفاده می شود. متغیرهای محلی از این نوع از لحظه اولین فراخوانی تابع تا پایان برنامه زنده هستند. با این حال، از نظر دید، این متغیرها محلی باقی می مانند. static int i=0 را بنویسید. به این معنی که متغیر در اولین ورود به تابع به صفر مقداردهی می شود، اما در ورودی های بعدی به تابع، بسته به اقداماتی که روی آن انجام شده است، مقدار آن حفظ می شود.

کامپایلرهای مدرن C برنامه را به گونه ای ترجمه می کنند که عملکرد آن را تا حد امکان بهینه کنند. یکی از بهینه‌سازی‌ها ذخیره متغیرها، در صورت امکان، در ثبات‌ها به جای مکان‌های حافظه است. در مواردی که می خواهید از ذخیره شدن یک متغیر در ثبات ها جلوگیری کنید، از اصلاح کننده فرار استفاده کنید. اگر انتظار می رود متغیر در نتیجه تأثیرات خارجی (مثلاً وقفه) تغییر کند، چنین نیازی ممکن است ایجاد شود.

و نکته آخر. حافظه تخصیص یافته پویا، هر جا که آن را تخصیص دهید، تا زمانی که آن را آزاد نکنید، زنده می ماند.

1.5 اپراتورهای اصلی

عملیات واگذاری

رایج ترین عملیات انتساب است، برای مثال c=a/b. در C، انتساب با علامت تساوی = نشان داده می شود که به موجب آن مقدار سمت راست علامت تساوی به متغیر سمت چپ اختصاص داده می شود. همچنین می توان از انتساب های متوالی استفاده کرد، به عنوان مثال: c = a = b.

عملگرهای حسابی

در C، گروه های زیر از عملیات حسابی انجام می شود:

1. باینری: جمع(+)، تفریق(-)، ضرب(*)، تقسیم(/)، تقسیم عدد صحیح(%) (برای نوع int گرفتن باقیمانده).

2. Unary: یکنواخت به علاوه (+)، یکنواخت منهای (-)، آدرس دهی (&)، آدرس دهی غیر مستقیم (*)، تعیین اندازه حافظه نوع (sizeof).

3. منطقی: و (&&)، یا (!!)، نه (!=).

4-روابط:

الف) برابر (==)، نه برابر (!>)؛

ب) کمتر از ()، کمتر یا مساوی (=)؛

5. افزایش (++) و کاهش (--). برای مثال i++ به معنای i=i+1 و i-- به معنای i=i-1 است.

6. عملیات بیت - به شما امکان می دهد عملیات را روی بیت ها انجام دهید.

7. عملیات ترکیبی. Turbo-C میانبرهایی برای نوشتن عبارات حاوی چندین عملیات دارد:

a = a + b به اختصار a += b;

a = a - b; به اختصار a -= b;

a = a * b; به اختصار a *= b;

a = a / b; به اختصار a /= b;

a = a % b; کاهش به %=b;

8. عملیات آدرس:

1. عملیات تعیین آدرس (&) 2. عملیات دسترسی به آدرس (*).

عملگر & آدرس متغیر داده شده را برمی گرداند. اگر X یک متغیر int باشد، &X آدرس (محل حافظه) آن متغیر است. از طرف دیگر، اگر msg یک اشاره گر برای تایپ char باشد، *msg کاراکتری است که توسط msg به آن اشاره می شود. یک مثال را در نظر بگیرید:

msg = "سلام";

printf("X = %d &X = %p",X,&X);

printf("*msg = %c msg = %p ", *msg, msg);

هنگام چاپ، تابع اول دو مقدار را چاپ می کند: مقدار X 7 و آدرس X (تخصیص داده شده توسط کامپایلر). تابع دوم نیز دو مقدار را چاپ می کند: کاراکتر نشان داده شده توسط msg (P) و مقدار msg که آدرس آن کاراکتر است (همچنین توسط کامپایلر اختصاص داده شده است).

تقدم عملیات در C با تقدم عمل در ریاضیات مطابقت دارد.

عملگر کاما

عملگر کاما برای سازماندهی عبارات متعدد در داخل پرانتز استفاده می شود. عبارت داخل براکت ها از چپ به راست ارزیابی می شود و کل عبارت مقداری را می گیرد که آخرین بار ارزیابی شده است. مثلا:

(X=Y، Y=getch())

مقدار Y را به متغیر X اختصاص می دهد، سپس کاراکتر وارد شده از صفحه کلید را می خواند و در Y ذخیره می کند. نتیجه کل عبارت، در پایان، مقدار کاراکتر وارد شده از صفحه کلید خواهد بود.

اپراتورهای کنترل

دستور If... بسته به شرایط، اجرای یک یا آن شاخه از برنامه را ممکن می سازد. دستور عملگر به صورت زیر است:

اگر شرط عبارت1 else express2;

شرط باید به مقدار بولی درست یا غلط ارزیابی شود. اگر شرط درست باشد عبارت 1 اجرا خواهد شد. اگر شرط نادرست باشد، Expression2 اجرا می شود.

یک نسخه کوتاه شده از اپراتور وجود دارد:

اگر عبارت شرط 1

مثال. تعیین کنید که عدد وارد شده یک روز از هفته است یا خیر. آیا عدد در محدوده 1 تا 7 است.

printf("خطا %d",A);

else printf("OK %d ",A);

اگر A 7 اجرا شود، عبارت شرط (A 7) به TRUE ارزیابی می شود - در این مورد، شاخه printf("Error",A); اجرا می شود، در غیر این صورت شاخه printf("OK",A); اجرا می شود.

روش دیگری برای نوشتن عبارت If ... وجود دارد. مثال:

y=(t>0)؟ t*10: t-10; /* اگر t>0 y=t*10 دیگری y=t-10;*/

printf("OK %d ",y);

در این نسخه نوع اپراتور در نظرات نشان داده شده است.

دستور switch... case زمانی استفاده می شود که لازم باشد متغیری را تجزیه و تحلیل کرد و بسته به مقدار آن اقدامات خاصی را انجام داد. یک مثال را در نظر بگیرید. حروف الفبای لاتین از صفحه کلید وارد می شود. بسته به نامه، اقدامات خاصی را انجام دهید.

case "c": printf(" small %c ",A); زنگ تفريح؛ /* خروج را مسدود کنید */

case "G": printf("big %c",A);

پیش‌فرض: printf("خطا %c",A);

در این مثال، اگر کاراکتر c وارد شده باشد، printf(" small %c ",A); وارد می شود، اگر حروف بزرگ F یا G وارد شده باشد، printf(" big %c ",A); اجرا می شود. اگر یکی از کاراکترهای در نظر گرفته شده وارد نشده باشد، printf("Error %c",A); اجرا می شود.

برای چندین بار تکرار مجموعه ای از دستورات، می توانید از دستور do... while استفاده کنید. یک مثال را در نظر بگیرید.

printf("زیفرا؟");

printf("خطا %d",A);

) while (!(A == 9));

printf("OK %d ",A);

یک عدد از صفحه کلید وارد می شود. دستور printf("Error %d ",A); اجرا می شود. بعد تجزیه و تحلیل می آید - عدد 9 برابر است یا نه، اگر نه، بدنه حلقه دوباره اجرا می شود:

printf("زیفرا؟");

printf("خطا %d"،A).

اگر عدد 9 باشد، دستور printf("OK %d ",A); اجرا می شود. و حلقه به پایان می رسد.

ویژگی اصلی دستور do... while این است که بدنه حلقه محصور بین دستورات do و while حداقل یک بار اجرا می شود، یعنی. ابتدا بدنه حلقه اجرا می شود و سپس شرایط آنالیز می شود.

بنابراین، منظور از عملگر مورد نظر به این صورت است: "بدنه حلقه را تا زمانی که شرط درست باشد اجرا کنید."

دستور while... برخلاف do... while، ابتدا شرط را تحلیل می کند و سپس بدنه حلقه را اجرا می کند.

printf("زیفرا؟");

printf("خطا %d",A);

printf("OK %d ",A);

در این مثال، متغیر A:=0; مقداردهی اولیه شده است. این کار به این دلیل انجام می شود که ابتدا آنالیز 9 است یا خیر. اگر برابر نباشد، بدنه حلقه اجرا می شود. معنی عملگر در نظر گرفته شده به شرح زیر است:

"تا زمانی که شرط درست است، بدنه حلقه را اجرا کنید."

دستور for... زمانی استفاده می شود که مشخص شود بدنه حلقه چند بار باید اجرا شود، اما این دستور در مقایسه با پاسکال بسیار انعطاف پذیرتر است. یک مثال را در نظر بگیرید.

printf("زیفرا %d",A);

در این مثال، A وضعیت شمارنده حلقه را ذخیره می کند. در ابتدا A: = 1. دستور printf("Zifra %d ",A) اجرا می شود. سپس مقدار A یک افزایش می یابد. الف در حال تحلیل است

در مثال زیر گزینه را در نظر بگیرید برای بیانیه... زمانی که مقدار اولیه متغیر از مقدار نهایی بیشتر است و در طول حلقه یک عدد از متغیر کاهش می یابد.

برای (A = 5; A >= 1; A--) /* A-- به معنی A=A-1 */

printf("زیفرا %d",A);

تغییرات زیادی در عبارت for... وجود دارد، به عنوان مثال:

بیانیه خالی - برای تاخیر زمانی:

; /* عبارت خالی */

استفاده از زمین های مختلف:

تغییر متغیرها:

مثالی را در نظر بگیرید که در آن دو متغیر مقداردهی اولیه می شوند و هر کدام پس از تکرار حلقه تغییر می کنند:

دستور goto به شما امکان می دهد کنترل را به هر خطی از برنامه منتقل کنید. برای این منظور از برچسب استفاده می شود. مثال.

label_1:/* label */ printf("? ");

if (A != "y") goto label_1; )

شما می توانید از دستور break برای شکستن حلقه توسط یک شرط استفاده کنید. مثال.

i (A == "y") break;

برای قطع کردن تکرار حلقه و رفتن به تکرار بعدی، استفاده کنید ادامه بیانیه. مثال.

اگر (A == "y") ادامه یابد;

printf("%c کار می کند", A);

از دستورات return() و exit() نیز برای خاتمه برنامه استفاده می شود.

1.6. پیش پردازنده

پیش پردازشگر زبان C به شما امکان می دهد قبل از شروع ترجمه، بخش هایی از برنامه های نوشته شده را به طور جداگانه از برنامه اصلی در برنامه قرار دهید.

#تعریف بخشنامه.

دستور #define می تواند در هر جایی از برنامه ظاهر شود و تعریفی که می دهد از آن نقطه تا انتهای برنامه معتبر است.

#تعریف ANSWER TRI*TRI

#define OT printf("ANSWER %d است."،OTWET)

#define jd cin >>C;

پس از اجرای برنامه، دریافت خواهید کرد:

پاسخ 9 است

در خط اول برنامه، TRI تعریف ماکرو است و برابر با 3 است که 3 رشته جایگزین است.

در خط دوم، ماکرو OTWET دارای رشته جایگزین TRI*TRI و غیره است. هر خط دارای سه بخش است. اولین مورد، دستور #define و به دنبال آن تعریف کلان است. ماکروها نباید حاوی فضاهای درونی باشند. و در نهایت رشته ای می آید (به نام "رشته جایگزین") که ماکرو نشان دهنده آن است. هنگامی که پیش پردازنده یکی از تعاریف ماکرو را در برنامه پیدا می کند، آن را با یک رشته جایگزین جایگزین می کند. به این فرآیند از تعریف کلان به رشته جایگزین نهایی «گسترش کلان» می گویند.

بخشنامه #شامل.

هنگامی که پیش پردازنده دستور #include را "شناسایی" می کند، به دنبال نام فایلی می گردد که از آن پیروی می کند و آن را در برنامه فعلی گنجانده است. این بخشنامه به دو صورت ارائه می شود:

#include نام فایل در پرانتز زاویه

#include "my.h" نام فایل در دو نقل قول

براکت های زاویه ای به پیش پردازنده می گویند که فایل را در یک یا چند دایرکتوری استاندارد سیستم جستجو کند. نقل قول ها به آن می گویند که ابتدا در دایرکتوری کاری نگاه کند و سپس در مکان های "استاندارد" جستجو کند.

دستورالعمل: #undef، #ifdef، #else، #endif

این دستورالعمل ها به شما امکان می دهد تعاریف قبلی را به حالت تعلیق در آورید.

دستورالعمل #undef جدیدترین تعریف ماکرو نامگذاری شده را لغو می کند.

#undef TRI /* TRI اکنون تعریف نشده است */

#define F 10 /* F مجدداً به عنوان 10 */ تعریف شد

#undef F /* F دوباره 5 */

#undef F /* F اکنون تعریف نشده است */

بیایید مثال دیگری را در نظر بگیریم.

#include "otw.h" /* اگر OTW تعریف شده باشد */ اجرا خواهد شد

#include "w.h" /* اگر OTW تعریف نشده باشد اجرا می شود */

دستورالعمل ifdef می گوید که اگر یک شناسه OTW بعدی توسط پیش پردازنده مشخص شود، تمام دستورالعمل های بعدی تا اولین وقوع #else یا #endif اجرا می شوند. وقتی یک #else در یک برنامه وجود دارد، اگر شناسه تعریف نشده باشد، برنامه از #else به #endif اجرا می شود.

1.7 برنامه ها کارکرد

همانطور که قبلا دیدیم، یک برنامه C دارای یک بخش ریشه است که با دستورالعمل های پیش پردازنده و کلمه کلیدی اصلی شروع می شود.

بخش هایی که اغلب از برنامه استفاده می شود در تابع برجسته می شوند. هر تابع همچنین با دستورالعمل های پیش پردازنده و نامی که با پرانتز ( ) همراه است شروع می شود.

یک برنامه نمونه برای ترسیم پله ها را در نظر بگیرید.

printf("|----| ");

printf("|----| ");

printf("|----| ");

حال اجازه دهید این برنامه را با استفاده از تابع Lestniza بنویسیم.

printf("|----| ");

همانطور که از برنامه می بینید، تابع سه بار فراخوانی می شود. برای غلبه بر این نقص، برنامه را دوباره کار می کنیم و استدلال های رسمی و واقعی را معرفی می کنیم:

Lestniza(int B)/* B - استدلال رسمی */

printf("|----| ");

نردبان (3); /* 3 -آگومان واقعی */

در این تابع، B یک آرگومان رسمی (مقدار نهایی عملگر for to) است. برای تخصیص یک مقدار خاص به آن، از آرگومان واقعی استفاده می شود که با فراخوانی تابع در برنامه اصلی، به آن ارسال می شود.

اگر چندین پارامتر به یک تابع ارسال شود، باید به ترتیبی که در تابع نوشته شده اند، ارسال شوند.

تابعی را در نظر بگیرید که با استفاده از مثال مربع کردن یک عدد، مقدار خود را برمی گرداند.

شناور کوادرات (float A)

printf("Kwadrat = %8.2f ",Kwadrat(B));

همانطور که از مثال می بینید - نام تابع Kwadrat است - مربع یک عدد را محاسبه می کند. در خط printf("Kwadrat = %8.2f ",Kwadrat(B)); این تابع نامیده می شود - ورودی یک مقدار است (عدد وارد شده) و در نتیجه نتیجه را می گیریم - مربع عدد که با دستور بازگشت به برنامه برگردانده می شود.

بیایید یک نوع دیگر از کار با تابعی را در نظر بگیریم که یک مقدار را بدون دستور بازگشت برمی گرداند.

کوادرات (شناور A، شناور *B)

printf("Kwadrat = %8.2f ",D);

1.8. اشاره گرها

اشاره گر متغیری است که حاوی آدرس داده است نه مقدار آن. اشاره گر استفاده می شود:

1. برای اتصال سازه های مستقل با یکدیگر.

2. برای تخصیص حافظه پویا.

3. برای دسترسی عناصر مختلفسازه های.

برنامه زیر را در نظر بگیرید:

printf("مقدار مستقیم Z: %d"، Z);

printf("مقدار Z بدست آمده از طریق نشانگر: %d ",*Y);

printf(" آدرس Z از طریق دریافت آدرس: %p ",&Z);

printf("آدرس Z از طریق اشاره گر: %p"، Y);

در این مثال، Y یک اشاره گر به یک متغیر عدد صحیح است و حاوی آدرس آن است. به نوبه خود، & به شما امکان می دهد آدرسی را که مقدار متغیر Z در آن قرار دارد را دریافت کنید. در این برنامه:

آدرس متغیر Z به Y اختصاص داده شده است.

مقدار صحیح 100 به Z اختصاص داده می شود.

اپراتور & به شما امکان می دهد آدرس را دریافت کنید،

که روی آن مقدار Z قرار می گیرد.

نتیجه برنامه:

مقدار Z مستقیم: 100

مقدار Z دریافت شده از طریق اشاره گر: 100

آدرس Z از طریق دریافت آدرس: 85B3:0FDC

آدرس Z از طریق اشاره گر: 85B3:0FDC

همچنین از اشاره گرها برای تخصیص بهینه حافظه استفاده می شود.

مثالی از اشاره گر به تعدادی از نوع char را در نظر بگیرید.

char*str; /* اشاره گر به متغیر کاراکتر */

str = (char*)malloc(10);

strcpy(str، "سلام");

printf("رشته %s است"، str);

ابتدا با دستور char *str; نوع str ایجاد می شود که نشانگر آن است متغیر نوع char (* مخفف "اشاره گر"). با دستور str = (char *)malloc(10); ما 10 بایت حافظه برای متغیر str (نوع رشته) اختصاص می دهیم. با دستور strcpy(str, "Hello"); انجام می شود - "در ناحیه حافظه که با str به آن اشاره می شود، رشته کاراکترهای "Hello" را بنویسید. با دستور printf("رشته %s است"، str)؛ "بر روی صفحه نمایش آنچه را که str اشاره می کند چاپ کنید. command free(str); حافظه اشاره شده توسط str.

بیشتر در نظر بگیرید مثال پیچیدهدسترسی به رکورد با استفاده از یک اشاره گر

) /* پایان رکورد */

struct Student *A;

if ((A =(Student *) malloc(sizeof(Student))) == NULL)

printf ("حافظه تمام شده");

strcpy(A.Fio، "ایوانوف")؛

printf("Fio1 %s Gruppa %d ", A.Fio, A.Gruppa);

strcpy (A.Fio، "Petrow");

printf("Fio2 %s Gruppa %d ", A.Fio, A.Gruppa);

یک اشاره گر همچنین می تواند برای به دست آوردن یک اشاره گر غیر مستقیم به یک ساختار استفاده شود.

اجازه دهید poit یک اشاره گر به یک ساختار باشد و اجازه دهید elem عنصری باشد که توسط الگوی ساختار تعریف شده است. سپس point->elem عنصری را که به آن ارجاع داده شده است تعریف می کند. مثال قبلی را در نظر بگیرید.

struct Student ( /* ورودی دانشجو */

charFio; /* فیلد رکورد Fio */

گروه بین المللی; /* فیلد رکورد Gruppa */

) /* پایان رکورد */

حالا از چند طریق می توانیم به فیلدهای سازه دسترسی داشته باشیم. درمان معادل:

Student.Group=236;

point->Gruppa=236;

یکی را یادداشت می کنیم ویژگی مهماشاره گرها در C. مترجم به طور خودکار نوع اشاره گر را در عملیات حسابی روی آن در نظر می گیرد. به عنوان مثال، اگر i یک اشاره گر به یک متغیر عدد صحیح (یعنی دو بایتی) باشد، عمل نوع i++ به این معنی است که نشانگر نه یک بایت، بلکه دو بایت افزایش می یابد، یعنی. به متغیر یا عنصر آرایه بعدی اشاره خواهد کرد. به همین دلیل می توان به جای شاخص های آرایه از اشاره گر استفاده کرد. به عنوان مثال، اگر A یک اشاره گر به یک آرایه از نوع عدد صحیح است، به جای A[i] می توانید *(A+i) را بنویسید. علاوه بر این، استفاده از نشانگرها به جای ایندکس ها به کامپایلر اجازه می دهد تا کد کمتر و سریع تری تولید کند.

1.9 اشاره گرها و توابع

اشاره گرها همچنین می توانند به عنوان پارامترهای تابع رسمی استفاده شوند. یک مثال را در نظر بگیرید.

تابع swap دو پارامتر رسمی x و y را به عنوان اشاره گر به داده های int اعلام می کند. این بدان معنی است که تابع swap بر روی آدرس های متغیرهای عدد صحیح (به جای مقادیر آنها) عمل می کند. بنابراین، داده‌هایی که آدرس‌های آنها در حین فراخوانی تابع به آن ارسال می‌شود، پردازش می‌شوند. تابع main() swap را فراخوانی می کند.

مبادله (int *x، int *y)

wr = *x; *x = *y; *y=wr;

printf("این بود: i=%d، j=%d ",i,j);

printf("اکنون: i =%d, j=%d ",i,j);

پس از اجرای برنامه، مقادیر i و j با هم عوض می شوند. لازم به ذکر است که اگرچه اشاره گرها باعث صرفه جویی در حافظه می شوند، اما زمان پردازشگر بسیار بیشتری را مصرف می کنند.

بنابراین، عناصر اصلی زبان C در نظر گرفته شده است.

1.10 فایل

یک فایل مجموعه ای از داده های ثبت شده در یک رسانه است. می توانید یک فایل ایجاد کنید، داده ها را روی آن بنویسید، داده ها را حذف کنید، داده ها را به روز کنید، داده ها را اضافه کنید. I/O به یک فایل با استفاده از روش های دسترسی مستقیم یا متوالی انجام می شود.

ابتدا حالت دسترسی متوالی را در نظر بگیرید.

I/O بافر است. این بدان معنی است که برنامه می نویسد و در بافر می خواند. در صورت پر بودن بافر یا بسته بودن فایل یا قبل از خروج از برنامه، داده ها بین بافر و فایل رد و بدل می شود.

printf ("فایل منبع");

printf ("فایل خروجی");

if ((in = fopen(n1، "rt"))== NULL)

printf ("فایل منبع باز نمی شود"); بازگشت 1;

if ((out = fopen(n2، "wt"))== NULL)

printf ("فایل خروجی باز نمی شود"); بازگشت 1;

در حالی که (!feof(in))

fputc(fgetc(in)، out);

رشته FILE *in, *out; یک اشاره گر به دو فایل تعریف می کند. نام فایل می تواند باشد any - در مورد ما، in فایل منبع است، out خروجی است.

AT خط بعدی char n1, n2; دو متغیر n1 و n2 را برای ذخیره نام فایل ها تعریف کنید. چهار خط بعدی به شما امکان می دهد نام فایل های ورودی و خروجی را وارد کنید و این نام ها را به متغیرهای n1 و n2 اختصاص دهید. قبل از شروع کار با یک فایل، باید باز باشد. برای انجام این کار، یک تابع fopen () وجود دارد که در آن پارامتر اول حاوی نام فایل است، و پارامتر دوم - نوع کار، به عنوان مثال "rt" - فایل را می خواند.

دستور in = fopen(n1, "rt" باعث می شود فایل ذخیره شده در متغیر n1 برای خواندن باز شود و برنامه نشانگر in را به این فایل برمی گرداند که (اشاره گر) هنگام خواندن کاراکترها از آن استفاده می کنیم. اگر فایل وجود نداشته باشد، fp NULL، fprintf (stderr، "نمی‌توان فایل خروجی را باز کرد") خواهد بود؛ 1 را برمی‌گرداند؛ و برنامه خارج می‌شود.

تابع out = fopen (n2، "wt"، فقط اکنون out یک فایل خروجی است، و حالت عملیات "wt" نوشتن در یک فایل است) به طور مشابه کار می کند.

این دستور یک فایل با نام ذخیره شده در متغیر n2 ایجاد می کند.

خواندن از روی یک فایل با فراخوانی fgetc(in) انجام می شود. یک کاراکتر از فایل مرتبط با نشانگر in را می خواند.

با دستور fputc(fgetc(in)، out); کاراکتر خوانده شده در فایل خارج می شود. برای خواندن اطلاعات از کل فایل، از ساختار while (!feof(in)) استفاده کنید

fputc(fgetc(in)، out);.

تابع feof(in) اگر در موقعیت انتهایی باشد مقدار غیر صفر و در غیر این صورت صفر را برمی‌گرداند. تا زمانی که صفر مواجه شود، داده ها از منبع فایلدر روز تعطیل بخوان و بنویس

با فراخوانی تابع fclose() فایل بسته می شود. اگر فایل همزمان برای نوشتن باز شده باشد، محتویات بافر مرتبط با این فایل نمایش داده می شود. پیوند بین اشاره گر و فایل خراب است.

به طور مشابه، تابع fgetc(string,n,fp) یک رشته را از فایل مرتبط با fp می خواند و آن را در رشته قرار می دهد. کاراکترها تا زمانی که یک کاراکتر " " دریافت شود، یا تا زمانی که فایل تمام شود، یا تا زمانی که کاراکترهای (n-1) خوانده شوند، خوانده می شوند.

حالت دسترسی مستقیمانعطاف پذیرتر، زیرا به شما امکان می دهد مستقیماً به هر ورودی در پرونده دسترسی داشته باشید. حداقل ورودی برای یک فایل دسترسی مستقیم یک بایت است. در زیر مورد یک فایل دسترسی مستقیم با رکورد برابر با بایت را در نظر خواهیم گرفت. چنین فایل هایی باینری نامیده می شوند. فایل های دسترسی مستقیم هنگام نوشتن برنامه هایی که باید با حجم زیادی از اطلاعات ذخیره شده در آنها کار کنند، ضروری هستند دستگاه های خارجی. پردازش DBMS بر اساس فایل های دسترسی مستقیم است.

اجازه دهید به طور خلاصه مفاد اصلی کار با فایل های دسترسی مستقیم را بیان کنیم.

یک). هر ورودی در فایل دسترسی مستقیم دارای یک شماره است. رکوردها از 0 تا N-1 شماره گذاری می شوند که N تعداد رکوردهای موجود در فایل است. برای فایل باینری N طول فایل بر حسب بایت است. برای باز کردن فایلیکی از رکوردها رکورد فعلی است - اشاره گر روی تنظیم شده است این ورودی. با استفاده از تابع lseek می توانید نشانگر را حرکت دهید.

2). هنگام باز کردن (یا ایجاد یک فایل) نشانگر به طور خودکار در ابتدا قرار می گیرد (ضبط 0). هنگام انجام عملیات خواندن یا نوشتن، اشاره گر به طور خودکار از آخرین رکورد خواندن (نوشتن) عبور می کند.

3). با استفاده از تابع chsize می توانید اندازه فایل را تغییر دهید (افزایش یا کوتاه کنید). هنگامی که اندازه فایل افزایش می یابد، رکوردهای پر شده با کد 0 به آن اضافه می شود.

در زیر برنامه ای وجود دارد که نحوه کار با فایل ها را نشان می دهد.

int h; /*دسته فایلی که باید ایجاد شود*/

char * s="این رشته در یک فایل قرار خواهد گرفت";

چاربوف; /*بافر برای خواندن از فایل*/

Fmode=O_BINARY; /*کار با فایل های باینری*/

if((h=creat("proba.txt",S_IREAD |S_IWRITE))==-1) /*ایجاد فایل*/

printf ("فایل باز نشد!");

write(h,s,strlen(s)); /*نوشتن رشته s در فایل*/

lseek(h,4,SEEK_SET); /*بایت چهارم از ابتدای فایل*/

بافر=0; /*انتهای خط را علامت بزنید*/

بستن (h); /*بستن فایل*/

printf("%s",buf); /*چاپ خط خواندن*/

برنامه ما کاملاً نظر داده شده است، بنابراین به اندازه کافی می دهیم توضیحات مختصر. برنامه یک فایل دسترسی مستقیم ایجاد می کند و دنباله ای از بایت ها (رشته) را در آنجا می نویسد. سپس دسترسی مستقیم به زیر رشته ای از این رشته به طور مستقیم در فایل وجود دارد. هنگام تجزیه متن برنامه، خوانندگان را به چند نکته می کشانیم:

1. پردازش خطای ایجاد فایل. در واقع، باز کردن یک فایل ممکن است با شکست مواجه شود و یک برنامه خوب باید چنین شرایطی را مدیریت کند.

2. اگر فایل با موفقیت باز شود، یک توصیفگر (یک شماره منحصر به فرد) به آن اختصاص داده می شود که توسط آن می توانید به فایل دسترسی پیدا کنید.

3. در نهایت، فراموش نکنید که یک رشته تنها زمانی تبدیل به رشته می شود که با کد تمام شود

برترین مقالات مرتبط