0

I have written a basic program to find the largest number in an array and print it:

#include <stdio.h>

int main(void)
{
    int numbers[] = {3, 5, 12, 1, 4};
    int largest;

    largest = numbers[0];

    for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++)
    {
        if (largest < numbers[i])
        {
            largest = numbers[i];
        }
    }

    printf("The largest number in the array is %i\n", largest);
}

What would I need to do so that instead of printing The largest number in the array is 12, it prints The largest number in the array is numbers[2]?

2
  • 5
    Keep track of the index. eg if( largest < numbers[i]) { max_index = i; ... } Commented Feb 3, 2021 at 21:17
  • Instead of saving the numbers[i] in the largest variable, just save the i index and then print it. printf("the largest number is numbers[%d]\n", largest); Commented Feb 3, 2021 at 21:18

3 Answers 3

4

Instead of using the value, you would use the index:

#include <stdio.h>

int main(void)
{
    int numbers[] = { 3, 5, 12, 1, 4 };
    int largest;

    largest = 0;

    for (int i = 1; i < sizeof(numbers) / sizeof(numbers[0]); i++)
    {
        if (numbers[largest] < numbers[i])
        {
            largest = i;
        }
    }

    printf("The largest number in the array is numbers[%d]\n", largest);
    return 0;
}
Sign up to request clarification or add additional context in comments.

Comments

0

One way of doing it is tracking the index

#include <stdio.h>

int main(void)
{
    int numbers[] = {3, 5, 12, 1, 4};
    int largest;
    int index = 0;

    largest = numbers[0];

    for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++)
    {
        if (largest < numbers[i])
        {
            largest = numbers[i];
            index   = i;
        }
    }

    printf("The largest number in the array is %d at numbers[%d]\n", largest,index);
    return 0;
}

Comments

0

I would do something like:

#include <stdio.h>

int
main(void)
{
        int numbers[] = {3, 5, 12, 1, 4};
        int *largest = numbers;
        int *end = numbers + sizeof numbers / sizeof *numbers;

        for(int *s = numbers; s < end; s++ ){
                if( *s > *largest) {
                        largest = s;
                }
        }
        printf("The largest number in the array is %d, at position %td\n",
                 *largest, largest - numbers);
}

2 Comments

I don't thhink OP have pointers knowledge, anyway, interesting way to caluculate that index!
IMO it just adds obfuscation to change from using the index to using a pointer

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.