Vale, confundes dos cosas: La definición de tipos con typedef y la definición de un array de structs en la misma declaración.
Tu has escrito:
typedef struct { ... }
Esto después de la última llave espera un identificador para un tipo de dato. Sin embargo dices:
} prefijos[N]=...
Con eso lo que quieres es definir una variable array de structs. Esta construcción no puede ir junta.
En tu caso lo que debes hacer es quitar la palabra clave typedef y dejar
struct { ... } prefijos[N]=...
Con esto tendrás un array de N estructuras anónimas (no podrás usar ese tipo en ningún otro sitio del programa para crear más datos).
Pero aún así tienes otro problema:
Cuando inicializas el array haces: prefijos[N]={ ... }.
Esto está bien para un array de elementos simples, pero estás inicializando estructuras de dos elementos, así que deberías hacerlo así:
prefijos[N]={ {elem1, elem2}, {elem1, elem2}, ... , {elem1, elem2} };
En conjunto la nueva definición es esta:
struct {
char* prefijo;
int exponente;
} prefijos[N] = {{"femto", -15},
{"pico", -12},
{"nano", -9},
{"micro", -6},
{"mili", -3},
{"kilo", 3},
{"mega", 6},
{"giga", 9},
{"tera", 12}};