codice:
#include <stdio.h>

#define SIZE 100

typedef struct									//struttura
{
	char segno;
	int valore;
	long int sommetta;
} Parole;

void somma_pref (Parole vettorino[], int i, long int somma_precedente);		//prototipo della funzione

int main()
{
	Parole vettorino[SIZE] = {0};						//dichiaro il vettore di struct
	int i;
	
	for(i = 0; i < SIZE; i++)
		{
		scanf (" %c", &vettorino[i].segno);				//prendo il segno del valore
		if(vettorino[i].segno == 't')					// se è t mi fermo
			break;
		scanf(" %d", &vettorino[i].valore);				//prendo il valore
		}
		
	somma_pref(vettorino, 0, 0);						//FUNZIONE
	
	i = 0;
	while (vettorino[i].segno != 't')					//stampa
		{
		printf("%d %ld ", vettorino[i].valore, vettorino[i].sommetta);
		i++;
		}
	
	return 0;
}

void somma_pref (Parole vettorino[], int i, long int somma_precedente)
{
	if(vettorino[i].segno=='t')						//caso base per uscire dalla ricorsione
		return;
	
	if(vettorino[i].segno == 'n')						//caso n, negatività del valore
		vettorino[i].valore *= -1;					//il valore deve diventare negativo
		
	vettorino[i].sommetta = vettorino[i].valore + somma_precedente;
	somma_pref(vettorino, i+1, vettorino[i].sommetta);
}
Controlla se è corretto, rispetto alle consegne ...
E poi dimmi che cosa avevi sbagliato, confrontando i due programmi.

La mia soluzione prevede un campo di tipo int e non usigned int ...
Di conseguenza, se non va bene, devi modificarlo