Buscar

Monitoria Final C

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1º EE 2013.2 
1ª questão 
#include <stdio.h> 
#include <stdlib.h> 
 
void fatorial(int x) 
{ 
 int f = 1; 
 while ( x > 0 ) 
 { 
 f = f*x; 
 x--; 
 } 
 printf("O valor do fatorial eh : %d\n",f); 
} 
int divisao(int x, int k) 
{ 
 int resposta; 
 if ( x % k == 0 ) 
 { 
 resposta = 1; 
 } 
 else 
 { 
 resposta = 0 ; 
 } 
 return resposta; 
} 
void imprimedivisores(int x) 
{ 
 int i, retorno; 
 for ( i = 1 ; i <= x ; i++ ) 
 { 
 retorno = divisao(x,i); 
 if ( retorno == 1 ) 
 { 
 printf("%d,", i ); 
 } 
 } 
 printf("\n"); 
} 
int main() 
{ 
 int numero; 
 do 
 { 
 printf("Digite o numero:\n"); 
 scanf("%d",&numero); 
 if ( numero > 0 ) 
 { 
 fatorial(numero); 
 imprimedivisores(numero); 
 } 
 } while ( numero > 0 ); 
 return 0 ; 
} 
2ª questão 
#include <stdio.h> 
#include <stdlib.h> 
 
int main() 
{ 
 int Mat[10][10]; 
 int m, n, i, j, k = 0 , cont; 
 do 
 { 
 printf("Digite a quantidade de linhas:\n"); 
 scanf("%d",&m); 
 if ( m <= 0 || m > 10 ) 
 { 
 printf("Numero invalido!\n"); 
 } 
 }while( m <= 0 || m > 10 ); 
 do 
 { 
 printf("Digite a quantidade de colunas:\n"); 
 scanf("%d",&n); 
 if ( n <= 0 || n > 10 ) 
 { 
 printf("Numero invalido!\n"); 
 } 
 }while( n <= 0 || n > 10 ); 
 for ( i = 0 ; i < m ; i++ ) 
 { 
 for ( j = 0 ; j < n ; j++ ) 
 { 
 do 
 { 
 printf("Elemento[%d][%d]:\n",i,j); 
 scanf("%d",&Mat[i][j]); 
 if ( Mat[i][j] < 0 || Mat[i][j] > 20 ) 
 { 
 printf("Numero fora do intervalo!\n"); 
 } 
 }while ( Mat[i][j] < 0 || Mat[i][j] > 20 ); 
 } 
 } 
 while ( k <= 20 ) 
 { 
 cont = 0 ; 
 for ( i = 0 ; i < m ; i++ ) 
 { 
 for ( j = 0 ; j < n ; j++ ) 
 { 
 if ( Mat[i][j] == k ) 
 { 
 cont++; 
 } 
 } 
 } 
 if ( cont != 0 ) 
 { 
 printf("%d = %d\n",k,cont); 
 } 
 k++; 
 } 
 return 0 ; 
} 
3ª questão 
Jeito 1 seno = 
 
 
 
 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
int fatorial ( int n ) 
{ 
 int f = 1; 
 while ( n > 0 ) 
 { 
 f= f*n; 
 n--; 
 } 
 return f; 
} 
 
float seno( float x, int p) 
{ 
 float soma = 0, num, den; 
 int i ; 
 for ( i = 0 ; i <= p ; i++ ) 
 { 
 num = pow(-1,i)*pow(x,2*i+1); 
 den = fatorial(2*i+1); 
 soma = soma + num/den; 
 } 
 return soma; 
} 
 
int main() 
{ 
 float x, resultado; 
 int p; 
 printf("Digite o valor de x:\n"); 
 scanf("%f",&x); 
 printf("Digite o valor de p:\n"); 
 scanf("%d",&p); 
 resultado = seno(x,p); 
 printf("O valor da aproximacao do seno eh: %.2f",resultado); 
 return 0; 
} 
Jeito 2 seno = 
 
 
 
 
 
 
 
 
 
int fatorial ( int n ) 
{ 
 int f = 1; 
 while ( n > 0 ) 
 { 
 f= f*n; 
 n--; 
 } 
 return f; 
} 
 
float seno( float x, int p) 
{ 
 float soma = 0, num, den; 
 int i , j = 0 ; 
 for ( i = 1 ; i <= p ; i = i + 2 ) 
 { 
 num =pow(x,i); 
 den = fatorial(i); 
 if (j % 2 == 0 ) 
 { 
 soma = soma + num/den; 
 } 
 else 
 { 
 soma = soma - num/den; 
 } 
 j++; 
 } 
 return soma; 
} 
 
int main() 
{ 
 float x, resultado; 
 int p; 
 printf("Digite o valor de x:\n"); 
 scanf("%f",&x); 
 printf("Digite o valor de p:\n"); 
 scanf("%d",&p); 
 resultado = seno(x,p); 
 printf("O valor da aproximacao do seno eh: %.2f",resultado); 
 return 0; 
} 
 
2EE 
1ª questão 
typedef struct 
{ 
 char nome[31], autor[21]; 
 int codigo, ano, edicao; 
} Tlivro; 
 
void ImprimirLivro( Tlivro l ) 
{ 
 printf("Nome: %s\n Autor: %s\n Codigo: %d\n Ano %d\n Edicao 
%d\n",l.nome,l.autor,l.codigo,l.ano, l.edicao); 
} 
void BuscaPorAno( int ano, FILE *f) 
{ 
 Tlivro l; 
 f = fopen("Registros.txt","r"); 
 if ( f == NULL ) 
 { 
 printf("O arquivo nao existe!\n"); 
 } 
 else 
 { 
 while ( fscanf(f,"%d",&l.ano) != EOF ) 
 { 
 fscanf(f,"%s %s %d %d",l.nome,l.autor,&l.codigo,&l.edicao); 
 if ( l.ano == ano ) 
 { 
 ImprimirLivro(l); 
 } 
 } 
 } 
 fclose(f); 
 
} 
int main() 
{ 
 int ano; 
 FILE *f; 
 do 
 { 
 printf("Digite o ano a ser procurado :\n"); 
 scanf("%d",&ano); 
 if ( ano > 0 ); 
 { 
 BuscaPorAno(ano,f); 
 } 
 }while(ano <= 0); 
 return 0 ; 
} 
Questao 2 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
float CalcularProximo(float x, float p[]) 
{ 
 float xprox, funcao, derivada; 
 funcao = p[0] + p[1]*x + p[2]*pow(x,2) + p[3]*pow(x,3) + p[4]*pow(x,4); 
 derivada = p[1] + 2*p[2]*x + 3*p[3]*pow(x,2) + 4*p[4]*pow(x,3); 
 xprox = x - funcao/derivada; 
 return xprox; 
} 
float precisao( float x1, float x2, float e ) 
{ 
 float diferenca, retorno; 
 diferenca = x2 - x1 ; 
 if ( diferenca < 0 ) 
 { 
 diferenca = - diferenca; 
 } 
 if ( diferenca < e ) 
 { 
 retorno = 1; 
 } 
 else 
 { 
 retorno = 0; 
 } 
 return retorno ; 
} 
int main() 
{ 
 float x0, e, p[5], xn, prec; 
 int i, n =1 ; 
 for ( i = 0 ; i < 5 ; i++ ) 
 { 
 printf("A%d",i); 
 scanf("%f",&p[i]); 
 } 
 printf("Digite o valor de Epsilon:\n"); 
 scanf("%f",&e); 
 printf("Digite o valor inicial:\n"); 
 scanf("%f",&x0); 
 do 
 { 
 xn = CalcularProximo(x0,p); 
 prec = precisao(x0,xn,e); 
 if ( prec == 0 ) 
 { 
 x0 = xn ; 
 } 
 n++; 
 
 }while ( prec == 0 && n <= 100 ); 
 printf("O valor da raiz aproximada eh: %.5f\n",xn); 
 return 0; 
} 
 
Questão extra 1 
A Área II deseja criar arquivos textos com os dados dos alunos que cursam Computação 
Eletrônica, para isso ela utiliza a estrutura Aluno que contem um nome (uma string que 
armazena 30 caracteres) e média (float) de cada aluno do período. 
 Crie a função CriaListaAlunos( Aluno A, FILE *arq) que recebe os dados de um 
aluno e salva no arquivo “ListaAlunos.txt”. 
 Crie uma função CriaRestoArquivos (FILE *arq1, FILE *arq2, FILE *arq3, FILE 
*arq4) com base nos dados dos arquivo “ListaAlunos.txt” para criar os arquivos 
“ListaAprovados.txt”, “ListaFinal.txt”, “ListaReprovados.txt” com base no 
critério de médias da Área II. 
No programa principal você deverá declarar os arquivos, solicitar a quantidade de 
alunos que estão matriculados na disciplina. Para cada alunopreencher os dados na 
função principal e chamar a função CriaListaAlunos para criar a lista com os dados de 
todos os alunos, após preencher essa lista leia os seus dados para criar a listas de 
alunos aprovados, reprovados e que estão na final utilizando a função 
CriaRestoArquivos. 
Não utilize variáveis globais! 
#include <stdio.h> 
#include <stdlib.h> 
typedef struct 
{ 
 char nome[31]; 
 float media; 
}Aluno; 
void CriaListaAlunos( Aluno A, FILE *arq) 
{ 
 fprintf(arq,"%s %.2f\n",A.nome,A.media); 
} 
void CriaRestoArquivos (FILE *arq1, FILE *arq2, FILE *arq3, FILE *arq4) 
{ 
 Aluno A; 
 while ( fscanf(arq1,"%s",A.nome) != EOF ) 
 { 
 fscanf(arq1,"%f",&A.media); 
 if ( A.media >= 7 ) 
 { 
 fprintf(arq2,"%s %.2f\n", A.nome,A.media); 
 } 
 else if ( A.media < 7 && A.media >= 3 ) 
 { 
 fprintf(arq3,"%s %.2f\n", A.nome,A.media); 
 } 
 else 
 { 
 fprintf(arq4,"%s %.2f\n", A.nome,A.media); 
 } 
 } 
} 
int main() 
{ 
 Aluno A; 
 FILE *arq1,*arq2,*arq3,*arq4; 
 int qtde,i; 
 printf("Digite a quantidade de alunos:\n"); 
 scanf("%d",&qtde); 
 arq1 = fopen("ListaAlunos.txt","w"); 
 for ( i = 1 ; i <= qtde ; i++ ) 
 { 
 printf("Digite o nome do aluno:\n"); 
 scanf(" %s",A.nome); 
 printf("Digite a media de %s\n",A.nome); 
 scanf("%f",&A.media); 
 CriaListaAlunos(A,arq1); 
 } 
 fclose(arq1); 
 arq1 = fopen("ListaAlunos.txt","r"); 
 arq2 = fopen("ListaAprovados.txt","w"); 
 arq3 = fopen("ListaFinal.txt","w"); 
 arq4 = fopen("ListaReprovados.txt","w"); 
 CriaRestoArquivos(arq1,arq2,arq3,arq4); 
 fclose(arq1); 
 fclose(arq2); 
 fclose(arq3); 
 fclose(arq4); 
 return 0 ; 
} 
Questão extra 2 
O produtório(∏) de uma sequência corresponde ao produto de p termos de uma 
sequencia. O exemplo mais comum de produtório é o fatorial de um número. 
 
 
 
 
 
Crie uma função que recebe como parâmetro o valor de p fornecido na função principal e 
retorne p valor de: 
 
 
 
 
 
 
Exiba o resultado na tela. 
Lembre-se que 1 é um número inteiro e i assume valores inteiros, a divisão entre dois 
números inteiros em C caso gere um número decimal, o valor será apenas a parte inteira, 
o que pode afetar o resultado do produtório. 
½ = 0.5 em C fica apenas 0, pois 1 e 2 são inteiros. Já (1.0)/2 = 0.5, pois 1.0 é float! 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
 
float produtorio (int p) 
{ 
 int i ; 
 float prod = 1; 
 for ( i = 1 ; i <= p ; i++ ) 
 { 
 prod = prod*(1+(1.0)/i); 
 } 
 return prod; 
} 
int main() 
{ 
 int p; 
 float resultado; 
 printf("Digite o numero:\n"); 
 scanf("%d",&p); 
 resultado = produtorio(p); 
 printf("Resultado = %.3f\n",resultado); 
 return 0 ; 
} 
Crie uma função que recebe um vetor através de um ponteiro e um valor inteiro n (par e 
maior que 2) que corresponde ao tamanho do vetor troque as metades do vetor. Utilize 
alocação dinâmica. Preencha o vetor na função principal, mostre o vetor antes e depois. 
 #include <stdio.h> 
#include <stdlib.h> 
 
void troca( int *p , int n ) 
{ 
 int i, aux ; 
 for ( i = 0 ; i < n/2 ; i++ ) 
 { 
 aux = p[i]; 
 p[i] = p[i+n/2]; 
 p[i+n/2] = aux ; 
 } 
} 
int main() 
{ 
 int *vet, n,i ; 
 do 
 { 
 printf("Digite a quantidade do vetor:\n"); 
 scanf("%d",&n); 
 if ( n <= 2 || (n % 2 != 0) ) 
 { 
 printf("Valor Inválido!\n"); 
 } 
 
 }while( n <= 2 || (n % 2 != 0) ); 
 
 vet = (int*)malloc(n*sizeof(int)); 
 for ( i = 0 ; i < n ; i++ ) 
 { 
 printf("vet[%d]\n",i); 
 scanf("%d",&vet[i]); 
 } 
 for ( i = 0 ; i < n ; i++ ) 
 { 
 printf("%d ",vet[i]); 
 } 
 
 troca(vet,n); 
 printf("\n"); 
 for ( i = 0 ; i < n ; i++ ) 
 { 
 printf("%d ",vet[i]); 
 } 
 free(vet); 
 return 0 ; 
 
} 
 
Questões Sugeridas 
1) Uma professora germânica de Álgebra Linear da Área II tem em mãos duas listas 
com dados de cada aluno de suas turmas: a primeira contém o nome, CPF e média 
e a outra lista contem nome e quantidade de presença do semestre 2013.2. Após 
almoçar com uma professora de Computação Eletrônica ela deseja implementar as 
seguintes coisas em C: 
a) Criar uma função Listas(FILE *arq1, FILE *arq2, Aluno A, Presenca P) que 
preenche os arquivos “ListadeAlunos.txt” e “PresencadoSemestre.txt” através 
das seguintes estruturas : 
Aluno 
Nome[31] 
CPF(int) 
Média(Float) 
 
b) Criar uma função que receba os dois arquivos criados no item a para leitura e 
um terceiro arquivo que será chamado “ListaAprovados.txt”, 
Aprovados(FILE *arq1, FILE *arq2, FILE *arq3) levando em conta o 
seguinte critério: 
Se aluno tiver média >= 7.0 está aprovado; 
Caso o aluno tenha média >= 6.5 e menor que 7.0 e o aluno tenha 10 ou mais 
presenças em suas aulas a professora bondosamente colocará 7.0 como média 
aprovando o aluno. 
Utilize a biblioteca string.h. strcmp(st1,s2) == 0 verifica se duas strings são 
iguais.Os arquivos serão declarados na função principal e utilizado como 
parâmetros de funções, por isso não utilize variáveis globais. 
 
2) Construa um programa em C que peça ao usuário a ordem de uma matriz 
quadrada de números inteiros num intervalo [2,10], garanta que o usuário não irá 
digitar um numero fora do intervalo. Utilize alocação dinâmica e crie as seguintes 
funções 
a) Função PreencherMatriz(int **mat, int n); 
b) Função ImprimirMatriz(int **mat, int n) que imprime a matriz 
c) Função MuliplicarEscalar(int **mat, int k, int n) 
d) Função Transpor(int **mat , int n) 
Crie um menu iterativo que permita o usuário escolheras opções: 1- Preencher, 2- 
Imprimir, 3- Multiplicar por escalar, 4 – Transpor, 0 – Sair. Só deverá sair 
quando o usuário digitar 0, na opção 3 o usuário deve digitar o valor do escalar k. 
O valor de n o usuário informar pois representa a ordem da Matriz. 
Presenca 
Nome[31] 
Quantidade 
(int) 
3) Construa duas funções em C que recebem o valor de p como parametro e 
retornem: 
 
 
 
 
 
 
 
 
 
 
 
 
O valor de p deve ser informado na função principal, sendo maior que 0 e menor que 
10.Ao fim exibir os resultados na tela com 2 casas decimais

Outros materiais