Параметрлі циклдің орындалу схемасы мен жазылуы.
Параметрлі цикл бірде-бір рет орындалмауы мүмкін бе?
for операторының параметрі қандай типтерде бола алады?
for операторы параметрінің алғашқы мәні оның соңғы мәнінен кіші бола ма?
while цикл операторының ішкі тұлғасы бір де бір рет орындалмауы мүмкін бе?
while цикл операторының шарты қатынас таңбаларысыз жазыла ма? 7.while цикл операторы қай кезде шексіз циклге айналады?
while цикл операторының тұлғасындағы шартына әсер ететін өрнектер жазыла ма?
Шарты соңынан тексерілетін do…while циклінің орындалу схемасы мен жазылуы.
do…while цикл операторының ішкі тұлғасы бірде-бір рет орындалмауы мүмкін бе?
do…while цикл операторының шартында қатынас таңбасы болмаса, оның ақиқат немесе жалған екенін қалай анықтауға болады?
do…while цикл операторының ішкі тұлғасында шартсыз көшу операторын қолдануға бола ма?
ЛЕКЦИЯ № 5
Тақырыбы: Ішкі программалар. Параметрсіз және параметрлік функциялар мен процедуралар. Рекурсивті функциялар
Лекция жоспары:
1. Қолданушы функциясын пайдалану
Лекция мазмұны
1 Қолданушы функциясын пайдалану
С тілінде стандартты функциялармен қатар қолданушы (тұтынушы, программалаушы) өзі құрастырған функцияларымен де жұмыс істеу мүмкіндігі жасалған. Ол функцияны алдын ала main функциясына дейін толық анықтау керек немесе оны алдын ала қысқаша сипаттап алып, main функциясынан кейін толық анықтауға болады. Сондықтан, тұтынушы функциялары декларациясы екі түрде: қысқаша сипаттау түрінде (main функциясына дейін) және анықтау түрінде (main функциясынан кейін немесе дейін) толық берілуі мүмкін.
Функцияны алдын ала сипаттау барысында программалық файлдың басында оның прототипі көрсетіледі, өйткені main функциясында оның айнымалылары типтері белгілі болуы тиіс. Ол келесі түрі жазылады:
<нәтиже_типі> <функция _ аты>(<тип> <айнымалы1>,
<тип> <айнымалы2>, …<тип> <айнымалыN>);
Прототиптегі жай жақшаларға алынған айнымалылар идентификаторларын көрсетпесе де болады, өйткені тілдің компиляторы оларды өңдемейді.
Параметрлер тізімімен берілген fun функциясын сипаттаудың мысалы:
float fun(int, float, int, int);
Функция прототипі компиляторға программа мәтінінде негізгі программадан (main()) кейін оның толық анықтамасы келтірілетінін білдіреді. Функцияның толық анықталуының жазылу түрі төмендегідей:
<нәтиже_типі> < функция _ аты >(параметрлер тізімі)
{
функция коды
}
Нәтиже_типі return операторының көмегімен функцияның шақырылу нүктесіне қайтарылатын мәннің типін көрсетеді. Егер функция типі көрсетілмесе, қайтарылатын мән int типті деп саналады. Параметрлер тізімі үтірмен ажыратылған типтер мен параметрлер аттарының тізбегінен тұрады. Егер функцияның параметрлері болмаса да, жай жақшалар бәрі бір міндетті түрде көрсетілуі тиіс.
Return операторы берілген функциядан бірден шығып, нәтиженің оны шақырушы функцияға қайтарылуын қамтамасыз етеді, яғни бұл оператор функция жұмысы нәтижесін қайтару қызметін атқарады. Функция тұлғасында бірнеше return операторы болуы немесе бірде бір рет кездеспеуі де мүмкін екендігін айта кеткен жөн. Мұндай жағдайда шақырушы функцияға қайту оның тұлғасындағы соңғы оператор орындалғаннан кейін барып жүзеге асырылады.
Екі бүтін санның ішіндегі кішісін анықтайтын функцияның мысалы: int mini(int x, int y)
{ int t;
if (x}
Мini функциясын келесі түрде де жазуға болады:
mini(int x, int y)
{
return (x}
Екі бүтін санның ішіндегі үлкенін анықтайтын функцияның мысалы:
int maxi(int x, int y)
{
if (x>y)
return (x);
Егер қайтарылатын мәннің типі көрсетілмесе, ол int типті болып есептеледі.
С тіліндегі мәнді қайтаратын барлық функциялар өрнектердің оң жағында жазылуы тиіс, өйтпеген жағдайда ешқандай да нәтиже қайтарылмайды. Бірақ функция нәтижесінің адресі қайтарылатын жағдайда, ол сол жақта болуы керек. Егер функция ешқандай мән қайтармайтын болса, онда ол void (бос) типті функция ретінде сипатталуы тиіс. Мысалы, дисплей экранына бір толық жолды шығару үшін келесі функцияны жазамыз:
void lin(char a)
{
int k;
for(k=0; k<80; k++)
printf(“%c”, a);
}
Егер функцияда ешқандай параметр болмаса, онда функцияны декларациялау барысында жай жақша ішіне void сөзін жазған дұрыс. Мысалы, негізгі функция тақырыбының көбінесе былай жазылуы мүмкін:
void main(void)
С тілінде әрбір функция – программаның жеке бөлігі, оны орындау үшін осы функцияны шақыру керек. Мысалы, goto операторы арқылы басқаруды кез келген функцияның тұлғасына беруге болмайды. Функция келесі түрде шақырылады:
<функция_аты>(аргументтер_тізімі);
мұндағы аргументтер ретінде тұрақтыларды, айнымалыларды, өрнектерді (олардың мәндері функцияны шақырудан бұрын программада анықталады) қолдануға болады. Функцияны шақыру тізімінің аргументтері сол функцияның анықталу параметрлерінің тізімімен саны жағынан, орналасу ретімен, сәйкес параметрлері типтерімен толықтай үйлесуі тиіс. Аргументтер жоқ болған жағдайда да, функция атынан кейінгі жай жақшалардың болуы міндетті.
Мысал. NxN өлшемді бүтін сандар жиымын (50-ден көп емес) енгізіп, функция арқылы оның оң мәндерінің қосындысын табу керек.
#include #include
void summa(int,int a1[ ][50]); // функцияны сипаттау
void main(void)
{
int a[50][50]; int i,j,N;
clrscr();
puts("\n Жиым өлшемін N(<50) енгізіңіз \n");
scanf(“%d”,&N);
printf("\n Мәліметтерді енгізіңіз \n"); for(i=0; ifor(j=0; j{
printf("\n a[%d][%d]=", i+1, j+1);
scanf("%d", &a[i][j]);
}
summa(N,a);
}
void summa(int n,int a1[ ][50])//функцияны анықтау
{
int i, j, s;
/* Жиымның оң элементтерінің қосындысын есептеу*/
for(s=0,i=0; i{
printf("\n"); for(j=0;jif (a1[i][j]>0) s+=a1[i][j];
}
printf("\a Қосынды = %d, Press any key... ",s); getch();
}
Мысал 2. Берілген s1 символдар тізбегінен k-сыншы символдан бастап ұзындығы L болатындай бағыныңқы s2 тізбегін бөліп алатын substr функциясын программа ішінде қарастырайық:
#include #include
substr(s1, s2, L, k, m) {
char s1[], s2[]; int L,k,m; int i,j;
if (L+k>=m) k=m-L-1; for(i=1, j=0; is2[j] = s1[i];
}
void main(void) {
char str1[80], str2[80]; int L, k, m=0; clrscr();
puts("\n сөз тізбегін енгізіңіз \n:"); while((str1[m++] = getchar())!=‟\n‟); printf("\n");
/* m өз мәнін сақтап қалады */
printf("\n L және k мәндерін енгізіңіз:\n"); scanf(“%d %d”,&L,&k); substr(str1,str2,L,k,m);
printf("%s\n",str2);
}
Достарыңызбен бөлісу: |