Creating SharePoint group programmatically is quite easy.
First call web.SiteGroups.Add to create group:
SPWeb web = SPContext.Current.Web;
web.AllowUnsafeUpdates = true;
web.SiteGroups.Add("MyTestGroup", web.CurrentUser, web.CurrentUser, string.Empty);
Then you probably want to give some permissions to group (let’s try to provide contributor role)
SPGroup group = web.SiteGroups["MyTestGroup"];
SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(SPRoleType.Contributor);
SPRoleAssignment roleAssigment = new SPRoleAssignment(group);
roleAssigment.RoleDefinitionBindings.Add(roleDefinition);
web.RoleAssignments.Add(roleAssigment);
web.Update();
Now you can add some users to your new group:
SPUser spUser = web.EnsureUser("local\\User1");
group.Users.Add(spUser.LoginName, spUser.Email, spUser.Name, spUser.Notes);
web.AllowUnsafeUpdates = false;
And don’t forget to turn off unsafe update at the end

I believe
SPRoleAssignment roleAssigment = new SPRoleAssignment(principal);
should be
SPRoleAssignment roleAssigment = new SPRoleAssignment(group);
You are absolutely right! Thanks. Fixed that.