Примеры вычислений
Задача 1. Расход топлива у автомобиля составляет 8 литров на 100 километров. Написать программу, которая принимает с клавиатуры расстояние, которое необходимо проехать, и вычисляет требуемое количество топлива.
float distance;
printf("Введите расстояние:\n"); scanf("%f", &distance);
float consumption = distance*8/100;
printf("Необходимо %f литров", consumption);
Задача 2. Написать программу, которая принимает с клавиатуры вещественные числа a, b и t, а затем вычисляет скорость, с которой должен двигаться поезд, чтобы проехать от километрового столба с отметкой a до столба с отметкой b за время t. Результат вывести с точностью 1 знака после запятой.
float a,b,t;
printf("a="); scanf("%f", &a); printf("b="); scanf("%f", &b);
printf("t="); scanf("%f", &t);
float velocity = (b-a)/t;
printf("Требуемая скорость %.1f\n", velocity);
Задача 3. Написать программу, которая принимает число в десятичной системе исчисления и выводит его в восьмеричной и шестнадцатеричной.
int number;
printf("Введите число:\n");
scanf("%x", &number);
printf("В десятичной: %d\n", number);
printf("В восьмеричной: %o\n", number);
Задача 4. Написать программу, которая принимает с клавиатуры длину в сантиметрах и переводит ее в дюймы, ярды и метры. Результаты вывести в виде таблицы из двух колонок: единица измерения и значение. Колонки должны быть выровнены по правому краю.
Модификатор * (звездочка)
Существует еще один модификатор, который мы рассмотрим отдельно – это модификатор * (звездочка). Он может быть использован как в функции printf(), так и в scanf().
Предположим, что перед нами стоит задача ввести с клавиатуры точность, с которой необходимо вывести число. Рассмотренный ранее модификатор точности не позволяет этого сделать, поскольку он требует указания количества знаков после запятой уже в программе, например, printf("%.4f", x). Модификатор * позволяет передать точность в функцию printf() как аргумент:
|
float x = 12.34567; int precision; printf("Введите точность:\n"); scanf("%d", &precision); printf("x=%.*f", precision, x); |
|
|
float x = 12.34567; printf("%.*f\n", 0, x); printf("%.*f\n", 1, x); printf("%.*f\n", 2, x); printf("%.*f\n", 3, x); printf("%.*f\n", 4, x); printf("%.*f\n", 5, x); |
|
То же самое можно сделать и с количеством знаков, отводимых под значение:
|
float x = 12.34567; printf("%*.*f;\n", 7, 0, x); printf("%*.*f;\n", 7, 1, x); printf("%*.*f;\n", 7, 2, x); printf("%*.*f;\n", 10, 0, x); printf("%*.*f;\n", 10, 1, x); printf("%*.*f;\n", 10, 2, x); |
|
Обратите внимание, что при использовании модификатора * в список аргументов необходимо добавить и значения тех модификаторов, вместо которых стоит звездочка.
Рассмотрим теперь, какую роль играет данный модификатор в функции scanf(). Здесь он пропускает ввод соответствующих значений. Например, если нужно сохранить только последнее из трех чисел, нужно поставить этот модификатор перед первыми двумя:
int x;
printf("Введите три числа:\n");
scanf("%*d %*d %d", &x);
printf("Третье число равно %d\n", x);

Мы вернемся этому модификатору в теме «Файлы».
Работа с символами и строками
Функция putchar() выводит на консоль один символ:
putchar('H'); putchar('e');
putchar('l'); putchar('l');
putchar('o'); putchar('!');
putchar('\n');
Функция getchar() считывает один символ с клавиатуры:
char letter;
letter = getchar();
putchar(letter);
Проблема пропуска символа.
Несколько символом, идущих подряд образуют строку. Более подробно строки будут изучены в соответствующей теме, а сейчас мы рассмотрим базовые сведения, касающиеся строк. Итак, для объявления строки необходимо указать ее имя и максимальный размер:
char str[100];
char book[50];
Задать значение строки можно при ее объявлении:
char str[] = "Математика – царица наук.";
Вывести строку на экран можно следующими способами:
printf("%s", str);
puts(str);
puts("Заседание продолжается!");
printf("Командовать парадом буду я!");
Обратите внимание на то, что строки заключаются в двойные кавычки, а символы – в апострофы. Это нужно учитывать при работе с ними. Ниже приведены примеры.
//Корректные записи
char str[] = "Кашу маслом не испортишь";
puts("Назвался груздем — полезай в кузов");
printf("%s", "Баба с возу — кобыле легче");
printf("Продукт класса %с", 'A');
putchar('С'); putchar('ы'); putchar('р');
//Некорректные записи
char str[] = 'Кашу маслом не испортишь';
puts('Назвался груздем — полезай в кузов');
printf("%s", 'Баба с возу — кобыле легче');
printf("Продукт класса %с", "A");
putchar("С"); putchar("ы"); putchar("р");
Ввод и вывод русских символов
В некоторых средах разработки русские символы могут отображаться некорректно. Попробуйте запустить следующий пример:
printf("Столовая наполнилась неприятным\n");
printf("синим сигарным дымом. Пес дремал,\n");
printf("уложив голову на передние лапы.\n");
Если текст на экране отобразился нормально, то дальше можно не читать, однако, если вы увидели нечто подобное:

то вам следует изучить данный раздел, чтобы научиться отображать русские символы корректно. Попробуйте добавить в программу следующее:
#include <locale.h>
…
setlocale(LC_ALL, "Russian");
printf(…);
…
После этого текст должен отобразиться так, как требуется:

Однако это еще не все. Рассмотрим пример:
setlocale(LC_ALL, "Russian");
char name[20];
puts("Введите свое имя:");
gets(name);
puts("Ваше имя:");
puts(name);
Введенное имя выведется некорректно, поскольку кодировка для ввода неправильная:

Для устранения проблемы можно поступить так:
#include <windows.h>
…
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

Возможно, понадобится также сменить шрифт консоли. Поэкспериментируйте.

КОНТРОЛЬНЫЕ ВОПРОСЫ
-
Как поместить комментарий в программу, написанную на языке Си?
-
Перечислите известные вам типы данных, которые есть в языке Си? Какой размер в памяти они занимают? Какие значения они могут принимать?
-
Объясните, чем отличаются ключевые слова от идентификаторов?
-
Какие правила нужно соблюдать при создании имен переменных? Приведите несколько корректных и некорректных имен; объясните, какие правила нарушают некорректные имена.
-
Объясните, как работает функция printf(). Что такое спецификаторы и модификаторы? Приведите примеры.
-
Что такое спецсимволы или управляющие последовательности? Приведите примеры.
-
Как задать количество знаков после запятой для выводимого вещественного числа?
-
Как используется модификатор * (звездочка) в функциях printf(), а не в scanf()? Приведите примеры.
-
Как используется функция scanf()? Объясните принцип ее работы.
-
Какие функции могут быть использованы для ввода с клавиатуры символов и строк? Приведите примеры.
ТРЕНИРОВОЧНЫЕ ЗАДАНИЯ
-
Вывести на экран значения целой переменной x, вещественной переменной y и символьной переменной c.
-
Вывести на экран слово «программирование», используя только функцию putchar().
-
Ввести с клавиатуры три числа и вывести их сумму.
-
Вывести на экран размеры типов int, float, char, double и bool. Использовать функцию sizeof().
-
Написать программу, которая принимает с клавиатуры имя и фамилию, а затем выводит полное имя человека.



