I think C still outputs that as a float if not type-casted, integer divide should be backslash (\).
Anyway, I decided to take a crack at my own version which replicates the table structure the OP suggested.
Lua Code:
local Buttons={};
for i=0,(24*4)-1 do-- Written this way to make it easier to understand (Also zero-based indices to make math easier)
local key=(i%2==1 and "CTRL-" or "")..(i%4>1 and "SHIFT-" or "").."F"..(math.floor(i/4)+1);
local name="FunctionButton_"..key:gsub("%-","_");
local button=CreateFrame("Button",name,nil,"SecureActionButtonTemplate");
button:SetAttribute("type","macro");
SetBindingClick(key,name);
Buttons[i+1]=button;
end