- •Предисловие
- •Алфавит языка
- •Служебные слова
- •Константы
- •Комментарии
- •Переменные
- •Int I,j,k; //переменные I, j, k – целого типа
- •Математические функции
- •Выражения
- •Выражения целого типа
- •Примеры записи выражений целого типа:
- •Примеры вычислений выражений целого типа:
- •Выражения вещественного типа
- •Примеры записи выражений вещественного типа
- •Примеры вычислений выражений вещественного типа:
- •Операторы присваивания
- •Примеры записи операторов присваивания:
- •Ввод и вывод данных
- •Стандартный ввод-вывод
- •Посимвольный ввод-вывод
- •Ввод-вывод строк
- •Форматированный вывод
- •Форматированный ввод
- •Scanf(“формат”, аргументы);
- •Int age, rost;
- •Vasja Pupkin
- •Vasja Pupkin
- •Структура программы
- •Void main()
- •Int main()
- •Int age, rost;
- •Директивы препроцессора
- •Включение файлов
- •Int main()
- •Int age, rost;
- •Int main()
- •Int age, rost;
- •Подстановка имен
- •Макросы
- •Структуры данных
- •Массивы
- •Int vect[5];
- •Int vect[count];
- •Vect[0] vect[1] vect[2] vect[3] vect[4]
- •Int main()
- •Int temp;
- •Int matr[row][col];
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Пример записи алгоритма:
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкции
- •Int main()
- •Int c, y1, y2, kl, day, month, year;
- •Часто встречающиеся ошибки программирования:
- •Int main()
- •Переключатель
- •Int main()
- •Int month;
- •Часто встречающиеся ошибки программирования:
- •Бесконечные циклы
- •Циклы с предусловием
- •Int main()
- •Программа
- •Int main()
- •Программа
- •Int main()
- •Часто встречающиеся ошибки программирования:
- •Циклы с постусловием
- •Int main()
- •Int main()
- •Программа
- •Int main()
- •Int main()
- •Int main()
- •Int month;
- •Циклы с параметром
- •Действия цикла:
- •Int main()
- •Int top, bottom;
- •Int main()
- •Int num, sum, factor;
- •Int main()
- •Int main()
- •If (number % 3)
- •Int main()
- •Int main()
- •Int I, m, vector_min, vector_max, temp;
- •Int vector[n];
- •Int main()
- •Int vector_min, vector_max, temp;
- •Int vector[n];
- •Функции
- •Int summa(int a, int b)
- •Int summa(int a, int b)
- •Void swap(int a, int b)
- •Int temp;
- •Int top, bottom, temp;
- •Рекурсия
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Void quick_sort(int left, int right, int vector[])
- •Int I, last;
- •Void swap(int I, int j, int vector[])
- •Int temp;
- •Особенности рекурсии:
- •Адреса и указатели
- •Операции над указателями
- •Указатели и массивы
- •Int mass[5];
- •Int trio[5][2][3];
- •Указатели и функции
- •Int main()
- •Указатели и строки
- •Функции для работы со строками
- •Vtorokursnik
- •Vtorokursnik
- •Itoa(I, str, 16);
- •Текстовые файлы
- •Int vector[k];
- •Vector_1:
- •Vector_2:
- •Int ocenka;
- •Imja: Vasilij
- •Imja: Ivan
- •Int ocenka;
- •Бинарные файлы
Форматированный ввод
Форматированный ввод осуществляется функцией scanf, по своей структуре аналогичной функции printf:
Scanf(“формат”, аргументы);
Формат содержит спецификации вводимых переменных, имена которых являются аргументами этой функции (списком ввода). Перед именем каждой переменной в списке ввода (кроме имен массивов и строк) ставится знак амперсанда &. Спецификации ввода полностью совпадают с аналогичными спецификациями вывода:
Int age, rost;
float weight;
char name[10];
printf(“\nВаше имя: ”);
scanf(“%s”, name);
printf(“\nВаш возраст: ”);
scanf(“%d”, &age);
printf(“\nВаш рост: ”);
scanf(“%d”, &rost);
printf(“\nВаш вес: ”);
scanf(“%f”, &weight);
После запуска программы на экран будет выведено:
Ваше имя:
и программа будет ожидать ввода строки символов. После того, как будет напечатано имя и пользователь нажмет на клавишу ввода, программа заработает дальше:
Ваше имя: Петр
Ваш возраст: 17
Ваш рост: 178
Ваш вес: 67.5
Значения переменных можно вводить одной строкой, разделяя их пробелами, при этом между спецификациями ввода в формате никаких знаков не ставится:
printf(“\nВаше имя, возраст, рост и вес: ”);
scanf(“%s%d%d%f”, name, &age, &rost, &weight);
При выполнении этой программы появляется сообщение, после которого можно вводить через пробелы значения соответствующих переменных:
Ваше имя, возраст, рост и вес: Петр 17 178 67.5
При этом переменным name, age, rost, weight будут присвоены введенные значения.
В формат ввода, помимо спецификаций, могут входить и другие символы, причем:
пробелы, символы табуляции \t и перехода на новую строку \n игнорируются,
другие символы, если они имеются, должны совпадать с очередными непустыми символами, вводимыми с клавиатуры (символами входного потока), то есть они образуют шаблон, с которым должны совпадать вводимые данные:
scanf(“Возраст=%d, рост=%d, вес=%g, имя:%s”, &age, &rost, &weight, name);
входной поток имеет вид:
Возраст=17, рост=178, вес=67.5, имя:Петр
В этом случае переменные age, rost, weight, name примут соответствующие введенные значения.
Если перед спецификатором ввода стоит звездочка * , то поле, относящееся к данному спецификатору в списке ввода, пропускается, и вводимое значение игнорируется. Такая ситуация возникает тогда, когда вводятся значения из файла или с клавиатуры, но одной строкой (при этом они должны разделяться пробелами):
printf(“\nВаше имя, возраст, рост и вес: ”);
scanf(“%s%d%*d%*f”, name, &age, &rost, &weight);
Входной поток имеет вид:
Петр 17 178 67.5
В этом случае переменным будут присвоены следующие значения:
name=”Петр” age=17 rost=0 weight=0.000000
Внимание! Если переменная не инициализирована, то ее значение обнуляется.
Для ввода строк могут быть использованы две дополнительные спецификации:
%[символы] - вводимая строка должна содержать только символы, перечисленные в квадратных скобках без разделительных знаков. При появлении во вводимой строке неуказанного символа ввод строки заканчивается:
printf(“\nВведите строку:”);
scanf(“%[abceg]”, name);
Если вводимая строка имеет вид:
abcdefg
то переменная name примет значение abc
%[^символы] - вводимая строка ограничивается только символами, указанными в квадратных скобках:
printf(“\nВведите строку:”);
scanf(“%[^aed]”, name);
Если вводимая строка имеет вид:
abcdefg
то переменная name примет значение ae
Любая функция в Си возвращает какое-то значение. Поэтому функция scanf, помимо выполнения форматированного ввода, возвращает количество опознанных и присвоенных элементам списка ввода данных:
printf(“\nВаше имя, возраст, рост и вес: ”);
i=scanf(“%s%d%d%f”, name, &age, &rost, &weight);
Входной поток имеет вид:
Петр 17 178 67.5
При этом переменные name, age, rost, weight получат свои значения, и переменной i будет присвоено значение 4.
Внимание! Использование функции scanf для ввода строк имеет свои особенности.
Если вводимая строка состоит из нескольких слов, разделенных пробелами, то вводится только первое слово (до первого пробела):
char name[20];
printf(“\nВведите ваше имя и фамилию: ”);
scanf(“%s”, name);
Если входной поток имеет вид: