Baixe o app para aproveitar ainda mais
Prévia do material em texto
Kesede R Julio kesedejulio@gmail.com Apostila de Linguagem C Campinas – São Paulo - Brasil Índice 1 - Introdução.....................................................................................................................4 1.1 Recomendações ao Aluno...........................................................................................4 1.2 Ferramenta de programação: Linguagem C..............................................................4 1.3 Estrutura de um Programa.........................................................................................6 1.4 Inserção de Arquivos de Função...............................................................................7 1.5 Tipos e Variáveis......................................................................................................8 1.6 Operadores Básicos...................................................................................................9 1.7 Exercícios Propostos...............................................................................................10 2 - Comandos de Decisão..................................................................................................13 2.1 Comando if/else........................................................................................................13 2.2 Switch........................................................................................................................15 2.3 Exercícios..................................................................................................................16 3 - Comandos de Repetição..............................................................................................19 3.1 Comando while.........................................................................................................19 3.2 Comando do-while....................................................................................................21 3.3 Teste de mesa............................................................................................................22 3.4 Exercícios..................................................................................................................26 4 - Vetor.............................................................................................................................29 4.1 Comando For.............................................................................................................30 4.2 Exercícios..................................................................................................................31 5 - String............................................................................................................................36 5.1 Exercícios..................................................................................................................39 6 - Matriz...........................................................................................................................42 6.1 Exercícios..................................................................................................................43 7 - Estruturas Heterogêneas............................................................................................46 7.1 Exercícios.................................................................................................................48 8 - Funções.........................................................................................................................49 8.1 Passagem de Parâmetros por Valor e Retorno de Valor...........................................50 8.2 Passagem de Parâmetros por Referência................................................................52 8.3 Exercícios................................................................................................................53 9 - TAD – Tipo Abstrato de Dados..................................................................................55 Exercícios.......................................................................................................................56 10 - Arquivo.......................................................................................................................57 10.1 Armazenamento em disco.......................................................................................57 10.2 Exercícios................................................................................................................69 11 - Allegro.......................................................................................................................71 11.1 Exercícios ..............................................................................................................72 Linguagem de Programação C 2 Apêndices A – Algoritmos e Fluxogramas......................................................................75 Apêndices B – Resumo de comandos e funções..............................................................82 Apêndices C – Acesso a Portas de Comunicação...........................................................83 Bibliografia........................................................................................................................88 Linguagem de Programação C 3 1 - Introdução 1.1Recomendações ao Aluno O estudo de programação requer uma boa dose de concentração na teoria e dedicação na execução dos exercícios práticos. Por isso, é de fundamental importância a digitação de todos os exemplos e o desenvolvimento de todos os exercícios propostos. Suas dúvidas devem ser resolvidas assim que surgirem, não as adie, pois isto se tornará uma "bola de neve", fatal para a compreensão e motivação da continuidade do aprendizado. NÃO ESTUDE PARA A PROVA, estude sempre. O estudo deve ser feito periodicamente. Seja disciplinado em seus estudos para que você possa colher bons frutos. Leia a teoria, digite os exemplos, releia a teoria e encare os exercícios propostos. Não desanime nunca, persevere. 1.2 Ferramenta de programação: Linguagem C Para fazer nossos programas, usaremos a linguagem C. Para isso precisamos de um compilador (programa que interpretará nossas instruções) e de um IDE (Interface Development Environment, ou seja, um programa que permita escrever nossas instruções, corrigí-las e executá-las). Existe uma certa influência do compilador escolhido nas funções oferecidas pela linguagem. Por isso, esta apostila estará sendo direcionada para o C-Padrão ANSI (American National Standards Institute), pois suas funções são aceitas por todos os compiladores que seguem este padrão. O compilador escolhido pelo curso é o gcc, este compilador já está embutido no IDE que usaremos chamado Dev-c++ (ou Dev-cpp), o qual pode ser baixado gratuitamente através do site http://kent.dl.sourceforge.net/sourceforge/dev-cpp/devcpp-4.9.9.2_setup.exe Através da digitação dos exemplos deste capítulo, você poderá praticar os recursos do ambiente de programação que você utilizará durante o curso, além de aprender alguns conceitos básicos da própria linguagem, como: estrutura de um programa, inserção de bibliotecas de função, tipo de variáveis, entrada e saída de dados em tela, operadores aritméticos básicos. Para começar a digitar um exemplo, abra o Dev que você acabou de instalar, selecione “Arquivo/Novo/Arquivo Fonte. Digite o programa linha-a-linha. Salve-o com a extensão .c (Arquivo/Salvar Como...). Agora você precisa compilar (verificar erros de escrita) o programa. Clique em “Executar/Compilar”. Caso o programa apresente algum erro, ele Linguagem de Programação C4 http://kent.dl.sourceforge.net/sourceforge/dev-cpp/devcpp-4.9.9.2_setup.exe indicará a linha do erro através de um destaque colorido. Na aba “Compilador” (parte inferior do IDE) aparecerão a linha e a descrição do erro ocorrido. Tente corrigi-lo e compile novamente. O programa só poderá ser executado se todos os erros de compilação forem retirados do programa. Após a compilação sem erros, você poderá executar o programa. Clique em “Executar/Executar”. Aparecerá um console (janelinha preta) com a execução do programa em andamento. Após conferir que o programa está correto, ou seja, fez exatamente o que você pediu que fizesse, você poderá abrir uma nova aba (Arquivo/Novo/Arquivo fonte) para digitar o próximo exemplo. Segue abaixo 3 exemplos para serem digitados, compilados e executados. Nossos exemplos sempre seguirão este padrão: um enunciado dizendo o que deve ser feito, uma coluna com o número da linha (ou do bloco) do código, outra coluna para o código que deve ser digitado e outra com a descrição do que ele faz. Exercite digitando os exemplos abaixo. Digite o Exemplo 1.1:- Faça um programa que escreva seu nome na tela. 1 #include <stdio.h> Permite o uso das funções printf().Não precisam ser incluídos para arquivos .c. 2 #include <conio.h> Permite o uso da função getch(). Não precisam ser incluídos para arquivos .c 3 int main(){ Abre a função principal do programa 4 printf("Kesede R Julio"); Imprime a mensagem na tela 5 getch(); Pára a execução do programa 6 } Fecha a função principal Digite o Exemplo 1.2:- Faça um programa que mostre uma mensagem de Olá personalizada. Permita que o usuário digite seu nome. 1 #include <stdio.h> Permite o uso das funções printf() e scanf().Não precisam ser incluídos para arquivos .c. 2 #include <conio.h> Permite o uso da função conio(). Não precisam ser incluídos para arquivos .c 3 int main(){ Abre a função principal do programa char nome[30]; Reserva um espaço na memória para guardar até 29 caracteres. 4 scanf(“%s”,nome); Recebe o nome do usuário e guarda na variável nome 5 printf("Ola, %s“, nome); Imprime a mensagem na tela substituindo o formato (%s) pelo conteúdo da variável nome Linguagem de Programação C 5 6 getch(); Pára a execução do programa 7 } Fecha a função principal Digite o Exemplo 1.3:- Um empregado da empresa Alfa tem dois vencimentos: salário e gratificação. Faça um programa que receba os vencimentos do empregado, e mostre o salário que ele irá receber. 1 #include <stdio.h> Permite o uso das funções printf() e scanf().Não precisam ser incluídos para arquivos .c. 2 #include <conio.h> Permite o uso da função conio(). Não precisam ser incluídos para arquivos .c 3 int main(){ Abre a função principal do programa 4 float salario; Define espaço de memória chamado salario 5 float grat; Define espaço de memória chamado grat 6 float soma; Define espaço de memória chamado soma 7 printf(“Digite o salario: "); Imprime uma mensagem na tela 8 scanf(“%f”,&salario); Recebe o que o usuário digitou e guarda em salario 9 printf("\nDigite a gratificacao: "); Imprime uma mensagem na tela 10 scanf(“%f”,&grat); Recebe o que o usuário digitou e guarda em salario 11 soma = salario + grat; Soma o conteúdo de salário e grat e guarda em soma 12 printf("\n\nO resultado eh: %f", soma); Imprime a mensagem na tela substituindo o formato %f pelo conteúdo de soma 13 getch(); Pára a execução do programa 14 } Fecha a função principal 1.3 Estrutura de um Programa A estrutura de um programa C é, basicamente, realizada em funções. A princípio, não se escreve nenhum comando que não esteja dentro de uma função. No exemplo 1.1, a função começa na linha “int main(){” e termina em “}”. Por isso, a estrutura de programa apresentada é a própria estrutura da função main(). Linguagem de Programação C 6 <tipo de retorno> <nome da função> (<argumento>,...){ <comandos e funções> } Onde: Tipo de retorno: é o tipo da informação que uma função pode retornar. Em nosso exemplo o retorno é “int”. Voce poderá encontrar o tipo de retorno da main() como “void”. Nome da função: é o que identificará a função. Se houver apenas uma função (como no exemplo 1.1) no programa, esta deverá se chamar, obrigatoriamente, “main” (principal). Argumentos: são entradas de informações recebidas por outras funções. No exemplo 1.1, não há entrada de argumentos. Comandos e funções: é a própria lógica do programa. Comandos, chamada de funções pré-definidas, chamada de funções escritas pelo programador, colocadas em uma seqüência lógica para ser obedecida pelo compilador. 1.4 Inserção de Arquivos de Função São arquivos texto contendo os cabeçalhos das funções fornecidas pelo próprio compilador. Para usar qualquer função pré- definida, você deve declarar o nome do arquivo entre aspas, através da declaração “include” precedida pelo caractere “#”. No Apêndice A, listamos o nome de alguns desses arquivos e suas respectivas funções. Em nosso exemplo utilizamos apenas o arquivo “stdio.h”, que contem as funções de entrada e saída de dados: printf() e scanf(). Devido a importância destas funções replicamos aqui uma explicação de como usar estas funções. printf():- função que permite a saída de dados para o usuário. Sintaxe simplificada: printf(“<formatação da saída>”, <variavel>,...<variavel>); Onde: “formatação da saída” é tudo que queremos escrever na tela para o usuário. Quando quisermos mostrar conteúdo de variáveis no meio do texto, colocamos os formatos dos tipos (vide tabela abaixo), que serão substituídos pelas variáveis. “variável” é o nome da variável que queremos mostrar ao usuário. Seu conteúdo será substituído nos formatos de tipo colocados na formatação da saída. Exemplo: printf(“Resultado da soma: %d.”, soma); Caso a variável “soma” seja 10, a mensagem mostrada para Linguagem de Programação C 7 o usuário será: “Resultado da soma: 10.” (sem aspas). scanf():- função que permite a digitação de dados pelo usuário. Sintaxe simplificada: scanf(“<formatação da entrada>”, <endereço da variavel>); Onde: “formatação da entrada” é apenas o formato do tipo (vide tabela abaixo) da variável onde será alocada a informação digitada pelo usuário. “endereço da variável” é o endereço de onde será alocada a informação. Para informar o endereço de uma variável, basta colocar o caractere “&” antes do nome da variável. Exemplo: scanf(“%f”, &valor); Neste exemplo, o programa será interrompido para que o usuário digite uma informação, que deverá ser um número real. Este número será alocado em um espaço de memória chamado valor, declarado previamente como float (conjunto dos números reais). Tanto para o printf() como para o scanf(), temos que usar formatos para as variáveis que desejamos digitar (entrada) ou mostrar (saída). Estes formatos correspondem ao tipo de cada variável. A tabela abaixo mostra os tipos mais comuns. Formato Tipo %d, %i Inteiro %f Float %c Caractere %lf Double %s Cadeia de caracteres (string) 1.5 Tipos e Variáveis Sempre que preciso manipular alguma informação, tenho que reservar um espaço para armazená-la na memória, determinando também o tipo e tamanho da informação a ser armazenada. Os tipos básicos, são: Linguagem de Programação C 8 int: 2 bytes com sinal (4 bytes para computadores 32bits) – conjunto dos númerosinteiros – Ex.: 5, 37,1005 char: 1 byte com sinal – qualquer caractere – Ex.: 'a', 'F', ';' float: 4 bytes com sinal – conjunto dos números reais – Ex.: 5.1, 89.3 double: 8 bytes com sinal - conjunto dos números reais – Ex.: 5.1, 89.3 Assim: float salario; Reserva um espaço de memória chamado “salario” do tipo float (isso já define o tamanho e o tipo da informação), na memória. 1.6 Operadores Básicos Existem 4 tipos de operadores: Aritmético, Lógico, Condicional, bit-a-bit. A tabela abaixo mostra estes operadores. Aritméticos Símbolo Descrição + Soma - Subtração * Multiplicação / Divisão % Resto da divisão ++ Incremento -- Decremento Lógicos == Igualdade != Diferente < Menor <= Menor ou igual > Maior >= Maior ou igual Condicionais && E || Ou Linguagem de Programação C 9 Bit-a-bit & E | Ou 1.7 Exercícios Propostos 1.7.1 Faça um programa que imprima “Ola” na tela. 1.7.2 Faça um programa que imprima seu nome na tela. 1.7.3 Faça um programa que imprima um nome, escolhido pelo usuário, na tela. Você deverá permitir que o usuário digite (função scanf()) este nome, definindo uma variável para guardar este nome na memória. 1.7.4 Faça um programa que receba o nome e a idade do usuário e depois mostre-os na tela. Devem ser definidas duas variáveis para guardar nome e idade na memória. 1.7.5 Faça um programa que receba o nome do usuário, quantas horas ele trabalhou no mês e o valor da sua hora trabalhada. Mostre seu nome e o valor do seu salário. Neste caso, você deve reservar variáveis para o nome, quant. de horas trabalhadas, valor da hora e para o salario (que será calculado). 1.7.6 Os funcionários da empresa “ToadaGoo”, recebem para cada hora extra, 50% a mais do valor da hora normal. Faça um programa que receba o nome de um funcionário, quantas horas normais e quantas horas extras ele trabalhou, assim como o valor da hora normal. Mostre, no final do programa, o salario líquido deste funcionário. 1.7.7 Faça um programa que receba do usuário um numero qualquer e mostre o quadrado deste número. 1.7.8 Faça um programa que permita que o usuário digite dois valores inteiros. Multiplique estes valores guardando o produto em uma terceira variável. Mostre o resultado da multiplicação. 1.7.9 Faça um programa de uma calculadora simples que permita que o usuário digite dois valores inteiros. A calculadora, logo após a digitação dos números, deverá mostrar o valor da soma, da subtração, da multiplicação e da divisão dos valores digitados. 1.7.10 Faça um programa que calcule a media da temperatura ocorrida em um dia. O usuário deverá digitar 5 temperaturas e o programa deverá mostrar em tela a média das temperaturas. 1.7.11 A tabela abaixo mostra o valor do câmbio de moedas estrangeiras para cada real. Faça um programa onde o usuário entre com uma quantia em real e o programa mostre este valor em outras moedas. Linguagem de Programação C 10 Moeda Valor (R$) 1 Dolar 1,9 1 Euro 3,1 1.7.10 Faça um programa que calcule e mostre o salário líquido de um funcionário. O programa deve receber o salário bruto e considerar que todo funcionário tem um desconto de 10% de IR no salário bruto. 1.7.11Para calcular a área de um retângulo, podemos multiplicar sua largura pelo seu comprimento. Permita que o usuário entre com a largura e comprimento de um retângulo qualquer e mostre sua área. 1.7.12Supondo que um engenheiro deseja saber qual a distância entre 2 pontos em um terreno. Porém ele sabe apenas as coordenadas (x,y) de cada ponto. Faça um programa que resolva este problema para o engenheiro, sabendo que o cálculo da distância é dado por: d= x2−x12 y2− y12 Dica: Use sqrt() (math.h) para calcular a raiz quadrada. 1.7.13 Uma empresa de engenharia vai lotear uma fazenda e deseja dividi-la em 3 categorias (A, B e C) de acordo com o tamanho do lote. Toda a fazenda será dividido da seguinte forma: 20% para a Categoria A, 30% para a Categoria B e 50% para a Categoria C. A Categoria A terá 4 lotes, a Categoria B terá 10 lotes e a Categoria C terá 20 lotes. Você foi designado para desenvolver um programa que mostre a área de cada lote, das categorias A, B e C.. Receba do usuário a área total da fazenda, e para um bom entendimento do problema, considere a fazenda com formato retangular. 1.7.14 Uma empresa de transporte rodoviário precisa saber o tempo exato que um ônibus demorou para sair da sua cidade origem e chegar na sua cidade destino. Para isso, pediu que voce fizesse um programa (faça primeiro o algoritmo e o fluxograma) que recebesse o horário de saída (HH:MM:SS) e o horário de chegada (HH:MM:SS), e mostrasse o tempo exato gasto na viagem. Exemplo: Horário de Saída : 14:28:32 Horário de Chegada: 17:47:52 Tempo de Viagem : 03:19:20 Linguagem de Programação C 11 Dica: Receba as entradas em variáveis inteiras separadas. Converta todas para segundos, execute a diferença e converta o resultado para horas, minutos e segundos. Linguagem de Programação C 12 2 - Comandos de Decisão 2.1Comando if/else Definição: Usado para executar um ou mais comandos dependentes de condições. Sintaxe simplificada: if (<condição> &&/|| <condição> ...){ <comandos e/ou funções> } else{ <comandos e/ou funções> } A palavra “if” é obrigatória. Tudo que estiver entre “<” e “>” deve ser substituído pela informação pertinente. Os símbolos “<” e “>” não devem ser digitados. O else é usado quando queremos executar algum comando caso a condição do if seja falsa. Ele é opcional. O “{” e “}” pode ser dispensado quando temos apenas uma linha de código dentro da estrutura de decisão, porém caso você sempre use, nunca errará, terá uma regra a menos para guardar e terá seu programa mais organizado (esta é apenas minha opinião). O if pode ser usado com duas ou mais condições amarradas com um “e lógico” (&&) ou com um “ou lógico” (||). Nestas condições cuidado com o uso do eles, pois ele representará a inversão do operador condicional e do operador lógico. Abaixo apresentamos alguns exemplos. Digite o Exemplo 2.1:- Entre com o valor da nota de uma determinada disciplina de um aluno e mostre a mensagem de “Aprovado”, se sua nota for maior ou igual a 6, ou “Reprovado”, se sua nota for menor que 6. 1 #include <stdio.h> Permite o uso das funções printf() e scanf() 2 #include <conio.h> Permite o uso da função getch() 3 int main(){ Abre a função principal do programa 4 float nota; Define espaço de memória chamado nota Linguagem de Programação C 13 5 scanf(“%f”, ¬a); Recebe a nota do usuário 6 if (nota>=6){ Verifica se nota é maior ou igual a 6 7 printf(“Aprovado”); Caso seja, imprime mensagem na tela 8 } Fecha o if 9 else{ Verifica se nota é menor que 6 (caso contrário do if) 10 printf(“Reprovado”); Caso seja menor que 6. imprime mensagem 11 } Fecha else 12 getch(); Pára a execução do programa 13 } Fecha função principal No exemplo 2.1, o programa recebe do usuário um valor e atribui este valor à variável nota, depois disso, testa se o valor digitado é maior ou igual a 6, se for verdadeira esta condição, o programa mostra “Aprovado” na tela, caso contrário, mostra “Reprovado”. Note que apenas uma das mensagens será mostrada, pois o “else” é a negação da condição. Digite o Exemplo 2.2:- Entre com o valor da nota de uma determinada disciplina de um aluno e mostre a mensagem de “Aprovado”, se sua nota for maior ou igual a 6, “Exame” se sua notaestiver entre 4 e 5,9 ou “Reprovado”, se sua nota for menor que 4. 1 #include <stdio.h> Permite o uso das funções printf() e scanf() 2 #include <conio.h> Permite o uso da função getch() 3 int main(){ Abre a função principal do programa 4 float nota; Define espaço de memória chamado nota 5 scanf(“%f”, ¬a); Recebe a nota do usuário 6 if (nota>=6){ Verifica se nota é maior ou igual a 6 7 printf(“Aprovado”); Caso seja, imprime mensagem 8 } Fecha o if 9 else{ Verifica se nota é menor que 6 (caso contrário do if) if (nota>=4){ Verifica se a nota é maior que 4 printf(“Exame”); Caso seja, imprime mensagem } Fecha o if else{ Verifica se nota é menor que 4 (caso contrário do if) 10 printf(“Reprovado”); Caso seja menor que 4, imprime mensagem 11 } Fecha else } Fecha else 12 getch(); Pára a execução do programa 13 } Fecha função principal No exemplo 2.2, o programa recebe do usuário um valor e atribui este valor à variável nota, depois disso, testa se o valor digitado é maior ou igual a 6, se for verdadeira esta condição, o programa mostra Linguagem de Programação C 14 “Aprovado” na tela, caso contrário, testa se a nota é maior que 4, caso seja mostra “Exame” na tela, caso contrário, mostra “Reprovado”. 2.2Switch Definição: Usado para executar um ou mais comandos caso o conteúdo da variável testada seja igual ao valor de algum dos casos. Sintaxe simplificada: switch (<variavel testada>){ case <valor>: <comandos e funções> break; case <valor>: <comandos e funções> break; default: <comandos e funções> } Como última função para cada caso, utilizamos a função "break" para que o programa não precise testar o restante das condições. O default (similar ao else do if) é usado quando queremos executar algum comando, caso o valor da variável seja diferente de todos os valores testados. Ele é opcional. Podemos substituir qualquer switch por if´s, porém nem todo if pode ser substituído por switch´s. Isto acontece porque o switch não verifica intervalos de valores, apenas igualdade. O switch organiza melhor o programa quando temos uma determinada variável para ser verificada sua igualdade com diversos valores. Digite o exemplo 2.1: Faça um programa que permite que o usuário entre com o código do produto e o programa mostre o nome deste produto. Os produtos são: cod. 1 – cd, cod. 2 – livro, cod. 3 – revista, cod. 4 – jornal. 1 #include <stdio.h> Permite o uso das funções printf() e scanf() 2 #include <conio.h> Permite o uso da função getch() 3 int main(){ Abre a função principal do programa 4 int codigo; Define espaço de memória chamado salario 5 printf(“Digite o codigo: ”); Mostra mensagem na tela 6 scanf(“%i”,&codigo); Recebe o valor do código do usuário 7 switch (codigo){ Abre o comando switch para verificação do código Linguagem de Programação C 15 Digite o exemplo 2.1: Faça um programa que permite que o usuário entre com o código do produto e o programa mostre o nome deste produto. Os produtos são: cod. 1 – cd, cod. 2 – livro, cod. 3 – revista, cod. 4 – jornal. 8 case 1: Verifica se o código é igual a 1 9 printf(“CD”); Caso seja, mostra mensagem 10 break; Sai o switch 11 case 2: Verifica se o código é igual a 2 12 printf(“Livro”); Caso seja, mostra mensagem 13 break; Sai o switch 14 case 3: Verifica se o código é igual a 3 15 printf(“Revista”); Caso seja, mostra mensagem 16 break; Sai o switch 17 case 4: Verifica se o código é igual a 4 18 printf(“Jornal”); Caso seja, mostra mensagem 19 break; Sai o switch 20 default: Verifica se é diferente de todos os cases 21 printf(“Opção Inválida”); Caso seja, mostra mensagem 22 } Fecha switch() 23 getch(); Pára execução do programa 24 } Fecha função principal 2.3Exercícios Switch 2.3.1Faça um programa que permita que o usuário entre com um numero num intervalo de 0 a 6, equivalendo cada um deles a um dia da semana (domingo = 0). Imprima o dia da semana equivalente ao numero digitado pelo usuário. Caso o usuário digite um numero invalido, dê uma mensagem informando-o. Use o comando "switch" para os testes. 2.3.2 Em uma empresa de saneamento básico os serviços recebem uma numeração de acordo com sua natureza: 1 para troca de tubulação, 2 para verificação de problemas de vazamento, 3 para ligação de água e esgoto. De acordo com o problema, o serviço é agendado para um determinado horário do dia. 8h da manhã são agendados os serviços 1, para às 11h são agendados os serviços 2 e para às 15h são agendados os serviços 3. Você, como programador de sistemas da empresa, foi Linguagem de Programação C 16 designado para fazer um programa que agende os serviços em seus respectivos horários. O programa deve receber o numero do serviço e mostrar o seu horário de agendamento. Use o comando switch, com mensagem de erro caso o usuário digite um numero invalido. Faça o algoritmo e o fluxograma antes do programa. If-else 2.3.3Permita que o usuário digite um valor inteiro, teste se este valor é maior que 10, caso seja, imprima “Maior que 10”; caso contrário, imprima “Menor ou igual a 10”. 2.3.4Uma empresa não pretende contratar candidatos com mais de 40 anos. Faça um programa que receba a idade do candidato e mostre uma mensagem se ele está apto ou não para a vaga. 2.3.5Um restaurante oferece um desconto de 7% para todos os clientes que gastarem mais que R$ 250,00 no fechamento da conta. Faça um programa que pergunte ao usuário qual o valor da conta e mostre o valor real a ser pago. 2.3.6Uma empresa deseja bonificar seus funcionários de acordo com a quantidade de vendas do mês. O gerente lhe entregou uma tabela para que você faça um programa que mostre o valor das bonificações. Valor Vendido (R$) Bonificação (%) < 1.500,00 5 Entre 1.500,00 e 3.500,00 7 > 3.500,00 10 2.3.7 O IMC (Índice de Massa Corpórea) é um bom sinalizador para o controle do nosso peso. A fórmula é simples: IMC = peso / (altura2) através da tabela abaixo podemos saber se precisamos emagrecer, engordar ou manter o nosso peso. IMC Situação Abaixo de 20 (exclusive) Abaixo do peso normal Entre 20 e 24,9 (inclusive) Peso normal Entre 25 e 35 (inclusive) Acima do peso normal Acima de 35 (exclusive) Obeso Linguagem de Programação C 17 Faça um programa que receba a altura e o peso do usuário. De acordo com a fórmula do IMC, mostre a situação do usuário. 2.3.8 Dados 3 valores representando os lados de um triângulo, verifique se este triângulo é escaleno (3 lados diferentes), isósceles (2 lados iguais) ou eqüilátero (3 lados iguais). 2.3.9 Faça um programa que receba 3 valores correspondentes aos lados de um triângulo. Verifique e dê mensagens para as seguintes condições, sendo A o maior lado: Se A >= B + C Nenhum triangulo é formado Se A2 = B2 + C2 Um triangulo retangulo é formado Se A2 > B2 + C2 Um triangulo obtusangulo é formado Se A2 < B2 + C2 Um triangulo acutangulo é formado Faça o algoritmo e o fluxograma antes do programa. 2.3.10 Dados 3 valores quaisquer, verifique se eles podem ser lados de um triângulo. Lembre que, em um triângulo, a soma de dois lados deve ser maior que o maior lado. 2.3.11 Receba 3 números inteiros e distintos, a partir do usuário, e mostre-os em ordem crescente. 2.3.12 Faça um programa que, leia os 3 números, a partir do usuário,correspondentes aos coeficientes de uma equação do 2o grau. Através de Bascara, calcule, se possível, as raízes da equação, realizando todas as consistências necessárias. Faça o algoritmo e o fluxograma antes do programa. Linguagem de Programação C 18 3 - Comandos de Repetição 3.1Comando while Sintaxe simplificada: while (<condição>){ <comandos e funções> } Este comando executa os comandos e funções internos a ele enquanto a condição for verdadeira. Diferente do if que, caso a condição seja verdadeira, executa os comandos internos e segue adiante, o while volta a executar a primeira linha do laço, ou seja, o teste da condição. Ele continua testando e executando os comandos internos até que a condição seja falsa. Existem outros comandos de looping (for e do-while) , porém se você souber bem o while poderá usá-lo em qualquer situação. Digite o Exemplo 3.1:- Mostre os números inteiros de 1 a 100. 1 #include <stdio.h> Permite o uso das funções printf() e scanf() 2 #include <conio.h> Permite o uso da função getch() 3 int main(){ Abre a função principal do programa 4 int i=1; (declaração e inicialização da variável i) Define espaço de memória chamado i e atribui 1 p/ este espaço 5 printf(“Imprimindo os números de 1 a 100”); Imprime mensagem na tela 6 while (i<=100){ Verifica se i é menor ou igual a 100 7 printf(“%i\n”, i); Imprime o conteúdo da variável i 8 i=i+1; (contador) Soma 1 em i e atribui o resultado no próprio i 9 } Fecha o while 10 getch(); Páara a execução do programa 11 } Fecha a função principal No exemplo 3.1, a variável i é inicializada com o valor 1 e incrementada dentro do laço do while. A condição do comando while testa se o valor de i é menor ou igual a 100 e enquanto isso for Linguagem de Programação C 19 verdade, a variável é mostrada na tela. Ao comando “i=i+1” chamamos de contador. O contador é um conceito importante na programação, pois através dele podemos alterar o valor de uma variável através de um “passo” determinado. Podemos ter contadores que somem com passo de 1 em 1 (como no caso do exemplo), de 2 em 2, de 5 em 5, ou seja, como nos convier. Uma variação deste conceito é o acumulador. A diferença é que, ao invés de contarmos (acumularmos) constantes numéricas (1, 2, 3 etc), acumulamos variáveis, como: salários, notas, idades, prestações etc.. O exemplo 3.2 mostra o uso de um contador (cont) e de um acumulador (somaid). Digite o Exemplo 3.2:- Faça um programa que receba a idade de 10 alunos de uma academia e mostre a média das idades. 1 #include <stdio.h> Permite o uso das funções printf() e scanf() 2 #include <conio.h> Permite o uso da função getch() 3 int main(){ Abre a função principal do programa 4 int idade, cont=1, somaid=0; Define espaços de memória inteiros para guardar as idades, o contador (cont) e o acumulador (somaid). O contador e acumulador devem ser inicializados. 5 float media; Define espaço de memória float para guardar a media 6 printf(“Digite as idades\n”); Imprime mensagem na tela 7 while (cont<=10){ Verifica se o contador é menor ou igual a 10 8 scanf(“%i”, &idade); Recebe a idade do usuário e guarda seu valor na variável “idade” 9 somaid=somaid+idade; (acumulador) Soma a idade ao acumulador (que vale zero da primeira vez) e guarda o resultado no próprio acumulador. Na próxima iteração o acumulador já estará atualizado. 10 cont=cont+1; (contador) Soma 1 ao contador (que vale 1 da primeira vez) e guarda o resultado no próprio contador. Na próxima iteração o contador já estará atualizado. 11 } Fecha o while Linguagem de Programação C 20 Digite o Exemplo 3.2:- Faça um programa que receba a idade de 10 alunos de uma academia e mostre a média das idades. 12 media=somaid/10; Calcula a media. 13 printf(“A media eh %f”,media); Mostra a media na tela 14 getch(); Páara a execução do programa 15 } Fecha a função principal 3.2Comando do-while Assim como o comando while, este comando permite a execução de comandos enquanto uma determinada condição for verdadeira. Porém, a diferença é que a condição é testada no final do bloco de comando e não no início, permitindo assim, que pelo menos uma vez, os comandos internos ao bloco de comandos sejam executados, diferentemente do while, onde existe a possibilidade dos comandos internos ao bloco de comandos nunca serem executados, caso a condição seja falsa logo no primeiro teste. Digite o Exemplo 3.3:- Faça um programa que receba o nome, a quantidade de horas trabalhadas e o valor da hora de vários funcionários de uma empresa. Mostre, para cada funcionário, o seu salário. Pergunte ao usuário se ele deseja continuar digitando dados de mais funcionários. 1 #include <stdio.h> Permite o uso das funções printf() e scanf() 2 #include <conio.h> Permite o uso da função getch() 3 int main(){ Abre a função principal do programa 4 char nome[30], resp; Declara a variável nome do tipo string de 30 caracteres e a variável resp com 1 caractere 5 float horas, valor_h, sal; Declara variaveis do tipo float 6 do{ Abre o do-while 7 printf(“Nome:”); Imprime mensagem (rotulo do que será digitado) 8 fflush(stdin); Limpa buffer do teclado 9 gets(nome); Recebe string toda do usuário 10 printf(“Horas trabalhadas:”); Imprime mensagem (rotulo do que será digitado) 11 scanf(“%f”, &horas); Recebe horas trabalhadas do usuário 12 printf(“Valor hora:”); Imprime mensagem (rotulo do que será digitado) Linguagem de Programação C 21 13 scanf(“%f”,&valor_h); Recebe valor das horas trabalhadas do usuário 14 sal=horas * valor_h; Multiplica quant de horas pelo valor e guarda na variavel sal 15 printf(“Salario : %.2f\n”, sal); Imprime a variavel sal 16 printf(“Deseja continuar <s/n>?”); Pergunta ao usuário se deseja continuar 17 fflush(stdin); Limpa buffer do teclado 18 resp=toupper(getchar()); Recebe a resposta do usuário e converte sua resposta para maúscula 19 }while (resp=='S'); Verifica se a resposta é igual a S, caso seja, volta no “do” para executar os comandos novamente 20 } Fecha a função principal A função gets() é utilizada para receber strings (cadeia de caracteres), a partir do usuário. Muitas vezes, quando utilizamos funções de entrada para receber caracteres (getchar()) ou strings (gets()), alguns códigos permanecem na memória (buffer) do teclado. Utilizamos a função fflush() para limpar este buffer e permitir que o programa pare para receber novas informações. A função toupper() transforma qualquer letra em letra maúscula. Quando usamos a função getchar() como parâmetro, apenas deixamos de usar uma variável para receber a eventual letra minuscula digitada pelo usuário.. 3.3Teste de mesa Este tipo de teste é muito útil quando queremos verificar se a lógica do nosso programa está correta. A compilação de um programa verifica apenas erros de sintaxe, o que não significa que o nosso programa funcione conforme planejamos que funcionasse. Bem, um teste de mesa é tarefa simples, porém requer cuidados. Você assumirá o papel do compilador quando da execução do programa, por isso não podemos perder de vista a linha do programa que estásendo executada em cada momento. Começamos um teste de mesa montando uma única tabela contendo uma coluna para cada variável declarada e mais uma coluna para o que for escrito na tela, de acordo com o modelo abaixo. Os valores das variáveis estarão sendo colocadas na tabela a medida que o programa for requerendo. Assim como também, as mensagens que serão impressas na tela. Sempre que colocamos um novo valor em uma variável devemos riscar o anterior, dizendo a nós mesmos que o valor Linguagem de Programação C 22 mudou. Nunca apague os valores apenas risque-os. Teste de mesa Memória <var. 1> <var. 2> <var. 3> <var. 4> Tela <val. 1> <val. 4> <val. 5> <val. 7> <mensagem 1> <val. 2> <val. 6> <val. 8> <mensagem 2> <val. 3> Vamos agora verificar como acontece na prática. Para isso, usaremos a lógica do exemplo 3.3.4, modificado para 5 funcionários. Reproduziremos a tabela a cada passo para que você entenda melhor. 1 int idade, somaid, qtd; 2 qtd=1; 3 somaid=0; 4 while (qtd<=5){ 5 scanf("%i",&idade); 6 somaid=somaid+idade; 7 qtd=qtd+1; 8 } 9 printf("A soma das idades eh %i", somaid); Linha 1 – cria a coluna das variáveis e a da tela. Teste de mesa Memória Idade somaid qtd tela Linha 2 e 3 – atribui 1 e 0 para as respectivas variáveis. Teste de mesa Memória Idade somaid qtd tela 0 1 linha 4 – Verifica se qtd é menor ou igual a 5. O retorno é verdadeiro. Isto não gera alteração na tabela, apenas define que executaremos a linha 5. linha 5 – Simulamos um valor digitado pelo usuário. Teste de mesa Memória Idade somaid qtd tela 20 0 1 Linha 6 – soma idade a somaid e guarda em somaid Teste de mesa Memória tela Linguagem de Programação C 23 Idade somaid qtd 20 0 20 1 Linha 7 – soma 1 em qtd Teste de mesa Memória Idade somaid qtd tela 20 0 20 1 2 Linha 8 – fecha o looping e volta para linha 4 linha 4 – Verifica se qtd é menor ou igual a 5. O retorno é verdadeiro. Isto não gera alteração na tabela, apenas define que executaremos a linha 5. linha 5 – Simulamos um valor digitado pelo usuário. Teste de mesa Memória Idade somaid qtd tela 20 25 0 20 1 2 Linha 6 – soma idade a somaid e guarda em somaid Teste de mesa Memória Idade somaid qtd tela 20 25 0 20 45 1 2 Linha 7 – soma 1 em qtd Teste de mesa Memória Idade somaid qtd tela 20 25 0 20 45 1 2 3 Linha 8 – fecha o looping e volta para linha 4 linha 4 – Verifica se qtd é menor ou igual a 5. O retorno é verdadeiro. Isto não gera alteração na tabela, apenas define que executaremos a linha 5. linha 5 – Simulamos um valor digitado pelo usuário. Teste de mesa Memória Idade somaid qtd tela 20 25 23 0 20 45 1 2 3 Linha 6 – soma idade a somaid e guarda em somaid Teste de mesa Memória Idade somaid qtd tela 20 25 23 0 20 45 68 1 2 3 Linha 7 – soma 1 em qtd Teste de mesa Memória Idade somaid qtd tela 20 25 23 0 20 45 68 1 2 3 4 Linha 8 – fecha o looping e volta para linha 4 linha 4 – Verifica se qtd é menor ou igual a 5. O retorno é verdadeiro. Isto não gera alteração na tabela, apenas define que executaremos a linha 5. linha 5 – Simulamos um valor digitado pelo usuário. Linguagem de Programação C 24 Teste de mesa Memória Idade somaid qtd tela 20 25 23 30 0 20 45 68 1 2 3 4 Linha 6 – soma idade a somaid e guarda em somaid Teste de mesa Memória Idade somaid qtd tela 20 25 23 30 0 20 45 68 98 1 2 3 4 Linha 7 – soma 1 em qtd Teste de mesa Memória Idade somaid qtd tela 20 25 23 30 0 20 45 68 98 1 2 3 4 5 Linha 8 – fecha o looping e volta para linha 4 linha 4 – Verifica se qtd é menor ou igual a 5. O retorno é verdadeiro. Isto não gera alteração na tabela, apenas define que executaremos a linha 5. linha 5 – Simulamos um valor digitado pelo usuário. Teste de mesa Memória Idade somaid qtd tela 20 25 23 30 28 0 20 45 68 98 1 2 3 4 5 Linha 6 – soma idade a somaid e guarda em somaid Teste de mesa Memória Idade somaid qtd tela 20 25 23 30 28 0 20 45 68 98 126 1 2 3 4 5 Linha 7 – soma 1 em qtd Teste de mesa Memória Idade somaid qtd tela 20 25 23 30 28 0 20 45 68 98 126 1 2 3 4 5 6 Linha 8 – fecha o looping e volta para linha 4 linha 4 – Verifica se qtd é menor ou igual a 5. O retorno é falso. Isto não gera alteração na tabela, apenas define que executaremos a linha 9. linha 9 – Imprime a somatória na tela. Teste de mesa Memória Idade somaid qtd tela Linguagem de Programação C 25 20 25 23 30 28 0 20 45 68 98 126 1 2 3 4 5 6 A soma das idades eh 126 Aprenda a fazer teste de mesa em todos os programas que desenvolver, isto fará com que você se certifique que seu programa está correto e o ajudará a solidificar o aprendizado lógico. 3.4Exercícios 3.4.1Imprima os 10 primeiros números inteiros na tela. 3.4.2Imprima o quadrado dos 10 primeiros números inteiros. 3.4.3Faça um programa que permita que o usuário digite a idade de 10 funcionários. 3.4.4Faça um programa que permita que o usuário digite a idade de 10 funcionários e após a digitação, mostre a somatória das idades. A soma das idades deve ser feita dentro do looping e apenas a exibição fora dele. 3.4.5Um usuário tem em suas mãos 100 Notas Fiscais. Faça um programa que receba seus valores e calcule o total de todas as Notas. 3.4.6 Implementar um programa que imprima a tabuada de um número digitado pelo usuário. 3.4.7 Faça um programa que calcule e mostre o quadrado de um número N inteiro positivo, digitado pelo usuário. O cálculo deve ser feito através da soma dos N primeiros números ímpares. Ex.: Se N=3 o programa calculará 1+3+5=9, que é o quadrado de 3. 3.4.8Em uma loja, todos os clientes que comprarem mais de R$ 300,00 receberão um desconto proporcional ao valor de sua compra, de acordo com a tabela abaixo: Valor da compra (R$) Desconto (%) Até 500,00 5 Linguagem de Programação C 26 De 501,00 a 1000,00 10 Acima de 1000,00 12 Você foi incumbido de fazer um programa que permita que o cliente entre com o valor dos produtos comprados e mostre o total da compra, o valor do desconto e o preço a pagar. Pergunte ao usuário se deseja terminar a digitação dos produtos e também se deseja finalizar o programa. 3.4.9 A CPFL deseja saber quantos usuários de um bairro de classe média ultrapassa o consumo mensal ideal. Para isso a empresa tem em suas mãos o consumo mensal ideal, que deve ser recebido pelo programa uma única vez, e as medidas do mês anterior e do mês atual das 5000 residências do bairro, para verificar o consumo calculado pela diferença entre eles. 3.4.10Faça um programa que calcule o fatorial de qualquer número digitado pelo usuário, sabendo que o fatorial de um número é o produtório dos números inteiros entre 1 e ele mesmo. 3.4.11Calcule a seguinte expressão: ∑ = 5 1i ix Onde: x é digitado pelo usuário. 3.4.12 Faça um programa que leia uma coleção de números inteiros e calcule sua média quadrática. A média quadrática é dada pela fórmula: 22 4 2 3 2 2 2 1 nxxxxxMQ +++++= O programa encerra-se quando o valor de x for 0. 3.4.13 Calcule a expressão, sem utilizar a função pow() da math.h: X Y Onde: X e Y são digitados pelo usuário 3.4.14Faça um programa que calcule o fatorial de qualquer número digitado pelo usuário, sabendo que o fatorial de um número é o produtório dos números inteiros entre 1 e ele mesmo 3.4.15A seqüência de Fibonacci segue a seguinte ordem:0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , ... Repare que cada termo é a somatória dos dois anteriores, sendo que os dois primeiros são 0 (zero) e o 1 (um). Faça um programa que receba um valor do usuário e imprima os termos da seqüência de Fibonacci menores que o valor digitado. Linguagem de Programação C 27 3.4.16Uma das primeiras aplicações de computadores foi o cálculo de trajetória de projéteis. Se um projétil é atirado com uma velocidade inicial V (m/s) a um ângulo de inclinação θ (radianos), sua posição no plano vertical (x,y) no tempo t (segundos) é calculada pelas fórmulas: x=Vcosθ t y=Vsenθ t− 1 2 g t 2 Onde: 0θ π 2 e g=9.8 m s2 Faça um programa que, dados os parâmetros θ e V, liste as coordenadas x e y em intervalos de 0.01 segundos para um tiro em particular, terminando a listagem quando o projétil atingir o solo. Linguagem de Programação C 28 4 - Vetor Até agora utilizamos estruturas únicas na memória, ou seja, um único espaço foi alocado de cada vez. Porém, existem situações nas quais queremos agrupar seqüencialmente na memória os nossos dados, de forma a resgatá-los de maneira mais fácil. Podemos fazer a seguinte analogia: geralmente, alocamos uma única casa e damos um nome para ela. Quando queremos alocar um vetor, alocamos uma rua inteira e damos um único nome para ela. Como a rua tem várias casas (neste caso do mesmo tamanho), o compilador, automaticamente, atribui um numero para cada casa, começando do zero. Chamamos este número de índice. Assim: int vet[5]; Aloca 5 espaços contíguos na memória, chamado vet, com seu índice variando de 0 à 4. A figura 4.1 mostra alguns elementos alocados através desta definição. 10 15 7 4 34 0 1 2 3 4 Figura 4.1 - Alocação de elementos em um vetor de 5 posições Para manipular as informações armazenadas no vetor, devemos especificar o nome da variável e o índice referente ao espaço que queremos tratar, entre colchetes. Assim, int a[10]; alocará 10 espaços de inteiros na memória e para acessá-los basta escrever o nome da variável juntamente com o índice da posição a qual quer acessar. Ou seja, a[0], para acessar o índice 0, a[1], para acessar o índice 1, a[2], para acessar o índice 2, e assim por diante. Quando nosso vetor é muito grande, fica inviável a utilização de constantes numéricas como índice (0, 1, 2, 3 etc), ao invés disso, usamos variáveis. Aliás, esta é a grande vantagem dos vetores: manipularmos as variáveis nos loopings para acessar as posições sem precisar escrever cada posição. Um comando de looping muito utilizado juntamente com vetores é o “FOR”, pois através dele podemos controlar Linguagem de Programação C 29 Elementos do vetor Índices do vetor melhor as variáveis de controle dos índices. 4.1Comando For Sintaxe: for (<inicialização>;<condição>;<incremento>){ <comando> } Este comando permite repetir a execução de um ou mais comandos que estarão dentro do seu “bloco de comandos”. Como podemos ver, tem a mesma função que os comandos while e do-while. Ele permite 3 argumentos; o 1º é geralmente usado para inicialização da variável de controle (contador) do looping e é executado apenas da primeira vez; o 2º para a condição de execução dos comandos e é testado todas as vezes e o 3º para incremento da variável de controle e é executado todas as vezes. Ele geralmente é usado quando sabemos quantas repetições teremos. Assim, for (i=0;i<10;i++){ a[i]=0; } fará a inicialização da variável i com 0; testará se i é menor que 10; enquanto for menor, atribui 0 para a posição do vetor a[i] (onde i tem um valor a cada looping); incrementa i e testa novamente até que a condição seja falsa, ou seja, o valor de i seja 10 (posição inválida no vetor). Digite o Exemplo 4.1:- Faça um programa que receba as notas dos alunos de uma classe de 30 alunos e calcule a média da classe. Estas notas devem ser carregadas em um vetor. 1 /*-------------------------------------------------------- Descrição: Calcula media das notas de 30 alunos de uma classe Data : Agosto/2009 Autor : Kesede R Julio ---------------------------------------------------------*/ O “/*” e o “*/”, abre e fecha um bloco de comentários. Estes comentários ajudam muito em seus estudos. Faça isso em todos os seus programas. 2 #include <stdio.h> Permite inclusão de funções de i/o 3 #include <conio.h> Permite inclusão da função getch() 4 int main(){ Abre função principal 5 float notas[30], media, soma=0; Declara o vetor notas com 30 Linguagem de Programação C 30 posições do tipo float, assim como media e soma (inicializada com 0) 6 int i; Declara variável i 7 for (i=0;i<30;i++){ Abre comando for. Inicializa i com 0, verifica se i é menor que 30, na primeira vez. Nas outras vezes, soma 1 em i e torna a verificar se i é menor que 30 8 printf("Entre com a %i a. nota", i+1); Mostra uma mensagem na tela 9 scanf(“%f”,¬as[i]); Recebe valor digitado pelo usuário e guarda na iésima posição de “notas”. Da primeira vez i é igual a zero. 10 soma=soma+notas[i]; (acumulador) Acumula a nota recebida na variável “soma” (inicializada com zero) . 11 } Fecha o comando for, fazendo o programa voltar na linha 7 12 media= soma/i; Divide “soma” por “i” (sai do looping valendo 30) e guarda o resultado em “media” 13 printf("A media da classe eh: %.1f", media); Imprime o valor de “media” 14 getch(); Pára a execução do programa 15 } Fecha a função principal 4.2Exercícios 4.2.1Faça um programa que receba 5 valores inteiros em um vetor e mostre na tela, os valores na ordem inversa. 4.2.2Faça um programa que receba as notas de 10 alunos de uma classe em um vetor e mostre a média das notas. 4.2.3Faça um programa que receba, em um vetor, 200 valores inteiros, a partir do usuário. Após o carregamento, mostre para o usuário apenas o conteúdo dos índices pares. Linguagem de Programação C 31 4.2.4Faça um programa que carregue um vetor de inteiros, permitindo que o usuário defina a quantidade de elementos a serem carregados. O usuário também deve digitar o valor de um elemento o qual deseja saber quantos destes elementos existem no vetor. 4.2.5Cadastre em um vetor os índices de inflação dos 12 meses de 2008 (cada índice fará referência a um mês do ano). a)Mostrar a inflação e o mês (numericamente) de menor índice b)Mostrar a inflação e o mês (numericamente) de maior índice 4.2.6Calcule o desvio padrão do vetor carregado no exercício 4.2.5 DP= ∑ x i−x 2 n−1 Onde xi é cada posição do vetor, x traço é a média dos elementos do vetor e n é o total de elementos. 4.2.7Faça um programa que receba do usuário um número inteiro N e um vetor X com N números reais. Mostre o resultado da função abaixo. S=∑ i=0 N−1 x ii 2 Onde xi é cada posição do vetor e N é o total de elementos. 4.2.8Faça um programa que crie um vetor, digitado pelo usuário, com a idade de 100 pessoas. Mostrar a media aritmética e a freqüência absoluta de uma determinada idade digitada pelo usuário. Freqüência absoluta de um valor é o número de vezes que o mesmo aparece no conjunto de valores (vetor). Linguagem de Programação C 32 4.2.9Cadastre em um vetor, 50 números de cheques que foram recebidos poruma loja em um dia de trabalho. Permita que o usuário faça uma busca neste vetor, afim de verificar se um determinado número de cheque foi ou não cadastrado. Dê mensagem ao usuário mostrando se o número consta ou não no cadastro de cheques. 4.2.10. Em uma estrada, foi fixado um sistema de radar móvel contendo dois radares (r1 e r2) a uma distancia de 10m um do outro. Considere que a velocidade máxima da estrada seja de 80 Km/h e o calculo da velocidade seja V=ds/dt, onde V é velocidade, ds é o espaço percorrido e dt é o tempo gasto para atravessar este espaço. O programa deve receber o tempo em segundos de cada veículo captado pelo sensor (em nosso caso, pelo usuário). Caso o veículo ultrapasse o limite de velocidade o programa também receberá do sensor (do usuário), a placa do veículo. Crie dois vetores (Placas e Velocidades) para armazenar a placa (apenas os 4 digitos finais) e a velocidade de cada veículo multado. Quando o sensor (usuário) captar (digitar) 0(zero) no tempo, significa que o radar foi retirado da estrada e o programa deve ser encerrado. 4.2.11 Em um depósito de pisos usados, o gerente deseja um programa onde o cliente possa dizer quantos metros quadrados deseja cobrir de piso e ele possa dizer qual dos pisos (padrão 0,2 x 0,2 m) ele tem quantidade suficiente disponível. O programa deve carregar em cada posição do vetor “Pisos” a quantidade disponível de cada tipo de piso (o índice será o código do piso). Para cada cliente deverá ser digitado a quantidade em metros quadrados da área a ser coberta e o programa mostrará o código de todos os pisos com quantidades suficientes. Linguagem de Programação C 33 4.2.12 Considere um sistema de sensoriamento de aquecimento de telhas em um determinado dia (24 horas). Duas telhas são expostas ao sol com sensores sobre elas, uma com uma tinta especial (telha 1) e outra não (telha 2 ). A cada 15 minutos o sensor capta (usuário digita) a temperatura das telhas as quais são registradas em dois vetores distintos (TempTelha1 e TempTelha2). Mostre qual das telhas teve menor aquecimento médio durante todo o dia. 4.2.13Um sistema de verificação de gastos elétricos foi implantado em uma residência. A princípio, apenas dois aparelhos estão sendo medidos: ferro elétrico (codigo 1) e chuveiro (codigo 2). Sempre que um destes aparelhos é usado, o sensor capta o código (guardando-o em um vetor) e o quanto gastou em KW (guardando-o em um outro vetor de índice correspondente). Mostre ao final do dia (sensor capta código 0), quanto foi gasto por cada um dos aparelhos. 4.2.14Foi realizada uma pesquisa quanto a religião da população de uma determinada cidade. Receba do usuário, os códigos ((P) protestante, (B) budista ou (C) católica) da religião dos 1000 moradores desta cidade, guardando-os em um vetor. Mostre o percentual de budistas, protestantes e de católicos existentes na cidade. 4.2.15Um elevador tem sua carga máxima estipulada em 600 Kg. Um sensor foi instalado para controlar este limite e avisar aos usuários sobre o perigo de excesso de peso. O sensor capta código 1 quando uma pessoa entra, código 2 quando sai e código zero quando o dia termina. A cada pessoa que entra seu peso é registrado em um vetor como valor positivo e quando a pessoa sai seu peso é registrado como valor negativo. Sempre que o Linguagem de Programação C 34 elevador ultrapassar sua carga máxima, é mostrado em um monitor um aviso de “Peso Excedido”. Faça um programa que execute a simulação de pessoas entrando e saindo do elevador. Os valores devem ser digitados pelo usuário. 4.2.16Um sistema de auditoria foi instalado para verificar a movimentação diária de uma determinada conta bancária suspeita. Toda movimentação é registrada em um vetor. Os créditos são valores positivos e os débitos negativos. O sistema emite alerta se a movimentação foi ou não zerada (créditos = débitos) ao final do dia. A movimentação termina com valor 0. Linguagem de Programação C 35 5 - String String é uma cadeia de caracteres, ou seja, um sequência de caracteres que são alocados na memória de forma contígua. Uma característica particular da string é o seu terminador (‘\0’), que é colocado na última posição da cadeia. Dessa forma, quando o printf() imprime um string, ele imprime todos os caracteres até que encontre um ‘\0’. Nós podemos declarar um string da seguinte forma: char nome[10]; quando fazemos esta declaração, o compilador reserva um espaço em memória chamado nome com tamanho de 10 caracteres, e vincula a cada posição um numero de identificação o qual chamamos de índice. O índice da primeira posição será sempre 0 (zero). Quando pedimos para o usuário digitar algo em um string, o compilador automaticamente aloca o terminador '\0' para a posição que sucede o último caractere digitado pelo usuário. Geralmente, utilizamos a função gets() para receber strings do usuário, pois esta função permite a digitação de várias palavras no string, diferente do scanf() que permite apenas uma. Assim: gets(nome); recebe um string do usuário e coloca, automaticamente, um terminador no final. Cada posição do string pode ser acessada separadamente, assim: strcpy(nome,”Isto e um string"); printf(“%c”,nome[2]); // imprimirá o caractere 't' A linguagem C/C++ fornece uma biblioteca de funções para manipulação de strings. Para utiliza-la, você deve incluir em seu programa o header string.h. Algumas dessas funções são: strcpy(): copia o conteúdo de um string para outro. strcmp(): compara o conteúdo de duas strings. strlen(): devolve o tamanho da string strcat(): concatena duas strings Para verificar a relação de todas elas assim como sua sintaxe, verifique a documentação do header string.h. Digite o Exemplo 5.1:- Faça um programa que atribua o conteúdo de uma string para outra Linguagem de Programação C 36 string e mostre-a na tela. 1 #include <stdio.h> Permite inclusão de funções de i/o 2 #include <string.h> Permite inclusão de funções para manipulação de string 3 #include <conio.h> Permite inclusão da função getch() 4 int main(){ Abre função principal 5 char string[10]; Declara variavel “string” de 10 posições 6 char str1[10] = "abcdefghi"; Declara variável “str1” de 10 posições e inicializa com “abcdefghi” 7 strcpy(string, str1); Copia conteúdo de “str1” para “string” 8 printf(“%s”, string); Imprime o conteúdo de “string” 9 getch(); Pára a execução do programa 10 } Fecha função principal Digite o Exemplo 5.2:- Faça um programa que compare o conteúdo de strings e dê mensagens indicando o resultado da comparação. 1 #include <stdio.h> Permite inclusão de funções de i/o 2 #include <string.h> Permite inclusão de funções para manipulação de string 3 #include <conio.h> Permite inclusão da função getch() 4 int main(){ Abre função principal 5 char buf1[4] = "aaa", buf2[4] = "bbb", buf3[4] = "ccc"; Declara e inicializa variáveis 6 int ptr; Declara variável “ptr” 7 ptr = strcmp(buf2, buf1); Compara conteúdo de “buf2” com conteúdo de “buf1”. Atribui para “ptr” 0, 1 ou -1,caso sejam iguais, buf2 maior que buf1 ou buf2 menor que buf1, respectivamente. 8 if (ptr > 0){ Verifica se “ptr” é maior que 0 (buf2 maior que buf1) 9 printf("buffer 2 eh maior que buffer 1\n"); Caso seja, mostra mensagem 10 } Fecha if 11 else{ Abre else 12if (ptr == 0){ Verifica se “ptr” é igual a 0 (buf2 igual buf1) 13 printf("buffer 2 eh igual ao buffer 1\n"); Caso seja, mostra mensagem 14 } Fecha if Linguagem de Programação C 37 15 else{ Abre else 16 printf("buffer 2 eh menor que o buffer 1\n"); Mostra mensagem, pois se entrou aqui é porque negou as duas condiões acima (com certeza buf2 é menor que buf1) 17 } Fecha else 18 } Fecha else 19 ptr = strcmp(buf2, buf3); Compara conteúdo de “buf2” com conteúdo de “buf3”. Atribui para “ptr” 0, 1 ou -1,caso sejam iguais, buf2 maior que buf1 ou buf2 menor que buf1, respectivamente. 20 if (ptr > 0){ Verifica se “ptr” é maior que 0 (buf2 maior que buf3) 21 printf("buffer 2 eh maior que buffer 3\n"); Caso seja, mostra mensagem 22 } Fecha if 23 else{ Abre else 24 if (ptr == 0){ Verifica se “ptr” é igual a 0 (buf2 igual buf3) 25 printf("buffer 2 eh igual ao buffer 3\n"); Caso seja, mostra mensagem 26 } Fecha if 27 else{ Abre else 28 printf("buffer 2 eh menor que o buffer 3\n"); Mostra mensagem, pois se entrou aqui é porque negou as duas condiões acima (com certeza buf2 é menor que buf3) 29 } Fecha else 30 } Fecha else 31 getch(); Pará a execução do programa 32 } Fecha função principal Digite o Exemplo 5.3- Faça um programa que mostre a quantidade de caracteres de uma string. 1 #include <stdio.h> Permite inclusão de funções de i/o 2 #include <string.h> Permite inclusão de funções para manipulação de string 3 #include <conio.h> Permite inclusão da função getch() 4 #include <stdio.h> Permite inclusão de funções de i/o 5 #include <string.h> Permite inclusão de funções para manipulação de string 6 int main(){ Abre função principal Linguagem de Programação C 38 7 char string[25] = "Kesede Rodrigues Julio"; Declara e inicializa variavel“string” de 25 posições 8 printf(“%d”,strlen(string)); Strlen() retorna a quantidade de caracteres que a variável string contém. O resultado é mostrado na tela 9 getch(); Pára a execução do programa 10 } Fecha função principal Digite o Exemplo 5.4:- Faça um programa que concatene duas strings e mostre o resultado da concatenação na tela. 1 #include <stdio.h> Permite inclusão de funções de i/o 2 #include <string.h> Permite inclusão de funções para manipulação de string 3 #include <conio.h> Permite inclusão da função getch() 4 #include <string.h> Permite inclusão de funções para manipulação de strings 5 #include <stdio.h> Permite inclusão de funções de i/o 6 int main(){ Abre função principal 7 char destino[25]; Declara e inicializa variavel “destino” de 25 posições 8 char espaco[2] = " ", sobrenome[10] = "Rodrigues", nome[10] = "Kesede"; Declara variáveis strings 9 strcpy(destino, nome); Copia nome para destino 10 strcat(destino, espaco); Concatena (junta) espaço com destino 11 strcat(destino, sobrenome); Concatena (junta) sobrenome com destino 12 printf(“%s”, destino); Imprime destino 13 getch(); Pará a execução do programa 14 } Fecha função principal 5.1Exercícios 5.1.1Faça um programa que receba uma frase do usuário e mostre quantas vogais a frase contem. 5.1.2Faça um programa que mostre o número de palavras contidas em um string. O string deve ser fornecido pelo usuário. Linguagem de Programação C 39 5.1.3 Um programa de criptografia codifica as vogais a, e, i, o, u como 1, 2 ,3, 4, 5, respectivamente. Faça um programa que receba uma frase codificada do usuário e mostre-a decodificada. 5.1.4 Faça um programa que receba o nome completo do usuário e mostre a abreviatura do seu nome. 5.1.5 Faça uma função que receba um string como parâmetro e devolva o conteúdo da string em ordem alfabética. Um string é um vetor de caracteres contendo '\0' como finalizador. void stralf(char *s1); 5.1.6 Faça um programa que receba uma frase do usuário. Construa outra string contendo a primeira letra de cada palavra, da última até a primeira, separados por espaços em branco. Ex.: Frase : Nesta prova vou tirar um dez. Iniciais: d u t v p N 5.1.7 Faça um programa que receba um string do usuário e guarde em um vetor os índices da string que contem a letra 'a'. 5.1.8 Faça um programa que receba o nome completo do usuário, construa outra string com o primeiro nome completo e os outros abreviados, separados por espaços em branco. Ex.: Nome Completo : Kesede Rodrigues Julio Nome Abreviado: Kesede R J 5.1.9Faça um programa que receba do usuário em duas strings distintas, uma frase e uma sequencia de duas letras, supostamente contida na frase. Mostre quantas vezes a sequencia aparece na frase. Ex.: Frase: Descobertos mais ossos de polêmica espécie de hominídeos Sequencia: es Resultado: 2 5.1.10Faça um programa que receba uma frase do usuário e mostre a quantidade de ditongos e/ou hiatos (duas vogais consecutivas) encontrados. 5.1.11 Faça um programa que mostre para o usuário uma string contendo o primeiro e o último nome de uma pessoa. O programa deve receber do usuário uma string contendo o nome completo da pessoa. Linguagem de Programação C 40 5.1.12 Faça um programa que receba o nome completo da pessoa e devolva este nome na forma bibliográfica. 5.1.13Faça um programa que receba uma frase do usuário. Logo em seguida receba também uma palavra. O programa deve mostrar uma mensagem dizendo se a palavra digitada esta contida ou não na frase. 5.1.14Faça um Jogo da Forca. Linguagem de Programação C 41 6 - Matriz São vetores multi-dimensionais. Ao invés de trabalharmos com um único índice, trabalhamos com vários. Em nossa analogia com ruas e casas, no caso dos vetores, teríamos aqui a comparação com um quarteirão. Assim, além dos números das casas teremos que saber o número da rua onde ela se localiza. Desta forma, a[3][3]; reserva 9 posições na memória, podendo, conceitualmente, considerar o 1º índice como linha e o segundo como coluna. 0 1 2 0 10 20 43 1 27 8 78 2 82 3 7 Figura 6.1 - Alocação de elementos em uma matriz 3x3. Para acessarmos qualquer posição, basta escrever o nome da variável juntamente com o número do índice da linha e o da coluna. Assim, a[1][2] = 78; colocará o valor 78 para a 2ª linha da 3ª coluna. (o índice começa em 0). Geralmente, temos um número grande de posições e precisamos de um comando de looping para nos ajudar a modificar os índices sem muita escrita de código. Portanto, for (i=0;i<10;i++){ for (j=0;j<10;j++){ a[i][j] = 0; } } colocará o valor 0 (zero) para toda a matriz, percorrendo todas as colunas de todas as linhas. Linguagem de Programação C 42 Digite o exemplo 6.1: Faça um programa que carregue, a partir do usuário, uma matriz 10x10 representando o centro de uma cidade. Cada índice, contém o número de acidentes anual ocorridos em cada cruzamento. O programa deve mostrar a esquina (linha e coluna) que ocorreu o maior número de acidentes. 1 #include <stdio.h> Include arquivo de cabeçalho 2 int main(){ Abre função principal 3 int ac[10][10], i_maior, j_maior, i, j, maior, tot=0; Declaravariáveis. 4 for(i=0; i<10; i++){ for(j=0; j<10;j++){ scanf(“%i”, &ac[i][j]); } } Carrega a matriz a partir do usuário 5 maior=ac[0][0]; for(i=0; i<10; i++){ for(j=0; j<10;j++){ if(ac[i][j] > maior){ i_maior=i; j_maior=j; maior=ac[i][j]; } } } printf(“A rua %i esquina com %i teve %i acidentes, sendo a esquina com maior nr de acidentes do centro.”, i_maior,j_maior, maior); getch(); Incializa a variavel auxiliar “maior” com o primeiro elemento da matriz. Em seguida, percorre a matriz verificando se existe algum elemento maior que o primeiro, guardado na variavel “maior”. Caso exista, atualiza “maior” e guarda os índices (esquina) deste elemento. Ao final, imprime e pára o programa. 6 } Fecha main() 6.1Exercícios 6.1.1 Faça um programa que carregue em uma matriz as notas dos 30 alunos das 3 turmas que um professor leciona. Mostre a media de cada turma. 6.1.2 Faça um programa que mostre o menor valor de uma matriz. Receba os valores e a ordem da matriz, a partir do usuário. 6.1.3 Faça um programa em C que receba do usuário uma matriz NxM (N é o número de linhas e M o número de colunas) de números inteiros, e armazene na linha N-1 o somatório dos elementos de cada coluna (linhas de 0 a N-2). Exibir os Linguagem de Programação C 43 resultados. Como exemplo, considere a matriz 4 x 2 a seguir. A última linha conterá o somatório das linhas anteriores. Ex.: 0 1 0 4 2 1 5 9 2 8 20 3 17 31 6.1.4 Faça a multiplicação de duas matrizes. Receba os valores e as ordens das matrizes, a partir do usuário. Faça todas as consistências necessárias. 6.1.5 Preencha uma matriz quadrada de ordem 4, da seguinte forma: se i <> j, m[i, j] = 0 e se i = j, m[i, j] = 1 6.1.6 Mostre quantos elementos diferentes de zero existem em uma matriz. A ordem e seus valores devem ser recebidos pelo usuário. 6.1.7 Verifique se uma determinada matriz é simétrica. A ordem e seus valores devem ser recebidos pelo usuário. 6.1.8 Faça um programa que carregue uma matriz de inteiros 5x5, a partir do usuário. Mostre na tela a somatória de todos os valores, exceto os valores da diagonal principal. 6.1.9 Faça um programa que carregue uma matriz de inteiros 10x10, a partir do usuário. Carregue um vetor com os valores da diagonal secundária da matriz. 6.1.10 Faça um programa que carregue uma matriz de inteiros 10x10, a partir do usuário. Mostre na tela a somatória de todos os valores, exceto os valores das linhas pares. 6.1.11 Faça um programa que carregue uma matriz de inteiros 10x10, a partir do usuário. Carregue um vetor com os valores da diagonal secundária da matriz. 6.1.12 Em uma auto-pecas, o proprietário deseja manter uma tabela de custos de suas peças. Nesta tabela, cada coluna representa uma peca e cada linha o preço de custo de cada fornecedor. Faça um programa que permita ao proprietário carregar esta tabela e logo em seguida digitar o código de uma Linguagem de Programação C 44 peça (índice da coluna) para que o programa possa mostrar qual o código do fornecedor (índice da linha) que tem o preço de custo mais barato. 6.1.13 Em uma transportadora, as distâncias entre cidades, são dadas por uma tabela, onde as linhas são as cidades de origem, e as colunas de destino, e portanto os valores da diagonal principal desta matriz é zero. Os índices da matriz são os códigos das cidades. Permita que seu programa mostre qual o destino mais distante, dado uma origem. O programa deve receber a tabela de distancias (100 x 100), e logo em seguida, receber o código da origem. 6.1.14 Considere que um engenheiro deseja saber qual a distância entre diversas localizações em uma área. Para isto ele tem em mãos apenas as coordenadas x,y de cada localização. Faça um programa que permita que o engenheiro carregue uma tabela (nx5) onde as colunas representem as coordenadas x,y de cada ponto, assim como a distância entre eles. O cálculo da distância é dado por: . O valor de n será dado pelo usuário. 6.1.15 Considere uma imagem nivel de cinza representada por uma matriz (512x512), onde cada posição contem um valor inteiro equivalendo a tonalidade da cor (0..255) naquele ponto. Carregue as tonalidades de cor de uma linha (vetor de 512) desta imagem através do usuário. Após o carregamento , faça a suavização desta imagem da seguinte forma: o valor da posição será igual a média do seu valor e de seus vizinhos Vi = (Vi-1 + Vi + Vi+1) / 3. Linguagem de Programação C 45 22 )12()12( yyxxd −+−= 7 - Estruturas Heterogêneas Uma estrutura heterogênea permitir agrupar variáveis de tipos diferentes em um espaço contíguo na memória, facilitando assim a manipulação destas informações. Informações pertencentes a mesma entidade são passíveis de serem agrupadas em uma estrutura heterogênea, como: coordenadas de um ponto, descrições de uma máquina, score de um jogador etc. Para construirmos estruturas heterogêneas em linguagem C, usamos uma “struct”. Ex.: struct jogador{ char nome[40]; int scoreMensal; int scoreDiario; }; para podermos utilizar (incluir e consultar) estes informações, devemos declarar uma variável do tipo struct, usando o nome da struct, neste caso, jogador. Ex.: jogador jog1, jog2; Neste caso, instanciamos (declaramos) dois jogadores com a mesma estrutura de dados. Agora, podemos atribuir valores para nossas duas instâncias. Ex.: gets(jog1.nome); jog1.scoreMensal=2500; jog1.scoreDiario=150; gets(jog2.nome); jog2.scoreMensal=3400; jog2.scoreDiario=100; Note que temos que usar o “.” (ponto) para separar o nome da variável estrutura (variável declarada do tipo estrutura) da variável membro (variáveis internas). Como uma estrutura funciona como um tipo, podemos declarar vetores e até matrizes de estruturas. Por exemplo, se tivéssemos 10 ou 100 jogadores, não seria prático declararmos uma variável para cada jogador, assim poderíamos declarar uma variável vetor do tipo estrutura. Ex.: Linguagem de Programação C 46 jogador jog[100]; Desta forma, fica fácil executar um looping que carregue, a partir do usuário, o nome de todos os jogadores. Ex.: for (c=0;c<100;c++){ gets(jog[c].nome); } Algumas considerações devem ser relevadas, assim como: 1. Variável estrutura pode receber, de uma só vez, todo o conteúdo de outra variável estrutura. 2. Uma estrutura pode conter outras estruturas, ou seja, podemos ter estruturas aninhadas./ 3. Podem ser passadas como parâmetro, por valor ou por referência. 4. Variável do tipo estrutura pode ser retornada de funções. O Exemplo abaixo mostra um uso prático. Digite o exemplo 7.1: Faça um programa que carregue, a partir do usuário, os dados geográficos das cidades do Brasil. Inclua estas informações em um vetor de estrutura. Os dados são: nome da cidade, x e y (a origem 0,0 deste sistema é Brasília). Após a inclusão destes dados, o programa deve permitir ao usuário a digitação de um cidade qualquer, sua referência x e y, e listar a distância desta cidade em relação a cada cidade cadastrada. 1 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <ctype.h> #include <math.h> Include arquivos de cabeçalho 2 int main(){ Abre função principal 3 typedef struct DadosGeo{ char nome[50]; int x, y;
Compartilhar