برای آموزش سریع زبان c برای برنامه نویسی در codevisionavr مطالب زیر را دنبال کنید یا برای دیافت فایل مربوطه بر روی آدرس زیر کلیک نمایید:
http://www.saghaei.com/downloads-cat5.html
www.saghaei.com
آشنایی با زبان C
1-4-1- ساختار برنامهنویسی
به منظور برنامهآنویسی به زبان C، آشنایی اولیه با دستورات آن الزامیآ است. برای این منظور: با معرفی مختصر ساختارها و دستورات مرتبط، مطابق زیر با یک برنامه ساده شروع میآکنیم.
#include <stdio.h>
int main() {
printf("Hello World\n"
;
return 0;
}
شرح برنامه:
#include <stdio.h>: فایلی به اسم stdio.h را ضمیمه میآکند که این فایل به ما اجازه استفاده از توابع خاصی را میآدهد. stdio کوتاه شدهآی عبارت Standard Input/Output است. این فایل شامل توابع ورودی: مانند خواندن از صفحه کلید و توابع خروجی: مانند نمایش دادن بر روی صفحه نمایش است.
int main():
int : عبارتی است که یک مقدار را بر میگرداند (return) و در ادامه بیشتر به توضیح آن میآپردازیم.
main : نام نقطهآای است که برنامه از آن نقطه شروع میآشود. پرانتزها در جلوی عبارتmain به این معنی است که این تابع آرگومان ورودی ندارد.
int main() {
دستورها
}
} { (آکلادها) برای این است که تمام نوشتهآها را در یک گروه خاص قرار دهد. در مثال بالا، آکلاد مشخص میآکند که نوشتهآها متعلق به تابع main است. شایان ذکر است که آکلادها در زبان C کاربرد زیادی دارند.
printf ("Hello World \n"
;
تابع printf : یک متن را در صفحه نمایش میآدهد. اطلاعاتی که باید این تابع نمایش دهد بین دو پرانتز قرار میآگیرد. دقت شود که: کلمهها بین دو double contention ( " ) قرار گیرند، زیرا آنآها در واقع یک رشته هستند. هر یک از حروف یک کاراکتر میآباشد و مجموعهآی آنآها یک گروه با نام رشته (string) را تشکیل میآدهند. رشتهها همیشه باید بین دو " قرار میآگیرند.
\n : به کامپایلر دستور میدهد به خط جدید برود، وقتی شما در متن خود enter بزنید به خط جدید نمیرود برای همین ما مجبور هستیم از این دستور استفاده کنیم.
باید بعد از هر دستوری یک semicolon ( ; ) قرار دهید برای این که نشان دهد آن دستور تمام شده است.
جدول (1-1): دستورات برای printf
\a Audible signal
\b Backspace
\t رفتن به یک tab جلوتر
\n رفتن به یک خط جدید
\v Vertical tab
\f پاک کردن صفحه / رفتن به صفحه جدید
\r Carriage return
return 0: مقدار آرگومان برگشتی توسط دستور return مشخص میآشود وreturn 0 به معنی آن است که تابع ما مقدار صفر را باز میآگرداند.
پس از کامپایل نمودن برنامه، اگر کدهای شما اشتباه باشند، کامپایلر به شما میآگوید که اشتباه در کدام خط رخ داده است. به منظور اجرای صحیح برنامه، اصلاح خطا شامل: خطای املایی و ساختاری الزامی است. پس از کامپایل صحیح، برنامهآی شما تبدیل به فایل اجرایی میآشود. اکنون باید عبارت "Hello World" را در صفحه ملاحظه کنید.
استفاده از توضیحات (comments) : برای تشخیص بهتر هر یک از خطوط برنامه، استفاده از comment در جلوی خطوط پیشنهاد میآشود. توضیحات را باید بعد از // یا بین /*………*/ بنویسید. توضیحات توسط کامپایلر خوانده نمیآشوند. توضیحات استفاده شده در اول برنامه عملکرد برنامه را نشان میآدهند. شما همچنین میآتوانید: بین قسمتآهای مختلف برنامه از توضیحات استفاده کنید تا آن قسمت را توضیح دهید در ذیل، مثالی از قرار دادن توضیح قرار داده شده است:
/* Author: Hamed Saghaei
Date: 2009/07/15
Description:
Writes the words "Hello World" on the screen */
#include <stdio.h>
int main()
{
printf("Hello World\n"
; //prints "Hello World"
return 0;
}
1-4-2- متغیرها
متغیرها در زبان برنامهآنویسی C، مکانی از حافظه هستند که نامی به آنآها تخصیص داده میآشود و میآتوانند مقداری را در بر داشته باشند. از متغیرها برای ذخیره کردن مقادیر در حافظه استفاده میآشود. دو نوع متغیر اصلی در زبان C وجود دارد که به ترتیب (عدد) Numeric و(حروف) Character میآباشند.
- متغیرهای عددی: این نوع متغیرها میآتوانند عدد صحیح باشند و اعداد کسری یا اعشاری نمیآتوانند در این گروه قرار بگیرند.
- متغیرهای کاراکتری: در این نوع متغیرها: حروف و اعداد میآتوانند قرار بگیرند. البته اعداد در اینجا کمی متفاوت هستند.
- عبارات عددی و رشتهآای ثابت: این نوع عبارات ثابت هستند و مقدار آنآها قابل تغییر نیست. گاهی برای جلوگیری از اشتباه از آنآها استفاده میآشود.
تعریف متغیرها: برای تعریف متغیر در برنامه ابتدا نوع آن را باید مشخص کنیم در جدول (1-2) نوع متغیرها و محدودهآی آنآها مشخص شده است. البته متغیرها را به هر نحوی که مایل باشید میآتوانید نام گذاری کنید. ولی بهتر است کمتر از 32 حرف داشته باشند و در ابتدای برنامه تعریف شوند.
جدول (1-2): انواع داده
محدوده نوع نام
از 0 و 1 یک بیت bit
از 128- تا 127 هشت بیت char
از 0 تا 255 هشت بیت بدون علامت unsigned char
از 32767- تا 32768 اعداد صحیح 16 بیتی int
از 0 تا 65535 اعداد صحیح بدون علامت 16 بیتی unsigned int
از 217483648- تا 217483647 اعداد صحیح 32 بیتی long int
از 0 تا 429467295 اعداد صحیح بدون علامت 32 بیتی unsigned long int
از مقادیر مثبت و منفی 38e-1.175 تا مقادیر مثبت و منفی 38e3.402 اعداد اعشاری float
از مقادیر مثبت و منفی 308e-2.2 تا مقادیر مثبت و منفی 308e1.8 اعداد اعشاری double
int main()
{
int a;
char b;
return 0;
}
در عبارت بالا، متغیر a از نوع int و متغیر b از نوع char تعریف شدهاند. و مطابق زیر برنامه ذیل میآتوان در یک مکان، چندین متغیر را تعریف کرد.
int main()
{
int a, b, c;
return 0;
}
با توجه به اینآکه تابع main، تابع اصلی برنامه است. بنابراین بازگشت مقادیر توسط این تابع صحیح نمیآباشد. در ادامه به جای تعریف آن به روش مثالآهای قبل، به صورت زیر تعریف آمیآشود. همچنین برای تعریف متغیرهای Constant (ثابت) تنها لازم است: عبارت const را قبل از نوع متغیر قرار داد.
void main()
{
const float pi = 3.1415;
آ}
- متغیرهای علامتآدار و بدون علامت:
متغیرهای علامتآدار (signed) میتوانند دارای مقادیر مثبت یا منفی باشند ولی متغیرهای بدون علامت (unsigned)، تنها میآتوانند مقادیر مثبت و صفر را اختیار کنند. این عبارات، قبل از نوع متغیر تعریف میآشوند و نبود آن دلیل بر علامتآدار بودن (Signed) متغیر است.
void main()
{
unsigned int a;
signed int b;
}
- استفاده از متغیر در محاسبات:
برای دادن مقداری به متغیر از علامت تساوی (=) استفاده میآشود.
void main()
{
int a=4; // a=4
char b; // b=0
a = 3; // a=3
b = 'H'; // b='H'
}
به منظور انجام محاسبات از عملگرهای محاسباتی زیر استفاده میآشود.
جدول (1-3): عملگرهای محاسباتی
عملیات عمگر
جمع +
تفریق -
ضرب *
تقسیم /
باقیمانده %
برای انجام عملیات به متغیری نیاز داریم که حاصل عملیات در آن ذخیره شود.
void main()
{
int a, b;
a = 5;
b = a + 3; // b=8
a = a % 3; // a=2
}
در زبان برنامهآنویسی C، میآتوان متغیری از keyboard را با استفاده از دستور scanf گرفت و توسط printf آن را چاپ کرد.
#include <stdio.h>
void main()
{
int a;
scanf("%d", &a);
a = a * 2;
printf("The answer is %d", a);
}
%d برای خواندن و چاپ کردن متغیرها از نوع int استفاده میآشود و سایر متغیرها مطابق جدول زیر هستند.
جدول (1-4): خواندن و چاپ متغیرها
int %d or %i
char %c
float %f
double %lf
string %s
1-4-3- دستور If
در بیشتر مواقع لازم است که مقدار متغیری در برنامه کنترل شود. برای این منظور استفاده از حلقه If به حل مساله کمک میآکند.
- ساختار کلی دستور If
if (شرط)
{
دستورات;
}
else if (شرط)
{
دستورات;
}
else
{
دستورات;
}
#include <stdio.h>
void main()
{
int mark;
char pass;
scanf("%d", &mark);
if (mark > 40)
pass = 'y';
}
در برنامه بالا ابتدا متغیری از ورودی گرفته میآشود و سا¾ا¾پس شرط mark > 40 امتحان میآشود. اگر پاسخ مثبت بود، حرف Y در متغیر pass قرار داده میآشود.
#include <stdio.h>
void main()
{
int mark;
char pass;
scanf("%d", &mark);
if (mark > 40)
pass = 'y';
else
pass = 'n';
}
در برنامه بالا ابتدا متغیری از ورودی گرفته میآشود و سا¾ا¾پس شرط mark > 40 امتحان میآشود. اگر پاسخ مثبت بود، حرف Y در متغیر pass قرار میآگیرد، در غیر این صورت حرف n در pass قرار داده میآشود.
در صورتی که در برنامه، اجرای چند دستور پس از امتحان شرط نیاز داشت، میآباید مطابق زیر برنامه ذیل، دستورات را درون { } قرار دهیم.
#include <stdio.h>
void main()
{
int mark;
char pass;
scanf("%d", &mark);
if (mark > 40)
{
pass = 'y';
printf("You passed"
;
}
else
{
pass = 'n';
printf("You failed"
;
}
}
همچنین میتوان در هر دستور if چند شرط را امتحان نمود:
#include<stdio.h>
void main()
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
if (a > 0 && b > 0)
printf("Both numbers are positive\n"
;
if (a = 0 || b = 0)
{
printf("At least one of the numbers = 0\n"
;
a++;
}
if (!(a > 0) && !(b > 0))
printf("Both numbers are negative\n"
;
}
- عملگرهای منطقی:
جدول (1-5): عملگرهای منطقی
== مساوی
!= نامساوی
> بزرگتر از
>= بزرگتر یا مساوی
< کوچکتر از
<= کوچکتر یا مساوی
&& و
|| یا
! نقیض
و: هر دو شرط درست باشند حاصل درست.
یا: یکی یا هر دو شرط درست باشند حاصل درست است.
1-4-4- ساختار دستور switch
switch(variable)
{
case var 1:
دستور;
break;
case var 2:
دستور;
break;
.
.
.
default:
دستور;
}
#include <stdio.h>
void main()
{
char fruit;
printf("Which one is your favourite fruit:\n"
;
printf("a) Apples\n"
;
printf("b) Bananas\n"
;
printf("c) Cherries\n"
;
scanf("%c", &fruit);
switch (fruit) {
case 'a':
printf("You like apples\n"
;
break;
case 'b':
printf("You like bananas\n"
;
break;
case 'c':
printf("You like cherries\n"
;
break;
default:
printf("You entered an invalid choice\n"
;
}
}
در برنامه بالا، fruit متغیر برنامه است که آن را با استفاده از case کنترل میآکنیم اگر برابر a بود، متن You like apples در خروجی چاپ میآشود سپس از دستور beak استفاده شده است که باعث خروج از حلقه میآشود در نهایت اگر با هیچیک از متغیرها برابر نبود با استفاده از default متن choice You entered an invalid چاپ میآشود.
1-4-5- دستورات حلقه
در برخی مواقع لازم است دستوری به صورت متوالی اجرا شود. برای این کار از دستورات حلقه استفاده میآشود که به سه دسته تقسیم میآشوند:
for, do while, while:
- ساختار for
for (اضافه شدن متغیر ;شرط ;عدد شروع)
ا¾{
دستورات ;
}
for اجازه میآدهد از عددی تا عدد دیگر تکرار داشته باشیم. در برنامه زیر اعدد 1 تا 24 در خروجی چاپ میشوند.
void main()
{
int i;
for (i = 1; i == 24; i++)
printf("H\n"
;
return 0;
}
در مثال بالا از i++ استفاده کردیم که برابر است با i=i+1 یعنی در هر بار اجرا، یک واحد به i اضافه میآشود یا میآتوان از i-- استفاده کرد که هر بار اجرا، یک واحد از i کم میآشود.
- ساختار while
while(condition)
{
دستورات ;
}
تفاوت این حلقه با قبلی در این است که ما نمیآدانیم قرار است چند بار حلقه اجرا شود در مثال زیر تعداد اجرا شدن حلقه از ورودی گرفته میآشود در times ذخیره و در هر بار اجرا شدن حلقه یک واحد به i افزوده میآشود تا زمانی که به تعداد times برسد از حلقه خارج شده و برنامه تمام میشود.
include <stdio.h>
void main()
{
int i, times;
scanf("%d", &times);
i = 0;
while (i <= times)
{
i++;
printf("%d\n", i);
}
}
- ساختارdo while
ساختارdo while مانند while است با این تفاوت که شرط آن در آخر امتحان میآشود.
do {
دستورات ;
}
while(Condition)
#include <stdio.h>
void main()
{
int i, times;
scanf("%d", &times);
i = 0;
do
{
i++;
printf("%d\n", i);
}
while (i <= times);
}
:Break and continue
Continue برای شروع Loop از ابتدا و برای خاتمه دادن از Break استفاده میشود. در مثال زیر هرگز Hello چاپ نمیشود.
#include <stdio.h>
int main()
{
int i;
while (i < 10)
{
i++;
continue;
printf("Hello\n"
;
}
}
1-4-6- اشارهآگرها
اشارهآگر آ متغیرهایی هستند که درون خود آدرسی از حافظه را نگهداری میآکنند و به متغیر درون آن آدرس، اشاره میآکنند به این دلیل به آنآها اشارهآگر میگویند. شما میآتوانید از اشارهآگرها برای کارهای خاصی استفاده کنید. مثلاً برای گرفتن مقدار آدرسی که به آن اشاره میآکند. اشارهآگرها میآتوانند مشخص یا نامشخص باشند. اشارهآگرهای مشخص به یک متغیر مشخص مثلاً int اشاره میآکنند، و اشارهآگرهای نامشخص میآتوانند به انواع اطلاعات اشاره کنند. برای اینآکه شما عبارت یا کاراکتری را به عنوان اشارهآگر مشخص کنید باید یک * قبل از اسم آن بگذارید، در اینجا مثالی از اشارهآگر آورده شده است.
void main()
{
int *p;
void *up;
}
شما میتوانید آدرس یک int را درون یک اشارهآگر قرار دهید و اشارهآگر با استفاده از علامت & آدرس int را میآگیرد.
void main()
{
int i;
int *p;
i = 5;
p = &i;
return 0;
}
شما میتوانید به مقدار int که اشارهآگر به آن اشاره کرده دسترسی داشته باشید.
* باعث میشود که اشارهآگر دوباره بازگشت داده شود، یعنی در واقع همان متغیر میآشود و تغییر در آن به منزلهآی تغییر در متغیر است.
void main()
{
int i, j;
int *p;
i = 5;
p = &i;
j = *p; //j = i
*p = 7; //i = 7
return 0;}
استفاده از اشارهآگر برای بیان i=j در بالا راهی طولانی است. شما در ادامه با کاربردهای بیشتر اشارهآگرها آشنا خواهید شد ولی در این قسمت، هدف آشنایی مقدماتی با این مبحث است.
1-4-7- آرایهآها
اگر شما میآخواستید 5 متغیر داشته باشید، مانند زیر عمل میآکردید:
int i1, i2, i3, i4, i5;
حال اگر 1000 متغیر بود چه میآکردید؟ مسلماً فرایند بالا زمان زیادی میآبرد، ولی با استفاده از آرایه میآتوانید: با نام یک متغیر، هر تعداد که بخواهید متغیر بسازید. آرایه مانند متغیر معمولی است و برای تعریف آن کافی است فقط بعد از نام آن یک جفت براکت بیاورید و درون آن تعداد متغیر مورد نظر را بنویسید. مثال:
int a[5]
برای اینآکه به مقدار متغیرهای هر خانه دست یابید شما باید نام آرایه و سپس شمارهآی خانهآی مورد نظر را بیاورید. فقط به یاد داشته باشید که شمارهآی خانهآهای آرایه از صفر شروع میآشود. برای مثال یک آرایه به طول 5 دارای خانهآهایی از شمارهآی 0 تا 4 است.
int a[5];
a[0] = 12; a[1] = 23;
a[2] = 34; a[3] = 45;
a[4] = 56;
printf("%d",a[0]);
- استفاده از آرایه با حلقه
استفاده از آرایه در حلقه کاربرد زیادی دارد. زیرا خانهآهای آرایه یک دنباله را طی میآکنند که این فرایند مشابه حلقهآها است. برای مثال: وقتی خانهآهای آرایه صفر نشدهآاند و شما نیاز دارید که مقدار آن ها را صفر کنید باید مانند زیر از حلقه استفاده کنید:
int a[10];
for (i = 0;i < 10;i++) a[i] = 0;
- آرایههای چند بعدی
آرایههایی که ما قبلاً استفاده کردیم آرایههای یک بعدی نام دارند زیرا تنها از یک سطر تشکیل شدهآاند. آرایهآهای 2 بعدی از چند سطر و ستون تشکیل شدهآاند، در برای تسلط بیشتر بر موضوع شکل (1-13) را ملاحظه نمائید.
آرایهآهای یک بعدی
شماره سطر مقدار
0 4
1 3
2 1-
آرایه دو بعدی
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
شکل (1-13): آرایهآهای چند بعدی
شما میآتوانید از آرایهآهای سه بعدی یا بیشتر نیز استفاده کنید ولی اغلب کاربردی ندارند. در ادامه برنامهآای آورده شده که شما را با روش تعریف یک آرایهآی دو بعدی و چگونه کار کردن آن آشنا میآکند. توجه داشته باشید که مثال دارای 2 حلقه است زیرا میآخواهیم مقدار متغیرهای درون سطر و ستون های مختلف را تغییر دهیم.
int a[3][3], i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
a[i][j] = 0;
1-4-8- رشته
رشته آرایهای از کاراکترهاست که به یک 0 یا یک کاراکتر خالی (null) ختم شود تا نشان دهد که رشته کجا تمام شده است. توجه کنید که کاراکتر null جزو رشته به حساب نمیآآید. برای استفاده از رشته دو راه وجود دارد:
1- استفاده از آرایهآای از کاراکترها
2- استفاده از اشارهآگر رشته
آرایهآ کاراکتری مانند آرایه زیر تعریف می شود:
char ca[10];
شما باید مقدار هر خانهآی آرایه را به کاراکتر مورد نظر خود اختصاص، و کاراکتر پایانی خود را 0 قرار دهید. به یاد داشته باشید که برای اشاره کردن به یک رشته باید از s% استفاده کنید.
char ca[10];
ca[0] = 'H'; ca[1] = 'e';
ca[2] = 'l'; ca[3] = 'l';
ca[4] = 'o'; ca[5] = 0;
printf("%s", ca);
وقتی که شما یک مقدار خاص را به یک اشارهآگر رشته نسبت میآدهید کامپایلر یک صفر در انتهای آن قرار میآدهد و دیگر نیازی نیست تا مانند آرایه کاراکتری، 0 را در انتهای آن قرار دهید.
char ca[10], *sp;
scanf("%s", ca);
sp = ca;
scanf("%s", sp);
شما میآتوانید یک رشته را در یک آرایه کاراکتری با استفاده از scanf بخوانید ولی برای خواندن یک اشارهآگر رشته، کامپایلر باید آن را به یک آرایه کاراکتری برگرداند.
فایل سرآمد string.h دارای توابع پرکاربردی برای کار با رشتهآهاست. در اینجا به شرح تعدادی از آنآها میآپردازیم:
strcpy ( مقصد منبع ،)
شما نمیتوانید در زبان Cا¾ از چنین دستوری استفاده کنید: string1 = string2. بلکه شما باید از تابع strcpy برای کپی کردن یک رشته درون یک رشتهآی دیگر استفاده کنید. تابع strcpy رشتهآی منبع را در رشتهآی مقصد کپی میآکند.
s1 = "abc";
s2 = "xyz";
strcpy(s1, s2); // s1 = "xyz"
: strcat (مقصد منبع،)
رشتهآی منبع و مقصد را با هم ترکیب نموده و در رشتهآی مقصد قرار میآدهد.
s1 = "abc";
s2 = "xyz";
strcat(s1, s2); // s1 = "abcxyz"
: strcmp(اول دوم،)
این تابع رشتهی اول را با رشتهی دوم مقایسه میآکند، اگر رشتهی اول بزرگتر از رشتهی دوم بود، تابع عددی مثبت را برگشت میدهد، اگر هر دو رشته مساوی بودند تابع مقدار عددی صفر را برگشت میآدهد و اگر رشته اول کوچکتر از رشتهآی دوم بود تابع عددی منفی را برگشت میآدهد.
s1 = "abc";
s2 = "abc";
i = strcmp(s1, s2); // i = 0
strlen(رشته)
این تابع تعداد کاراکترهای رشته را بازگشت میدهد.
s = "abcde";
i = strlen(s); // i = 5
1-4-9- توابع
توابع در واقع، زیر برنامه میآباشند. شما قبلا از توابع استفاده کردید، منظور همان تابع main است. شما قبل از اینآکه یک تابع را فراخوانی کنید باید آن را در ابتدای برنامه و قبل از main تعریف کنید. در مورد هر تابع میآباید نوع return مشخص شود (یعنی نوع آرگومان برگشتی تابع مشخص شود مثلا از نوع int است یا از نوع char یا نظایر آن). در صورتی که نمیآخواهید مقدار خاصی را return کنید از void استفاده کنید. بعد اسم منحصر به فرد تابع را بنویسید و پس از آن یک جفت پرانتز قرار دهید. در صورتی که تابع شما آرگومان ورودی دارد با مشخص کردن نوع و تعداد آرگومآنآها، آنآها را درون پرانتز جلوی اسم تابع قرار دهید و در صورتی که تابع شما آرگومان ورودی ندارد درون پرانتز عبارت void را نوشته یا آن را خالی باقی بگذارید. در آخر نیز دو عدد { } بگذارید و برنامه ی خود درون آن بنویسید. تابع تعریف شده در مثال زیر را بررسی نمائید:
#include <stdio.h>
void Hello()
{
printf("Hello\n"
;
}
void main()
{
Hello();
}
پارامتر های تابع، مقادیری هستند که ما به یک تابع میآدهیم تا بتواند آنآها را محاسبه کند. شما باید در داخل پرانتزهای پارامتر، متغیرها را بیاورید تا مقدار پارامتر را که قابل قبول است در تابع قرار دهد. دراینجا ما Function Add که دو پارامتر را با هم جمع می کند آورده شده است:
#include<stdio.h>
int Add(int a, int b)
{
return a+ b;
}
void main()
{
int answer;
answer = Add(5, 7);
}
شما میتوانید آدرس متغیر را در یک تابع قرار دهید، در اینجا کپی صورت نمیآگیرد و شما نیاز به اشارهآگر دارید.
#include<stdio.h>
int Add(int *a, int *b)
{
return *a + *b;
}
int main()
{
int answer;
int num1 = 5;
int num2 = 7;
answer = Add(&num1, &num2);
printf("%d\n", answer);
return 0;
}
1-4-10- متغیرهای سراسری و محلی
متغیرهای محلی فقط در داخل یک تابع قابل استفاده هستند و بیرون از آن نمیآشود از این نوع متغیرها استفاده کرد. اگر شما نیاز دارید که بتوانید از یک متغیر در تمامی قسمتآهای برنامه استفاده کنید، باید آن را سراسری تعریف کنید.
#include<stdio.h>
int a; // Global variables
int b; // Global variables
int Add()
{
return a + b;
}
int main() {
int answer; // Local variable
a = 5;
b = 7;
answer = Add();
printf("%d\n", answer);
return 0;
}
http://www.saghaei.com/downloads-cat5.html
www.saghaei.com
آشنایی با زبان C
1-4-1- ساختار برنامهنویسی
به منظور برنامهآنویسی به زبان C، آشنایی اولیه با دستورات آن الزامیآ است. برای این منظور: با معرفی مختصر ساختارها و دستورات مرتبط، مطابق زیر با یک برنامه ساده شروع میآکنیم.
#include <stdio.h>
int main() {
printf("Hello World\n"

return 0;
}
شرح برنامه:
#include <stdio.h>: فایلی به اسم stdio.h را ضمیمه میآکند که این فایل به ما اجازه استفاده از توابع خاصی را میآدهد. stdio کوتاه شدهآی عبارت Standard Input/Output است. این فایل شامل توابع ورودی: مانند خواندن از صفحه کلید و توابع خروجی: مانند نمایش دادن بر روی صفحه نمایش است.
int main():
int : عبارتی است که یک مقدار را بر میگرداند (return) و در ادامه بیشتر به توضیح آن میآپردازیم.
main : نام نقطهآای است که برنامه از آن نقطه شروع میآشود. پرانتزها در جلوی عبارتmain به این معنی است که این تابع آرگومان ورودی ندارد.
int main() {
دستورها
}
} { (آکلادها) برای این است که تمام نوشتهآها را در یک گروه خاص قرار دهد. در مثال بالا، آکلاد مشخص میآکند که نوشتهآها متعلق به تابع main است. شایان ذکر است که آکلادها در زبان C کاربرد زیادی دارند.
printf ("Hello World \n"

تابع printf : یک متن را در صفحه نمایش میآدهد. اطلاعاتی که باید این تابع نمایش دهد بین دو پرانتز قرار میآگیرد. دقت شود که: کلمهها بین دو double contention ( " ) قرار گیرند، زیرا آنآها در واقع یک رشته هستند. هر یک از حروف یک کاراکتر میآباشد و مجموعهآی آنآها یک گروه با نام رشته (string) را تشکیل میآدهند. رشتهها همیشه باید بین دو " قرار میآگیرند.
\n : به کامپایلر دستور میدهد به خط جدید برود، وقتی شما در متن خود enter بزنید به خط جدید نمیرود برای همین ما مجبور هستیم از این دستور استفاده کنیم.
باید بعد از هر دستوری یک semicolon ( ; ) قرار دهید برای این که نشان دهد آن دستور تمام شده است.
جدول (1-1): دستورات برای printf
\a Audible signal
\b Backspace
\t رفتن به یک tab جلوتر
\n رفتن به یک خط جدید
\v Vertical tab
\f پاک کردن صفحه / رفتن به صفحه جدید
\r Carriage return
return 0: مقدار آرگومان برگشتی توسط دستور return مشخص میآشود وreturn 0 به معنی آن است که تابع ما مقدار صفر را باز میآگرداند.
پس از کامپایل نمودن برنامه، اگر کدهای شما اشتباه باشند، کامپایلر به شما میآگوید که اشتباه در کدام خط رخ داده است. به منظور اجرای صحیح برنامه، اصلاح خطا شامل: خطای املایی و ساختاری الزامی است. پس از کامپایل صحیح، برنامهآی شما تبدیل به فایل اجرایی میآشود. اکنون باید عبارت "Hello World" را در صفحه ملاحظه کنید.
استفاده از توضیحات (comments) : برای تشخیص بهتر هر یک از خطوط برنامه، استفاده از comment در جلوی خطوط پیشنهاد میآشود. توضیحات را باید بعد از // یا بین /*………*/ بنویسید. توضیحات توسط کامپایلر خوانده نمیآشوند. توضیحات استفاده شده در اول برنامه عملکرد برنامه را نشان میآدهند. شما همچنین میآتوانید: بین قسمتآهای مختلف برنامه از توضیحات استفاده کنید تا آن قسمت را توضیح دهید در ذیل، مثالی از قرار دادن توضیح قرار داده شده است:
/* Author: Hamed Saghaei
Date: 2009/07/15
Description:
Writes the words "Hello World" on the screen */
#include <stdio.h>
int main()
{
printf("Hello World\n"

return 0;
}
1-4-2- متغیرها
متغیرها در زبان برنامهآنویسی C، مکانی از حافظه هستند که نامی به آنآها تخصیص داده میآشود و میآتوانند مقداری را در بر داشته باشند. از متغیرها برای ذخیره کردن مقادیر در حافظه استفاده میآشود. دو نوع متغیر اصلی در زبان C وجود دارد که به ترتیب (عدد) Numeric و(حروف) Character میآباشند.
- متغیرهای عددی: این نوع متغیرها میآتوانند عدد صحیح باشند و اعداد کسری یا اعشاری نمیآتوانند در این گروه قرار بگیرند.
- متغیرهای کاراکتری: در این نوع متغیرها: حروف و اعداد میآتوانند قرار بگیرند. البته اعداد در اینجا کمی متفاوت هستند.
- عبارات عددی و رشتهآای ثابت: این نوع عبارات ثابت هستند و مقدار آنآها قابل تغییر نیست. گاهی برای جلوگیری از اشتباه از آنآها استفاده میآشود.
تعریف متغیرها: برای تعریف متغیر در برنامه ابتدا نوع آن را باید مشخص کنیم در جدول (1-2) نوع متغیرها و محدودهآی آنآها مشخص شده است. البته متغیرها را به هر نحوی که مایل باشید میآتوانید نام گذاری کنید. ولی بهتر است کمتر از 32 حرف داشته باشند و در ابتدای برنامه تعریف شوند.
جدول (1-2): انواع داده
محدوده نوع نام
از 0 و 1 یک بیت bit
از 128- تا 127 هشت بیت char
از 0 تا 255 هشت بیت بدون علامت unsigned char
از 32767- تا 32768 اعداد صحیح 16 بیتی int
از 0 تا 65535 اعداد صحیح بدون علامت 16 بیتی unsigned int
از 217483648- تا 217483647 اعداد صحیح 32 بیتی long int
از 0 تا 429467295 اعداد صحیح بدون علامت 32 بیتی unsigned long int
از مقادیر مثبت و منفی 38e-1.175 تا مقادیر مثبت و منفی 38e3.402 اعداد اعشاری float
از مقادیر مثبت و منفی 308e-2.2 تا مقادیر مثبت و منفی 308e1.8 اعداد اعشاری double
int main()
{
int a;
char b;
return 0;
}
در عبارت بالا، متغیر a از نوع int و متغیر b از نوع char تعریف شدهاند. و مطابق زیر برنامه ذیل میآتوان در یک مکان، چندین متغیر را تعریف کرد.
int main()
{
int a, b, c;
return 0;
}
با توجه به اینآکه تابع main، تابع اصلی برنامه است. بنابراین بازگشت مقادیر توسط این تابع صحیح نمیآباشد. در ادامه به جای تعریف آن به روش مثالآهای قبل، به صورت زیر تعریف آمیآشود. همچنین برای تعریف متغیرهای Constant (ثابت) تنها لازم است: عبارت const را قبل از نوع متغیر قرار داد.
void main()
{
const float pi = 3.1415;
آ}
- متغیرهای علامتآدار و بدون علامت:
متغیرهای علامتآدار (signed) میتوانند دارای مقادیر مثبت یا منفی باشند ولی متغیرهای بدون علامت (unsigned)، تنها میآتوانند مقادیر مثبت و صفر را اختیار کنند. این عبارات، قبل از نوع متغیر تعریف میآشوند و نبود آن دلیل بر علامتآدار بودن (Signed) متغیر است.
void main()
{
unsigned int a;
signed int b;
}
- استفاده از متغیر در محاسبات:
برای دادن مقداری به متغیر از علامت تساوی (=) استفاده میآشود.
void main()
{
int a=4; // a=4
char b; // b=0
a = 3; // a=3
b = 'H'; // b='H'
}
به منظور انجام محاسبات از عملگرهای محاسباتی زیر استفاده میآشود.
جدول (1-3): عملگرهای محاسباتی
عملیات عمگر
جمع +
تفریق -
ضرب *
تقسیم /
باقیمانده %
برای انجام عملیات به متغیری نیاز داریم که حاصل عملیات در آن ذخیره شود.
void main()
{
int a, b;
a = 5;
b = a + 3; // b=8
a = a % 3; // a=2
}
در زبان برنامهآنویسی C، میآتوان متغیری از keyboard را با استفاده از دستور scanf گرفت و توسط printf آن را چاپ کرد.
#include <stdio.h>
void main()
{
int a;
scanf("%d", &a);
a = a * 2;
printf("The answer is %d", a);
}
%d برای خواندن و چاپ کردن متغیرها از نوع int استفاده میآشود و سایر متغیرها مطابق جدول زیر هستند.
جدول (1-4): خواندن و چاپ متغیرها
int %d or %i
char %c
float %f
double %lf
string %s
1-4-3- دستور If
در بیشتر مواقع لازم است که مقدار متغیری در برنامه کنترل شود. برای این منظور استفاده از حلقه If به حل مساله کمک میآکند.
- ساختار کلی دستور If
if (شرط)
{
دستورات;
}
else if (شرط)
{
دستورات;
}
else
{
دستورات;
}
#include <stdio.h>
void main()
{
int mark;
char pass;
scanf("%d", &mark);
if (mark > 40)
pass = 'y';
}
در برنامه بالا ابتدا متغیری از ورودی گرفته میآشود و سا¾ا¾پس شرط mark > 40 امتحان میآشود. اگر پاسخ مثبت بود، حرف Y در متغیر pass قرار داده میآشود.
#include <stdio.h>
void main()
{
int mark;
char pass;
scanf("%d", &mark);
if (mark > 40)
pass = 'y';
else
pass = 'n';
}
در برنامه بالا ابتدا متغیری از ورودی گرفته میآشود و سا¾ا¾پس شرط mark > 40 امتحان میآشود. اگر پاسخ مثبت بود، حرف Y در متغیر pass قرار میآگیرد، در غیر این صورت حرف n در pass قرار داده میآشود.
در صورتی که در برنامه، اجرای چند دستور پس از امتحان شرط نیاز داشت، میآباید مطابق زیر برنامه ذیل، دستورات را درون { } قرار دهیم.
#include <stdio.h>
void main()
{
int mark;
char pass;
scanf("%d", &mark);
if (mark > 40)
{
pass = 'y';
printf("You passed"

}
else
{
pass = 'n';
printf("You failed"

}
}
همچنین میتوان در هر دستور if چند شرط را امتحان نمود:
#include<stdio.h>
void main()
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
if (a > 0 && b > 0)
printf("Both numbers are positive\n"

if (a = 0 || b = 0)
{
printf("At least one of the numbers = 0\n"

a++;
}
if (!(a > 0) && !(b > 0))
printf("Both numbers are negative\n"

}
- عملگرهای منطقی:
جدول (1-5): عملگرهای منطقی
== مساوی
!= نامساوی
> بزرگتر از
>= بزرگتر یا مساوی
< کوچکتر از
<= کوچکتر یا مساوی
&& و
|| یا
! نقیض
و: هر دو شرط درست باشند حاصل درست.
یا: یکی یا هر دو شرط درست باشند حاصل درست است.
1-4-4- ساختار دستور switch
switch(variable)
{
case var 1:
دستور;
break;
case var 2:
دستور;
break;
.
.
.
default:
دستور;
}
#include <stdio.h>
void main()
{
char fruit;
printf("Which one is your favourite fruit:\n"

printf("a) Apples\n"

printf("b) Bananas\n"

printf("c) Cherries\n"

scanf("%c", &fruit);
switch (fruit) {
case 'a':
printf("You like apples\n"

break;
case 'b':
printf("You like bananas\n"

break;
case 'c':
printf("You like cherries\n"

break;
default:
printf("You entered an invalid choice\n"

}
}
در برنامه بالا، fruit متغیر برنامه است که آن را با استفاده از case کنترل میآکنیم اگر برابر a بود، متن You like apples در خروجی چاپ میآشود سپس از دستور beak استفاده شده است که باعث خروج از حلقه میآشود در نهایت اگر با هیچیک از متغیرها برابر نبود با استفاده از default متن choice You entered an invalid چاپ میآشود.
1-4-5- دستورات حلقه
در برخی مواقع لازم است دستوری به صورت متوالی اجرا شود. برای این کار از دستورات حلقه استفاده میآشود که به سه دسته تقسیم میآشوند:
for, do while, while:
- ساختار for
for (اضافه شدن متغیر ;شرط ;عدد شروع)
ا¾{
دستورات ;
}
for اجازه میآدهد از عددی تا عدد دیگر تکرار داشته باشیم. در برنامه زیر اعدد 1 تا 24 در خروجی چاپ میشوند.
void main()
{
int i;
for (i = 1; i == 24; i++)
printf("H\n"

return 0;
}
در مثال بالا از i++ استفاده کردیم که برابر است با i=i+1 یعنی در هر بار اجرا، یک واحد به i اضافه میآشود یا میآتوان از i-- استفاده کرد که هر بار اجرا، یک واحد از i کم میآشود.
- ساختار while
while(condition)
{
دستورات ;
}
تفاوت این حلقه با قبلی در این است که ما نمیآدانیم قرار است چند بار حلقه اجرا شود در مثال زیر تعداد اجرا شدن حلقه از ورودی گرفته میآشود در times ذخیره و در هر بار اجرا شدن حلقه یک واحد به i افزوده میآشود تا زمانی که به تعداد times برسد از حلقه خارج شده و برنامه تمام میشود.
include <stdio.h>
void main()
{
int i, times;
scanf("%d", &times);
i = 0;
while (i <= times)
{
i++;
printf("%d\n", i);
}
}
- ساختارdo while
ساختارdo while مانند while است با این تفاوت که شرط آن در آخر امتحان میآشود.
do {
دستورات ;
}
while(Condition)
#include <stdio.h>
void main()
{
int i, times;
scanf("%d", &times);
i = 0;
do
{
i++;
printf("%d\n", i);
}
while (i <= times);
}
:Break and continue
Continue برای شروع Loop از ابتدا و برای خاتمه دادن از Break استفاده میشود. در مثال زیر هرگز Hello چاپ نمیشود.
#include <stdio.h>
int main()
{
int i;
while (i < 10)
{
i++;
continue;
printf("Hello\n"

}
}
1-4-6- اشارهآگرها
اشارهآگر آ متغیرهایی هستند که درون خود آدرسی از حافظه را نگهداری میآکنند و به متغیر درون آن آدرس، اشاره میآکنند به این دلیل به آنآها اشارهآگر میگویند. شما میآتوانید از اشارهآگرها برای کارهای خاصی استفاده کنید. مثلاً برای گرفتن مقدار آدرسی که به آن اشاره میآکند. اشارهآگرها میآتوانند مشخص یا نامشخص باشند. اشارهآگرهای مشخص به یک متغیر مشخص مثلاً int اشاره میآکنند، و اشارهآگرهای نامشخص میآتوانند به انواع اطلاعات اشاره کنند. برای اینآکه شما عبارت یا کاراکتری را به عنوان اشارهآگر مشخص کنید باید یک * قبل از اسم آن بگذارید، در اینجا مثالی از اشارهآگر آورده شده است.
void main()
{
int *p;
void *up;
}
شما میتوانید آدرس یک int را درون یک اشارهآگر قرار دهید و اشارهآگر با استفاده از علامت & آدرس int را میآگیرد.
void main()
{
int i;
int *p;
i = 5;
p = &i;
return 0;
}
شما میتوانید به مقدار int که اشارهآگر به آن اشاره کرده دسترسی داشته باشید.
* باعث میشود که اشارهآگر دوباره بازگشت داده شود، یعنی در واقع همان متغیر میآشود و تغییر در آن به منزلهآی تغییر در متغیر است.
void main()
{
int i, j;
int *p;
i = 5;
p = &i;
j = *p; //j = i
*p = 7; //i = 7
return 0;}
استفاده از اشارهآگر برای بیان i=j در بالا راهی طولانی است. شما در ادامه با کاربردهای بیشتر اشارهآگرها آشنا خواهید شد ولی در این قسمت، هدف آشنایی مقدماتی با این مبحث است.
1-4-7- آرایهآها
اگر شما میآخواستید 5 متغیر داشته باشید، مانند زیر عمل میآکردید:
int i1, i2, i3, i4, i5;
حال اگر 1000 متغیر بود چه میآکردید؟ مسلماً فرایند بالا زمان زیادی میآبرد، ولی با استفاده از آرایه میآتوانید: با نام یک متغیر، هر تعداد که بخواهید متغیر بسازید. آرایه مانند متغیر معمولی است و برای تعریف آن کافی است فقط بعد از نام آن یک جفت براکت بیاورید و درون آن تعداد متغیر مورد نظر را بنویسید. مثال:
int a[5]
برای اینآکه به مقدار متغیرهای هر خانه دست یابید شما باید نام آرایه و سپس شمارهآی خانهآی مورد نظر را بیاورید. فقط به یاد داشته باشید که شمارهآی خانهآهای آرایه از صفر شروع میآشود. برای مثال یک آرایه به طول 5 دارای خانهآهایی از شمارهآی 0 تا 4 است.
int a[5];
a[0] = 12; a[1] = 23;
a[2] = 34; a[3] = 45;
a[4] = 56;
printf("%d",a[0]);
- استفاده از آرایه با حلقه
استفاده از آرایه در حلقه کاربرد زیادی دارد. زیرا خانهآهای آرایه یک دنباله را طی میآکنند که این فرایند مشابه حلقهآها است. برای مثال: وقتی خانهآهای آرایه صفر نشدهآاند و شما نیاز دارید که مقدار آن ها را صفر کنید باید مانند زیر از حلقه استفاده کنید:
int a[10];
for (i = 0;i < 10;i++) a[i] = 0;
- آرایههای چند بعدی
آرایههایی که ما قبلاً استفاده کردیم آرایههای یک بعدی نام دارند زیرا تنها از یک سطر تشکیل شدهآاند. آرایهآهای 2 بعدی از چند سطر و ستون تشکیل شدهآاند، در برای تسلط بیشتر بر موضوع شکل (1-13) را ملاحظه نمائید.
آرایهآهای یک بعدی
شماره سطر مقدار
0 4
1 3
2 1-
آرایه دو بعدی
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
شکل (1-13): آرایهآهای چند بعدی
شما میآتوانید از آرایهآهای سه بعدی یا بیشتر نیز استفاده کنید ولی اغلب کاربردی ندارند. در ادامه برنامهآای آورده شده که شما را با روش تعریف یک آرایهآی دو بعدی و چگونه کار کردن آن آشنا میآکند. توجه داشته باشید که مثال دارای 2 حلقه است زیرا میآخواهیم مقدار متغیرهای درون سطر و ستون های مختلف را تغییر دهیم.
int a[3][3], i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
a[i][j] = 0;
1-4-8- رشته
رشته آرایهای از کاراکترهاست که به یک 0 یا یک کاراکتر خالی (null) ختم شود تا نشان دهد که رشته کجا تمام شده است. توجه کنید که کاراکتر null جزو رشته به حساب نمیآآید. برای استفاده از رشته دو راه وجود دارد:
1- استفاده از آرایهآای از کاراکترها
2- استفاده از اشارهآگر رشته
آرایهآ کاراکتری مانند آرایه زیر تعریف می شود:
char ca[10];
شما باید مقدار هر خانهآی آرایه را به کاراکتر مورد نظر خود اختصاص، و کاراکتر پایانی خود را 0 قرار دهید. به یاد داشته باشید که برای اشاره کردن به یک رشته باید از s% استفاده کنید.
char ca[10];
ca[0] = 'H'; ca[1] = 'e';
ca[2] = 'l'; ca[3] = 'l';
ca[4] = 'o'; ca[5] = 0;
printf("%s", ca);
وقتی که شما یک مقدار خاص را به یک اشارهآگر رشته نسبت میآدهید کامپایلر یک صفر در انتهای آن قرار میآدهد و دیگر نیازی نیست تا مانند آرایه کاراکتری، 0 را در انتهای آن قرار دهید.
char ca[10], *sp;
scanf("%s", ca);
sp = ca;
scanf("%s", sp);
شما میآتوانید یک رشته را در یک آرایه کاراکتری با استفاده از scanf بخوانید ولی برای خواندن یک اشارهآگر رشته، کامپایلر باید آن را به یک آرایه کاراکتری برگرداند.
فایل سرآمد string.h دارای توابع پرکاربردی برای کار با رشتهآهاست. در اینجا به شرح تعدادی از آنآها میآپردازیم:
strcpy ( مقصد منبع ،)
شما نمیتوانید در زبان Cا¾ از چنین دستوری استفاده کنید: string1 = string2. بلکه شما باید از تابع strcpy برای کپی کردن یک رشته درون یک رشتهآی دیگر استفاده کنید. تابع strcpy رشتهآی منبع را در رشتهآی مقصد کپی میآکند.
s1 = "abc";
s2 = "xyz";
strcpy(s1, s2); // s1 = "xyz"
: strcat (مقصد منبع،)
رشتهآی منبع و مقصد را با هم ترکیب نموده و در رشتهآی مقصد قرار میآدهد.
s1 = "abc";
s2 = "xyz";
strcat(s1, s2); // s1 = "abcxyz"
: strcmp(اول دوم،)
این تابع رشتهی اول را با رشتهی دوم مقایسه میآکند، اگر رشتهی اول بزرگتر از رشتهی دوم بود، تابع عددی مثبت را برگشت میدهد، اگر هر دو رشته مساوی بودند تابع مقدار عددی صفر را برگشت میآدهد و اگر رشته اول کوچکتر از رشتهآی دوم بود تابع عددی منفی را برگشت میآدهد.
s1 = "abc";
s2 = "abc";
i = strcmp(s1, s2); // i = 0
strlen(رشته)
این تابع تعداد کاراکترهای رشته را بازگشت میدهد.
s = "abcde";
i = strlen(s); // i = 5
1-4-9- توابع
توابع در واقع، زیر برنامه میآباشند. شما قبلا از توابع استفاده کردید، منظور همان تابع main است. شما قبل از اینآکه یک تابع را فراخوانی کنید باید آن را در ابتدای برنامه و قبل از main تعریف کنید. در مورد هر تابع میآباید نوع return مشخص شود (یعنی نوع آرگومان برگشتی تابع مشخص شود مثلا از نوع int است یا از نوع char یا نظایر آن). در صورتی که نمیآخواهید مقدار خاصی را return کنید از void استفاده کنید. بعد اسم منحصر به فرد تابع را بنویسید و پس از آن یک جفت پرانتز قرار دهید. در صورتی که تابع شما آرگومان ورودی دارد با مشخص کردن نوع و تعداد آرگومآنآها، آنآها را درون پرانتز جلوی اسم تابع قرار دهید و در صورتی که تابع شما آرگومان ورودی ندارد درون پرانتز عبارت void را نوشته یا آن را خالی باقی بگذارید. در آخر نیز دو عدد { } بگذارید و برنامه ی خود درون آن بنویسید. تابع تعریف شده در مثال زیر را بررسی نمائید:
#include <stdio.h>
void Hello()
{
printf("Hello\n"

}
void main()
{
Hello();
}
پارامتر های تابع، مقادیری هستند که ما به یک تابع میآدهیم تا بتواند آنآها را محاسبه کند. شما باید در داخل پرانتزهای پارامتر، متغیرها را بیاورید تا مقدار پارامتر را که قابل قبول است در تابع قرار دهد. دراینجا ما Function Add که دو پارامتر را با هم جمع می کند آورده شده است:
#include<stdio.h>
int Add(int a, int b)
{
return a+ b;
}
void main()
{
int answer;
answer = Add(5, 7);
}
شما میتوانید آدرس متغیر را در یک تابع قرار دهید، در اینجا کپی صورت نمیآگیرد و شما نیاز به اشارهآگر دارید.
#include<stdio.h>
int Add(int *a, int *b)
{
return *a + *b;
}
int main()
{
int answer;
int num1 = 5;
int num2 = 7;
answer = Add(&num1, &num2);
printf("%d\n", answer);
return 0;
}
1-4-10- متغیرهای سراسری و محلی
متغیرهای محلی فقط در داخل یک تابع قابل استفاده هستند و بیرون از آن نمیآشود از این نوع متغیرها استفاده کرد. اگر شما نیاز دارید که بتوانید از یک متغیر در تمامی قسمتآهای برنامه استفاده کنید، باید آن را سراسری تعریف کنید.
#include<stdio.h>
int a; // Global variables
int b; // Global variables
int Add()
{
return a + b;
}
int main() {
int answer; // Local variable
a = 5;
b = 7;
answer = Add();
printf("%d\n", answer);
return 0;
}