Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплексное пособие Си.pdf
Скачиваний:
57
Добавлен:
12.03.2015
Размер:
1.57 Mб
Скачать

Функциюю printf() можно использовать для преобразования данных. В частности, для перевода числа в 8-ричную или 16-ричную систему счисления.

Пример

printf(“%d\n”,625); 625 printf(“%o\n”,625); 1161 printf(“%x\n”,625); 271 printf(“%d\n”,-625); -625 printf(“%u\n”,-625); 54911(=65536-625)

Ф-ю printf() можно использовать для нахождения кода ASCII нек-го символа, например

printf(“%c%d\n”,’A’,’A’);

A 101, где А- буква ,а 101 – десятичный код символа А. Можно получить 8-ичный код, для этого “%c%о\n”,’A’,’A’

Можно сделать и обратное преобразование, т.е.

printf(“%d%c\n”,101,101); /* 101 A*/

Что будет если преобразовать число, большее 255 в символ, т.е.

printf(“%d%c\n”,336,336); /*результат 336 p*/

16-чный код AACII символа p=80, а 336=256+80, т.е. 80 - это остаток отделения числа 336 на 256, т.е. деление по модулю, т.е. остаток от 256/256 =0, 257/256=1 и т.д.

Например

printf(%ld %d\n”,65616,65616); /*рез-т 65616 80 */

Максимальное целое число в нашей системе 32767, а мы попытались напечатать 65616, поэтому получили 80.

printf(%ld %c\n”,65616,65616); /*рез-т 65616 р*/

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

Так же как printf() функция scanf() содержит управл-ю строку и список аргументов.

scanf(“Управл. cтрока”,арг1,арг2,…);

В функции printf() в списке аргументов м.б. переменные, константы, выражения, а в функции scanf() в списке аргументов

29

только указатели на переменные. При этом надо помнить 2 правила:

1)Для ввода некоторого значения и присвоения его переменной, надо перед именем переменной записать символ &.

2)При вводе строковой переменной символ & использовать не нужно.

Рассмотрим пример:

main()

{

int vozrast; float rost;

char sobaka[20];

printf(“Укажите ваш возраст, рост в метрах и любимую породу собак”);

scanf(“%d%f”, &vozrast,&rost); scanf(“%s”,sobaka); /*отсутствует &*/ printf(“%d %4.2f %s\n”,vosrast,rost,sobaka);

}

ввод

25 1.72

/*Можно

вводить в каждой строке, т.е.25*/

ризеншнауцер

/*

1.72*/

печать

/*

ризеншнауцер*/

 

 

25 1.72 ризеншнауцер

Функцияя scanf() использует некоторые специальные знаки (пробелы, символы табуляции, и “новая строка”) для разбиения входного потока на отдельные поля. Специальные знаки, в т.ч. пробелы, опускаются.

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

Основные отличия для функции scanf() следующие: 1)Отсутствует спецификация %g

30

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

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

Контрольные вопросы

1.Назначение функций ввода/вывода. Пример использования.

2.Функция printf() языка Си. Опишите синтаксическую конструкцию, логику работы.

3.Форматы (спецификации) для вывода значений разных типов.

4.Модификаторы спецификаций, используемые с функцией printf().

5.Приведите пример использования функции printf().

6.Функция scanf() языка Си. Опишите синтаксическую конструкцию, логику работы.

7.Форматы (спецификации) для ввода значений разных типов.

8.Приведите пример использования функции scanf().

9.Как ввести с клавиатуры значение переменной n типа int? Какой из ответов верный:

а) scanf (n);

б) scanf (“%d”,n); в) scanf (“%d”,&n); г) scanf (“%f”,n); д) scanf (“%f”,&n);

10.Для чего служит функция printf()? Определите результат выполнения фрагмента программы:

int x=-2;

printf (“%d \n %d”, x*x, abs(x));

31