Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных Лекция 2.doc
Скачиваний:
29
Добавлен:
03.11.2018
Размер:
281 Кб
Скачать
☆

Примеры вычислений

Задача 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);

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

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Как поместить комментарий в программу, написанную на языке Си?

  2. Перечислите известные вам типы данных, которые есть в языке Си? Какой размер в памяти они занимают? Какие значения они могут принимать?

  3. Объясните, чем отличаются ключевые слова от идентификаторов?

  4. Какие правила нужно соблюдать при создании имен переменных? Приведите несколько корректных и некорректных имен; объясните, какие правила нарушают некорректные имена.

  5. Объясните, как работает функция printf(). Что такое спецификаторы и модификаторы? Приведите примеры.

  6. Что такое спецсимволы или управляющие последовательности? Приведите примеры.

  7. Как задать количество знаков после запятой для выводимого вещественного числа?

  8. Как используется модификатор * (звездочка) в функциях printf(), а не в scanf()? Приведите примеры.

  9. Как используется функция scanf()? Объясните принцип ее работы.

  10. Какие функции могут быть использованы для ввода с клавиатуры символов и строк? Приведите примеры.

ТРЕНИРОВОЧНЫЕ ЗАДАНИЯ

  1. Вывести на экран значения целой переменной x, вещественной переменной y и символьной переменной c.

  2. Вывести на экран слово «программирование», используя только функцию putchar().

  3. Ввести с клавиатуры три числа и вывести их сумму.

  4. Вывести на экран размеры типов int, float, char, double и bool. Использовать функцию sizeof().

  5. Написать программу, которая принимает с клавиатуры имя и фамилию, а затем выводит полное имя человека.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]