Introduction
Questions like this one often suggests that it is not clear how Mathematica works and that it always tries to evaluate expressions. Assume the following simple example
a = 1;
a + a
a*x + 1
In the first line I set a to 1 and in the other two I write down an expression. Now I want that in a+a the result is 2 like one would expect, but in the a*x+1 line I want that a stays unevaluated.
How should Mathematica know that? It always evaluates your expressions if you write it down.
Changing this behavior is not as obvious as it might seem in the first place. It is called non-standard evaluation in Mathematica and for a novice programmer this might be confusion.
You style of code suggests that you maybe come from an iterative programming language and that you not have used Mathematica for long.
First let me point out, that your loop-construct can simply be written as Sum
Clear[a];
Sum[ToExpression[FromCharacterCode[96 + count]]*x^(5 - count), {count, 5}]
(* e + d x + c x^2 + b x^3 + a x^4 *)
I will use this in my code below.
Solution
My first example showed you, that you can never have an expression like a+a which stays that way when a has a value, but we can use HoldForm[a+a] to make it look like that. HoldForm is only one of the functions in the Hold family.
First lets create your list of parameters. If you replace ToExpression with MakeExpression every parameter is wrapped in HoldComplete which prevents evaluation
Table[MakeExpression[FromCharacterCode[96+count]],{count,5}]
(*
{HoldComplete[a],HoldComplete[b],HoldComplete[c],
HoldComplete[d],HoldComplete[e]}
*)
Now we create your polynomial using this list of parameters and we simply replace HoldComplete with HoldForm. This prevents the parameters from evaluation and show them as like they would have no value
fixedPolynomial[degree_] := With[
{parameters = Table[MakeExpression[FromCharacterCode[96 + count]], {count, degree}]},
Sum[ HoldForm @@ parameters[[count]]*x^(degree - count), {count, 1, degree}]
]
Now you always get an unevaluated form
a=1;
b=2;
c=3;
poly=fixedPolynomial[5]
(* x^4 a+x^3 b+x^2 c+x d+e *)
Although you should always be aware of, that it is only displayed as it would be a, b, etc. In truth, it is wrapped:
InputForm[poly]
(* x^4*HoldForm[a] + x^3*HoldForm[b] + x^2*HoldForm[c] + x*HoldForm[d] + HoldForm[e] *)