Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_новое.DOC
Скачиваний:
7
Добавлен:
28.09.2019
Размер:
486.4 Кб
Скачать

Void main(void)

{

float result, p =3.14;

result = sq(p);

result = sq(p + 2.15 * 5.0);

result = sq(100.0);

if (sq(p) == 100.0) p = sq(p);

switch (sq(p))

{

case 100 : printf(“Ответ - 100\n”);

case 10000 : printf(“Ответ - 10000\n”);

}

result = sum(sq(p), sq(2.5));

result = sum(sq(p+1.0)+2.0, 6.0);

}

float sum(float a, float b) // Определение функции sum()

{

return(a+b);

}

float sq(float a) // Определение функции sq()

{

return(a*a);

}

В качестве примера можно рассмотреть сортировку элементов линейного массива методом “пузырька” :

// Пример 6.3.

//Программа сортировки методом пузырька

#include <stdio.h>

#include <stdlib.h>

#define MAXSIZE 30

void bubble_sort(int array[], int size)

{

int temp,i,j;

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

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

if (array[i] < array[j])

{

temp=array[i];

array[i]=array[j];

array[j]=temp;

}

}

void main (void)

{

int values[MAXSIZE],i;

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

values[i]=rand() % 100;

bubble_sort(values,MAXSIZE);

for (i=0; i<MAXSIZE; i++) printf("%d\n ",values[i]);

}

Очень удобной, а иногда и просто необходимой формой передачи аргумента является указатель (см. примеры 6.4 и 6.5):

// Пример 6.4.

// Указатели как параметры функции

#include <stdio.h>

void swap_values(int *a, int *b)

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

void main(void)

{

int one = 1, two = 2;

swap_values(&one,&two);

printf("one равно %d two равно %d\n",one,two);

}

// Пример 6.5.

// Найти сумму элементов вектора с использованием указателя

#include <stdio.h>

int sum_vect(int *pv, int n)

{

int i, s = 0;

for (i=0; i<n; i++) s+=*(pv+ i);

return(s);

}

void main(void)

{

int summa, *pvect, vect[9]={1,2,3,4,5,6,7,8,9};

pvect = vect;

summa = sum_vect(pvect, 9);

printf (“Сумма элементов вектора %d\n”,summa);

}

В операторе s + = * (p + i); суммируются значения, которые находятся по адресу *(p + i). Оператором summa = sum (pvect,9); из основной программы в функцию sum2 передается адрес первого элемента и размер массива.

Часто, особенно в библиотеке языка Си используются функции, возвращающие указатели:

// Пример 6.6.

// Функции, возвращающие указатели

#include <stdio.h>

char *find(char *string)

{

int i=0;

while((string[i]!=' ') && (string[i]!='\0')) // Пока не будет найден пробел

putchar(string[i++]); // или конец строки

if (string[i]==' ') return &string[i]; // Возвращает адрес первого пробела

else return NULL; // Возвращает адрес нулевого байта

}

Void main(void)

{

char *ptr;

ptr=find("Поиск первого пробела в строке");

printf("\nАдрес равен %p\n",ptr);

}

7 Библиотечные функции

7.1 Функции форматного ввода-вывода

Универсальной функцией форматного вывода является printf(). Прототип этой функции содержится в библиотечном файле <stdio.h>:

Int printf(char*format[, argument,...]);

Здесь format — это управляющая строка символов, которая показывает, как должны быть напечатаны параметры. Она содержит:

  1. символы, печатаемые текстуально;

  2. идентификаторы данных, называемые также “спецификациями преобразования”;

[,argument,...] — список аргументов, которые выводятся с помощью функции printf (список аргументов может отсутствовать).

Спецификации преобразования имеют формат:

%[флаги][ширина][.точность][F | N | h | l]тип.

Знак % и тип являются обязательными, параметры в квадратных скобках —необязательны; [F | N | h | l] — модификатор принимаемого размера: F и N — для указателей far (дальний адрес) и near (ближний адрес, берется по умолчанию), h— короткое целое, l — длинное целое.

Спецификатор формата извлекает аргумент и форматирует его по заданному формату. Основные типы преобразования данных приведены в табл. 7.1.

Таблица 7.1 — Спецификаторы преобразования типов

Символ типа

Входной аргумент

Формат вывода

1

2

3

d

Целое

Знаковое десятичное целое

I

Целое

То же

o

Целое

Беззнаковое восьмеричное целое

u

Целое

Беззнаковое десятичное целое

x

Целое

Беззнаковое шестнадцатеричное целое (a, b, c, d, e, f)

X

Целое

Беззнаковое шестнадцатеричное целое (A, B, C, D, E, F)

f

Число с плавающей точкой

Знаковое число в форме

[—] dddd.dddd

Символ типа

Входной аргумент

Формат вывода

e

E

Число с плавающей точкой

Знаковое число в форме

[—] d.dddd e[+/—]ddd

[—] d.dddd E[+/—]ddd

(показательная форма)

g

G

То же

Знаковое число в форме e или f в зависимости от заданного значения и точности: 0.1234 —> 0.1234

0.00001234 —> 1.234 e-5 

c

Символ

Печатается символ

s

Строка

Печатается строка

%

Нет

Печатается символ %

p

Указатель

Входной аргумент печатается как указатель

+

Знак

Число выводится со знаком

-

Знак

Выравнивание по левому краю

// Пример 7.1.

// Вывод числа в десятичном, восьмеричном

// и шестнадцатеричном виде

#include <stdio.h>

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