Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

[Resolvido] Estrutura e Função

Recommended Posts

A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre salário, idade e número de filhos. Faça um programa que leia esses dados de 20 pessoas, calcule e mostre:

-A média de salário da população;

-A média do número de filhos;

-O maior salário;

-O percentual de mulheres com salário superior a R$ 1000,00

 

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

struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			}dados[20];
float media_salario(float media){
	  int i;
	  float soma = 0;
	  for(i=0;i<20;i++){
				  soma = soma + (dados[i].salario);
				  }
	  media = soma/20;
	  return (media);
}
float media_filhos(float media){
	  int i;
	  float soma = 0;
	  for(i=0;i<20;i++){
				  soma = soma + (dados[i].num);
				  }
	  media = soma/20;
	  return (media);  
} 
int main(){
	int i;
	for(i=0;i<20;i++){
			 printf("Digite o nome\n");
			 scanf("%s",&dados[i].nome);
			 printf("Digite o salario \n");
			 scanf("%d",&dados[i].salario);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 }
	printf("A media de salario e: \n %f \n",media_salario(media));
	printf("A media do numero de filhos e: \n %f \n",media_filhos(media));
	system("PAUSE");
	return(0);
}

Qual o problema nos dois ultimos printf?

Como posso resolver esses:

-O maior salário;

-O percentual de mulheres com salário superior a R$ 1000,00

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nas funções de média a variável media não é declarada.

 

-O maior salário;

Já tem tópicos o suficiente sobre encontrar maior e menor valor em vetor/matriz. Procure.

 

-O percentual de mulheres com salário superior a R$ 1000,00

Vai precisar de um novo campo na struct contendo o sexo da pessoa. Depois é só comparar o número de cadastros com sexo = 'f' && salario > 1000 e comparar com o número total de cadastros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tendo problemas de logica a unica resposta exate é a média do número de filhos

maior salario = 0 SEMPRE

media do salario = 0 SEMPRE

percentual de mulheres salario maior 1000 resposta negativa sempre

 

 

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

#define M 20
struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo[2];
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	 
float percentual(){
	  int i;
	  int count;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / M;
	  return (perc);
}					 
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",&dados[i].nome);
			 printf("Digite o salario \n");
			 scanf("%d",&dados[i].salario);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino \n");
			 scanf("%s",&dados[i].sexo);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu erro, mas veja os warnings:

$ gcc -Wall teste2.c -o teste2 && ./teste2

teste2.c: Na função ‘percentual’:

teste2.c:50: aviso: comparison between pointer and integer

teste2.c: Na função ‘main’:

teste2.c:62: aviso: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[30]’

teste2.c:64: aviso: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘float *’

teste2.c:70: aviso: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[2]’

teste2.c:75: aviso: unknown conversion type character 0xa in format

Para pegar uma string, não passe o endereço com &, pois uma strng é um vetor, que é um endereço para o seu primeiro índice.

Você usou %d para pegar o saláiro, que é float, nã int

Você usou %s para pegar um caractere (sexo), use %c

 

 

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

#define M 3
struct
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo[2];
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
}
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
}
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	
float percentual(){
	  int i;
	  int count;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / M;
	  return (perc);
}					
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",dados[i].nome);
			 __fpurge(stdin);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 __fpurge(stdin);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 __fpurge(stdin);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 __fpurge(stdin);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino \n");
			 scanf("%c", &dados[i].sexo);
			 __fpurge(stdin);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado. Agora esta quase tudo resolvido o único problema é o percentual do salario continua negativo

 

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

#define M 20
struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo[2];
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	 
float percentual(){
	  int i;
	  int count;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / M;
	  return (perc);
}					 
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",&dados[i].nome);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino \n");
			 scanf("%c",&dados[i].sexo);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

float percentual(){
	  int i;
	  int count = 0;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  printf("count=%d\n", count);
	  perc = (count * 100) / M;
	  return (perc);
}

Aqui não dá zero

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho aqui da zero, utilizo o dev

 

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

#define M 3
struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo[2];
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	 
float percentual(){
	  int i;
	  int count = 0;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / M;
	  return (perc);
}					 
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",&dados[i].nome);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino \n");
			 scanf("%c",&dados[i].sexo);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

#define M 3
struct
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo;
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
}
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
}
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	
float percentual(){
	  int i;
	  int count = 0;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / (float)M;
	  return (perc);
}					
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s", dados[i].nome);
			 __fpurge(stdin);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 __fpurge(stdin);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 __fpurge(stdin);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 __fpurge(stdin);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino \n");
			 scanf("%c",&dados[i].sexo);
			 __fpurge(stdin);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f %% \n",percentual());

	return(0);
}

Retire os __fpurge() e insira o system().

Aqui funcionou corretamente:

 

Digite o nome

wfef

Digite o salario

1250

Digite a idade

5

Digite o numero de filhos

54

Informe o sexo:

(m) masculino

(f) feminino

f

Digite o nome

bjhb

Digite o salario

10

Digite a idade

5

Digite o numero de filhos

54

Informe o sexo:

(m) masculino

(f) feminino

f

Digite o nome

bhi

Digite o salario

1250

Digite a idade

54

Digite o numero de filhos

521

Informe o sexo:

(m) masculino

(f) feminino

f

A media de salario e:

836.666687

A media do numero de filhos e:

209.666672

O maior salario e:

1250.000000

O percentual de mulheres com salario superior a R$1000 e:

66.666664 %

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois que informo nome, salario... Aparece a seguinte mensagem

' Á ' AW@' não é reconhecido como um comando interno ou externo, um programa operavel ou um arquivo em lote.

quando chaga na parte de informe o sexo o programa pula para o nome denovo

 

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

#define M 3
struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo;
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	 
float percentual(){
	  int i;
	  int count = 0;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / M;
	  return (perc);
}					 
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",&dados[i].nome);
			 system(stdin);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 system(stdin);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 system(stdin);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 system(stdin);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino \n");
			 scanf("%c",&dados[i].sexo);
			 system(stdin);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

não existe system(stdin)

 

Eu coloquei __fpurge() pois é o que uso para limpar o buffer do teclado em Linux. Em windows acho que fflush(stdin) funciona.

 

O problema de ir direto do sexo para o nome é o fato de haver um '\n' no buffer de teclado. limpe-o.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

#define M 3
struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo;
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	 
float percentual(){
	  int i;
	  int count = 0;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / M;
	  return (perc);
}					 
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",&dados[i].nome);
			 fflush(stdin);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 fflush(stdin);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 fflush(stdin);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 fflush(stdin);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino ");
			 scanf("%c",&dados[i].sexo);
			 fflush(stdin);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Porcentagem continua dando 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu posso criar biblioteca para essas funções e depois compilar li isso na internet nem sabia que existia alguem poderia me explicar o que é como funciona ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isto está errado:

scanf("%s", &dados[i].nome);

o certo é

scanf("%s", dados[i].nome);
sem &, pois nome é um vetor

 

 

Faça um casting no percentual:

perc = (count * 100) / (float)M;

caso contrário o resultado será sempre inteiro

 

 

Sobre criação de bibliotecas, basta pesquisar por modularização

 

http://www.google.com/search?ie=UTF-8&...ariza%C3%A7ao+c

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que esse codigo já ta de sacanagem. Continua dando 0

 

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

#define M 3
struct 
	   {
			char nome[30];
			float salario;
			int idade;
			int num;
			char sexo;
			}dados[M];
float media_salario(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].salario);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float media_filhos(){
	  int i;
	  float soma = 0;
	  for(i=0;i<M;i++){
				  soma = soma + (dados[i].num);
				  }
	  float media;
	  media = soma/M;
	  return (media);  
} 
float maior(){
	  float maior;
	  maior = dados[0].salario;
	  int i;
	  for(i=0;i<M;i++){
					   if(dados[i].salario > maior){
										   maior = dados[i].salario;
										   }
										   }
	  return(maior);
}	 
float percentual(){
	  int i;
	  int count = 0;
	  for(i=0;i<M;i++){
				 if(dados[i].sexo == 'f' && dados[i].salario > 1000){
								 count++;
								 }
								 }
	  float perc;
	  perc = (count * 100) / (float) M;
	  return (perc);
}					 
int main(){
	int i;
	for(i=0;i<M;i++){
			 printf("Digite o nome\n");
			 scanf("%s",dados[i].nome);
			 fflush(stdin);
			 printf("Digite o salario \n");
			 scanf("%f",&dados[i].salario);
			 fflush(stdin);
			 printf("Digite a idade\n");
			 scanf("%d",&dados[i].idade);
			 fflush(stdin);
			 printf("Digite o numero de filhos\n");
			 scanf("%d",&dados[i].num);
			 fflush(stdin);
			 printf("Informe o sexo: \n (m) masculino \n (f) feminino ");
			 scanf("%c",&dados[i].sexo);
			 fflush(stdin);
			 }
	printf("A media de salario e: \n %f \n",media_salario());
	printf("A media do numero de filhos e: \n %f \n",media_filhos());
	printf("O maior salario e: \n %f \n",maior());
	printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual());
	system("PAUSE");
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.