Привет, ребята, я довольно новичок в программировании и прохожу свой путь через «Программирование, принципы и практика использования C ++» Страуструпа, и в конце главы 3 я полностью остановился, выполнив упражнение с просьбой написать кусок кода. это делает ряд вычислений, включающих 2 числа, который включает в себя нахождение отношения чисел. К сожалению, в книге это вообще не освещалось, и я вырываю свои волосы, пытаясь понять это самостоятельно, только в состоянии найти примеры кода, способного продвинуться для моего маленького маленького мозга.
Код, который у меня есть на данный момент:
double ratio;
if (val2 > val1)
ratio = (val2 / val1);
if (val2 < val1)
ratio = (val1 / val2);
cout << "The ratio of " << val1 << " and " << val2 << " is 1:" << ratio << '\n';
которая отлично работает для чисел, которые равны целому отношению (например, 100 и 25), однако, несмотря на то, что я устанавливаю переменную «отношение» как двойную, она удаляет любые десятичные дроби из ответа в случаях не целых чисел. Может кто-нибудь сказать мне, где я иду не так?
При делении целые результат целое число (используется целочисленная арифметика):
11 / 2 == 5
11 % 2 == 1 /* remainder */
и при делении плавающая запятая оценивает результат плавающая запятая также:
11.0 / 2 == 5.5
11 / 2.0 == 5.5
((double) 11) / 2 == 5.5
В твоем случае
double ratio = (val2 / val1);
у вас есть целочисленное деление и только после того, как совершено смещение, результат double
, Вы можете либо объявить val2
а также val1
как double
:
double val1;
double val2;
или же бросать хотя бы один аргумент соотношения к double
:
double ratio = ((double)val2) / val1;
Тот факт, что тип результата double
не имеет значения, выполняется ли оригинальное деление на целочисленные типы (усечение десятичной части).
Итак, чтобы решить вашу проблему, либо:
Я сделал всю проблему из Страуструпа «Программирование, принципы и практика с использованием C ++. Вот коды, хотя без комментариев.
int main()
{
/** --------Numbers-----*/
int val1;
int val2;
double largest; //I'll store here the largest value
double smallest; //I'll store here the smallest valuecout<< " Enter two Numbers to play with\n";
while(cin>> val1>>val2){
if(val1<val2){
cout<< "smallest: "<<val1<<endl;
cout<< "largest: "<<val2<<endl;
//If the above argument succeeds, largest and smallest will get their values
largest=val2;
smallest=val1;}
if(val1>val2){
cout<< "smallest: "<<val2<<endl;
cout<< "largest: "<<val1<<endl;
//If the above argument succeeds, largest and smallest will get their values
largest=val1;
smallest=val2;}
int their_sum=val1+val2;
int their_product=val1*val2;
int their_diff=val1-val2;
double ratio1;
ratio1=largest/smallest;
cout<<"Sum: "<<their_sum<<endl;
cout<<"Difference: "<<their_diff<<endl;
cout<<"Product: "<<their_product<<endl;
cout<<"Ratio: "<<ratio1;
}
return 0;
}
В этом коде нет ничего нового, все было описано в предыдущих главах.
#include <iostream>
using namespace std;
int main()
{
int val1,val2;
cout << " Enter two integer values followed by enter" << endl << endl;
cin >> val1;
cin >> val2;
if(val1 < val2) // To determine which value is larger and which one is smaller
{
cout << val1 << " is smaller than" << val2 << endl << endl << "And" << val2 << " is larger than " << val1 << endl<<endl;
}
enter code here
else if( val2 < val1)
{
cout<<val2 <<" is smaller than"<< val1<<endl<<endl<<"And"<< val1 << " is larger than "<< val2<< endl << endl;
}
cout << "The sum of "<< val1<<" and "<<val2<<" is "<< val1+val2<<endl<<endl;
// diplaying the sum of the two numbers
enter code here
cout << " The difference between "<<val1<< " and "<<val2<< " is " << val1-val2<<endl;
// displays the difference of val2 from val1
cout << " The difference between "<<val2<< " and "<<val1<< " is " << val2-val1<<endl;
// displays thr difference of val1 fromval2
enter code here
enter code here
cout << " The product of " <<val1<< " and " << val2<< " is " << val1*val2<< endl<<endl;
// displaying the product of val1 and val2
enter code here
enter code here
enter code here
// now to diplay the ratio of the two numbers
double ratio1;
cout << " The ratio of "<<val1<<" and "<<val2<<" is ";
if(val1 < val2)
{
ratio1= ((double)val2) /val1;
cout << ratio1;
}
else if(val1 > val2)
{
ratio1= ((double)val1) /val2;
cout << ratio1;
}
}