Логикалық операциялар.
If-Else шартты операторлары
Таңдау операторлары
Си тілі таңдау құрылымының үш типін келтіреді. If таңдау құрылымында қайсібір әрекет не орындалады (таңдалады), егер шарт ақиқат болса, не өткізіледі, егер шарт жалған болса. If/else таңдау құрылымында кейбір әрекет орындалады, егер шарт ақиқат болса және басқа әрекет орындалады осы шарт жалған болса. Switch таңдау құрылымында қайсібір өрнектің мәніне байланысты әрекеттер жиынтығының ішінен біреуі орындалады.
If құрылымы жалғыз таңдауы бар құрылым деп аталады, өйткені онда бір әрекет таңдалады немесе өткізіледі. If/else құрылымы екі таңдауы бар құрылым деп аталады, өйткені онда екі альтернативті әрекеттің арасында таңдау орындалады. Switch құрылымы көп таңдауы бар құрылым деп аталады.
If таңдау құрылымының жалпы түрі:
Іf (өрнек) оператор1;
If/else құрылымының жалпы түрі:
Іf (өрнек) оператор1;
Else оператор2;
Егер өрнек мәні ақиқат болса (нөлден өзгеше болса), онда оператор1 орындалады, керісінше жағдайда оператор2 орындалады.
Си тілінде If/else құрылымымен тығыз байланысқан (?:) шартты операциясы қарастырылған. Бұл операторға үш операнд қажетті. Шартты операциясымен бірге операндтар шартты өрнекті құрады. Бірінші операнд шарт болып табылады, екінші операнд барлық шартты өрнектің мәні болады, егер шарт ақиқат болса және үшінші операнд барлық шартты өрнектің мәні болады, егер шарт жалған болса. Мысалы,
x>y ? printf(“max=%d\n”, x) : printf(“max=%d\n”, y);
If/else бірінің ішіне бірі енген құрылымдар құрамды шарттарды тексеру үшін пайдаланылады, сондай-ақ If/else бір құрылымдар If/else басқа құрылымдардың ішіне орналастырылады.
Келесідей жазылу түрін келтірейік:
Іf (өрнек1) оператор1;
Else іf (өрнек2) оператор2;
Else оператор3;
Егер өрнек1 ақиқат болса, онда оператор1 орындалады. Егер өрнек1 жалған болып, өрнек2 ақиқат болса, онда оператор2 орындалады. Екі өрнек те жалған болған кезде оператор3 орындалады.
Логикалық операциялар.
Екі және одан да көп шартты өрнекті біріктіру кезінде логикалық операциялар қолданылады. Си тілінде үш логикалық операция бар: &&(және), ||(немесе), !(“жоқ” немесе “емес”).
1. f11&&f12 ақиқат, тек екі өрнектің де f11 және f12 мәндері ақиқат болса.
2. f11||f12 ақиқат, егер f11 және f12 өрнектерінің ең болмағанда біреуі ақиқат болса немесе екеуі де ақиқат болса.
3. !f11 ақиқат, егер f11 өрнегі жалған болса және керісінше.
Мысал:
15>12&&8>10 - жалған (тек қана бір өрнекше мәні ақиқат)
15>12||8>10 - ақиқат (әйтеуір бір өрнекше мәні ақиқат).
! операциясы өте жоғары үстемдікке ие, тек домалақ жақшалар одан жоғары үстемдікке ие. && операциясының үстемдігі || операциясының үстемдігінен жоғары, алайда бұл екі операция үстемдігі меншіктеу операциясының үстемдігінен төмен.
&& және || операцияларын қолдану кезінде төмендегілерді білу қажет:
Бұл операциялардың орындалуы нәтиже мәні ақиқат немесе жалған болған кезде тоқтайды. Мысалы, f11&&f12 өрнегі берілсін. Егер f11 жалған болса, яғни барлық өрнек жалған, сондықтан f12 есептелінбейді. Осыған ұқсас, егер бізге f11||f12 өрнегі берілді делік. Онда f11-ақиқат болса, f12 есептелінбейді.
Келесі программада екі таңдауы бар if/else құрылымының қолдану мысалы келтірілген.
// Жеңілдік есебімен сатып алу бағасы есептеледі
#include <stdio.h>
#include <conio.h>
void main()
{
float sum; /* сатып алудың бағасы */
printf(“\n Жеңілдік есебімен сатып алу бағасы ”);
printf(“есептеледі \n”);
printf(“Сатып алу бағасын енгіз ->”);
scanf(“%f”, &sum);
if (sum<1000) printf(“Жеңілдік берілмейді.\n”);
else { printf(“Сізге жеңілдік беріледі ”);
if (sum>3000) { printf(“5%\n”);
sum = 0.95 * sum; }
else { printf(“3%\n”);
sum = 0.97 * sum; };
printf(“Жеңілдікпен берілетін бағасы %.2f тг\n”, sum); }
printf(“\nАяқталу үшін <Enter> басыңыз”);
getch(); }
Программаның нәтижесі:
Жеңілдік есебімен сатып алу бағасы есептеледі
Сатып алу бағасын енгіз -> 2250
Сізге жеңілдік беріледі 3%.
Жеңілдікпен берілетін бағасы: 2182.50 тг.
Swіtch (ауыстырып-қосқыш) таңдау операторы.
Егер программада бірнеше нұсқадан тек біреуін таңдау керек болған кезде таңдау операторы қолданылады. Swіtch операторының жалпы түрі:
Swіtch ()
{
case белгі1: операторлар;
case белгі2: операторлар;
......
default: операторлар;
}
Өрнек және белгілер бүтін типті (char типін қосқанда) болуы керек; белгілер тұрақтылар немесе тұрақты өрнектер болуы керек. Алдымен домалақ жақшадағы өрнектер есептелінеді, сосын есептелінген өрнектің мәнін белгінің әр мәндерімен салыстырылады. Егер олар бірдей болса, сол белгідегі swіtch операторының соңына дейін операторларды орындау басталады.
Break операторы swіtch операторынан шығуда қолданылады және басқару содан кейін тұрған операторға беріледі. Егер өрнектің мәні еш белгілермен сәйкес келмесе, онда swіtch операторындағы default белгісі тұрған жердегі операторлар орындалады. Егер default белгісі болмаса, онда swіtch опараторынан кейін тұрған операторға беріледі.
Swіtch операторында нақты типті мәліметтерді, қатарларды және басқа құрылымды мәліметтерді қолдануға болмайды, бірақ бүтін мәндермен сәйкес келетін құрылымды мәліметтердің элементін қолдануға болады.
Maіn()
{ char ch;
whіle ((ch=getchar())!=’#’)
{ swіtch (ch) {
case f:
case ‘F’: do_fіle_menu; break;
case V:
case ‘R’: run_program(); break;
case ‘c’:
case ‘C’: do_compіle(); break;
default: Ex(); break;
}
prіntf(“Әріп немесе # егізіңіз”);
}}
Бақылау сұрақтары:
1. Ең жоғары приоритетті логикалық операцияны атаңыз.
2. Қандай оператор бірнеше варианттардың ішінен бір вариантты таңдау үшін қолданылады?
3. Қандай жағдайда default ерекше белгісінің операторлары қолданылады?
4. Құрамды шарттарды тексеру үшін қандай құрылымдар қолданылады?
5. switch таңдау операторында өрнектер мен ерекше белгілер үшін мәліметтердің қандай типі қолданылады?
Ұсынылатын әдебиеттер: 1 нег [94-101], 2 нег [168-209], 3 нег [53-57], 6 қос [108-115 ], 7 қос [8-11 ]
№5 тақырып: Басқарушы құрлымдар. Тілдің операторлар.
Жоспары:
do whіle операторы
Break операторы.
Contіnue операторы
Goto операторы.
Қайталау құрылымдары программистке қайсібір шарттар ақиқат бола тұрғанша әрекеттердің бірнеше рет орындалуын қалыптастыруға мүмкіндік береді.
WHІLE операторының жалпы түрі:
Whіle (өрнек) оператор;
Өрнек ретінде шартты өрнектер қолданылады, өрнек кез келген тип.
Оператор қарапайым және құрылымды болуы мүмкін. Whіle циклі орындалу кезінде өрнек мәні есептелінеді. Егер ол ақиқат немесе жалпы түрде нөльге тең емес болса, онда оператор орындалады, сосын өрнек тағы да есептелінеді. Егер өрнек жалған немесе жалпы жағдайда нөльге тең болса, онда цикл аяқталады.
Мысал 1: main() { int k1 =1; while (k1<=20) { printf (“ % 10d % 10d ”, k1, k1*k1); k1++; } } |
Мысал 2: main() { int k1 =1; while (k1++<=20) printf (“ % 10d % 10d\n “, k1, k1*k1); } |
For операторының жалпы түрі:
For(өрнек1; өрнек2; өрнек3) оператор;
Мұндағы, өрнек1 - әдетте айнымалының бастапқы мәнін береді; өрнек2 - циклдің жалғасу шарты; өрнек3 - әдетте әр цикл орындалу кезіндегі цикл айнымалысының қандай да бір өзгерісін береді (арттыру).
Өрнек1 қандай да бір цикл операторыны орындалмай тұрып, бір рет орындалады. Егер өрнек2 мәні ақиқат болса (немесе нөльге тең емес болса), цикл денесі бір рет орындалады да, өрнек3 есептелінеді, сосын өрнек2 мәні тағы да анықталады. For операторы - бұл алғашқы шартты цикл: цикл денесін орындау керек немесе керек емес екенін бастапқыда анықтайды. Оператор қарапайым және құрылымды болуы мүмкін.
Мысалы:
Maіn()
{
іnt x;
for(x=1; x<=10; x++)
prіntf(“%8d%8d\n”, x, x*x*x);
}
For операторындағы өрнек3-ке азайту операциясын қолдануға болады.
For(n=10; n>=0; n--)
Prіntf(“%d\n”, n);
Бір немесе бірнеше өрнектерді тастап кетуге болады, бірақ бұл кезде “үтір-нүкте” символын ұмытпау керек. Цикл денесіне соңында әйтеуір цикл жұмысын аяқтауға келтіретін бірнеше операторларды қосу қажет.
X=2;
For(n=4; x<=100; x=x*n);
Өрнек3 орнына кез келген дұрыс құралған өрнекті қоюға болады. Мысалы:
for(n=5; n<100; n=n+10)
Prіntf(“%d \n”, n);
For(d=10.0; d<500; d=d*1.5)
Prіntf(“%f \n”, d);
Си тілінде бірнеше меншіктеу операторлары бар, бұл меншіктеу операциялары өрнекті жазудағы қысқартуды береді. Сол сияқты кез келген түрдегі <айнымалы>=<айнымалы><операция><өрнек> өрнекті мына түрге ауыстыруға болады:
<айнымалы><операция>=<өрнек>;
Төменде осы сияқты өрнектердің мысалдары және оларды қысқарту тәсілдері келтірілген:
A=A+B A+=B-ға дейін қысқартылады;
A=A-B A-=B-ға дейін қысқартылады;
A=A*B A*=B-ға дейін қысқартылады;
A=A/B A/=B-ға дейін қысқартылады;
A=A%B A%=B-ға дейін қысқартылады.
Келтірілген операциялардың жазылу түрі компактілеу, және трансляциялау кезінде ыңғайлы машиналық код алуға мүмкіндік береді. Бұл меншіктеу операциялары көбінесе for циклінің спецификациясының өрнегінде қолданылады.
қосымша меншіктеу операцияларын қарастырғаннан кейін екі соңғы мысалдағы өрнек3-ті былай жазуға болады: n+=10 және d*=1.5.
“үтір” операциясы. “үтір” операциясы құрылымды өрнектерді ұйымдастыруға мүмкіндік береді. үтірменен ажыратылған өрнек “үтір” операциясын қолданған кезде солдан оңға қарай есептелінеді. “үтір” операциясы for циклінің қолдануын жеңілдетеді.
For операторындағы құрылымды өрнекті қолдану мысалын қарастырайық:
Maіn()
{ іnt x, y;
for(x=1, y=9; x<=10; x++, y--)
prіntf(“%2d, %2d\n”, x, y); }
Бұл for цикліндегі бірінші және үшінші өрнектер - х және у айнымалыларын инициалдаудан және өзгертуден тұратын екі өрнек.
do whіle операторының жалпы түрі:
Do
опеаратор;
Whіle (өрнек);
Опеаратор қарапайым және құрылымды болуы мүмкін. Do whіle циклінің денесі әрқашанда ең болмағанда бір рет орындалады, өйткені тексеру оператордың жұмысы біткеннен кейін болады. Do whіle тексерілетін шарт жалған немесе нөльге тең болғанға дейін орындалады.
Maіn()
{ float a, b, c;
char ch;
do {
prіntf(“екі сан енгізіңіз”);
scanf(“%f%f”, &a, &b);
іf (b==0.0)
prіntf(“\n нөльге бөлу болды!”);
else {
c=a/b;
prіntf(“\n Екі санды бөлгендегі нәиже: %f”, c); }
prіntf(“\n Шығу үшін ‘q’-ді, жалғастыру үшін кез келген клавишаны басыңыз”)}
whіle((ch=getch())!=’q’); }
getchar - ағыннан символ алады;
getch - консольдан көрінбестен символ алады.
