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.