There is no "exact" reason - they do a multitude of jobs!
Constructors allow you to specify that an object can either be created in various different ways, or that it must have information given when it is constructed. They also allow us to create an object completely before it is ever used - which can include loading data from a database, or a disk file; connecting to a website to check that the licence to use the class is valid, or pretty much anything else we need.
The first thing is: every object must have a constructor. If you do not define one, then a default parameterless constructor is created by the system for you, which does nothing. If you do define a constructor, then that default is not created, so creating a constructor yourself allows you to say "this class needs this information and cannot be used without it". For example, you might have a Circle class that must have a Radius passed to it when it is built.
This allows us to use class instances later in the full knowledge that they will work: you can't create a Circle that doesn't have a radius, so the Area property will always work for example.
You can also overload the constructor to let your user be more flexible in how to create your class - for a Circle, you might provide a constructor that takes the Radius, and one that takes the Area, and one that takes the Circumference - because you can create your Circle with all the info you need from any one of those.
You can also create a private constructor which means that the outside world cannot create any instances of the class themselves - they have to use methods in your class to do that, which lets you have much tighter control over how many instances they get to play with. This is used in the Singleton pattern to ensure than one and only one instance of a class is ever created.
There is a lot going on here, so google a bit and read some of the articles on them - this is a good one:
Constructors in C#[
^]