1-3 декция. Лекция C тіліні операциялары, операторлары Сратар C тіліні негізгі операциялары 1 Бірге арттыру немесе кеміту Арифметикалы амалдар
Скачать 288.62 Kb.
|
1 -лекция C++ тілінің операциялары, операторлары Сұрақтар: 1. C++ тілінің негізгі операциялары 1.1 Бірге арттыру немесе кеміту 2. Арифметикалық амалдар 3. Екілік разрядтар бойынша операциялар 4. Қатынас операциялары 5. Логикалықоператор 6. Таңдауоператорлары 7. Қабаттасқан шартты операторлар 8. Шарттыоперация 9. Switch ауыстырғыш операторы 1. C# тілінің негізгі операциялары Төменде C# негізгі операциялары олардың приоритеттері бойынша берілген. Операндтарының санына қарай олар унарлық, бинарлық және тернарлық болып бөлінеді.
1.1 Бірге арттыру немесе кеміту (инкремент және декремент) операциялары ++ және – – түрінде жазылады. Бұлар кез келген операндтың мәндерін бірге арттыруға немесе кемітуге мүмкіндік береді.
i++; немесе ++i; Бұл екеуі де мынадай амалмен бірдей болып саналады i = i + 1;
sum = sum + х * --i; k=10; x=k++; // алдымен x=10, артынан k=11 x=++k; // алдымен k=12, артынан x=12
s = a+b++; // 1)s=a+b 2)b=b+1 s = a+ ++b; // 1)b=b+1 2)s=a+b s = a++ + +b; // 1)s=a+b 2)a=a+1 t = --a + b--; // 1)a=a-1 2)t=a+b 3) b=b-1 t = a-- - b--; // 1)t=a-b 2)a=a-1 3) b=b-1 // Инкремент (++) және декремент (--) операциялары using System; namespace Increment1 { class Program { static void Main() { int x = 3, y = 3; Console.Write("Prefix opnek mani: "); Console.WriteLine( ++x); Console.Write(" х-ting natigelik mani: "); Console.WriteLine( x); Console.Write("Postfix opnek mani: "); Console.WriteLine( y++); Console.Write(" y-ting natigelik mani: "); Console.WriteLine( y); } } } Программа жұмысы нәтижесі: Prefix opnek mani: 4 х-ting natigelik mani: 4 Postfix opnek mani: 3 y-ting natigelik mani: 4 2. Арифметикалық амалдар Көбейту операциясы int, uint, long, ulong, float, double, decimal тәрізді арифметикалық типтегі операндтарға қолданылады. Бөлу операциясы да жоғарыдағы арифме-тикалық типтегі операндтарға қолданылады. Егер екі операнд та бүтін сан болса, бөлінді де бүтін сан болады, әйтпесе бөлінді типі типтерді түрлендіру ережесіне сәйкес тағайындалады. int a=1, b=6, c=3, d; d = ++a- --b + c++ -2; // a=a+1=2, b=b-1=5 // d=2-5+3-2=-2, c=c+1=4 Қалдық табу (%) операциясы көбінесе бүтін типтегі шамаларға қолданылады. Егер екі операнд та бүтін сан болса, нәтиже x-(x/y)*y формуласымен анықталады. Егер бір операнд нақты сан болса, нәтиже x-n*y (n – х-ті у-ке бөлгендегі бүтін сан) формуласымен анықталады. Мысалы: using System; namespace ConsoleApplication1 { class Program { static void Main() { int x = 11, y = 4; float z = 4; Console.WriteLine(x % y); // Нәтиже 3 Console.WriteLine(y % x); // Нәтиже 4 Console.WriteLine(z * y); // Нәтиже 16 Console.WriteLine(x / y); // Нәтиже 2 Console.WriteLine(x / z); // Нәтиже 2,75 Console.WriteLine(1e-324 / 1e-324); // Нәтиже NAN }}} // Not A Number Программа жұмысының нәтижесі: 3.Екілік разрядтар бойынша орындалатын операциялар ( &, | , ^ ) тек бүтін санды типтегі екілік жүйедегі операндтар-ға қолданылады. Бұл операцияларды орындау барысында оп-ерандтар биттер бойынша қарастырылады (бірінші операнд-тың бірінші биті екінші операндтың бірінші битімен, бірінші операндтың екінші биті екінші операндтың екінші битімен, т.с.с. салыстырылады). Бұлар int, uint, long,ulong типтері үшін анықталған. Разрядтық конъюнкцияда немесе разрядтық ЖӘНЕ (операция & болып белгіленеді) операциясында логикалық көбейту амалы орындалады да, тек екі операндтың да сәйкес орындардағы разрядтары 1-ге тең болған жағдайда нәтижелік бит 1-ге тең болады. 1-операнд 1 0 1 0 0 1 1 2-операнд 1 1 0 1 0 1 Нәтиже 0 0 1 0 0 0 1 1-операнд 0 0 1 1 2-операнд 0 1 0 1 Нәтиже 0 0 0 1 Разрядтық дизъюнкцияда немесе разрядтық НЕМЕСЕ (операция | болып белгіленеді) операциясында логикалық қосу амалы орындалады да, екі операндтың тек біреуінің немесе екеуінің де сәйкес орындардағы разрядтары 1-ге тең болған жағдайда нәтижелік бит 1-ге тең болады. Разрядтар бойынша аластайтын НЕМЕСЕ (операция ^ болып белгіленеді) операциясында екі операндтың тек біреуінің ғана сәйкес орындарындағы разряды 1-ге тең болған жағдайда нәтижелік бит 1-ге тең болады. 1-операнд 1 0 1 0 0 1 1 2-операнд 1 1 0 1 0 1 Нәтиже 1 1 1 0 1 1 1 1-операнд 0 0 1 1 2-операнд 0 1 0 1 Нәтиже 0 1 1 1 1-операнд 1 0 1 0 0 1 1 2-операнд 1 1 0 1 0 1 Нәтиже 1 1 0 0 1 1 0 1-операнд 0 0 1 1 2-операнд 0 1 0 1 Нәтиже 0 1 1 0 Мысал: using System; namespace ConsoleApplication3 { class Program { static void Main() { Console.WriteLine( 6 & 5 ); // Нәтиже 4 Console.WriteLine( 6 | 5 ); // Нәтиже 7 Console.WriteLine( 6 ^ 5 ); // Нәтиже 3 } } } Программа нәтижесі: 6 & 5 = 4 6 | 5 = 7 6 ^ 5 = 3 1 1 0 1 0 1 1 1 1 1-операнд 1 1 0 2-операнд 1 0 1 Нәтиже 1 0 0 1 1 0 1 0 1 0 1 1 Операция: & | ^ Қатынас операциялары (<, <=, >, >=,==,!=) бірін-ші операндты екінші операндпен салыстырады. Операндтар арифметикалық типтерде болуы тиіс. Операция нәтижесі – true немесе false. Мысалы: x = = y болғанда, x пен у тең болса, нәтиже true x != y болғанда, x пен у тең болмаса, нәтиже true x < y болғанда, x у-тен кіші болса, нәтиже true x > y болғанда, x у-тен үлкен болса, нәтиже true x <= y болғанда, x у-тен кіші не тең болса, true x >= y болғанда, x у-тен үлкен не тең болса, true 4. Қатынас операциялары 5.Логикалықоператор
1) және (&&) операциясы f1 && f2 2) немесе (or) операциясы f1 f2 3) терістеу (not) операциясы !f1 6. Таңдауоператорлары Таңдау операторлары – бұлар шартты оператор және ауыстырғыш (переключатель) оператор. 1. Шартты оператордың толық және қысқа түрі бар. if (шарт-өрнек) оператор; //қысқа түрі Шарт-өрнек ретінде арифметикалық өрнек, қатынас немесе логикалық өрнек жазылады. Егер шартты өрнек мәні ақиқат (true) болса, онда оператор атқарылады. Мысалы: if (x if (шарт-өрнек) 1-оператор; //толық түрі else 2-оператор; Бұл оператор бір әрекетті айналып өтеді if (шарт) оператор; Мысалы: if (x>0) y=2*sqrt(x*x+1); Қысқаша түрдегі тармақталу операторы . оператор жоқ иә шарт? Толық тармақталу операторы жоқ иә шарт? 1-оператор 2-оператор Екі мүмкіндіктің бірі таңдалады: if (шарт) 1-оператор; else 2-оператор; Мысалы: if (x>0) y=2*Math.Sqrt(x*x+x); else y=Math.Exp(x-1); немесе if (x<=0) else y=Math.Exp(x-1); else y=2*Math.Sqrt(x*x+x);
. . . d=b*b-a*c; if (d>=0) { x1=(-b-Math.Sqrt(d))/(2*a); x2=(-b+ Math.Sqrt(d))/(2*a); Console.WriteLine("x1=" + x1); Console.WriteLine("x2=" + x2); } else Console.WriteLine("Sheshui zhoq"); жоқ иә жоқ иә басы а,b,c енгізу a>b? max = a max = b max шығару соңы c >max? max = c 1. Нақты a,b,с сандары берілген. Солардың үлкенін анықтайтын есептің алгоритм схемасы мен программасын құру керек. Есепті шығару алгоритмі 1.1-суретте көрсетілген. Программа коды: static void Main() { float a,b,c,max; Console.Write("Enter a, b, c: "); a=float.Parse(Console.ReadLine()); b=float.Parse(Console.ReadLine()); c=float.Parse(Console.ReadLine()); if(a>b) max=a; else max=b; if(c>max) max=c; Console.WriteLine("max=" + max); Console.ReadKey(); } 1.1 сурет. 3 санның үлкенін табу алгоритмі 2. Нақты x саны берілген. Соның мәніне байланысты керекті у өрнегін есептеп шығару керек. Есепті шығару алгоритмі 1.2-суретте көрсетілген, программа коды: static void Main() {double x,y; const double p=3.14159; Console.Write("Enter x: "); x=double.Parse(Console.ReadLine()); if(x>1) { y=x*x-p*Math.Sin(x); } else if(0 else { y=0; } Console.WriteLine("x={0,5:f2} y={1,7:f2}",x,y); } - - + + y=0 у=x2 - p sinx x, y соңы x енгізу x > 1 у=x2 + x 0 < x 1 басы p = 3,14159 1.5-сурет. Үш тармақ арқылы у-ті табу алгоритмі 7. Қабаттасқан шартты операторлар if және else конструкциялары қабаттасып та қолданыла береді: if (a == 5) { … } else if (a < 5) { … } else { … } if операторын қабаттастыра отырып, күрделі өрнек мәндерін анықтайтын жағдайлар да жиі кездесіп отырады, мысалы: if (с == 1) kun="duisenbi"; else if (с == 2) kun = "seisenbi"; else if (с == 3) kun = "sarsenbi"; else if (с == 4) kun = "beisenbi"; else if (с == 5) kun = "juma"; else if (с == 6) kun = "senbi"; else if (с == 7) kun = "jeksenbi"; else Console.Write("qate, 1…7 engizu kerek"); жоқ иә иә жоқ жоқ иә ball ≥50 baga ='B'’ baga ='C' ball ≥ 75 baga ='A' ball ≥ 90 baga ='F' Қабаттасқан тармақты алгоритмнің бейнеленуі Мұның программасы: if (ball >= 90) baga='A'; else if (ball >= 75) baga='B'; else if (ball >= 50) baga='C'; else baga='F'; Console.Writeline("baga="+baga); Мұндай кездерде компи-лятор else түйінді сөзін оның алдындағы ең соңғы if операторымен байланыстырады. Сондықтан else түйінді сөзін соған сәйкес if сөзімен бір деңгейде жазған ыңғайлы болады. Адамның жасына қарап, кім екенін анықтау. static void Main() { int age; string c; Console.Write("Jasyn engiz: "); age = int.Parse(Console.ReadLine()); if ((age > 0) && (age < 7)) c = "jas bala"; else if ((age >= 7) && (age < 17)) c = "oqushy"; else if ((age >= 17) && (age < 22)) c = "student"; else if ((age >= 22) && (age < 27)) c = "maman"; else if ((age >= 27) && (age < 37)) c = "myqty maman"; else if ((age >= 37) && (age < 65)) c = "professor"; else c= "zeinetker"; Console.Write(" Bul adam: " + c); ConsoleReadKey(); } 8. Шарттыоперация Шартты операция ( ? : ) – тернарлық операция үш операндтан тұрады. Форматы: 1_операнд ? 2_операнд : 3_операнд Бұл if операторының қысқаша жазылуы тәрізді орындалады. Бұл операция үш орынды болып табылады. Егер оның шарты (бірінші операнды) ақиқат болса, өрнек мәні екінші операндқа тең; егер жалған болса, онда — үшіншіге тең. Мысалы: max_ab = a > b? a : b; abs_x = x < 0? –x : x; Мысалы: using system; namespace Ternar1 { class Program { static void Main() { int a = 11, b = 4; int max = b > a ? b : a; Console.WriteLine( max ); // Нәтиже 11 } } } 9.Switchауыстырғышоператоры
case 2 case 1 өрнек 1 операторлар 2 операторлар case n n операторлар default операторлар switch Оператордың орындалу схемасы былай да беріледі: 1-белгі: <операторлар>; break; Өрнек? 2-белгі: <операторлар>; break; 3-белгі: <операторлар>; break; n-белгі: <операторлар>; break; switch case сase case case
switch <бүтін типті өрнек>; { case 1-белгі: операторлар; break; case 2-белгі: операторлар; break; ................ case n-белгі: операторлар; break; [default: операторлар; break;] } Қарапайым 4 амалды орындайтын калькулятор жұмысын атқаратын программа: using System; namespace Calc1 { class Program { static void Main( ) { double a, b, res; Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine (" 1-operandty engiz : "); a = double.Parse(Console.ReadLine( ) ); Console.WriteLine( " Operacia tangbasin engiz : " ); char op = (char)Console.Read(); Console.ReadLine(); Console.WriteLine( " 2-operandty engiz :" ); b = double.Parse(Console.ReadLine() ); bool ok = true; switch (op) { case '+': res = a + b; break; case '-': res = a - b; break; case '*': res = a * b; break; case '/': res = a / b; break; default: ok = false; break; } if (ok) Console.WriteLine(" Natigesi : " + res); else Console.WriteLine(" Belgisiz amal "); Console.ReadKey(); } } // Пәннен алынған бағаны бейнелеу using System; namespace Baga1 { class Program { static void Main( ) { Console.WriteLine ("Qandai baga aldyn? "); int k = Int32.Parse (Console.ReadLine()); switch (k) { case 1: case 2: Console.WriteLine("Nashar"); break; case 3: Console.WriteLine("Ortasha"); break; case 4: Console.WriteLine("Jaksy"); break; case 5: Console.WriteLine("Ote jaksy"); break; default: Console.WriteLine("Qate, 1..5 engizu kerek."); break; } Console.ReadKey(); } } } Switch операторын басқаруда симолдарды пайдалану // Басқару үшін char типіндегі элементті қолдану. using System; class SwitchDemo2 { static void Main() { char ch; for(ch='A'; ch<= 'E'; ch++) switch (ch) { case 'A': Console.WriteLine("ch = 'A' "); break; case 'B': Console.WriteLine("ch = 'B' "); break; case 'C': Console.WriteLine("ch = 'С' "); break; case 'D': Console.WriteLine("ch = 'D' "); break; case 'E': Console.WriteLine("ch = 'E' "); break; } } } Мұнда default тармағы жоқ, оны жазу міндетті емес. Ол қажет болмаса, жазбауға болады. Қазақша жыл санау мысалы: using System; namespace Tyshkan { class Program { static void Main() { int gyl; Console.Write(" Zhyl engiz : "); gyl = int.Parse(Console.ReadLine()); switch (gyl % 12) { case 0: Console.Write(" Meshin "); break; case 1: Console.Write(" Tauyk "); break; case 2: Console.Write(" It "); break; case 3: Console.Write(" Dongyz "); break; case 4: Console.Write(" Tyshkan "); break; case 5: Console.Write(" Siyr "); break; case 6: Console.Write(" Barys "); break; case 7: Console.Write(" Qoian "); break; case 8: Console.Write(" Ulu "); break; case 9: Console.Write(" Zhylan "); break; case 10: Console.Write(" Zhylky "); break; case 11: Console.Write(" Qoi "); break; default: Console.Write(" Butin natural san engizu kerek "); break; } Console.ReadLine(); } } } Программа нәтижесі: Экрандағы символдар мен фон түсін өзгерту class Program // Экрандағы символдар мен фон түсін өзгерту { static void Main() { // 1. Type "Console" and press "." // 2. Select "BackgroundColor". // 3. Press space and "=", then press tab. Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("White on blue."); Console.WriteLine("Another line."); // <-- This line is still // white on blue. } } Келесі мысал Math класының бірнеше тригонометриялық функциялары мәндерін 0,0 – 1,0 радиан арасында double типі арқылы есептейді. using System; // тригонометриялық функциялар мәндері class Trigonometry { static void Main() { double t; // радианмен берілген бұрыш for (t = 0; t <= 1.0; t = t + 0.2) { Console.WriteLine("{0,4:f1} радиан синусы = {1,7:f3}", t, Math.Sin(t)); Console.WriteLine("{0,4:f1} радиан косинусы = {1,5:f3}", t,Math.Cos(t)); Console.WriteLine("{0,4:f1} радиан тангенсi {1,7:f3}", t,Math.Tan(t)); Console.WriteLine(); } Console.ReadKey(); } } 0,0 радиан синусы = 0,000 0,0 радиан косинусы = 1,000 0,0 радиан тангенсі = 0,000 0.2 радиан синусы = 0.199 0.2 радиан косинусы = 0.980 0.2 радиан тангенсі = 0.203 … Келесі мысал тригонометриялық функциялар мәндерін 0 – 180 градус арасында double типі арқылы есептейді. using System; // тригонометриялық функциялар мәндері class Trigonometry { static void Main() { double pi = Math.PI; // pi=180 градус double g, t; // g - градуспен берілген бұрыш for (t = 0; t <= pi; t = t + pi/6) // pi - 180 гр., pi/6 - 30 гр. { g = 180*t/pi; // g - радианды градусқа айналдыру Console.WriteLine("{0,4} градус синусы = {1,7:f3}", g, Math.Sin(t)); Console.WriteLine("{0,4} градус косинусы = {1,5:f3}", g, Math.Cos(t)); Console.WriteLine("{0,4} градус тангенсi {1,7:f3}", g, Math.Tan(t)); Console.WriteLine(); } Console.ReadKey(); } } 0 градус синусы = 0,000 0 градус синусы = 1,000 0 градус синусы = 0,000 30 градус синусы = 0,500 30 градус синусы = 0,866 30 градус синусы = 0,577 … /* Программада константаларды қолдану */ using System; namespace Example2_7 { class Program { public static void Main() { const int Length = 3; // математикалық константа Пи const double Pi = 3.14159; // жарық жылдамдығы метр/секунд const double SpeedOfLight = 2.99792e8; Console.WriteLine("Length = " + Length); Console.WriteLine("Pi = " + Pi); Console.WriteLine("SpeedOfLight = " + SpeedOfLight); } } } Программа нәтижесі Length = 3 Pi = 3,14159 SpeedOfLight = 299792000 Мәліметтердің ондық типі C# тілінде қаржылық есептеулерге арналған ерекше decimal (128 бит) типінің дәлдігі сандарды 28-29 ондық разрядтарға дейін бейнелейді. Мұнда қаржы саласындағы сандар дөңгелек-телмей дәл көрсетіледі. Келесі мысалда decimal типі қаржы саласындағы баға мен оның бекітілген жеңілдігін (скидка) пайызбен есептеуде қолда-нылады. using System; // decimal типін пайдалану class UseDecimal { static void Main() { decimal price, discount, discounted_price; price = 19.95m; // бағаны жеңілдікпен есептеу discount = 0.15m; // жеңілдік нормасы 15% discounted_price = price - ( price * discount); Console.WriteLine("Цена со скидкой: $" + discounted_price); } } Жоғарыдағы мысалда decimal типіндегі константа мәні m жалғауымен (суффиксімен) көрсетілген. Егер ол m жалғауынсыз көрсетілсе, стандартты жылжымалы нүктелі константаға айналып, ол мәліметтердің decimal типімен үйлеспейтін болады. Дегенмен decimal типті айнымалыға m жалғауынсыз бүтін санды, мысалы 10 санын меншіктеуге болады. |