Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТехПр / Документ Microsoft Office Word (3)

.docx
Скачиваний:
13
Добавлен:
24.03.2016
Размер:
76.88 Кб
Скачать

2) Scanf() енгізу функциясы жоғарыда қарастырылған түрлендіру спецификациясының көбін пайдаланады.

scanf (,);

Аргументтер ретінде адрес нұсқауыштары пайдаланылады.

Мысалы:

scanf("%d%f", &x,&y);

Кейбір айырмашылықтарын атап өтейік.

%е және %f спецификациялары енгізу кезінде бірдей болып табылады;

short типті бүтін санды енгізу кезінде %h спецификациясы қолданылады.

ЕСКЕРТУ. Айнымалы адресін беру үшін адрестерді жазғанда, айнымалы адресін анықтау үшін & символы қолданылады. Ал тіркестік (жолдық) айнымалыны енгізгенде, & символы жазылмайды.

Жол енгізуден бір мысал келтірейік.

/* Жол енгізу мысалы */

main()

{

char name [15];

clrscr();

printf("\n‚Ввод имени \n");

scanf("%s",name);

printf("Автором программы является %s\n",name);

}[kgl]

Си тілі операторлары

«Өрнек» немесе меншіктеу операторы

Құрама операторлар

Типтерді түрлендіру

Келтіру операциясы

Логикалық оператор

Таңдау операторлары

«Өрнек» немесе меншіктеу операторы

Кез келген ; таңбасымен аяқталатын өрнек меншіктеу операторы болып табылады. Өрнек-тің бір түріне бос оператор жатады, ол жай ; операторы.

Мысалдар:

y=1.5e3;

i++;

a+=2;

m1: ;

x=a+b-sin(2*alfa);

;

Құрама операторлар

Құрама операторларға жай құрама операторлар және блоктар жатады. Екеуі де жүйелі жақшаға алынып жазылады. Блокта жай құрама операторларға қарағанда, айнымалыларды сипат-тау жолдары болады.

Мысалы:

{

n++; жай құрама оператор

summa+=n;

}

{

int n=0;

n++; бұл блок

summa+=n;

}

Типтерді түрлендіру

Егер өрнекте әр түрлі типтегі сандар мен айнымалылар қолданылса, онда олар жалпы бір типке түрлендіріледі. Біз қарастырған барлық негізгі типтер ішінде төменнен жоғары қарай бағытталған түрлендірілу реттілігі бар. Егер оларды оңған солға қарай реттеп орналастырсақ, мынадай болып шығады:

char ® short ® int ® long ® float ® double

Оң жақтағылары сол жақтағылардан жоғары дәрежелі болып табылады.

Егер char мен short типтері араласса, нәтижесі – chort болады, ал short пен int типтері араласса, нәтижесі – int болады, т.с.с. float пен double типтері араласса, нәтижесі double болады.

Егер операция екі түрлі типтегі мәліметтер үшін орындалатын болса, онда олар осы мәлімет-тер типтерінің арасындағы “жоғарғы” типке кел-тіріледі.

“Жоғары” типтен бастап, “төмен” типке дей-ін реттелген типтер аттарының тізбегі келесідей түрде көрсетіледі:

double

float

long

int

short

char

3. Меншіктеу операторында оң жақта орналасқан өрнектің есептелген нәтижесі осы оператордың сол жағына жазылған айнымалының типіне келті-ріледі. Осындай процесс типтің “жоғарысына” немесе “төменіне” келтірілуі мүмкін.

Мысалы:

main ()

{

char ch; int i; float fl;

fl=i=ch='A';

printf("ch=%c i=%d fl=%6.2f\n",ch,i,fl); // ch=A i=65 fl= 65.00

ch=ch+1; // ch=66

i=fl+2*ch; // i=65.00+2*66=197

fl=2.0*ch+1; // fl=2*66+1=133

printf("ch=%c i=%d fl=%6.2f\n",ch,i,fl);

}//ch=B i=197 fl=133.00

Келтіру операциясы

Жоғарыда көрсетілген типтердің түрлендірілуі автоматты түрде орындалады. Мәліметтердің көр-сетілген қажетті типіне келтіру үшін Си тілінде ар-найы бір тәсіл бар. Бұл тәсілде типтердің келтірілуі келесідей түрде қолданылады: айнымалының ал-дында дөңгелек жақшада қажетті типтің аты жазы-лады. Жалпы түрге келтіру операциясы мынадай болып жазылады: (тип)өрнек.

Мысалы:

int m;

float x,y;

y=pow(x,2)+sqrt((double)m);

Логикалық оператор

Қатынас операциялары екі мәнді салыстыру үшін қолданылады: ==,!=,,>=

Егер қарастырылатын қатынас нәтижесі ақи-қат болса, шарттық өрнектің мәні 1-ге тең болып саналады. Егер ол жалған болса, шарт-тық өрнек мәні 0-ге тең. Қатынас операциясы-ның приоритеті арифметикалық операциялар-ға қарағанда, төмен және меншіктеу операто-рымен салыстырғанда жоғары болады.

Екі немесе бірнеше шарттық өрнектерді біріктіру үшін логикалық оператор қажет.

Си тілінде келесі логикалық операторлар бар

және (&&) операциясы f1 && f2

немесе | | (or) операциясы f1 || f2

терістеу (not) операциясы !f1

Терістеу (емес, қарсы) операциясының приорите-ті өте жоғары, одан тек жақша ішіндегі мәндер-дің приоритеті жоғарылау болады. && операция-сының приоритеті || (or) операциясымен салыс-тырғанда жоғары, ал осы екеуінің приоритеттері қатынас операцияларымен салыстырғанда төмен, меншіктеу операциясынан жоғары болады.

Таңдау операторлары

Таңдау операторлары – бұлар шартты оператор және ауыстырғыш (переключатель) оператор.

Шартты оператордың толық және қысқа түрі бар.

if (шарт-өрнек) оператор; //қысқа түрі

Шарт-өрнек ретінде арифметикалық өрнек, қатынас немесе логикалық өрнек жазылады. Егер шартты өрнек мәні нөлге тең (яғни ақиқат болса) болмаса, онда оператор атқарылады.

Мысалы:

if (x if (шарт-өрнек) 1-оператор; //толық түрі

else 2-оператор;

Егер шартты өрнек мәні нөлге тең (яғни ақиқат болса) болмаса, онда 1-оператор атқарылады, ал ол нөлге тең болса, онда 2-оператор орындалады.

Мысалы:

if (d>=0)

{

x1=(-b-sqrt(d))/(2*a);

x2=(-b+sqrt(d))/(2*a);

printf(“\nx1=%5.2f x2=%5.2f”,x1,x2);

}

else printf(“\nШешуі жоқ”);

Цикл операторлары

Шартты операция

While цикл операторы

FOR цикл операторы

Do while цикл операторы

Шартты операция

Шартты операция (? :) шартты өрнек жазуға мүмкіндік береді, яғни берілген шартқа байла-нысты әр түрлі мән қабылдайтын шартты өр-нектер құрады. Бұл операция үшорынды бо-лып табылады. Егер оның шарты (бірінші операнды) ақиқат болса, өрнек мәні екінші операндқа тең; егер жалған болса, онда — үшіншіге тең.

Мысалы:

max_ab = a > b? a : b;

2. While цикл операторы

Шарты алдын ала тексерілетін цикл схемасы:

Оның жазылуы:

While (шарт-өрнек)

{

1 оператор;

2 оператор;

......

N оператор;

}

Мұнда шарт-өрнекке кіретін айнымалы цикл ішінде өзгеріп отырады.

Мысалы:

/* y=f(x) функциясының мәндерін х х0-ден xk-ға дейін dx қадаммен өзгергенде анықтау керек for6.cpp*/

#include

#include

main ()

{

float x,y,x0,xk,dx;

int k; int n; clrscr();

printf(“x0,xk,dx= “);

scanf("%f%f%f",&x0,&xk,&dx);

printf("----------------------\n");

printf(" x | y\n");

printf("----------------------\n");

x=x0;

while (x { y=-2.4*x*x+5*x-3; printf("%6.2f | %6.2f\n",x,y);

x=x+dx;

}

printf("----------------------\n");

getch();

}

Мысалы:

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

#include

#include

main ()

{

int s=0,k;

clrscr();

printf("1-ден 100-ге дейінгі сандар қосындысы\n");

k=1;

while (k { s+=k;

k++;

}

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

getch();

}

FOR цикл операторы

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

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

for(x=x0;x {

;

;

. . .

;

}

Мұндағы өрнек1: x=x0; – цикл айнымалысының бастапқы мәні, өрнек2: x

Мысалы:

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

#include

#include

main ()

{ int s=0,k;

int n;

clrscr();

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

scanf("%d",&n);

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

for (k=1;k s+=k;

printf(" %d",s);

getch();

}

For цикл операторында өрн3 ретінде жалпы дұрыс жазылған кез келген өрнекті пайдалануға болады.

Мысалы:

for (d=0.1; d printf(“%f”,d);

For цикл операторында бір немесе бірнеше өрнектерді жазбауға да болады, бірақ мұндайда ; символын міндетті түрде өз орындарына жазып отыру керек, мысалы:

x=2;

for(n=4; x x=x*n;

For цикл операторында құрама өрнектер-ді «,» операциясы арқылы жазуға да бола-ды,мұндайда бөлектенген өрнектер солдан оңға қарай есептеледі.

Мысалы:

int x,y;

for (x=1,y=9;x printf(“%d%d\n”, x,y);

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

Мысалы:

/*көбейту кестесі */

# include

#include

main ()

{int m;//көбейту кестесі шығарылатын сан

int n; // көбейткіш

int p; // көбейтінді

clrscr();

printf(“керекті сан енгізіңіз:");

scanf("%d",&m);

printf("%i санының көбейту кестесі\n",m);

for (n=1;n {p=m*n;

printf("%ix%i=%i\n",m,n,p);

}

getch();

}

Нәтижесі:

5 санының көбейту кестесі

5х1=5

5х2=10

5х3=15

5х4=20

5х5=25

5х6=30

5х7=35

5х8=40

5х9=45

Мысалы:

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

#include

#include

main ()

{

int i,n;

long p;

clrscr();

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

scanf("%d",&n);

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

// long int спецификаторы --li

getch();

}

2-нұсқа мәтіні:

//n!,1-ден n-ге дейінгі сандарды көбейту

#include

#include

main ()

{

int n;

clrscr();

printf("n= ");

scanf("%d",&n);

for (float k=1,p=1; k printf(" %2.0f!= %-13.0f\n",k,p);

puts("Enter басу керек\n");

getch();

}

Мысалы:

//бақытты билеттер (123 060, 561 750, т.с.с.)

#include

#include //аялдауға қажет препроцессор

main()

{ int a,b,c,x,y,z;

for (a=0; a for (b=0; b for (c=0; c for (x=0; x for (y=0; y for (z=0; z if (a+b+c==x+y+z)

{printf("%i%i%i%i%i%i\t",a,b,c,x,y,z);

delay(100);}

}

g> Do while цикл операторы

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

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

do

{

1-оператор;

2-оператор;

… … …

n-оператор;

}

while (өрнек);

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

Мысалы:

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

#include

main ()

{

int a, max, i=1;

max = -32000; //max басында ең кіші санға тең болады

do

{

printf(“сан енгізіңіз: “);

scanf("%d",&a);

if (a > max) max = a;

i++;

}

while (i printf(“\n15 санның ең үлкені=%i",max);

getch();

}

Мысалы:

Қосынды табу s =дәлдігі e=10-5

#include

#include

#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();

}

Көшу операторлары

Break операторы

Программа орындалуы кезінде цикл аяқталмай-ақ одан шығу үшін break операторы қолданылады. Егер бұл оператор бірі-нің ішіне бірі енгізілген қабаттасқан цикл ішінде орналасса, онда ол ішкі циклдан оның сыртқы циклына шығуды ғана жүзеге асырады.

Мысалы:

Екіөлшемді массивтен – A[5,5] бірөлшемді массив – B[5] құрастыру керек. Оны түрлендіру ережесі: егер осы жолда бір теріс элемент болса, онда B[i]=1, әйтпесе B[i]=0 болуы тиіс.

for (i=0;i { b[i]=0;

for (j=0;j if (a[i][j] { b[i]=1; break; }

}

Continue операторы

Программа орындалуы кезінде цикл аяқталмай-ақ одан шығып, қалған операторларды аттап өтіп, осы цикл параметрінің келесі мәніне көшу үшін continue операторы қолданылады, яғни циклдің келесі итерациясына – қадамына басынан бастап ауысу жүзеге асырылады.

Мысалы:

Екіөлшемді массив – A[5,5] берілген. Осы массивтегі теріс элементтердің санын анықтайтын және оларды квадраттайтын программа құру керек.

k=0;

for (i=0;i for (j=0;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;

Варианттар:

200-ге дейінгі 3-ке қалдықсыз бөлінетін бүтін сандардың қосындысын табу керек.

100-ге дейінгі жұп оң сандардың қосындысын табу керек.

200-ге дейінгі тақ оң сандардың қосындысын табу керек.

20-дан үлкен және 100-ден кіші 3-ке қалдықсыз бөлінетін оң сандардың қосындысын табу керек.

Жалпы мүшесі көрсетілген өрнекке сәйкес қатар қосындысын e=10-4 дәлдігімен анықтау керек.

Си тілі элементтері.

Switch ауыстырғыш операторы

switch ауыстырғыш операторы программада кездесетін бірнеше (екіден артық) нұсқаның бірін таңдап алу керек болған жағдайда қолданылады.

Оператордың жалпы жазылуы:

switch ;

{

case белгі1: операторлар; break;

case белгі2: операторлар; break;

................

case белгіN: операторлар; break;

default: операторлар;

}

Оператордың орындалу схемасы:

Мұнда switch сөзінен кейінгі өрнек мәні есептеледі, ол бүтін санды (char типі де) типте болуы тиіс. Сол мән case сөздерінен кейін жазылған константалар мәндерімен салыстырылады. Егер олардың біріне тең болса, сол жол орындалады, жол соңында көшу операторы болмаса, келесі жолдар толық орындалады. Ал бір жолды орындап болған соң, switch операторынан шығу үшін break операторы қолданылады. Егер switch сөзінен кейінгі өрнек мәні ешбір константамен сәйкес келмесе, онда default сөзінен кейінгі операторлар атқарылады. Кейде default сөзі болмауы да мүмкін.

Егер default сөзі болмаса, онда switch операторынан кейінгі келесі жолдар орындала береді.

Switch операторындағы өрнек түрінде нақты типтегі мәліметтерді, сөз тіркестерін (жолдарды) пайдалануға болмайды.

Нөмірлеріне сәйкес апта күндерінің атауларын шығару мысалы:

1 енгізілсе, дүйсенбі сөзі,

2 енгізілсе, сейсенбі сөзі,

..........

7 енгізілсе, жексенбі сөзі шығарылады.

#include

#include

main()

{ int i;

printf("\n1-7 арасында бүтін сан енгіз: " );

scanf("%i",&i);

switch(i)

{

case 1: printf("\nдуйсенбі");break;

case 2: printf("\nсейсенбі");break;

case 3: printf("\nсарсенбі");break;

case 4: printf("\nбейсенбі");break;

case 5: printf("\nжұма");break;

case 6: printf("\nсенбі");break;

case 7: printf("\nжексенбі");break;

default: printf(“Сан 1-7 арасында болуы керек");

}

getch();

}

Көбейту кестесін шығару программасы:

int i;

printf("\n1-9 арасында бутін сан енгіз:" );

scanf("%i",&i);

switch(i)

{

case 1: printf("\n%dx1=%d",i,1*i);

case 2: printf("\n%dx2=%d",i,2*i);

case 3: printf("\n%dx3=%d",i,3*i);

case 4: printf("\n%dx4=%d",i,4*i);

case 5: printf("\n%dx5=%d",i,5*i);

case 6: printf("\n%dx6=%d",i,6*i);

case 7: printf("\n%dx7=%d",i,7*i);

case 8: printf("\n%dx8=%d",i,8*i);

case 9: printf("\n%dx9=%d",i,9*i);

default: printf(“Сан 1-9 арасында болуы тиіс");

}

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

1 енгізілгенде мыналар шығарылады:

1x1=1

1x2=2

1x3=3

1x9=9

2 енгізілгенде мыналар шығарылады:

2x2=4

2x3=6

2x9=18

9 енгізілгенде мыналар шығарылады:

9x9=81

Шығыс күнтізбесі бойынша жыл нөмірінің жануарлар атына сәйкестігін анықтау мысалы:

{ int god;

printf(“Введите год: ");

scanf("%i",&god);

switch (god % 12)

{ case 0 : printf("год Обезьяны");break;

case 1 : printf("год Петуха"); break;

case 2 : printf("год Собаки"); break;

case 3 : printf("год Свиньи"); break;

case 4 : printf("год Крысы"); break;

case 5 : printf("год Коровы"); break;

case 6 : printf("год Тигра"); break;

case 7 : printf("год Зайца"); break;

case 8 : printf("год Дракона"); break;

case 9 : printf("год Змеи"); break;

case 10 : printf("год Лошади"); break;

case 11 : printf("год Овцы"); break;

default: printf("Введите целое без знака");

}

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

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

ЭЕМ жадының класы (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;

Автоматтық айнымалыларды осындай етіп міндетті түрде сипаттау қажет емес. Егер айнымалы бір блок (функция басында) ішінде сипатталатын болса және оның класы көрсетілмесе, ол келісім бойынша автоматтық айнымалы болып саналады.

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

Соседние файлы в папке ТехПр