Find the cheapest order placed out of all of the stores visited - follow-up #2
I see some things that may help you further improve your program.

Eliminate arrays by carefully rethinking the problem

At the end of the program, all that is needed is the cheapest_order and the cheapest_shop.  All of the arrays could be eliminated by simply keeping, as each shop total is calculated, the current cheapest order.  There is no need to keep any data from a shop that is not cheapest, nor any reason to store the ingredient costs in an array.

Fix the bugs

If the scanf fails, as it does if the user inputs a letter instead of a number, the program acts as if the number 1 had been entered, and the user gets no chance to correct it.  Also, when I entered -1 for the number of shops to be visited, I got this result:

How many shops will be visited? -1
The cheapest  order  was  at  shop #1, and the total cost of the order was $81082112.00


Test your code thoroughly

One way to test the code is to simply try it multiple times.  A better way is to automate the process by writing a test driver.  There are many ways to do this; one simple way is to manually create a few files with test input and then feed them to the program.  

Don't use floating point for money

There is a problem using floating point (that is, float or double types) to represent money values.  See this question for a thorough explanation for why that's the case.

An alternative is to keep a number of cents as an integer value internally.  For more depth about floating point issues, I'd recommend the excellent article "What every computer scientist should know about floating-point arithmetic" by David Goldberg.