Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч пос Информатика.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
396.8 Кб
Скачать

Void main(void)

{

int i, N;

printf(”Введите N: ”);

scanf(”%d”, &N);

printf(”Таблица квадратов:\n”);

for(i=1; i<=N; i++) printf(”%2d %4d\n”, i, i*i);

}

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

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

Рассмотрим пример другой программы, которая использует цикл while для вычисления длины строки:

#include <stdio.h>

Void main(void)

{

int i;

char s[100];

printf(”Введите строку:\n”);

gets(s);

i=0;

while(s[i] != 0) i++;

printf(”Длина строки %d символов.\n”);

}

Для ввода строки в этом примере использована функция gets, так как scanf обеспечивает только ввод отдельных слов.

В следующем примере по радиусу круга вычисляется его площадь:

#include <stdio.h>

main()

{

double r, pi=3.1415926535;

printf("Введите радиус круга: ");

scanf("%lf", &r);

printf("Площадь круга: %f\n", pi*r*r);

}

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

При выводе чисел типа double использовать в спецификации преобразования признак удвоенной точности (букву l) не обязательно. Однако при вводе значений типов long и double такой признак в спецификации необходим, иначе значение будет введено неверно.

6. Математические функции

Математические функции Си описаны в заголовочном файле math.h. Программа, которая использует математические функции, должна содержать следующую строку:

#include <math.h>

Наиболее часто применяются следующие функции:

double cos(double x) – вычисляет косинус аргумента;

double fabs(double x) – вычисляет абсолютное значение;

double exp(double x) – вычисляет экспоненциальную функцию;

double log(double x) – вычисляет натуральный логарифм;

double log10(double x) – вычисляет десятичный логарифм;

double sin(double x) – вычисляет синус;

double sqrt(double x) – вычисляет квадратный корень;

double tan(double x) – вычисляет тангенс.

Из приведенных описаний видно, что математические функции работают с вещественными числами удвоенной точности: аргументы имеют тип double и возвращаемое значение также имеет тип double.

В качестве примера рассмотрим программу, которая вводит значение x, вычисляет значение ex и выводит полученное значение на экран:

#include <stdio.h>

#include <math.h>

main()

{

double x, y;

printf("Введите значение x: ");

scanf("%lf", &x);

y = exp(x);

printf("exp(x)=%f\n", y);

}

7. Операции с текстовыми строками

Строка представляет собой массив символов типа char, ограниченный нулем.

Операции обработки строк по своей сути очень просты и поэтому удобны для изучения основ алгоритмизации и программирования. Рассмотрим в качестве примера функцию, которая определяет длину строки (завершающий ноль не учитывается):

Int Len(char *string)

{

int j=0;

while(string[j] != 0) j++;

return j;

}

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

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

При выполнении операции вставки символа в строку необходимо освободить место для символа, подвинув на одну позицию вправо все символы строки, расположенные за позицией вставки (включая завершающий 0). Последовательность действий показана на рисунке 1. Перестановка символов начинается с конца строки, поэтому должен использоваться цикл с декрементом счетчика.

Рис. 1. Последовательность действий при выполнении операции вставки символа

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

Если требуется добавить символ в конец строки, то проводить перестановку элементов строки не нужно: новый символ записывается за последним символом строки, а в следующую позицию заносится нулевой символ окончания строки ('\0').

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

Рис. 2. Последовательность действий при выполнении операции удаления символа

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