Pessoal, após um exercíco de arquivos, lá vai um exercício de listas.
Faça uma lista ligada de funcionário
codigo(int)
nome (101 char)
sexo(1 caracter – m/f)
salario(float)
Defina Funções
a) inserir um funcionario na lista
b) exibir os dados de todos os funcionários
c) dado o codigo de um funcionário e uma porcentagem p, aumentar o salario deste funcionário em p%
d) contar quantos funcionarios do sexo masculino e feminino ha na lista
e) dado o codigo de um funcionario, remove-lo da lista
f) somar o salario de todos os funcionario
#include<conio.h> #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct no{ int codigo; char nome[101]; char sexo; float salario; struct no * prox; }no; void inserir (no ** lista, int cod, char nom[],char sex, float sal) { no * aux; aux=(no*) malloc(sizeof(no)); aux->codigo=cod; /* ->(seta) pq é enderço de mem.*/ strcpy(aux->nome, nom); aux->sexo =sex; aux->salario=sal; aux->prox=*lista; *lista=aux; } void listar(no*lista) { no * aux; aux=lista; while(aux!=NULL) { printf(" Cod: %d \n Nome: %s \n Sexo: %c \n Salario: %f \n\n", aux->codigo, aux->nome, aux->sexo, aux->salario); aux=aux->prox; } } int porcentagem(no**lista) { no* aux; aux=*lista; int p,c; if(aux==NULL) { printf("\nLista vazia"); return(0); }else{ printf("\nDigite o codigo: "); scanf("%d",&c); printf("\nDigite a porcentagem: "); scanf("%d",&p); while(aux!=NULL){ if(aux->codigo==c) { aux->salario= aux->salario+(aux->salario*p/100); free(aux); return (1); } } } } void conta(no**lista) { no*aux; aux=*lista; int fem=0, mas=0; if(aux==NULL) { printf("\nLista vazia"); }else{ while(aux!=NULL) { if((aux->sexo)=='f') { fem++; } if(aux->sexo=='m'){ mas++; } aux=aux->prox; } } printf("\n Ha %d homen(s) e %d mulhere(s)\n\n", mas, fem); } void removeporcod(no**lista) { no * ant=NULL; no * aux; aux=*lista; int cod; printf("Digite o codigo:"); scanf("%d",&cod); if(aux==NULL){ printf("Lista vazia"); }else{ while(aux!=NULL) { if(cod==aux->codigo) { if(ant==NULL) { *lista=aux->prox; free(aux); }else{ ant->prox=aux->prox; free(aux); } return; }else{ ant=aux; aux=aux->prox; } } } } void somasalario( no **lista ){ no * aux; aux=*lista; float soma_salario=0; if(aux==NULL){ printf("Lista vazia"); }else{ while(aux!=NULL){ soma_salario=soma_salario+aux->salario; aux=aux->prox; } } printf("A soma é: %f", soma_salario); } int main (){ no*lista; int codigo; char nome[101]; char sexo; float salario; int opcao, cod; lista=NULL; /*Null:define um end nulo, pois não cadastrei nada*/ do{ printf("\n Menu \n"); printf("\n 1 - Inserir dados"); printf("\n 2 - Listar dados"); printf("\n 3 - Aumentar salario"); printf("\n 4 - Contar por sexo"); printf("\n 5 - Remove por codigo"); printf("\n 6 - Somar salario"); printf("\n 7 - Sair"); printf("\n Digite a opcao desejada : "); scanf("\n %d",&opcao); switch(opcao){ case 1: printf("\n\n Digite o codigo: "); scanf("%d",&codigo); printf("\n Digite o nome: "); scanf("%s",&nome); printf("\n Digite o sexo (F/M): "); fflush(stdin); scanf("%c",&sexo); printf("\n Digite o salario: "); scanf("%f", &salario); inserir(&lista,codigo,nome,sexo,salario); break; case 2: listar(lista); break; case 3: porcentagem(&lista); break; case 4: conta(&lista); break; case 5: removeporcod(&lista); break; case 6: somasalario(&lista); break; } }while(opcao!=7); }
Bons estudos a todos!



