
- •«Технология программирования» методические указания
- •Самара 2007
- •Содержание
- •Введение
- •1.2.1 Состав языка
- •1.2.2 Алфавит языка
- •1.2.3 Идентификаторы
- •1.2.4 Ключевые (служебные) слова
- •1.2.5 Знаки операций
- •1.2.6 Константы
- •1.2.7 Комментарии
- •1.3.1 Концепция типа данных
- •1.3.2 Основные типы данных
- •1.3.3 Структура программы
- •1.4 Переменные и выражения
- •1.4.1 Переменные
- •1.4.2 Операции
- •1.4.3 Выражения
- •2. Программа выполнения работы
- •2.1 Задача 1.1. Расчет по формуле
- •2.3 Отладка программы
- •2.4 Описание переменных
- •2.5 Задача 1.2. Временной интервал
- •3. Содержание отчета
- •4. Контрольные вопросы
- •5. Задания
- •Библиографический список
- •Приложение 1. Спецификации формата для функций семейства printf
- •Модификаторы формата
- •Приложение 2. Арифметические преобразования типов
- •Приложение 3. Правила оформления текстов программ
Модификаторы формата
Модификаторы формата применяются для управления шириной поля, отводимого для размещения значения. Модификаторы – это одно или два числа, первое из которых задает минимальное количество позиций, отводимых под число, а второе – сколько из этих позиций отводится под дробную часть числа (точность). Если указанного количества позиций для размещения значения недостаточно, автоматически выделяется большее количество позиций:
%-minC или %minC;
%-min.precisionC или %min.precisionC.
Здесь С – спецификация формата из приведенной выше таблицы, min – число, задающее минимальную ширину поля. Смысл модификатора precision, также задаваемого десятичным числом, зависит от спецификации формата, с которой он используется:
при выводе строки (спецификация %s) precision указывает максимальное число символов для вывода;
при выводе вещественного числа (спецификации %f или %е) precision указывает количество цифр после десятичной точки;
при выводе целого числа (спецификации %d или %i), precision указывает минимальное количество выводимых цифр. Если число представляется меньшим числом цифр, чем указано в precision, выводятся ведущие (начальные) нули.
при выводе вещественного числа (спецификации %d или %G) precision указывает максимальное количество значащих цифр, которые будут выводится.
Символ минус (-) указывает на то, что значение выравнивается по левому краю и, если нужно, дополняется пробелами справа. При отсутствии минуса значение выравнивается по правому краю и дополняется пробелами слева.
Перед спецификацией могут использоваться префиксы l и h, например, %l f, %hu.
Префикс h с типами d, i, о, х и X указывает на то, что тип аргумента short int, а с типом u – short unsigned int.
Префикс l с типами d, i, о, х и X указывает на то, что тип аргумента long int, с типом и - long unsigned int, а с типами e, E, f, g и G – что тип аргумента double, а не float.
Пример:
#include <stdio.h>
int main(){
int int1 = 45, int2 = 13;
float f = 3.621;
double dbl = 2.23;
char ch = 'z’, *str = "ramambahari";
printf("int1 - %d| int2 - %3d| int2 - %-4d|\n", int1, int2, int2);
printf("int1 = %X| int2 - %3x| int2 = %4o|\n", int1, int2, int2);
printf("f - %f| f - %4.2f| f - %6.1f|\n", f, f, f);
printf("f - %g| f - %e| f = %+E|\n", f, f, f);
printf("dbl - %5.21f| dbl - %e| dbl = %4.1G|\n", dbl, dbl, dbl);
printf("ch - %c| ch - %3c|\n", ch, ch);
printf("str = %14s|\nstr - %-14s|\nstr = %s|\n", str, str, str);
return 0;
}
Результат работы программы:
int1 = 45| int2 = 13| int2 = 13 |
int1 = 2D| int2 = d| int2 = 15 |
f = 3.621000| f = 3.62 | f = 3.6 |
f = 3.621 | f = 3.621000e+000 | f = +3.621000E+000|
dbl = 2.23 | dbl = 2.230000e+000 | dbl = 2 |
ch = z| ch = z |
str = ramambahari|
str = ramambahari |
str = ramambahari|
Приложение 2. Арифметические преобразования типов
Преобразования типов выполняются, если операнды, входящие в выражения, имеют различные типы. Ниже приведена последовательность преобразований.
Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:
char расширяется нулем или знаком в зависимости от умолчания для char;
unsigned char расширяется нулем;
signed char расширяется знаком;
short, unsigned short и enum при преобразовании не изменяются.
Затем любые два операнда становятся либо int, либо float, double или long double.
Если один из операндов имеет тип long double, то другой преобразуется к типу long double.
Если один из операндов имеет тип double, то другой преобразуется к типу double.
Если один из операндов имеет тип float, то другой преобразуется к типу float.
Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long.
Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long.
Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned.
Иначе оба операнда должны иметь тип int.
Тип результата тот же, что и тип участвующих в выражении операндов.