Tutorial Básico

Tutorial Básico para Iniciantes em Linguagem C

Siga este tutorial respeitando exatamente as instruções nele contidas. Transcreva os blocos de código exatamente como eles estão escritos a fim de evitar erros. Avance para a etapa seguinte apenas após concluir as etapas anteriores. O objetivo deste tutorial é introduzir a linguagem C para iniciantes em programação. É recomendado usar algum material complementar impresso para acompanhamento, como um livro ou apostila. Alguns livros são indicados logo abaixo.

Livros

SCHILDT, Herbert. C, completo e total. 3.ed.rev.atual. São Paulo-SP: Pearson Makron Books, 1997/2008. 827 p

MIZRAHI, Victorine Viviane. Treinamento em linguagem C. 2.ed. São Paulo-SP: Pearson Prentice Hall, 2008. 405 p

ARAUJO, Jário. Dominando a linguagem C. Rio de Janeiro-RJ: Ciência moderna 2004. 146 p

Este tutorial não define um ambiente de desenvolvimento (IDE) e pode ser usado em qualquer ambiente. Como ambiente de desenvolvimento podem ser citados o DevC++ e Code Blocks.

Parte 1: Construindo um programa vazio.

A linguagem C é uma linguagem de alto nível capaz de traduzir instruções escrita num código-fonte em instruções compreensíveis a um computador. A escrita do código-fonte obedece a uma série de regras de ortografia (basicamente, palavras em inglês) e sintaxe (relação entre as palavras). Atenha-se aos livros e materiais complementares para aprender essas regras de escrita. O código-fonte produzido deverá ser compilado (traduzido para linguagem compreensível ao computador), gerando um programa executável pelo computador.

O código abaixo determina um programa básico em C. O programa é vazio: apenas cria o bloco principal main(). O bloco main() é obrigatório em programas simples em C.

#include <stdio.h>

/*Isso eh um comentario e eh ignorado pelo compilador*/

/*Criando o bloco principal*/

int main() {

/*Este programa nao faz nada*/

return 0;

}

Transcreva o código acima para um editor. Compile e execute o programa. Observe os seguintes pontos:

· Instruções em C geralmente terminam com ponto-e-vírgula;

· A linguagem C deriva do inglês. Logo, as instruções serão predominantemente em inglês;

· Programas escritos em linguagem C são compilados. Isso significa que todo o código fonte é processado para gerar o programa executável. Caso exista algum erro no código (ortografia e sintaxe), o processo de compilação não gera o programa (e os erros são indicados). Logo, o programa só é gerado caso o código não contenha erros de ortografia ou sintaxe;

o Note que erros de semânticos (de lógica) não são detectados pelo compilador;

· Comentários são inseridos entre /* */. Comentários não são interpretados pelo compilador; São inseridos pelos programadores e servem apenas como orientação;

· A diretiva #include adiciona bibliotecas para o uso de certas funções no programa. Não se preocupe com isso, por agora;

· O comando return 0 na última linha representa o valor de retorno para o bloco em questão, nesse caso o bloco main(). Não se preocupe com isso por agora, apenas lembre de sempre adicionar essa linha no final do programa;

· Blocos em linguagem C são delimitados por chaves {}. Em portugol usamos o delimitador fim. Em C, todo bloco é delimitado por chaves, podendo haver um bloco interno a outro. Esquecer de fechar uma chave, ou excesso de chaves abertas ou fechadas é um erro de sintaxe. Uma sugestão é sempre inserir as chaves aos pares ao criar um novo bloco;

· O compilador C ignora múltiplos espaços em branco, tabulações e linhas em branco. Um código pode ser todo escrito em única linha, com comandos separados por ponto e vírgula. Entretanto, espaços, tabulações e linhas em branco são usadas para organizar o código.

· Utilize esse bloco para começar a escrever qualquer programa em C.

Parte 2: “Hello World”.

A próxima etapa será escrever uma mensagem de texto na tela.

#include <stdio.h>

/*Isso eh um comentario e eh ignorado pelo compilador*/

/*Criando o bloco principal*/

int main() {

/*Este programa imprime uma mensagem simples na tela*/

printf ("Hello World!\n");

return 0;

}

Transcreva o código acima para o compilador. Compile e execute o programa. Observe os seguintes pontos:

· A função usada para imprimir na tela é printf(). Ela lembra a função escreva() definida em português estruturado;

· Texto puro é escrito entre aspas duplas. Ex.: “Isso eh um texto”;

· Por efeito de esclarecimento, aspas simples são usadas para representar um único caractere. Ex.: 'a' é um caractere e é diferente de "a". Não se preocupe com isso por agora;

· São possíveis algumas sequências especiais para escape (códigos ou caracteres especiais). Por exemplo, “\n” significa uma nova linha. Vamos aprender alguns desses códigos, aos poucos;

· Não utilize acentos.

Realize as seguintes alterações no código:

1. Modifique a frase para que o programa escreva seu nome na tela;

2. Substitua o texto impresso por “Ola!\nMeu nome eh Computador\nQual seu nome?”;

Parte 3: Declaração de Variáveis.

Programas de computador processam dados disponibilizados em memória/registradores. Uma forma de representar esses dados num programa é através de variáveis. As variáveis possuem tipos distintos, assim com as informações possíveis no nosso dia a dia (seu nome é um texto, sua idade é uma quantia inteira e sua altura é um valor real). No próximo exemplo vamos lidar com três tipos primitivos de dados. Caractere, Inteiro e Real (ponto flutuante).

#include <stdio.h>

/*Criando o bloco principal*/

int main() {

/*Este programa cria variaveis de varios tipos*/

int idade; /*declaracao de uma variavel inteira*/

float altura; /*declaracao de uma variavel ponto flutuante*/

char inicialNome; /*declaracao de uma variavel caractere*/

idade = 25;

altura = 1.76;

inicialNome = 'L';

return 0;

}

Transcreva o código acima para o compilador. Compile e execute o programa. Observe os seguintes pontos:

· Para declarar uma variável, utiliza a sintaxe TIPO nome_da_variavel;

o Inteiro é representado por int

o Ponto Flutuante é representado por float

o Caractere é representado por char

· Ponto Flutuante é uma representação de número real, porém com precisão limitada. O separador de decimais é o ponto (.);

· Em C, o tipo char armazena apenas um caractere;

· Podem ser declaradas várias variáveis num mesmo programa, entretanto os nomes não podem ser iguais;

· Nomes de variáveis (identificadores) são case-sensitive: há diferenciação entre maiúsculas e minúsculas. Sendo assim, num é uma variável e Num é outra variável.

· Em linguagem C, o comando de atribuição é “=” (em portugol é ←). A atribuição armazena um valor numa variável.

Parte 4: Lendo valores do usuário e imprimindo na tela.

Programas de computador interagem com o usuário através de comandos de entrada e saída. No próximo exemplo vamos ver dois comandos de entrada e saída comumente usados em linguagem C. Essas funções são definidas na biblioteca stdio.h.

#include <stdio.h>

int main() {

/*Este programa le valores do usuario, armazena

em variaveis de varios tipos e imprime na tela*/

int idade; /*declaracao de uma variavel inteira*/

float altura; /*declaracao de uma variavel ponto flutuante*/

/*Lendo variaveis do usuario*/

printf ("Lendo dados\n");

scanf ("%d", &idade);

scanf ("%f", &altura);

/*Escrevendo as variaveis do usuario*/

printf ("Escrevendo dados\n");

printf ("%d\n", idade);

printf ("%f\n", altura);

printf ("A idade eh %d e a altura eh %f\n", idade, altura);

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· Uma função utilizada para ler dados do usuário é scanf(). Ela possui uma sintaxe que deve ser obedecida: scanf (“tipo”, &nome_da_variavel);

o nome_da_variavel é o nome de uma variável declarada previamente

o “tipo” é uma sequência que obedece ao tipo da variável que será lida. Use “%d” para int e “%f” para float.

o O uso do caractere & é obrigatório. Porém, há exceções. O caractere & significa que o valor lido deve ser armazenado no endereço indicado pelo identificador nome_da_variavel. Não se preocupe com isso por agora;

o Entretanto caso esqueça de inserir o caractere & o compilador NÃO acusará erro por não se tratar de fato de um erro. Entretanto provavelmente ocorrerá um erro de execução.

· Uma função utilizada para escrever na tela é printf(). Ela possui uma sintaxe semelhante à função scanf() (note a ausência do caractere &);

· Note que é possível escrever combinações de texto e valores de variáveis usando um único comando printf(). Isso pode ser observado no último printf() usado no programa;

· Fazendo uma analogia com o português estruturado:

o scanf() é semelhante ao comando leia;

o printf() é semelhante ao comando escreva.

Realize as seguintes alterações no código:

1. Insira uma terceira variável, peso, que será lida pelo usuário e impressa na tela;

Parte 5: Calculando a soma de dois números

As linguagens de programação em geral definem uma série de operadores matemáticos para realizar operações envolvendo números e valores de variáveis. No próximo exemplo vamos ver como pode ser feita uma soma simples entre dois números.

#include <stdio.h>

int main() {

/*Este programa le valores do usuario, armazena

em variáveis, soma os valores e imprime na tela*/

int num1, num2; /*declaracao de duas variaveis inteiras*/

int resultado; /*declaracao de outra variavel inteira*/

/*Lendo variaveis do usuario*/

printf ("Lendo dados\n");

scanf ("%d", &num1);

scanf ("%d", &num2);

/*Escrevendo as variaveis do usuario*/

printf ("Escrevendo dados\n");

resultado = num1 + num2;

printf ("O resultado eh %d\n", resultado);

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· A linguagem define operadores aritméticos para operar números: soma (+), subtração (-), multiplicação (*), divisão (/) e resto (%).

o A operação resto só pode ser realizada entre números inteiros;

o Uma divisão entre dois números inteiros resulta num número inteiro;

o Divisões envolvendo ponto flutuante sempre resulta em ponto flutuante.

· Cuidado com a variável onde vai armazenar os resultados. Variáveis inteiras não armazenam valores decimais. Sendo assim, cuidado dobrado com divisões;

· A linguagem C trabalha com conversões implícitas, permitindo armazenar praticamente qualquer resultado numa variável de qualquer tipo (tipificação fraca). Isso não é regra, mas é bom ficar atento.

· Note que é possível escrever combinações de operadores, resultando em expressões aritméticas. A precedência entre operadores é a mesma usada em matemática básica. São admitidos parêntesis em expressões aritméticas.

Realize as seguintes alterações no código:

1. Altere o programa para realizar a subtração entre dois números inteiros;

2. Altere o programa para realizar a soma entre três números inteiros;

3. Altere o programa para realizar a soma entre dois pontos flutuantes;

4. Altere o programa para realizar a soma entre dois pontos flutuantes, porém armazene numa variável do tipo inteiro antes de imprimir e observe o resultado;

Parte 5A: Funções Matemáticas

As linguagens de programação em geral definem uma série de operadores matemáticos para realizar operações envolvendo números e valores de variáveis. Funções matemáticas NÃO são definidas nativamente na linguagem C. Entretanto podem ser usadas bibliotecas para oferecer funções matemáticas pré definidas. No próximo exemplo vamos ver o uso de algumas funções matemáticas definidas na biblioteca math.h.

#include <stdio.h>

#include <math.h> /* biblioteca math.h*/

int main() {

/*alguns exemplos de funcoes matematicas*/

float x, y; /*declaracao de duas variaveis ponto. flutuante*/

printf ("Lendo dados\n");

scanf ("%f", &x);

scanf ("%f", &y);

printf ("Potencia pot(x,y) = %f\n", pow(x,y));

printf ("Raiz quadrada rad(x) = %f\n", sqrt(x));

printf ("Logaritmo de x na base e = %f\n", log(x));

printf ("Logaritmo de x na base 10 = %f\n", log10(x));

return 0;

}

Algumas funções definidas em math.h

· floor(x): arredonda x para baixo

· ceil(x): arredonda x para cima

· sqrt(x): Calcula raiz quadrada de x

· pow(x,y): potenciação xy.

· sin(x): seno de x, com x em radianos

· cos(x): cosseno de x, com x em radianos

· tan(x): Tangente de x, com x em radianos

· log(x): logaritmo natural de x (base e)

· log10(x): logaritmo de x na base 10

Parte 6: Calculando a área de um triângulo

No próximo exemplo vamos ver como pode ser feita o cálculo simples da área de um triângulo. Os valores de base a altura são fornecidos pelo usuário.

#include <stdio.h>

int main() {

/*Este programa calcula a area de um triangulo.

Valores para base e altura sao lidos do usuario.

O resultado eh impresso na tela*/

/*declaracao de duas variaveis float (reais)*/

float base, altura;

float area; /*declaracao de outra variavel float*/

/*Lendo variaveis do usuario*/

printf ("Lendo dados\n");

scanf ("%f", &base);

scanf ("%f", &altura);

/*Calculando o resultado e escrevendo*/

printf ("Calculando...\n");

area = base * altura / 2;

printf ("A area do triangulo eh %.2f\n", area);

return 0;

}

Compile e execute o programa Observe os seguintes pontos:

· A formatação "%.2f" no comando printf resulta na impressão de um ponto flutuante exibindo exatamente duas casas decimais. Para exibir quatro casas decimais, pode ser utilizado "%.4f";

o Existem várias strings de formatação possíveis para o comando printf(), envolvendo diversos tipos. Ao longo desse tutorial veremos algumas delas.

Realize as seguintes alterações no código:

1. Altere o programa para calcular a área de um retângulo;

2. Altere o programa para calcular a área de uma circunferência (adote PI = 3.14);

a. área = PI*raio*raio

3. Altere o programa para calcular a área de um trapézio. Utilize parênteses na expressão por conta da precedência de operadores

a. área = (base_maior + base_menor)*altura/2

Parte 7.1: Desvios condicionais (parte 1)

Até agora vimos programas cuja execução segue um padrão sequencial, ou seja, uma instrução é realizada após a outra, sem desvios. Neste exemplo vamos observar como inserir desvios condicionais simples no código através do comando if (<condição>).

#include <stdio.h>

int main() {

/*Este programa verifica a nota de um estudante

e informa se ele foi aprovado ou nao

*/

float nota;

/*Lendo variaveis do usuario*/

printf ("Informe a nota do aluno\n");

scanf ("%f", &nota);

/*A execucao do codigo dependera do valor da variavel nota*/

if (nota >= 7) { /*nota maior ou igual a 7*/

printf ("Aluno aprovado por nota %.2f\n", nota);

}

if (nota == 7) {

printf ("Aprovacao no limite da nota.\n");

}

if (nota < 3) { /*nota inferior a 3*/

printf ("Aluno reprovado com nota %.2f\n", nota);

}

if ( (nota >= 3) && (nota < 7) ){ /*nota entre 3 e 7*/

printf ("Aluno apto para realizar exame final\n");

}

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· A linguagem define vários operadores condicionais para operar números: maior (>), maior ou igual (>=), menor (<), menor ou igual (<=), igual (==) e diferente (!=);

o Cuidado: não confunda igualdade “==” com atribuição “=”;

· O resultado de uma operação condicional (comparação) é um valor lógico: verdadeiro (não zero) ou falso (zero);

o Valores lógicos podem ser combinados em expressões lógicas utilizando os operadores E (&&), OU (||) e NÃO (!)

§ Exemplo 1.: ((X > 3) && (X <= 7)) significa verdade se X é maior que três E X é menor ou igual a sete;

§ Exemplo 2.: ((X > 3) || (Y <= 7)) significa verdade se X é maior que três OU Y é menor ou igual a sete

§ Exemplo 3.: ( !(X % 3 == 0) ) significa verdade se o resto da divisão por X (operador %) NÃO é igual a zero

· Cuidado com os nomes das variáveis: Num é diferente de num;

Realize as seguintes alterações no código:

1. Altere o programa para escrever uma mensagem adicional “Estude mais!” caso a nota do aluno seja exatamente sete;

2. Altere o programa para escrever uma mensagem adicional “Parabens!” caso a nota do aluno seja igual ou superior a nove;

3.

Parte 7.2: Desvios condicionais (parte 2)

Neste exemplo vamos observar como inserir desvios condicionais compostos no código através do comando if () ... else.

#include <stdio.h>

int main() {

/*Este programa verifica a nota de um estudante

e informa se ele foi aprovado ou nao

*/

float nota;

/*Lendo variaveis do usuario*/

printf ("Informe a nota do aluno\n");

scanf ("%f", &nota);

/*A execucao do codigo dependera do valor da variavel nota*/

if (nota >= 7) { /*nota maior ou igual a 7*/

printf ("Aluno aprovado com nota %.2f\n", nota);

}

else {

printf ("Aluno nao aprovado por media.\n");

if (nota < 3) /*nota inferior a 3*/

printf ("Aluno reprovado com nota %.2f\n", nota);

else

printf ("Aluno apto a realizar exame final\n");

}

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· O desvio if (<condição>) {comandos 1;} else {comandos 2;} introduz dois caminhos disjuntos para o código: se a condição for verdadeira é são executados os comandos 1; caso contrário são executados os comandos 2

o Em outras palavras, não é possível que ambos comandos 1 e comandos 2 sejam executados numa mesma execução;

Realize as seguintes alterações no código:

1. Altere o programa para ler a nota da prova final do aluno. A prova final só é feita por aqueles com nota entre três e sete. O aluno é aprovado no exame caso a nota do exame seja igual ou maior a seis;

Parte 8.1: Comandos de repetição com teste no início (while)

Até agora vimos programas cujos blocos são executados uma única vez. Neste exemplo vamos observar como inserir estruturas de repetição em pequenas partes do código.

#include <stdio.h>

int main() {

/*Este programa le um numero do usuario.

O programa conta de 1 ateh o numero inserido*/

int num;

int contador = 1; /*inicia contador com 1*/

/*Lendo variaveis do usuario*/

printf ("Informe um numero inteiro maior que 1\n");

scanf ("%d", &num);

/*Contando*/

/*enquanto o contador for menor ou igual a num*/

while (contador <= num) {

printf ("Contador agora eh %d\n", contador);

contador = contador + 1;

}

printf ("A contagem acabou\n");

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· O comando while (<condição>) {comandos;} repete a execução dos comandos enquanto a condição for VERDADEIRA;

o Esse comando é equivalente à construção enquanto...faça usada no português estruturado;

· A cada vez que os comandos são executados, a execução é desviada para o teste da condição. Em outras palavras, a condição é verificada cada vez que o bloco de comandos dentro do while é executado.

o A condição verdadeira ou falsa de acordo com o valor das variáveis. Cabe ao programador garantir que a condição deixe de ser satisfeita em algum momento, caso contrário o programa executará indefinidamente (loop infinito).

Realize as seguintes alterações no código:

1. Altere o programa para realizar um contagem decrescente de 100 até o número informado pelo usuário;

2. Altere o programa para causar um loop infinito.

Parte 8.2: Comandos de repetição com teste no final (do while)

Neste exemplo vamos observar como inserir estruturas de repetição em pequenas partes do código, porém utilizando o teste no final.

#include <stdio.h>

int main() {

/*Este programa le um numero do usuario.

O programa conta de 1 ateh o numero inserido*/

int num;

int contador = 1; /*inicia contador com 1*/

/*Lendo variaveis do usuario*/

printf ("Informe um numero inteiro maior que 1\n");

scanf ("%d", &num);

/*Contando*/

/*Repita ate o contador ser maior que num*/

do {

printf ("Contador agora eh %d\n", contador);

contador = contador + 1;

}

while (contador <= num);

printf ("A contagem acabou\n");

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· O comando do {comandos;} while (<condição>); repete a execução dos comandos enquanto a condição for VERDADEIRA;

o Esse comando NÃO É equivalente à construção repita...até usada no português estruturado, embora seja semelhante, porém com a condição invertida;

· A única diferença é que o teste é feito no final. Sendo assim, os comandos dentro do bloco sempre serão executados pelo menos uma vez;

· Atenção: não esqueça do ponto-e-vírgula após o while(<condicao>).

Realize as seguintes alterações no código:

1. Altere o programa para realizar um contagem decrescente de 100 até o número informado pelo usuário;

Parte 8.3: Comandos de repetição (for)

Neste exemplo vamos observar como inserir estruturas de repetição em pequenas partes do código. O código abaixo apresenta o mesmo resultado do código 8.1.

#include <stdio.h>

int main() {

/*Este programa le um numero do usuario.

O programa conta de 1 ateh o numero inserido*/

int num;

int contador;

/*Lendo variaveis do usuario*/

printf ("Informe um numero inteiro maior que 1\n");

scanf ("%d", &num);

/*Contando*/

/*enquanto o contador for menor ou igual a num*/

for (contador = 1; contador <= num; contador++) {

printf ("Contador agora eh %d\n", contador);

}

printf ("A contagem acabou\n");

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· O comando for () {comandos;} é um pouco mais complexo que o comando while, porém pode ser usado para a mesma função;

o for (inicialização de variáveis; condição de repetição; incremento de variáveis);

· A construção contador++ é equivalente a contador = contador + 1;

· A cada vez que a os comandos são executados, a execução é desviada para a linha do comando for.A cada rodada, é feita o incremento da variável e a verificação da condição de parada;

· A condição verdadeira ou falsa de acordo com o valor das variáveis. Cabe ao programador garantir que a condição deixe de ser satisfeita em algum momento, caso contrário o programa executará indefinidamente (loop infinito).

Realize as seguintes alterações no código:

1. Altere o programa para realizar um contagem decrescente de 100 até o número informado pelo usuário.

Parte 9: Desvios Condicionais: Seleção Múltipla (switch)

Suponha uma situação onde o próximo passo a ser executado no programa depende do valor de uma variável. Isso é facilmente resolvido através de composições if (<condição>) {} else {} . Entretanto, existem situações onde, dependendo do valor da variável, podem ser executados N blocos de comando diferentes (por exemplo, um menu de opções). Neste exemplo vamos observar como inserir vários desvios condicionais no código através do comando switch (<variavel>).

#include <stdio.h>

int main() {

/*Este programa utiliza uma estrutura de selecao composta

para a implementacao de um menu de opcoes*/

int opcao;

/*Lendo variaveis do usuario*/

printf ("Insira a opcao desejada (1, 2, 3 ou 4)\n\n");

scanf ("%d", &opcao);

switch (opcao) {

case 1: /*caso opcao == 1*/

printf ("Voce escolheu a opcao um\n");

break;

case 2: /*caso opcao == 2*/

printf ("Voce escolheu a opcao dois\n");

break;

case 3: /*caso opcao == 3*/

printf ("Voce escolheu a opcao tres\n");

break;

case 4: /*caso opcao == 4*/

printf ("Voce escolheu a opcao quatro\n");

break;

default: /*caso opcao nao seja um dos valores anteriores*/

printf ("Voce escolheu uma opcao invalida: %d\n", opcao);

break;

}

return 0;

}

Compile e execute o programa. Observe os seguintes pontos:

· O comando switch ()é equivalente a um agrupamento de vários blocos if ... else;

o if (opcao == 1) {...} else if (opcao == 2) {...};

· O comando switch só testa valores inteiros (int, char, unsigned, long, etc):

o Cada entrada case testa se o valor da variável é igual ao valor mencionado (casos);

o A entrada default diz o que será executado caso o valor da variável seja diferente de todos os casos inseridos. Usar default não é obrigatório.

o O comando break evita que os comandos dos casos posteriores sejam executados.

· Para os blocos em cada case as chaves podem ser suprimidas. Note que dentro de um case é possível inserir um bloco de qualquer natureza (if, while ou até outro switch);

· Por padrão, não é permitido declarar variáveis dentro de um bloco switch;

· O comando switch ()é equivalente a um agrupamento de vários blocos if ... else;

o if (opcao == 1) {...} else if (opcao == 2) {...};

Realize as seguintes alterações no código:

1. Insira um novo caso, por exemplo, caso o usuário insira o número 5;

2. Remova um ou dois comandos break. Compile e execute o programa, inserindo valores diferentes para as opções. O que aconteceu?

3. Reescreva o código acima, substituindo o comando switch por comandos if ... else;

Parte 10: Exemplos de programas em C

Esta seção apresenta uma série de programas em C. Utilize-os como exemplos. Compreenda os códigos. Compile e execute os programas. Faça alterações no código e observe os resultados.

Exemplo 1: Calculo de média de dois números

#include <stdio.h>

int main() {

float num1, num2;

printf ("Insira o primeiro numero: \n");

scanf("%f", &num1);

printf ("Insira o segundo numero: \n");

scanf("%f", &num2);

float media = (num1 + num2) / 2;

printf ("A media eh: %f\n", media);

return 0;

}

Realize as seguintes alterações no código:

1. Altere o código para calcular a média entre três números;

2. Altere os tipos das variáveis num1 e num2 para inteiro (também será necessário alterar o scanf). O resultado continua correto?

Exemplo 2: Testa Múltiplo: O programa lê dois números do usuário e verifica se o segundo é múltiplo do primeiro. Enquanto não for, é pedido um novo número do usuário.

#include <stdio.h>

int main() {

int n, k;

printf ("Insira o valor de K:\n");

scanf("%d", &k);

printf ("Insira o valor de N:\n");

scanf("%d", &n);

while (n % k != 0) {

/*enquanto o resto da divisão de n por k for diferente de zero*/

printf ("%d nao eh divisivel por %d\n", n, k);

printf ("Insira um novo valor para N:\n");

scanf("%d", &n);

}

printf ("%d eh divisivel por %d\n", n, k);

return 0;

}

Realize as seguintes alterações no código:

1. Altere o código para testar se o valor de N é igual a zero. Se sim, o programa deve pedir novos valores de N até o usuário inserir um valor correto;

2. Altere o código para testar se o valor de K é igual a zero. Se sim, o programa deve pedir novos valores de K até o usuário inserir um valor correto.

Exemplo 3: Mini Calculadora: O programa lê dois números do usuário. O programa apresenta um menu de opções. De acordo com a escolha do usuário, uma operação matemática é realizada.

#include <stdio.h>

int main() {

int opcao;

float num1, num2;

/*Lendo numeros a serem operados*/

printf ("Insira o primeiro numero: \n");

scanf("%f", &num1);

printf ("Insira o segundo numero: \n");

scanf("%f", &num2);

/*Lendo variaveis do usuario*/

printf ("Insira a opcao desejada:\n");

printf ("Soma (1), Subtracao (2),\n");

printf ("Multiplicacao (3) ou Divisao (4)\n\n");

scanf ("%d", &opcao);

switch (opcao) {

case 1: /*caso opcao == 1*/

printf ("Resultado eh %f\n", num1+num2);

break;

case 2: /*caso opcao == 2*/

printf ("Resultado eh %f\n", num1-num2);

break;

case 3: /*caso opcao == 3*/

printf ("Resultado eh %f\n", num1*num2);

break;

case 4: /*caso opcao == 4*/

printf ("Resultado eh %f\n", num1/num2);

break;

default: /*caso opcao nao seja um dos valores anteriores*/

printf ("Voce escolheu uma opcao invalida: %d\n", opcao);

break;

}

return 0;

}