In theory, no. Neither language specifies how floating point values are represented, or which values can be represented exactly. (UPDATE: apparently, C11 does recommend a representation. C++, and older C dialects, don’t).
In practice, yes, for quite a large range of values. Any implementation you’re remotely likely to encounter will use a 64-bit IEEE representation for double. This can represent any integer value up to 253 (approximately 9×1015) exactly. It can certainly represent anything representable by a 32-bit integer type.