Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R5_Funktsii_Simvolnye_stroki_i_funktsii_nad_nim....doc
Скачиваний:
2
Добавлен:
02.08.2019
Размер:
65.54 Кб
Скачать

Тема № 5. Функции. Символьные строки и функции над ними

<тип> <имя_функции> (<спецификация параметров>)

<тело функции>

<обозначение_типа> <имя_параметра>

, …

int printf (const char *format, …);

int scanf (const char *format, …);

return; // Возврат без передачи результата

return <выражение>; // Возврат значения

<тип> <имя_функции>(<спецификация параметров>);

double Func(int n, double x);

double Func(int, double);

<обозначение_функции>(<список факт. параметров>)

#include <stdio.h>

#include <conio.h>

int add(int x1, int x2); // прототип (описание) функции

int add(int x1, int x2) // определение функции

{ return (x1 + x2); }

void main()

{

float j = 12.99;

printf("\n1.%d",add(j,14.99));// вызов функции

// Передача float-> int

getch(); // Результат - 26

}

double Mat(long x, int n)

{

if (x*x < n) return (x*2);

return (n – 1);

}

return (double)(x*2);

return (double)(n–1);

int func1(int k, double x)

{

k++; x = x*x;

return (k+2);

}

Void main()

{ int k0=12, res;

double x0=2.2;

res = func1(k0, x0);

printf(“k0=%d,x0=%10.4lf”,k0,x0);// k0=12, x0=2.2

// - то, что было до обращения к func1

}

Стек

int func1(int *k, double *x)

{

(*k)++;

*x = (*x)*(*x);

return ((*k)+2);

}

Void main()

{ int k0=12, res;

double x0=2.2;

res = func1(&k0, &x0);

printf(“k0=%d, x0= %10.4lf”,k0,x0);// k0=13, x0=4.84

}

double Num[]

double *Num

char Str[] == char *Str

\0’

Указатели на функции

<тип>(*<имя_указат.>)(<спецификация_параметров>);

где <тип> - определяет тип возвращаемого функцией значения

<имя_указателя>

<спецификация_параметров>

int (*func0)(void);

int *func0(void);

#include <stdio.h>

#include <conio.h>

Int add(int x1, int x2); // прототип (описание) функции

int sub(int x1, int x2);

int mult(int x1, int x2);

int add(int x1, int x2) { return (x1 + x2); }

int sub(int x1, int x2) { return (x1 - x2); }

int mult(int x1, int x2) { return (x1 * x2); }

Void main()

{

int (*oper)(int x1,int x2);//Указатель oper 0xcf2

printf("\n1.%d",add(12,14));//Явный вызов функции

oper = add;

printf("\n2.%d",(*oper)(112,114));//oper 0x00401005

add(int,int)

oper = sub;

printf("\n3.%d",(*oper)(114,100));//oper 0x00401014

sub(int,int)

oper = mult;

printf("\n4%d",oper(4,100));//Вызов через имя

// указателя oper 0x0040100a mult(int,int)

getch();

}

Массивы указателей на функции

<тип>(*<имя_масс.>[<размер>])(<спец.параметров>);

Пример:

int (*farray[4]) (int);

<int имя_функции (int)>

Главная функция. Передача аргументов главной функции

void main( int argc, char *argv[])

«Programm arguments» раздела Project Settings "D:\Prog\dd\Debug\dd.exe".

char *argv[] эквивалентно описанию char **argv

Указатель на функцию в качестве аргумента другой функции

void qsort( void *base, size_t num, size_t width,

int (*compare)(const void *elem1, const void *elem2));

отрицательное, если *elem1 < *elem2;

положительное, если *elem1 > *elem2;

0, если *elem1 == *elem2;

/* QSORT.C: This program reads the command-line parameters and uses qsort to sort them. It then displays the sorted arguments. */

#include <stdafx.h>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

int compS( const void *arg1, const void *arg2 );

void main( int argc, char **argv )

{

int i;

argv++; argc--;//Eliminate argv[0] from sort:

// Sort remaining args using Quicksort algorithm:

qsort((void *)argv, (size_t)argc, sizeof(char *), compS );

for( i = 0; i < argc; ++i )// Output sorted list:

printf( "%s ", argv[i] );

printf( "\n" );

}

int compS( const void *arg1, const void *arg2 )

{ /* Compare all of both strings: */

return _stricmp(*( char**) arg1, *( char**)arg2);

}

typedef unsigned int size_t;

Output: every good boy deserves favorboy deserves every favor good

Рекурсивные программы

n! = 1*2*…*n, 0!=1.

long Factorial(int n)

{

if(n < 0) return 0; // не определен – возврат нуля

if (n == 0 ) return 1;

return(n* Factorial(n - 1));

}

A() { … B(); …}

B() { … A(); …}

puts

puts(const char *str); выводит на экран строку str.

gets

char* gets(char *str); вводит с экрана строку str.

1. Функции определения длины строки.

strlen

unsigned strlen(const char *str);

вычисляет длину строки str

strcspn

int strcspn(const char *str1, const char *str2);

определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2

strspn

int strspn(const char *str1, const char *str2);

определяет длину первого сегмента строки str1, содержащего только символы из множества символов строки str2.

2. Функции получения чисел по их символьному представлению

atof

double atof(const char *str);

преобразует строку str в вещественное число типа double.

atoi

int atoi(const char *str);

преобразует строку str в целое число типа int.

atol

long atol(const char *str);

преобразует строку str в целое число типа long.

3. Функции получения символьного представления чисел

itoa

char *itoa(int value, char *str, int radix);

преобразует целое value в строку str. При изображении числа используется система счисления с основанием radix. Если основание 10 и число отрицательное – первым символом будет «-».

ltoa

char *ltoa(long value, char *str, int radix);

преобразует длинное целое value в строку str. При изображении числа используется система счисления с основанием radix.

ultoa

char *ultoa(unsigned long value, char *str, int radix);

преобразует беззнаковое длинное целое value в строку str. При изображении числа используется система счисления с основанием radix.

4. Функции копирования строк

strcpy

char * strcpy (char *sDest, const char *sSource);

копирует байты строки sSource в строку sDest.

strncpy

char * strncpy (char *sDest, const char *sSource, int count);

копирует первые count байт строки с в строку sDest. Если count меньше или равно длине sSource заключительный символ ‘\0’ автоматически не добавляется в sDest. В противном случае заключительный символ вставляется после count байт, среди которых строка sSource, дополненная пробелами.

strdup

char * strdup (const char *str);

выделяет память и переносит в нее копию строки str.

5. Функции конкатенации строк

strcat

char * strcat (char *sDest, const char *sSource);

приписывает строку sSource к строке sDest.

6. Функции сравнения строк

strcmp

char *strcmp (const char *str1, const char *str2);

сравнивает строки str1 и str2. Результат отрицателен, если str1 < str2; равен 0, если str1 == str2, и положителен, если str1 > str2.

strncmp

char * strncmp (const char *str1, const char *str2, int count);

сравнивает первые count байт строк str1 и str2. Результат отрицателен, если str1 < str2; равен 0, если str1 == str2, и положителен, если str1> str2.

strnicmp

char * strnicmp (const char *str1, const char *str2, int count);

сравнивает первые count байт строк str1 и str2, не учитывая регистра (прописные и строчные буквы считаются одинаковыми). Результат отрицателен, если str1 < str2; равен 0, если str1 == str2, и положителен, если str1> str2.

7. Функции поиска строк

strchr

char * strchr (const char *str, int c);

ищет в строке str первое вхождение символа c. Возвращает NULL, если символ в строке отсутствует.

strrchr

char * strrchr (const char *str, int c);

ищет в строке str последнее вхождение символа c. Возвращает NULL, если символ в строке отсутствует.

strstr

char * strstr (const char *str1, const char *str2);

ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2, или NULL, если подстрока str2 в строке str1 отсутствует.

strpbrk

char * strpbrk (const char *str1, const char *str2);

ищет в строке str1 первое вхождение любого символа из строки str2. Возвращает NULL, если такой символ в строке отсутствует.

strtok

char * strtok (char *str1, const char *str2);

ищет в строке str1 лексемы, выделенные символами из второй строки str2.

8. Функции преобразования строк

strlwr

char * strlwr (const char *str);

преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра.

strupr

char * strupr (const char *str);

преобразует буквы нижнего регистра в строке в соответствующие буквы верхнего регистра.

9. Функции заполнения строк

strset

char * strset (const char *str, int c);

Заполняет строку str заданным символом c.

strnset

char *strnset (const char *str, int c, int count);

Заполняет первые count байт строки str заданным символом c.

10. Функция для перевода символов

CharToOem

#include <windows.h>

char *mesg = "cannot access file";

char *rus = "файл недоступен";

char rus1[120];

CharToOem(rus,rus1);

printf("%10s\r\n", rus1);

getch();

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]