1 Си тілінде бағдарламалау орталары және оларда жұмыс істеу
2 СИ++ бағдарламалау тілінің негізгі элементтері
2.1 Тілдің алфавиті және мәліметтер типі
Тілдің алфавитінде латын бас және кіші әріптері, цифрлар және арнайы символдар (нүкте, үтір, апостроф, қос нүкте) пайдаланылады.
Ескертпелер (комментария) /* және */ символдары арасында жазылады. Немесе // символдың артында жазылады.
Тілдегі айнымалы, функция, объект аты ретінде пайдаланылатын идентификатор ұғымы негізгі болып табылады. Идентификатор 32 символдан тұруы мүмкін. Оның аты әріптерден басталу қажет. Онда әріптер мен цифрлар пайдаланылады. Си тілі регистрге сезімтал. Мысалы: SUMM, Summ, summ айнымалылары әр – түрлі болып есептеледі.
СИ тілінде мәліметтердің келесі типтері бар.
-
int (бүтін) –32768 -ден 32767-ға дейінгі аралықта мәндерді қабылдайтын бүтін сандардың типі. int типті айнымалы жадыда 16 бит орын алады;
-
short (қысқа бүтін) – осы типтегі айнымалылар int типті айнымалылардан артық болмау керек. Осы типтегі айнымалы жадыда 16 бит орын алады;
-
long (ұзын бүтін) – –2147483648 –дан 2147483647-ға дейінгі аралықта мәндерді қабылдайтын бүтін тип. long типті айнымалы жадыда 32 бит орын алады;
-
char (символдық) – мәндері символ болатын тип;
-
unsigned (белгісі жоқ) – СИ тілінде кейбір (char, short, int, long) типтерді unsigned модификаторы көмегімен тек қана оң сандарды қабылдауға мүмкіндік беретін тип. int типін сипаттағанда «unsigned int a;» орнына «unsigned a;» деп жазуға болады;
Мәліметтер типі
|
Min
|
Max
|
signed char
|
- 128
|
127
|
unsigned char
|
0
|
255
|
signed short
|
-32768
|
32767
|
unsigned short
|
0
|
65535
|
signed int
|
-32768
|
32767
|
unsigned int
|
0
|
65535
|
signed long
|
-2147483648
|
2147483647
|
unsigned long
|
0
|
4294967295
|
-
float (нақты) – мәндері нақты сан болатын тип. Нақты сандар экспонента түрінде жазылуы мүмкін, мысалы, -1.58е+2 (ол -1,58·102 тең). float типті айнымалы 32 бит орын алады. Оның мәні +3.4е-38 –ден +3.4е+38-ға дейінгі аралықта жатуы мүмкін;
-
double (дәлділік) – float типті айнымалыдан қарағанда жадыда екі есе орын алатын (64 бит) нақты айнымалыларды анықтайды. Олардың мәндері +1.7е-308-дан +1.7е+308-ға дейін болуы мүмкін.
-
long double (ұзын нақты) – типті айнымалы жадыда 10 байт орын алады. Олардың мәндері 3.4E-4932 – дан 3.4E+4932- ға дейін болуы мүмкін.
-
boolean
2.2 Сызықтық бағдарламалау операторлары
2.2.1 Шығару операторы
Жазылуы: printf("басқару жолы", аргумент1, аргумент2, ... );
Басқару жолында үш типті объект жазылуы мүмкін: қарапайым символдар, түрлендіру спецификациясы, басқарушы символ-константалар.
Әр- бір түрлендіру спецификациясы % белгісінен басталып, түрлендіру жасайтын символмен аяқталады. Түрлендіру символы айнымалы типіне байланысты болады:
-
d – аргумент мәні ондық бүтін сан;
-
o – аргумент мәні сегіздік бүтін сан;
-
x – аргумент мәні он алтылық бүтін сан;
-
c – аргумент мәні символ;
-
s – аргумент мәні символдар жолы;
-
e – аргумент мәні экспонента түріндегі нақты сан;
-
f – аргумент мәні жылжымалы нүктемен нақты ондық сан;
-
u – аргумент мәні белгісі жоқ бүтін сан;
-
p – аргумент мәні көрсеткіш (адрес).
Егер % белгісінен кейін символ жазылмаса, онда экранға сол белгінің өзі шығады. printf функциясы қанша аргумент бар және олардың типтері қандай екенін анықтау үшін басқару жолын пайдаланады.
Мысалы, %6f – алты позициядан тұратын өрісте жылжымалы нүктемен санды шығару; %.2f – нүктеден кейін екі цифрмен нақты санды шығару; %6.2f – нүктеден кейін екі цифрмен нақты санды алты позициядан тұратын өріске шығару.
Мысалы, а=3,687 және b=10,17 болса, онда
printf(“%7f %8f”,a,b);
командасынан кейін экранда нәтиже келесідей шығарылады:
_ _ 3.687 _ _ _10.17
(7 поз.) (8 позиция)
Мысалда көріп отырғандай бос позициялар пробелмен толтырылады.
Егер printf(“%.2f %/2f”, a, b); функциясын пайдаланса онда нәтиже келесідей болады:
3.69 10.17 ,
Егер printf(“%7.2f e”,a,b); функциясын пайдаланса онда нәтиже келесідей болады:
_ _ _ 3.68 1.010000е+01
(7 позиция)
Спецификация алдындағы «минус» таңбасы санды сол жағынан шығарады. Мысалы:
printf(“%-6d”,s);
функциясынан кейін экранда келесі жазу шығады:
336_ _ _
(6 позиция)
Ескертетін жағдай, егер өріс ұзындығы сандағы цифрлардың санынан кем болса, онда өріс қажетті өлшемге дейін ұзарады.
Жоғарыда айта кеткен басқарушы символ-константалардың ішінен көп пайдаланылатын келесілер:
-
\a – қысқа дыбыс сигналын шығару үшін;
-
\b – меңзерді бір позицияға солға жылжыту;
-
\n – жаңа жолға көшу үшін;
-
\r – меңзерді жолдың басына қою үшін;
-
\t – көлденең табуляциялау;
-
\v – тігінен табуляциялау.
-
\0 – бос литера, NULL
Мысалы, i=50 болсын, келесі функцияның жазуынан кейін
printf(“\t ЭЕМ\n%d\n”,i);
алдымен көлденең табуляция (\t) орындалады, яғни экран шетінен 8 позиция орын қалдырады. Содан соң ЭЕМ сөзі шығып, меңзер келесі жолдың басына түседі (\n), d форматы бойынша i-дің бүтін мәні шығады. Соңында меңзер қайтадан келесі жолға түседі. Сонымен экранда келесідей нәтиже шығады:
_ _ _ _ _ _ _ _ ЭЕМ
50
2.2.2 Енгізу операторы
Жазылуы: scanf(«басқару жолы», аргумент1, аргумент2,...);
Басқару жолы printf функциясы секілді қарапайым символдар, түрлендіру спецификациясы, басқарушы символ-константалар жазылуы мүмкін.
Бірақ scanf функциясында, аргумент ретінде айнымалы пайдаланылса, оның алдында & символы қойылады. & операторы айнымалының адресін алуға мүмкіндік береді. Айнымалы мәнін енгізгенде scanf функциясы оны адресі бойынша жадыға сақтайды.
Мысалы: бүтін типті і және нақты типті a айнымалы үшін мәндерді енгізу қажет болса, келесі функция жазылады:
scanf(“%d%f”,&i,&a);
scanf және printf функцияларын пайдалану үшін файлын қосу қажет.
Мысалы, экранға "Сәлем, достар!" жазуын шығару программасы келесі түрде жазылады:
#include
main()
{
printf("Сәлем, достар!");
}
2.2.3 Меншіктеу операторы және өрнектер
Си тілінде меншіктеу операторы «=» белгісімен белгіленеді. Жазылуы:
айнымалы = мән;
Басқа тілдерге қарағанда Си тілінде меншіктеу операторын өрнектерде пайдалануға болады. Мысалы, if ((c=a+b)<0) printf(''с саны нөлден кіші').
Тағы бірнеше рет меншіктеу мүмкіндігі бар. Мысалы:
x=y=z=a*b;
Бұл жерде алдымен a*b мәні z-қа, содан соң y-қа, сондан кейін x-қа меншіктеледі.
Си тілінде константалардың мәнін өзгертпеу үшін const модификаторы пайдаланады. Мысалы: const float a=3.5;
const j=47;
Өрнектерді айнымалыларды есептеуге арналған формула ретінде пайдаланады. Олар операндтардан (айнымалылар, константалар және т.б.) құралады және операция белгілерімен (қосу, азайту, көбейту және басқамен) байланысады.
Кесте 1 – Арифметикалық операциялар
Арифметикалық операциялар
|
Орындалуы
|
+
|
Қосу
|
–
|
Азайту
|
*
|
Көбейту
|
/
|
Бөлу, бүтін бөлігін алу
|
%
|
Бөлгендегі қалдығын алу
|
Мысалы: егер b=5, c=2, бүтін типті айнымалылар болса, онда
а=b%c; d=b/c;
операциялардың орындалуынан кейін а айнымалысы 1 мәнін қабылдайды, d айнымалысы 2 мәнін қабылдайды.
Арифметикалық операциясына сәйкес меншіктеу операторын басқаша пайдалануға болады.
Мысалы, х=x+n; жазуын x+=n; деп жазуға болады. Сол секілді
x=x-n; x-=n;
x=x/n; x/=n;
x=x*n; x*=n;
x=x%n; x%=n;
Кесте 2 – Қатынас операциялары
Қатынас операциялары
|
Ұғымы
|
<
|
Кіші
|
<=
|
Кіші не тең
|
= =
|
Тең
|
>=
|
Үлкен не тең
|
>
|
Үлкен
|
!=
|
Тең емес
|
Кесте 3 – Логикалық операциялар
Логикалық операциялар
|
Ұғымы
|
&&
|
ЖӘНЕ, and
|
||
|
НЕМЕСЕ, or
|
!
|
ЕМЕС, not
|
Си тілінде логикалық тип жоқ болғандықтан, логикалық өрнектін нәтижесі сандық шама болады (жалған мәнде 0-ге тең, ақиқат мәнде 0-ге тең емес шама).
Си тілінде операнд мәнін бірге арттыру (++) және бірге кеміту (--) операциялары пайдаланады.
х++; ++х; операторлардың нәтижесі бір, бірақ пайдалану барысында айырмашылықтары бар. Мысалы:
main()
{
int x,y;
x=5; y=60;
x++; ++y;
printf(“x=%d y=%d\n”,x,y);
printf(“x=%d y=%d\n”,x++,++y);
}
Нәтижесі:
х=5 у=61
х=5 у=62
х++ операторын пайдаланғанда х айнымалының мәні алдымен өрнекте пайдаланады, содан соң бірге артады. ++у пайдаланғанда алдымен у айнымалысы бірге артады, содан соң өрнекте пайдаланады.
Кесте 4 - Операциялардың орындалу приоритеті
++
--
|
*
/
%
|
+
-
|
!
|
<
<=
>
>=
|
==
!=
|
&&
|
||
|
Егер операция приоритетін өзгерту қажет болса, дөңгелек жақшаны пайдаланады. Олардың приоритеті жоғары.
Өрнектерде тағы шарт операциясы ? кеңінен пайдаланады.
у=х?а:b,
өрнегінде егер х нөлге тең болмаса, у=а, егер х нөлге тең болса у=b.
у=(а>b)?a:b;
өрнегі у айнымалысына а не b айнымалылардың ең үлкен мәнін қабылдауға мүмкіндік береді, яғни y=max(a,b).
2.3 Математикалық функциялар
Си тілінде математикалық функцияларды пайдаланар алдында math.h файлын қосу қажет:
#include
Кесте 5- Математикалық функциялар
Математикалық жазылуы
|
СИ тілінде жазылуы
|
Нәтиже типтері
|
| X |
|
abs(X)
|
int
|
| X |
|
fabs(X)
|
float
|
arccos X
|
acos(X)
|
double, float
|
arcsin X
|
asin(X)
|
double, float
|
arctg X
|
atan(X)
|
double, float
|
cos X
|
cos(X)
|
double, float
|
sin X
|
sin(X)
|
double, float
|
tg X
|
tan(X)
|
double, float
|
eX
|
exp(X)
|
double, float
|
ln X
|
log(X)
|
double, float
|
log X
|
log10(X)
|
double, float
|
√X
|
sqrt(X)
|
double, float
|
XY
|
pow(X, Y)
|
double, float
|
Аргумент және функция алдында мүмкін болатын тип көрсетілген (бағдарламалау барысында ол жазылмайды).
Мысалы: y-тің мәнін табатын бағдарламаны жаз.
y=x+0.25+sin
#include
#include
main()
{
float x,y,a;
scanf(“%f”,&x);
a=x+0.25;
y=a+sin(exp(a))+sqrt(a/2.5);
printf(“y=%f”,y );
}
3 Шарттық және таңдау операторы
3.1 Шарттық оператор if
Жазылуы: if (шарт) инструкция1; else инструкция2;
if – егер, else - әйтпесе
Егер жақшадағы шарт ақиқат болса, онда инструкция1 орындалады, ал егер жалған болса, инструкция 2 орындалады.
Мысалы: егер х мәні теріс сан болса, оның квадратын шығару, әйтпесе мәнін шығару
#include
#include
main()
{
float x,y;
scanf("%f", & x);
if (x<0) y=pow(x,2);
else y=sqrt(x);
printf(“y=%f”,y );
}
3.2 Таңдау операторы switch
Жазылуы:
switch (айнымалы)
{case айнымалы мәні1, оператор 1; break;
. . .
case айнымалы мәні n, оператор n; break;
default: оператор n+1; break;}
switch – айырып қосқыш, жақшаның ішінде мәні бүтін сан болатын айнымалы анықталады. Оны селектор деп атайды.
Егер айнымалы мәні ешқайсысына сәйкес келмесе онда default сөзінен кейінгі операторлар орындалады. Егер default сөзі тұрмаса ешқандай оператор орындалмайды.
Таңдау жасалған соң, келесі тексерістерді жасамас үшін break операторы пайдаланылады. Ол switch операторынан шұғыл түрде шығады.
Мысал1:
#include
main( )
{
char y;
scanf(“%c”,&y);
switch(y)
{
case ‘1’:
printf(“бұтақ 1\n”);
break;
case ‘2’:
case ‘3’:
printf(“бұтақ 2 немесе 3\n”);
break;
default:
printf(“бұтақ 1,2,3 жұмыс істемейді\n”);
}
}
Мысал 2: Енгізілген бағаға сәйкес сөзді шығару
#include
main( )
{
int y;
scanf(“%d”,&y);
switch(y)
{
case 1:
case 2:
printf(“қанағаттанарлықсыз\n”);
break;
case 3:
printf(“қанағаттанарлық\n”);
break;
case 4:
printf(“жақсы\n”);
break;
case 5:
printf(“өте жақсы\n”);
break;
default:
printf(“ондай баға жоқ\n”);
}
}
4 Циклдік операторлар
4.1 Параметрлі қайталану операторы for
Жазылуы: for (өрнек 1; өрнек 2; өрнек 3) оператор;
Бірінші өрнек санауыш инициализациясы үшін. Екінші өрнек шартты тексеруге арналған, шарт жалған болғанда цикл аяқталады. Үшінші өрнек операторлар орындалған соң қадам санын қосады.
Мысалы: for(i=0; i<100; i+=2) [i]=i+1;
Әр өрнек «үтір» белгісімен ажыратылатын өрнектерден құрылуы мүмкін
Мысалы:
for(i=0, j=1; i<100; i++, j++) a[i]=b[j];
Мысал1: у=sin sin sin……….sin x n рет қайталанады.
У-ті табатын программаны жазу.
main()
{
float x,y;
int n;
scanf(“%f %d”, &x, &n);
y=sin(x);
for (int i=1; i<=(n-1); i++)
y=sin(y);
printf(“%f”, y);
}
Мысал 2 : y= табатын бағдарламаны жаз.
main()
{
float y,f;
int n;
scanf(“%d”, &n);
for (int i=1; i<=(n-1); i++)
{
for (int j=1; j<=i; j++)
f*=j;
y+=1/f;
}
printf(“%f”, y);
}
4.2 Алдыңғы шартты қайталану циклы, while операторы
Жазылуы: while (шарт) оператор;
Жақшадағы шарт ақиқат болғанша циклдағы операторлар орындалады. Егер алғашқысында шарт жалған болса, цикл бір де бір рет орындалмайды.
Мысалы: Енгізілген санның цифрларының қосындысын табу бағдарламасы.
#include
main( )
{
int n, m, s;
scanf(“%d”, &n);
s=0;
while (n>1)
{
m=n%10;
s+=m;
n/=10;
}
printf(“%d”, s);
}
4.3 Кейінгі шартты қайталану циклы, do-while операторы
Жазылуы: do оператор while (шарт)
Осы операторда цикл денесі кемінде бір рет орындалады. Шарт жалған мәнін қабылдағанда цикл аяқталады.
Мысалы:
#include
main( )
{
int n, m, s;
scanf(“%d”, &n);
s=0;
do
m=n%10;
s+=m;
n/=10;
while (n>1);
printf(“%d”, s);
}
break операторы
Break операторы циклдан шұғыл түрде шығу қажет болғанда пайдаланылады.
Мысал:
while (st>0 && st<25)
{
if (st==4||st==8||st==12)
break;
}
if операторындағы шарт ақиқат болғанда цикл жұмысы аяқталады.
continue операторы
Бұл оператор өзінен кейін тұрған операторларды ескермей келесі итерацияға өтеді.
Мысал:
while (st>0 && st<25)
{
if (st==4||st==8||st==12)
continue;
}
Бұл жерде continue операторынан кейін тұрған операторлар орындалмайды және келесі итерацияның басына көшеді.
5 Массивтер және көрсеткіштер
5.1 Массивтер
Массив – бұл элементтері бір типті болатын мәліметтер жиыны.
Массивтерді айнымалыларды секілді сипаттайды:
int a[100];
float c[10][20];
Біріншісі бүтін типті а[0],a[1], … ,a[99] (индекстелу нөлден басталады) элементтерден тұратын бір өлшемді массив болып табылады. Екіншісі элементтері нақты тип болатын екі өлшемді массив болып табылады. Ол 10 жолдан, 20 бағаннан тұрады.
Массивті келесідей инициализациялауға болады:
int a[6]={10,20,30,40,50,60}; немесе int a[]={10,20,30,40,50,60};
float[2][3]={{10,20,30},{40,50,60}};
Мысал 1. 10 нақты саннан тұратын бірөлшемді S массиві берілген. Осы массивті кері ретпен шығару.
#include
main()
{float s[10];
int i;
for (i=0;i<10;i++)
scanf(“%f”,&s[i]); /*массив элементтерін енгізу*/
for (i=9;i>=0;i--)
printf(“%f”,s[i]); /* массив элементтерін кері ретпен шығару*/
}
Мысал 2. Бес бағаннан және бес жолдан тұратын бүтін типті екі өлшемді массив берілген. Массивтегі ең үлкен элементтің орналасу номерін анықтау.
#include
main()
{int i,j,max,in,jn,a[5][5];
for (i=0;i<5;i++)
for (j=0;j<5;j++)
scanf(“%d”, &a[i][j]); /*матрицаны енгізу*/
max=a[1][1];
for (i=0;i<5;i++)
for (j=0;j<5;j++)
if (a[i][j]>max)
{in=i; jn=j;}
printf(“%d %d”, in, jn);
}
Мысал 3. D(6,6) массивінің басты және кері диагональдің орындарын ауыстыру.
#include
main()
{int i,j,a,d[6][6];
for (i=0;i<6;i++)
for (j=0;j<6;j++)
scanf(“%d”, &d[i][j]);
for (i=0; i<5; i++)
{a=d[i][i];
d[i][i]=d[i][6-i];
d[i][6-i]=a;
}
for (i=0; i<6; i++)
for (j=0; j<6; j++)
printf(“%d%c”, d[i][j], (j==5)?”\n”:” “);
}
Матрица элементтерін жолдар бойынша шығаруда ? операциясы пайдаланылады. Егер j=5, онда курсор келесі жолға түседі (“\n”), басқа жағдайда пробел шығарылады. Экранға символдық шама шығарылатындықтан %c спецификациясы пайдаланылады.
5.2 Көрсеткіштер және сілтемелер
Көрсеткіш – бұл кейбір мәліметтердің орналасу адресін сақтайтын айнымалы.
Көрсеткішті пайдалану:
-
Кез келген мәліметтердің орналасу жеріне нұсқау жасай алуға болады.
-
Құрылымдық мәліметтердің элементтеріне (массив, жолдар, құрылымдар, жазбалар) қол жеткізетін көрсеткіш ретінде пайдалануға болады. Көрсеткішті индекстеу арқылы массив немесе құрылым сақталынған байттар тізбегіне қол жеткізуге болады.
-
Көрсеткішті пайдалана отырып бағдарламаның орындалу барысында жаңа айнымалыларды құруға болады. Си тілі бағдарламаға қажетті көлем жадыны (байтта) сұратуға мүмкіндік береді. Осы әдісті динамикалық үлестіру деп атайды. Оның көмегімен жадының кез келген көлемін пайдалануға болады.
Келесі бағдарламаны қарастырайық:
main()
int a,*p;
p = &a;
a = 421;
printf("a орналасуы: %p\n",&a);
printf("a мәні: %d\n", a);
printf("p мәні: %p\n", p);
printf("адрестелінген мән р: %d\n",*p);
Осы бағдарламада екі айнымалы сипатталған а және р. Айнымалы а – бүтін типті, р – бүтін айнымалыға көрсеткіш, яғни айнымалының адресін сақтайды. Көрсеткішті сипаттағанда алдында (*) белгісін қояды. Келесі жолда а айнымалысының адресі р-ға меншіктеледі. Бұл жердегі (&) адрестік оператор айнымалының адресін алуға мүмкіндік береді. Содан соң 421 мәні а-ға меншіктеледі. Нәтижесінде экранға келесі жазу шығады:
а орналасуы: 166E
а мәні: 421
р мәні: 166E
адрестелінген мән р: 421
Сонымен &a – а айнымалысына сілтеме, р – көрсеткіш, *р – р көрсеткіші көрсететін адрестегі мән.
Сілтемелерге мысалдар:
1) int i=1;
int & r=i; r және і айнымалылары бір адреске сілтеме жасайды
int x=r; x=1
r=2; i=2
r++; i=3;
2) char c1=’a’;
char* p=&c1; р көрсеткіші с1 айнымалының адресіне сілтеме
char c2=*p; c2=’a’
Көрсеткіштердің келесі жазуын пайдалануға болады: ***р=143;
р *р **р ***р
Бұл жазу көрсеткішке көрсеткіш пайдаланғанын көрсетеді.
Достарыңызбен бөлісу: |