Es más o menos sencillo, si los parámetros son enteros, darán resultados enteros. Si deseas resultados con parte decimal, debes usar tipos de datos que puedan almancenar parte decimal. Cualquiera de estass te puede funcionar:
int asd = ( (float)1/(float)3 + (float)1/(float)3 + (float)3/(float)7 );
int asd = ( 1.0 / 3.0 + 1.0 / 3.0 + 3.0 / 7.0 );
int asd = ( (float)1/3 + (float)1/3 + (float)3/7);
int asd = ( 1/3.0 + 1/3.0 + 3/7.0 );
En la primera, (float) indica que se debe hacer un "cast" (conversión) para convertir a float el tipo de dato a continuación, se hace para cada uno de los datos a manejar.
En la segunda, se consigue lo mismo pero indicando que cada dato tiene parte decimal, agregándole el .0.
En la tercera y cuarta, se realiza lo mismo, pero solo indicándolo para uno de los datos que intervienen en cada una de las divisiones. En C, cuando se tienen dos datos de diferente tipo para realizar una operación, se hace un "cast" para que los dos datos sean del mismo tipo, para el ejemplo, un dato es int y el otro float, para estos casos el cast se hace para convertir el tipo int a float, con lo que se consigue el mismo efecto que con los dos primeros ejemplos.