Así de primeras se me ocurre que al calcular el valor, puedes añadirle una condición tal que sacara números aleatorios hasta sumar uno:
for(i=0; i resto = 0;
for(j=0; jif(j ==0){//para no salir del rango
valor=(rand()%max);
valor/=100;
}else
if(j == util){//el último numero dejamos que no sea aleatorio para que de exactamente 1.
valor = 1-resto;
}else
do{
valor=(rand()%max);
valor/=100;
}while(valor + matriz[i][j-1] < 1);
matriz[i][j]=valor;//te habías dejado la [i]
resto+=valor;
}}
Es algo chapucero, y supongo que hará columnas mas o menos decrecientes, pero puede que funcione.
Si es el primero lo calcula normal. El resto, calcula uno, y si al sumar da 1 o más, calcula uno nuevo. El último se calcula por lo que queda del la suma de los anteriores hasta uno. Resultado, todos suman 1.
Otra cosa, se recomienda no usar goto en C.
Un saludo!