- •Основы программирования
- •Средства создания программ
- •Работа в интегрированной среде разработки программ turbo c (Borland c)
- •Основные функциональные клавиши и сочетания клавиш в Turbo c
- •Контрольные вопросы
- •Основы языка Си
- •Составляющие языка Си
- •Понятия алгоритмических языков (На примере языка Си)
- •Структура программы на языке Си
- •Директивы препроцессора
- •Главная функция
- •Переменные и массивы
- •Объявления переменных и массивов
- •Комментарии
- •Основные операции в Си
- •Арифметические операции
- •Логические операции и операции отношения
- •Операции присваивания
- •Функции ввода и вывода
- •Функция форматированного вывода printf( )
- •Функция форматированного ввода scanf( )
- •Функция неформатированного ввода getch( )
- •Функция неформатированного ввода gets( )
- •Функция неформатированного вывода puts( )
- •Программа – диалог
- •Контрольные к лабораторной работе «Программа-диалог»
- •Программа–тест
- •Контрольные вопросы к лабораторной работе «Программа-тест»
- •Конструкция switch/case/default
- •Операторы цикла
- •Цикл for
- •Стандартные математические функции
- •Пример выполнения лабораторной работы «Вычисление значения функции»
- •Контрольные вопросы к лабораторной работе «Вычисление значения функции»
- •Вложенные циклы.
- •Использование оператора break в циклах
- •Оператор continue
- •Оператор безусловного перехода goto
- •Действия с одномерными массивами
- •Инициализация массива
- •Ввод значений элементов массива с клавиатуры
- •Заполнение массива случайными числами
- •Вычисление суммы и произведения элементов массива
- •Поиск максимального элемента массива и его номера
- •Вычисление среднего арифметического
- •Перестановка элементов в массиве
- •Сортировка массива
- •Заполнение массива элементами из другого массива.
- •Контрольные вопросы к лабораторной работе «Одномерный массив»
- •Контрольные к лабораторной работе «Программа-диалог»
- •Контрольные вопросы к лабораторной работе «Программа-тест»
- •Контрольные вопросы к лабораторной работе «Вычисление значения функции»
- •Контрольные вопросы к лабораторной работе «Одномерный массив»
Функция форматированного ввода scanf( )
Буква f в имени этой функции также напоминает о том, что данная функция является форматированной. Она описана в заголовочном файле stdio.h.
Мы будем использовать эту функцию в наиболее простой форме:
scanf (“формат” , адрес аргумента);
При вводе числового значения аргументом функции scanf( ) является переменная или элемент массива соответствующего типа. Для получения адреса числовой переменной перед ее именем нужно поставить знак & (амперсанд), который в данном случае означает операцию взятия адреса числовой переменной.
При вводе одного символа аргументом функции scanf( ) является символьная переменная или элемент символьного массива. Для получения адреса символьной переменной перед ее именем нужно также поставить знак & (амперсанд) так как тип char является типом «целое».
При вводе строки символов аргументом функции scanf( ) является имя символьного массива. Перед именем символьного массива знак & не ставится, так как в языке Си это имя уже является адресом.
Функция scanf ( ) принимает с клавиатуры все символы до нажатия клавиши ENTER. Введенные символы преобразуются в соответствии с форматом. Полученное значение записывается в оперативную память компьютера по адресу соответствующей переменной или элемента мас-сива. Функция scanf ( ) использует тот же список форматов, что и функция printf ( ) (табл. 3). Если значение набрано неверно, но клавиша ENTER ещё не нажата, то это значение можно откорректировать.
При использовании функции scanf ( )необходимо учитывать особен-ности её работы. После нажатия клавиши ENTER вводимая строка поме-щается во внутренний буфер stdin. Для получения значения аргумента используется первая группа символов (до пробела или символа \n). Это значение отправляется по адресу аргумента, а оставшиеся в буфере симво-лы поступают в программу при последующих обращениях к функции scanf ().
ПРИМЕР 9:
Задание
Разберём работу следующего фрагмента программы, в котором используются два символьных массива t1 и t2.
Решение
printf(“\n Кто ваш любимый писатель?”); scanf(“%s”, t1); printf(“\n Ваше любимое произведение?”); scanf(“%s”, t2); |
/*1*/ /*2*/ /*3*/ /*4*/ |
Предположим, что в процессе выполнения программы после появления на экране слов
Кто ваш любимый писатель? |
на клавиатуре был набран ответ:
Лев Николаевич Толстой |
и нажата клавиша ENTER. В результате в массив t1 будут помещены только символы
Лев |
Ввод с клавиатуры, предписываемый строкой /*4*/, выполняться не будет. Для получения названия литературного произведения будут использоваться данные, оставшиеся в буфере. В результате в массиве t2 будет записана информация
Николаевич |
ПРИМЕР 10:
Задание
Рассмотрим работу следующего фрагмента диалоговой программы, в котором используются символьный массив name и числовая переменная age целого типа.
Решение
printf(“\n Здравствуйте! Как вас зовут?”); scanf(“%s”,name); printf(“\n Сколько вам лет?”); scanf(“%d”,&age); |
/*1*/ /*2*/ /*3*/ /*4*/ |
Предположим, что в процессе выполнения программы после появления на экране с новой строки слов
Здравствуйте! Как вас зовут? |
на клавиатуре были набраны символы
Сидоров Пётр Иванович |
и нажата клавиша ENTER. В результате в массив name будут помещена только фамилия
Сидоров |
Несмотря на то, что требуется значение другого типа, ввод с клавиатуры значения переменной age, предписываемый строкой /*4*/ , выполняться не будет, так как в буфере остались данные от предыдущего ввода.
Из приведённых примеров следует, что перед вводом информации с помощью функции scanf( ) целесообразно предварительно очистить буфер ввода.
Эту задачу выполняет функция fflush(). Строку /*4*/ примера 2 следует записать в виде:
fflush(stdin); scanf(“%s”,t2); |
/*4*/ |
а аналогичную строку примера 3 в виде:
fflush(stdin); scanf(“%d”,&age); |
/*4*/ |
Обратите внимание на отсутствие знака & перед именами символьных массивов (пример 9) и его наличие перед именем числовой переменной (пример 10).