Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Применение функции scanf( )

 

Поскольку мы будем пользоваться функцией scanf() эпизодически, мы рассмотрим здесь только основные особенности ее применения. Для функции scanf() указывается управляющая строка и следующий за ней список аргументов. Основное различие функций printf() и scanf() заключается в особенностях данного списка. Функция printf() использует имена переменных, константы и выражения, а функция scanf() - только указатели на переменные. Мы ничего не должны знать о таких указателях. Необходимо помнить только два правила:

1. Если нам нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.

2. Если мы хотим ввести значение строковой переменной, использовать символ & не нужно.

Пример:

main()

{

int age;

float assets;

char fio[50];

printf("Введите ваш возраст, оклад, фамилию. \n");

scanf("%d %f", &age, &assets);

scanf("%s", fio); /* & отсутствует при указании

массива символов */

printf("%d $%.0f %s\n",age, assets, fio);

}

Функция scanf() использует некоторые специальные знаки, пробелы, символы табуляции и "новая строка", для разбиения входного потока символов на отдельные поля. Она согласует последовательность спецификаций преобразования с последовательностью полей, опуская упомянутые специальные знаки между ними. Исключением является спецификация %c, обеспечивающая чтение каждого следующего символа даже в том случае, если это пустой символ.

Функция scanf() использует тот же набор символов спецификации преобразования, что и функция printf(). Основные отличия функции scanf() следующие:

1. Отсутствует спецификация %g.

2. Спецификации %f и %e эквивалентны. Обе спецификации допускают наличие или отсутствие знака строки цифр с десятичной точкой или без нее и поля показателя степени.

3. Для чтения целых чисел типа short применяется спецификация %h.

Функция scanf() не является одной из наиболее часто используемых функций языка Си. Мы обсуждаем ее из-за универсальности.

Особенности работы с языком Си. Задание фиксированной ширины полей оказывается полезным при печати данных столбиком.

Например:

printf("%d %d %5d\n",val1,val2, val3);

Результат выглядит так:

11 222 3333

4 5 23

22222 3332 11111

Эти же данные можно представить в улучшенном виде, если задать достаточно большую фиксированную ширину поля:

printf("%9d %9d %9d\n" val1,val2, val3);

Результат будет выглядеть так:

11 222 3333

4 5 23

22222 3332 11111

Если печатаемое число включено в некоторую фразу, то часто при его выводе оказывается удобным задать ширину поля равной или меньше требуемой. Это дает возможность включить число во фразу без добавления лишних пробелов.

А теперь рассмотрим два примера работы с циклом while:

/*квадраты чисел*/

main() /*получение квадратов*/

{

int n=1;

while(n < 11) {

printf("%10d %10d\n", n, n*n);

n=n+1;

}

}

Эта программа выводит на печать первые 10 чисел и их квадраты.

Второй пример.

Согласно легенде, один правитель обещал наградить ученого, оказавшего ему большую услугу. Ученый, когда его спросили, что бы он хотел получить в награду, указал на шахматную доску и сказал: "Положите одно пшеничное зерно на первую клетку, два - на вторую, четыре на третью, восемь на следующую и т.д." Правитель был поражен, услышав такую скромную просьбу. Программа, приведенная ниже, показывает, в какое положение попал правитель!

/* пшеница*/

#define NUMBER 64 /* число клеток на шахматной доске*/

#define CROP 7E14 /* весь урожай пшеницы,

выраженный в числе зерен*/

main()

{

double current, total;

int count =1;

printf("КЛЕТКА ЧИСЛО СУММА ЗЕРЕН ДОЛЯ\n");

total = current = 1.0;/*начинаем с одного зерна*/

printf("%4d %15.2e %13.2e %12.2e\n",count,

current, total, total/CROP);

while(count < NUMBER) {

count = count + 1;

current = 2.0*current;

/*удвоенное число зерен на следующей клетке */

total = total +current; /* коррекция суммы*/

printf ("%4d %15.2e %13.2e %12.2e\n",count,

current, total, total/CROP);

}

}

Это пример составного оператора. От открывающей фигурной скобки оператора while до закрывающей фигурной скобки.

Составной оператор используется в следующих случаях:

1. Чтобы сгруппировать несколько логических связанных операторов в один оператор.

2. В качестве тела функции.

3. Для ограничения видимости определений частью программы, т.е. для локализации действия описаний.

Составной оператор имеет следующую форму:

{

определения и описания

операторы

}

Определения переменных внутри составного оператора имеют больший приоритет, чем определения переменных с тем же именем для области действия составного оператора. Эти переменные видимы, т.е. доступны, только внутри составного оператора. Глобальные переменные являются видимыми внутри составного оператора только при условии, что их определения не изменены локальными определениями.

! Применяйте отступы от поля в строках, чтобы сделать структуру программы наглядной!

 

<== предыдущая лекция | следующая лекция ==>
Изучение и использование функций printf( ) и scanf( ) | Эквивалентность типов
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 282; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.