In the simplest terms, scalars are just numbers, vectors are quantities that can be added to one another and multiplied by scalars, and tensors are just ways of combining vectors to get a scalar result (with the special property that the result is “linear” with respect to each of the inputs).
The “rank” of a tensor is the number of vectors it needs to give a scalar.
If the rank is zero then the tensor gives a scalar without needing any input at all – ie it essentially “is” just a scalar.
A tensor of rank 1 produces a scalar for each vector. For geometric vectors, one way of getting a tensor of rank 1 is to use the dot product with some particular vector. Every vector defines a tensor of rank 1 in this way, and in fact it is also true (but less obvious) that every tensor of rank 1 is one of these. So, by using the(*) dot product, tensors of rank 1 can be thought of as the “same” as vectors.(* -but see below for some “wrinkles” on this)
Tensors of rank 2 produce numbers from pairs of vectors (so the dot product is itself a tensor of rank 2). Any linear transformation T can be used to define a tensor of rank 2 by taking the inner product of one vector with the result of T applied to the other, and it is also true (but less obvious) that every tensor of rank 2 is one of these. So tensors of rank 2 can be thought of as the “same” as linear transformations (or as their matrices if we are working in a particular coordinate system).
Similarly, Tensors of rank 3 produce scalars from sets of three vectors, and so on.(And in terms of coordinates, these higher rank tensors can be represented by generalizing matrices to blocks and higher dimensional arrays of numbers).
That’s about it for what tensors are, but actually working with them, and applying them to physics or geometry, gets quite a bit more complicated. This often involves identifying vectors and tensors with strings and arrrays of numbers (called components).
The identification of tensors with arrays of numbers depends on the choice of coordinate system and can be done in various ways. Different approaches lead to numbers which depend in different ways on the choice of basis vectors, and this leads to the distinction between what are called covariant and contravariant coordinates (which are often distinguished in the notation by the use of superscripts or subscripts to label the individual components – cf “raising and lowering of indices” to relate the different component types).
Discussion of covariance and contravariance may be beyond the intended scope of the question, but since other answers have addressed it I will do so too. The identification of tensors and vectors themselves (rather than just their coordinates) as covariant and contravariant has been the source of much confusion – certainly for me, and I suspect for others too. So my attempt to explain it in what follows is as much for my own benefit as for yours.
I am going to try to land somewhere between the answers of Viktor Toth and Troy Story on this. In order to keep things “in simple terms” I will restrict to the case where scalars are just real numbers.
As Viktor says, to truly understand vectors and tensors, it is important to let go of the concept that a vector is just a column of numbers. But more. It is also important to let go of the idea that a vector “is” an arrow.
What distinguishes vector quantities is that vectors of the same type can be combined with one another and with real numbers in a way that has similar properties to the addition and multiplication of scalars. Displacements in space are one example of a vector quantity with addition corresponding to doing he motions one after another and multiplication to either extending it by repetition and/or only completing it part way. Other examples include velocities, accelerations, and forces as well as pressure and temperature gradients. (There are also other kinds of vectors, such as those representing possible states of a quantum system, but all of the vectors and tensors I will consider here are related to the geometry of the space in which we live and move about.)
A displacement vector is like an arrow: it has a direction and a magnitude (where magnitude is just length or distance covered), and we can also think of those other physical examples as having both a strength or magnitude and a direction in space.
If you want to represent a vector using numbers, you need a coordinate system. One way of assigning coordinates is by expressing the vector as a sum of multiples of basis vectors (eg by choosing three perpendicular rulers in space and giving the multiples of each needed to get from the start to end of the given vector)
If a displacement vector has a length of, say, 1 meter, then if you switch your coordinate system from meters to centimeters, the number attached to your vector changes from 1 (meters) to 100 (centimeters). So as the length of your unit vectors is reduced by a factor of 100, the number measuring your vector’s length does the opposite: it “contra”-varies with the unit vector. Which is why displacement vectors (as well as the first three other types listed above) are called contravariant vectors.
But there are also vector quantities that are not contravariant (including both of the gradient fields listed above).
Here is Viktor’s example: say, you are measuring temperatures on the Earth’s surface, and calculate the temperature gradient: a vector-like quantity at each point on the map, pointing in the direction of steepest temperature increase at that point, its magnitude measured in, say, degrees of centigrades per meter. Now if you change your unit of length from meters to centimeters, the numerical value of this temperature gradient will also decrease: what was, say, 1 C/m becomes 0.01 C/cm. So it “co”-varies with the change in the size of units vectors. These quantities are called covariant vectors.
Some people use the term “vector” just for the contravariant case and use the term “covector” for covariant vectors
In many situations it is natural to combine a contravariant vector and a covariant vector to produce a scalar. For instance, we can combine the temperature gradient with a displacement to get an approximate temperature change (or an exact one if the temperature is a linear function of the position coordinates). This combination consists of the product of the magnitudes times the cosine of the angle between them or in terms of the components it is given by multiplying and adding according to the “inner product” formula.
The thing is, the units of this product will be m/s multiplied by C/m… that is, C/s. Notice how the unit of length is no longer present. This product does not depend on the choice of coordinate units on my map. This is a scalar.
Do you see now what a covector does? By multiplying it into a vector, I get a scalar.
[But a matrix is a combination of rows and columns. So it really is not a good representation of a covariant tensor… that would have to be a row of rows, not a row of columns (or column of rows) that a matrix really is. Only a row of rows can be multiplied into two columns of numbers and yield a scalar.] [Which is why it is good to define tensors not by how they appear in a representation but by what they do: just as a covector maps vectors into scalars, a rank-2 covariant tensor maps pairs of vectors into scalars. A rank-3 covariant tensor maps triplets of vectors into scalars. A mixed tensor maps a combination of contravariant and covariant vectors into scalars. And in this scheme of things, a covector is just a rank-1 covariant tensor; a contravariant (i.e., ordinary) vector is a rank-1 contravariant tensor; and a scalar is just a rank-0 tensor.]But what if we used a different dot product? (ie a different metric)
Now let’s move on to fields
[It is said that a covector field maps a vector field into a scalar field.] [What if I have not one vector field but two vector fields? Say, a vector field of wind velocities and another vector field of, say, ocean currents (again, a velocity field). What if I want to simultaneously map two vector fields into a scalar field? For this, a single covector field is not enough. I could have two covector fields, of course, but as it turns out, that is just a special case of something more general: a rank-2 covariant tensor field.] [Rank-2 tensor fields can be represented by matrices, but this often adds to the confusion. Why? If we want to be consistent with the notation, the numerical values associated with a contravariant vector in a given coordinate system can be represented by a column of numbers. The numerical values of a covariant vector would be a row of numbers. And indeed, you can multiply a column vector with a row vector using the standard rules of matrix multiplication and just get a number (scalar).]