Buscar

Exercicios resolvidos liguagem C

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Exercicio13.c
//Faça um programa que gerencie um vetor de cadastros de até 5 clientes. Cada cadastro deve conter Nome
//(até 20 caracteres úteis), Sexo (conterá M ou F) e Estado. O Estado é um ponteiro char que deverá referenciar uma
//linha de uma matriz de Strings. Essa matriz de Strings deve armazenar 3 nomes de Estado, um por linha, devendo ser
//"Parana", "Santa Catarina" ou "Rio Grande do Sul". O programa deve ter um Menu de opções para Inserir, Remover,
//Listar e Sair, onde cada opção deve acionar uma função apropriada. A função Inserir deve inserir um cliente na
//posição desejada pelo usuário, e receberá o vetor de cadastros e a matriz de strings por parâmetro. A função Remover,
//deve indicar qual posição deve ser removida para remover logicamente um cadastro. A função Listar, mostra apenas os
//cadastros existentes.
#include <stdio.h>
#include <stdlib.h>
struct ex_cad{
 char nome[21];
 char sexo;
 char *estado;
 int existe;//caso existe for igual a 1 existe cliente, se for 0 não existe cliente
};
int gera_menu()//Funçao responsável por mostrar o menu na tela e retornar a opção selecionada
{
 int op=0;
 //opções: Inserir, Remover, Listar e Sair
 printf("\n\t\t1- Para inserir cliente;\n");
 printf("\t\t2- Para remover cliente;\n");
 printf("\t\t3- Para listar clientes;\n");
 printf("\t\t4- Para sair.\n\n");
 printf("\tInforme a opcao desejada: ");
 scanf("%i",&op);
 return op;
}
void remover(int n, struct ex_cad cad[n]){// função responsável por remover clientes
 int x=0;
 system("cls");
 listar(n,cad);
 printf("\n\t\tInforme o numero do usuario que voce deseja remover: ");
 scanf("%i",&x);
 cad[x-1].existe=0;
 system("cls");
 printf("\tRemovido com sucesso!!\n\n\n");
}
void inicia_clientes(int n,struct ex_cad cad[n]){//para que no começo nenhum cliente exista
 int i=0;
 for (i=0;i<n;i++){
 cad[i].existe=0;
 }
}
void listar(int n, struct ex_cad cad[n]){ //lista os clientes
 int i=0;
 system("cls");
 for(i=0;i<n;i++){
 if (cad[i].existe==1){
 printf("\t\tCliente %i\n", i+1);
 printf("\tNome: %s\n",cad[i].nome);
 if (cad[i].sexo=='F' || cad[i].sexo=='f')
 printf("\tSexo: Feminino\n");
 else
 printf("\tSexo: Masculino\n");
 printf("\tEstado: %s\n\n", cad[i].estado);
 }
 }
}
void cadartrar(int n, struct ex_cad cad[n],int m, int f, char est[m][f]){
 int i=0, j=0, v=0, e=0;
 system("cls");
 while (i<n && v==0){//encontrando uma posição vazia para add um cliente
 if (cad[i].existe==0){
 v=1;
 }else{
 i++;
 }
 }
 if (i==n){// caso não exista mais posiçoes para se armazenar cliente motra essa mensagem na tela
 system("cls");
 printf("\tINFELIZMENTE NAO EXISTE MAIS ESPACO PARA ADICIONAR CLIENTES!!\n\n");
 }else{// se ainda existe espaço para armazenar cliente então ele adiciona o cliente na posição vazia
 getchar();
 printf("\tInforme o nome do usuario: ");
 gets(&cad[i].nome);
 printf("\tInforme o sexo do usuario(F - para feminino; M - para masculino: ");
 scanf("%c",&cad[i].sexo);
 for(j=0;j<m;j++){
 printf("\n\t%i - %s;",j+1, est[j]);
 }
 printf("\n\n\tInforme o estado do usuario: ");
 scanf("%i",&e);
 cad[i].estado=&est[e-1];
 cad[i].existe=1;
 system("cls");
 printf("\tCadastro concluido com sucesso!!\n\n\n");
 }
}
int main()
{
 char estado[3][21]= {{"Parana"},{"Santa Catarina"},{"Rio Grande do Sul"}};
 struct ex_cad cadastro[5];
 int op=0;
 inicia_clientes(5,cadastro);
 printf("\t\t\t SEJA BEM VINDO!\n\n");
 op=gera_menu();
 while (op!=4){
 switch (op){
 case 1://Inserir cliente
 cadartrar(5,cadastro,3, 21,estado);
 break;
 case 2://Remover cliente
 remover(5,cadastro);
 break;
 case 3://listar clientes
 listar(5,cadastro);
 break;
 default:
 break;
 }
 op=gera_menu();
 }
 return 0;
}
Exercicio1.c
//Faça uma função que identifique a precisão do computador que está sendo usado através do Épsilon. O valor de Épsilon de máquina de um
//sistema pode ser aproximado (a um fator de 2) pelo seguinte algoritmo simplificado abaixo. Dica: usar double e tentar usar o printf
//com %g para mostrar número com exponencial. Para comparar o resultado da precisão da sua máquina, veja em http://en.wikipedia.org/wiki/Machine_epsilon
//eps=1
//Enquanto (eps+1) > 1
// eps=eps/2
//Fim
//eps=eps*2
#include <stdio.h>
#include <stdlib.h>
double verifica_eps()
{
 double eps=1;
 while((eps+1)>1){
 eps=eps/2;
 }
 return eps*2;
}
int main()
{
 printf("%g",verifica_eps());
 return 0;
}
Exercicio2.c
//Dizemos que um número natural é triangular se ele é produto de três números naturais consecutivos.
//Exemplo: 120 é triangular, pois 4.5.6 = 120. Dado um inteiro não-negativo n, faça uma função que receba n
//por parâmetro e verifique se é triangular retornando 1 em caso afirmativo ou 0 caso contrário.
#include <stdio.h>
#include <stdlib.h>
int verifica_triangular(int n)
{
 int v=0, i=1;
 while(i<n && v==0){
 if(i*(i+1)*(i+2)==n){
 v=1;
 }
 i++;
 }
 return v;
}
int main()
{
 int n=0;
 printf("Informe um numero natural: ");
 scanf("%i",&n);
 if (verifica_triangular(n)==1){
 printf("O numero e triangular!!\n\n");
 }
 else{
 printf("O numero nao e triangular!!\n\n");
 }
 return 0;
}
Exercicio3.c
//Criar uma função que receba por parâmetro as coordenadas 3D em double de 2 pontos A =(x_1,y_1,z_1) e B=(x_2,y_2,z_2)
//e calcule a distância entre os pontos. A função deve retornar qual é essa distância, sendo que o cálculo da distância entre
//os pontos A e B é igual ao módulo do vetor geométrico AB, cuja fórmula é dada por:
//Distancia_{A,B}=\sqrt {x^2 + y^2 +z^2} , onde x=x_2-x_1 , y=y_2-y_1, z=z_2-z_1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double distancia(double a1,double b1,double c1,double a2,double b2,double c2)
{
 return (sqrt(pow((a2-a1),2)+pow((b2-b1),2)+pow((c2-c1),2)));
}
int main()
{
 double a1=0, a2=0,a3=0,b1=0,b2=0,b3=0;
 printf("Informe a condenada A1:");
 scanf("%lf", &a1);
 printf("Informe a condenada A2:");
 scanf("%lf", &a2);
 printf("Informe a condenada A3:");
 scanf("%lf", &a3);
 printf("Informe a condenada B1:");
 scanf("%lf", &b1);
 printf("Informe a condenada B2:");
 scanf("%lf", &b2);
 printf("Informe a condenada B3:");
 scanf("%lf", &b3);
 printf("A distancia entre o ponto A e B e %.1lf\n\n", distancia(a1,a2,a3,b1,b2,b3));
 return 0;
}
Exercicio4.c
//Crie uma função A que receba uma matriz de qualquer tamanho (n,m) de números reais já preenchida e um vetor de reais de tamanho
//(n x m). Essa função A irá copiar todos os elementos da matriz para esse vetor, linha a linha. Em seguida, elabore uma função B
//que receberá por parâmetro esse vetor e mais dois parâmetros reais Maior e Menor por referência. A função B deverá identificar
//o maior e o menor valor no vetor e atribuir aos parâmetros Maior e Menor. Mostre no final, o vetor preenchido e o Maior e Menor
//valor.
#include <stdio.h>
#include <stdlib.h>
void copia_matriz_p_vetor(int m, int n, int mat[m][n], int v[m*n])
{
 int i=0,j=0, k=0;
 for(i=0; i<m; i++){
 for (j=0; j<n; j++){
 v[k++]=mat[i][j];
 }
 }
}
void encontra_maior_menor (int *maior, int *menor, int x,int v[x]){
 int i=0;
 *maior =v[0];
 *menor
=v[0];
 for(i=1; i<x; i++){
 if (*maior<v[i]){
 *maior=v[i];
 }
 if (*menor>v[i]){
 *menor=v[i];
 }
 }
}
int main()
{
 int m=0, n=0,i=0, j=0, maior=0, menor=0;
 printf("Informe numero de linhas da matriz: ");
 scanf("%i",&m);
 printf("Informe numero de colunas da matriz: ");
 scanf("%i",&n);
 int mat[m][n], vet[m*n];
 for(i=0; i<m; i++){
 for (j=0; j<n; j++){
 printf("Informe numero %ix%i da matriz: ", i+1, j+1);
 scanf("%i",&mat[i][j]);
 }
 }
 copia_matriz_p_vetor(m,n,mat,vet);
 encontra_maior_menor(&maior, &menor,m*n,vet);
 printf("O maior numero e %i e o menor numero e %i!\n\n", maior, menor);
 return 0;
}
Exercicio5.c
//Faça uma função que receba por parâmetro uma matriz de reais M (n x m) vazia e um Vetor de reais de tamanho (n) já preenchido.
//A função deve gerar em M uma matriz de Vandermonde seguindo a seguinte formulação:
//Matriz_{(i,j)}=(Vetor_{(i)})^j , onde i e j iniciam em 0. Abaixo um exemplo de uma matriz M (5x10) e o vetor de reais {1,2,3,4,5}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void matriz_Vandermonde(int n, int m,double mat[n][m], double v[n])
{
 int i=0,j=0;
 for (i=0;i<n;i++){
 for(j=0;j<m;j++){
 mat[i][j]=pow(v[i],j);
 }
 }
}
int main()
{
 int m=0, n=0,i=0, j=0;
 printf("Informe numero de linhas da matriz: ");//recebendo o numero de linhas da matriz
 scanf("%i",&m);
 printf("Informe numero de colunas da matriz: ");//recebendo o numero de colunas da matriz
 scanf("%i",&n);
 double mat[m][n], vet[m];
 for(i=0; i<m; i++){//recebendo os valores do vetor
 printf("Informe numero %i do vetor: ", i+1);
 scanf("%lf",&vet[i]);
 }
 matriz_Vandermonde(m,n,mat,vet);//chamando a função
 for(i=0; i<m; i++){//mostrando na tela a matriz
 for (j=0; j<n; j++){
 printf("\t %.0lf",mat[i][j]);
 }
 printf("\n");
 }
 return 0;
}
Exercicio6.c
//Faça uma função para receber uma matriz quadrada n de números reais por parâmetro e gerar nela uma matriz de Hilbert,
//que segue a seguinte formulação: H_{(i,j)}=\frac{1}{i+j-1} , onde i,j=1...n . Dica: pode ser necessário fazer casting
//(pesquisar...).
#include <stdio.h>
#include <stdlib.h>
void matriz_Hilbert(int n,double m[n][n])
{
 int i=0,j=0;
 for (i=0;i<n;i++){
 for(j=0;j<n;j++){
 m[i][j]=(double)1/((i+1)+(j+1)-1);
 }
 }
}
int main()
{
 int n=0,i=0, j=0;
 printf("Informe o tamanho da matriz: ");//recebendo o tamanho da matriz
 scanf("%i",&n);
 double mat[n][n];//criando a matriz
 matriz_Hilbert(n,mat);//chamando a função
 for(i=0; i<n; i++){//mostrando na tela a matriz
 for (j=0; j<n; j++){
 printf("\t %lf",mat[i][j]);
 }
 printf("\n");
 }
 return 0;
}
Exercicio7.c
//Analise a matriz abaixo e identifique uma lógica para sua criação. Elabore uma função que preencha uma matriz 8x8
//passada por parâmetro a partir da lógica identificada.
#include <stdio.h>
#include <stdlib.h>
void triangulo_de_pascal(int n,int m[n][n])
{
 int i=0,j=0;
 for (i=0;i<n;i++){
 for(j=0;j<n;j++){
 if (i==0){//caso for uma das posiçoes da primeira linha preenche com 0.
 m[i][j]=0;
 }
 if (j==0){//caso for uma das posiçoes da primeira coluna preenche com 1.
 m[i][j]=1;
 }
 if (i!=0 && j!=0){//caso contrario o elemento sera: elemento de l e c anterior + elemento de mesma c e l anterior.
 m[i][j]=m[i-1][j-1]+m[i-1][j];
 }
 }
 }
}
int main()
{
 int i=0, j=0, mat[8][8];
 triangulo_de_pascal(8,mat);//chamando a função
 for(i=0; i<8; i++){//mostrando na tela a matriz
 for (j=0; j<8; j++){
 printf("\t %i",mat[i][j]);
 }
 printf("\n");
 }
 return 0;
}
Exercicio8.c
//A partir do exemplo da matriz diamante abaixo (15x15) identifique uma lógica de criação. Defina uma função que receba
//uma matriz quadrada de qualquer tamanho por parâmetro e gere nela uma matriz diamante:
#include <stdio.h>
#include <stdlib.h>
void matriz_diamante(int x, char m[x][x])
{
 int i=0, j=0;
 for (i=0;i<x;i++){
 for(j=0;j<x;j++){
 if(i>(x-1)/2){
 m[i][j]=m[(x-1)-i][j];
 }else{
 if(j==((x-1)/2)+i || j==((x-1)/2)-i){
 m[i][j]='#';
 }
 else{
 m[i][j]=' ';
 }
 }
 }
 }
}
int main()
{
 int t=0, i=0,j=0;
 printf("Informe o tamanho da matriz: ");
 scanf("%i",&t);
 char m[t][t];
 matriz_diamante(t,m);
 for (i=0;i<t;i++){//imprimindo a matriz
 for(j=0;j<t;j++){
 printf("%c",m[i][j]);
 }
 printf("\n");
 }
 return 0;
}
Exercicio9.c
//Crie uma função recursiva que verifique se um número recebido por parâmetro é primo (retornando 1 em caso afirmativo) ou
//(0 em caso negativo).
#include <stdio.h>
#include <stdlib.h>
int verifica_primo(int n, int d)
{
 if(d>=1)
 {
 if (n==d) //se for a primeira função recursiva (n será divisivel por d)
 {
 if(verifica_primo(n,d-1)<=1)//testa se existe apenas um divisor além do proprio numero
 return 1;
 else
 return 0;
 }
 else// quando as funçoes estão no meio do sanduiche (retorna o numero de divisores
 {
 if (n%d==0)
 return (1+ verifica_primo(n,d-1));
 else
 return (0+ verifica_primo(n,d-1));
 }
 }
 else
 return 0;
}
int main()
{
 int r=0, n=0;
 printf("Informe um numero: ");
 scanf("%i",&n);
 r=verifica_primo(n,n);
 if(r==1)
 {
 printf("\nO numero e primo!!\n\n");
 }
 else
 {
 printf("\nO numero nao e primo!!\n\n");
 }
 return 0;
}
Exercicio10.c
//Faça uma função recursiva que retorne o n-ésimo termo da sequência de Fibonacci, sendo que n é recebido por parâmetro.
//Utilize essa função para desenvolver um programa que mostre os n termos dessa sequência na tela, a partir do valor de n
// recebido pelo teclado.
#include <stdio.h>
#include <stdlib.h>
int sequencia_fibonacci(int n)
{
 int i=0,j=0, m[n][n], s=0;
 if (n>=1){
 sequencia_fibonacci(n-1);
 for (i=0;i<n;i++){//contruindo o triangulo de pascal
 for(j=0;j<n;j++){
 if (i==0)
 m[i][j]=0;
 if (j==0)
 m[i][j]=1;
 if (i!=0 && j!=0)
 m[i][j]=m[i-1][j-1]+m[i-1][j];
 }
 }
 for (i=0;i<n;i++){//encontrando o n-esimo termo da sequencia apartir da diagonal secundária da matriz m
 for(j=0;j<n;j++){
 if (i+j==n-1)
 s=s+m[i][j];
 }
 }
 printf("%i ",s);
 return s;
 }else{
 return 1;
 }
}
int main()
{
 int n_esimo=0;
 n_esimo=sequencia_fibonacci(10);
 printf("\nO e-nesimo termo da sequencia e: %i\n\n", n_esimo);
 return 0;
}
Exercicio11.c
//Crie uma função recursiva que identifique o MDC utilizando o Algoritmo de Euclides:
//MDC_{(a,b)} = MDC_{(b,r)} , onde r é o resto da divisão de a por b.
//Repete-se esse procedimento sucessivamente até r == 0, indicando uma divisão exata entre b e r
#include <stdio.h>
#include <stdlib.h>
int algoritmo_euclides(int a, int b)
{
 if(a%b>0){
 return algoritmo_euclides(b,a%b);
}
 return b;
}
int main()
{
 int a=0, b=0;
 printf("Informe o primeiro numero: ");
 scanf("%i", &a);
 printf("Informe o segundo numero: ");
 scanf("%i", &b);
 printf("O MDC dos numeros informados e %i\n", algoritmo_euclides(a,b));
 return 0;
}
Exercicio12.c
//Elabore um programa para gerenciar um cadastro de 6 candidatos a um sorteio. Cada candidato possui Nome, Idade,
//Total_Sorteado. Os cadastros serão preenchidos a partir de uma função para isso, recebendo por parâmetro o vetor
//para armazenar o cadastro a ser preenchido. Elabore outra função que, receba o vetor de cadastros por parâmetro,
//e realizará 10 sorteios de candidatos a partir de um dado de 6 faces (lados: 1,2,3,4,5,6). A cada sorteio do dado,
//deve-se aumentar o valor do Total_sorteado do respectivo candidato. Após os 10 sorteios, deve-se mostrar qual o
//candidato sorteado mais vezes na tela. Para realizar o sorteio, pesquise o uso da função rand(). Abaixo estão algumas dicas:
//- Para inicializar o gerador de números aleatórios, usar srand(time(NULL));
//- Para gerar aleatoriamente um número de 1 a 6, usar variavel_dado = 1+rand()%6;
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct ex_cadastro{
 char nome[21];
 int idade;
 int total_sorteado;
};
void sorteio(int n, struct ex_cadastro cad[n])//função que sorteia os numeros
{
 int i=0, x=0;
 srand(time(NULL));//inicializa o sorteio
 for (i=0;i<10;i++){
 x=1+rand()%6;//função que sorteia de 1 até 6
 cad[x-1].total_sorteado=cad[x-1].total_sorteado+1;//n-1 pq o sorteio vai de 1 a 6 e o vetor de 0 a 5
 }
}
void preenche_cadastros(int n, struct ex_cadastro cad[n])//funçao responsável por fazer o preenchimento dos cadastros
{
 int i=0;
 for(i=0;i<n;i++){
 printf("Informe o nome do candidato %i: ",i+1);
 gets(&cad[i].nome);
 printf("Informe a idade do candidato %i: ",i+1);
 scanf("%i", &cad[i].idade);
 getchar();
 cad[i].total_sorteado=0;//todos recebe zero pq ninguem foi sorteado ainda
 }
}
int main()
{
 int i=0, s=0;
 struct ex_cadastro cadastro[6];
 preenche_cadastros(6,cadastro);
 sorteio(6,cadastro);
 for(i=0;i<6;i++){//verifica quem foi mais vezes sorteado
 if(cadastro[s].total_sorteado<cadastro[i].total_sorteado){
 s=i;
 }
 }
 printf("A pessoa sorteada foi:%s com %i pontos de 10\n\n", cadastro[s].nome,cadastro[s].total_sorteado);
 return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais