Sei sulla pagina 1di 24

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

Escola de Qu mica Departamento de Engenharia Qu mica

Introdu c ao ` a Programa c ao em Linguagem C

EQE-044 Computa c ao Cient ca Aplicada

Prof. Luiz Fernando Lopes Rodrigues Silva, D.Sc.

RIO DE JANEIRO, RJ BRASIL 2013

Sum ario
1 Introdu c ao ` a Programa c ao 1.1 Interpreta c ao do Arquivofonte 1.2 Computa c ao Cient ca . . . . . 1.3 Primeiro Programa em C . . . . 1.4 Exerc cios . . . . . . . . . . . . 2 2 3 5 7 9 9 10 10 11 13 14 15 15 15 17 18 19

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

2 Tipos e Operadores B asicos 2.1 Tipos de Vari aveis . . . . . . . . . . 2.1.1 Declara c ao de Vari aveis . . . 2.1.2 Vari aveis Inteiras . . . . . . . 2.1.3 Vari aveis de Caracteres . . . . 2.1.4 Vari aveis de Ponto Flutuante 2.1.5 Vari aveis Booleanas . . . . . . 2.1.6 Tipos constantes de vari aveis 2.2 Tipos de Operadores . . . . . . . . . 2.2.1 Operadores Aritm eticos . . . 2.2.2 Operadores Relacionais . . . . 2.2.3 Operadores L ogicos . . . . . . 2.3 Exerc cios . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

Pref acio
Atualmente em qualquer area de atua ca o prossional, o computador se torna uma ferramenta cada vez mais presente. Seja para montar um relat orio para a empresa, estruturar uma apresenta ca o sobre suas atividades e progressos, executar tarefas repetitivas de an alise de dados em uma f abrica, entre muitas outras fun co es. Mas o principal objetivo deste curso e mostrar os meios de uso do computador como ferramenta cient ca para realizar c alculos de modo eciente. Em outras palavras, como analisar um problema qualquer e estruturar uma metodologia de solu ca o de forma que o computador entenda o que o usu ario quer, execute os comandos o mais r apido poss vel e forne ca resultados con aveis. O objetivo desta apostila e apenas de colocar as informa c oes b asicas sobre a linguagem de programa c ao C de modo a auxiliar o treinamento do aluno durante o curso. Como alguns t opicos ser ao colocados em sala de aula, eu coloquei alguns c odigos com espa co suciente para que voc es possam anotar as discuss oes. A descri ca o da linguagem n ao depende do sistema operacional, seja Windows, Linux, DOS, MacOS, UNIX, desde que um compilador C esteja instalado. Existem duas refer encias sobre C que eu gostaria de passar para voc es. A primeira e o livro de Brian W. Kernighan e Dennis M. Ritchie intitulado C A linguagem de programa ca o padr ao ANSI. Estes autores foram os desenvolvedores da linguagem C e apesar do livro possuir um bom conte udo, seus exemplos s ao mais voltados para manipula ca o de caracteres e manipula co es de dados gen ericos. J a o livro C++ and Object-Oriented Numeric Computing for Scientists and Engineers de Daoqi Yang e uma refer encia excelente para programa c ao cient ca. Apesar de ser um livro de C++, muitos fundamentos b asicos de C s ao usados e vale (muito!!) a pena dar uma olhada nele. #ficaadica. Prof. Luiz Fernando Lopes Rodrigues Silva Escola de Qu mica/UFRJ 09/04/2013

Cap tulo 1 Introdu c ao ` a Programa c ao


1.1 Interpreta c ao do Arquivofonte

Os programas de computador s ao formados por uma s erie de instru c oes que o computador executa. Quando voc e cria um programa, precisa especicar as instru co es que o computador precisar a executar para realizar as opera co es desejadas. A deni ca o destas instru co es e que voc e deve fazer e salvar em um arquivo, chamado de arquivo ou c odigo fonte. O arquivo fonte de um programa escrito em C deve possuir a extens ao C (ex. arqfonte.c). O arquivo fonte e o modo do programador montar a sua l ogica de programa ca o e comunicar isso ao computador. Mas o computador n ao entende diretamente o arquivo fonte e precisa de um tradutor, chamado de compilador. Para criar programas, e imperativo e necess ario que o compilador esteja instalado no computador. O compilador converte as instru co es colocadas no arquivo fonte para a linguagem de m aquina (bin aria 0 ou 1) que o computador compreende. Os arquivos gerados com a extens ao EXE ou COM cont em o c odigo de m aquina e podem ser executados pelo computador. A Fig. 1.1 ilustra esse processo de gera ca o do c odigo fonte, compila c ao e cria ca o do arquivo execut avel.

1.2 Computa c ao Cient ca

Figura 1.1: Convers ao do c odigo fonte para c odigo de m aquina.

1.2

Computa c ao Cient ca

Em qualquer aplica c ao cient ca, a eci encia computacional e muito importante e o programador deve sempre car atento a esse detalhe. Mas como montar um programa de forma eciente? Bem, antes de pensar em programa ca o propriamente dita devese estruturar muito bem qual e o problema e qual a melhor forma de resolv elo. Se isso n ao estiver bem assentado na cabe ca do programador, e melhor parar por a e come car a ler o seu problema novamente. Anal de contas, como voc e vai resolver o seu problema de forma eciente, se nem sabe ainda como resolv elo?

Dica de programa c ao do L.F. Antes de pensar em programar, organize as id eias no papel. Mesmo para os problemas mais simples. Sempre!! A princ pio pode parecer perda de tempo, mas a facilidade de estruturar o seu c odigo fonte ser a recompensadora.

As etapas necess arias de solucionar o problema e o que vamos chamar de metodologia de algoritmo e a forma como estas etapas s ao executadas est a inclu da na l ogica de programa c ao. Estas deni c oes v ao car mais claras ao analisarmos um exemplo.

1 Imagine a seguinte situa ca o: um homem est a em uma das margens de um rio com uma raposa, meia d uzia de galinhas e um saco de milho. Este

1.2 Computa c ao Cient ca

homem pretende atravessar o rio usando um pequeno barco que comporta apenas ele mesmo e uma das cargas. Contudo, ele n ao pode deixar sozinhas em uma das margens, a raposa e as galinhas nem a galinha e o milho. Nosso objetivo aqui e escrever um algoritmo que descreva as etapas necess arias para que o homem complete sua tarefa. Vamos organizar as possibilidades da primeira viagem: Na primeira viagem, o homem leva a raposa. Ent ao as galinhas e o milho cam na mesma margem. Com isso, as galinhas comeriam o milho e a tarefa fracassaria. Se na primeira viagem o homem leva o milho, as galinhas e a raposa cariam sozinhas na mesma margem. A raposa teria uma bela refei ca o, mas a tarefa iria fracassar. Au nica op ca o vi avel, portanto, e levar as galinhas na primeira viagem. A raposa e o saco de milho cariam na mesma margem sem problemas. Na segunda viagem, o homem retorna sozinho e pode pegar tanto o milho quanto a raposa. Mas e na volta da segunda viagem? Ele n ao pode deixar as galinhas com o milho nem com a raposa. A u nica solu ca o vi avel seria ele voltar com as galinhas, buscar a u ltima carga e deixar a galinha na margem original. Por m, o homem volta sozinho para buscar as galinhas. Escrevendo as instru co es em sequ encia de execu ca o, o algoritmo toma a seguinte forma: 1. Atravesse as galinhas. 2. Retorne sozinho. 3. Atravesse a raposa. 4. Retorne com as galinhas. 5. Atravesse com o milho. 6. Retorne sozinho. 7. Atravesse as galinhas.

1.3 Primeiro Programa em C

2 Exemplo da dist ancia percorrida pelo carro com acelera c ao constante. Bem, temos o problema nas m aos, ou seja, um modelo matem atico a ser resolvido. 1 (1.1) S = S0 + v0 t at2 2 Quais s ao as perguntas que sempre devemos fazer para estruturar a metodologia do algoritmo? Qual o meu objetivo? Calcular S !!! Ent ao, essa e a u ltima coisa com que devemos nos preocupar. O que eu preciso para calcular S ? S0 , v0 , a e t. Aaah, ent ao eu tenho que me preocupar em saber os valores dessas vari aveis antes de calcular S ... - Atribuir valores para S0 , v0 , a e t. - Existe alguma restri c ao num erica e/ou f sica no meu modelo? N ao existe tempo negativo. Condi ca o para que o programa rejeite valores negativos de tempo. Calculamos S . Mostramos ao usu ario o resultado. Sen ao, n ao adianta nada, n e? Mesmo para um problema simples, algumas perguntas devem ser respondidas antes de tentar calcular qualquer coisa. Eu caria muito feliz se ao longo do curso (e depois tamb em) voc es sempre montassem o algoritmo de solu ca o. Voc es notar ao que, com o tempo e a pr atica, estruturar a solu c ao de um problema car a muito mais f acil e poder a at e ser feita automaticamente. Podem conar.

1.3

Primeiro Programa em C

Agora que j a vimos como montar os nossos problemas de uma forma estruturada, j a podemos ver um primeiro exemplo de programa c ao em C. Note

1.3 Primeiro Programa em C

que ainda n ao vimos nenhum comando desta linguagem e este exemplo ir a servir apenas como uma forma de come carmos uma discuss ao em torno da l ogica de programa ca o em C. Um programa em C necessariamente deve conter a fun ca o main() que cont em as instru c oes (ou comandos) entre entre { e }. Cada comando pode ser escrito em mais de uma linha e deve ser terminado por um ponto e v rgula (; se n ao tiver, vai dar erro na compila ca o do programa). Os coment arios no c odigo fonte est ao entre /* e */ (todo o texto entre esses dois s mbolos e desconsiderado pelo compilador) ou precedidos por // (a linha toda ca comentada). Os coment arios podem conter v arias informa co es sobre o problema (qual o problema a ser resolvido, qual a metodologia que vai ser utilizada, quem programou o c odigo, quando, etc.), o c odigo fonte (o porqu e de usar um comando espec co) ou mesmo detalhes de como usar o programa depois de compilado. A princ pio, comentar o arquivo fonte pode parecer uma tarefa exaustiva, por em estes s ao muito u teis para o entendimento futuro do c odigo. Dica de programa c ao do L.F. Sempre comente o seu c odigo. N ao preciso colocar os porqu es, apenas comente!!!!! O objetivo deste primeiro programa e simplesmente escrever uma mensagem na tela para o usu ario. O c odigo fonte est a colocado a seguir. /* Este e um simples programa para escrever na tela uma mensagem de texto. Programado por: Luiz Fernando L. R. Silva */ #include<stdio.h> // Biblioteca padr~ ao I/O em tela main() { // Comando para escrever em tela. printf("Eu adoro programar em C"); } As tr es primeiras linhas do c odigo s ao coment arios (est ao entre /* e */) e colocam algumas informa co es sobre o programa. Os outros coment arios desse

1.4 Exerc cios

programa s ao menores e s ao precedidos por duas barras //. As bibliotecas em C cont em v arios comandos e fun co es padr oes para auxiliar na programa c ao. Para habilitar esses comandos, e necess ario declarar as bibliotecas no in cio do programa. A biblioteca padr ao que cont em os comandos de entrada e sa da de dados em tela chama-se <stdio.h> e est a declarada logo ap os o primeiro coment ario. Essa declara ca o habilita que o programador use todos os comandos de entrada e sa da padr ao em tela. O comando printf efetua essa opera ca o mostrando ao usu ario a seguinte mensagem: Eu adoro programar em C. Pronto, o nosso primeiro programa est a pronto.

1.4

Exerc cios

I Monte a estrutura de solu ca o para os problemas abaixo.

1) Imagine que se disponha de tr es esferas numeradas 1, 2 e 3 iguais na forma, duas delas com pesos iguais e diferentes do peso da outra. Escreva um algoritmo que, com duas pesagens numa balan ca de dois pratos, determine a esfera de peso diferente e a rela ca o entre seu peso e o peso das esferas de pesos iguais.

2) O show de uma banda de rock, que ser a realizado na margem de um rio, deve come car exatamente ` as 21h. Atrasados, a `s 20h e 43 min, os quatro integrantes da banda est ao na outra margem do rio e necessitam, para chegar ao palco, atravessar uma ponte e sempre com a lanterna. Cada integrante possui um tempo diferente para atravessar a ponte: o vocal leva 10 minutos, o guitarrista 5 minutos, o baixista 2 minutos e o baterista 1 minuto. Evidente que quando dois atravessam juntos, o tempo computado e o do mais lento. Escreva um algoritmo que permita que a banda atravesse a ponte (sem estrelismos) de modo que o show comece na hora marcada.

3) A troca de calor em um reator n ao isot ermico precisa ser otimizada. Voc e foi incumbido de calcular a quantidade de calor trocada entre o reator e o meio ambiente. O modelo de troca t ermica est a colocado abaixo, onde Q e a quantidade de calor trocada, U A e o coeciente global de transfer encia

1.4 Exerc cios

de calor, Tr e a temperatura do reator e T e a temperatura do ambiente. Q = U A(Tr T ) (1.2)

4) A Ba a de Guanabara possui uma concentra ca o de petr oleo que est a se dispersando com o passar do tempo. A dispers ao de petr oleo na ba a segue o modelo descrito na Eq. 1.3 onde Cp e a concentra ca o de petr oleo no instante t, Cp0 e a concentra c ao inicial de petr oleo e A ea area onde o petr oleo est a disperso. Contudo, a area de dispers ao do petr oleo varia devido a ` condi co es clim aticas e com o pr oprio tempo. Um modelo (Eq. 1.4) descreve a varia c ao da a rea em que o petr oleo est a disperso, onde o par ametro M e uma m edia dos efeitos clim aticos. (1.3) Cp = Cp0 eAt et A=M (1.4)

Cap tulo 2 Tipos e Operadores B asicos


2.1 Tipos de Vari aveis

Vamos considerar a seguinte express ao matem atica: z =y+ix (2.1)

Para que a Equa ca o 2.1 fa ca sentido em no c odigo fonte, os identicadores x, y , z e i devem ser declarados de forma adequada. Todos os identicadores devem ser declarados antes de serem usados. As declara co es introduzem entidades representadas por seus identicadores e seus tipos (ex. inteiro ou caractere). Os tipos das vari aveis fornecem propriedades diferentes tanto na forma de armazenamento da vari avel na mem oria RAM quanto na pr opria manipula ca o e opera c ao da vari avel. Existem opera c oes que s o s ao poss veis ou s ao muito mais ecientes se realizadas com um determinado tipo de vari avel. if( i == 0 ) { /* realiza os comandos aqui dentro */ }

Como voc e iria igualar o inteiro 0 e a vari avel i se esta n ao fosse do tipo inteira?? Ia car meio complicado, n e?? A sintaxe dos identicadores
1

Os identicadores s ao as letras usadas para identicar as suas vari aveis.

2.1 Tipos de Vari aveis

10

s ao palavras reservadas na linguagem e n ao podem ser usadas para denir vari aveis. Algumas palavras reservadas est ao colocadas na Tabela 2.1. Tabela 2.1: Palavras reservadas na linguagem C. auto break case const double else enum for int long typedef continue struct switch return if

2.1.1

Declara c ao de Vari aveis

A declara c ao das vari aveis no c odigo fonte indica que o programa deve reservar um espa co na mem oria RAM para cada vari avel declarada. Vamos considerar que a mem oria RAM est a distribu da como na Figura 2.1.1 e dividida em bytes.

Figura 2.1: Representa ca o da mem oria RAM subdividida em bytes. Agora vamos considerar que no in cio do programa as vari aveis i e z estejam sendo declaradas e portanto, um espa co na mem oria deve ser reservado no momento de execu c ao do programa. Este procedimento e o que chamamos de aloca ca o de espa co na mem oria. Deste modo, os valores que forem atribu dos nestas vari aveis cam alocados em um endere co espec co da mem oria RAM. A quantidade de mem oria que deve ser reservada depende do tipo da vari avel.

2.1.2

Vari aveis Inteiras

Cada vari avel inteira ocupa 2 bytes de mem oria e o valor armazenado na mem oria n ao inclui a parte fracion aria. Um exemplo segue abaixo.

2.1 Tipos de Vari aveis

11

Figura 2.2: Aloca c ao de vari aveis na mem oria RAM. #include<stdio.h> main() { int i; // Declara ca ~o de i como inteira int j,k; /* Declara ca ~o de j e k como inteiros. E poss vel declarar mais de uma vari avel por linha */ int ii = 123; // Ao declarar ii, j a atribuo um valor. i = 2; // Atribui ca ~o do valor 2 para a vari avel i j = i; // Atribui ca ~o do valor contido em i para j k = 2.3; /* N~ ao considera a parte fracion aria! k assume o valor de 2 */ /* Sa da em tela das vari aveis*/ printf("O valor de i eh: %d \n",i); printf("O valor de j e k sao: %d %d \n",j,k); printf("%d mais %d igual a %d \n",1,2,1+2); }

2.1.3

Vari aveis de Caracteres

Cada vari avel caractere ocupa 1 byte na mem oria e armazena valores inteiros que s ao convertidos em caracteres ASCII (o valor do inteiro 98 corresponde ao caractere b no conjunto ASCII). Normalmente, o que se quer e uma vari avel que armazene um conjunto de caracteres para que seja poss vel construir palavras ou senten cas. Alguns caracteres s ao especiais e possuem algumas fun co es espec cas. Um exemplo (extremamente idiota!) de aplica ca o de caracteres.

2.1 Tipos de Vari aveis Caractere \n \t \v \a \r \b Fun c ao espec ca nova linha tabula ca o horizontal tabula ca o vertical alerta sonoro cursor volta para o in cio da linha backspace

12

Tabela 2.2: Caracteres especiais para operar a sa da de dados. #include <stdio.h> #include <conio.h> main() { char ch1, ch2; printf("Entre com 1 caracter: "); /* le um caracter do console sem mostra-lo ch1 = getch();

*/

printf("\nEntre com 1 caracter: "); /* le um caracter do console mostrando-o em seguida: getche() = getch() and echo */ ch2 = getche(); /* Mostra os caracteres lidos na tela: */ printf("\nO primeiro caracter lido foi: %c", ch1); printf("\nO ultimo caracter lido foi: %c\n", ch2); /* Mostra os caracteres lidos na tela usando putch(): */ printf("\nCaracterres lidos:\n"); putch(ch1); putch(ch2); printf("\n"); /* A funcao getchar le um caracter da entrada padrao (stdin): */ ch1 = getchar();

2.1 Tipos de Vari aveis

13

/* A funcao putchar mostra um caracter na saida padrao (stdout): */ putchar(ch1); printf("\n"); }

2.1.4

Vari aveis de Ponto Flutuante

As vari aveis de ponto utuante s ao capazes de armazenar as casas decimais de um n umero. Existem duas classica co es para as vari aveis de ponto utuante, com precis ao simples (normalmente com 6 casas decimais) ou de dupla precis ao (normalmente com 15 casas decimais). Um exemplo quantica bem a diferen ca entre esses dois tipos de vari aveis. #include<stdio.h> #include<math.h> int main() { float pi_float; double pi_double; pi_float = acos(-1.); pi_double= acos(-1.); printf("Valor com precisao simples: %21.19f\n", pi_float); printf("Valor com precisao dupla : %21.19f\n", pi_double); return(1); } Compilando e executando o c odigo acima em um AthlonXP 2.2GHz, os resultados para est ao colocados abaixo. Valor com precisao simples : 3.1415927410125732000 Valor com precisao dupla : 3.1415926535897931000

2.1 Tipos de Vari aveis

14

Obs.: executem o programa colocado acima mudando a refer encia %21.19f da vari avel de ponto utuante. Mude o n umero das casas decimais, o n umero dos espa cos reservados para a vari avel e troque o f do ponto utuante por %g, %e e %E. Vejam e analisem as mudan cas.

2.1.5

Vari aveis Booleanas

Um booleano, representado por bool em C++, pode armazenar dois valores: true ou false, e e usado para expressar os resultados de express oes l ogicas. Na linguagem C, n ao existem vari aveis booleanas, sendo estas tratadas como um inteiro com valor de 0 (falso) ou 1 (verdadeiro). Portanto, por deni ca o, false tem o valor 0 e true tem valor 1 em C. bool flag = true; double d; // declara ca ~o de flag como booleana C++ style

/* Algum c odigo no meio do caminho, que pode eventualmente mudar o valor de flag */ d = 3.14; if(flag == false) { d = 2.718; } /* E o programa continua... */ Algumas compara co es est ao descritas na tabela abaixo. Tabela 2.3: Compara co es de booleanos && signica E; || signica OU true && true = true true || true = true true && false = false true || false = true false && true = false false || true = true false && false = false false || false = false

2.2 Tipos de Operadores

15

2.1.6

Tipos constantes de vari aveis

Em diversos casos, pode ser interessante manter a posi c ao do endere co de mem oria constante e associados a um identicador e um tipo de dado. Isto e caracterizado pelo fato de n ao ser poss vel modicar o valor da vari avel durante a execu ca o do programa. Assim, e ilegal redenir uma constante e, por esta raz ao, uma constante deve ser inicializada quando for declarada. Para um programa de c alculo de velocidade terminal, seria seguro xar o valor do m odulo da gravidade, 9,81 m/s2 . const float grav = 9.81; const int tam; grav = 3.14; // declara ca ~o de float const // Ilegal, const deve ser inicializado // Ilegal, const n~ ao pode ser alterado

2.2

Tipos de Operadores

Pronto, j a sabemos quais s ao os tipos de vari aveis que existem e agora estamos aptos a realizar opera c oes com elas.

2.2.1

Operadores Aritm eticos

S ao os operadores b asicos de soma (+), subtra ca o (), multiplica ca o () muito importante entender o tipo de vari e divis ao (/). E avel que se est a operando, pois perda de informa c ao pode ocorrer. Veja o exemplo a seguir. /* e uma opera ca ~o entre dois inteiros, e vai fornecer um resultado inteiro!! m = 3, as casas decimais s~ ao ignoradas */ double n = 3/4; /* n = 0 */ double y = 3.0/4; /* Ao operar, o inteiro 4 e convertido para double! y = 0.75 */ double y = 3/4.0; /* Idem, 3 e convertido em 3.0! y = 0.75 */ double m = 13/4;

2.2 Tipos de Operadores

16

As opera co es matem aticas s ao iniciadas da esquerda para a direita. A multiplica c ao e a divis ao possuem uma maior preced encia em rela c ao ` a soma e subtra c ao. Contudo, o que est a contido nos par enteses possui uma preced encia maior que a dos operadores. Vejamos as etapas de execu ca o das express oes colocadas no exemplo abaixo. int m; m = 1 + 2 + 3*4;

/* m = 1 + 2 + 12; m = 3 + 12; m = 15; */ /* m = 1 + (5)*4; m = 1 + 20; m = 21; */ /* m = 5 + 10 + 5; m = 15 + 5; m = 20; */ /* m = (15 + 15)/3; m = 30/3; m = 10; */

m = 1 + (2 + 3)*4;

m = 5 + 10 + 15/3;

m = (5+10+15)/3;

Dica de programa c ao do L.F. Sempre que voc e tiver d uvidas sobre a ordem das opera c oes, use o par enteses sem medo de ser feliz.

int m; m = ((5+3)*2) - 3;

/* m = (8*2) - 3; m = 16 - 3; m = 13; */

Os operadores de incremento (++) e decremento () s ao muito usados em qualquer programa C, pois facilitam a leitura do c odigo (alguns dizem quem n ao...). int conta = 0;

2.2 Tipos de Operadores

17

int m = 2; conta++; /* Essa opera c~ ao pode conta = conta + 1; conta--; /* Essa opera c~ ao pode conta = conta - 1; ++m; /* m = 3; */ m = conta++; /* m = 0; conta = Vamos analisar o seguinte c odigo. #include<stdio.h> int main() { int valor = 1;

ser substitu da por: (conta = 1) */ ser substitu da por: (conta = 0) */ 1;*/

printf("Usando depois da variavel : %d\n", valor++); printf("Valor apos incremento: %d\n", valor); valor = 1; printf("Usando depois da variavel : %d\n", ++valor); printf("Valor apos incremento: %d\n", valor); return(1); } Ainda e poss vel realizar opera co es de atribui ca o da seguinte maneira. total += 100; conta -= 5; metade /=2; // Significa: total = total + 100; // Significa: conta = conta - 5; // Significa: metade = metade/2;

2.2.2

Operadores Relacionais

Os operadores relacionais s ao > (maior que), < (menor que), >= (maior ou igual a), <= (menor ou igual a), == (igual a) e ! = (n ao igual). A nota ca o ! e o operador de nega ca o. O resultado destas opera c oes e sempre um booleano. int x = 5;

2.2 Tipos de Operadores

18

bool b, c; b = (x < 6); c = (x == 0); if(b != c) x = 17; if(b) x = 19; if(!b) x = 221;

// b = true, j a que x e menor que 6 // b = false, j a que x n~ ao e 0 // Se b n~ ao e igual a c, x = 17 // Se b e true, ent~ ao fa ca x = 19 // Se b e false, ent~ ao fa ca x = 221

Deve-se tomar muito cuidado ao usar essas opera co es. Considere o exemplo abaixo. int m = bool b, b = 3 < m = 20; c = 3 < 7; c; m < 9; // b = true m < 9; // c = true

Os operadores relacionais s ao executados da esquerda para a direita, por isso a express ao 3 < m < 9 e equivalente a ` (3 < m) < 9. Ent ao, esta express ao sempre e avaliada como true pois 3 < m pode ser tanto 1 (true) quanto 0 (false).

2.2.3

Operadores L ogicos

Os operadores l ogicos, assim como os relacionais, resultam em um valor booleano. Esses operadores s ao && (e) e || (ou) e possuem uma preced encia maior que os operadores relacionais (s ao executados antes). A Tabela 2.3 mostra as rela co es com os booleanos. Veja os exemplos a seguir, considerando a vari avel bool de C++. bool b = true, c = false; bool d = b && c; bool e = b || c;

// d = false // e = true

2.3 Exerc cios

19

bool f = (e == false) && c; bool g = (d == true ) || c; bool h = (d = true ) || c;

// f = false // g = false // h = true

Vamos agora rever a express ao 3 < m < 9. A maneira correta de programar esta express ao em C seria (3 < m) && (m < 9) Como o operador < possui uma preced encia maior que o operador &&, os dois pares de par enteses poderiam ser omitidos.

2.3

Exerc cios

1 As vari aveis a, b, c, d, e, f e g foram inicializadas com os seguintes valores: a = 3. b = 2. c = 5. d = 4. e = 10. f = 2. g = 3.

Efetue as seguintes express oes em C, apresentando a preced encia de opera c oes: 1. 2. 3. 4. 5. saida = a*b+c*d+e/pow(f,g) saida = a*(b+c)*d + pow(e/f,g) saida = a*(b+c)*(d+e)/pow(f,g) saida = (-(-9)+sqrt((-9)*(-9)-4*3*6))/(2*3) saida = ((pow(3,2)==9)&&(acos(0)==0))||(4%8==3)

2 Analise o c odigo abaixo para calcular a m edia das notas de um aluno. Programe este c odigo e retire alguns dos coment arios e comente alguns comandos para entender como o c odigo funciona.

2.3 Exerc cios

20

/*C alculo da m edia dos alunos*/ #include <stdio.h> int main() { double M,P1,P2; // Entrada de dados pelo c odigo P1 = 5.0; P2 = 7.5; /* Entrada de dados em tela printf("Digite o valor da primeira prova P1\n"); printf("Digite o valor da segunda prova P2\n"); scanf("%16le",&P1); scanf("%16le",&P2); */ // C alculo da m edia // C alculo direto M=(P1+P2)/2.; // C alculo em duas etapas //M = P1 + P2; //M /= 2; if(M >= 7.) { printf("O aluno esta aprovado\n"); } else { printf("O aluno devera fazer prova final\n"); } printf("A media do aluno e: %.2f\n",M); return(1); }

3 Fa ca um programa em C que calcule a velocidade em queda livre de um corpo ormula de queda livre e dada por a 6 m de altura. Sabe-se que a f ca um outro programa em que seja poss vel que v = 2gh, onde g = 9.81. Fa o usu ario entre na tela com o valor da altura (cuidado, porque at e onde eu sei e os limites da f sica permitem, n ao existe altura negativa).

2.3 Exerc cios

21

4 Fa ca um programa em C que leia uma temperatura em graus Farenheit, converta-a para uma temperatura absoluta em Kelvins, e escreva o resultado. A f ormula de convers ao e: 5. T (F ) 32.0 + 273.15 (2.2) T (K ) = 9. 5 Escreva um programa que converta um intervalo de tempo dado em minutos para horas, minutos e segundos. Por exemplo, se o tempo for dado 147.87 minutos, o programa deve fornecer 2h 25min e 52.2s.

6 O coseno hiperb olico e denido pela equa ca o: cosh(x) = ex + ex 2. (2.3)

Escreva um programa em C para calcular o coseno hiperb olico para um valor x fornecido pelo usu ario. Use o programa para calcular o coseno hiperb olico de 3.0. Compare a resposta que seu programa fornece com a resposta produzida pela fun c ao cosh(x), contida na biblioteca <math.h>.

7 Escreva um programa que compute as seguintes opera c oes j = i-- + ++i; k = j + j++; k*= k++; e escreva em tela os resultados de j e k , sendo i inicializado com 5. Tente executar o programa em diferentes computadores, se poss vel. O resultado destas opera co es e dependente da m aquina e pode levar a erros absurdos. Programadores experientes sabem reconhecer tais opera c oes e n ao as usam.

8 As duas express oes i = 5; j = (i = 7) + (k = i + 3);

2.3 Exerc cios

22

s ao permitidas mas podem levar a distintos. O valor de j pode ser 17 esquerda (i = 7) ou (k = i + 3) pode ser tanto 10 quanto 8. Teste valores de j e k .

resultados diferentes em computadores ou 15 dependendo se a sub-express ao a ` e executado antes. Assim, o valor de k o c odigo em sua m aquina e informe os

9 A fun ca o rand(), declarada na biblioteca <stdlib.h>, gera um n umero em e denida pseudo rand omico entre 0 e RAND MAX. A macro RAND MAX tamb em <stdlib.h>. Escreva um c odigo para gerar um n umero aleat orio entre 1 e 1.

poss 10 E vel ocorrer divis ao por zero no trecho de c odigo abaixo? int x = rand(), y = rand(); if( (x != 5) && (y/(x-5) < 30) ) z = 2.17; E no trecho de c odigo seguinte? int x = rand(), y = rand(); if( (y/(x-5) < 30) && (x != 5) ) z = 2.17; A ordem de avalia ca o das express oes l ogicas afeta o resultado nal?

Potrebbero piacerti anche