![](/user_photo/2706_HbeT2.jpg)
- •2.Этапы создания исполняемой проги
- •Целые, вещественные, символьные и строковые константы в языке с
- •Простые типы данных в языке с
- •Диапазоны изменения значений простых типов данных в языке с. Спецификаторы типа: short, long, signed, unsigned
- •Типы данных с плавающей точкой и тип void в языке с
- •Выражения в языке с
- •Переменные в языке с, их описание и инициализация
- •Именованные константы в языке с
- •11.Операции языка с, их классификация и приоритеты
- •14.Операции инкремента и декремента
- •15. Операции явного преобразования типа и определения размера в языке с
- •18.Логические операции не, и, или в языке с (!, &&, //)
- •19.Условная операция (? :) в языке с
- •20.Операция запятая на языке с.
- •21.Операция взятия адреса и разадресации
- •22.Операторы в языке с. Составные операторы
- •23.Структура программы в языке с
- •24.Базовые конструкции структурного программирования
- •26.Операторы ветвления. Оператор switch
- •27.Операторы цикла в языке с
- •28.Цикл с предусловием while
- •29.Цикл с постусловием do-while
- •30.Цикл с параметром for. Операторы break и continue
- •31. Приведение цикла for к эквивалентному ему циклу while.
- •32. Варианты оператора for, связанные с упрощением его заголовка или тела цикла
- •33.Массивы в языке с, их описание и инициализация
- •34.Многомерные массивы в языке с, их описание и инициализация
- •35.Указатели и массивы. Правила адресной арифметики над указателями
- •36. Строки символов в языке с, их описание и инициализация
- •Функции, используемые в операциях ввода и вывода строк символов
- •38.Функции в языке с и их описание
- •40. Параметры функции. Передача параметров по значению и по адресу.
- •41.Передача массивов в качестве параметров функции
- •43. Функции стандартной библиотеки с
- •44.Функции форматного вывода и ввода printf и scanf
- •45.Перечисления в языке с
- •46.Структуры в языке с, их описание и инициализация
- •47.Массивы структур, их описание и инициализация
- •48. Битовые поля
- •49. Объединения в языке с
- •50. Переименование типов в языке с
36. Строки символов в языке с, их описание и инициализация
В языке С++ имеются следующие типы данных для работы со строками:
одномерный массив char;
специальный тип string, который в свою очередь существует в разных вариантах, соответствующих различным стандартам:
AnsiString ;
string из библиотеки STL.
Функции, используемые в операциях ввода и вывода строк символов
Ввод-вывод строк - массивов 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
Глобальными переменными называются переменные, которые описываются в начале программы (сразу же за директивами препроцессора) вне любых функций. Глобальные переменные видны во всех функциях, где не описаны локальные переменные с теми же именами, поэтому их очень легко можно использовать для передачи значений между функциями. Тем не менее, это не рекомендуется, поскольку затрудняет отладку программы и препятствует помещению функций в библиотеки общего пользования. Нужно стремиться к тому, чтобы функции были максимально независимы, а их интерфейс полностью определялся заголовком описания функции.