1) Jeżeli używasz funkcji jakiegoś typu (np. int, float) to twoja funkcja musi zwracać jakąś wartość tego typu. Brakuje tu więc słowa kluczowego "return".
2) Zauważ, że gdy program zaczyna analizować twój pierwszy warunek if((a==0)||(b!0)) i gdy go spełni to pomija wszystkie pozostałe warunki, gdyż użyłeś przed nimi else. Program więc przypisuje wartość b do a (czyli obecnie są one tą samą liczbą) po czym omija wszystkie else i sprawdza warunek w while(a!=b), ponieważ są one równe (a==b) to kończy pętle.
Tak samo sytuacja będzie wyglądać, gdy program ominie pierwszy if i przejdzie do drugiego if((a!=0))||(b=0)) (źle zapisałeś b=0, powinno być wg twojego rozumowania b==0). Tutaj program zrobi dokładnie to samo - sprawi, że a i b będą miały te same wartości po czym przeskoczy do warunku while(a!=b) który jest spełniony, gdyż obecnie (a==b) i przerwie pętle.
Nice try tho 