Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila C LINGUAGEM DE PROGRAMAÇÃO, Slides de Programação em C

Apostila de C, resumo de toda a matéria de c

Tipologia: Slides

2021

Compartilhado em 06/04/2021

robert-kayke
robert-kayke 🇧🇷

5

(2)

2 documentos

1 / 170

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introduc¸˜
ao `
a Ciˆ
encia da
Computac¸˜
ao Usando a
Linguagem C
Editado por:
Carlos Hitoshi Morimoto
Ronaldo Fumio Hashimoto
Compilac¸˜
ao de notas de aulas
utilizadas em disciplinas introdut´
orias
do Departamento de Ciˆ
encia da Computac¸˜
ao
do Instituto de Matem´
atica e Estat´
ıstica
da Universidade de S˜
ao Paulo.
S˜
ao Paulo 2010
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Apostila C LINGUAGEM DE PROGRAMAÇÃO e outras Slides em PDF para Programação em C, somente na Docsity!

Introduc¸˜ao `a Ciˆencia da

Computac¸˜ao Usando a

Linguagem C

Editado por:

Carlos Hitoshi Morimoto

Ronaldo Fumio Hashimoto

Compilac¸˜ao de notas de aulas

utilizadas em disciplinas introdut´orias

do Departamento de Ciˆencia da Computac¸˜ao

do Instituto de Matem´atica e Estat´ıstica

da Universidade de S˜ao Paulo.

S˜ao Paulo – 2010

Pref´acio

Esta apostila ´e uma compilac¸˜ao de notas de aulas de disciplinas de Introduc¸˜ao `a Ciˆencia da Computac¸˜ao ofereci- das pelo Departamento de Ciˆencia da Computac¸˜ao do IME/USP e tem por objetivo apresentar conceitos b´asicos de computac¸˜ao e programac¸˜ao por meio de exerc´ıcios pr´aticos.

Originalmente, a compilac¸˜ao destas notas de aulas foi realizada com o objetivo de apresentar um material de apoio para o curso n˜ao-presencial de MAC2166 oferecido aos alunos da Escola Polit´ecnica da USP. Tradicional- mente, a linguagem C ´e utilizada no ensino dessa disciplina, e por isso ela tamb´em ´e utilizada nessa apostila. Com este material pronto, pensamos que ele possa ser ´util tamb´em aos alunos de cursos presenciais.

Pela nossa experiˆencia, o m´etodo mais eficaz para aprender a programar ´e programando. Por isso, as notas de aula est˜ao organizadas na forma de resoluc¸˜ao de v´arios exerc´ıcios, com foco na resoluc¸˜ao de problemas, estruturando a soluc¸˜ao na forma de um programa, ao inv´es da simples descric¸˜ao de comandos da linguagem C.

Obviamente, cada professor confere `a sua aula um “sabor” e um “colorido” diferente: cada um tem sua pr´opria maneira de ensinar. Por isso, advertimos que n˜ao necessariamente estas notas de aulas ser˜ao seguidas pelo seu professor, mas de toda maneira, esperamos que esta apostila seja ´util para os alunos como material de estudo e de apoio em seu primeiro contato com um curso introdut´orio de computac¸˜ao e programac¸˜ao.

Vale a pena ressaltar que estas notas de aula s˜ao resultado de uma experiˆencia e de um esforc¸o conjunto de muitos professores do departamento que j´a ministraram estas disciplinas. Por isso, queremos deixar aqui nosso reconhecimento deste esforc¸o e tamb´em nossos agradecimentos.

Um bom estudo!

S˜ao Paulo, janeiro de 2010.

Carlos Hitoshi Morimoto e Ronaldo Fumio Hashimoto

1 Como Funciona um Computador

Carlos H. Morimoto e Thiago T. Santos

O objetivo dessa aula ´e apresentar uma breve descric¸˜ao do funcionamento de um computador, para que vocˆe possa se familiarizar com alguns termos que ser˜ao muito utilizados ao longo do curso. Para descric¸˜oes mais completas, vocˆe pode encontrar na Internet v´arios s´ıtios que descrevem o funcionamento dessa m´aquina, como por exemplo http://www.ime.usp.br/~macmulti/historico/.

Ao final dessa aula vocˆe deve ser capaz de:

  • Descrever as principais partes de um computador: Unidade Central de Processamento (microproces- sadores), Mem´oria e Dispositivos de Entrada e Sa´ıda.
  • Descrever o que ´e software e hardware.
  • Descrever o que s˜ao linguagens de alto n´ıvel e de baixo n´ıvel.
  • Definir o que ´e um compilador.
  • Descrever o que ´e um algoritmo e dar exemplos pr´aticos.

1.1 As partes de um computador

A maioria dos computadores segue a arquitetura de von Neumann, que descreve um computador como um conjunto de trˆes partes principais: a unidade central de processamento ou UCP (que por sua vez ´e composta pela unidade l´ogico-aritm´etica (ULA) e pela unidade de controle (UC)), a mem´oria e os dispositivos de entrada e sa´ıda (E/S). Todas as partes s˜ao conectadas por um conjunto de cabos, o barramento. Esses componentes podem ser vistos na figura 1.1a.

( a ) ( b )

Figura 1: a) Componentes b´asicos de um computador e (b) elementos b´asicos da UCP.

1.1.1 Unidade Central de Processamento - UCP

A figura 1.1b mostra uma UCP em uma configurac¸˜ao muito simples. De forma geral, a UCP pode ser dividida em duas partes, a unidade l´ogica e aritm´etica (ULA) e a unidade de controle (UC). A ULA ´e capaz de desempenhar dois tipos de operac¸˜oes: operac¸˜oes aritm´eticas, como somas e subtrac¸˜oes, e comparac¸˜oes, como igual a ou maior que. A UC orquestra todo o resto. Seu trabalho ´e ler instruc¸˜oes e dados da mem´oria ou dos dispositivos de entrada, decodificar as instruc¸˜oes, alimentar a ULA com as entradas corretas de acordo com as instruc¸˜oes e enviar os resultados de volta `a mem´oria ou aos dispositivos de sa´ıda. Um componente chave dos sistema de controle ´e um contador de programa (ou PC = program counter) que mant´em o enderec¸o da instruc¸˜ao corrente e que, tipicamente, ´e incrementado cada vez que uma instruc¸˜ao ´e executada, a n˜ao ser que a pr´opria instruc¸˜ao

corrente indique onde se encontra a pr´oxima instruc¸˜ao, permitindo assim que um conjuntos de instruc¸˜oes seja repetido v´arias vezes. Desde a d´ecada de 1980, a ULA e a UC s˜ao inseridas em um ´unico circuito integrado: o microprocessador.

H´a v´arios fabricantes e modelos de microprocessadores, como o Pentium da Intel, o Athlon da AMD e o PowerPC da IBM. Cada microprocessador possui um conjunto de instruc¸˜oes finito, que s˜ao executadas a uma determinada frequˆencia. As frequˆencias comuns atualmente giram entre 1 e 3 GHz (Giga Hertz). O microprocessador apenas busca a pr´oxima instruc¸˜ao (ou dados) na mem´oria e a executa, em um ciclo infinito (ou at´e desligarem o com- putador). A figura 1.1b mostra a ULA, recebendo informac¸˜oes dos registradores^1 A e B e colocando o resultado no registrador C. O registrador de instruc¸˜oes (RI) define a operac¸˜ao a ser executada. Esses registradores fazem parte da unidade de controle. A UC ´e capaz de configurar seus recursos (como registradores e a ULA) para executar cada instruc¸˜ao.

1.1.2 Mem´oria

Conceitualmente, a mem´oria do computador pode ser vista como uma lista de c´elulas. Cada c´elula tem um enderec¸o numerado sequencialmente que pode armazenar uma quantidade fixa e pequena de informac¸˜ao. Essa informac¸˜ao pode ser ou uma instruc¸˜ao , que diz ao computador o que fazer, ou dados , a informac¸˜ao que o computador deve processar utilizando as instruc¸˜oes.

A mem´oria pode ser classificada em 2 grupos, as mem´orias vol´ateis e n˜ao vol´ateis (ou permanentes). As mem´orias vol´ateis (mem´orias do tipo RAM - Random Access Memory) precisam de energia para manter seu conte´udo (ou seja, s´o funcionam quando o computador est´a ligado). Quando desligamos o computador, as informac¸˜oes importantes s˜ao armazenadas nos dispositivos de mem´oria n˜ao vol´ateis (como o disco r´ıgido ou HD - Hard Drive). Os dispositivos de mem´oria vol´atil s˜ao mais caros e de menor capacidade, por´em s˜ao muito mais r´apidos, tornando poss´ıvel ao computador realizar o processamento de forma mais eficiente. Tipicamente, um computador pessoal hoje tem 1GB a 4GB de RAM e 80GB a 250GB de HD.

1.1.3 Dispositivos de Entrada e Sa´ıda - E/S

Os dispositivos de E/S definem como o computador recebe informac¸˜ao do mundo exterior e como ele devolve informac¸˜ao para o mundo exterior. Teclados, mouses, scanners , microfones e cˆameras s˜ao dispositivos comuns de entrada enquanto monitores e impressoras s˜ao dispositivos comuns de sa´ıda. Discos r´ıgidos e placas de rede, que permitem conex˜oes entre computadores, podem atuar como dispositivos tanto de entrada quanto de sa´ıda.

1.2 Linguagem de programac¸˜ao

Vimos que o processador executa uma instruc¸˜ao por vez, e que as instruc¸˜oes s˜ao bastante simples. Um pro- grama pode ser definido como uma sequˆencia de instruc¸˜oes, que ficam armazenadas na mem´oria. Na pr´atica, ´e muito dif´ıcil trabalhar diretamente com instruc¸˜oes da m´aquina. Durante o curso vocˆe aprender´a como solu- cionar problemas computacionais usando uma linguagem de alto n´ıvel como C. Um programa escrito em uma linguagem de alto n´ıvel ´e mais f´acil de escrever e entender, por´em n˜ao pode ser executado diretamente pelo microprocessador. ´E necess´ario converter o programa em linguagem de alto n´ıvel (conhecido como programa fonte) para um programa em linguagem de m´aquina (ou linguagem de baixo n´ıvel), que possa ser executado pelo computador. Essa convers˜ao ´e realizada por um programa chamado de compilador.

E como instruc¸˜oes e dados podem ser utilizados para produzir algo ´util? Imagine uma cozinha, contendo arm´arios com diversos ingredientes, utens´ılios de cozinha, um forno e... um padeiro. O padeiro segue uma receita para obter, a partir dos ingredientes e com o aux´ılio do forno e dos utens´ılios, um bolo. Cada receita produz um tipo de bolo diferente, ou seja, mudando a receita, muda-se o bolo.

(^1) Registradores s˜ao elementos de mem´oria utilizados dentro da UCP

2 Um Primeiro Programa em C

Ronaldo F. Hashimoto, Carlos H. Morimoto e Jos´e A. R. Soares

O objetivo dessa aula ´e introduzir vocˆe `a linguagem C em ambiente Linux, primeiramente mostrando a sua estrutura, e a seguir com um exemplo simples. Antes de iniciar essa aula, ´e desej´avel que vocˆe disponha de um editor de texto para escrever o programa, e verifique tamb´em a existˆencia do compilador gcc em seu sistema.

Ao final dessa aula vocˆe deve ser capaz de:

  • Descrever o ambiente em que os seus programas ser˜ao desenvolvidos.
  • Escrever um programa em C que recebe dados do teclado e imprime dados na tela, usando as func¸˜oes scanf e printf.
  • Compilar um programa em C usando o gcc.
  • Executar o programa ap´os a compilac¸˜ao.

2.1 Sobre Linux

Todo programa roda em um ambiente definido pelo conjunto de hardware e software a sua disposic¸˜ao. Como mais de 90% dos computadores pessoais (PCs) no mundo usam algum sistema operacional da Microsoft, vocˆe provavelmente n˜ao sabe o que ´e Linux, e muito menos ainda sabe por que esses professores de Computac¸˜ao teimam em insistir que h´a alguma vantagem em usar Linux em seu PC, quando vocˆe est´a muito satisfeito (ou confort´avel) com o sistema que vocˆe possui agora.

O Linux comec¸ou a ser desenvolvido em 1991 por Linus Torvalds e ´e baseado no sistema operacional Unix. Esse projeto pode ser considerado hoje como um dos melhores exemplos de sucesso no desenvolvimento de software aberto (e que ´e gr´atis!). A maior aplicac¸˜ao do Linux se encontra em servidores (essas m´aquinas que mantem a Internet no ar) e por isso muitas companhias j´a apoiam esse sistema, como a Dell, HP e a IBM, entre outras. Como exemplo de usu´ario podemos citar a Google, que (estima-se) possui cerca de 450.000 servidores rodando Linux. Al´em de servidores, o Linux ´e utilizado tamb´em em supercomputadores, em plataformas de jogos como o PlayStation 2 e 3, em telefones celulares, e muitos outros sistemas computacionais. No entanto, apenas cerca de 1% dos desktops rodam Linux.

Para aprender a programar em C vocˆe n˜ao precisa instalar Linux em seu computador, pois h´a v´arias alternativas de ferramentas que vocˆe pode usar para desenvolver seus programas no ambiente Windows que seu professor pode lhe indicar. Por´em, essa ´e uma excelente oportunidade de conhecer o Linux, o que lhe pode trazer uma grande vantagem profissional no futuro (assim como, por exemplo, talvez seja importante aprender inglˆes e chinˆes). Um exemplo de projeto de grande porte que pode impulsionar ainda mais o uso de Linux ´e o projeto OLPC (one laptop per child), tamb´em conhecido como laptop de 100 d´olares, que tem o potencial de atingir milh˜oes de crianc¸as em todo o mundo.

2.2 Interfaces Gr´aficas x Linha de Comando

Vocˆe provavelmente j´a est´a familiarizado com interfaces gr´aficas, essas que apresentam janelas, menus, ´ıcones e outros componentes gr´aficos que vocˆe pode clicar, um cursor que vocˆe controla com o mouse, etc. Essas interfaces foram desenvolvidas na d´ecada de 1990, sendo que na d´ecada de 1980 as melhores interfaces eram do tipo linha de comando. Nesse tipo de interface, o monitor, em geral verde, era capaz de apresentar apenas texto. Dessa forma o usu´ario precisava digitar o nome do comando a ser executado pelo computador.

Atualmente, no Linux, vocˆe tem aplicac¸˜oes do tipo Terminal que criam uma janela no ambiente gr´afico onde vocˆe pode entrar com comandos usando o teclado 2. ´E no Terminal, que vocˆe vai compilar e executar o seu

(^2) Veja em nossa p´agina como fazer isso no Windows, usando por exemplo uma janela do CYGWIN

programa.

2.3 Sistema de Arquivos

As informac¸˜oes que vocˆe possui no computador s˜ao armazenadas nos dispositivos de mem´oria n˜ao vol´atil na forma de arquivos. De forma geral, podemos definir 3 tipos de arquivos: diret´orios, dados e aplicativos. Di- ret´orios s˜ao arquivos que cont´em outros arquivos e permitem que vocˆe organize todas as informac¸˜oes em seu disco (HD). Os outros tipos de arquivos contem informac¸˜oes. A diferenc¸a b´asica entre eles ´e que os aplicativos podem ser executados pelo computador, enquanto os dados (as vezes chamados de documentos) s˜ao utilizados como entrada e/ou sa´ıda dos aplicativos.

O compilador gcc, por exemplo, ´e um aplicativo 3 que recebe como entrada um arquivo fonte, e gera um arquivo execut´avel (um outro aplicativo). O editor de texto ´e um exemplo de outro tipo de aplicativo, que n˜ao necessariamente precisa receber um arquivo de entrada, e pode gerar arquivos de dados na sa´ıda. Digamos que vocˆe use um editor de texto para escrever um programa em C, e salva esse programa no arquivo “exemplo.c”. Embora esse arquivo contenha um programa, ele n˜ao pode ser executado enquanto n˜ao for traduzido para linguagem de m´aquina pelo compilador gcc.

Para esse curso, recomendamos que vocˆe sempre rode o gcc com as seguintes opc¸˜oes: “-Wall -ansi -O2 -pedantic”. Essas opc¸˜oes garantem que o gcc vai lhe fornecer todas os avisos que ele ´e capaz de gerar para prevenir vocˆe contra poss´ıveis falhas no seu programa. Assim, para compilar o arquivo “exemplo.c”, podemos utilizar o seguinte comando na janela Terminal:

gcc -Wall -ansi -O2 -pedantic exemplo.c -o exemplo

A opc¸˜ao “-o” indica o nome do arquivo de sa´ıda, no caso, apenas “exemplo”, sem nenhuma extens˜ao.

2.4 O Esqueleto de um Programa em C

Finalmente, vamos ver qual o conte´udo de um arquivo com um programa em C. Para que vocˆe consiga compilar o seu programa em C sem problemas utilizando o gcc, todos os seus programas devem possuir o seguinte esqueleto:

1 #include 2 3 i n t main ( ) 4 { 5 /d e c l a r a c¸˜a o de v a r i ´a v e i s/ 6 7 /l i s t a de comandos/ 8 9 return 0 ; 10 }

Por enquanto considere esse esqueleto como uma “receita de bolo”, ou seja, todo programa em C deve conter os comandos das linhas 1 , 3 , 4 , 9 e 10.

2.5 Exemplo de um Programa

Para entendermos melhor, considere o programa em C apresentado na Fig. 2. Esse programa faz uma pergunta ao usu´ario (quantos anos vocˆe tem?), espera que o usu´ario entre com uma resposta num´erica atrav´es do teclado,

(^3) Muitas vezes chamamos aplicativos de programas, mas isso seria confuso em nosso contexto j´a que os programas que vocˆe vai escrever em C n˜ao podem ser executados antes de compilados.

2.5.4 Func¸˜ao de Impress˜ao na Tela

Basicamente, a func¸˜ao printf imprime todos os caracteres que est˜ao entre aspas. Assim, o printf da linha 13 imprime a mensagem (sem as aspas) "Quantos anos voce tem?: ". Note o espac¸o em branco no final da mensagem que tamb´em ´e impresso!

Agora observe o printf da linha 16. Este printf tem duas diferenc¸as com relac¸˜ao ao printf da linha 13. A primeira diferenc¸a ´e que dentro da mensagem do printf da linha 16 (caracteres que est˜ao entre aspas) podemos encontrar duas sequˆencias de caracteres: "%d" e "\n". Al´em disso, depois da mensagem, temos duas express˜oes aritm´eticas envolvendo a vari´avel idade separadas por v´ırgulas: (a) "idade" (seria como a express˜ao aritm´etica "idade * 1") ; and (b) a express˜ao aritm´etica "idade * 2".

O printf da linha 16 imprime na tela todos os caracteres que est˜ao entre aspas, com excec¸˜ao da sequˆencia de caracteres "%d" e "\n".

Para cada sequˆencia de caracteres "%d", a func¸˜ao printf imprime na tela um n´umero inteiro que ´e resultado das express˜oes aritm´eticas contidas no printf separadas por v´ırgula. Assim, o primeiro "%d" imprime na tela o conte´udo da vari´avel "idade" e segundo "%d" imprime na tela o resultado da express˜ao "idade * 2" (uma vez que a express˜ao "idade" vem antes da express˜ao "idade * 2" no printf da linha 16.

A sequˆencia de caracteres "\n", indica `a func¸˜ao printf para “pular de linha”, isto ´e, faz com que o cursor da tela v´a para a pr´oxima linha. No printf da linha 16 , como a sequˆencia est´a no final da mensagem, isto significa que depois de imprimir a mesma na tela, o cursor ir´a para a pr´oxima linha.

2.5.5 Func¸˜ao de Leitura pelo Teclado

Para ler um n´umero inteiro pelo teclado, vocˆe deve usar a func¸˜ao scanf da seguninte forma:

scanf ("%d", &);

o scanf ir´a esperar o usu´ario digitar um n´umero inteiro pelo teclado e, ap´os o usu´ario digitar a tecla , armazenar´a o n´umero digitado na vari´avel . Um exemplo est´a na linha 14 do primeiro programa: o n´umero digitado ir´a ser armazenado na vari´avel idade. Observe que no scanf deve-se colocar o caractere "&" antes do nome da vari´avel.

2.5.6 Retornando ao nosso Exemplo

Executando o programa, temos:

Observe que:

  1. O n´umero "20" que aparece depois da mensagem

"Quantos anos voce tem?: "

foi digitado pelo usu´ario e lido pela func¸˜ao scanf.

  1. Este n´umero "20" aparece ao lado da mensagem, pois o printf que a imprime na tela n˜ao tem a sequˆencia de caracteres \n no final; caso contr´ario, o n´umero "20" seria digitado na pr´oxima linha.
  2. Uma vez que o usu´ario, depois de digitar o n´umero 20, deve dar um , o cursor automaticamente ir´a para a pr´oxima linha; observe que a mensagem

"20? Puxa voce parece que tem so 40 anos!"

aparece na pr´oxima linha.

  1. Os n´umeros "20" e "40" (resultados das express˜oes aritm´eticas "idade" e "idade * 2") s˜ao colocados no lugar do %d do segundo printf do programa.

2.5.7 Impress˜ao de %d e \ n

Para imprimir na tela a sequˆencia de caracteres "%d", vocˆe deve usar

printf ("%%d");

e para imprimir "\n", vocˆe de usar

printf ("\n");

3 Fundamentos

Ronaldo F. Hashimoto, Carlos H. Morimoto e Jos´e A. R. Soares

Essa aula introduz v´arios fundamentos necess´arios para compreender a linguagem C e o funcionamento de seus comandos. Ao final dessa aula vocˆe dever´a saber:

  • Declarar e utilizar vari´aveis.
  • Descrever a precedˆencia dos operadores e como isso afeta o resultado das express˜oes aritm´eticas.
  • Utilizar express˜oes aritm´eticas e relacionais, e prever seus resultados para entradas conhecidas.
  • Utilizar comandos de leitura, impress˜ao e atribuic¸˜ao.

3.1 Declarac¸˜ao de Vari´aveis

A declarac¸˜ao de uma vari´avel que guarda n´umeros inteiros em C de nome <nome_da_variavel> ´e feita da seguinte forma:

int <nome_da_variavel>;

Exemplo: declarac¸˜ao de uma vari´avel inteira "soma"

int soma;

Se vocˆe quiser declarar v´arias vari´aveis, ´e poss´ıvel fazer da seguinte forma:

int <nome_da_variavel_1>, <nome_da_variavel_2>, <nome_da_variavel_3>,.. ., <nome_da_variavel_n>;

Exemplo: declarac¸˜ao de duas vari´aveis inteiras "num" e "soma".

int num, soma;

3.2 Express˜ao Aritm´etica

Express˜oes aritm´eticas s˜ao express˜oes matem´aticas envolvendo n´umeros inteiros, vari´aveis inteiras, e os oper- adores "+" (soma), "-" (subtrac¸˜ao), "/" (quociente de divis˜ao inteira), "%" (resto de uma divis˜ao inteira) e "*" (multiplicac¸˜ao).

Exemplos:

  • num1 + num2 ∗ 3
  • num + 3 / 2
  • num ∗ 3 + 2

Operador Aritm´etico Associatividade *, /, % da esquerda para a direita +, - da esquerda para a direita

Tabela 1: Precedˆencia dos Operadores Aritm´eticos.

3.2.1 Precedˆencia de Operadores

Qual seria o resultado da express˜ao: 2 + 3 ∗ 4? Sua resposta provavelmente seria 14 , pois ´e o resultado de 2 + (3 ∗ 4), mas porque n˜ao 20 , resultado de (2 + 3) ∗ 4? A resposta est´a na prioridade com que as operac¸˜oes s˜ao realizadas, ou precedˆencia dos operadores. A operac¸˜ao "*" tem maior precedˆencia que a operac¸˜ao "+", e portanto ´e feita primeiro.

A Tabela 1 mostra a precedˆencia dos operadores em C. Na d´uvida, ou at´e para deixar mais claro e f´acil de entender, use parˆenteses. Al´em de n´umeros as express˜oes podem conter o nome de vari´aveis, como na soma "num1 + num2".

Um outro fator importante ´e o tipo dos valores utilizados pelos operadores, no caso, estamos trabalhando apenas com o tipo inteiro ( int ). Isso ´e muito importante para entender o resultado de algumas express˜oes. Por exemplo, usando agora o compilador, fac¸a um programa que imprima o valor da express˜ao (3 / 4 ∗ 100). O resultado ´e zero. Por quˆe?

Como a precedˆencia de / e * s˜ao iguais, a tabela diz tamb´em que esses operadores s˜ao calculados da esquerda para a direita, ou seja, o resultado de 3/4 ´e multiplicado por 100 , e o resultado final esperado seria 75. Por´em, o resultado do seu programa deve ter sido zero. Por que isso?

Como todas as operac¸˜oes s˜ao inteiras, o resultado de 3/4 ´e zero (e n˜ao 0.75, que ´e um n´umero real). Sendo assim, o resultado de 9/2 ´e 4 , 9/3 ´e 3 , 9/4 ´e 2 , e assim por diante. A parte fracion´aria ´e simplesmente eliminada (ou truncada ao inv´es de ser aproximada para um valor inteiro mais pr´oximo), ou seja, mesmo o resultado de 99999/100000 ´e zero.

Considere as vari´aveis inteiras x = 2 e y = 3. Verifique o valor das seguintes express˜oes:

Express˜ao Valor x / y 0 y / x 1 y / x ∗ 10 10 x + y ∗ 4 14 (x + y) ∗ 4 20

3.3 Express˜ao Relacional

V´arias instruc¸˜oes depedem do resultado de comparac¸˜oes (ou condic¸˜oes) do tipo num1 > num2 (num1 ´e maior que num2). O resultado de uma condic¸˜ao ´e verdadeiro ou falso.

Express˜oes relacionais s˜ao express˜oes que envolvem comparac¸˜oes simples envolvendo operadores relacionais "<" (menor), ">" (maior), "<=" (menor ou igual), ">=" (maior ou igual), "!=" (diferente), "==" (igual).

Uma comparac¸˜ao simples s´o pode ser feita entre pares de express˜oes aritm´eticas da forma:

<expr_aritm´etica_01> <oper_relacional> <expr_aritm´etica_02>

onde <expr_aritm´etica_01> e <expr_aritm´etica_02> s˜ao express˜oes aritm´eticas e <oper_relacional> ´e um operador relacional.