I'm not sure where in relation to your flow chart you want to use this selection statement, but it captures the gist of the logic. You don't need to test whether the current element of the array is larger than "largest" when i=0 because your initialization took care of that. You also don't want to test any case in which i is not strictly less than N, otherwise you will exceed your array bounds.C:if((i > 0) && (i < N)) { }
But you appear to be slapping on patches to avoid the issues caused by errors and inefficiencies instead of making the effort to remove the errors and inefficiencies.
In the case of inefficiencies, this is particularly insidious because, far from removing them, you may have actually added to them. Instead of making a check you didn't need to make on a single pass, you now add a check to check if you need to do a check, but you now do the new check on every pass.
You also need to consider your initialization of largest. You assume that array[0] holds a meaningful value. But what if nothing was ever stored in the array?
This actually brings up some subtle issues (that I don't think you are ready for). So I'll just mention them but don't worry about really understanding them. At some point in the future you will be ready to tackle them and something will tickle the back of your brain that you've seen this before and that it is something to pay attention to.
A variable of array type can't be declared with less than one element. Similarly, a pointer can't point to a zero amount of memory. We do have what are called NULL pointers, which don't point to anything at all. But we have to tread very, very carefully when working with NULL pointers (or pointers that could potentially be NULL).
Also, the amount of data stored in an array (or a dynamically allocated block of memory) is not the same as the size of the array.
For instance,
int array[10] = {1,2,3,4,5};
This only has five pieces of data in it, but the array contains ten elements. You only want your program to check the data that is not there and you do NOT want it to check the other five elements, which are uninitialized and can have ANY junk value that happens to be there.
The way your particular program is written, this is not an issue because the array is declared so that it just holds the amount of data stored in it. Sometimes this is how it is. But more often your array is larger than the data that it actually holds.
So when you write code, keep in mind the distinction between how much data an array CAN hold, and how much it DOES hold. You often need two different variables for these two fundamentally distinct pieces of information.
always has enough memory

