Функции ввода информации
Функция scanf() предназначена для форматированного ввода исходной информации с клавиатуры
Общий вид этой функции:
scanf (<управляющая строка>, список адресов элементов ввода>);
Количество, тип и порядок следования форматов должен точно совпадать с количеством, типом и порядком следования вводимых объектов, иначе результат ввода непредсказуем.
Для нее также как и для printf() указывается управляющая строка, в которой указываются только модификаторы форматов (без пробелов), список аргументов. Но если функция printf() использует идентификаторы переменных, константы и выражения, то scanf() использует только указатели на переменные, то есть их адреса.
Таким образом, для ввода значения переменной перед ее идентификатором требуется указать символ &, обозначающий адрес переменной.
Если нужно ввести значение строковой переменной, то использовать символ & не нужно, так как строка - это массив символов, а ID массива эквивалентно адресу его нулевого элемента, т.е. его базовому адресу. Например:
int course;
float grant;
char name[20];
printf(" Укажите курс, стипендию, имя \n");
scanf("%d%f%s",&course, &grant, name);
Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в разных строках.
Функция scanf() использует практически тот же набор спецификаций преобразования (форматов), что и функция printf(), отличия - отсутствует формат %g, форматы %e,%f - эквивалентны.
Внимание, используя функцию scanf() для ввода строки по формату %s необходимо помнить, что ввод происходит только до первого пробела. Для ввода фраз, состоящих из слов используется функция:
gets(<ID строковой переменной>);
Ввод - вывод потоками
Поток - это абстрактное понятие расширенной версии языка С, которое относится к любому переносу данных от источника к приемнику.
Чтение данных из потока - это извлечение (extraction).
Вывод данных в поток - помещение или включение (insertion).
Для ввода-вывода используются две переопределенные операции побитового сдвига << , >>. Формат записи:
cout << ID_переменной;
cin >> ID_переменной;
Стандартный поток вывода cout - по умолчанию подключен к монитору.
Стандартный поток ввода cin - по умолчанию подключен к клавиатуре.
Для их работы необходимо подключить стандартную библиотеку iostream.h.
Пример:
#include<iostream.h>
#include<conio.h>
void main(void) {
cout << “ Hello! ” << endl; // end line - переход на новую строку
cout << “ Input i, j ”;
int i, j, k;
cin >> i >> j ;
k = i + j ;
cout << “ Sum i , j = “ << k << endl;
}
Дополнительные функции
В дальнейшем мы будем часто пользоваться стандартными библиотечными функциями. Рассмотрим некоторые из них.
Функция void clrscr(void); - полностью очищает экран дисплея, переводя курсор в верхний левый угол. При работе в Visual C++ очистку экрана можно выполнить, используя функцию system(“cls”);
Функция int kbhit(void); - возвращает ненулевое целое значение при нажатии клавиши, в противном случае - нулевое.
Синтаксис операторов языка C
Операторы языка Си можно разделить на три группы:
- операторы-декларации (рассмотрены ранее);
- операторы преобразования объектов;
- операторы управления процессом выполнения алгоритма.
Программирование процесса преобразования объектов программы производится посредством записи выражений. Выражение включает один или несколько операндов и символов операций. Любое выражение, заканчивающееся символом «;» (точка с запятой), является оператором.
Простейший вид операторов - операторы-выражения.
Простые операторы:
- оператор присваивания - выполнение операций присваивания;
- оператор вызова функции - выполнение операции вызова функции;
- пустой оператор «;».
Классы управляющих операторов в языке Си следующие:
- операторы условного и безусловного перехода;
- оператор выбора альтернатив (переключатель);
- операторы организации циклов;
- операторы передачи управления (перехода).
Каждый из управляющих операторов имеет конкретную лексическую конструкцию, образуемую из ключевых слов языка С, выражений и символов-разделителей: { } , : ( ) .
Операторы языка С записываются в свободном формате с использованием разделителей между ключевыми словами. Допустима вложенность операторов. В случае необходимости можно использовать составной оператор - блок, состоящий из любой последовательности операторов, заключенных в фигурные скобки - { и }, после закрывающей скобки символ «;» не ставится.
Условные операторы
В языке С имеется две разновидности условных операторов: простой и полный. Синтаксис простого оператора условного выполнения:
if (выражение) оператор1;
здесь выражением, как правило, является логическое или выражение отношения. Если выражение в скобках не ноль, т.е. истинно, то выполняется оператор1, иначе он игнорируется. Оператор1 - простой или составной (блок).
Примеры записи:
if (x>0) x=0;
if (i!=1) j++, s=1; - используем операцию «запятая»;
if (i!=1) { j++; s=1; } - последовательность операций;
if (getch()!=27) { - если нажата клавиша, не “Esc”.
k=0;
}
if (i) exit(1); « if (i!=0) exit(1);
if (i>0)
if (i<n) k++; « if ((i>0)&&(i<n)) k++;
if (1) i=0; « i=0;
Синтаксис полного оператора условного выполнения:
if (выражение) оператор1;
else оператор2;
Если выражение в скобках не ноль (истина), то выполняется оператор1, иначе - оператор2. Операторы 1 и 2 могут быть простыми или составными.
Примеры записи:
if (x>0) j=k+10;
else m=i+10;
Если есть вложенная последовательность операторов if-else, то else связывается с ближайшим предыдущим if, не содержащим else. Например:
if (n>0)
if(a>b) z=a;
else z=b;
Если необходимо связать фразу else с внешним if, то используем операторные скобки:
if(n>0)
{ if (a>b) z=a; }
else z=b;
В следующей цепочке операторов if-else-if выражения просматриваются последовательно:
if (выражение1) оператор1;
else if (выражение2) оператор2;
else if (выражение3) оператор3;
else оператор4;
Если какое-то выражение оказывается истинным, то выполняется относящийся к нему оператор и этим вся цепочка заканчивается. Каждый оператор может быть либо отдельным оператором, либо группой операторов в фигурных скобках. Последняя часть с else имеет дело со случаем, когда ни одно из проверяемых условий не выполняется. Иногда при этом не нужно предпринимать никаких явных действий, в этом случае else оператор4; может быть опущен, или его можно использовать для контроля, чтобы засечь "невозможное" условие (экономия на проверке условий).
Пример:
if ( n < 0 ) printf ( "n отрицательное\n" );
else if ( n==0 ) printf ( "n равно нулю\n );
else prinf ( "n положительное\n );