#c
#c
Вопрос:
Программе необходимо показать число с большей первой цифрой, которое работает, только если числа цифр одинаковы для обеих переменных. Попробуйте с этими числами 4506 29985, он должен показать 4506, но программа показывает 29985, программа была написана на языке C.
#include <stdlib.h>
#include <stdio.h>
int disassembly1 (int a)
{
while (a>=10)
{
a /= 10;
}
return a;
}
int disassembly2 (int b)
{
while (b>=10)
{
b /= 10;
}
return b;
}
int main ()
{
int A1, B1, a, b;
printf("Int 2 numbers:n");
scanf_s("%d %d", amp;A1, amp;B1);
a = A1;
b = B1;
disassembly1(A1);
disassembly2(B1);
if (a > b || ((a == b) amp;amp; (A1 > B1)))
printf("%dn", A1);
else
printf("%dn", B1);
system("pause");
}
Комментарии:
1. Почему вы написали одну и ту же функцию дважды?
2.
disassembly
Функции возвращают что-то. Возможно, вы хотите что-то с этим сделать?3. Вам нужно отладить свой код.
Ответ №1:
Прежде всего, disassembly1
и disassembly2
являются одной и той же функцией и не должны записываться дважды.
Во-вторых, и это более важно, функция disassembly
возвращает первую цифру, но вам нужно сохранить ее в переменной.
Рабочий код (с несколькими изменениями):
#include <stdlib.h>
#include <stdio.h>
int disassembly(int a)
{
while (a>=10)
{
a /= 10;
}
return a;
}
int main()
{
int a, b, a_digit, b_digit;
printf("Int 2 numbers:n");
scanf_s("%d %d", amp;a, amp;b);
a_digit = disassembly(a);
b_digit = disassembly(b);
if (a_digit > b_digit || ((a_digit == b_digit) amp;amp; (a > b)))
printf("%dn", a);
else
printf("%dn", b);
system("pause");
return 0;
}
Кроме того, имя disassembly
не соответствует значению функции. Я бы предложил изменить ее на что-то вроде get_first_digit
.
Ответ №2:
Ваш код не считывает значения, возвращаемые функциями, оставляя переменные a
и b
неизменными.
Изменить:
disassembly1(A1);
disassembly2(B1);
Для:
a = disassembly1(A1);
b = disassembly2(B1);
Другие предложения:
определите и используйте один экземпляр функции: int disassembly(int x);
и вызовите его дважды.
a = disassembly(A1);
b = disassembly(B1);
Ответ №3:
Вот гораздо более простая версия (это matlab / octave, но ее можно легко перенести на c)
a = 4506;
b = 29985;
isAbigger = floor(a/10^(floor(log10(a)))) > floor(b/10^(floor(log10(b))));