Разделы презентаций


Язык С

Содержание

Назначение подпрограммЭкономия кодаСтруктуризация программы

Слайды и текст этой презентации

Слайд 1Язык С
Лекция №4
Подпрограммы

Язык СЛекция №4Подпрограммы

Слайд 2Назначение подпрограмм
Экономия кода
Структуризация программы

Назначение подпрограммЭкономия кодаСтруктуризация программы

Слайд 3Два вида подпрограмм
Функция – возвращает значение через свое имя
a=sqrt(x);
Процедура –

выполняет какое-то действие
printf("Hello");
В языке C/C++ нет процедур, но есть функции

типа void.
Два вида подпрограммФункция – возвращает значение через свое имяa=sqrt(x);Процедура – выполняет какое-то действиеprintf(

Слайд 4Пример: возведение в степень
double power(double a, int n)
{ int

i;
double x=1;
for (i=0; i

if (n<0) x=1.0/x;
return x;
}

main()
{ int i;
for (i=-10; i<=10; i++)
printf("%lf\n", power(2,i) );
}

Описание функции

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

Заголовок функции

Формальные параметры функции

Фактические параметры

Пример: возведение в степеньdouble power(double a, int n) { int i;  double x=1;  for (i=0;

Слайд 5Формальные и фактические параметры
Параметры передаются по значению, т.е. создаются локальные

переменные, соответствующие формальным параметрам, и в них копируются значения фактических

параметров

Типы и число фактических параметров должны соответствовать формальным параметрам

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

Слайд 6Заголовок функции
double power(double a, int n);

main()
{ int i;

for (i=-10; i



double power(double a, int n);
{ int i;
double x=1;
for (i=0; i if (n<0) x=1.0/x;
return x;
}
Заголовок функцииdouble power(double a, int n); main() { int i;  for (i=-10; i

Слайд 7Создание библиотек функций
Lib1.cpp
Lib2.cpp
main.cpp
Lib1.h
Lib2.h
Lib1.obj
Lib2.obj
main.obj
main.exe

Создание библиотек функцийLib1.cppLib2.cppmain.cppLib1.hLib2.hLib1.objLib2.objmain.objmain.exe

Слайд 8Файл myfunc.c
#include
#include "myfunc.h"

double power(double a, int n)
{

int i;
double x=1;
for (i=0; i

x*=a;
if (n<0) x=1.0/x;
return x;
}
Файл myfunc.c#include #include

Слайд 9Файл myfunc.h


double power(double, int);

Файл myfunc.h double power(double, int);

Слайд 10Файл prog.c
#include
#include "myfunc.h"

main()
{ int i;
for

(i=-10; i

Файл prog.c#include #include

Слайд 11Область видимости имен
int m = 10; // Глобальная переменная

int f(int

n)
{ int i; // Локальная переменная
int k=0;

// Инициализация каждый вызов
char m='a';// Перекрытие глобального имени
return n; // Параметр – тоже локальная переменная
}


main()
{ int i; // Локальная переменная
i = m; // Обращение к глобальной переменной
i = f(i); // Вызов функции
}
Область видимости именint m = 10; // Глобальная переменнаяint f(int n){ int i;   // Локальная

Слайд 12Область видимости внутри модуля
main()
{ int i;
i=0;
{ int

i,j;
i=5;
}
j=0; // здесь ошибка
i++;

// здесь i станет 1
}
Область видимости внутри модуляmain() { int i; i=0; { int i,j;   i=5; } j=0; //

Слайд 13Область видимости внутри модуля
main()
{ int i;
i=0;
for (int

k=0; k

здесь ошибка
i++; // здесь i станет 1
}
Область видимости внутри модуляmain() { int i; i=0; for (int k=0; k

Слайд 14void-функции
void prt(int n)
{
printf("%10d\n",n);
return;
}

main()
{ int i;
for (i=0,i

i++) prt(i*i);
}

void-функцииvoid prt(int n){ printf(

Слайд 15Встраиваемые функции
inline double sqr(double x)
{ return x*x;
}

Помещать лучше в заголовочный

файл

Встраиваемые функцииinline double sqr(double x){ return x*x;}Помещать лучше в заголовочный файл

Слайд 16Классы памяти переменных
auto – локальные переменные создаются при входе и

уничтожаются при выходе из функции
static – переменные создаются при компиляции

программы и «живут» всё время выполнения программы
extern – переменная описана «где-то в другом месте» как глобальная
register – переменную следует хранить в регистре процессора, не может иметь адреса
Классы памяти переменныхauto – локальные переменные создаются при входе и уничтожаются при выходе из функцииstatic – переменные

Слайд 17Область видимости и классы памяти

Область видимости и классы памяти

Слайд 18Способы передачи аргументов в С

Способы передачи аргументов в С

Слайд 19Передача массивов
f(int a[10]);
f(int a[]);
f(int *a);


Варианты заголовков функций

Передача массивовf(int a[10]); f(int a[]); f(int *a);Варианты заголовков функций

Слайд 20Передача массивов
#include
#define N 10

int sum(int a[], int n)

{
int b = 0;
for

(int i=0; i return b;
}

int main()
{ int m[N];
for (int i=0; i printf("%d\n",sum(m,N)); // m – уже указатель
}
Передача массивов#include #define N 10 int sum(int a[], int n) {   int b = 0;

Слайд 21Функция сортировки массива
#include
#define N 10

void sort(int a[], int

n)
{
for (int i=0; i

(int j=i+1; j if (a[i]>a[j]) { int x=a[j]; a[j]=a[i]; a[i]=x; }
}


int main()
{
int m[N];
for (int i=0; i sort(m,N);
for (int i=0; i}
Функция сортировки массива#include #define N 10 void sort(int a[], int n) {  for (int i=0; i

Слайд 22Задача: бинарный поиск
int findbin(int x, int *a, int n)
{ int

left, right;
left=0; right=n-1;
while (right>left)
{ k=(right+left)/2;

if (a[k]==x) return k;
else if (x>a[k]) left=k+1;
else right=k;
}
return -1;
}
Задача: бинарный поискint findbin(int x, int *a, int n){ int left, right; left=0; right=n-1; while (right>left)

Слайд 23char str[12] = "Borland C++";

Передача строк
int strlen(char *s);
{ int k=0;

while (*s++) k++;
return k;
}
printf("%d\n", strlen("abc"));

char str[12] =

Слайд 24Задача: поиск символа в строке
int findc(char c, char *s)
{ int

n=0;
while (*s)
{ if (c==*s++) return n;

else n++;
}
return -1;
}
Задача: поиск символа в строкеint findc(char c, char *s){ int n=0; while (*s)  { if (c==*s++)

Слайд 25Передача функций как параметров
double deriv(double f(double), double x, double eps)
{

return (f(x+eps*0.5)-f(x-eps*0.5))/eps;
}

double g(double x)
{
return x*x;
}

int main()
{
printf("%lf",deriv(g,2.0,1E-6));
}

Передача функций как параметровdouble deriv(double f(double), double x, double eps){ return (f(x+eps*0.5)-f(x-eps*0.5))/eps;}double g(double x){ return x*x;} int

Слайд 26Рекурсивные функции
fact(int n)
{ int a;
if (n

= fact(n-1)*n;
return a;
}

Рекурсивные функцииfact(int n){ int a; if (n

Слайд 27Рекурсивные функции
fib (int n)
{ if (n

return fib(n-1)+fib(n-2);
}

main()
{
printf("%d\n",fib(5));
}

Рекурсивные функцииfib (int n){ if (n

Слайд 28Функции с переменным числом параметров
void f(int a, int b, ...)

Тип va_list
Макрос

va_start(list, last_fixed)
Макрос va_arg(list, arg_type)
Макрос va_end

Функции с переменным числом параметровvoid f(int a, int b, ...)Тип		va_listМакрос 	va_start(list, last_fixed)Макрос 	va_arg(list, arg_type)Макрос 	va_end

Слайд 291-й способ: последний параметр – 0
int sum1(int a, ...)
{

va_list args;
int result=a, t;
va_start(args,a);
while(t=va_arg(args,int))
result+=t;
va_end(args);

return result;
}
1-й способ: последний параметр – 0 int sum1(int a, ...){ va_list args; int result=a, t; va_start(args,a); while(t=va_arg(args,int))

Слайд 302-й способ: первый параметр – число аргументов
int sum2(int num,

...)
{ va_list args;
int result=0, i;
va_start(args,num);
for (i=0; i

i++)
result+= va_arg(args,int);
va_end(args);
return result;
}
2-й способ: первый параметр – число аргументов int sum2(int num, ...){ va_list args; int result=0, i; va_start(args,num);

Слайд 313-й способ: первый параметр – строка формата
#include
#include

void

errmsg(char *fmt, ...)
{ va_list args;
printf("Error:");
va_start(args,0);
vprintf(fmt, args);
va_end(args);

return;
}

main()
{ errmsg("%s - (%s)\n","First","Second");
}
3-й способ: первый параметр – строка формата #include #include void errmsg(char *fmt, ...){ va_list args; printf(

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика