LINGUAGENS DE PROGRAMAÇÃO Caderno de Exercícios - 2002 Engenharia Informática Engenharia Electrotécnica Informática de Gestão Paulo Gouveia Nuno Dinis M. João Barros Halestino Pimentel Escola Superior de Tecnologia e de Gestão – IPB Linguagens de Programação caderno de exercícios - 2002 Exercício 1 a) Servindo-se do editor de texto “pico”, digite o código que se segue e crie com ele um ficheiro, designado por “exerc1.c”, com o código fonte de um pequeno programa em C. #include <stdio.h> main(){ printf(“Olá Mundo \n”); } b) Obtenha o respectivo programa executável, fazendo uso do compilador “gcc”. c) Altere o programa de forma a visualizar no écran o seguinte texto: Olá Mundo Este é o meu primeiro programa E funciona!!! d) Volte, por fim, a modificar o programa de forma a obter o mesmo resultado da alínea anterior, mas utilizando apenas uma única função printf( ). Exercício 2 e) Após ter editado o código que se segue, gere o respectivo programa executável. #include <stdio.h> main(){ int a; printf(“Inserir um número inteiro\n”); scanf("%d",&a); printf("O número é: %d \n",a); } f) Altere o programa de forma a que passe a ler dois números inteiros e a mostrar no écran os seus valores. g) Volte, finalmente, a alterar o programa de forma a visualizar no écran a soma dos dois números. Exercício 3 Escreva um programa capaz de ler para duas variáveis dois números inteiros, trocar o seus conteúdos e mostrar os seus valores alterados. Exercício 4 Um objecto, que se encontra inicialmente em repouso, é sujeito a uma força que lhe provoca uma aceleração a de valor constante. O espaço percorrido s por esse objecto num espaço de tempo t é dado pela seguinte equação: s= a *t 2 2 Pretende-se que construa um programa que pergunte os valores da aceleração e do tempo e apresente, como resultado, o espaço percorrido. Escola Superior de Tecnologia e de Gestão – IPB 2 Linguagens de Programação caderno de exercícios - 2002 Exercício 5 Escreva um programa que solicite ao utilizador um determinado tempo em horas, minutos e segundos, e que imprima o tempo correspondente em segundos. Exercício 6 Escreva um programa que leia três valores inteiros e que indique para cada um deles qual o desvio em relação à média. Exercício 7 Execute o seguinte programa e comente os resultados. #include <stdio.h> main( ){ int n; float x; char ch; x = 100.554; n = x; ch = ‘d’; printf(“%f é o valor de x.\n”, x); printf(“%d é o valor de n.\n”, n); printf(“%c é o valor (char) de n.\n”, n); printf(“%c é o valor de ch.\n”, ch); printf(“%d é o valor (int) de ch.\n”, ch); } Exercício 8 a) Desenvolva um programa que lhe permita Calcular qual o capital acumulado de um deposito bancário a prazo ao fim do 1º ano, sabendo que a taxa de juro anual é de 10% e que sobre os juros incide um imposto de capital de 20%. b) Altere o programa anterior de forma a calcular o capital acumulado ao fim de n anos. Exercício 9 Implemente um programa que permita ler um valor inteiro e indique se este é ou não zero. a) Acrescente ao programa a possibilidade de indicar se o número introduzido é positivo, negativo ou zero. b) Reformule agora o programa de forma a permitir ler dois números inteiros e indicar qual o maior. c) Por fim modifique o programa de forma a ler três valores inteiros e os apresente por ordem crescente. Exercício 10 Desenvolva um programa que diga se um dado caracter lido é do tipo algarismo, letra minúscula, letra maiúscula ou de um tipo não alfanumérico. Escola Superior de Tecnologia e de Gestão – IPB 3 caderno de exercícios - 2002 Linguagens de Programação Exercício 11 Implemente um programa que receba dois valores do tipo inteiro, e que apresente o resultado das seguintes operações aritméticas aplicadas sobre eles: Introduza dois valores 17 5 A divisão inteira é: 3 A divisão real é: 3.4 O resto da divisão é: 2 A raiz quadrada da soma dos dois valores é: O primeiro valor incrementado é: 18 O segundo valor decrementado é: 4 Exercício 12 a) Sabendo que x e y são variáveis do tipo inteiro, diga qual o resultado de cada uma das seguintes atribuições: y=4+3*2; x= 3*4/2-2; y= y++; x+=3; y-= 2; x /= 3; y %=3; x *= y++ + 3; y=____________ x=____________ y=____________ x=____________ y=____________ x=____________ x=____________ y=____________ y=____________ b) Após ter calculado o resultado de cada uma das seguintes operações, implemente um programa de forma a poder verificar os resultados obtidos. Exercício 13 Escreva um programa capaz de identificar se uma pessoa é anã, gigante ou de estatura normal. Utilize apenas condições IF. As condições são as seguintes: Altura<1.40m Anã 1.40m=<Altura<=2.00m Estatura normal Altura>2.00m Gigante Exercício 14 Implemente um programa que calcule as raízes de uma equação de 2º grau. O programa deve ser capaz de determinar se as raízes são reais, se não o forem deve apresentar uma mensagem de erro. Exercício 15 Utilizando uma estrutura switch, escreva um programa que leia um valor inteiro e que consoante esse valor, imprima a mensagem respectiva. 1-BENFICA 2-S.C.BRAGA 3-G.D.BEIRA MAR 4-V.S.GUIMARÃES Escola Superior de Tecnologia e de Gestão – IPB 4 caderno de exercícios - 2002 Linguagens de Programação 5-C.F.BELENENSES 6-ALVERCA Se o número inserido não estiver compreendido por estes valores deverá aparecer a mensagem “Clube sem motivos de interesse”. Exercício 16 Rescreva o programa do exercício anterior utilizando uma estrutura IF ELSE. Exercício 17 Implemente um programa que receba o peso de uma pessoa e o seu sexo, e indique o seu estado actual. Peso ..50 51..60 61..80 81..90 91.. Masculino Estado actual Muito Magro Magro Equilibrado Gordo Muito Gordo Peso ..40 41..50 51..65 66..80 81.. Feminino Estado actual Muito Magra Magra Equilibrada Gorda Muito Gorda Exercício 18 Crie um programa que simule uma máquina de calcular que efectue as operações aritméticas mais básicas (+, -, /, x). A-Adição S-Subtracção D-Divisão M-Multiplicação Q-Sair Escolha opção: 2 Introduza dois números: 10 4 O resultado é igual a: 6 O que se encontra descrito acima deverá repetir-se até que o utilizador escolha a opção Q. Exercício 19 Implemente um programa que permita ler 10 números inteiros e que no final da leitura apresente a soma de todos eles e a sua média. Utilize para isso uma estrutura de repetição while. Exercício 20 Execute um programa que leia um inteiro e se este for menor do que 5 calcule o seu factorial, caso contrário não deverá efectuar qualquer operação. Exercício 21 Utilizando uma estrutura for. Escola Superior de Tecnologia e de Gestão – IPB 5 Linguagens de Programação caderno de exercícios - 2002 a) Implemente um programa que calcule o factorial de 10 e o somatório dos 10 primeiros inteiros positivos. b) Utilizando o programa efectuado na alínea anterior altere-o para que passe a calcular o factorial de n e o somatório dos n primeiros inteiros positivos, sendo o valor do n dado pelo utilizador. Exercício 22 Construa um conversor electrónico que permita ler um valor em euros ou em escudos e o converta para a outra moeda. Este programa deve permitir fazer quantas conversões o utilizador quiser, devendo apenas terminar quando for inserido o valor zero no campo das moedas. Exercício 23 Implemente um programa que leia uma série de números. Este deve terminar quando for introduzido o valor zero, ou então quando o número de valores introduzidos for igual a dez. No final deverão ser apresentados o maior e o menor valores introduzidos. Exercício 24 Reformule o programa criado no exercício 21 a) Defina funções para cálculo do factorial e do somatório. b) Implemente as mesmas funções, sem fazer uso de qualquer estrutura de iteração. Exercício 25 a) Implemente uma função que aceite como parâmetro uma letra do alfabeto [a-z, AZ] e faça a conversão de minúscula para maiúscula e vice-versa. b) Construa agora um programa que faça a referida conversão tantas vezes quantas o utilizador desejar. Exercício 26 Tendo em conta a seguinte função matemática |1 se x=1 f(x)= | | x+f(x-1) se x>1 a) defina a respectiva função em C utilizando um ciclo for; b) construa agora um programa que mediante o valor de x, inserido pelo utilizador, calcule f(x); c) implemente a mesma função na sua forma recursiva. Exercício 27 a) Implemente em linguagem C a seguinte função matemática | x se y=1 g(x,y)= | x+g(x,y-1) se y>1 b) Construa um pequeno programa que faça uso dessa função. Escola Superior de Tecnologia e de Gestão – IPB 6 caderno de exercícios - 2002 Linguagens de Programação Exercício 28 a) Pretende-se que implemente num único ficheiro o conjunto de funções que se segue, para a gestão de um acumulador de valores inteiros, tendo o cuidado de manter o valor acumulado inacessível a funções que não pertençam a esse ficheiro. Adiciona – Aceita como parâmetro, um valor a somar ao valor acumulado. Subtrai – Aceita como parâmetro, um valor a subtrair ao val. acumulado. Escreve – Aceita como parâmetro, um valor a atribuir ao val. acumulado. Limpa – Coloca o valor acumulado a zero. Le – Devolve o valor acumulado. b) Defina uma função main num outro ficheiro, incluindo-lhe o código necessário para que o programa utilize todas as funções de gestão do acumulador. Exercício 29 a) Considere que o espaço ocupado por um valor do tipo inteiro pode ser visto como uma memória de 32 células de um bit, com endereços entre 0 e 31. Crie um ficheiro com funções de leitura e escrita para uma memória desse tipo. São as seguintes, as funções a implementar: SetBit - Permite colocar o bit da posição addr a 1; ClrBit - Permite colocar o bit da posição addr a 0; ReadBit- Permite ler o valor da posição addr; ClrAll - Permite colocar todas as posições da memória a zero. Para representar o espaço de memória em causa, declare uma variável sem sinal, que ocupe 4 Bytes de memória e que apenas seja acessível às funções anteriores. b) Defina uma função main num outro ficheiro, incluindo-lhe o código necessário para que o programa utilize todas as funções de gestão da memória anterior. Exercício 30 Considere pch um apontador para a variável ch (do tipo caracter), pa e pb apontadores respectivamente para as variáveis a e b (do tipo inteiro), e ppa um apontador para pa. Implemente um programa que execute as instruções necessárias de forma a ter o seguinte output: Introduza um caracter: C Introduza dois inteiros: 6 9 O endereço de ch = ??????? O endereço de pch = ??????? O conteúdo de pch = ??????? O valor apontado por pch = ? Os endereços de a e b = ??????? e ??????? Os endereços de pa e pb = ??????? e ??????? Os conteúdos de pa e pb = ??????? e ??????? Os valores apontados por pa e pb = ? e ? O endereço de ppa = ??????? O conteúdo de ppa = ??????? O valor apontado por ppa = ??????? O valor apontado pelo valor apontado por ppa = ? Escola Superior de Tecnologia e de Gestão – IPB 7 caderno de exercícios - 2002 Linguagens de Programação Exercício 31 Implemente um programa que leia dois valores para duas variáveis inteiras e recorra a uma função para trocar os seus conteúdos, mostrando de seguida os seus valores alterados. Exercício 32 Escreva um programa capaz de ler inteiros até ser introduzido o valor zero. No final o programa deverá apresentar qual o maior e menor número introduzidos (o valor zero não conta). Para tal recorra a uma função responsável por actualizar o maior e o menor valor armazenados, que será invocada após a leitura de cada valor. A mesma deverá ter três parâmetros: um deles representa um dos números lidos, e os outros dois representam o maior e menor. Exercício 33 vect 3 4 2 1000 1002 1004 -1 1006 0 7 1 1008 1010 1012 -5 1014 9 1016 Supondo o array anterior, de valores do tipo short int, e p um apontador para short int, responda às seguintes questões: Qual o valor de p=vect; Qual o valor de p+=3; Qual o valor de p=&vect[5]; *(p--)=10; Qual o valor de vect, vect+1 e de vect[6]? p, *p, &p[0] e de p[0]? p, *p, p[2], p+2 e de *(p+2)? p, p-vect, *p+1, *(p+1) e de p[1]? Exercício 34 Escreva um programa que leia 12 valores correspondentes às temperaturas médias mensais ao longo de um ano. Terminada a leitura, o programa deve apresentar todos os valores de temperatura registados. a) Altere a versão do programa anterior de forma a que, após a leitura das temperaturas, seja lido um valor de procura e indique se existe alguma temperatura registada com esse valor. Construa o algoritmo de modo a que a pesquisa termine assim que o valor seja encontrado, evitando assim percorrer totalmente o vector quando tal não seja necessário. b) Altere uma vez mais o programa de forma a que, depois da leitura, calcule a média da temperatura anual, a temperatura mais elevada, a mais baixa e a amplitude térmica (diferença entre a maior e a menor). Exercício 35 a) Escreva uma função que leia n valores inteiros para um array cujo endereço entre como parâmetro, sendo n inicialmente indicado pelo utilizador. A função deverá devolver o número de valores lidos. b) Implemente uma função que troque os conteúdos de dois vectores que receba como parâmetros. Escola Superior de Tecnologia e de Gestão – IPB 8 Linguagens de Programação caderno de exercícios - 2002 c) Implemente uma função que mostre o conteúdo de um vector de inteiros. d) Escreva um programa que faça uso das duas funções anteriores. Exercício 36 Escreva um programa que leia para um vector apenas letras maiúsculas ou minúsculas, devendo a leitura terminar quando for introduzido um caracter diferente dos atrás descritos. De seguida escreva uma função que separe as maiúsculas das minúsculas, colocando-as em arrays diferentes. E imprima os dois vectores resultantes. Exercício 37 a) Escreva uma função que leia valores inteiros positivos. A leitura deverá terminar com a introdução de um valor menor ou igual a zero. b) Imprima no ecrã a sequência. c) Escreva uma função que inverta a ordem dos elementos do vector. d) Imprima a nova sequência. e) Imprima apenas os valores superiores à média dos valores armazenados no array. Exercício 38 Escreva um programa que permita armazenar num array valores inteiros lidos do teclado que sejam superiores a zero e inferiores a 50. A leitura deverá terminar quando for lido um valor inferior a zero (este valor não deve ser armazenado). Acrescente-lhe então funções que façam o seguinte: a) devolva a posição do valor mínimo contido no vector; b) devolva a posição do valor máximo contido no vector; c) mostre a diferença entre o valor máximo e o valor mínimo contidos no vector; d) mostre todos os valores do array. Conclua o programa de forma a que, após a leitura, mostre a diferença entre o valor máximo e mínimo lidos, apresente todos os valores lidos e por fim mostre todos os valores situados no array entre as posições dos valores mínimo e máximo. Exercício 39 Pretendem-se guardar, numa pauta, as notas de todos os alunos do 1º ano de um determinado curso, a todas as disciplinas. Utilize um array bidimensional (número de disciplinas X número de alunos) para armazenar a informação pretendida. Construa um programa, devidamente modularizado, que disponibilize repetidamente ao utilizador um menu que inclua as seguintes opções: a) Inserir pauta; b) mostrar taxa de aprovação e reprovação a uma determinada disciplina; c) mostrar qual a disciplina onde se verifica uma maior taxa de reprovações; d) qual a média de um determinado aluno; e) qual o aluno com melhor média. Escola Superior de Tecnologia e de Gestão – IPB 9 Linguagens de Programação caderno de exercícios - 2002 Exercício 40 Escreva uma função que, dada uma string como argumento, a inverta. Exercício 41 Escreva uma função que, dada uma string, converta as respectivas letras para maiúsculas. Exercício 42 Escreva uma função, de protótipo char *mystrchr(char *, char), que devolva o endereço da primeira ocorrência de um dado caracter numa string, ou NULL caso o caracter não seja encontrado. Exercício 43 Como sabe, a função scanf está limitada à leitura de uma única palavra. Escreva uma outra função que não tenha a referida limitação. Essa função, de protótipo char *mygets(char *, int), deve ler uma string do teclado para o endereço entrado como parâmetro e devolver ainda esse endereço. A string deve ser lida, caracter a caracter, até ser pressionado <enter> ou até ter uma dimensão igual ao valor entrado como segundo parâmetro. Exercício 44 a) Defina em C um novo tipo denominado TAula que contenha as seguintes características: disciplina, número, sala, tipo (teórica, teórico-prática, prática), curso e sumário. b) Escreva agora a função LerSumario que permita ler todos os dados relativos a uma determinada aula. c) Escreva por fim a função MostrarSumario que permita mostrar todos os dados relativos a uma dada aula. Exercício 45 Considere a estrutura de dados: typedef enum {jan=1, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez} TMes; typedef struct { int dia; TMes mes; int ano; } TData; typedef struct { char nome[30]; TData nasc; /* data de nascimento */ } TAniv; Escreva agora as seguintes funções: a) Uma função que solicite ao utilizador a informação dos diversos campos de uma estrutura do tipo TAniv. A mesma deve devolver, como valor da retorno, essa estrutura. Escola Superior de Tecnologia e de Gestão – IPB 10 caderno de exercícios - 2002 Linguagens de Programação b) Uma função que, dado um apontador para uma estrutura do tipo TAniv, apresente a informação dessa estrutura da seguinte forma: João nasceu no dia 13 de Agosto de 1976. c) Uma função que apresente ao utilizador todos os dados recolhidos dos vários aniversariantes. d) Uma função que, depois de ler para uma string um nome (ou parte dele), mostre a data de nascimento de todos aqueles cujo nome inclua essa string. e) Escreva uma função que mostre a idade de uma determinada pessoa que se encontre registada. f) Uma função que remova o primeiro aniversariante registado. g) Escreva finalmente um programa que faça uso de todas as funções anteriores, facultando ao utilizador um menu com as seguintes opções: Registar aniversariante; Consultar data de nascimento; Mostrar idade; Remover primeiro; Listar todos os aniversariantes; Sair. Exercício 46 Implemente um pequeno programa que simule as operações de uma máquina calculadora rudimentar. Considere que as operações aritméticas possíveis são: x (multiplicação), / (divisão), - (subtracção) e + (adição). O programa deve executar apenas uma das 4 operações e ter como argumentos na linha de invocação: operando1 operador operando2 (Exemplo: a.out 20 + 3). Exercício 47 a) Implemente uma função que grave uma string, entrada como parâmetro, num ficheiro denominado myfile.txt. b) Implemente agora uma função para ler o ficheiro myfile.txt. A mesma deve ler a string para o endereço entrado como parâmetro. c) Implemente por fim um pequeno programa que faça uso das funções anteriores e de outras que considere necessárias, e disponha do seguinte menu: Ler do Ficheiro - Permite ler o conteúdo do ficheiro para uma string Gravar no Ficheiro - Permite gravar a string no ficheiro Mostrar no écran - Permite ver o conteúdo da string Ler do teclado - Permite modificar a string Exercício 48 Escreva um programa que conte o número de caracteres, de palavras e de parágrafos de um ficheiro de texto cujo nome entre como argumento na linha de comando (considere, para simplificar, que entre cada duas palavras existe sempre um único espaço). Exercício 49 Escreva um programa que faça a fusão de vários ficheiros de texto, dados os seus nomes como argumentos da linha de comando, e escreva o resultado no écran. Escola Superior de Tecnologia e de Gestão – IPB 11