Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
3
Добавлен:
15.11.2019
Размер:
2.72 Mб
Скачать

Int main()

{

float left, right, tochn, koren;

printf(“\n левая граница интервала:”);

scanf(“%f”, &left);

printf(“\n правая граница интервала:”);

scanf(“%f”, &right);

if (left >= right)

{

puts(“Error!”);

return -1; // аварийное завершение программы

}

printf(“\n точность вычислений:”);

scanf(“%f”, &tochn);

printf(“\n”);

koren = root(test_func, left, right, tochn);

printf(“\n корень функции в заданном интервале = %3.5f”, koren);

return 0;

}

float test_func(float x)

{

return x*x–1.0;

}

float root(point_func f, float a, float b, float eps)

{

float x, y, c, fx, fy, fc;

fx = (*f)(x);

fy = (*f)(y);

if (fx * fy > 0.0)

{

puts(“Неверный интервал!”;

return -1; // аварийное завершение программы

}

do

{

c = (yx)/2.0; // центр интервала

fc = (*f)(c); // значение функции в нем

if (fc * fx > 0.0)

{

x = c;

fx = fc;

}

else

{

y = c;

fy = fc;

}

}

while ((fc!=0.0) && (fabs(y-x) > eps));

return c;

}

Работа программы:

левая граница интервала:0.0

правая граница интервала:2.0

точность вычислений:1.0e-5

корень функции в заданном интервале = 1.00000

Указатели и строки

Указатели во многом облегчают работу со строками. Строка – это одномерный массив символов. Поэтому указатель на строку эквивалентен имени этой строки и содержит адрес ее начального символа:

char *c_ptr;

char string[10] = “язык Си”;

c_ptr = string;

Более того, если строка задана как:

string = “язык Си”;

то это будет эквивалентно оператору присваивания:

c_ptr = “язык Си”;

Мы присвоили указателю на данные символьного типа значение строковой константы. Другими словами, мы поместили в указатель адрес начального символа строки “язык Си”. Остальные символы этой строки будут расположены в последующих ячейках оперативной памяти.

Таким образом, любой указатель на данные символьного типа может рассматриваться как указатель на строку символов, задать которую можно оператором присваивания, ввести или вывести как обычную строку:

char *message;

message = “Славное море – священный Байкал!”;

puts(message);

printf(“\n%s”, message);

При таком задании строки нет необходимости рассчитывать число символов в ней и добавлять в ее конец нулевой символ ‘\0’ – все это выполнится автоматически. Кроме того, сама строка не помещается в указатель: это невозможно сделать, так как указатель – это переменная. Указатель в этом случае будет только содержать адрес первого символа строки, записанной в неизвестной нам области оперативной памяти компьютера.

Массив указателей на строки позволяет задавать сразу несколько строк:

char *message[4];

message[0] = “Славное ” ;

message[1] = “море ” ;

message[2] = “- ” ;

message[3] = “священный Байкал!” ;

Элементами этого массива являются адреса первых символов строк. С ними можно работать как с элементами обычных символьных массивов, например, выводить их на экран:

printf(“\n%s%s%s%s”, message[0], message[1], message[2], message[3]);

На экран будет выведено сообщение:

Славное море – священный Байкал!