- •Контрольная работа
- •Введение
- •Раздел 1. Системы счисления.
- •1.1 Основные понятия и определения.
- •1.2 Перевод чисел из одной системы счисления в другую.
- •Перевод правильных дробей из десятичной системы счисления в недесятичную.
- •1.3 Двоичная арифметика.
- •2.2 Особенности сложения чисел в обратном и дополнительном кодах.
- •Раздел 2. Основы машинной арифметики с двоичными числами.
- •2.1 Коды чисел.
- •2.3 Модифицированные обратный и дополнительный коды.
- •Основные составные части ms-dos
- •Файловая система ms-dos
- •Файловая структура логического диска
- •Команды работы с файлами Команда copy
- •Копирование на устройства и с устройств
- •Команда move
- •Команда rename (ren)
- •Команда del (Erase)
- •Команда undelete
- •Команда type
- •Команда print
- •Команды работы с каталогами Команда dir
- •Команда chdir (cd)
- •Команда mkdir (md)
- •Команда rmdir (rd)
- •Команда deltree
- •Команда tree
- •Прочие команды Команда time
- •Команда date
- •Команда prompt
- •Команда path
- •Раздел 4. Язык программирования с. Работа с массивами и строками. Символы, строки, тексты
- •Стандартная библиотека ввода-вывода
- •Работа со строкой
- •Ввод-вывод целых чисел
- •Ввод целого числа
- •Вывод двоичного числа
- •Представление текста
- •Упорядоченные строки
- •Контекстная замена
- •Выделение вложенных фрагментов
- •Форматирование строки
- •Массивы
Ввод-вывод целых чисел
Функции и объекты стандартных потоков ввода/вывода могут, в частности, вводить и выводить целые числа, представленные в десятичной, восьмеричной и шестнадцатеричной системах счисления. При этом происходят некоторые преобразования, связанные с различной формой представления целого в памяти (внутренняя) и устройствах символьного ввода-вывода (внешняя форма представления).
int a |
|
char s[20] |
||||||
1052 (0x041C) |
|
'1' |
'0' |
'5' |
'2' |
…. |
'\0' |
|
Внутренняя форма Внешняя форма
представления числа представления числа
Так, при выводе на экран или вводе с клавиатуры целое число представлено строкой символов в виде последовательности цифр числа (в нашем примере "1052"). В памяти это же число представлено целой переменной (машинным словом), которое хранит двоичный эквивалент десятичного числа 1052 (в шестнадцатеричной системе -0x041C). Преобразования при вводе и выводе целых чисел заключаются в переходе от символа-цифры к значению целой переменной, соответствующему этой цифре, и наоборот:
char c; int n;
n = c - '0';
c = n + '0';
ВНУТРЕННЯЯ ФОРМА ПРЕДСТАВЛЕНИЯ ЧИСЛА -- представление числа в виде целой (int,long) или вещественной переменной.
По своей природе внутренняя форма представления числа является двоичной. Однако для внешнего наблюдателя это вообще не существенно. Он может считать ее какой угодно, хоть десятичной. Дело в том, что в целом важно, что компьютер производит в этой форме корректные вычисления.
ВНЕШНЯЯ ФОРМА ПРЕДСТАВЛЕНИ ЧИСЛА -- представление числа в виде строки символов – цифр, соответствующих числу в заданной системе счисления.
Таким образом, о системе счисления имеет смысл говорить только во внешней форме представления числа.
Ввод целого числа
В преобразовании используется тот факт, что при добавлении к числу очередной цифры справа старое значение увеличивается в 10 раз и к нему добавляется значение новой цифры, например:
.
Число: '123' '1234'
Значение: 123 1234 = 123 * 10 + 4
Тогда в основе алгоритма лежит итерационный цикл просмотра всех цифр числа слева направо, в котором значение числа на текущем шаге цикла получается умножением на 10 результата предыдущего цикла и добавлением значения очередной цифры:
n = n * 10 + c[i] - '0';
где s[i]-'0' -двоичное значение цифры, представленной символом c[i].
//------Преобразование внешней формы во внутреннюю в 10СС
int StringToInt(char c[])
{
int n,i;
for (i=0; !(c[i]>='0' && c[i]<='9'); i++)
if (c[i]=='\0') return(0); // Поиск первой цифры
for (n=0; c[i]>='0' && c[i]<='9'; i++)
// Накопление целого
n = n * 10 + c[i] - '0'; // "цифра за цифрой"
return n;
}
Вывод двоичного числа
В преобразовании используется тот факт, что значение младшей цифры целого числа n равно остатку от деления его на 10, вторая цифра -остатку от деления на 10 частного n/10 и т.д.. Тогда в основе алгоритма лежит итерационный цикл, в котором на каждом шаге получается значение очередной цифры справа как остаток от деления числа на 10, а само число уменьшается в 10 раз. Поскольку цифры получаются в обратном порядке их размещения в строке, массив символов также необходимо заполнять в обратном порядке. При этом надо либо вычислить заранее количество цифр, либо заполнять лишние позиции слева нулями или пробелами.
//Преобразование внутренней формы во внешнюю в 10СС
void IntToString(char c[], int n)
{ int nn,k;
for (nn=n, k=1; nn!=0; k++, nn/=10); // Подсчет количества
c[k] = '\0'; // цифр числа
for (k--; k >=0; k--, n /= 10) // Получение цифр числа
c[k] = n % 10 + '0'; // в обратном порядке
}
