Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Работа с функциями в языке программирования Си

Тип Реферат
Предмет Информатика
Просмотров
531
Размер файла
26 б
Поделиться

Ознакомительный фрагмент работы:

Работа с функциями в языке программирования Си

Лабораторная работа

"Работа с функциями в языке программирования Си++"


Цель работы: ознакомиться с особенностями применения функций в языке Си++, с понятием прототипа и областью его применения, с понятием автоматических внешних, статических и регистровых переменных и их применением при составлении программ с использованием функций.

1. Теоретические сведения

Функции

Программы на языке СИ обычно состоят из большого числа отдельных функций (подпрограмм). Как правило, они имеют небольшие размеры и могут находиться как в одном, так и в нескольких файлах.

Связь между функциями осуществляется через аргументы, возвращаемые значения и внешние переменные.

Вызов функции осуществляется следующим образом: <тип функции >(параметр 1, параметр 2 , …);

Если функция имеет переменное число параметров, то вместо последнего из них указывается многоточие.

Передача одного значения из вызванной функции в вызвавшую происходит с помощью оператора возврата, который записывается в следующем виде:

return (выражение);

В этом случае значение выражения (в частном случае может быть просто переменная) передается в основную программу и подставляется вместо обращения к функции.

Пусть вызывающая программа обращается к функции следующим образом:


a=fun(b,c);

Здесь b и c – аргументы, значения которых передаются в вызываемую подпрограмму.

Если описание функции начинается так: fun(i,j) , то переменные i и j получат значения a и b соответственно.

Пример 1. Оформить получение абсолютной величины числа в виде функции. Сама функция может быть оформлена в виде отдельного файла. В этом случае выполняется его включение процедурой #include.

Программа имеет следующий вид:

#include <stdio.h>

main()

{int a=10,b=0,c=-20;

int d,e,f;

d=abs(a); /*обращение к функции abs*/

b=abs(b);

f=abs(c);

printf("%d %d %d",d,b,f);

}

#include "abc.c" /*включениефайла abc.c сфункцией abs*/

/*Функция, вычисляющая абсолютную величину числа */

abs(x)

int x; /*Описание переменных, работающих в функции */

{int y;

y=(x<0)?–x:x; /*Определение абсолютной величины числа*/

return (y); /*Возвращает значение у вызывающей программе*/

}


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

Пример 2. Оформить в виде функции вычисление f=Öx + y/z.

В первом примере функция хранилась в виде отдельного файла и включалась процедурой #include. Функция может быть включена в один файл с вызывающей программой. В этом случае процедура #include не требуется, а сама функция должна быть объявлена в основной программе, если она имеет не целый тип. Приведем программу для примера 2, оформленную таким способом.

Программа имеет вид:

#include <stdio.h>

main()

{ double f,x=5.5,y=10.1,z=20.5, vv() /*объявлены переменные и функция vv*/

f=vv(x,y,z); /*обращение к функции vv*/

printf("lf",f); /*вывод результата */

}

/*функция */

double vv(x,y,z)

double x,y,z; /*объявление переменных функции */

{double f;

f=sqrt(x)+y/z; /*вычисление значения функции */

return(f); /*возврат вычисленного значения функции */

}


В языке СИ аргументы функции передаются по значению, т.е. вызванная функция получает временную копию каждого аргумента, а не его адрес. Это означает, что функция не может изменять оригинальный аргумент в вызвавшей ее программе. Однако это легко сделать, если передавать в функцию не переменные, а их адреса.

Пример 3. В приведенной ниже программе вводятся некоторые значения переменных а и b, потом в функции izm они меняются местами.

#include <stdio.h>

main()

{int a,b;

scanf ("%d %d", &a, &b);

izm (&a, &b); /*обращение к функции izm; аргументами являются адреса переменных a и b*/

printf("%d, %d",a, b); /*вывод на экран измененных значений */

}

#include "izm.c" /*включение файла izm.c с функцией izm */

/*функция*/

izm(a, d); /*аргументы a и b являются указателями */

int *a, *b; /* *a и *b – значения, на которые указывают указатели */

{int c;

c=*a;

*a = *b;

*b=c; /*обменместами */

}

Функция izm получает копию адресов переменных a и b, меняет местами значения, записанные по этим адресам, и передает управление в основную программу. Адреса &a и &b в основной программе не изменялись, а вот значения, на которые они указывают, поменялись местами.

Если в качестве аргумента функции используется имя массива, то ей передается адрес начала массива, а сами элементы не копируются. Функция может изменять элементы массива, сдвигаясь (индексированием) от его начала.

Пример 4. В массиве S поменять местами элементы: первый со вторым, третий с четвертым и т.д. Оформить этот алгоритм в виде функции reverse.

#include <stdio.h>

main()

{int i,j,s[6]; /* описание переменных i,j и массива s целого типа */

for (i=0; i<6; i++)

scanf("%d",&s[i]); /*вводэлементовмассива s*/

reverse(s); /*обращениекфункции reverse*/

for (i=0; i<6; i++)

printf("%d",s[i]); /*вывод полученного массива */

}

include "reverse.c" /*включениефайла reverse.c сфункцией reverse */

/*функция*/

reverse(s)

int s[]; /*описание работающего в подпрограмме массива */

{

int a,i;

for (i=1; i<5; i+=2)

{a=s[i]; s[i]=s[i+1]; s[i+1]=a;} /*обменэлементовместами*/

}

Рассмотрим особенности работы функции с двумерным массивом. В предыдущем примере в функции массив был описан как int s[]; для двумерного массива а нельзя записать a[][]. В описании двумерного массива во второй квадратной скобке должно быть указано количество столбцов, например: a[][3].

Пример 5. Увеличить все элементы массива а(5,5) в два раза. Оформить этот алгоритм в виде подпрограммы.

#include <stdio.h>

main()

{int a[5][5]; /*описаниемассива a*/

int i,j; /*объявление переменных i,j*/

for (i=0;i<5;i++)

for (j=0; j<5; j++)

scanf("%d",a[i][j]); /*вводмассива*/

mas(a); /*обращение к функции mas*/

for (i=0; i<5; i++)

for (j=0; j<5; j++)

printf("%d", a[i][j]); /*вывод полученного результата*/

}

/*функция*/

mas(a)

int a[][5]; /*описание массива а*/

{int i,j; /*описание переменных i,j*/

for (i=0; i<5; i++)

for (j=0; j<5; j++)

a[i][j] = 2*a[i][j]; /*увеличение элементов массива в 2 раза*/

}

Классы памяти

В языке СИ различают четыре основных памяти: внешнюю (глобальную), автоматическую (локальную), статическую и регистровую.


Внешние переменные определены вне любой из функций, следовательно, доступны для многих из них. Область внешней переменной простирается от точки во входном файле, где она объявлена, и до конца файла. Если внешняя переменная определена в другом файле, то вступает в силу описание extern (внешний). На рис.1 показано, где объявляются и на что распространяется область действия внешних переменных, если программа main и вызываемая функция находятся в данном файле. На рис. 2 демонстрируются отличия, имеющие место, когда main и вызываемая функция находятся в разных файлах. В файле с вызываемой функцией внешние переменные будут доступны после их описания с помощью ключевого слова extern.

Пример 5. Оформить в виде функции вычисление выражения:

f=a×x2+b×x+c;

В приведенной ниже программе заданные переменные объявлены как внешние, причем основная программа и функция находятся в одном файле.


#include <stdio.h>

int a=5, b=7, c=10,x; /* Объявление внешних переменных a,b,c,x целого типа*/

main ()

{ int f;

scanf ("%d", &x); /*Ввод значения переменной x*/

f=kv(); /*обращение к функции*/

printf ("%d",f); /*вывод на экран значения переменной f*/

}

/*функция*/

kv()

{int f;

f=a*x*x+b*x+c; /*вычисление значения f*/

return (f); /*возвращает значение f вызывающей программе*/

}


Если сравнить эту программу с программой, приведенной в примере 2, то можно обнаружить два различия:

1) после имени функции в скобках отсутствуют аргументы;

2) в функции не объявлены переменные, с которыми работает функция.

Это стало возможным потому, что переменные объявлены внешними, а значит они известны всему файлу, в том числе и функции.

Внешние переменные должны быть описаны до функции main(). Только в этом случае они становятся внешними (см. рис. 1).

Приведем программу для этого же примера, рассмотрев случай, когда основная программа и функция расположены в разных файлах.

#include <stdio.h>

int a=5, b=7, c=10,x,f; /* Объявление внешних переменных a,b,c,x,f целого типа*/

main ()

{

scanf ("%d", &x); /*Ввод значения переменной x*/

f=kv(); /*обращение к функции*/

printf ("%d",f); /*вывод на экран значения переменной f*/

}

#include "kv.c" /*включение файла kv.c функцией kv*/

/*функция*/

kv()

{extern int a,b,c,x,f;

f=a*x*x+b*x+c; /*вычисление значения f*/

return (f); /*возвращает значение f вызывающей программе*/

}


Как было сказано выше (см. рис. 2), если основная программа и функция расположены в разных файлах, то переменные в функции должны быть вписаны при помощи ключевого слова extern.

Рассмотрим теперь статические переменные. Статические переменные имеют такую же область действия, как автоматические, но они не исчезают, когда содержащая их функция закончит свою работу. Компилятор хранит их значения от одного вызова функции до другого. Статические переменные объявляются с помощью ключевого слова static. Можно статические переменные описать вне любой функции. Это создает внешнюю статическую переменную. Разница между внешней переменной и внешней статической переменной заключается в области их действия. Обычная внешняя переменная может использоваться функциями в любом файле (с помощью ключевого слова extern), в то время как внешняя статическая переменная может использоваться только функциями того же самого файла.

Регистровые переменные относятся к последнему классу. Ключевое слово register указывает, что переменная, о которой идет речь, будет интенсивно использоваться. Если это возможно, значения таких переменных помещаются во внутренние регистры процессора, благодаря чему программа будет более быстрой.

2. Задание

Взять задачу из лабораторной работы №4 и оформить ее решение в виде функции следующими способами:

1. функция расположена после ее вызова;

2. функция расположена после до ее вызова;

3. функция расположена после в другом файле;


Литература

1. Подбельский В.В. Язык Cu ++: Учебное пособие. - М.: Финансы и статистика,1995, - 560 с.

2. Страуструп Б. Язык программирования Сг ++. - М.: Радио и связь, 1991. - 352 стр.

3. Собоцинский В.В. Практический курс TurboCu ++. Основы объктно- ориентированного программирования. - М.: Свет, 1993. - 236 с.

4. Романов В.Ю. Программирование на языке Cu ++. Практический подход. - М.: Компьтер, 1993. - 160 с.

5. Уинер Р. Язык турбо Cu . - М.: Мир, 1991. - 384 с.

6. Юлин В.А., Булатова И.Р. Приглашение к Cu. - Мн.: Высш. Шк., 1990,- 224 с.

7. Котлинская Г.П., Галиновский О.И. Программирование на языке Cu. -Мн.: Высш. Шк., 1991. - 156 с.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

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

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно