• Nenhum resultado encontrado

Fundamentos de Programação

N/A
N/A
Protected

Academic year: 2021

Share "Fundamentos de Programação"

Copied!
89
0
0

Texto

(1)

E S C O L A

Fundamentos

de Programação

(2)
(3)

Sumário

Fundamentos de Programação 1

1 Introdução ... 4

2 Introdução à Linguagem C ... 4

3 Técnicas Básicas de Programação ... 8

4 Estruturas de Controle – A Tomada de Decisões ... 30

5 Estruturas de Controle – Laços de Repetição ... 43

6 Estruturas de Dados Homogêneas I ... 52

7 Estruturas de Dados Homogêneas II... 59

(4)

1 Introdução

A disciplina de Fundamentos de Programação está ligada a de Lógica de Programação e vamos aplicar as estruturas lógicas utilizando a linguagem C.

C é uma linguagem de programação de finalidade geral. Foi criada por Dennis M. Ritchie e Ken Thompson, na Bell Laboratories em 1972, e estava associada ao sistema operacional UNIX. A linguagem, entretanto não está ligada a um sistema operacional, hoje usamos C em DOS, Windows e Linux.

C foi baseada na linguagem B de Thompson que era uma evolução da antiga Linguagem BCPL. B foi nomeada com a primeira letra de BCPL e C com a segunda.

C é uma linguagem de “baixo nível”, que o deixa especificar todos os detalhes em lógica de algoritmos para obter a máxima eficácia do computador. Mas C também é uma linguagem de alto nível que pode esconder detalhes da arquitetura dos computadores, resultando no aumento da eficiência na programação.

C foi escrita para que o programador possa planejar programas estruturados e modulares. O resultado é um programa mais legível e documentado. Hoje já podemos programar de forma moderna utilizando a OOP (Programação Orientada para Objetos) e também a Programação voltada para Eventos.

o padrão ansI C

O comitê ANSI desenvolveu padrões para a linguagem C. Diversas destas modificações tiveram a intenção de aumentar a flexibilidade da linguagem, enquanto outras tentaram padronizar características previamente deixadas a cargo do implementador do compilador.

Anteriormente, o único padrão era o livro: Linguagem de Programação C, de Brian Kernighan e Dennis Ritchie. Este livro não era específico em alguns detalhes da linguagem, o que levou a divergências entre os compiladores. O padrão ANSI tentou remover essas ambigüidades. Embora algumas das modificações propostas pudessem causar problemas para alguns programas escritos anteriormente, elas não afetam muito o código existente. O padrão ANSI C proporciona uma oportunidade melhor para escrever um código C portátil. Entretanto, o padrão não corrige todas as áreas de confusão e, por causa da eficiência da interface da linguagem C, com o hardware da máquina, muitos programas sempre exigirão algumas revisões quando você os mover para um ambiente diferente.

2 Introdução à LInguagem C

Vamos agora ver alguns detalhes iniciais da linguagem.

Primeiro programa em C

Iniciaremos nosso estudo com um programa simples, que apenas escreve na tela de seu computador a frase: “meu primeiro programa”. Veja, abaixo, como é o programa:

main( ) {

printf (“meu primeiro programa” ); }

Agora algumas considerações sobre o programa acima:

• Um programa em C consiste de uma ou mais funções que especificam o que deve ser feito. No exemplo acima main( ) é uma função. Qualquer programa em C começa com a função main( ) que marca o ponto inicial

da execução do programa.

• Todas as instruções devem estar dentro das chaves que iniciam e terminam a função, elas têm a mesma

(5)

• A linha: printf (“Meu primeiro programa”); é uma chamada a função printf, com o argumento “Meu primeiro programa”, que é uma seqüência de caracteres entre aspas “. . . “, chamada de: cadeia de caracteres, ou também string. A printf é uma função de biblioteca que escreve o argumento na tela do seu computador. Os parênteses devem estar presentes mesmo quando não há argumentos.

• As instruções C são sempre encerradas por um ponto-e-vírgula (;).

Limpando a tela

Seria interessante você colocar uma função para limpar a tela, antes de escrever a mensagem: “Meu primeiro programa”. Para fazer isto podemos utilizar a função clrscr( ) que serve para este propósito. Veja as alterações feitas no programa abaixo:

main( ) {

clrscr( );

printf (“meu primeiro programa” ); }

a Função printf( )

A função printf( ) é uma das funções de E/S (entrada e saída) que podem ser usadas em C. Ela não faz parte

da definição de C, mas todos os sistemas têm uma versão de printf( ) implementada.

Os parênteses indicam que estamos em uma função. Entre os parênteses estão as informações que são passadas pelo programa main( ) para a função printf( ), isto é “Meu primeiro programa”. Esta informação é

chamada de argumento.

Quando o programa encontra esta linha, passa o controle para a função printf( ) que imprime na tela do seu

computador “Meu primeiro programa” e, quando encerra a execução, o controle é transferido novamente para a função main. Vamos ver o próximo exemplo:

main( ) {

clrscr( );

printf(“escola técnica alcides maya\n”); printf(“estamos na etapa número: 2”); }

A função printf( ) pode ter um ou vários argumentos. Na primeira printf temos o seguinte argumento: “escola técnica alcides maya\n” onde encontramos a string: Escola Técnica Alcides Maya, e também os caracteres “\n”.

Este caractere \n é a notação C para o caractere de nova-linha, que provoca o avanço do cursor para o início

da próxima linha. Se você omitir o \n, você verá como resultado as duas string´s escritas em apenas uma linha

na tela.

Além do caractere \n temos outros caracteres que estão na tabela abaixo:

Código Significado \n Nova linha \t Tabulação \b Retrocesso \” Aspas \\ Barra

(6)

Formato inteiro decimal

Veja as alterações que fizemos no programa anterior:

main( ) {

clrscr( );

printf(“escola técnica alcides maya\n”); printf(“estamos na etapa número: %d” , 2); }

Agora, colocamos dois argumentos na segunda printf: “Estamos na etapa número: %d” , 2 Estes dois argumentos são separados por uma virgula.

A expressão de controle pode conter caracteres que serão exibidos na tela e códigos de formatação que indicam o formato em que os argumentos devem ser impressos.

No exemplo o código de formatação %d solicita a printf( ) imprimir o segundo argumento no formato de um número inteiro decimal.

escrevendo uma string na tela

Além do código de formatação decimal (%d), existe outros. No exemplo a seguir veremos o uso do código %s para escrever na tela uma string.

main( ) {

clrscr( );

printf(“o %s é um dos melhores transportes urbanos”, “metrô”); }

Vamos agora escrever um programa com mais de uma instrução:

main( ) {

clrscr( );

printf(“o %s venceu de %d gols de diferença contra o time adversário”, “Inter” , 4); }

Neste exemplo passamos dois argumentos para a função printf o %s do nome do time: “Inter” e o %d da quantidade de gols: 4.

Vejamos o próximo exemplo:

main( ) { clrscr( ); printf(“a letra %c ”, ´x´); printf(“pronuncia-se %s.”, “xis” ); }

(7)

A tabela, a seguir, mostra os códigos para impressão formatada de printf( ); Código Significado %c Caracteres simples %d Decimal %f Ponto flutuante %s String de caracteres %u Decimal sem sinal %x Hexadecimal

exerCíCIos de FIxação

Vamos agora realizar alguns exercícios de fixação para sedimentar em nossa mente os conhecimentos adquiridos:

1. No programa abaixo há alguns problemas, faça as correções necessárias. main( )

( clrscr( )

printf(Temos %d aulas no semestre, 33 ); )

2. Qual será o resultado do programa abaixo:

main( ) ( clrscr( )

printf(“as notas escolares são: %d %d %d\n” , 4, 7, 9); )

3. Neste outro programa o que será apresentado na tela do computador:

main( ) ( clrscr( )

printf(“%s \n %s \n %s” , “escola”, “técnica”,”alcides maya” ); )

4. Faça um programa que contenha uma única instrução e escreva na tela: Esta é a primeira linha.

(8)

5. Escreva um programa que escreva na tela: UM

DOIS TRES

QUATRO

6. Qual será a impressão obtida na tela por cada uma destas instruções? Assuma que fazem parte de um programa completo.

a) printf (“Boa Tarde ! Maria.”); printf (“Você já lanchou ? \n”);

b) printf(“Escola Técnica\nAlcides Maya\n”);

8. Faça um programa que escreva na tela o teu nome, o nome da tua mãe e o nome da tua avó, todos em linhas diferentes na tela. (Use o \n).

9. Faça um programa que escreva na tela uma mensagem do tipo: “Eu tenho 23 anos”, sendo que a idade deverá ser um argumento do tipo inteiro decimal. (Use o %d).

10. Faça um programa que numere as linhas da tela (cada linha com um número).

3 téCnICas BásICas de Programação

A partir deste momento vamos ter um contato direto com a parte pratica da Lógica de Programação.

Variáveis

O computador possui uma área de armazenamento temporária conhecida como memória. A memória do

computador pode ser entendida como uma seqüência finita de caixas, que num dado momento, guardam algum tipo de informação, como um número, uma letra, uma palavra, uma frase, etc, não importa, basta saber que lá sempre existe alguma informação.

O computador, para poder trabalhar com algumas destas informações, precisa saber onde, na memória, o dado está localizado.

Fisicamente, cada caixa, ou cada posição de memória, possui um endereço, ou seja, um número, que indica onde cada informação está localizada, este número é representado através da notação hexadecimal, tendo o tamanho de quatro, ou mais bytes. Abaixo segue alguns exemplos:

endereço Físico Informação

3000:B712 “João” 2000:12EC 45 3000:0004 ‘J’

Como pode ser observado, o endereçamento das posições de memória através de números hexadecimais é perfeitamente compreendido pela máquina, mas para nós humanos torna-se uma tarefa complicada.

Pensando nisto, as linguagens de computador facilitaram o manuseio, por parte dos programadores, das posições de memória da máquina, permitindo, que, ao invés de trabalhar diretamente com o número hexadecimal, fosse possível dar nomes diferentes a cada posição de memória.

Tais nomes seriam de livre escolha do programador.

Com este recurso, os programadores ficaram livres dos endereços físicos (números hexadecimais) e passaram a trabalhar com endereços lógicos (nomes dados pelos próprios programadores).

(9)

Desta forma, o exemplo acima, poderia ser alterado para ter o seguinte aspecto:

endereço Físico Informação

Cliente “João”

Idade 45

Inicial ‘J’

Como tínhamos dito, os endereços lógicos são como caixas, que num dado instante guardam algum tipo de informação. Mas é importante saber que o conteúdo desta caixa não é algo fixo, permanente, na verdade, uma caixa pode conter diversas informações, ou seja, como no exemplo acima, a caixa (endereço lógico) rotulada de “Cliente” num dado momento contém a informação “João”, mas em um outro momento, poderá conter uma outra informação, por exemplo “Pedro”.

Com isto queremos dizer que o conteúdo destas caixas (endereço lógico) podem variar, isto é, podem sofrer alterações em seu conteúdo.

Tendo este conceito em mente, a partir de agora iremos chamar as caixas ou endereços lógicos, de Variáveis.

Desta forma podemos dizer que uma variável é uma posição de memória representada por um Nome simbólico (atribuído pelo programador), a qual contém, num dado instante uma informação.

Variáveis na linguagem C

Uma variável em C é um espaço de memória reservado para armazenar um certo tipo de dado com um nome para referenciar o seu conteúdo.

Em um programa a variável poderá conter um valor em um determinado momento e um outro valor em outro momento. Veja o programa a seguir:

main( ) {

int num; num = 2;

printf(“este é o número: %d \n” , num); num = 5 + 10;

printf(“este é o número: %d \n” , num);

}

Agora algumas considerações sobre o programa acima:

• Na linha int num; é a declaração da variável, que tem nome: num e tipo: int, ou seja, irá armazenar valores numéricos inteiros.

• Na linha num = 2; estamos atribuindo a variável o valor 2 (dois), portanto o endereço de memória identificado como num contém neste instante o número 2 (dois).

• Na linha printf(“Este é o número: %d \n” , num); estamos apresentado o conteúdo desta variável.

• Na linha num = 5 + 10; estamos efetuando um cálculo e atribuindo a variável o resultado deste cálculo, portanto a variável num contém neste instante o número 15 (quinze).

(10)

nomes das variáveis

Para nomearmos variáveis, geralmente, seguimos algumas regras, que, conforme o livro Linguagem de Programação C, de Brian Kernighan e Dennis Ritchie, elas seriam as seguintes:

• Os nomes das variáveis são construídos com letras e dígitos. • O primeiro caractere deve ser uma letra.

• O caractere de sublinha “_” vale como uma letra; ele é útil para aumentar a clareza de nomes muito longos de variáveis. Exemplo: data_de_nascimento.

• Letras em maiúsculo e minúsculo são diferentes; uma prática tradicional em C é de usar letras minúsculas para vaiáveis. CASA, Casa, casa, representam variáveis diferentes.

• Somente os primeiros oito caracteres de um nome interno são significativos, embora mais caracteres possam ser usados.

• Naturalmente é melhor escolher nomes de variáveis que tenham algum significado, que estejam relacionados com a finalidade da variável, e que sejam diferenciados tipograficamente.

declarações das variáveis

Na declaração de uma variável instruímos ao programa reservar uma quantidade de memória apropriada para armazenar o tipo especificado e indicar que o seu conteúdo será referenciado pelo nome dado.

Se você tiver mais de uma variável do mesmo tipo, poderá declará-las de uma única vez, separando seus nomes por virgulas.

int idade, casa, livro;

O local indicado para declarar as variáveis é logo após a chave inicial da função main, veja o exemplo abaixo:

main( ) {

int num, nota1, nota2, nota3, nota4, media; . . . . . }

Antes de prosseguir, temos uma observação importante: “Em C todas as variáveis devem ser declaradas antes de serem utilizadas”.

tipos de variávei

s

O tipo de uma variável informa a quantidade de memória, em bytes, que está irá ocupar.

tipo Bit Bytes escala

char 8 1 -128 a 127

int 16 2 -32768 a 32767

float 32 4 3.4 E -38 a 3.4 E +38 double 64 8 1.7 E -308 a 1.7 E +308

(11)

C provê os modificadores de tipo como o short que é um inteiro curto que varia de –32.763 até 32.762 e também o long que é um inteiro longo e que varia de –2.147.483.648 até 2.147.483.647.

main( ) { int idade; char inicial; float tempo; idade = 25; inicial = ´C´; tempo = 17.25;

printf(“a inicial do meu nome é: %c \n” , inicial); printf(“minha idade é: %d anos\n” , idade);

printf(“meu tempo na prova foi de %f minutos \n” , tempo); }

Agora algumas considerações sobre o programa anterior:

• Na linha int idade; é a variável, do tipo inteiro, que irá conter a idade.

• Na linha char inicial; é a variável, do tipo caractere, que irá conter a letra inicial de um nome. • Na linha float tempo; é a variável, do tipo ponto flutuante, que irá conter o tempo em minutos. • Na linha idade = 25; é a inicialização da variável idade.

• Na linha inicial = ’C’; é a inicialização da variável inicial. • Na linha tempo = 17.25; é a inicialização da variável tempo.

• Na linha printf(“A inicial do meu nome é: %c \n” , inicial); é a apresentação do conteúdo da variável inicial.

• Na linha printf(“Minha idade é: %d anos\n” , idade); é a apresentação do conteúdo da variável idade. • Na linha printf(“Meu tempo na prova foi de %f minutos \n” , tempo); é a apresentação do conteúdo da variável tempo.

operadores

Veremos agora o conteúdo relacionado a operadores aritméticos e operadores de atribuição.

C é uma linguagem rica em operadores. Alguns são mais usados que outros, como é o caso dos operadores aritméticos que executam operações aritméticas.

operadores aritméticos

Para efetuar cálculos matemáticos temos os seguintes operadores aritméticos:

operador ação exemplo resultado

- Subtração 5 – 1 4

+ Adição 5 + 1 6

* Multiplicação 5 * 2 10

/ Divisão 10 / 2 5

(12)

operador de atribuição

Em C, o sinal de igual não tem a interpretação dada em matemática. Representa a atribuição da expressão à direita ao nome da variável à esquerda. Por exemplo:

num = 2000;

atribui o valor 2000 a variável num. A ação é executada da direita para a esquerda deste operador. C aceita várias atribuições numa mesma instrução:

laranjas = bergamotas = cenouras = abacates = 80;

A seguir temos um programa que usa vários operadores aritméticos e converte temperatura Fahrenheit em seu correspondente Celsius.

main( ) {

float ftemp, ctemp; ftemp = 120;

ctemp = ( ftemp – 32.0 ) * ( 5.0 / 9.0 );

printf(“temperatura em graus Celsius é: %f” , ctemp); }

Agora algumas considerações sobre o programa acima:

• Na linha float ftemp, ctemp; é a declaração de duas variáveis, do tipo float, que irá conter a temperatura em graus Fahrenheit e Celsius.

• Na linha ftemp = 120; estamos utilizando o operador de atribuição que armazena a temperatura de 120 graus Fahrenheit na variável ftemp.

• Na linha ctemp = ( ftemp – 32.0 ) * ( 5.0 / 9.0 ); estamos efetuando o cálculo de conversão da temperatura em Fahrenheit para Celsius e atribuindo o resultado do cálculo para a variável ctemp. Note que colocamos parênteses em ftemp – 32.0. Se você lembra um pouco de álgebra, a razão estará clara. Nós queremos que 32 seja subtraído de ftemp antes de multiplicarmos por 5 e dividirmos por 9. A multiplicação e a divisão são feitas antes da soma ou subtração.

• Na linha printf(“Temperatura em graus Celsius é: %f” , ctemp); estamos apresentando o resultado do cálculo.

(13)

ComentárIos

Comentários podem ser colocados em qualquer lugar de seu programa. Comentários são recomendados para documentar a lógica utilizada no programa. Tudo que começa com dois caracteres, chamados símbolos de comentários, barra-asterisco (/*) e terminam por asterisco-barra (*/), são comentários e o conteúdo entre eles não será verificado pelo compilador.

No programa abaixo mostraremos vários comentários: /* Exercício 015

* Este programa calcula * a idade de uma pessoa * em dias

*/

main( ) {

float anos, dias; /* declaração de variáveis */ anos = 12; /* inicializa a variável anos */ dias = anos * 365; /*calcula idade em dias*/ printf(“a idade em dias é: %f \n” , dias); /* apresentar o resultado */ }

exerCíCIos de FIxação

1. Faça um programa que armazene a quilometragem inicial de um carro. Depois de uma viagem, armazenar a quilometragem final do carro. Calcular e apresentar a distância percorrida pelo carro.

2. Faça um programa que armazene as notas de um aluno (serão 4 notas, portanto, teremos 4 variáveis). Calcule a média do aluno e armazene em uma variável, depois apresente a média do aluno (use variáveis do tipo inteiro).

3. Faça um programa que armazene as notas de um aluno (serão 4 notas, portanto, teremos 4 variáveis). Calcule a média do aluno e armazene em uma variável, depois apresente a média do aluno (use variáveis do tipo ponto flutuante).

4. Faça um programa que calcule e apresente o valor do volume de uma lata de óleo, utilizando a fórmula: volume = 3.14159 * raio² * altura. Obs.: Atribua valores a variável raio e altura.

5. Faça um programa que calcule e apresente o volume de uma caixa retangular, por meio da fórmula: volume = comprimento * largura * altura. Obs.: Atribua valores a variável comprimento, largura e altura.

6. Faça um programa que leia dois valores inteiros para as variáveis A e B, e efetuar a troca dos valores de forma que a variável A passe a possuir o valor da variável B e a variável B passe a possuir o valor da variável A. Apresentar na tela os novos valores das variáveis A e B.

7. Faça um programa que leia quatro números inteiros e apresentar o resultado da adição destes números. (A + B + C + D)

(14)

9. Indique com um X quais dos dados abaixo são do tipo inteiro. ( ) 1000 ( ) “0” ( ) “-900” ( ) -456 ( ) 34 ( ) ‘C’ ( ) 0 ( ) –1.56 ( ) 34.76

10. Indique com um X quais dos dados abaixo são do tipo float. ( ) -678 ( ) “0.87” ( ) 99.8 ( ) “cinco” ( ) 34 ( ) ‘C’ ( ) 45.8976 ( ) –1.56 ( ) 34.76

Funções de entrada e saída

O computador não é uma máquina isolada, pois ele precisa se comunicar com o mundo exterior, com vídeo, impressora, teclado, discos, fitas, etc. Para realizar esta comunicação existem comandos que permitem que informações sejam exibidas, por exemplo, no vídeo, como também existem comandos que permitem que informações sejam colocadas na memória do computador através do teclado do PC.

Os comandos que iremos ver são os comandos para LER e ESCREVER, respectivamente, comando de entrada e de saída.

entrada, Processamento e saída

Para criar um programa que seja executável dentro de um computador, deve-se ter em mente três coisas: a entrada de dados, o seu processamento e a saída deles.

Sendo assim, todo programa estará trabalhando com estes três conceitos. Se os dados forem entrados de forma errada, serão conseqüentemente processados de forma errada e resultarão em respostas erradas.

Desta forma, dizer a alguém que foi erro do computador é ser um tanto “medíocre”. E isto é o que mais ouvimos quando nosso saldo está errado e vamos ao banco fazer uma reclamação ou quando recebemos uma cobrança indevida. Se houve algum erro, é porque foi causado por falha humana. Realmente é impossível um computador errar por vontade própria, pois vontade é uma coisa que os computadores não têm.

O processo de execução de um programa ocorre segundo o exposto, após a entrada de dados com a instrução leia e a sua saída com a instrução escreva. O processamento será uma conseqüência da manipulação das variáveis de ação.

Uma entrada e uma saída poderá ocorrer dentro de um computador de diversas formas. Por exemplo, uma entrada poderá ser feita via teclado. Uma saída poderá ser feita em vídeo.

As funções de biblioteca da linguagem C, mais comuns para a entrada e saída de dados são a printf() e a scanf().

(15)

a função printf( )

A função printf( ) é uma das funções de saída de dados da linguagem C, que você já utilizou na Aula 1. A função scanf( )

A função scanf( ) é o complemento de printf( ) e nos permite fazer a entrada de dados do teclado.

Sua sintaxe é uma expressão de controle seguida por uma lista de argumentos separados por virgulas. Os argumentos de scanf( ) devem ser endereços de variáveis, cuja sintaxe será apresentada a seguir:

scanf( “expressão de controle”, lista de argumentos);

A expressão de controle contem códigos de formatação, sempre precedida por um sinal de % (percentagem).

A lista de argumentos deve consistir nos endereços das variáveis, onde serão armazenados os valores lidos. C oferece um operador para tipos básicos chamados operador de endereço e referenciado pelo símbolo & que retorna o endereço do operando, voltaremos a este assunto quando será abordado a aula de pointers.

Para exemplificar o que estamos apresentando, veremos no programa a apresentação do conteúdo armazenado em uma variável e o endereço da variável.

main( ) {

int num; num = 2;

printf(“Conteúdo da variável...: %d \n” , num); printf(“endereço decimal...: %u \n” , &num); printf(“endereço Hexadecimal....: %u \n” , &num); }

Agora algumas considerações sobre o programa acima:

• Na declaração int num; estamos declarando a variável inteira num.

• Na linha seguinte num = 2; estamos inicializando a variável com o número inteiro 2.

• Na linha printf(“Conteúdo da variável...: %d \n” , num); a função printf vai apresentar o conteúdo da variável através do código de formatação “%d” e na linha seguinte, através do código “%u” o endereço da variável num. Repare que o nome da variável vem precedido do caractere “&”, indicando que é o endereço da variável. Um endereço de memória é visto como um número inteiro sem sinal, por isso usamos o “%u”.

Mas o que este programa tem a ver com a entrada de dados?

Nada, apenas estamos apresentando a você o endereço da variável, já que para ler um valor para uma variável, utilizando a função scanf, temos que informar o endereço da variável.

No programa abaixo, ao invés de inicializar o valor da variável, como em num = 2; vamos ler um número qualquer e depois apresentá-lo.

main( ) {

int num;

printf(“digite um número: “); scanf(“%d” , &num);

(16)

printf(“o número digitado foi: %d “ , num); }

Agora algumas considerações sobre o programa acima:

• Na declaração int num; estamos declarando a variável inteira num.

• Na linha printf(“Digite um número: “); informamos ao usuário que ele deverá digitar um número.

• Na linha seguinte scanf(“%d” , &num); estamos esperando que o usuário digite um número inteiro e pressione a tecla ENTER. Nunca esqueça que ao usar a função scanf você deve informar o endereço da variável para onde vamos ler alguma coisa, caso contrário você terá surpresas desagradáveis no teu programa.

• Na última linha printf(“O número digitado foi: %d “ , num); a função printf vai apresentar o conteúdo da variável num.

Veja na tabela a seguir os códigos básicos de formatação da função scanf( ) Código Função

%c Leia um único caractere %d Leia um inteiro decimal

%f Leia um número em ponto flutuante

Agora vamos fazer um exemplo ligeiramente mais difícil. O próximo programa pede ao usuário o comprimento em “jardas”, e então escreve na tela o valor convertido em “pés” e “polegadas”.

main( ) {

int jardas, pes, polegadas;

printf(“digite o comprimento a ser convertido: “); /* entrada de dados */ scanf(“%d” , &jardas);

polegadas = 36 * jardas; /* processamento */ pes = 3 * jardas;

printf(“ %d jardas = %d pés \n” , jardas, pés ); /* saída de dados */ printf(“ %d jardas = %d polegadas \n” , jardas, polegadas );

}

Agora algumas considerações sobre o programa acima:

• Na declaração int jardas, pes, polegadas; estamos declarando as variáveis inteiras jardas, pés, polegadas.

• Na linha printf(“Digite o comprimento a ser convertido: “); solicitamos ao usuário que ele deverá digitar um comprimento.

• Na linha seguinte scanf(“%d” , &jardas); estamos esperando que o usuário digite um número inteiro e pressione a tecla ENTER. Este número será armazenado na variável: jardas.

• Nas duas linhas seguintes: polegadas = 36 * jardas; e na linha pes = 3 * jardas; estamos calculando a conversão de jardas em polegadas e a conversão de jardas em pés.

(17)

Observação importante: veja como ficaram visíveis, neste programa, as três partes básicas do processamento de dados: entrada, processamento e saída, destacadas no programa através dos comentários.

Se em cada programa, nos concentrássemos nestas partes básicas, já teríamos metade da solução do programa resolvida. Veja o exemplo a seguir:

Exemplo – Faça um programa que leia um número inteiro qualquer, que representa o comprimento em jardas. Sabendo-se que esta medida de comprimento poderá ser transformada em polegadas multiplicando-se pelo número 36, e que poderá ser transformada em pés multiplicando-se pelo número 3, calcular e apresentar este valor convertido em pés e polegadas.

Conforme o enunciado do programa devemos procurar identificar os elementos básicos do processamento de dados, ou seja, a entrada, o processamento e a saída de dados, fazendo algumas perguntas. Veja abaixo:

Entrada de dados

Pergunta: O que devemos ler?

Resposta: Um número inteiro que represente o comprimento em jardas. Pergunta: Temos que ler mais alguma coisa?

Resposta: Não

Processamento de dados

Pergunta: O que devemos fazer com esta informação lida? Resposta: Calcular a conversão de jardas para polegadas e pés. Pergunta: Como fazemos isto?

Resposta: Matematicamente 1 jarda corresponde a 3 pés e 1 jarda corresponde a 36 polegadas. Devemos multiplicar o valor lido por 3 e obteremos a quantidade de pés.

Também, multiplicar o valor lido por 36 e obteremos a quantidade de polegadas. Pergunta: Tem mais algum calculo para fazer?

Resposta: Não Saída de dados

Pergunta: Depois de calcular a conversão o que devemos fazer? Resposta: Apresentar os valores convertidos.

Pergunta: Tem mais alguma coisa para apresentar? Resposta: Não

Podemos então encerrar o programa.

Estas são algumas considerações importantes, mas gostaria de ressaltar o seguinte:

“Se todos os programadores fizessem o algoritmo do programa, antes de começar a codificar o programa, muitas dores de cabeça e tempo perdidos seriam eliminados, pois encontrar um erro de sintaxe da linguagem é fácil, mas encontrar um erro de lógica no programa é 10 vezes mais difícil”.

Se você é um programador experiente, antes de codificar o programa, você faz o algoritmo, e ao faze-lo você estará identificando, automaticamente os elementos do processamento de dados, que é a entrada o processamento e a saída.

(18)

exercícios de Fixação

Desenvolva os exercícios abaixo:

1. Faça um programa que leia e armazene em variáveis dois números inteiros quaisquer. Calcular e apresentar a soma entre eles.

2. Faça um programa que leia e armazene em variáveis dois números em ponto flutuantes. Calcular e apresentar a diferença entre eles.

3. Faça um programa que leia e armazene dois números quaisquer. Calcular e apresentar o produto entre eles.

4. Faça um programa que leia e armazene em variáveis dois números inteiros quaisquer. Calcular e apresentar o resto da divisão de um pelo outro.

5. Faça um programa que leia um número do tipo ponto flutuante e outro número inteiro. Calcular e apresentar a divisão do número do tipo ponto flutuante pelo número inteiro.

6. Faça um programa que leia e armazene em variáveis quatro notas escolares (entre 0 e 10) de um aluno. Calcular e apresentar a média final do aluno.

7. Faça um programa que leia e armazene em variáveis uma letra e um número. No final apresentar a letra e o número lido.

8. Faça um programa que leia e armazene a idade de uma pessoa em anos. Calcular e apresentar a quantidade de dias, a quantidade de horas, a quantidade de minutos e de segundos desde o nascimento.

9. Faça um programa que leia a receita e a despesa de uma empresa. Calcular e apresentar o seu lucro. 10. Faça um programa que leia o número de identificação de um funcionário, o seu número de horas trabalhadas no mês, o valor que recebe por hora. Calcular o salário total deste funcionário, sabendo-se que ele é pago para trabalhar por hora. No final apresentar o salário total deste funcionário.

exemplos de aula

Na disciplina de lógica apresentamos alguns exemplos de aula que agora reproduzimos escritos em linguagem C para que você possa fazer uma comparação entre eles.

Primeiro exemplo

Desenvolver um programa que efetue o cálculo da área de uma circunferência, apresentando a área calculada.

algoritmo

Para efetuar o cálculo da área de uma circunferência é necessário conhecer a fórmula que executa este cálculo sendo esta: A =

p

R², em que A é a variável que conterá o resultado do cálculo da área,

p

é o valor de pi (3.14159), sendo uma constante na fórmula) e R o valor do raio. Sendo assim, basta estabelecer:

1 – Ler um valor para o raio, no caso a variável R; 2 – Estabelecer que PI possui o valor 3,14159;

3 – Efetuar o cálculo da área, elevando ao quadrado o valor de R e multiplicando por PI; 4 – Apresentar o valor da variável A.

A fórmula para o cálculo da área passará a ser escrita como: A  3.14159 * R

h

2 ou se você preferir poderá

(19)

Codificação em Linguagem C

main( ) {

float A,R; clrscr( );

printf ( “digite o raio da circunferência: “ ); scanf ( “%f”, &r );

a = 3.14159 * r * r;

printf ( “a área da circunferência e: %f”, a ); getch( );

}

segundo exemplo

Construir um programa que efetue o cálculo do salário líquido de um professor. Para fazer este programa, você deverá possuir alguns dados, tais como: valor da hora aula, número de horas trabalhadas no mês e percentual de desconto do INSS. Em primeiro lugar, deve-se estabelecer qual será o seu salário bruto para efetuar o desconto e ter o valor do salário líquido.

algoritmo

1 – Estabelecer a leitura da variável HT (Horas trabalhadas no mês); 2 – Estabelecer a leitura da variável VH (valor hora aula);

3 – Estabelecer a leitura da variável PD (Percentual de desconto de INSS);

4 – Calcular o salário bruto (SB), sendo este a multiplicação das variáveis HT e VH; 5 – Calcular o total de desconto (TD) com base no valor de PD dividido por 100; 6 – Calcular o salário líquido (SL), deduzindo o desconto do salário bruto; 7 – Apresentar os valores dos salários bruto e líquido: SB e SL.

Codificação em Linguagem C

main( ) { int Ht; float VH, PD, TD, SB, SL; clrscr( );

printf(“digite a quantidade de horas trabalhadas no mes: “); scanf(“%d”, &Ht);

printf(“digite o valor da hora aula: “); scanf(“%f”, &VH);

printf(“digite o percentual de desconto do Inss: “); scanf(“%f”, &Pd);

(20)

sL = sB - td;

printf(“o valor do salario bruto e...: %12.2f\n”, sB); printf(“o valor do salario liquido e...: %12.2f\n”, sL); getch( );

}

exercícios de aula

Abaixo são apresentados exercícios, sugiro que você os faça sem ver a solução pronta do mesmo, utilize a solução para verificar se você fez corretamente.

Primeiro exercício

Desenvolver um programa que leia dois valores numéricos e apresente o resultado da soma dos quadrados dos valores lidos.

algoritmo

1 – Ler um valor para a variável A e outro para a variável B;

2 – Efetuar o cálculo do quadrado dos valores lidos, atribuindo os resultados as variáveis QA e QB; 3 – Somar o quadrado dos valores lidos atribuindo o resultado a variável R;

4 – Apresentar o valor da variável R.

Codificação em Linguagem C

main( ) { int a, B, Qa, QB, r; clrscr( ); printf(“digite um numero...: “); scanf(“%d”, &a);

printf(“digite outro numero...: “); scanf(“%d”, &B);

Qa = a * a; QB = B * B; r = Qa + QB;

printf(“a soma dos quadrados e...: %d”, r); getch( );

}

segundo exercício

Desenvolver um programa que apresente o resultado do cálculo da área de um trapézio. Algoritmo

(21)

1 – Ler um valor para a base maior atribuindo a variável bMaior; 2 – Ler um valor para a base menor atribuindo a variável bMenor; 3 – Ler um valor para a altura atribuindo a variável altura;

4 – Efetuar o cálculo da área atribuindo a variável area; 5 – Apresentar o valor da variável area.

Codificação em Linguagem C

main( ) {

float area, bMaior, bMenor, altura; clrscr( );

printf(“digite o valor da base maior...: “); scanf(“%f”, &bmaior);

printf(“digite o valor da base menor...: “); scanf(“%f”, &bmenor);

printf(“digite o valor da altura...: “); scanf(“%f”, &altura);

area = ((bmaior + bmenor) * altura) / 2;

printf(“a area do trapezio e...: %5.2f”, area); getch( );

}

detalhes adicionais da Linguagem C

Veremos agora alguns detalhes interessantes da Linguagem C. Operadores

Já tínhamos visto os operadores aritméticos e de atribuição. Vamos agora complementar o assunto vendo os operadores de incremento e decremento, os operadores aritméticos de atribuição e os operadores relacionais.

Operadores de incremento (+ +) e decremento (--)

O operador de incremento (+ +) incrementa de um seu operando, ou seja, ele obtém o valor do operando e acrescenta um a este valor, é o somar mais um.

Em um primeiro instante isto parece uma coisa difícil de se entender, mas analise o programa abaixo e verás que é muito fácil.

main( ) {

int num; num = 2;

printf(“Valor inicial = %d \n” , num); num = num + 1;

printf(“novo valor = %d \n” , num); }

(22)

Agora algumas considerações sobre o programa acima:

• Na declaração int num; estamos declarando a variável inteira num. Na linha seguinte num = 2; estamos inicializando a variável com o número inteiro 2.

• Na próxima linha printf(“Valor inicial = %d \n” , num); está sendo apresentado o valor inicial da variável num.

• Na linha num = num + 1; estamos somando um ao valor inicial da variável num, e é isto que chamamos de incrementar (somar um), e então na última linha apresentamos o valor final de num que deverá ser: “três”

Agora veja o mesmo programa, mas utilizando o operador de incremento.

main( ) {

int num; num = 2;

printf(“Valor inicial = %d \n” , num); num++;

printf(“novo valor = %d \n” , num); }

Agora algumas considerações sobre o programa acima:

• A única diferença deste programa para o anterior é a linha num++; onde estamos somando um ao valor inicial da variável num.

Mas, haveria uma outra forma de escrever o mesmo programa, veja as alterações a seguir:

main( ) {

int num; num = 2;

printf(“Valor inicial = %d \n” , num++ ); printf(“novo valor = %d \n” , num); }

encontrou as diferenças?

• Neste programa apagamos a linha num++; porque colocamos o incremento na linha anterior printf(“Valor inicial = %d \n” , num++ ); onde você deve notar que ao final da printf estamos usando o incremento do num++. Você deve estar se perguntando: “Mas não seria apresentado o valor 3 já na primeira printf?” E a resposta é: “Não, estamos usando a regra de precedência, neste programa primeiro ele apresenta o valor de num para depois incrementa-lo”.

Este operador trabalha de dois modos. O primeiro modo é chamado pré-fixado e o operador aparece antes do nome da variável. O segundo modo é o pós-fixado em que o operador aparece seguindo o nome da variável.

Em ambos os casos, a variável é incrementada. Porém quando ++num é usado numa instrução, num e incrementada antes de seu valor ser usado, e quando num++ estiver numa instrução, num é incrementada depois de seu valor ser usado. Veja o exemplo a seguir.

(23)

main( ) { int n,x; n = 5; x = n++; printf(“Valor de x = %d \n” , x); printf(“Valor de n = %d \n” , n); }

Veja o que aconteceu neste programa:

• Na linha n = 5; atribuímos o valor 5 a variável n

• Na linha seguinte x = n++; o valor de n é atribuído a x e depois n é incrementada de 1, tornando seu valor 6.

• Na primeira printf a saída será: Valor de x = 5 e na outra vai ser: Valor de n = 6 comprovando que quando o operador é pós-fixado ele incrementa o valor da variável depois de seu valor ser usado.

Vejamos o mesmo exemplo utilizando agora o operador de incremento sendo utilizado pré-fixado.

main( ) { int n,x; n = 5; x = ++n; printf(“Valor de x = %d \n” , x); printf(“Valor de n = %d \n” , n); }

Veja o que aconteceu neste programa:

• Na linha n = 5; atribuímos o valor 5 a variável n

• Na linha seguinte x = ++n; o valor de n é incrementada de 1 tornando seu valor 6, e atribuído a x.

• Na primeira printf a saída será: Valor de x = 6 e na outra vai ser: Valor de n = 6 comprovando que quando o operador é pré-fixado ele incrementado de um e depois o seu valor ser usado.

Operadores aritméticos de atribuição +=, -=, *=, /=, %=

Nestes operadores é usado um nome de variável a sua esquerda e uma expressão a sua direita. A operação consiste em atribuir um novo valor a variável que dependerá do operador e da expressão à direita.

Se n é uma variável, exp uma expressão e op um operador aritmético, então: n op= exp;

Equivale a n = (n) op (exp);

(24)

Exemplos:

i + = 2; equivale a i = i + 2; x *= y+1; equivale a x = x * (y+1); t /= 2.5; equivale a t = t / 2.5; p %= 5; equivale a p = p % 5; d -= 3; equivale a d = d - 3;

Uma expressão com estes operadores são mais compactos e normalmente produzem um código de máquina mais eficiente.

Exercícios de Fixação

1. Analise o programa abaixo e informe os valores apresentados na tela:

main( ) { int a=1, b=2, c=3, d; d = a; printf(“%d \n” , d); /* valor de d: _________ */ d = b++; printf(“%d \n” , d); /* valor de d: _________ */ d = ++c; printf(“%d \n” , d); /* valor de d: _________ */ a += b;

printf(“%d \n” , a); /* valor de a: _________ */ c *= b;

printf(“%d \n” , c); /* valor de c: _________ */ }

2. Assuma que todas as variáveis são do tipo int. Encontre o valor de cada uma delas e escreva um programa que as imprima para verificar os resultados:

a) x = ( 2 + 1 ) * 6; b) y = ( 5 + 1 ) / 2 * 3; c) i = j = ( 2 + 3 ) / 4; d) a = 3 + 2 * ( b = 7 / 2 ); e) c = 5 + 10 % 4 / 2;

3. Reescreva as seguintes instruções usando os operadores de incremento e decremento: num = num + 1;

(25)

4. Reescreva as seguintes instruções usando os operadores aritméticos de atribuição: num1 = num1 + num2;

num2 = num2 – num1;

5. Analise o programa abaixo e informe os valores apresentados na tela: main( )

{

int num=0;

printf(“%d \n” , num); /* valor de num: _________ */

printf(“%d \n” , num++); /* valor de num: _________ */ printf(“%d \n” , num); /* valor de num: _________ */

}

6. Analise o programa abaixo e informe os valores apresentados na tela: main( )

{

int num=0;

printf(“%d \n” , num); /* valor de num: _________ */

printf(“%d \n” , ++num); /* valor de num: _________ */ printf(“%d \n” , num); /* valor de num: _________ */

}

7. Analise o programa abaixo e informe os valores apresentados na tela: main( )

{

int num=0;

printf(“%d \n” , num); /* valor de num: _________ */

printf(“%d \n” , - -num); /* valor de num: _________ */ printf(“%d \n” , num); /* valor de num: _________ */

(26)

8. Analise o programa abaixo e informe os valores apresentados na tela: main( )

{

int num=0;

printf(“%d \n” , num); /* valor de num: _________ */

printf(“%d \n” , num- -); /* valor de num: _________ */ printf(“%d \n” , num); /* valor de num: _________ */

}

9. Analise o programa abaixo e informe os valores apresentados na tela: main( )

{

int num=0; num += 10;

printf(“%d \n” , num); /* valor de num: _________ */ num += 10;

printf(“%d \n” , num); /* valor de num: _________ */ }

strings – um tipo especial de caracteres

Em nosso primeiro programa colocamos na tela do computador, através da função printf uma seqüência de caracteres entre aspas “Meu primeiro programa”, lembra ?

Havia escrito que podemos chamá-la de “cadeia de caracteres” ou de “String”. Usaremos, a partir deste momento, apenas “String”.

String é uma das mais importantes formas de dados em C e é usada para armazenar e manipular textos como palavras, nomes e sentenças.

String é um vetor unidimensional do tipo char terminada pelo caractere null.

Composta de uma série de caracteres, a definição de string como sendo um vetor do tipo char é bastante razoável.

Cada caractere de uma string pode ser acessado como um elemento do vetor o que proporciona uma grande flexibilidade aos programas que processam textos.

Na string a seguir: “Alcides Maya” cada caractere ocupa um byte de memória e o último caractere é sempre ‘\0´(null). Veja uma representação de como é uma string no computador:

A l c I d e s M a y a \0

No exemplo acima temos uma série de elementos do vetor de caracteres, sendo que o primeiro elemento, onde está a letra “A” é o elemento 0 (zero) do vetor. O segundo elemento, onde está a letra “l” é o elemento 1 (um) do vetor. O terceiro elemento, onde está a letra “c” é o elemento 2 (dois) do vetor e assim sucessivamente.

A l c I d e s M a y a \0

(27)

Variáveis que armazenam uma string

Uma das maneiras de receber uma string do teclado é através da função scanf( ) pelo formato %s.

main( ) {

char nome[16];

printf(“digite seu nome: “); scanf(“%s” , &nome[0]);

printf(“olá, %s, tudo bem?” , nome); }

Agora algumas considerações sobre o programa acima:

• Na declaração: char nome[16]; declaramos a variável nome do tipo char que tem um tamanho de 16 caracteres, reservando o último elemento da string para o caracter \0 (null).

• Na linha printf(“Digite seu nome: “); você encontra uma string entre as aspas

• Na próxima linha scanf(“%s” , &nome[0]); temos a função scanf() que vai ler uma string e armazenar na variável nome. Você deve ter notado que usamos o operador & precedendo o segundo argumento de scanf() e também que estamos fazendo referência ao primeiro elemento do vetor [0]. Visto que o nome de um vetor é o seu endereço inicial poderíamos usar a scanf() da seguinte forma: scanf(“%s” , nome); que o resultado seria o mesmo.

• Na última linha printf(“Olá, %s, tudo bem?” , nome); estamos apresentando o conteúdo do vetor.

Lendo strings com a Função scanf()

Ler uma string consiste em dois passos: reservar espaço de memória para armazená-la e usar alguma função que permita a sua entrada.

O primeiro passo é declarar a string especificando o seu tamanho, sempre com um espaço a mais para o caracter \0 (null).

char nome[16];

Uma vez reservado o espaço necessário você pode usar a função scanf() para receber a string. A função scanf() é bastante limitada para a leitura de strings.

Por exemplo, considere a seguinte execução do Exercício 26. Digite seu nome: Alcides Maya

Olá, Alcides, tudo bem?

O programa subitamente eliminou o último nome.

Lembre-se de que scanf() usa qualquer espaço em branco para terminar a entrada. O resultado é que não existe uma forma de digitar um texto de múltiplas palavras numa única variável usando scanf().

A função scanf() é usada, principalmente para ler uma mistura de tipos de dados numa mesma instrução. Por exemplo, se em cada linha de entrada quisermos ler o nome de um material do estoque, o seu número do estoque e o seu preço, scanf() se adaptam perfeitamente.

Lendo strings com a Função gets()

A função gets() é bastante conveniente para a leitura de strings.

O seu propósito é ler uma string da sua entrada padrão, que por “default” é o teclado.

Visto que uma string não tem um tamanho predeterminado, gets( ) Iê caracteres até encontrar o de nova linha (´\n’) que é gerado pressionando-se a tecla [Enter]. Todos os caracteres anteriores ao ‘\n’ são armazenados na

(28)

exemplo simples: main( ) {

char nome[16];

printf(“Digite seu nome: “); gets(nome);

printf(“Olá, %s, tudo bem?” , nome); )

Agora algumas considerações sobre o programa acima:

• No programa anterior usamos scanf(“%s” , &nome[0]); mas agora, utilizamos gets(nome); que poderá ler mais de uma palavra separada por espaço em branco. A função gets( ) é exatamente o que procurávamos: agora o programa lembrará todo o nome.

Agora ao digitarmos duas ou mais palavras, será armazenado o nome completo.

Se forem digitadas as palavras “Alcides Maya”, teremos o resultado apresentado como no exemplo abaixo: Digite seu nome: Alcides Maya

Olá, Alcides Maya, tudo bem?

OBSERVAÇÃO: Se você digitar um nome maior que o espaço reservado para o string, (15 caracteres no programa acima) o programa segue armazenando os dados na memória do computador, sem fazer qualquer consistência em relação ao tamanho do string, podendo armazenar em cima da área de programa, que está na memória do computador.

Experimente rodar o programa acima digitando as seguintes palavras: “Escola Técnica Alcides Maya”, e veja o que poderá acontecer.

Inicializando strings

O compilador oferece uma forma de inicialização de strings consideravelmente mais simples: char nome[ ] = “Ana”;

Enquanto os caracteres simples são colocados entre aspas simples, a string é colocada entre aspas duplas. O uso da segunda forma causa a inclusão automática do caractere ‘\0´, ou seja teremos a seguinte string na memória.

A n a \0 0 1 2 3

main( ) {

char nome[ ] = “alcides maya”; printf(“olá, %s, tudo bem?” , nome); }

(29)

Agora algumas considerações sobre o programa acima:

• Na linha char nome[ ] = “Alcides Maya”; estamos declarando a variável nome que é do tipo vetor de caracteres e já está sendo inicializada com o valor “Alcides Maya”, ele terá um tamanho de 13 caracteres, já contando o lugar reservado para o \0 (null).

exercícios de Fixação

1. Faça um programa que leia o nome de 2 pessoas e armazene os nomes lidos (use a função scanf para ler os nomes). Depois escreva na tela os nomes lidos.

2. Faça um programa que leia o nome de 2 pessoas e armazene os nomes lidos (use a função gets para ler os nomes). Depois escreva na tela os nomes lidos.

3. Faça um programa que leia três frases. As frases deverão ser armazenadas e depois ser apresentadas na tela.

4. Faça um programa que declare uma string de 80 caracteres de espaço em branco. Depois escrever 25 printf´s que imprimam esta string na tela. O que acontece?

5. Faça um programa que leia o teu nome, o nome da tua mãe e escreva na tela o teu nome e o nome da tua mãe, cada um em uma linha da tela.

6. Quais das declarações de string está correta? ( ) string nome[80];

( ) char nome(80); ( ) char nome[80]; ( ) char nome = 80;

( ) Nenhuma alternativa acima

7. Qual das funções é mais apropriada para ler uma string composta por várias palavras? ( ) scanf

( ) printf ( ) puts ( ) gets

( ) Nenhuma alternativa acima 8. Assuma a seguinte inicialização: char nome[] = “Escola Alcides Maya”;

Como você se refere à string “Maya” (as últimas 4 letras da string)?

9. Qual é o erro da instrução abaixo? nome = “Alcides Maya”;

(30)

10. Qual é o último caractere de uma string? ( ) \n

( ) \t ( ) \s ( ) \0

( ) Nenhuma alternativa acima

4 estruturas de ControLe – a tomada de deCIsões

Foi visto anteriormente como trabalhar com entrada, processamento e saída utilizando funções, variáveis e operadores. Apesar de já se conseguir solucionar problemas e transforma-los em programas, os recursos até aqui estudados são limitados, pois haverá momentos em que um determinado valor dentro de um programa necessitará ser tratado para se efetuar um processamento mais adequado.

Imagine a seguinte situação: um programa que apresente a média escolar de um aluno. Até aqui, muito simples, mas além de calcular a média, o programa deve apresentar se ele está aprovado ou reprovado segundo a análise de sua média.

Observe que aqui será necessário verificar a média do aluno para então tomar uma decisão no sentido de apresentar a sua real situação: aprovado ou reprovado.

Tomar esta decisão implica em comparar a média com um valor numérico, e para realizar esta comparação utilizamos operadores relacionais que veremos a seguir.

Operadores relacionais

Os operadores relacionais são usados para fazer comparações. São eles:

Operador Ação Exemplo Resultado > maior do que 5 > 2 V >= maior ou igual 5 >= 7 F < menor do que 5 < 7 V <= menor ou igual 5 <= 7 V = = igual a 5 == 7 F ! = diferente 5 != 7 V

Operadores relacionais são o vocabulário que o programa usa para fazer perguntas.

Em C não existe um tipo de variável chamada “booleana”, isto é, que assuma um valor verdadeiro ou falso. O valor zero (0) é considerado falso e qualquer valor diferente de zero (0) é considerado verdadeiro.

Vamos fazer um exemplo que possa identificar estes operadores.

main( ) {

int valor1, valor2;

printf(“Informe um valor1: “); scanf(“%d” , &valor1); printf(“Informe um valor2: “); scanf(“%d” , &valor2);

printf(“valor1 > valor2 é %d \n” , (valor1 > valor2) ); printf(“valor1 < valor2 é %d \n” , (valor1 < valor2) ); printf(“valor1 >= valor2 é %d \n” , (valor1 >= valor2) );

(31)

printf(“valor1 <= valor2 é %d \n” , (valor1 <= valor2) ); printf(“valor1 == valor2 é %d \n” , (valor1 == valor2) ); printf(“valor1 != valor2 é %d \n” , (valor1 != valor2) ); }

desvio Condicional simples

O comando if, que significa “se”, é utilizado para fazer um “Desvio Condicional Simples”. Sua forma geral é:

if (expressão) comando;

Onde a expressão é avaliada; se for verdadeira (isto é, se a expressão tiver um valor diferente de zero), o comando é executado.

Desde que um if simplesmente testa o valor numérico de uma expressão, certas abreviações na codificação são possíveis. A mais óbvia é escrever:

if (expressão) Ao invés de if (expressão ! = 0)

Algumas vezes isso é natural e claro; outras vezes, é totalmente obscuro.

Iniciaremos nosso estudo do “if” com um programa simples, que lê um número do teclado e escreve na tela de seu computador se o número digitado é positivo.

main( ) {

int num;

printf (“digite um número: “ ); scanf (“%d” , &num);

if (num > 0)

printf (“o número digitado é positivo”); }

agora algumas considerações sobre o programa acima:

• Declaramos uma variável numérica do tipo inteiro e pedimos para o usuário digitar um número.

• Na linha if (num > 0) estamos testando o número digitado para saber se o mesmo é maior do que zero. Se o resultado desta expressão for verdadeira a linha printf (“O número digitado é positivo”); será executada.

• Repare que o comando abaixo do if foi colocado alguns espaços mais para dentro da linha, este processo de codificação é chamado de “edentação”. Isto facilita a leitura de um programa em qualquer linguagem. Para o compilador não é necessário a edentar, mas para os programadores, quando estão depurando erros de programação, é extremamente útil.

(32)

exemplo de aula

Primeiro exemplo

Desenvolver um programa que leia dois valores numéricos. Efetuar a adição e apresentar o seu resultado caso o valor somado seja maior que 10.

algoritmo

1 – Ler um valor para a variável A e outro valor para a variável B;

2 – Efetuar a soma dos valores incógnitos A e B, atribuindo o valor da soma na variável X; 3 – Apresentar o valor da soma contido na variável X, caso o valor de X seja maior que 10.

Codificação em Linguagem C

main( ) {

int a,B,x; clrscr( );

printf ( “digite um número: “ ); scanf ( “%d”, &a );

printf ( “digite outro número: “ ); scanf ( “%d”, &B );

x = a + B; if ( x > 10 )

printf ( “a soma dos números ée: %d “, x ); getch( );

}

desvio Condicional Composto

O comando if-else, onde o if significa “se” e o else significa “senão” é utilizado para fazer um “Desvio Condicional Composto”.

Sua forma geral é:

if (expressão) comando_1; else

comando_2;

Onde a expressão é avaliada; se for verdadeira (isto é, se a expressão tiver um valor diferente de zero), o comando_1 é executado. Se for falsa (isto é, se a expressão tiver um valor igual a zero) e se houver uma parte else, o comando_2 é executado.

Continuaremos o estudo do “if-else” com um programa simples, que lê um número do teclado e escreve na tela de seu computador se o número digitado é positivo ou se é negativo.

(33)

main( ) {

int num;

printf (“digite um número: “ ); scanf (“%d” , &num);

if (num > 0)

printf (“o número digitado é positivo”); else

printf (“o número digitado é negativo”); }

Agora algumas considerações sobre o programa acima:

• Declaramos uma variável numérica do tipo inteiro e pedimos para o usuário digitar um número.

• Na linha if (num > 0) estamos testando o número digitado para saber se o mesmo é maior do que zero. Se o resultado desta expressão for verdadeira a linha printf (“O número digitado é positivo”); será executada.

• Na linha else (senão for um número maior do que zero) estamos indicando para o programa executar a linha printf (“O número digitado é negativo”);

exemplo de aula

Primeiro exemplo

Desenvolver um programa que ler dois valores numéricos e efetuar a adição. Caso o valor somado seja maior ou igual a 10, deverá ser apresentado somando a ele mais 5; caso o valor somado não seja maior ou igual a 10, este deverá ser apresentado subtraindo 7.

algoritmo

1 – Ler um valor para a variável A e outro valor para a variável B;

2 – Efetuar a soma dos valores incógnitos A e B, atribuindo o valor da soma na variável X;

3 – Verificar se X é maior ou igual a 10; caso seja verdadeiro, calcule R  x + 5. Senão calcule R  X – 7.

Codificação em Linguagem C

main( ) {

int a,B,x,r; clrscr( );

printf ( “digite um numero: “ ); scanf ( “%d”, &a );

printf ( “digite outro numero: “ ); scanf ( “%d”, &B );

x = a + B; if ( x >= 10 ) r = x + 5;

(34)

else r = x - 7;

printf ( “o resultado do calculo e: %d “, r ); getch( );

}

múltiplos comandos dentro de um if

Quando desejamos agrupar comandos, criando um bloco de comandos, utilizamos o abre chaves “{“ e fecha chaves “}” para encapsular estes comandos.

No if é a mesma coisa, caso vários comandos sejam necessários no corpo do comando if, eles devem estar entre chaves.

Sua forma geral é:

if (expressão) { comando_11; comando_12; comando_13; } else { comando_21; comando_22; }

Onde a expressão é avaliada; se for verdadeira os comando_11, comando_12 e o comando_13 são executados. Se for falsa o comando_21 e o comando_22 são executados.

O programa abaixo dá um exemplo de como encapsulamos comandos.

main( ) {

int num;

printf (“digite um número: “ ); scanf (“%d” , &num);

if (num > 0) {

printf (“o número “); printf (“digitado é “); printf (“positivo”); }

(35)

else {

printf (“o número digitado é “); printf (“negativo”);

}

}

exercícios de Fixação

Vamos fazer alguns exercícios

1. FUP que leia dois números quaisquer, e escreva o maior deles. 2. FUP que leia dois números quaisquer, e escreva o menor deles.

3. FAÇA UM PROGRAMA que leia dois números quaisquer, e escreva o resultado do cálculo do maior dividido pelo menor.

4. FAÇA UM PROGRAMA que leia a receita e a despesa de uma empresa e apresente se ela está com LUCRO ou com PREJUÍZO.

5. FAÇA UM PROGRAMA que leia 4 notas escolares de um aluno. Calcule e apresente a média. Sabendo-se que a média de aprovação da escola é 7, apresente a informação se o aluno foi APROVADO ou REPROVADO.

6. FAÇA UM PROGRAMA que leia dois números e apresente o sinal do produto entre eles. Considere que somente números diferentes de zero serão digitados.

7. FAÇA UM PROGRAMA que leia um número e escreva “maior do que 100”, se o número digitado for maior que 100 e escreva “menor do que 100”, se o número for menor do que 100.

8. FAÇA UM PROGRAMA que leia um código:1 – sinal vermelho, 2 – sinal verde. Baseado no código digitado diga para o pedestre que está esperando no sinal:“SIGA” ou “ESPERE”

9. FAÇA UM PROGRAMA que leia a quantidade de vitórias e a quantidade de derrotas de um time de futebol. Escrever BOM se o número de vitórias for maior que o número de derrotas, caso contrário escrever RUIM.

desvio Condicional encadeado

Existem casos em que é necessário estabelecer verificação de condições sucessivas, em que uma determinada ação poderá ser executada se um conjunto anterior de instruções ou condições for satisfeito. Sendo a ação executada, ela poderá ainda estabelecer novas condições. Isto significa utilizar uma condição dentro de outra condição. Este tipo de estrutura poderá possuir diversos níveis de condição, sendo chamadas de aninhamentos ou encadeamentos.

exemplos de aula

Primeiro exemplo

Desenvolver a lógica para um programa que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que 500. Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu reajuste será de 10%; caso seja ainda maior que 1000, o reajuste deverá ser de 5%”.

algoritmo

Perceba que o problema em questão estabelece três condições para calcular o reajuste do salário do funcionário, sendo:

• Salário <= 500, reajuste de 15%

• Salário > 500, mas <= 1000, reajuste será de 10% • Salário > 1000, reajuste será de 5%

(36)

1 – Definir uma variável para o salário reajustado: novo_salario; 2 – Ler um valor para a variável salário;

3 – Verificar se o valor de salario <= 500, se sim reajustar em 15%; 4 – Verificar se o valor de salario <= 1000, se sim reajustar em 10%; 5 – Verificar se o valor de salario > 1000, se sim reajustar em 5%; 6 – Apresentar o valor reajustado, atribuindo a novo_salário. Codificação em Linguagem C

main( ) { float novo_salario,salario;

printf ( “Digite o valor do salario: “ ); scanf ( “%f”, &salario ); if ( salario <= 500 ) novo_salario = salario * 1.15; else if ( salario <= 1000 ) novo_salario = salario * 1.10; else novo_salario = salario * 1.05;

printf ( “O novo salario e: %12.2f “, novo_salario ); }

Exercícios de Fixação

Vamos fazer alguns exercícios

1 - FAÇA UM PROGRAMA que leia o valor do salário hora, a quantidade de horas trabalhadas e a quantidade de filho menores de 14 anos de um funcionário. Calcular o valor do salário bruto. Para calcular o valor do salário família levar em consideração o seguinte:

• Se o salário bruto for até R$ 500,00 o salário família será de R$ 10,50 por cada filho;

• Se o salário bruto for acima de R$ 500,00 até R$ 1.000,00 o salário família será de R$ 6,50 por cada filho;

• Se o salário bruto for acima de R$ 1.000,00 o salário família será de R$ 1,50 por cada filho. No final apresentar o valor do salário bruto e o valor do salário família a ser recebido.

2 - FAÇA UM PROGRAMA que leia o salário bruto de uma pessoa e calcule o desconto do INSS levando em consideração o seguinte:

• Para salários até R$ 500,00 a alíquota de INSS será de 8%

• Para sal.acima de R$ 500,00 até R$ 1.000,00 a alíquota de INSS será de 10% • Para sal.acima de R$ 1.000,00 a alíquota de INSS será de 12%.

No final deverá ser apresentado: • Salário bruto

• Taxa de INSS • Valor de INSS • Salário líquido

(37)

3 - FAÇA UM PROGRAMA que leia o código de uma mercadoria e que escreva o nome do produto conforme tabela abaixo:

1 – Sabão 2 – Vassoura 3 – Detergente

4 - FAÇA UM PROGRAMA que leia dois números e o código de uma operação matemática (+, -, *, /) e que apresente o resultado da operação. Por exemplo: se forem digitados os números [2] e [5] e a operação [-], será apresentado o resultado [-3].

Operadores Lógicos

Os operadores lógicos, como o próprio nome diz, avaliam uma expressão lógica e retornam valores também lógicos, ou seja, verdadeiro ou falso.

Em várias ocasiões na tomada de decisões temos que usar os operadores lógicos.

Os operadores lógicos mais comuns são: .e., .ou., .não., representados em português estruturado, mas que em linguagem C são respectivamente &&, ||, !.

A tabela seguinte apresenta todos os operadores lógicos da linguagem C: Operador Representação Descrição

&& .e. Efetua a operação lógica E. Se ambas as expressões forem verdadeiras, então o resultado será verdadeiro.

|| .ou. Efetua a operação OU. Se uma das expressões (ou ambas) for verdadeira, então o resultado será verdadeiro.

! .não. Efetua a operação lógica NÃO. Inverte o estado lógico de uma expressão; se ela for verdadeira, tona-a falsa e vice-versa.

Para entender melhor como funcionam os operadores lógicos, vamos analisar cada um deles. O Operador Lógico &&

O operador lógico && (.E.) pode ser visto como um conector lógico. Imagine que você possua dois fios ligados a uma lâmpada e a uma bateria. A lâmpada somente acenderá se você tiver ligado ambos os fios aos pólos da bateria. Acompanhe esse exemplo no seguinte diagrama:

Fio vermelho ligado Frio preto ligado Lâmpada acende

Falso Falso Falso

Verdadeiro Falso Falso

Falso Verdadeiro Falso

Verdadeiro Verdadeiro Verdadeiro

Exemplos de Aula Primeiro exemplo

Desenvolver um programa que leia um número. Informar se o número digitado está na faixa de 20 a 90. Algoritmo

1 – Ler um valor para a variável num;

(38)

Codificação em Linguagem C

main( )

{ int num; clrscr( );

printf ( “Digite um número: “ ); scanf ( “%d”, &num );

if (num >= 20 && num <= 90)

printf ( “O número está na faixa de 20 a 90” ); else

printf ( “O número está fora da faixa de 20 a 90” ); getch( );

}

O operador lógico .e. é escrito em C através do operador && , observe também a posição dos parênteses. Segundo exemplo

Desenvolver a lógica para um programa que leia um ângulo (entre 0º e 360º) e que escreva o quadrante ao qual pertence. Ignorar os eixos.

Algoritmo

1 – Ler um valor para a variável angulo;

2 – Verificar se o ângulo digitado é > 0 e < 90, se for verdade: “ângulo está no primeiro quadrante” 3 – Verificar se o ângulo digitado é > 90 e < 180, se for verdade: “ângulo está no segundo quadrante” 4 – Verificar se o ângulo digitado é > 180 e < 270, se for verdade: “ângulo está no terceiro quadrante” 5 – Verificar se o ângulo digitado é > 270 e < 360, se for verdade: “ângulo está no quarto quadrante”

Codificação em Linguagem C

main( ) {

int angulo; clrscr( );

printf ( “Digite um angulo: “ ); scanf ( “%d”, &angulo ); if (angulo > 0 && angulo < 90)

printf ( “Angulo no primeiro quadrante” ); else

if (angulo > 90 && angulo < 180)

printf ( “Angulo no segundo quadrante” ); else

if (angulo > 180 && angulo < 270) printf ( “Angulo no terceiro quadrante” ); else

Referências

Documentos relacionados

Nessa perspectiva, na intenção de fortalecer as ações de gestão da escola por meio de uma possível reestruturação mais consistente e real do PPP; na busca

Na experiência em análise, os professores não tiveram formação para tal mudança e foram experimentando e construindo, a seu modo, uma escola de tempo

A combinação dessas dimensões resulta em quatro classes de abordagem comunicativa, que podem ser exemplificadas da seguinte forma: interativo/dialógico: professor e

Outro aspecto a ser observado é que, apesar da maioria das enfermeiras referirem ter aprendido e executado as fases do processo na graduação, as dificuldades na prática

Da mesma forma que foi realizado para o programa LDAR, o cálculo da redução de emissões pela metodologia Smart LDAR utilizou dados do programa de controle vigente e

Also due to the political relevance of the problem of repressing misguided employment relationships, during the centre-left Prodi Government (2006-2008) and the

Manutenção Evolutiva de Software Gestão Administrativa da Unidade L 0000 P 01 A9 N. Aquisição de Software Gestão Administrativa da Unidade L 0000 P 01

Por último, temos o vídeo que está sendo exibido dentro do celular, que é segurado e comentado por alguém, e compartilhado e comentado no perfil de BolsoWoman no Twitter. No