This is not possible, if you want to change the directory (i.e.
cd, that is chdir(2) ...) of the shell which has invoked your program. So
cd has to be a bash(1) builtin.
The reason is that
chdir affects only the calling process (which would be your C program) not the parent process. Each process has its own current directory. See also getcwd(3), errno(3), credentials(7), proc(5) and path_resolution(7).
If you call system(3) it will fork(2) a new shell and execve(2)
/bin/sh -c so only the forked shell can change its current directory.
You need to read Advanced Linux Programming and syscalls(2).
Perhaps you want to call
chdir directly inside your C program. This will affect the current process and all future child processes (including those started with
popen library functions inside your C code) till their termination or some further call to
chdir. But it won't affect the shell in your terminal (where you started your C program).