comparing numbers

T

Tweaxor

I stuck with exerise in a Learning C book that I got. If I have the
numbers as input. How can I determine which of the three is the
smallest number, largest number and the range. Or would it be simpler
to just find the range of the three numbers.

Thanks in advance :D
 
S

Steve Zimmerman

Tweaxor said:
I stuck with exerise in a Learning C book that I got. If I have the
numbers as input. How can I determine which of the three is the
smallest number, largest number and the range. Or would it be simpler
to just find the range of the three numbers.

Thanks in advance :D

#include <stdio.h>

int min(int num1, int num2);
int max(int num1, int num2);

int main()
{
int int1, int2, int3;

printf("Enter three integers, separated by spaces: ");
scanf("%d%d%d", &int1, &int2, &int3);

printf("The minimum is %d\n", min (int1, (min (int2, int3))));
printf("The maximum is %d\n", max (int1, (max (int2, int3))));

printf("The range is %d\n", max (int1, (max (int2, int3)))
- min (int1, (min (int2, int3))));

return 0;
}

int min(int num1, int num2)
{
if (num1 < num2)
return num1;
else
return num2;
}

int max(int num1, int num2)
{
if (num1 > num2)
return num1;
else
return num2;
}
 
R

Richard Heathfield

Homework solution snipped. Are you going to do this guy's day-job for him
too if he ever graduates?
printf("The range is %d\n", max (int1, (max (int2, int3)))
- min (int1, (min (int2, int3))));

Sloppy, but not sloppy enough to get the guy a low mark if that's what you
had in mind.

OP: now that Mr Zimmerman has trashed any value that might have remained in
your homework assignment, see if you can work out ON YOUR OWN why the above
printf assumes too much.
 
M

Mike Wahler

Tweaxor said:
I stuck with exerise in a Learning C book that I got. If I have the
numbers as input. How can I determine which of the three is the
smallest number, largest number

Use the comparison operators: '<' means 'less than',
'>' means 'greater than.

if(a < b)
printf("%d is less than %d\n", a, b);
and the range. Or would it be simpler
to just find the range of the three numbers.

Not sure what you mean by 'range'. The range of
numbers between the highest and lowest consists
of all values between them (and including them if
your definition of 'range' means 'inclusive').

The range of possible values for a given numeric
type can be obtained from a macro of <limits.h>:

printf("Range of type 'int' is from %d to %d inclusive.\n",
INT_MIN, INT_MAX);

-Mike
 
C

Christopher Benson-Manica

OP: now that Mr Zimmerman has trashed any value that might have remained in
your homework assignment, see if you can work out ON YOUR OWN why the above
printf assumes too much.

I'm having a tough time figuring out what it assumes that's inadvisable. max
and min always return integers, so the program will never crash. And as far
as I can tell, it always produces correct results... so help me out here...
 
M

Mike Wahler

Christopher Benson-Manica said:
I'm having a tough time figuring out what it assumes that's inadvisable. max
and min always return integers, so the program will never crash.

It might not crash (actually nobody said it would, but it could),
but will it always give accurate results even when 'int1', 'int2'
and 'int3' each have a valid value? What output do you get from
the following (at the risk of further annoying Richard :) ) :

[compile with implementation where sizeof(int) >= 4]

#include <limits.h>
#include <stdio.h>

int min(int lhs, int rhs)
{
return lhs < rhs ? lhs : rhs;
}

int max(int lhs, int rhs)
{
return lhs > rhs ? lhs : rhs;
}

int main()
{

int int1 = 500000000;
int int2 = -1000000000;
int int3 = -2000000000;

double dmin = int3; /* used below */
double dmax = int1; /* " " */

printf("INT_MIN == %11d\n", INT_MIN);
printf("INT_MAX == %11d\n", INT_MAX);

printf("int1 == %11d\n"
"int2 == %11d\n"
"int3 == %11d\n",
int1, int2, int3);

printf("max(%11d, (max(%11d, %11d))) == %11d\n"
"min(%11d, (min(%11d, %11d))) == %11d\n",
int1, int2, int3, max(int1, (max(int2, int3))),
int1, int2, int3, min(int1, (min(int2, int3))));

printf("The range is %11d\n", max (int1, (max (int2, int3)))
- min (int1, (min (int2, int3))));


printf("%.0f - %.0f == %.0f\n", dmax, dmin, dmax - dmin);
return 0;
}

-Mike


.. And as far
as I can tell,

How far did you test? :)
it always produces correct results...

Not *always*.
so help me out here...

See above.

-Mike
 
C

Christopher Benson-Manica

Mike Wahler said:
How far did you test? :)

Okay, I didn't ;) Boy, that was more subtle than I thought, but I probably
still should have seen it... *sheepish*
Not *always*.

Just put in the documentation not to use MAX_INT ;)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,044
Latest member
RonaldNen

Latest Threads

Top