Salve ho difficoltà a risolvere i seguenti problemi in c++

1) Data una sequenza di numeri determinare il minimo e il numero immediatamente superiore:
io ho fatto così ma dice che il minimo e vice minimo sono entrambi 0

#include <stdio.h>
#include <stdlib.h>




main() {

int n,min,vmin,app;



do{
printf("Inserisci un numero intero, 0 per terminare: ");
scanf("%d",&n);
if(n<min)
{
min=n;
app=min;
}
else
vmin=app;

}while(n!=0);


printf("Il minimo e' %d il viceminimo e' %d",min,vmin);

system("PAUSE");
}


Il secondo è: Dato n stampare numeri sequenza di fibonacci minori di n:
e l'ho fatto così ma non so come andare avanti:

#include <stdio.h>
#include <stdlib.h>


main()
{

int n,i;


do{


printf("Inserisci un numero intero positivo: ");
scanf("%d",&n);

}while(n<0);

for(i=0;i<n;i++)
{
printf("%d\n",i);
}





system("PAUSE");
}



Grazie per il tempo e il vostro aiuto