Q:

Por que é que a multiplicação da percentagem dá resultados negativos? 

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

    main()
{
    float altura,peso,soma_altura=0,cont1=0;
    int idade, cont=0,i;

    for(i = 0; i < 25; i++)
    {
        printf("Insira sua idade:\t");
        scanf("%i", &idade);
        printf("Insira sua altura:\t");
        scanf("%f", &altura);
        printf("Insira seu peso:\t");
        scanf("%f", &peso);

        if(idade >= 50){
            cont++;
        }

        if(peso < 40){
            cont1++;
        }   

        if(idade >= 10 && idade <21){
            soma_altura = soma_altura + altura;
        }   

    }

    printf("Quantidade de pessoas com mais de 50 anos = %i:\n", cont);
    printf("Media de altura das pessoas entre 10 e 20 anos = %.2f:\n", soma_altura / 25);
    printf("Porcentagem das pessoas com menos de 40kg = %i:\n", cont1 * 100 / 25);

    system("pause");
}

A:

O retorno de {cont1 * 100 / 25} é um valor float mas o seu printf espera um inteiro %i, segundo a documentação da linguagem quando o tipo passado é diferente do esperado o comportamento é indefinido.