Może dołożę swoje trzy grosze, bo nie jestem pewien czy wiesz co nie działa.
W C++ masz różne typy - masz int, float, double, string,... , ale możesz też używać po prostu liczb np.2 tak jak ty. Problem jest w tym, że w wyrażeniu:
c=((65*15+30)/2)*z;
kompilator prawą stronę traktuje jak działania na liczbach całkowitych, bo takie tam masz, zatem:
65*15+30 = 1005
1005 / 2 = 502 (bo liczby całkowite)
502 * 66 = 33132
i typ c niewiele tu zrobi, bo 65,15,30,2 to liczby całkowite. Jak zatem zmienić je na liczby zmiennoprzecinkowe? Bardzo prosto, wystarczy dodać .0 na końcu każdej::
c=((65.0*15.0+30.0)/2.0)*z;
zauważ, że teraz niezależnie czy c będzie typu float czy int, otrzymasz poprawny wynik, bo działanie 65.0*15.0+30.0)/2.0 zostanie wykonane na liczbach zmiennoprzecinkowych, a na końcu dopiero zamienione na int.
W takich sytuacjach jeżeli chcesz otrzymywać poprawne wyniki musisz albo używać tylko zmiennych które mają już typ z góry określony, albo dokładnie zaznaczać czy dana liczba jest całkowita np. 1 czy zmiennoprzecinkowa np. 1.0 bo to ma wpływ na wynik działania (przy dzieleniu, bo jakbyś miał samo dodawanie, odejmowanie i mnożenie to różnicy by nie było).