S
Wir gehen jetzt einmal von gängigen 32Bit Systemen aus:
short hat 16Bit und int 32Bit
Wenn du nun
scanf("%d",&s);
machst, werden beginnend ab &s 32Bit (4Byte) in den Speicher geschrieben. Was dazu führt, dass mehr geschrieben wird, als s groß ist.
Da nun aber z direkt nach s kommt (was durchaus nicht sein muss, wir müssen hier also beten, dass es funktioniert) werden die restlichen 2 Byte in z geschrieben.
Fazit: Finger weg von sowas, und nicht %d verwenden wenn man short will.