Bom dia dbatista.
Segue parte de uma solução que montei aqui, não consegui terminar pois estou no trabalho, segue caso queira melhorá-la.
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 10 typedef struct _habitante { int salario; int idade; char sexo; }habitante; int menu(); void CadastraInf(habitante *hab); void RetornaInf(habitante *hab); int CalculaSalarios(habitante *hab); int * RetornaIdade(habitante *hab); int RetornaMulher(habitante *hab); void Quick(int *vetor, int inicio, int fim); unsigned int IND = -1; int main() { habitante hab[MAX]; while(true){ switch(menu()){ case 1: { CadastraInf(hab); break; } case 2: { RetornaInf(hab);; break; } default: exit(0); } } } int menu() { int opc; printf("******************** MENU ********************\n\n"); printf("(1) - Cadastro\n(2) - Consulta de resultados\n"); printf("Digite a opcao desejada: "); scanf("%d",&opc); return opc; } void CadastraInf(habitante *hab) { fflush(stdin); printf("*** Cadastro de informações ***\n\n"); printf("Digite o salario do habitante: "); scanf("%d",&(hab[IND+1].salario)); fflush(stdin); printf("Digite a idade do habitante: "); scanf("%d",&(hab[IND+1].idade)); fflush(stdin); printf("Digite o sexo do habitante (M/F): "); fgets(&(hab[IND+1].sexo),2,stdin); fflush(stdin); IND++; } void RetornaInf(habitante *hab) { int *vetor = RetornaIdade(hab); printf("Salario do grupo: %d\n",CalculaSalarios(hab)); printf("Menor Idade: %d\n",vetor[0]); printf("Maior Idade: %d\n",vetor[IND]); printf("Quantidade de Mulheres: %d\n",RetornaMulher(hab)); } int CalculaSalarios(habitante *hab) { int cont,soma=0; for(cont=0 ; cont <= IND; cont++){ soma += hab[cont].salario; } return soma; } int * RetornaIdade(habitante *hab) { int cont,vetor[IND]; for(cont=0 ; cont <= IND; cont++){ vetor[cont] = hab[cont].idade; } Quick(vetor,0,IND); return vetor; } int RetornaMulher(habitante *hab) { int cont, qtd=0; for(cont=0 ; cont <= IND; cont++){ if((hab[cont].sexo == 'F') && (hab[cont].salario <= 200)) qtd ++; } return qtd; } /* habitante MenorSal(habitante *hab) { int cont, vetor[IND]; habitante _hab; for(cont=0 ; cont <= IND; cont++){ vetor[cont] = hab[cont].salario; } Quick(vetor,0,IND); for(cont=0 ; cont <= IND; cont++){ if(vetor[0] = hab[cont].salario) { printf("ACHEI"); } } return _hab; }*/ void Quick(int *vetor, int inicio, int fim){ int pivo, aux, i, j, meio; i = inicio; j = fim; meio = (int) ((i + j) / 2); pivo = vetor[meio]; do{ while (vetor[i] < pivo) i = i + 1; while (vetor[j] > pivo) j = j - 1; if(i <= j){ aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i = i + 1; j = j - 1; } }while(j > i); if(inicio < j) Quick(vetor, inicio, j); if(i < fim) Quick(vetor, i, fim); }
Segui o princípio de ordenar e buscar as bordas, creio que computacionalmente seja melhor
Espero ter ajudado no exemplo.
[]'s