Как отправить USSD запрос (через 3g модем) с помощью программирование на C?
Открыть документацию по модему.
Открыть порт, на котором сидит модем.
Написать туда АТ команду инициализации модема и отсылки USSD запроса.
???
PROFIT
Раз Вы задаете такие вопросы лучше Вам погуглить готовые решения.
1й момент - модем должен создать виртуальный COM порт для управления посредством АТ команд
2й - под какую ОС пишется приложение?
Если нужно под Linux - то достаточно открыть файл устройства соответствующий 3G модему - т.е. COM порт. А затем записать в этот файл AT команду с USSD запросом.
Если под Windows - с помощью WinAPI или сторонней библиотеки получить доступ к COM порту и затем писать в него АТ команды и парсить ответы.