Buscar

Prévia do material em texto

�Falculdade Fucapi
1° Lista de Exercícios – Professor Msc. Mário Angel
NOME: Alexandra Ventilari
Lista de Exercício de Estrutura de Dados 1
Responda as seguintes perguntas discurssivas.
Qual a sintaxe dos laços for, while e do...while?
R: for (início; fim<condição>; incremento)
{ 
Instruções...
}
while (condição)
{
Instruções...
}
do
{
Instruções...
}while(condição);
A condição dos laços for, while e do...while são colocadas?
R: Sim.
Os laços for, while e do...while são executados quantas vezes? 
R: Laço for e laço while: podem ser executados zero ou mais vezes. Laço do...while: pode ser executado uma ou mais vezes
As três componentes do laço for são obrigatórias ou facultativas?
R: Facultativas, caso não haja necessidade de utilizar um ou mais deles, basta deixar seu espaço em branco. 
Como se escrever os laços for, while e do...while para que se tornem laços infinitos?
R: Colocando na condição do laço uma condição que seja sempre verdadeira
Uma instrução colocada dentro dos laços for, while e do...while é sempre executada?
R: Somente no caso do do...while, a condição só é testada depois de executada a instrução correspondente pelo menos uma vez.
Nos laços for e while, o número de vezes que a condição é testada é sempre igual ao número de iterações dos laços? Se não, por quê?
R: Não, por que primeiro a condição é testada e depois, se a condição for verdadeira, ela passa a ser incrementada.
As condições dos laços for, while e do...while é sempre testada pelo menos uma vez? Se não, por quê?
R: Sim
Qual a funcionalidade de break e continue dentro de um laço?
R: Break: essa instrução, quando aplicada dentro de um laço, termina o correspondente laço, continuando o programa na instrução imediatamente posterior a esse laço. Continue: faz com que uma determinada iteração seja terminada, passando-se automaticamente à próxima iteração.
Quais laços incrementam a variável de controle?
R: Laço for.
No caso de laços aninhados, qual a prioridade de execução dos laços?
R: Comandos rotulados podem ser utilizados para saltar para um laço mais externo.
Qual a funcionalidade dos operadores ++ e – quando utilizados em variáveis?
R: ++: incremento de 1 na variável.
 --: decremento de 1 na variável.
Qual a diferença entre a = -2 e a - =2?
R:
Utiliza – se os operadores ++ e -- em constantes?
R: Não, esse tipo de operadores unários permite incrementar ou decrementar apenas variáveis.
Uma função em C pode possuir quantos parâmetros? Existem funções em C sem parâmetros.
R: A quantidade de parâmetros pode ser 0, 1, 2, etc., dependendo apenas das necessidades do programador.
Quais os tipos que uma função em C pode utilizar?
R: main(), printf(), scanf(), fgets(), puts(), strcmp(), strcpy().
Qual a diferença entre uma função e um procedimento?
R: Uma função tem sempre um tipo e um valor de retorno associados, enquanto que um procedimento não desenvolve valor algum.
Qual a funcionalidade da instrução return em uma função?
R: Termina a execução da função (procedimento), e o controle do programa é devolvido ao local onde a função (procedimento) foi invocada.
Qual a sintaxe de uma função e de um procedimento?
R: FUNÇÃO: tipo nome_função(tipo1 param1, tipo2 param2...tipon paramn)
		{
		 corpo da função
}
PROCEDIMENTO: Void NOME_PROCEDIMENTO (	){ 
	 }
O nome de uma função e seus parâmetros são opcionais? Se não, por quê?
R: Cada função tem que ter um nome único, que não pode ser igual ao nome de outra função ou de alguma variável. O nome dafunção deverá indicar aquilo que ela faz.
Qual a diferença entre uma variável local e uma variável globlal?
R: Variável local – é aquela na qual apenas a função onde ela está pode usá-la.
Variável global – pode ser utilizada por qualquer função. E qualquer função pode alterar o valor, utilizá-la em um processo ou até mesmo atribuir o valor que quiser.
Uma variável local de uma função pode ter o mesmo nome que um parâmetro? Se não, por quê?
R: Não. 
Qual a sintaxe utilizada para declarar um vetor?
R: tipo nome_variável[n° de elementos]
Um vetor possui quantas dimensões?
R: Um vetor pode ter mais do que uma dimensão, devendo o número de elementos de cada dimensão ser colocado entre colchetes na declaração do mesmo.
Qual a sintaxe utilizada para declarar uma matriz?
R: tipo vetor[dim1] [dim2] [...] [dimn]
Uma matriz é um vetor de duas dimensões? Se não, por quê?
R: Sim.
Um índice de um vetor começa de ... e vai até ... ?
R: zero (0) até n-1.
Como se inicializar um vetor no momento que ele é declarado?
R: Os valores do vetor devem estar entre chaves e após o sinal de igual
Como se inicializar uma matriz no momento que ele é declarado?
R: Utilizamos um par de estruturas de repetição for para primeiramente fazer a leitura dos valores da matriz. Fixamos a linha, ou seja, o índice i enquanto o índice da coluna j varia até preencher todos os elementos da linha. Depois que uma linha é preenchida, o índice da linha é incrementado e recomeça o preenchimento da coluna por coluna com o loop for interno controlado pelo índice já a saída de dados usa o mesmo princípio para percorrer a matriz e exibir os dados.
Exemplifique o indice de um vetor e uma matriz?
R: Vetor (array unidimensional) é uma variável que armazena várias variáveis do mesmo tipo. Matriz (array multidimensional) é um vetor de vetores.
�
Identifique, explique e corriga os erros de compilação dos seguintes programas.
Programa 1
#include <stdio.h>				
int main()					
{						
 while( i == 10) {				
 printf(“Hello World”);			
 }						
 return 0;					
}						
printf e while – Todas as instruções de C são escritas com letras minúsculas.						
Programa 2
#include <stdio.h>			
int main()				
{									
 for(i = 0; i< 10; i++ )			
{					
 printf(“hello world”);		
}					
}
#include<stdio.h> - Todo cabeçalho deve ser acompanhado da extensão(.h).	
int main() – Todo nome de função deve ser seguida de parênteses ().
printf (“hello world”); – Sempre que queremos tartar conjunto de caracteres temos que colocá-los entre aspas(“ ”), para que sejam considerados como um todo. Toda instrução deve ser terminada com um ponto-e-vírgula (;).
Programa 3
F( int x, int y) - depois do parametro nao se usa ponto e virgula e sim chave({)
{
 x = 4;
 y = 5;
}
Programa 4
void f (int x, int y) 
{
 return x+y;
}
Return x+y; - Todas as instruções de C são escritas com letras minúsculas.
Programa 5
void g();			
void f(int x, int y)
{
 x = 4;
 y = 5;
}
void g(); - cada função deve ter um nome único ( não pode ser igual a de outra função ou de uma variável)
x=4; - Toda instrução deve ser terminada com um ponto-e-vírgula (;).
y=5;
Programa 6
int f (int x, inty)
{
 x = 4;
 y = 2;
}
int f (int x, inty) – os parâmetros de uma função são separados por vírgulas, e é absolutamente necessário que cada um deles seja indicado seu tipo.
y = 2; - Toda instrução deve ser terminada com um ponto-e-vírgula (;). 
Programa 7
int falta (int x, int y)
{
 X = 4;
 Y = 6;
}
int falta (int x, int y) – A sinaxe de uma função pede o tipo e um nome.
Programa 8
#include <stdio.h>
int main()
{
 int v[100];
 for (i =0; i < 10; i++)
 v[i] = 10;
 v[i] = 101;
}
int v[100]; - Todo vetor precisa que seja declarado o número de elementos nele contido.
Programa 9
#include <stdio.h>
int main()
{
 int v[3] = {10,99,30,40,88};
 for (i =0; i < 10; i++)
 v[i] = 10;
 v[i] = 101;
}
#include <stdio.h> - é usado para incluir outras bibliotecas e permite ao programador acessar um grande número de bibliotecas no seu programa. 
Programa 10
#include <stdio.h>
#define MAX 30;
int main()
{
 intv[MAX];
 for (i =0; i < 10; i++)
 v[i] = 10;
 v[i] = 101;
}
#include<stdio.h> -Permite o acesso a todas as funções de entrada e saída normais.
Desenvolva os seguintes programas.
Faça um programa que leia um número inteiro e o imprima 20 vezes.
 #include<stdio.h> 
#include<conio.h> 
int main(){ 
	int num,c;
	printf("Informe um numero:");
	scanf("%d",&num);
	for(c=0;c<20;c++)
		printf("%d\n",num);
getch();
return 0; 
}
Faça um programa que leia um número real e o imprima 50 vezes.
#include<stdio.h> 
#include<conio.h> 
int main(){
	float num,c;
	printf("Informe um numero:");
	scanf("%f",&num);
	for(c=0;c<50;c++)
		printf("%.2f\n",num); 
	
getch();
return 0; 
}
Faça um programa que leia um caracter e o imprima 100 vezes.
#include<stdio.h> 
#include<conio.h> 
int main(){
	char A;
	int c;
	printf("Informe um caracter:");
	scanf("%c",&A);
	for(c=1;c<=100;c++)
		printf("%c ",A); 
	
getch();
return 0; 
}
Faca um programa que leia 4 notas de 20 alunos e imprima a média das notas lidas, assim como, se o aluno foi aprovado ou não. Considere media < 7,5 – aluno reprovado e media > 7,5 – aluno aprovado.
#include<stdio.h> 
#include<conio.h> 
int main(){
	float a1,soma=0,media;
	int i,c;
	for(c=1;c<=20;c++){
		for(i=1;i<=4;i++){
		printf("Informe a %da. nota do %do aluno: ",i,c);
		scanf("%f",&a1);
	
		soma=soma+a1;
			}
			media=soma/4;
			
			if (media<7.5 && media>=0){
				printf("Media= %.2f (ALUNO REPROVADO)\n\n",media);
			} else if(media<=10 && media>=7.5) {
				printf("Media= %.2f (ALUNO AROVADO)\n\n",media);
			} else {
	 printf("VERIFIQUE SE AS NOTAS DESSE ALUNO ESTAO CORRETAS\n\n");
				}soma=0;
			}
getch();
return 0; 
}
Faça um programa que coloque na tela meia árvore de natal com asteriscos. O número de ramos deverá ser introduzido pelo usuário.
 EX: 3 e 4 ramos:
 * *
 ** **
 *** ***
 ****
#include<stdio.h>
#include<conio.h>
 arvore(int ramo, char ast){
 	int c;
 	for(c=0;c<ramo;c++)
 	putchar(ast);
 	putchar('\n');
}
int main(){
	int c,num;
	printf("Informe o numero de ramos para a arvore: ");
	scanf("%d",&num);
	for(c=0;c<=num;c++)
		arvore(c,'*');
getch();
return(0);
}
Faça um programa que coloque na tela meia árvore com letras. O número de ramos deverá ser introduzido pelo usuário.
 EX: 3 e 4 ramos:
 A A
 BB BB
 CCC CCC
 DDDD
#include<stdio.h> 
#include<conio.h>
int main () { 
int c,i,R; 
	printf ("Insira o numero de ramos para a arvore de letras:"); 
	scanf ("%d",&R); 
		for(c=1;c<=R;c++){ 
			for(i=1;i<=c;i++) 
		printf("%c",'A'+c-1); 
		printf("\n"); 
} 
getch();
return 0; 
}
Faça um programa que imprima uma sequência de 40 números pares e uma sequência de 50 números impares.
#include<stdio.h>
#include<conio.h>
int main(){
	int num,c;
	printf("\n\n\t\t\t\t\t\tNUMEROS PARES\n\n");
	for(c=0;c<80;c+=2){
		printf(" %d ",c);
		}
printf("\n\n\t\t\t\t\t\tNUMEROS IMPARES\n\n");
	for(c=1;c<100;c+=2){
		printf(" %d ",c);
		}
getch();
return(0);
}
Faça um programa que imprima todos os números primos existentes entre os valores 1 e 300.
#include<stdio.h>
#include<conio.h>
int main(){
	int a=2,b=2,c=0,d=62,e=0;
	printf("\t\t\t\tNUMEROS PRIMOS ATE 300\n\n");
	while(e<d){
		while(b<a){
			if (a%b==0){
				c=1;
				break;
			}
			b=b+1;
		}b=2;
		if(c==0){
			printf(" %d ",a);
			e++;
		}c=0;
		a++;
	}
getch();
return(0);
}
Faça um programa que leia um número inteiro positivo N e imprima todos os números pares de 0 até N em ordem crescente.
#include<stdio.h>
#include<conio.h>
int main(){
	int num,c;
	
	printf("Informe um numero positivo: ");
	scanf("%d",&num);
	printf("\t\t\t\tNUMEROS PARES EM ORDEM CRESCENTE\n\n");
		for(c=0;c<=num;c++){
			if(c%2==0)
			printf(" %d ",c);
		}
getch();
return(0);
}
Faça um programa que leia um número inteiro positivo N e imprima todos os números impares de 0 até N em ordem decrescente.
 	#include<stdio.h>
#include<conio.h>
int main(){
	int num,c;
	
	printf("Informe um numero positivo: ");
	scanf("%d",&num);
	printf("\t\t\t\tNUMEROS IMPARES EM ORDEM DECRESCENTE\n\n");
		for(c=num;c>=0;c--){
			if(c%2!=0)
			printf(" %d ",c);
		}
getch();
return(0);
}
Faça um programa que leia dois numero inteiros e crie uma função que calcule a seguinte formula , onde X e o primeiro número lido e y o segundo número lido.
#include<stdio.h>
#include<conio.h>
int pot(int x, int z){
	int res;
	int i;
	for(i=1,res=1.0;i<=z;i++)
	res*=x;
	return res;
}
main(){
	int num,exp;
	printf("informe um numero:\n");
	scanf("%d",&num);
	printf("informe um expoente:\n");
	scanf("%d",&exp);
	printf("%d elevado a %d = %d",num,exp,pot(num,exp));
}
Faça uma programa que leia um númeiro inteiro e crie uma função que calcule o fatorial desse número.
 EX : 5! = 5*4*3*2*1 = 120
#include<stdio.h>
#include<conio.h>
int fatorial(int num){
	int c,fat=1;
	for (c=num;c!=0;c--){
		fat=fat*c;
	}
}
int main(){
	int n,c;
	printf("Informe um numero: ");
	scanf("%d",&n);
	printf("O fatorial de %d!: ",n);
	for(c=n;c!=0;c--){
		printf("%d*",c);
	}
	printf("= %d",fatorial(n));
	
getch();
return(0);
}
Faça uma programa que leia um númeiro inteiro e crie uma função que calcule o fatorial desse número apenas com números impares.
 EX : 5! = 5*3*1 = 15
#include<stdio.h>
#include<conio.h>
int fatorial(int num){
	int c,fat=1;
	for (c=num;c!=0;c--){
		if(c%2!=0)
		fat=fat*c;
	}
}
int main(){
	int n,c;
	printf("Informe um numero: ");
	scanf("%d",&n);
	printf("O fatorial de %d!: ",n);
	for(c=n;c!=0;c--){
		if(c%2!=0)
		printf("%d*",c);
	}
	printf("= %d",fatorial(n));
	
getch();
return(0);
}
Faca um programa que leia um número inteiro seja ele positivo ou negativo e crie a função ABS. Lembre-se que a função ABS é uma função que retorna apenas números positivos.
 EX: 
 ABS(-5) ---> 5
 ABS( 5) ---> 5
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(){
 int a,num;
 printf("Informe um numero: ");
 scanf("%d",&num);
 a = abs(num);
 printf("O modulo de %d = %d",num, a);
 
getch();
return 0;
}
Faça um programa que leia o valor de tempo em segundos e crie uma função que converta o tempo lido de segundos para horas. Imprima o valor que foi convertido.
#include<stdio.h>
#include<conio.h>
int conversao(int seg){
	int c;
	c=seg/3600;
	}
int main(){
	int n,c;
	printf("\t\t\t\tCONVERSAO DE SEGUNDOS PARA HORA\n\n\n");
	printf("Informe o tempo em segundos: ");
	scanf("%d",&n);
	printf("O valor convertido para horas: %d h",conversao(n));
getch();
return(0);
}
Faça um programa que tenha uma função que determina a quantidade de números primos abaixo de um número inteiro N lido.
#include<stdio.h>
#include<conio.h>
primos(int num){
	int c,i,a=0,b=0,n=num;
	for (i=n-1;i>0;i--){
		for(c=1;c<=i;c++){
			if(i%c==0){
				b++;
				if(b==2){
					a++;
					b=0;
				}
			}
		}
	}
	printf("Quantidade de numeros primos: ",a);
}
int main(){
	int num;
	printf("Informe o numero:");
	scanf("%d",&num);primos(num);
	getch();
	return 0;
}
Faça um programa que leia 1 valor inteiro positivo n e tenha uma função que calcule o somatário de 1 até n.
#include<stdio.h>
#include<conio.h>
somatorio(int num){
	int c,soma;
	for(c=0,soma=0;c<=num;c++)
	soma=soma+c;
	return soma;
}
int main(){
	int c,num;
	printf("Informe um numero positivo: ");
	scanf("%d",&num);
	for(c=0;c<=num;c++){
		
	}
	printf("soma de 1 ate %d = %d",num,somatorio(num));
	
getch();
return 0;
}
Faça um programa que leia 2 numeros inteiros e tenha 4 funções, uma função para cada operação artimética existente, ou seja, uma função para soma (+), outra para a subtração(-), outra para a multiplicação(*) e outra para a divisão(/). É preciso imprimir o resultado de todas as operações realizadas.
#include<stdio.h>
#include<conio.h>
int soma(int A, int B){
	int adic;
	adic=A+B;
	return adic;
}
 int sub(int A, int B){
 	int subt;
 	subt=A-B;
 	return subt;
 }
 int multiplicacao(int A, int B){
 	int mult;
 	mult=A*B;
 	return mult;
 }
 int divisao(int A, int B){
 	int div;
 	div=A/B;
 	return div;
 }
 int main(){
 	int A,B;
 	printf("Informe um numero: ");
 	scanf("%d",&A);
 	printf("Informe outro numero: ");
 	scanf("%d",&B);
 	printf("%d + %d = %d\n",A,B,soma(A,B));
 	printf("%d - %d = %d\n",A,B,sub(A,B));
 	printf("%d * %d = %d\n",A,B,multiplicacao(A,B));
 	printf("%d : %d = %d\n",A,B,divisao(A,B));
getch();
return(0);
}
Faça uma função que receba um número inteiro N como parâmetro, calcule e retorne o resultado da seguinte série:
 
#include<stdio.h>
#include<conio.h>
#include<math.h>
float serie(float A){
	float S;
	S=((pow(A,2)+1)/(A+3));
	return S;
}
int main(){
	float num;
	printf("Informe um numero:");
	scanf("%f",&num);
	printf("O resultado da serie: %.2f",serie(num));
	
getch();
return(0);
}
Faça um programa que leia um vetor de inteiro de tamanho 10 e imprima todos os valores nele contido.
#include<stdio.h>
#include<conio.h>
 int main(){
 	int num[10];
 	int c,soma;
 	for(c=0;c<10;c++){
 		scanf("%d",&num[c]);
	 }
	 printf("\n\tOS NUMEROS INFORMADOS\n\n");
	for(c=0;c<10;c++)
		printf(" %d ",num[c]);
getch();
return(0);
}
Faça um programa que leia um vetor de inteiro de tamanho 10 e imprima a soma de todos os valores contido nele.
#include<stdio.h>
#include<conio.h>
int main(){
 	int num[10];
 	int c,soma;
 	for(c=0;c<10;c++){
 		scanf("%d",&num[c]);
	 }
	for(c=0,soma=0;c<10;c++){
		soma=soma+num[c];
	}
	printf("A soma dos numeros informados: %d",soma);
getch();
return(0);
}
Faça um programa que tenha um vetor de inteiro de tamanho 10 e uma função que receba o vetor de inteiros e retorne quantos valores pares ele possui.
#include<stdio.h>
#include<conio.h>
imprima(int vet[10]){
	int i;
	for(i=0;i<10;i++){
		if(vet[i]%2==0)
		printf("%d",vet[i]);
	}
}
int main(){
	int vet[10];
	int i;
	for(i=0;i<10;i++){
		scanf("%d",&vet[i]);
	}
	
	printf("\n\nFuncao imprima--->\n\n");
	imprima(vet);
	
getch();
return 0;
}
Faça um programa que tenha um vetor de inteiro de tamanho 10 e uma função que receba o vetor de inteiros e substitua todos os valores dos indíces pares ele possui por o valor 0.
#include<stdio.h>
#include<conio.h>
imprima(int vet[10]){
	int i;
	for(i=0;i<10;i++){
		if(i%2==0)
		vet[i]=0;
		
		printf("%d",vet[i]);
	}
}
int main(){
	int vet[10];
	int i;
	for(i=0;i<10;i++){
		scanf("%d",&vet[i]);
	}
	
	printf("\n\nFuncao imprima--->\n\n");
	imprima(vet);
	
getch();
return 0;
}
Faça um programa que tenha dois vetores de inteiros de tamanho 10 e crie uma função que faça a soma dos dois vetores existente e imprima o seu resultado.
#include<stdio.h>
#include<conio.h>
void func(int*v){
	int i;
	for(i=0; i<10; i++){
		if(i%2==0)
			v[i]=0;
		for(i=0; i<10;i++)
			printf("%d\n", v[i]);
	}
}
int main(){
	int v[10] = {0,1,2,3,4,5,6,7,8,9};
	int i;
	
	func(v);
	
	getch();
	return 0;
}
Faça um programa que leia uma matriz de inteiro de tamanho 10x10 e imprima todos os valores contido na matriz.
Faça um programa que leia uma matriz 3x3 e crie uma função que retorne a soma dos elementos que estão na diagonal principal.
Faça um programa que tenha uma função que recebe uma matriz 4x4 e retorna a soma dos seus elementos.
Faça um programa que leia 2 matrizes 2x2 e faça a multiplicação de dessas matrizes.
Faça um programa que leia uma matriz 3x3 e imprima a soma dos elementos que estão da diagonal secundária da matriz.