1) IMHO, тебе не надо вообще с матлабы уходить. Хорошо же всё! А для "расширения кругозора" лучше двигаться в двух независимых направлениях
Направление 1 -- алгоритмы. Тут язык не важен, а важны сосбтвенно алгоритмы и струтктуры данных. Берёшь любой язык, какой тебе просто будет освоить. C#, C, PASCAL, FORTRAN. В принципе это не важно который. И ботаешь учебник по алгоритмам с этим я\зыком наперевес
Направление 2 -- представление о том, как работает программа на компьютере. Тут конечно можно поизучать асмы и архитектуры разных машин, но, IMHO, это следующая стадия, тебе пока не нужная. А нужная -- это С.
Сила С в том и состоит, что это С предоставляет программисту возможность писать для компа вполне так переносимые программы, и при этом иметь доступ к тому, как оно на самом низком уровне работает. То есть С предоставляет программисту некий обобщённый взгляд на компьютер, которые при этом не скрывает большинства низкоуровневых деталей.
Для изучения этого, IMHO, ничего кроме K&R нету...
А уж если заботаешь как на компе работает С-программа и сам по себе С, с одной стороны, и выч. алгоритмы сами по себе, с другой, сможешь писать и на с++ вычматематические проги...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском