Ajude nosso projeto a se manter online e criarmos outros, faça um PIX: 029 278 923 85

Exercícios sobre structs em Linguagem C

Usando os conhecimentos ensinados em nossa apostila de C, sobre:
Resolva as seguintes questões:

00. Defina uma estrutura que irá representar bandas de música.
Essa estrutura deve ter o nome da banda, que tipo de música ela toca, o número de integrantes e em que posição do ranking essa banda está dentre as suas 5 bandas favoritas.

01. Crie um looping para preencher as 5 estruturas de bandas criadas no exemplo passado.
Após criar e preencher, exiba todas as informações das bandas/estruturas.
Não se esqueça de usar o operador -> para preencher os membros das structs.

02. Crie uma função que peça ao usuário um número de 1 até 5.
Em seguida, seu programa deve exibir informações da banda cuja posição no seu ranking é a que foi solicitada pelo usuário.

03. Crie uma função em C que peça ao usuário um tipo de música e exiba as bandas com esse tipo de música no seu ranking. Que função da string.h você usaria para comparar as strings que representam o tipo de banda?

04. Crie uma função que peça o nome de uma banda ao usuário e diga se ela está entre suas bandas favoritas ou não.

05. Agora junte tudo e crie uma mega aplicação em que exibe um menu com as opções de preencher as estruturas e todas as opções das questões passadas.


18 comentários:

Anônimo disse...

o melhor site sobre programação

Unknown disse...

Vocês poderiam colocar um gabarito com os exercícios resolvidos, pra a gente tirar dúvida, corrigir erros e tal... mas o conteúdo do site é excelente!

Anônimo disse...

Bom dia a todos!
este é o exercício final de structs
quem quiser implementar mais alguma função faça e poste pra gente.como esperado ficou um pouco extenso.


#include
#include
#include

typedef struct banda
{
char nome_banda[20];
char estilo_musical[15];
int n_integrantes;
int position_ranking;
}banda;

void limpaBuffer(void)
{
char c;
while(c=getchar()!='\n' && c !=EOF);
}

void preferencia(banda *pt)
{
int i;
int cont;

for(cont=0;cont<3;cont++)
{
fflush(stdin);
do{
system("cls");
printf("\nNome da banda: ");
gets(pt[cont].nome_banda);
i=strlen(pt[cont].nome_banda);
if(i>19)
pt==(NULL);
}while(i>19);

printf("\nEstilo musical: ");
gets(pt[cont].estilo_musical);
fflush(stdin);

printf("\nNumero de integrantes: ");
scanf("%d",&pt[cont].n_integrantes);

printf("\nPosicao no ranking: ");
scanf("%d",&pt[cont].position_ranking);
}
}

void exibe_preferencia(banda *exib)
{
int cont;
for(cont=0;cont<3;cont++)
{
printf("\n\nBanda: %s",exib[cont].nome_banda);
printf("\nEstilo: %s",exib[cont].estilo_musical);
printf("\nIntegrantes: %d",exib[cont].n_integrantes);
printf("\nPosicao: %d",exib[cont].position_ranking);
}
}
void procura(banda *busca)
{
fflush(stdin);
char musica2[50];
int compara=0,cont;

printf("\nInforme seu tipo de musica: ");
gets(musica2);
fflush(stdin);

for(cont=0;cont<100;cont++)
{
if(strcmp(busca[cont].estilo_musical,musica2)==0){
compara=1;
printf("\nBanda: %s",busca[cont].nome_banda);
}
if(busca[cont].nome_banda=='\0')
break;
}
if(compara==1)
printf("\nencontrado");
else
printf("\nausente");
}


main()
{
banda p[3];//variavel do tipo banda.
char musica[15];

preferencia(p);
procura(p);
exibe_preferencia(p);

getch();
return 0;
}

Unknown disse...


1) Elabora o programa 'nº-TesteM6' com as seguintes condições:

a) Define uma estrutura que irá representar bandas de música. Essa estrutura deve ter o nome da
2 valores banda, o ano de constituição, a idade média dos músicos e tipo de música que tocam.

b) Cria uma função para preencher os dados relativos a cinco bandas.

3 valores

c) Cria uma função que mostre toda a informação relativa às cinco bandas.

3 valores

d) Cria uma função que peça ao utilizador um número de 1 até 5. Em seguida, o programa deve
3 valores exibir informações da banda dessa posição.

e) Crie uma função em que peça ao utilizador um tipo de música e de seguida mostre as bandas que
5 valores tocam esse tipo de música.

Apostila C Progressivo disse...

Olá Ricardo,

E aí, já fez seu exercício?
Alguma dúvida em específico?

Se quiser falar, ao invés de só copiar e colar sua questão, pode também, sem problemas ;)

Eternizando Pensamentos disse...

Boa tarde, eu tenho um exercicio que esta complicado para mim e tenho que telo resolvido ate amanha:
com:
typedef struct
{ char nome_autor [30];
int idade_autor,
char *nome_co_autor;
}DADOS_AUTOR

typedef struct
{ char titulo_livro [30];
char editora [15];
int ISBN,qtd_livros;
DADOS_AUTOR dados_autor;
}DADOS_LIVRO;
1. pede para fazer um tratamento de um array da estrutura acima, que para tal
a)fazer uma funcao que faxa a leitura do array de estruturas (sem limitacoes na quantidade de estruturas a ler), a funacao ou procedimento deve ir perguntando se pretende inserir mais elementos, ate que se responda um nao. ha que usar alocaxao dinamica de memoria, e nao deve prencher o campo nome_co_autor.
b)outra funxao que faxa escrita de todos os elementos lidos. as estruturas cujo o campo nome_autor contenham a palavra sil nao devem ser apresentadas
c) um procedimento q faxa a escrita no monitor de todas estruturas cujo o campo ISBN termine com a sequencia 776. considerando que ISBN eh um numero composto por 10 digitos.
d)uma funxao ou procedimento que percora todos elementos do vector e actualize o campo nome_co_autor com nome do autor da estrutura anterior. na primeira estrutura, devera ser inicializado a NULL
e) funxao que devolva um ponteiro para elemento do vector com o nome_autor composto por menos palavras

estou tendo grandes dificuldades de resolve-lo.
Almedino

Eternizando Pensamentos disse...

Boa tarde, eu tenho um exercicio que esta complicado para mim e tenho que telo resolvido ate amanha:
com:
typedef struct
{ char nome_autor [30];
int idade_autor,
char *nome_co_autor;
}DADOS_AUTOR

typedef struct
{ char titulo_livro [30];
char editora [15];
int ISBN,qtd_livros;
DADOS_AUTOR dados_autor;
}DADOS_LIVRO;
1. pede para fazer um tratamento de um array da estrutura acima, que para tal
a)fazer uma funcao que faxa a leitura do array de estruturas (sem limitacoes na quantidade de estruturas a ler), a funacao ou procedimento deve ir perguntando se pretende inserir mais elementos, ate que se responda um nao. ha que usar alocaxao dinamica de memoria, e nao deve prencher o campo nome_co_autor.
b)outra funxao que faxa escrita de todos os elementos lidos. as estruturas cujo o campo nome_autor contenham a palavra sil nao devem ser apresentadas
c) um procedimento q faxa a escrita no monitor de todas estruturas cujo o campo ISBN termine com a sequencia 776. considerando que ISBN eh um numero composto por 10 digitos.
d)uma funxao ou procedimento que percora todos elementos do vector e actualize o campo nome_co_autor com nome do autor da estrutura anterior. na primeira estrutura, devera ser inicializado a NULL
e) funxao que devolva um ponteiro para elemento do vector com o nome_autor composto por menos palavras

estou tendo grandes dificuldades de resolve-lo.
Almedino

Anônimo disse...

Alguém tem a solução completa?

Anônimo disse...

00-typedef struct{
char nome[100];
char tipoMusic[50];
int numInt;
int rankPos;

}Bandas;

01-
int main(){

Bandas preferidas[5];

Bandas * banda= &preferidas;

int i;

for(i=0;i<5;i++){

fflush(stdin);
printf("Banda n: %d\n", i+1);
printf("Introduza o nome:\n");
scanf("%s",banda->nome);
printf("Introduza o tipo:\n");
scanf("%s",banda->tipoMusic);
printf("Intro numInte:\n");
scanf("%d",&banda->numInt);
printf("Intro rank position:\n");
scanf("%d",&banda->rankPos);
}
for(i=0;i<5;i++){
printf("Banda n: %d\n", i+1);
printf("Nome:%s\n",banda->nome);
printf("tipo:%s\n",banda->tipoMusic);
printf("numIntegrantes:%d\n",banda->numInt);
printf("Rank position:%d\n",banda->rankPos);

}
02-
Num1a5(&preferidas);
}
void Num1a5(Bandas *rank){
int num;
printf("Introduza numeros 1 a 5:\n");
scanf("%d",&num);
if(num==rank->rankPos){

printf("Nome:%s\n",rank->nome);
printf("tipo:%s\n",rank->tipoMusic);
printf("numIntegrantes:%d\n",rank->numInt);
printf("Rank position:%d\n",rank->rankPos);
}else{
printf("Nao encontrei nenhum rank\n");
}
}
Resolvi até aqui... no 3 usaria o strcmp...

Unknown disse...

O meu programa nem inicia quando digito a opção de cadastrar bandas ele fecha.
#include "stdio.h"
#include "conio.h"
#include "string.h"
typedef struct cadastro {
char nome[50], tipo_mus[50];
int num_integr;
int ranking;
}cadastro;

void cadastrar(cadastro bandas[6]){
int i,n;
printf ("Quantas bandas deseja cadastar?\n");
scanf ("%d", &n);
while (n < 1 || n > 6){
printf ("Numero invalido, digite novamente:\n");
scanf ("%d", &n);
}
for (i=0; i 6){
printf ("Numero invalido digite novamente:\n");
scanf ("%d", &rank);
}
}
main(){
cadastro bandas[6];
int op;
do{
printf ("Digite a opcao desejada:\n");
puts ("1- Inserir banda");
puts ("2- Buscar banda");
scanf ("%d", op);
if (op == 1){
cadastrar(bandas);
}
else if (op == 2){
buscar(bandas);
}
}while (op < 6);

}

Unknown disse...

Tenho uma dúvida sobre essa questão :
A fct pretende informatizar o processo de submissão de requerimentos. Sabemos que cada requerimento possui um id(inteiro), assunto(pedido de notas, cancelamento de matricula, outros), o estudante que remeteu (nome do estudante, sexo, codigo), a data de submissão, e estado(pendente, resolvido).
A) fazer fazer programa que resolva o problema usando ponteiros e alocação de memorias.

Claudio Rodrigues Nunes disse...

Estou com dificuldade de usar o operador -> onde tenho que trabalhar em vetores.

Rayller disse...

Por favor, alguem ajude. Como que eu faço pra passar VETORES de STRUCT por referência? Já tentei aqui e sempre da erro. Tentei fazer da mesma forma que se passa vetores por referencias. Estou tentando usar isso no primeiro exercicio.

Variedades Históricas disse...

No Exercício 3 quando peço para o usuário pesquisar pelo ranking acaba passando o indice do vetor: o que será que pode ser?

segue o meu código;

#include
#include
typedef struct{
char nome[20];
char estilo[20];
int ranking;
}Banda;

void exibir(Banda show[5]){
for(int i = 0 ; i < 5 ; i++){
printf("\nNome da Banda: %s",show[i].nome);
printf("\nEstilo musical: %s",show[i].estilo);
printf("\nRanking: %dº lugar",show[i].ranking);
}
}
void pesquisa(Banda pesquisa[5]){
int rank;
printf("De acordo com o ranking que banda deseja cotratar?\nDigite o nº do Ranking:\n");
scanf("%d",&rank);
for(int i = 0 ; i < 5 ; i++){
if(i==rank){
printf("\nNome da Banda: %s",pesquisa[i-1].nome);
printf("\nEstilo musical: %s",pesquisa[i-1].estilo);
printf("\nRanking: %dº lugar",pesquisa[i-1].ranking);
}
}
}
int main(){
setlocale(LC_CTYPE,"");

Banda banda[5];
int escolha;
int quant;
do{

printf("\n\n1 - Cadastrar Bandas:\n");
printf("2 - Exibir Bandas:\n");
printf("3 - Pesquisar Bandas:\n");
printf("4 - Sair.\n");
scanf("%d",&escolha);
switch(escolha){
case(1):{
printf("Quantas bandas quer cadastrar?");
scanf("%d",&quant);

for(int i = 0 ; i < quant ; i++){
printf("\nDigite o nome da banda: ");
scanf(" %[A-Za-z 0-9]s",banda[i].nome);
printf("\nQual o estilo da banda: ");
scanf(" %[A-Za-z 0-9]s",banda[i].estilo);
printf("\nDigite a posição que esta banda ocupa no ranking das melhores bandas: ");
scanf("%d",&banda[i].ranking);
}
break;
}
case(2):{
exibir(banda);
break;
}
case(3):{
pesquisa(banda);
break;
}
}
}while(escolha!=4);
return 0;
}

Unknown disse...

#include
#include
#include
#include

typedef struct cadastro{

char nome[30];
char genero[30];
int posFav;
int numIntegrantes;
}usuario;

int procuraBanda(usuario *play, char bandaProcurada[]);
int procuraFav(usuario *play, int x);
int procurarGenero(usuario *play,char gener[]);
void imprime(usuario *play);
void recebe(usuario *play);

int main(int argc, char **argv)
{
struct cadastro cliente[3];
char banda[30];
char genero[30];
int num;
int menu_option = 0;
int menu_continues = 0;
bool iniciarBuscas = false;

printf(" Seja Bem vindo ao programa !!!\n");

while(menu_continues==0)
{
system("color b");
printf("\n\n");
printf("\tMenu principal\n");
printf("###########################################\n");
printf("#1. Entrar com as bandas.\t\t #\n");
printf("#2. Imprimir as bandas.\t\t\t #\n");
printf("#3. Procurar genero.\t\t\t #\n");
printf("#4. Procurar favorito.\t\t\t #\n");
printf("#5. Procurar banda.\t\t\t #\n");
printf("#6. Sair do programa.\t\t\t #\n");
printf("###########################################\n\n");
printf("Porfavor entre com uma opcao do menu: ");
scanf("%d",&menu_option);

switch (menu_option)
{
case 1:

//entrada de dados
system("color 3");
for (int i = 0; i < 3; i++)
{
printf("\n\n[%d]",i+1);
recebe(&cliente[i]);
}
iniciarBuscas = true;
break;

case 2:

//saida de dados

if(iniciarBuscas == true )
{
system("color 3");
for (int i = 0; i < 3; i++)
{
printf("\n\n[%d]",i+1);
imprime(&cliente[i]);
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;

case 3:

//buscar genero

if(iniciarBuscas == true )
{
system("color 3");
int naoEncontrado1 = 0;
int k = 0 ;
char c ;


printf("\nInforme um genero para eu buscar:");

getchar();
while((c=getchar())!='\n')
{
genero[k]=c;
k++;
}
genero[k]='\0';

for (int i = 0; i < 3; i++)
{
naoEncontrado1 += procurarGenero(&cliente[i],genero);
if(naoEncontrado1 == 2){
printf("\nGenero nao encontrado!");
}
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;

case 4:

//buscarFavorito

Unknown disse...


if(iniciarBuscas == true )
{
system("color 3");
int naoEncontrado2 = 0 ;
printf("\nInforme o numero do favorito para eu buscar:");
scanf("%d",&num);

for (int i = 0; i < 3; i++)
{
naoEncontrado2 = procuraFav(&cliente[i],num);
}
if(naoEncontrado2 == 2)
{
printf("\nFavorito nao encontrado!");
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;

case 5:

//buscar banda

if(iniciarBuscas == true )
{
system("color 3");
printf("\nInforme uma banda para eu buscar:");
int k1=0;
char c1;

getchar();
while((c1=getchar())!='\n')
{
banda[k1]=c1;
k1++;
}
banda[k1]='\0';

puts(banda);

int naoEncontrado = 0 ;
for (int i = 0; i < 3; i++)
{
naoEncontrado += procuraBanda(&cliente[i],banda);
if(naoEncontrado == 2){
printf("\nBanda nao encontrada!");
break;
}
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}

break;

case 6:

printf("saindo...");
menu_continues = 1;
break;

default:

printf("Escolha incorreta\n");
break;

}
}

return 0;
}

void recebe(usuario *play)
{
char c;
int k3=0;
int k4=0;

printf("\n\ninforme o nome da banda:");
getchar();

while((c=getchar())!='\n')
{
play->nome[k3]=c;
k3++;
}
play->nome[k3]='\0';

printf("\nInforme o genero da banda:");
while((c=getchar())!='\n')
{
play->genero[k4]=c;
k4++;
}
play->genero[k4]='\0';


printf("\nInforme a posicao de favoritos:");
scanf("%d",&play->posFav);
printf("\nInforme a quantidade de integrantes:");
scanf("%d",&play->numIntegrantes);
}

void imprime(usuario *play)
{
printf("\n");
printf("Nome da banda: %s",play->nome);
printf("\nGenero da banda: %s",play->genero);
printf("\nPosicao de favoritos da banda: %d",play->posFav);
printf("\nQuantidade de integrantes da banda: %d",play->numIntegrantes);
}

int procurarGenero(usuario *play,char gener[])
{
int aux;
char auxchar[30];
int cont2 = 1 ;

strcpy(auxchar,play->genero);
aux = strcmp(auxchar,gener);

if(aux == 0)
{
printf("\nBanda : %s , possui o mesmo genero!",play->nome);
}
else
{
return cont2;
}
}

int procuraFav(usuario *play, int x)
{
int cont1 = 1;

if(play->posFav == x ){
printf("\nBanda na posicao %d : %s",x,play->nome);
}else
{
return cont1;
}
}

int procuraBanda(usuario *play, char bandaProcurada[])
{
int aux2;
char auxchar2[30];
int cont = 1;

strcpy(auxchar2,play->nome);
aux2 = strcmp(auxchar2,bandaProcurada);

if(aux2==0){
printf("\nBanda encontrada!");
}else
{
return cont;
}
}

Unknown disse...

Pode me ajudar?

Wisdom chambule disse...

Olá galera! Preciso de ajuda na até amanha.

1. O senhor Fabito Mungone pretende recrutar um programador(a) para desenvolver um
sistema de processamento de salários dos seus empregados, onde cada empregado tem
um nome, número de dias, número de horas trabalhadas e categoria de vencimento. Use
uma estrutura para armazenar os dados dos empregados e crie as seguintes funções
para:
a) Registar os dados de 1500 empregados. O número de dias não pode ser superior a
31.
b) Calcular o salário de cada empregado e converta o mesmo para MZN. Sabendo que
cada hora trabalhada corresponde a 15.00 USD na categoria C3, 20 USD na
categoria C2 e 25 USD na categoria C1.
c) Visualizar os dados dos empregados com os respetivos salários.
d) Aumentar 50% no salário do empregado do mês. O empregado do mês é aquele
que teve o menor número de faltas.
e) Visualizar o empregado do mês com o seu salário.
f) Neste mês dos namorados o senhor Fabito pretende oferecer 10% do salário mensal
a todos empregados com menos de duas faltas.
g) Imprimir o somatório dos salários por categoria e informar a categoria com menor
soma.