Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-blok.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
559 Кб
Скачать
☆

4.For цикл операторы(блок схемасы, жазылу форматы, мысалдар)

П араметрлі цикл схемасы:

Арифметикалық прогрессия сияқты For операторының жазылуы:

for(x=x0;x<=xk;x+=dx)

{

<1-оператор>;

<2-оператор>;

. . .

<n-ператор>;

}

Мұндағы өрнек1: x=x0; – цикл айнымалысының бастапқы мəні, өрнек2: x<=xk; – циклдің қайталану шарты, өрнек3: x+=dx – цикл айнымалысының қадам мөлшеріне артуы.

/ * 1-ден n-ге дейінгі сандар қосындысы */

#include <stdio.h>

#include <conio.h>

main ()

{ int s=0,k;

int n;

clrscr();

printf(“n саны = ");

scanf("%d",&n);

printf("1-ден %d-ге дейінгі сандар қосындысы:",n);

for (k=1;k<=n;k++)

s+=k;

printf(" %d",s);

getch();

}

For цикл операторында 3-өрнек ретінде жалпы дұрыс жазылған кез келген өрнекті пайдалануға болады. Мысалы: for (d=0.1; d<50; d*=5) printf(“%f”,d);

For цикл операторында бір немесе бірнеше өрнектерді жазбауға да болады, бірақ мұндайда ; символын міндетті түрде өз орындарына жазып отыру керек, мысалы: x=2; for(n=4; x<=100;) x=x*n;

For цикл операторында құрама өрнектерді «,» операциясы арқылы жазуға да болады, мұндайда бөлектенген өрнектер солдан оңға қарай есептеледі. Мысалы: int x,y; for (x=1,y=9;x<=10; x++,y--) printf(“%d%d\n”, x,y);

Мұнда 1-өрнек орнына екі өрнек жазылған (x=1,y=9;) жəне олар x,y айнымалыларын өзгерту үшін қолданылады. Ал соңында 3-өрнек орнына да екі өрнек (x++,y--)жазылған.

// n!есептеу, n!=1*2*3*…*n

#include <stdio.h>

#include <conio.h>

main ()

{

int i,n;

long p;

clrscr();

printf("n санын енгіз:");

scanf("%d",&n);

for (i=1,p=1;i<=n;p*=i,i++);

printf("%i!=%li",n,p);

getch();}

5 .Do while цикл операторы(блок схемасы, жазылу форматы, мысалдар)

Шарты соңынан тексерілетін do … while циклінің схемасы

Жалпы жазылу түрі:

do

{

1-оператор;

2-оператор;

…

n-оператор;

}

while (өрнек);

Do ... while циклінде шарт соңында тексерілетін болғандықтан, оның тұлғасы ең болмағанда бір реторындалады. Цикл соңында жазылған while(өрнек) өрнек ақиқат болса (немесе 0-ге тең болмаса), цикл тұлғасы қайтадан орындалады. Ал өрнек жалған болса (немесе 0-ге тең болса), цикл аяқталады.

// 15 бүтін сандар ішінен олардың максимумын табу

#include <stdio.h>

main ()

{

int a, max, i=1;

max = -32000;

do

{

printf(“san engiz: “);

scanf("%d",&a);

if (a > max) max = a;

i++;

}

while (i<=15);

printf(“\n15 sannyn en ulkeni=%i",max);

getch();

}

#include <stdio.h>

#include <conio.h>

#define epsilon 1e-5

main ()

{

int i;

float a,s;

clrscr();

s=0; i=1;

do

{a=1.0/i/i;

s+=a;

i++;}

while (a>epsilon);

printf("s=%7.4f",s);

getch();

}

6.Көшу (break, continue, goto) операторлары.

Break операторы. Программа орындалуы кезінде цикл аяқталмай-ақ одан шығу үшін break операторы қолданылады. Егер бұл оператор бірінің ішіне бірі енгізілген қабаттасқан цикл ішінде орналасса, онда ол ішкі циклдан оның сыртқы циклына шығуды ғана жүзеге асырады. Мысалы: Екіөлшемді массивтен – A[5,5] бірөлшемді массив – B[5] құрастыру керек. Оны түрлендіру ережесі: егер осы жолда бір теріс элемент болса, онда B[i]=1, əйтпесе B[i]=0 болуы тиіс.

for (i=0;i<=n; i++)

{ b[i]=0;

for (j=0;j<=n; j ++)

if (a[i][j]<0

{ b[i]=1; break; }

}

Continue операторы. Программа орындалуы кезінде цикл аяқталмай-ақ одан шығып, қалған операторларды аттап өтіп, осы цикл параметрінің келесі мəніне көшу үшін continue операторы қолданылады, яғни циклдің келесі итерациясына – қадамына басынан бастап ауысу жүзеге асырылады. Мысалы: Екіөлшемді массив – A[5,5] берілген. Осы массивтегі теріс элементтердің санын анықтайтын жəне оларды квадраттайтын программа құру керек.

k=0;

for (i=0;i<=5; i++)

for (j=0;j<=5; j ++)

if (a[i][j]>0

continue;

else

{ k=k+1;

a[i][j]=pow(a[i][j],2);

}

Goto операторы. Басқа тілдердегідей Си тілінде goto операторы көп қолданылмайды, бұл оператордың жазылуы: goto <белгі>; мұндағы белгі – оператор нөміріне ұқсас ерекше белгі, яғни идентификатор.

Бұл оператор бірінің ішіне бірі енгізілген бірнеше цикл жиынынан (мəлімет-тер арасында қателер кездессе) бірден сыртқа шығып кету керек болған кезде қолданылады. Мұндайда break операторын пайдалана алмаймыз. Мысалы:

goto m5;

goto belgi2;

7. ЭЕМ жадының кластары және айнымалылардың қолданылу аймағы

Айнымалылар типтерден бөлек жады кластарымен де сипатталады. Осы уақытқа дейін кластарды көрсетпеуіміз олардың алдын ала келісім бойынша сипатталуына байланысты болды. Айнымалылар

компьютер жадында немесе процессор регистрлерінің бірінде сақталады. Ол үшін айнымалы кластары анықталады.ЭЕМ жадының класы (storage class) айнымалылардың қолданылу аймағын (жедел жады немесе регистрлер) жəне осы айнымалының ЭЕМ жадында сақталу ұзақтығын анықтайды.

Жалпы жағдайда айнымалыны немесе функцияны анықтап сипаттағанда, соған сəйкес түйінді сөз арқылы жады класын көрсетуге болады. Функциядар ішінде қолданылған айнымалылар локальді болып саналады жəне олар осы функциялардың ішінде ғана анықталған болып саналады. Кейбір айнымалыларды бірнеше функцияларда қолдану үшін оларды сыртқы айнымалылар ретінде сипаттау қажет. Функцияның сыртында анықталған айнымалылар сыртқы айнымалылар болып табыла- ды жəне олардың қолданылу аймағы глобальді болады.Əрбір айнымалы анықталған бір типке жəне жадының бір класына жатуы тиіс (жалпы ЭЕМ жадында не регистрлерде). Си тілінде ЭЕМ жадының 4 түрлі класы бар жəне оларды сипаттау үшін 4 түйінді сөз қолданылады:• auto – автоматты класты сипаттау үшін қолданылады,• extern – сыртқы класты сипаттау үшін қолданылады,• static- – статикалық класты сипаттау үшін қолданылады,• regisrter – регистрлік класты сипаттау үшін қолданылады.Автоматтық айнымалылар функция ішінде сипатталған айнымалылар, егер жады класының басқа айқын сипатталуы болмаса, онда олар auto класына жататын болып саналады, яғни келісім бойынша функцияның ішінде сипатталған айнымалы автоматтық айнымалы болып саналады. Кейбір жағдайларда берілген айнымалылар тек осы функцияның ішінде ғана сипатталған болса жəне осында ғана қолданылса, олар auto түйінді сөзі арқылы айқын сипаттала алады. Мысалы:

auto int m;

auto int b=12345;

auto float d=123.45;

auto char c;

Автоматтық айнымалыларды осындай етіп міндетті түрде сипаттау қажет емес. Егер айнымалы бір блок (функция басында) ішінде сипатталатын болса жəне оның класы көрсетілмесе, ол келісім бойынша автоматтық айнымалы болып саналады Автоматтық айнымалылар сол блокта ғана, яғни бір функция ішінде қолданылып, оның əсер ету аймағы локальді болады жəне осы айнымалылар сипатталған функция шақырылғанда ғана, көрсетілген автоматтық айнымалылар жұмыс істейді, яғни активтендіріледі (екпінді күйде пайдаланылады). Функцияның жұмысы аяқталғанда автоматтық айнымалылар жойылады да, оларға бөлініп берілген жадының ұяшықтарын басқа айнымалылар үшін қайтадан қолдануға болады Сыртқы айнымалылар. Функцияның сыртында сипатталатын айнымалылар сыртқы болып табылады. Олар функция ішінде қайта қолданылатын болса, extern түйінді сөзі арқылы сол айнымалы қайта сипатталатын болады. Олардың əсер ету аймағы глобальді болып саналады. Мысалы:

int t;

main()

{extern int t;

scanf(“%d”,&t);

while(t!=50)

pr();

printf(“Поиск завершен\n”);

}

pr()

{extern int t;

printf( “ввод следующего числа \n” );

scanf(“%d”,&t);

}

Егер р pr()функциясында t айнымалысының сипатталуы келтірілмесе де, t атты сыртқы айнымалы pr()функциясында келісім бойынша белгілі болып саналады. Егер main() жəне pr()функцияларында extern түйінді сөзі сол функциялар ішіндегі t айнымалысының сипатталуында келтірілмесе, онда t атты жаңа автоматты айнымалы пайда болады. Сонымен t атты сыртқы айнымалы бұл функциялар- да белгілі болмайды. Егер pr() функциясында t айнымалысының сипатталуында extern деген сөз жазылмаса, онда main()функциясында орналасқан t айнымалысы ешқашан жаңа мəн қабылдай алмайды.Статикалық айнымалылардың қолданылу аймағы локальді болады, ал оның автоматтық айнымалылардан өзгешелігі: егер осы айнымалыны сипаттаған функция өз жұмысын аяқтаса да, статикалық айнымалылар мəні жойылмайды. Функцияны бір шақырғаннан оны келесі ша- қырғанға дейін компилятор статикалық айнымалының бұрынғы мəндерін есте сақтайды. Мысалы:

#include <stdio.h>

int fun()

{ int av=1;

static int stv=1;

printf("av=%d stv=%d\n",av++,stv++);

}

main()

{ for(int k=1; k<=3; k++)

{ printf("%d-шы адым: ",k); fun(); }

getch();

}

Бұл программаның жұмыс нəтижесі:

1-адым: av=1 stv=1

2-адым: av=1 stv=2

3-адым: av=1 stv=3

Регистрлік айнымалыларды register түйінді сөзі анықтайды. Əдетте программада сипаттала-тын айнымалылар ЭЕМ жадында сақталады,ал регистрлік айнымалылар процессордағы регистр-лерде сақталады. Осындай айнымалыларды пайдаланғанда, программаның жұмысы жылдамырақ орындалуы тиіс. Жалпы жағдайда регистрлік айнымалылар автоматтық айнымалыға ұқсас. Егер регистрлік айнымалы программада сипатталса, осы сәтте бір регистр бос болса, онда компилятор керекті мәнді осы регистрде сақтайды деп саналады. Ал егер келтірілген талапты орындауға мүмкіндік болмаса, онда регистрлік айнымалы автоматтық айнымалы ретінде пайдаланылады.

8.Жиымдарды сипаттау және жиым элементтерін енгізу-шығару.

Массив немесе жиым – бір типтегі элементтердің реттелген жиыны. Олар бір атаумен – идентификатормен аталады да, индексті айнымалы ұғымына сəйкес келеді. Мысалы, мынадай тізбек

0 1 1 2 3 5 8 13 21

Фибоначчи тізбегінің 9 элементін құрайды (алғашқы екі санды таңдап алып, келесі санды алдыңғы екеуін қосу жолымен алады), математикада a9 = 0,1,1,2,3,5,8,13,21.

Си тілінде осы тізбекке сай жиымды сипаттап, оған бастапқы мән беріп инициалдау үшін былай жазамыз:

int fib[8]={0,1,1,2,3,5,8,13,21}; немесе

int fib[]={0,1,1,2,3,5,8,13,21}; мұндағы fib – жиым аты, оның элементтері типі int, ал ұзындығы – 9, жиым элементтерінің индек-стері 0-ден бастап нөмірленеді, сол себепті 9 элемент 8 индекспен көрсетіледі. Мəндері көрсетілсе,

Ал былай болса,

int fib[8]={0,1,1,2,3};

қалған элементтер 0 болып саналады.

n=10; k=2; fib[n-k]={0,1,2,3}; деп те жазуға болады. Жоғарыдағы тізбектің 3-ші элементін бір бүтін айнымалыға меншіктеу үшін былай жазамыз.

int а=fib[3]; // а = 2

Жиымды сипаттау кезінде оның ұзындығы нақты санмен көрсетіледі, мыс., a[20], a[n] деп жазу үшін алдын ала #define n 20 жолы көрсетіледі немесе const n=20; болып жазылады.

Жиым элементтерін енгізу/шығару

Жиым элементтерін енгізу немесе оларды түрлендіру үшін цикл операторы қолданылады. Төменде 10 элементі бар жиымды 0-ден 9-ға дейінгі сандармен толтырып, сонан кейін оларды кері бағытта экранға шығару мысалы көрсетілген:

main ()

{int a[10];

int i;

for (i = 0; i<10; i++)

a[i] = i;

for (i = 9; i>=0; i--)

printf(“ % i”, a[i]);

}

Си тілінде жиымды жиымға бірден теңестіруге болмайды, мыс., а0, а1, а2, ... , а9 жəне с0, с1, с2, ... , с9 жиымдары үшін а=c деп жазуға болмайды. Олардың элементтерін цикл ішінде бір-біріне біртіндеп теңестіру керек.

int a[9], c[9];

…

a=c; // қате

Мұның орнына мынадай цикл жазу керек:

int a[9], c[9];

for (int i=0; i<9; ++i)

a[i]=c[i];

9.Жиымдарға кездейсоқ сандарды енгізу тәсілдері.

Си тілінде кездейсоқ сандар беретін функция бар. int rand() – 0..RAND_MAX=32767 аралығынан кез келген кездейсоқ бүтін сан береді. функцияны пайдалану <stdlib.h> файлы арқылы орындалады. Мысалы:

//a[n], n енгізіледі

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]