№7 тақырып. Массивтер. Екі өлшемді массивтерді қолдану арқылы программаны өңдеу.*
Жоспары:
1. Массивтің сипатталуы.
2. Екі өлшемді массивтер
3. Екі өлшемді массивтерге мысалдар келтіру.
Массивтің сипатталуы. Массивтер бірдей типті және бір атты логикалық байланысқан жадының ұяшықтар тобы болып табылады. Массивтің элементіне қатынас жасау үшін массивтегі осы элементтің массивтің атын және позициясының нөмірін көрсету қажет. Кез келген массивтің бірінші элементі нөлдік реттік нөмерге ие болады. Массивті баяндағанда массивтің атын, әрбір элементінің типін және элементтерінің санын көрсету керек. Мысалы:
int b[100], x[27];
Төменде келтірілген программада 10 элементтен тұратын n бүтін типті массивтің элементтерін нөлмен инициалдау үшін for қайталау құрылымы қолданылады.
/* Массивті инициалдау */
#include <stdio.h>
main()
{ int n[10], i;
for (i=0; i<=9; i++)
n[i]=0; /* Массивті инициалдау */
for (i=0; i<=9; i++) /* Массив элементтерін шығару */
printf(“%3d%10d\n”, i, n[i]);
return 0; }
Программаның нәтижесі:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Массивтің элементтері массивті баяндаудың соңына теңдік белгісін және үтірмен бөлінген инициалданатын мәндер (фигурлы жақшаға алынған) тізімін қою жолымен инициалдауға болады. Төменде келтірілген программа бүтін типті массивті оң 10 мәндермен инициалдайды.
/* Баяндауда массивті инициалдау */
#include <stdio.h>
main()
{ int i, n[10]={2, 27, 64, 18, 95, 14, 90, 70, 6, 3};
for (i=0; i<=9; i++)
printf(“%3d”, n[i]);
return 0; }
Пр ограмм аның нәтижесі :
2 27 64 18 95 14 90 70 6 3
Егер массивтің элементтеріне қарағанда инициалданатын мәндердің саны аз болса, онда қалған элементтер автоматты түрде нөлмен инициалданады. Мысалы, n массивтің элементтерін баяндау арқылы нөлдермен инициалдауға болады.
int n[10]={0};
мұнда бірінші элемент нөлмен инициалданады және қалған тоғыз элемент автоматты түрде нөлмен инициалданады.
Егер массивтің инициалданатын мәндердің тізімімен баяндауында массивтің өлшемі кқрсетілмесе, онда массивтің элементтерінің саны инициалдау тізіміндегі элементтердің санына тең болады.
Си тілінде массивтердің бірнеше индекстері болуы мүмкін. Көп өлшемді массивтер жиі жол және бағандар бойынша реттелген мәндерден тұратын кестелерді бейнелеу үшін қолданылады. Кесенің нақты элементін иднтификациялау үшін екі индекс көрсетіледі: бірінші-элементтің жолын көрсетеді, ал екіншісі бағанын көрсетеді. Осындай кестелер немесе массивтер екі өлшемді массивтер деп аталады.
Көп өлшемді массив бір өлшемді массив сияқты оның баяндалуында инициалдануы мүмкін. Мысалы,
int b[2][2]={{1, 2}, {3, 4}};
Келесі программа екі өлшемді массивтің баяндалу кезіндегі инициалдауын көрсетеді. Программада екі жол және үш бағанды (әрқайсысы алты элементтен тұрады) үш массив баяндалады. Әрбір массивтің элементтерін шығару үшін программада printarray функциясы шақырылады.
/* Көп өлшемді массивті инициалдау */
#include <stdio.h>
void printarray(int [][3]);
main()
{ int a1[2][3] = {{1, 2, 3}, {4, 5, 6}}, a2[2][3] = {1, 2, 3, 4, 5}, a3[2][3] = {{1, 2}, {4}},
printf(“Массив А1”);
printfarray(a1);
printf(“Массив А2”);
printfarray(a2);
printf(“Массив А3”);
printfarray(a3);
printf(“\n”);
return 0; }
void printarray(int a[][3]);
{ int i, j;
for (i=0; i<=1; i++)
{ for (j=0; j<=2; j++)
printf(“%d ”, a[i][j]);
printf(“\n”); }
}
Программаның нәтижесі :
Массив А1
1 2 3
4 5 6
Массив А2
1 2 3
4 5 0
Массив А3
1 2 0
4 0 0
Бақылау сұрақтары:
2. Екі өлшемді массив қалай енгізіледі және қалай шығарылады?
3. Қандай шартта бір массивтің барлық элементтерін басқа массивке беруге болады?
4. Екі массивті қалай салыстыруға болады?
5. Бір өлшемді және екі өлшемді массивтерді инициалдау мысалдарын келтіріңіз.
Ұсынылатын әдебиеттер: 1осн[223-253], 2осн[244-255], 5доп[41-46], 7доп[15-23]
№8 тақырып. Си тіліндегі функциялар.
Жоспары:
1. Функцияны құру және қолдану
2. Функция анықтамасы.
3. Функцияны баяндау: классикалық түрі.
4. Адресті операциялар.
Си тілінде барлық программалар функция ретінде қарастырылады. Әдетте, бұл тілдегі программалар көптеген кішкене функциялардан тұрады. қолданылатын әр функция үшін функцияның баяндалуы мен анықтамасы келтіріледі. (Функцияны баяндау оның типі және параметрлердің жазылу реті туралы ақпаратты береді. Функцияны анықтау кезінде орындалатын нақты операторлар көрсетіледі) Функциялар типі нәтиже ретінде қайтаратын мәндердің типімен бірдей болуы қажет. Егер типі берілмесе, онда функция типі үндеместен іnt болады. Егер функция басқа тип болса, онда ол шақырушы программада және функцияның өзінің анықтамасында көрсетілуі керек.
Функцияның баяндалуын қарастырайық: функцияны баяндаудың екі түрлі стилін (классикалық және қазіргі стиль) қолдануға болады. Бірінші жағдайда, функцияны баяндау форматы келесідей:
Тип функция_аты ();
Бұл спецификация функцияның атын және қайтаратын мәннің типін баяндайды.
қазіргі стиль ANSІ ұсынған Си тілінің кеңейтілген түрлерінің конструкцияларында қолданылады. Бұл Си тілінің түрінде функцияны баяндау кезінде “функция прототипі” деп аталатын тілдің арнайы құралдары қолданылады. Оның прототипін қолданып функцияны баяндау кезінде параметрлері туралы қосымша ақпарат болады:
Тип функция_аты(парам_ақпар1, парам_ақпар2, ...);
Бұндағы парам_ақпар1 параметрі - формальды параметрлердің аты және типі туралы мәлімет.
Функция анықтамасы. Функцияны баяндау сияқты оны анықтау кезінде де екі стильді қолдануға болады - классикалық және қазіргі. Функцияны анықтаудың классикалық форматы келесідей:
Тип функция_аты (параметрлер аты) параметрлер анықтамасы;
{
локалдық баяндау;
операторлар;
}
қазіргі стиль баяндалу форматы функция атынан кейін тұратын жақша ішіндегі функция параметрлерінің анықталуын қарастырады.
Тип функция_аты(парамақпар, парам_ақпар, ...);
Бұндағы, параметр анықтамасы парам_ақпар - берілетін параметр (тип және идентификатор) туралы ақпаратты сақтайды.
Функция ішінде (maіn() басты функциясынан басқа) тұрған баяндаулар тізбегі (константалар, мәліметтер типі, айнымалылар) тек осы функция ішінде анықталады. Сондықтан Си тілі ішкі циклдерді қамтымайды, яғни бір функция басқа функцияның ішінде баянала алмайды.
Функциялар программа ішінде әр түрлі ретте тұра береді және программаның барлық жеріне глобальды деп есептеледі, сосын қолданылмай тұрып баяндалған енгізілген функцияларды қосқанда да.
Функцияны шақыру функция аты және жақша ішінде аргументтері бойынша жүзеге асырылады.
Функцияның орындалу нәтижесі return операторы көмегімен қайтарылады. Жалпы түрі:
Return (өрнек);
Оператор функция жұмысын аяқтайды және басқаруды шақырған программадағы келесі операторға береді. Бұл return операторы функция денесінің соңғы операторы болмаса да, орындалады.
Return операторын мына түрде қолдануға болады:
return; return 0;
Оны қолдану ол тұрған функция жұмысын аяқтап, басқару шақырушы функцияға қайтады (беріледі). Оператордың жақшасының ішінде өрнек жоқ болғандықтан, функцияға ешқандай мән берілмейді.
Maіn()
{
float y, x, mult(); /*шақырушы программадағы баяндау*/
іnt n;
y=mult(x, n); }
float mult(v, k) /*функция анықтамасында баяндау*/
float v; іnt k;
{
float res;
for(res=0.0; k>0; k--)
res=res*v;
return(res); /*float типті мәнді қайтарады*/
}
Return операторы көмегімен шақырушы программаға тек бір ғана мән беріледі. Егер екі шама берілу керек болса, онда көрсеткіштерді қолдану керек.
Функция анықталуы атымен, формалды параметрлерімен және функция денесімен ерекшеленеді. Ол тағы да қайтаратын мәнінің типі және функцияның жады класы бойынша ерекшеленеді. Функцияны анықтау синтаксисі келесідей:
[<ЖК түрі>][<тип түрі>]<сипаттаушы>([<параметрлер тізбегі>])[<параметрлерді баяндау>]<функция денесі>
Жады класының түрі <ЖК түрі> функцияның жады класын береді. <Тип түрі> сипаттаушымен бірге қайтаратын мәннің типін және функция атын анықтайды. <Параметрлер тізбегі> өз кезегінде функцияны шақыру кезінде мәні берілетін формалды параметрлер атынан тұратын тзбек (бос болуы мүмкін). <Параметрлерді баяндау> формалды параметрлердің типтерін және идентификаторларды береді. <Функция денесі> - жергілікті айнымалыларды баяндаудан және операторлардан тұратын құрамды оператор.
қазіргі құрылымы:
[<ЖК түрі>][<тип түрі>]<сипаттаушы>([<параметрлерді баяндау тізімі>])<функция денесі>