Этапы разработки программы. Разработка или выбор алгоритма решения поставленной задачи. Оформление документации на программу, страница 29

int index(char s [], char [])

[

inti,j, k;

for (i=0; s[ i ] 1=' \0 ', i++)

[

for (j=i, k=0; t[k]!=' \0 '&& t[k]==s[j ]; j++, k++)

if (t[ k ]= \0 ') return (i);

}

return (-1);

}

2. Функция возвращает более одного данного.

а) Результат — скалярные переменные.

Пример: Даны две переменные. Требуется обменять их значения.

void swop (float *а, float *b)

{

float *с;

Вызов функции swop:

#include <conio.h> #include <string.h> #include <dir.h>

struct stud

(char fio[20];

float reit;}

char gr[8],course[20], *im f

FILЕ * уеd; int kol

struct stud st; )

create(void)

(int kol, i;

float sum=0;

imf=(char*)malloc(13);

printf("Имя файла ");gets(im f);

ved=fореn(im f,"w");

if (ved==NULL)return(-1); else{

printf("Группа:");gets(gr);

fprintf(ved,"Груnnа:%йп",gr);

printf("Предмет:");gets(course);

fprintf(ved,"Предмет:%sM",course);

printf("Кол-во студентов ");sсаnf("%d",&kol);

for(1=0;1<kol;i++)

{printf("Фамилия");sсаnf("%а",&st.fio);

printf("Оценка");sсаnf("%f'’, & st.reit);

sum+=st.reit;//сумма оценок для подсчета среднего бала группы

fprintf(ved,"%-2d %-20s %-5.2'",i= 1,st.fio,st.reit);

}

fprintf(ved, "Средни бал группы =%5.2f',sum/kol);

fclose(ved);return(0);

}

main()

(switch(createQ)

(case(-1): printf(' Файл не открылся для записи");Ьгеаk;

case(0): printf("Файл создан");

}

}

п.14.Кассы памяти.

Каждая переменная и функция, описанная в программе на Си, принадлежит какому-либо классу памяти. Класс памяти для переменной и функции определяет, какое время существования она имеет — глобальное или локальное и влияет на область действия переменной.

В Си все функции являются глобальными. Класс памяти задается либо по расположению ее описания, либо при помощи спецификатора класса памяти, который помещается перед описанием переменной.

Перечислим спецификаторы классов памяти:

auto — автоматическое или локальное время существования;

register — регистровое;

extern — внешнее;

static — статическое.

Класс памяти для функции всегда extern, если только перед описанием функции не стоит static.

1. Автоматические переменные(аutо).

Автоматические переменные можно описывать явно, используя спецификатор класса памяти auto, но такой способ описания применяется редко. Обычно указание на то, что переменная является автоматической, задается неявно и следует из положения в программе точки описания такой переменной. По умолчанию, всякая переменная, описанная внутри функции или блока, ограниченного в "(}" и не имеющая явного указания на класс памяти, относится к классу автоматической переменной. Поле видимости такой переменной от точки описания до конца блока, где она описана. Доступ к таким переменным из внешнего блока не возможен т.к. до момента входа в блок переменная еще не существует. Память для таких переменных отводится динамическая при входе в блок, а при выходе из блока память, отведенная под автоматические переменны, освобождается.

Применение автоматических переменных внутри локальных блоков позволяет приблизить переменную к месту ее использования,.что повышает наглядность программы.

2.регистровыепеременные.(register)

Спецификатор памяти register может использоваться только для автоматических переменных или для формальных параметров функции. Такой спецификатор указывает, что пользователь желает разместить переменную не в памяти, а в одном из регистров. Если в момент выполнения программы будет не хватать регистров, переменная будет размещена в памяти. Этот класс памяти рекомендуется использовать для переменных, доступ к которым в функциях выполняется часто. Полученный в результате код будет выполняться быстрее. В регистре может быть размещен объект, размером не более чем 2 байта (int).

К переменным, размещенным в регистре, нельзя применять операцию адресации. register int х, у;