Перевод из шестнадцатиричной системы в десятичную - C (СИ)
Формулировка задачи:
Доброго времени суток. Изучаю язык Си по учебнику Кернигана и Ричи, столкнулся со следующей задачей: необходимо написать программу, которая бы преобразовывала последовательность цифр, начинающихся с 0x или 0X в соответствующее целое число. Цифры могут быть из диапазона 0..9 a..f A..F . Вот мой код:
У меня несколько вопросов.
1. Подскажите, как улучшить код, дайте конструктивные советы.
2. При нажатии на комбинацию клавиш Ctrl + C выскакивает окно:
Первый этап обработки исключения по адресу 0x75C6221B (KernelBase.dll) в 2.3_Program.exe: 0x40010005: Control-C.
Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.
Как обработать правильно данную комбинацию?
Заранее спасибо!
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #define MAXSIZE 10
- int pow(int base,int number);
- int main()
- {
- char charArray[MAXSIZE];
- char c;
- int intSizeOfArray;
- int intDecimalNumber;
- int i;
- i = 0; intSizeOfArray = 0; intDecimalNumber = 0;
- while ((c=getchar())!=EOF)
- {
- if (i >= MAXSIZE - 1)
- break;
- else
- {
- charArray[i] = c;
- i++;
- }
- }
- charArray[i] = '\0';
- i = 0;
- if (charArray[0] == '0' && ((charArray[1] == 'x') || (charArray[1] == 'X')))
- {
- intSizeOfArray = strlen(charArray) - 3; //не считая первых двух символов и символа переноса каретки
- i = 2;
- while (intSizeOfArray != 0)
- {
- if (charArray[i] == 'A' || charArray[i] == 'a')
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 10;
- else if (charArray[i] == 'B' || charArray[i] == 'b')
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 11;
- else if (charArray[i] == 'C' || charArray[i] == 'c')
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 12;
- else if (charArray[i] == 'D' || charArray[i] == 'd')
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 13;
- else if (charArray[i] == 'E' || charArray[i] == 'e')
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 14;
- else if (charArray[i] == 'F' || charArray[i] == 'f')
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 15;
- else if (charArray[i] >= '0' && (charArray[i] <= '9'))
- intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * (charArray[i] - '0');
- else
- {
- printf("%s", "Syntax error");
- break;
- }
- intSizeOfArray--; i++;
- }
- printf("%d",intDecimalNumber);
- }
- else
- printf("%s","That is not hexademical number");
- printf("%s","Press any key...");
- getchar();
- return 0;
- }
- int pow(int number,int base)
- {
- int result;
- int i;
- result = 1; i = 0;
- while (i != (number - 1))
- {
- result = result*base;
- i++;
- }
- return result;
- }
Решение задачи: «Перевод из шестнадцатиричной системы в десятичную»
textual
Листинг программы
- float pow(float x, int n) {
- float y = 1;
- int i = n;
- while(i > 0) {
- if(i % 2 == 1) {
- y *= x; i--;
- } else {
- x *= x; i /= 2;
- }
- }
- return y;
- }
Объяснение кода листинга программы
- Входные данные: число
x
типаfloat
и целое числоn
. - Переменная
y
инициализируется единицей. - Переменная
i
инициализируется значениемn
. - Начинается цикл
while
, который выполняется до тех пор, покаi
больше нуля. - Внутри цикла проверяется, является ли
i
нечетным числом. - Если
i
нечетное, тоy
умножается наx
и выполняется операция вычитанияi
на единицу. - Если
i
четное, тоx
умножается наx
и выполняется операция деленияi
на два. - После окончания цикла, функция возвращает значение переменной
y
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д