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

36. Строки символов в языке с, их описание и инициализация

В языке С++ имеются следующие типы данных для работы со строками:

одномерный массив char;

специальный тип string, который в свою очередь существует в разных вариантах, соответствующих различным стандартам:

AnsiString ;

string из библиотеки STL.

  1. Функции, используемые в операциях ввода и вывода строк символов

Ввод-вывод строк - массивов char.Для ввода с консоли строк - массивов char обычно используются две стандартные функции:

scanf() (Функция scanf стандартной библиотеки предназначена для форматного ввода данных и имеет следующий прототип:

int scanf (char *format, arg1, arg2, . . . );

Функция scanf читает символы из стандартного входного потока (обычно с клавиатуры), интерпретирует их согласно спецификациям строки format и рассылает результаты в свои аргументы arg1, arg2 и т.д. Эти аргументы, каждый из которых должен быть указателем, определяют, где будут запоминаться должным образом преобразованные данные; спецификатор ввода %s; символ «&» перед именем массива типа char указывать не надо). Значения вводятся до появления первого символа “пробел”, а если его нет - до конца строки;

gets(char *S) (запись "char *S" означает, что на ее место нужно подставить массив типа char; можно также подставить указатель на char - см. тему "Указатели"). Значения вводятся до конца вводимой строки (т.е., в отличие от scanf(), может вводить строку с пробелами как единое целое).

Обе функции автоматически ставят в конец строки нулевой байт.

Вывод строк производится функциями printf() или puts() до первого нулевого байта (‘\0’):

printf() (Функция printf стандартной библиотеки предназначена для форматного вывода данных и имеет следующий прототип:

int printf (char *format, arg1, arg2, . . . );

Функция printf преобразует, форматирует и печатает свои аргументы arg1, arg2 и т.д. в стандартном выводе (обычно на экране) в соответствии с информацией, заданной аргументом format, и возвращает количество напечатанных символов.

Форматная строка format содержит два вида объектов: обычные символы, которые непосредственно копируются в выходной поток, и спецификации преобразования, каждая из которых вызывает преобразование и печать очередного аргумента функции printf. Любая спецификация преобразования начинается знаком % и заканчивается символом-спецификатором; спецификатор вывода %s) не переводит курсор после вывода на начало новой строки;

puts(char *S) автоматически переводит курсор после вывода строковой информации в начало новой строки.

Например:

char Str[30];

printf("Введите строку без пробелов : \n");

scanf("%s",Str);

или

puts("Введите строку");

gets(Str);

38.Функции в языке с и их описание

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

Любая программа на языке С состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Другие функции выполняются в момент их вызова.

Любая функция должна быть определена. Определение функции состоит из заголовка и тела:

тип имя ([список параметров]) //заголовок функции

{

тело функции

}

Заголовок функции задает ее имя, тип возвращаемого значения (результата) и список передаваемых параметров. Тип возвращаемого функцией значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void. Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя.

Тело функции представляет собой последовательность описаний и операторов в фигурных скобках. Пример:

int sumFunc(int n, int m, int p)

{

int result; //эту и 2 последующие строки можно

result = n + m + p; //заменить одной строкой:

return result; // return = n + m + p;

}

Эта простейшая функция, имя которой sumFunc, предназначена для нахождения суммы трех целых чисел n, m и p, которые передаются ей в качестве параметров. Возврат из функции подсчитанной суммы выполняется с помощью оператора, имеющего следующий формат:

return [выражение];

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

void main()

{

int a = 10, b = 20, c = 30, res;

puts("a = 10, b = 20, c = 30");

res = sumFunc(a, b, c); //эту и следующую строки можно совместить:

printf("a + b + c = %d", res); // printf("a + b + c = %d", sumFunc(a, b, c));

}

Если в программе сначала определить главную функцию main, а затем – функцию sumFunc, то перед функцией main нужно будет поместить так называемый прототип функции sumFunc, иначе при выполнении оператора

res = sumFunc(a, b, c);

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

#include <stdio.h>

int sumFunc(int n, int m, int p); //прототип функции sumFunc

void main() //определение функции main

{

int a = 10, b = 20, c = 30;

puts("a = 10, b = 20, c = 30");

printf("a + b + c = %d", sumFunc(a, b, c)); //вызов функции sumFunc

}

int sumFunc(int n, int m, int p) //определение функции sumFunc

{

return n + m + p;

}

В прототипе функции имена параметров можно не указывать, достаточно лишь указать их тип:

int sumFunc(int, int, int); //прототип функции sumFunc

39.Глобальные, локальные и статические переменные.

Все величины, описанные внутри функции, а также ее параметры, являются локальными объектами. Областью их действия является функция. При выходе из функции локальные объекты разрушаются и, следовательно, значения локальных переменных между вызовами одной и той же функции не сохраняются. Если этого требуется избежать, при объявлении локальных переменных используется модификатор static. Статическая переменная инициализируется только один раз при первом выполнении оператора, содержащего ее описание, и сохраняет свое значение между вызовами содержащей ее функции:

#include <stdio.h>

void func(int n)

{

static int a = 0;

a += n;

printf("%d ", a);

}

void main()

{

func(5);

func(5);

func(5);

}

Результат работы программы:

5 10 15

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