Смекни!
smekni.com

Язык программирования С 2 (стр. 5 из 7)

%[флаг][ширина].[точность]спецификация

где флаг – тип выравнивания (пусто – выравнивания по правому краю, `–` – выравнивания по левому краю, `+` – всегда печатать знак числа);

ширина – общая длина поля вывода, т.е. общее количество символов при выводе, включая знак и десятичную точку;

точность – количество цифр числа после запятой.

Примеры спецификаций формата:

%12.4f– вывод вещественной переменной с выравниванием по правому краю, общее количество символов при выводе –12 позиций, количество знаков после десятичной точки – 4;

%-+10.0f– вывод вещественной переменной с выравниванием по левому краю и обязательным выводом знака числа, общая длина поля вывода – 10 позиций, знаки после десятичной точки не выводятся;

%08d– вывод целой переменной с выравниванием по правому краю, ширина поля – 8 позиций, слева число дополняется нулями;

%16s– вывод строки, ширина поля вывода – 16 позиций.

3.3. Функция форматированного ввода scanf()

3.3.1. Назначение и описание функции

Функция позволяет ввести информация с клавиатуры. Функция определяется в библиотеке <stdio.h>.Синтаксис:

scanf(<управляющая строка>, <список адресов переменных>);

где <управляющая строка> - строка, которая может содержать только спецификации формата, перечень допустимых значений спецификаций тот же самый, что и для функции printf() (см. табл. 3.1.);

<список адресов переменных> – содержит перечисленные через запятую адреса переменных, вводимых функцией. Адрес переменной указывается символом & и далее идет идентификатор переменной, например, адрес переменной flag обозначается символами &flag. Для массивов и строк указывать символ & не обязательно.

Замечание: При использовании функции scanf() в управляющей строке нежелательно использовать никаких лишних символов (даже пробелов), кроме спецификаций. Нельзя использовать и специальные символы.

Примеры:

1) Ввести с клавиатуры переменные populationи ageтипов длинное целое и вещественное число:

scanf(“%ld%f”, &population, &age);

2) Ввести с клавиатуры целую переменную kodв шестнадцатеричном формате, строку name и вещественную переменную двойной точности precision:

scanf(“%x%s%lf”, &kod, name, &precision);

При вводе нескольких переменных разделителями между ними являются клавиши пробела, табуляции и ENTER.

3.3.2. Пример 3.1

Рассмотрим программу, в которой вычисляется значение функции y=sin(x) для двух введенных с клавиатуры значений аргумента. При этом вывод на экран необходимо выполнить в виде следующей таблицы (ширина поля каждой переменной 8 позиций, точность – 4 знака):

x y
xx.xxxx xx.xxxx
xx.xxxx xx.xxxx

Листинг 3.1

/* Программа вычисления функции y=sin(x) */

#include <stdio.h>

#include <math.h>

void main()

{

float x1,x2,y1,y2;

printf(“введите два значения аргумента:&bsol;n”);

scanf(“%f%f”,&x1,&x2);

printf(“&bsol;n| x | y |”);

printf(“&bsol;n|––––––––|––––––––|&bsol;n”);

y1=sin(x1);

y2=sin(x2);

printf(“|%8.4f|%8.4f|&bsol;n”,x1,y1);

printf(“|%8.4f|%8.4f|&bsol;n”,x2,y2);

}

3.4. Функции консольного ввода-вывода cscanf() и cprintf()

Консольная библиотека <conio.h> имеет очень похожие функции ввода-вывода. Отличие состоит в том, что с помощью консольных функций можно задать атрибуты вводимых/выводимых символов: задать положение курсора, изменить цвета фона и символов. Поэтому, например, не имеет смысла использовать некоторые специальные символы при выводе данных на экран (перевод строки, горизонтальная табуляция и т.п.). Синтаксис функций cscanf() и cprintf() идентичен аналогичным функциям библиотеки <stdio.h>.

3.4.1. Вспомогательные функции консольной библиотеки

Рассмотрим вспомогательные «полезные» функциями консольной библиотеки, используемые вместе с функциями ввода-вывода:

1) очистка экрана

clrscr();

2) задание нового текущего положения курсора на экране

gotoxy(x,y);

где x, y – координаты нового положения курсора, диапазоны возможных изменения координат следующие x=1…80, y=1…25, координате (1,1) соответствует верхний левый угол экрана;

3) изменение текущего цвета символов (в текстовом режиме):

textcolor(c);

где c – цвет символов (с=0…15 или цвета в виде макроопределения, например, BLACK, BLUE, GREEN, RED,…YELLOW, WHITE);

4) изменение текущего звена фона под символами (в текстовом режиме):

textbackground(c);

где c – цвет фона (с=0…7 или цвета в виде макроопределения, например, BLACK, BLUE, …LIGHTGRAY);

3.4.2. Пример 3.2

Создадим программу ввода фамилии в окне. С помощью консольных функций необходимо выполнить следующие операции: очистить экран дисплея, в центре экрана вывести изображение окна (цветная рамка с желтым цветом символов и синим цветом фона) размером 20 столбцов на 3 строки, ввести строку в пределах окна.

Листинг 3.2

/* Рисование окна и ввод фамилии */

#include <conio.h>

void main()

{

charname[15];/*объявление массива символов для ввода строки*/

clrscr(); /* очистка экрана */

textcolor(YELLOW); /* задание цвета символов */

textbackground(BLUE); /* задание цвета фона */

gotoxy(30,11); /* задание положения курсора */

cprintf(“┌────────────────────┐”);

gotoxy(30,12);

cprintf(“│ Введите фамилию │”);

gotoxy(30,13);

cprintf(“│ │”);

gotoxy(30,14);

cprintf(“└────────────────────┘”);

textcolor(CYAN); /* задание цвета символов */

gotoxy(35,13);

cscanf(“%s”,name); /* вводстроки */

}

Примечание: для ввода программы необходимы символы псевдографики. При их вводе можно использовать коды символов:

218 ┌ 196 ─ 191 ┐

179 │ 179 │

192 └ 196 ─ 217 ┘

3.5. Функция ввода одиночного символа getch()

Функции scanf() и cscanf() требуют аккуратного ввода данных с клавиатуры, незначительная ошибка при вводе информации приводит к сбоям в работе программ. В добротных программах используется посимвольный ввод данных с помощью функции getch(), определяемую в той же библиотеке <conio.h>. Эта функция имеет два варианта применения:

а) для остановки программы до нажатия произвольной клавиши, например, перед ее завершением. В этом случае листинг программы может быть таким

{

getch(); /* Ожидание ввода произвольной клавиши */

}

б) получение кода ASCII нажатой клавиши. Для получения кода клавиши необходимо объявить целую переменную и присвоить результат исполнения функции getch() этой переменной. При этом синтаксис использования функции может быть следующим:

{

inti;

i=getch(); /* Ожидание нажатия клавиши и присвоение

ее кода символа переменной i */

}

3.5.1. Пример 3.3

Написать программу, принимающую символ с клавиатуры и выдающую его код на экран

Листинг 3.3

/* программа вывода на экран кода нажатой клавиши */

#include <conio.h>

void main()

{

intkod; /* объявление переменной */

clrscr(); /* очистка экрана */

cprintf(“Нажмите клавишу: ”); /* вывод сообщения */

kod=getch(); /* ввод клавиши */

cprintf(“&bsol;nКод клавиши: %d&bsol;n”); /* вывод кода клавиши */

getch(); /* ожидание нажатия

произвольной клавиши */

}

3.6. Задание для самостоятельной работы

3.6.1. Записать отдельные строки программы, используя функции форматированного ввода-вывода:

а) вывод на экран двух переменных типа символ, целой переменной в восьмеричном формате и переменной типа длинное целое (идентификаторы выбрать самостоятельно);

б) вывод на экран значения переменных типа строка (массив символов) family, name, gruppa в следующем виде (после символов … должны идти значения указанных переменных):

Фамилия: …

Имя: …

Группа: …

в) вывести на экран две вещественные переменные в заданном формате: 10 позиций общая ширина поля переменной, 3 позиции – точность;

г) ввод двух переменных типа беззнаковое целое first и second;

д) ввод целой переменной x в шестнадцатеричном формате, вещественной переменной y и вещественной переменной двойной точности z;

е) выполнить ввод вещественных переменных power, moment и velocity, используя функции ввода-вывода в следующем формате (после символов … должен идти ввод указанных переменных):

Параметры двигателя:

мощность двигателя – …

момент двигателя – …

скорость двигателя – …

3.6.2. Записать отдельные строки программы, используя только функции консольного ввода-вывода:

а) очистить экран и далее вывести в центре экрана значения двух целых переменных
a и b, изменив при этом цвет символа и фона;

б) вывести значения четырех вещественных переменных a, b, cи d в следующем виде (ширина поля каждой переменной – 8 позиций, точность – 0 позиций):

a= …

b=…

c=…

d=…

в) выполнить предыдущий пример, но совмещенный с вводом значений этих переменных.

3.6.3. Написать программу: выполняется очистка экрана, вводится вещественное число, на экран выводится корень из введенного числа (функция корня находится в математической библиотеке и вызывается так: y=sqrt(x); ). Вывод корня выполнить в следующем формате – выравнивание по левому краю, общая ширина поля – 10 позиций, точность – 2 символа после десятичной точки.

3.6.4. Составить программу, в которой: выполняется очистка экрана, рисуется на экране изображение окна, внутри окна выполняется ввод трех параметров двигателя (см. задачу 3.6.1,е).

4. ОСНОВНЫЕ ОПЕРАЦИИ ЯЗЫКА

4.1. Операции языка Си

В языке существует большое количество операций (операторов). С помощью операций языка выполняются вычисления, сравнения, присваивания, а также ряд специфических задач. Наиболее часто используемые приведены в табл. 4.1. При выполнении операторов учитываются следующие особенности их исполнения:

а) каждой операции соответствует определенное количество операндов:

– унарные операции, имеющие только один операнд, например, операция взятия адреса переменной x запишется так: &x, а операция инкрементирования переменной i: i++;

– бинарные операции, имеющие два операнда, например, простейшие арифметические операции сложения, вычитания и т.д.: a+bили 4*x;

– единственная трехоперандная операция в языке – операция выполнения условия <операнд1> ? <операнд2> : <операнд3>.