Вы здесь
Си бағдарламалау тілі
19 мая 2013 | 37911Си тілі өткен ғасырдың 70-жылдары басында АҚШ-та Bell Telephon Laboratories компания-сының қызметкері Дэннис Ритчидің бастауы-мен дүниеге келді. Бұл тілдің негізі Алголдан басталып, Си және ПЛ/1 тілдерімен қатар пайда болды.
Си тілінің шығуы UNIX операциялық жүйесін-де программалаумен тығыз байланысты, өйт-кені бұл жүйе ассемлерде және осы Си тілінде жазылып шыққан болатын.
Бұл тілде жазылған программаны компьютерде орындау кезінде ол алдымен трансляция сатысынан өтіп (машина тіліне аударылып), объектілік программа түріне ауысады да, сонан кейін барып орындалады. Осы сәтте компьютер-де программаның екі нұсқасы болады, оның біріншісі – Cи тіліндегі алғашқы нұсқасы, ал екіншісі – объектілік кодтағы машина тілінде жазылған программа. Есептің нәтижесін тек машиналық кодта жазылған программа арқылы аламыз, ал программаны түзету қажет болғанда оның алғашқы нұсқасы өңделіп, оны қайта түрлендіру сатысы жүзеге асырылады.
Жалпы Си тілінің даму жолына қарасақ:
- Алгол-60 - 1960-ж. халықаралық комитет жасап шығарды
- CPL - (Combined Programming Language) Кембриджде және Лондон университетінде 1963 ж. қатарласа жасалды
- BCPL - (Basic Combined Programming Language) Кембриджде Мартин Ричардс 1967 ж. жасап шығарды
- B - Bell Labs қызметкері Кен Томпсон 1970 ж. жасады
- С - Bell Labs қызметкері Дэннис Ритчи 1972 ж. жасады
- Сонымен, 1983 ж. Си тілі стандартын жасау үшін (ANSI C) Америка ұлттық стандарттар институты (ANSI) құрылды.
Кез келген Си-программа бір немесе бірнеше функция-лардан тұрады. Олар программа құруға керекті негізгі модульдер болып табылады. Келесі суретте Си программасының жалпы құрылымы көрсетілген.
Си тіліндегі программа жеке-жеке жолдардан тұрады. Оларды теру, түзету арнайы мәтіндік редакторлар арқылы атқарылады. Программа қатарларының алдындағы азат жол немесе бос орындар саны өз қалауымызша алынады.
Бір қатарға бірнеше командалар немесе операторлар орналаса алады, олар бір бірінен нүктелі үтір (;) арқылы ажыратылып жазылады, бірақ бір жолда бір ғана оператор тұрғаны дұрыс, әрі түзетуге жеңіл, әрі ыңғайлы болып саналады.
Программалар мысалы:
/* х-тің оң және мәндері үшін төмендегі функцияны есептеу
y = sqrt(x*x+1)+abs(x), егер x
y = 3*x+4, егер x>=0 */
#include
#include
#include
main()
{
int x; float y;
textcolor(GREEN); /* жасыл мәтін*/
textbackground(BLACK); /* қара фон*/
clrscr(); /* экранды тазалау*/
printf("\nx,y енгіз: ");
scanf("%d",&x);
if (x
else y=3*x+4;
printf("Нәтиже=%f\n",y);
printf("Аяқтау үшін Enter басу керек");
getch(); /* нәтиже экранын көрсету */
return 0;
}
Си тілінің алфавиті
Тілдің алфавиті программаның элементтерін құруда қолдануға болатын символдар жиынынан тұрады. Оған әріптер, цифрлар және арнайы белгілер кіреді.
Тіл ерекшеліктеріне қарай символдар тобын шартты түрде төмендегі топтарға жіктеуге болады, олар
- атау (идентификатор) ретінде қолданылатын символдар ( a,b,c,…,z және цифрлар );
- цифрлар ( 0,1,2,…,9 ) ;
- айыру белгілері ( , . : ; “ _ );
- арнайы символдар ( #, &, *…).
а) Әріп ретінде латын алфавитінің бас және кіші әріптері қолданылады, олар:
A B C D E F G H І J K L M N O P Q R S T U V W X Y Z
a b c d e f g h і j k l m n o p q r s t u v w x y z
және астын сызу таңбасы (_) әріпке саналады;
Бас әріптер мен кіші әріптер бірдей болып саналмайды, мысалы, Х пен х екі айнымалы атауы, дәл сол сияқты ALFA1, aLfA1 және alfa1 де әр түрлі атаулар түрлері болып саналады. Атауларда әріптер цифрлармен араласып жазыла береді, бірақ атаудың алғашқы символы міндетті түрде әріп болуы тиіс, мысалы, VES1, SALMAK2, Baga_5, cena7, T7S25, ART25var8,т.с.с.
Ұлттық әріптер (қазақ, орыс, араб т.с.с.) атау ретінде қолданылмайды, олар тек тырнақшаға (“) алынған тұрақты сөз тіркестері немесе /* және */ таңбаларымен қоршалған түсініктеме ретінде ғана кездеседі /* бұл түсініктеме */.
ә) Ондық цифрлар: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 тәрізді сан таңбалары.
Он алтылық цифрлар ондық цифрлардан және A-дан F-қа (немесе a-дан f-қа) дейінгі латын әріптерінен тұрады.
Арнайы символдарға пунктуациялау және операциялар (амалдар) белгілері жатады.
б) Арифметикалық амалдардың белгілері:
- + - қосу;
- * - көбейту;
- – - алу;
- / - бөлу;
- % - қалдық табу;
10 % 3 - нәтижесі 1;
в)Логикалық амалдардың белгілері:
- && - және (екі шарт қатар орындалады A && B);
- || - немесе (екі шарттың бірі орындалады A || B);
- ! - емес (шартқа кері - терістеу амалы !A);
г) Айыру белгілеріне бос орын, ЕNTER (келесі жолға көшіру) пернесін басу белгісі және үтір, нүктелі үтір таңбалары жатады. Айыру белгілері атауларды, сандарды, түйінді сөздерді бір-бірінен бөліп тұрады.
Түсініктеме // таңбасынан кейін жол соңына немесе /* және */ белгілерімен қоршалып, солардың ішіне жазылады, соңғысы – бір немесе бірнеше жолдар-дан тұруы мүмкін.
Сонымен, айыру белгілері:
- _ (бос орын)
- , (үтір)
- . (нүкте)
- : (қос нүкте)
- ; (нүктелі үтір)
- ' (апостроф)
- “ (қостырнақша)
- (, ), [ , ] , { , } таңбалары.
д) Қатынас таңбалары немесе салыстыру белгілері:
= = (тең), != (тең емес), (үлкен), = (кіші емес таңбасының орнына)
Әрбір символдың өзінің реттік нөміріне сәйкес белгіленген коды болады, ол стандарт түрінде бекітілген. Әр елдің стандарттары негізінде америкалық кодтар стандарты жатады (Amerіcan Standart Code for Іnformatіon Іnterchange - ASCІІ), компьютерде жұмыс істеу кезеңінде оларды да білген абзал.
Си тілінің түйінді сөздері – программада алдын ала анықталған белгілі бір мағынасы бар сөз тіркестері. Си тілінің түйінді сөздері (служебные или ключевые слова) мәліметтер типтері, операторлар мен стан-дартты функциялар атаулары, жады кластары, моди-фикаторлар (толықтырғыштар), т.с.с., олардың тіл-дің әр түрлі нұсқаларында аздап айырмашылықтары болуы мүмкін.
Қордағы (резервтегі) сөздер:
auto double int struct break else long switch register tupedef char extern return void case float unsigned default for signed union do if sizeof volatile continue enum short while, т.б.
Бұл келтірілген түйінді сөздерді айнымалы аттары немесе тұтынушы қойған бейстандарт атаулар ретінде қолдануға болмайды.
Cи тілінің қарапайым объектілері
Тілдің қарапайым объектілеріне тип, сан, идентифи-катор, константа, айнымалы және функция, өрнек ұғымдары кіреді.
Тілдің ары қарай бөлінбейтін ең қарапайым бірлігі лексем (token деп те айтады) деп аталады.
Лексемнің 5 типі бар: операциялар (operator), айыру таңбалары (separator), идентификаторлар (identifier), түйінді сөздер (keyword) және константалар (constant).
Біз лексемдерді дұрыс жазуға мүмкіндік беретін объ-ектілерді қарастырып, программаның жалпы құрылы-мынан мәліметтер берейік.
Константалар және кез келген айнымалылар бүтін саннан, нақты саннан, символдан немесе сөз тіркесте-рінен құралады.
1. Мәліметтер типтері. Мұнда мәліметтердің бірнеше негізгі типтері қолданылады.
Олар:
- char – символдық, яғни таңбалық тип,
- short – қысқа бүтін сан,
- int – бүтін сан типі,
- long – екі еселенген бүтін сан,
- float – нақты (жылжымалы нүктелі) сан типі,
- double – екі еселенген нақты сан типі.
- unsigned – таңбасыз бүтін сан,
Алғашқы төрт тип бүтін сандарды сипаттау үшін қолданылады. Төмендегі кестеде әр түрлі типтердің IBM PC-ге арналған ұзындықтары көрсетілген.
Көрсетілген типтердің ең үлкен ұзындықтары әр түрлі компиляторларда бірдей болуы қажет емес. Олар компьютерлердің аппараттық мүмкіндіктеріне қарай тағайындалады.
Бірақ оларға мынадай талаптар қойылады:
int > =short; short пен int типтерінің ұзындығы >= 16 бит;
Int типін стандарт бекітпеген, ол компьютерге немесе компиляторға байланысты өзгеріп отырады. 16-разряд-ты процессорде ол 2 байт (32768), ал 32-разрядтысында – 4 байт (2 147 483 647 ).
ТурбоСи-де int = short (32768)
long > = int; long типінің ұзындығы >= 32 бит;
(ТурбоСи-дегі long 2 147 483 647 )
Signed және unsigned модификаторлары да сандар шамасына әсер етеді, олар:
unsigned short int – 2 байт, оның диапазоны 0 ..65536;
unsigned long int – 4 байт, диапазоны 0..+4 294 967 295.
Unsigned типі int, long, short түйінді сөздерімен сипатталатын типтердің модификаторы ретінде қолданылады.
Char типін 0–255 аралығындағы таңбасыз бүтін сан-дарды сипаттауға қолдануға болады, ДК жадында бұларға бір байт орын бөлінген.
Мысалы:char c1;
char ck=’k’;
Нақты сандар компьютерде 2 бөліктен – дәреже мен мантисса-дан тұрады. IBM-РС компьютерлерінде float типінің ені – 4 байт, оның бір разряды – сан таңбасы, 7 разряды – дәреже, 24 бит – мантисса.
Егер double типі аты алдында long сөзі тұрса, онда оған 10 байт орын беріледі.
Программалау практикасында көбінесе жылжымалы нүктелі нақты (аралас) сандар пайдаланылады.
Double типті сандар екі еселенген дәлдікпен 64 бит арқылы өрнектеледі. Double типінің ені – 8 байт, 1 бит – таңба, 11 бит – дәреже және 52 разряд – мантисса. Мантисса ені – санның дәлдігін, ал дәреже ені – оның диапазонын анықтайды.
Си тілінде объектілердің мәндерін байт арқылы анықтау үшін sizeof стандартты операторы қолданылады.
Мысалы:printf(“Данные типа double занимают %d байт\n", sizeof(double));
Литерал | сипатамасы | Мысал |
---|---|---|
таңба | апострофпен қоршалған бір таңба | 'W', '&', 'Ф' |
жол | Қостырнақшамен қоршалған таңбалар тізімі | "Бұл жол \n" |
бүтін | ондық — нөлден басталмайтын цифрлар қатары | 123, -1999 |
сегіздік — нөлден басталатын, 0 мен 7 арасындығы цифрлар қатары | 011, 0177 | |
оналтылық —оналтылық цифрлар қатары (0 – 9 және А - F), алдында 0X немесе Оx жазылған | ОХ9А, Oxffff | |
нақты | ондық — [цифрлар].[цифрлар] | 123., 3.14, .99 |
Экспоненциальдық — [цифрлар]Е|е[+|-] цифрлар | Зе-10, 1.17е6 |
2.Сандар. Сандар мен айнымалылар бүтін және нақты болып екіге бөлінеді.
Бүтін сандар: +4, -100, 15743, 0 , т.с.с.
Дербес ЭЕМ-дер үшін қолданылатын бүтін сандар (ағылшынша іnteger) бұрын -32768 бен +32767 аралығында ғана жазылған еді, қазір компьютер типіне байланысты ол басқаша да бола береді.
Мұнда ондық, сегіздік және он алтылық бүтін сандар да пайдаланылады. Он алтылық сандардың алдына 0х белгісі қойылады. Мысалы, 0хA12 немесе 0х8B2.
Сегіздік сандар алдына 0 қойылады: 0556, 07012, т.с.с.
Нақты сандар (ағылшынша float) кәдімгі табиғи аралас сандар тәрізді санның бүтіні мен бөлшегін нүкте арқылы бөлген күйде жазы-лады.
Мысалы: 2.65, 0.5, -0.862, -6.0.
Ал өте үлкен немесе өте кіші нақты сандар көрсеткіші бар экспоненциал сандар ретінде mЕ±р түрінде жазылады да, олардың диапазоны әлде қайда кең болады, мұндағы m-санның мантиссасы деп аталады, Е-онның дәрежесі дегенді білді-реді, ал р- дәреженің өз мәні.
Мысалы:
1,25•106 1.25Е+6 0,0005 0.5Е-3
-5,2 • 10-12 - 5.2Е-12 -180000 -1.8Е+5
3. Атау – идентификатор (іdentіfіеr – объектіге қойылған ат) программаны және программадағы тұрақтыларды, айнымалыларды, функцияларды, файлдарды және тағы басқаларды белгілеп жазу үшін қажет.
Идентификатор – міндетті түрде әріптен басталатын сандар мен әріптердің тізбегі.
Оның ұзындығын өте үлкен етудің қажеті жоқ, өйткені атауларды теру және кейіннен сақтау біраз уақыт керек етеді. Бірақ оларды өте қысқартпай, мағынасына сәкес атау беру қалыптасқан. Мыса-лы: X, x_2, cymka, bec, p23ps6, dt54as, ALFA, baga2, salmak, Omega2, т.с.с.
Бас әріп пен кіші әріп бірдей болып саналмайды.
4. Тұрақты немесе константа деп программаның орындалу барысында мәндері өзгеріссіз қалатын шамаларды айтады.
Тұрақтыға программа басындағы директива арқылы мән берсек те немесе оны программаның сипаттау бөлімінде идентификатор түрінде белгілеп алып мән берсек те болады. Олар сандық, символдық және тіркестік (іnt, float, char, strіng) мәндерді қабылдай алады.
Символдық және тіркестік (строковый – strіng) мәндер үшін орыс, қазақ әріптерін және кез келген символдарды пайдалануға болады. Олар тырнақша ішіндегі таңбалармен жазылады, мысалы: “S=“ , “сумма” , “функцияның мәні”, “y=“ және т.б.
Тұрақтыларды анықтау мысалдары:
a) Атау арқылы:
const типi тұрақты = мәні const float m=99999999;
const F=765; // типі int болады
const char s=‘B’; // символдық тип
const Menіng_atjm = “Ақметов Болат” ;
const C=”Turbo С”;
const float Pi = 3.14159;
const float Pi2 =2 * Pi;
Егер const Pi = 3.14159; (типі көрсетілмесе) деп сипаттасақ, онда Pi мәні 3 тең болады
b) Директива арқылы:
#define тұрақты мәні
#define pi 3.14159 // pi=3.14159 болады
#define EULER 2.718282 // EULER=2.718282
#define директивасының форматы (параметрлері бар макросты анықтаушы)
#define макрос_ идентификаторы(аргументері) алмастыратын_мәтін
Макрос идентификаторы мен аргументтер арасында бос орын болмау керек. Макросты шақыруды келесі өрнекпен орындауға болады:
макрос_идентификаторы(аргументтер)
Мысалы: #define CIRC(x) (3.14159 * (х) * (х)) макорсы шеңбер ауданын есептеуге мүмкіндік береді.
Егер программада S = CIRC(4); операторы кездессе, онда аргументі тұрақты болғандықтан (3.14159 * (4) * (4) ) өрнек мәні компиляция кезінде есептеліп S-ке меншіктеледі.
Егер макросты шақыру келесі түрде жазылса
S = CIRC(a + b);
Онда макрос кеңейтілгеннен кейін мәтін түрі:
S = (3.14159* (a+b) * (а + b) ) ; болады.
Макрос аргументі айнымалы болғантықтан өрнек мәні компиляция кезінде емес программа орындалған уақытта есептеледі.
Егер макросты жақша қоймай сипаттасақ онда келесі өрнек есепетеледіде 3.14159 * а + b * а + b нәтижесі қате болады.
Екінші мысал, эллипс ауданын есептеу:
#define Еll(х,у) (3.14159 * (х) * (у))
Макросты шақыру келесі түрде жазылуы мүмкін:
S = Ell(Rl, R2);
Есептеулердің алынған нәтижелеріне қарағанда макростар функцияларға эквивалентті . Мысалы , шеңбер ауданын есептеу функциясын келесі формаға келтіруге болады :double circ(double x)
{ return 3.14159 * х * х;
}
Және оны шақыру операторы:
S = circ(a + b);
Егер макросты шақыру операторы келесі түре болса S = circ(а++);
S = (3.14159 * (а++) * (а++)); онда шеңбер ауданы дұрыс есептелінеде, ал а-ның мәні 1 орнына 2 тең болады.
Егер шеңбер радиусын 1 өсіріп алып ауданын есептемек болсақ макросты келесі түре шақырғанда S = circ(++a); макрос келесі түрде кеңейтіледіде
S=(3.14159 *(++а)*(++а));
радиусы екі рет 1-ге өседіде келесі нәтижеге әкеледі S = (3.14159 * (а + 1) * (а + 2) ) ;
Егер макрос орнына жоғрыда келтірілген функцияны қолдансақ, мұндай эффекттер болдмайды.
5. Айнымалылар деп программаның орындалу бары-сында әр түрлі мәндерді қабылдай алатын шамаларды айтады. Айнымалы – компьютер жадының ат қойылған аймағы. Оған мән берілгенде, сол аймаққа мәннің екілік коды жазылады. Айнымалы мәнін қолдану үшін оның атын – идентификаторын және мән орналасқан аймақтың адресін білу керек.
Олар идентификаторлармен белгіленіп, әр уақытта әр түрлі мәнге ие бола алады. Айнымалылардың белгіленулері: alfa, y, x_3, summa, baga, a1b8, т.с.с. Айнымалы атауы оның орындайтын міндетіне сәйкес, түсінікті және қарапайым болғаны жөн. Айныма-лыларды сипаттау оларды пайдалану алдында кез келген жерде орналасады да, алдында олардың типі көрсетіледі.
Оның жазылу форматы:
, ..., ;
Мысалы: іnt a, b=5, d, D;
float c, alfa=2.15, b4=1.336e2;
char symbol, cc;
string coz, coilem;
Айнымалыларды сипттау үшін алдында сипатталған тұрақтылар мен мәні анықталған айнымалыларды қолануға болды: int xl = 1, х2 = 2 * xl;
Айнымалыларды жариялау бөлек оператор болуы мүмкін немесе ол кейбір операторлар ішінде істелінеді , мысалы , цикл операторында :for ( int i = 0; i
Сипаттау кезінде бірден бастапқы мән меншіктеуге болады, оны айнымалыны инициалдау дейді. Си тілі-нде символдық тіркестерді сипаттау үшін арнайы тип жоқ, олар көбінесе char типтегі элементтерден тұра-тын массив (жиым) ретінде қарастырылады. Жолдық немесе тіркестік символдар ЭЕМ жадында көршілес ұяшықтарда сақталады да, олардың соңында ‘\0’ символы тұрады. Символдар қатарының ұзындығын анықтау үшін strlen сөзі қолданылады.
char m1[]=”Таңбалар жолы”;
char m[44]=”Только ограничтесь одной строкой”;
Сілемді жариялау үшін сілем атынан кейін квадраттарды жақшаларда элементтердің саны көрсетіледі.
Мысалы,
float mas[20];
Арифметикалық немесе логикалық амалдар таңбасымен біріктірілген айнымалылар, атаулар, функциялар, жиымдар (массивтер) тізбегі өрнек деп аталады.
Математикадағы формулалар, арифметикалық өрнектер, алгебрадағы көпмүшеліктер программалау тілінде тек осы өрнек ұғымы арқылы беріледі.
Программалау тілінің белгілі бір іс-әрекетті орындай алатын тиянақты мағынасы бар ең қарапайым сөйлемі оператор деп аталады.
Стандартты функциялар
Си тілінде математикадағы тәрізді стандартты функ-циялар бар. Олар жиі кездесетін математикалық және басқа да функцияларды есептеу үшін қолданылады. Стандартты функцияны жазу үшін міндетті түрде функцияның аты және жақшаның ішінде аргументі көрсетілуі қажет. Функцияны есептеу барысында аргумент пен функция типтерінің әр уақытта сәйкес келе бермейтінін есте сақтаған жөн.
Енді программаларда жиі пайдаланылатын өрнектерді мысал ретінде қарастырайық.
|x| | fabs(x) | Аргументтік абсолюттік шамасы | нақты |
|x| | abs(x) | Аргументтік абсолюттік шамасы | бүтін |
tg x | tan(x) | Аргументтің тангенсы | нақты |
arctg x | atan(x) | Аргументтің арктангенсы | нақты |
arccos x | acos(x) | Аргументтің арккосинусы | нақты |
arcsin x | asin(x) | Аргументтің арксинусы | нақты |
cos x | cos(x) | Аргументтің косинусы | нақты |
sіn x | sіn(x) | Аргументтің синусы | нақты |
ex | exp(x) | е-нің (2,71828) х дәрежесі | нақты |
lnx | log(x) | х-санының натурал логарифмі | нақты |
lg x | log10(x) | х-санының ондық логарифмі | нақты |
Pi | M_PI | (p-дің мәні pі=3.14159265) | |
e | M_E | (e-нің мәні е=2.718281828) | |
xn | pow(x,n) | х-тің n дәрежесі | нақты |
sqrt(x) | х-тің квадрат түбірі | нақты | |
ceil(x) | х санын бүтінге дейін жоғары дөңгелектейді | нақты | |
Math.hpp | Сeil(x) | х санын бүтінге дейін жоғары дөңгелектейді | бүтін |
fmod(x,y) | қалдық | нақты | |
Math.hpp | Floor(x) | х санын бүтінге дейін төмен дөңгелектейді | бүтін |
Stdlib.h | randomize | кездейсоқ сандардың генераторы | |
Stdlib.h | rand | 0... 37767 аралығындағы кездейсоқ сан | бүтін |
Stdlib.h | random(num) | 0... num-1 аралығындағы кездейсоқ сан | бүтін |
Операциялар Операциялар классификациясы
Операцияларда қатысатын операндалар саны бойынша операциялар былай бөлінеді:
унарлы операциялар, немесе бір операндты операциялар,
бинарлы операциялар, немесе екі операндты операциялар,
тернарлы операциялар, немесе үш операндты (бұл шартты операция
Меншіктеу операциясы да унарлы жөне бинарлы бола алады.
Унарлы операцияларды талдау оңнан солға карай жүргізіледі. Бинарлы операциялар солдан оңға карай талданады
Унарлы операциялар тобы
Операция белгісі | Операция | Операциялар тобы |
---|---|---|
- | Арифметикалық терістеу | Терістеу және толықтауыш |
~ | Разрядты логикалық терістеу (толықтауыш) | |
! | Логикалық терістеу | |
* | Адрестеуді алып тастау | Адрестеуді алып тастау және адрес |
& | Адрес | |
+ | Унарлы плюс | Унарлы плюс |
sizeof | Мөлшер |
Бинарлы операциялар топтары
Операция белгісі | Операция | Операциялар тобы |
---|---|---|
* | Көбейту | Мультипликативті |
/ | Бөлу | |
% | Бөлуден калган қаддық | |
+ | Қосу | Аддитивтік |
« | Солға жылжу | Жылжу операциясы |
» | Оңға жылжу | |
Аз | Қатынас опеоапиялар | |
> | Көп | |
Аз немесе тең | ||
>= | Көп немесе тен | |
= | Тең | |
!= | Тең емес | Қатынас опеоапиялар |
& | Разрядты логикалық ЖӘНЕ | Разрядты |
| | Разрядты логикалық НЕМЕСЕ | Логикалык |
&& | Логикалық ЖӘНЕ | Қатынас опеоапиялар |
|| | ЛогикалықНЕМЕСЕ | Қатынас опеоапиялар |
> | Үтір (тезбектеліп есептеу) | Тізбектеп есептеу |
Төменде меншіктеу операциялары келтірілген. Меншіктеу операциясы оң операнданың мәні сол операндамен берілген жад облысына меншіктелуін айтады. Сондықтан меншіктеу операциясының сол операндасы немесе меншіктеудің унарлы өрнегінін жалғыз операндасын жад облысына сілтейтін өрнек болуы керек.
Меншіктеу операциялары
Операция белгісі Операция аты
++ Көбею (унарлы инкремент)
-- Азаю (унарлы декремент)
= Қарапайым меншіктеу
*= Меншіктеумен көбейту
/= Меншіктеумен бөлу
%= Меншіктеумен бөлуден калған қаддық
+= Меншіктеумен косу
-= Меншіктеумен алу
«= Меншіктеумен солға жылжу
»= Меншіктеумен оңға жылжу
&= Меншіктеумен разрядты ЖӘНЕ
|= Меншікгеумен разрядты НЕМЕСЕ
^= Меншіктеумен разрядты шығарып тастайтын НЕМЕСЕ
Жад облысына сілтейтін өрнек атайтын өрнек деп немесе 1-мәнді деп аталады. Мынадай өрнектер атайтын өрнектер бола алады:
берілгендердің бүтін және жылжымалы типті, сілтемелер типті,|кұрылым және қоспа типті идентификаторлары;
массив немесе функция тәрізді есептелетін индекстік өрнектерден басқа индекстік өрнектер ([ ]);
элемент таңдау өрнегі (-> немесе .)> егер таңдалатын элемент жоғарыдағы өрнектердің бірі болса;
адрестеуді алып тастау операциясының унарлы өрнегі (*), бұнда массив немесе функцияға сілтейтін өрнек болмауы керек;
дөңгелек жакша ішіндегі атайтын өрнектері (1-мән).
Ескерту. const кілтті сөзімен сипатталған объект меншіктеу операциясының сол операндасы бола алмайды (мәнін өзгертуге болмайды).
Қарапайым арифметикалық түрлендірулер
Операциялар орындалу барысында өрнектер операндаларын бір типке келтіру немесе қысқа шамаларды бүтін шамалардың өлшеміне дейін кеңейту үшін типтерді автоматты түрлендіреді. Орындалатын түрлендірулер операциялар спецификасынан және операндалар немесе операнда типіне байланысты. Көп операциялар бүтін жөне жылжымалы типтерге ұқсас түрлендірулер орындайды. Бүл түрлендірулер арифметикалық түрлендірулер.
Төменде келтірілген арифметикалық түрлендірулер қарапайым арифметикалық түрлендірулер деп аталады.
Қарапайым арифметикалық түрлендірулер мынадай ережелер бойынша жүргізіледі:
- 1. float типті операндалар double типті операндаға түрленеді.
- 2. Егер бір операнд long double типті болса, екінші операнд long double
- типіне түрленеді.
- 3. Егер бір операнд double типті болса, екінші операнд double типіне
- түрленеді.
- 4. char немесе short типті кез-келген операнда int типіне тұрленеді.
- 5. unsigned char немесе unsigned short типті кез келген операнда unsigned int типіне түрленеді.
- 6. Егер бір операнд unsigned long типті, онда екіншісі unsigned long типіне түрленеді.
- 7. Егер бір операнд long типті болса, онда екінші операнд long типіне түрленеді.
- 8. Егер бір операнд unsigned int типті, онда екінші операнд unsigned int типіне түрленеді.
Сонымен, өрнектер есептеу барысында операндалар кай операнда үлкен өлшемді болса, соған түрленеді.
Мысалы, мынадай айнымалылар сипатталған болса:double fl;
unsigned char ch;
unsigned long m;
int i;
Онда fl*(i+ch/m) өрнекті есептеу барысында түрлендіру былай орындалады. сһ операндасы әуелі unsigned int типіне түрленеді (5 ереже). Содан соң unsigned long типіне түрленеді (6 ереже). Осы ереже бойыніи unsigned long түріне түрленіп, дөңгелек жакшаға алынған өрі корытындысы unsigned long типін алады. Сосын ол double типіне (ереже 3 түрленеді және бүкіл өрнек корытындысы double типін алады
Терістеу және толыктауыш операциялары
Арифметикалық терістеу операциясы ("-") өз операндасын терісеуінв табады. Операнд бүтін немесе жылжымалы (яғни нақты) шама болуы керек. Орындалу барысында қарапайым арифметикалық түрлендірулер орындалады.
М ы с а л:int stat=5;
stat=-stat; /* Значение stat является отрицанием 5*/
stat=-12; /* stat присваивается отрицание к 12*/
EMEC ("!") логикалык терістеу операциясы егер операнд ақиқат болса (ноль емес), онда 0 мәнін алады, және егер операнд жалған болса (0), онда 1 мәнін алады. Қорытындысы int типті болады. Операнд бүтін немесе I ылжымалы типті немесе сілтеме типті болуы керек. Мысал: int x=0;
!x өрнегінің корытындысы 1-ге тең (акиқат).
Екілік толықтау операциясы ("~") өз операндасының екілік толықтауын алады. Операнд бүтін типті болуы керек. Қарапайым арифметикалық түрлендірулер жүргізіледі де, қорытынды түрлендіруден кейін операнда типін алады.
М ы с а л:main ()
{
сhar c='9';
unsigned char cc;
cc=~c;
рrintf("с(символ)=%с\tс(оналтылық) =
%x\n",c,c);
рrintf("~с(символ)=%с\t~с(оналтылық) =
%x\n",cc,cc);
)
Программа орындалу қорытындысы:
с(символ)=9 с(оналтылык)=39
~с(символ)=Ц ~с(оналтылык)=с6
Көбейту операциясы ("*") операндтар көбейтуді шақырады.
М ы с а л д а р:
int a = 5;
float у = 0.2;
double x, z;
х = у * a;
Белу операциясы ("/") бірінші операндты екінші операндқа бөлуді шақырады. Егер екі бүтін сан бүтін бөлінбесе, нәтиже келесі тәртіп бойынша анықталады:
егер операндтар оң мәнді және unsigned типті болса, нәтиже ең жақын кішкентай бүтін санға теңестіріледі;
егер операндтардың біреуі теріс мәнді болса, нөтиже бағыты
(нольден немесе нольге) әр компьютерге сәйкес анықталады
(берілген қарастыруда нольге). Нольге бөлу кезінде қате деген дерек беріледі.
М ы с а л:main ()
int с = 49;
int cc = 10;
printf (%d/%d = %d\n",c,cc,c/(cc));
printf (%d/-%d = %d\n",c,cc,c/(-cc));
}
Программа орындалу корытындысы:
49/10 = 4
49/. 10 = -4
"Бөлуден қалдық" операциясы ("%") бірінші операндты екіншісіне бөлгендегі қалдық нәтижесін береді.
Нәтиже таңбасы белгілі компьютерге тәуелді. Берілген қарастыруда нәтиже таңбасы бірінші операндтың таңбасына сәйкес келеді. Егере екінші операнд нольге тең болса, хабар беріледі.
М ы с а л:main ( )
{
int с = 49;
int cc = 10;
printf ("остаток от деления %d на %d = %d\n",c,cc,c% (cc));
printf ("остаток от деления %d на -%d = %d\n",c,cc,c% (-cc));
printf ("остаток от деления -%d на %d = %d\n",c,cc,(-c)% (cc));
printf ("остаток от деления -%d на -%d = %d\n",c,cc,(-c)% (-cc));
}
Адрестеуді алып тастау және адрестер операциялары
Бұл операциялар сілтеме типті айнымалылармен жұмыс үшін қолданылады.
* адрестеуді алып тастау операциясы адрестелген шамаға сілтеме
ылы жанама жетуді қамтамасыз етеді. Операнд сілтеме болу керек.
перация нәтижесі операнд көрсеткен өлшем болып табылады. Нөтиже типі
теме адрестеген шаманың типі болып табылады. Егер сілтемеде кате адрес
болса, нәтиже анықталмайды.
Сілтемеде кате адрес болғандағы кейбір жалпы жағдайларға мыналар жатады:
• сілтеме нольдік болады;
нүсқау кезінде белсенді емес жергілікті объект адресін анықтайтын сілтеме;
printf және scanf функциялары
Си тілінде сыртқы ортамен мәліметтер алмасу
#include
Printf() функциясы мәліметтерді экранға шығару үшін қолданылады. Оның жалпы жазылу түрі:
printf(,);
( – қостырнақшамен (”) шектеліп, аргументтердің қалай бейнеленетінін көрсетіп тұрады, экранға (баспаға) шығару алдында барлық аргументтер формат спецификациясына сәйкес түрлендіріледі, специфи-кация % символымен басталады және мәліметтер типін, оларды түрлендіру тәсілін көрсететін бір әріп жазылады. ретінде айнымалылар, константалар, өрнектер қолданылуы мүмкін.
Мысалы:
printf (“Пи санының мәні = %f\n”, pi);
Формат тіркесінде мыналар болады:
1) мәтін ретінде шығарылатын символдар тіркесі;
2) түрлендіру спецификациялары;
3) басқару символдары.
2. Спецификациялардың түрлері.
Әрбір аргументке өз спецификациясы сәйкес келуі тиіс, олар:
%d – бүтін ондық сан шығарылуы тиіс,
%i – бүтін ондық сан шығарылуы тиіс,
%f – жылжымалы нүктелі нақты ондық сан (-dddd.dddd ) жазылып шығады,
%e – жылжымалы нүктелі экспоненциалды сан (-d.dddde±dd) шығарылады,
%E – жоғарыдағы сияқты, тек е орнына Е (-d.ddddE±dd) шығарылады,
%c – бір символ, яғни таңба (char) шығарылуы тиіс,
%s – символдар тіркесі (қатары) шығарылуы тиіс,
%g – нақты сан, сан ұзындығына қарай %e немесе %f қолданыла алады,
%u – таңбасыз ондық бүтін сан жазылып шығады,
%o – таңбасыз бүтін сегіздік сан шығады,
%x – таңбасыз бүтін он алтылық сан шығады.
\n – келесі жаңа жолға көшуді атқаратын басқару символы.
Мысалы:
%9i – бүтін сан ені 9 цифрдан тұрады, сан ені аз болса, оның сол жағында бос орындар орналасады.
%9.3f – нақты сан ені 9 цифрдан тұрады, оның 3 таңбасы бөлшекке беріледі, сан ені аз болса, оның сол жағында бос орындар орналасады.
Әрбір спецификация % символынан басталып, түрлендіру символымен аяқталады. Ол екеуінің ортасында мыналар тұруы мүмкін:
- минус таңбасы, аргумент мәні сол жақ шетке ығыстырылып жазылады.
- цифрлар, бүтін санның жалпы орналасу енін анықтайды. Сан осы енге немесе одан артық болып шығарылады. Егер аргумент ені көрсетілген еннен аз болса, онда ол бос орындармен толтырылып жазылады.
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
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);}
}
Шарты соңынан тексерілетін 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;
Автоматтық айнымалыларды осындай етіп міндетті түрде сипаттау қажет емес. Егер айнымалы бір блок (функция басында) ішінде сипатталатын болса және оның класы көрсетілмесе, ол келісім бойынша автоматтық айнымалы болып саналады.
Автоматтық айнымалылар сол блокта ғана, яғни бір функция ішінде қолданылып, оның әсер ету аймағы локальді болады және осы айнымалылар сипатталған функция шақырылғанда ғана, көрсетілген автоматтық айнымалылар жұмыс істейді, яғни активтендіріледі (екпінді күйде пайдаланылады). Функцияның жұмысы аяқталғанда автоматтық айнымалылар жойылады да, оларға бөлініп берілген жадының ұяшықтарын басқа айнымалылар үшін қайтадан қолдануға болады.
Пән атауы: | Информатика |
Көлемі: | 34 бет |
Жұмыстың түрі: | Реферат |