Sei sulla pagina 1di 48

#Aula Terica-001 Programao em C

Jos Danilson dos Reis Ferreira fonte:4085

#Aula Terica-001 Programao em C

Jos Danilson dos Reis Ferreira fonte:4085

#Aula Terica-001 Programao em C


Para relembrar

O C nasceu na dcada de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP11 rodando o sistema operacional UNIX. O C derivado de uma outra linguagem: o B, criado por Ken Thompson. O B, por sua vez, veio da linguagem BCPL, inventada por Martin Richards.

Jos Danilson dos Reis Ferreira fonte:4085

#Aula Terica-001 Programao em C


Para relembrar

O C uma linguagem de programao genrica que utilizada para a criao de programas diversos como processadores de texto, planilhas eletrnicas, sistemas operacionais, programas de comunicao, programas para a automao industrial, gerenciadores de bancos de dados, programas de projeto assistido por computador, programas para a soluo de problemas da Engenharia, Fsica, Qumica e outras Cincias, etc ... bem provvel que o Navegador que voc est usando para ler este texto tenha sido escrito em C ou C++.

Jos Danilson dos Reis Ferreira fonte:4085

#Aula Terica-001 Programao em C


O C "Case Sensitive

isto , maisculas e minsculas fazem diferena. Se declarar uma varivel com o nome soma ela ser diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos do C if e for, por exemplo, s podem ser escritos em minsculas pois seno o compilador no ir interpret-los como sendo comandos, mas sim como variveis.
Jos Danilson dos Reis Ferreira fonte:4085 5

#Aula Terica-001 Programao em C


#include <stdio.h> /* Um Primeiro Programa */ int main () { printf ("Ola! Eu estou vivo!\n"); return(0); }
Jos Danilson dos Reis Ferreira fonte:4085 6

#Aula Terica-001 Programao em C


A linha #include <stdio.h> diz ao compilador que ele deve incluir o arquivo-cabealho stdio.h. Neste arquivo existem declaraes de funes teis para entrada e sada de dados (std = standard, padro em ingls; io = Input/Output, entrada e sada ==> stdio = Entrada e sada padronizadas). Sempre que necessrio usar uma destas funes deve-se incluir este comando. O C possui diversos Arquivoscabealho.
Jos Danilson dos Reis Ferreira fonte:4085 7

#Aula Terica-001 Programao em C


A nica coisa que o programa realmente faz chamar a funo printf(), passando a string (uma string uma seqncia de caracteres, como veremos brevemente) "Ola! Eu estou vivo!\n" como argumento. por causa do uso da funo printf() pelo programa que devemos incluir o arquivo- cabealho stdio.h . A funo printf() neste caso ir apenas colocar a string na tela do computador. O \n uma constante chamada de constante barra invertida. No caso, o \n a constante barra invertida de "new line" e ele interpretado como um comando de mudana de linha, isto , aps imprimir Ola! Eu estou vivo! o cursor passar para a prxima linha. importante observar tambm que os comandos do C terminam com ; .
Jos Danilson dos Reis Ferreira fonte:4085 8

#Aula Terica-001 Programao em C


Introduo Bsica s Entradas e Sadas - Caracteres Os caracteres so um tipo de dado: o char. O C trata os caracteres ('a', 'b', 'x', etc ...) como sendo variveis de um byte (8 bits). Um bit a menor unidade de armazenamento de informaes em um computador. Os inteiros (ints) tm um nmero maior de bytes. Dependendo da implementao do compilador, eles podem ter 2 bytes (16 bits) ou 4 bytes (32 bits). Isto ser melhor explicado na aula 3. Na linguagem C, tambm podemos usar um char para armazenar valores numricos inteiros, alm de us-lo para armazenar caracteres de texto. Para indicar um caractere de texto usamos apstrofes. Veja um exemplo de programa que usa caracteres:

Jos Danilson dos Reis Ferreira fonte:4085

#Aula Terica-001 Programao em C


#include <stdio.h> int main () { char Ch; Ch='D'; printf ("%c",Ch); system("PAUSE"); return(0); } No programa acima, %c indica que printf() deve colocar um caractere na tela.
Jos Danilson dos Reis Ferreira fonte:4085 10

#Aula Terica-001 Programao em C


Como vimos anteriormente, um char tambm usado para armazenar um nmero inteiro. Este nmero conhecido como o cdigo ASCII correspondente ao caractere. Veja o programa a seguir:

Jos Danilson dos Reis Ferreira fonte:4085

11

#Aula Terica-001 Programao em C


#include <stdio.h> int main () { char Ch; Ch='D'; printf ("%d",Ch); /* Imprime o caracter como inteiro */ system("PAUSE"); return(0); }
Este programa vai imprimir o nmero 68 na tela, que o cdigo ASCII correspondente ao caractere 'D' (d maisculo).
Jos Danilson dos Reis Ferreira fonte:4085 12

#Aula Terica-001 Programao em C


Muitas vezes queremos ler um caractere fornecido pelo utilizador. Para isto as funes mais usadas, quando se est trabalhando em ambiente DOS ou Windows, so getch() e getche(). Ambas retornam o caractere pressionado. getche() imprime o caractere na tela antes de retorn-lo e getch() apenas retorna o caractere pressionado sem imprim-lo na tela. Ambas as funes podem ser encontradas no arquivo de cabealho conio.h. Geralmente estas funes no esto disponveis em ambiente Unix (compiladores cc e gcc), pois no fazem parte do padro ANSI. Podem ser substitudas pela funo scanf(), porm sem as mesmas funcionalidades. Eis um exemplo que usa a funo getch(), e seu correspondente em ambiente Unix:
Jos Danilson dos Reis Ferreira fonte:4085 13

#Aula Terica-001 Programao em C


#include <stdio.h> #include <conio.h> /* Este programa usa conio.h . Se no tiver o cabealho conio, ele no funcionar no Unix */ int main () { char Ch; Ch=getch(); printf ("Voce pressionou a tecla %c",Ch); system("PAUSE"); return(0); }
Jos Danilson dos Reis Ferreira fonte:4085 14

#Aula Terica-001 Programao em C


#include <stdio.h> #include <conio.h> /* Este programa usa conio.h . Se voc no tiver a conio, ele no funcionar no Unix */ int main () { char Ch; Ch=getche(); printf ("Voce pressionou a tecla %c",Ch); system("PAUSE"); return(0); }
Jos Danilson dos Reis Ferreira fonte:4085 15

#Aula Terica-001 Programao em C


No C uma string um vetor de caracteres terminado com um caractere nulo. O caracter nulo um caractere com valor inteiro igual a zero (cdigo ASCII igual a 0). O terminador nulo tambm pode ser escrito usando a conveno de barra invertida do C como sendo '\0'. Embora o assunto vetores seja discutido posteriormente, veremos aqui os fundamentos necessrios para que possamos utilizar as strings. Para declarar uma string, podemos usar o seguinte formato geral: char nome_da_string[tamanho];
Jos Danilson dos Reis Ferreira fonte:4085 16

#Aula Terica-001 Programao em C


Isto declara um vetor de caracteres (uma string) com nmero de posies igual a tamanho. Note que, como temos que reservar um caractere para ser o terminador nulo, temos que declarar o comprimento da string como sendo, no mnimo, um caractere maior que a maior string que pretendemos armazenar. Vamos supor que declaremos uma string de 7 posies e coloquemos a palavra Joo nela. Teremos:
Jos Danilson dos Reis Ferreira fonte:4085 17

#Aula Terica-001 Programao em C


No caso acima, as duas clulas no usadas tm valores indeterminados. Isto acontece porque o C no inicializa variveis,cabendo ao programador esta tarefa. Portanto as nicas clulas que so inicializadas so as que contm os caracteres 'J', 'o', 'a', 'o' e '\0' . Se quisermos ler uma string fornecida pelo utilizador podemos usar a funo gets(). Um exemplo do uso desta funo apresentado abaixo. A funo gets() coloca o terminador nulo na string, quando se aperta a tecla "Enter".
Jos Danilson dos Reis Ferreira fonte:4085 18

#Aula Terica-001 Programao em C


#include <stdio.h> int main () { char nome[3]; printf ("Digite uma string: "); gets (nome); printf ("\n\nVoce digitou %s",nome); return(0); }
Jos Danilson dos Reis Ferreira fonte:4085 19

#Aula Terica-001 Programao em C


Neste programa, o tamanho mximo da string que que pode entrar uma string de 99 caracteres. Se entrar uma string de comprimento maior, o programa ir aceitar, mas os resultados podem ser desastrosos. Veremos porque posteriormente. Como as strings so vetores de caracteres, para se acessar um determinado caracter de uma string, basta "indexarmos", ou seja, usarmos um ndice para acessarmos o caracter desejado dentro da string. Suponha uma string chamada str. Podemos aceder a segunda letra de str da seguinte forma: str[1] = 'a'; Por qu se est acedendo a segunda letra e no a primeira? Na linguagem C, o ndice comea em zero. Assim, a primeira letra da string sempre estar na posio 0. A segunda letra sempre estar na posio 1 e assim sucessivamente. Segue um exemplo que imprimir a segunda letra da string "Joao", apresentada acima. Em seguida, ele mudar esta letra e apresentar a string no final.

Jos Danilson dos Reis Ferreira fonte:4085

20

#Aula Terica-001 Programao em C


Nesta string, o terminador nulo est na posio 4. Das posies 0 a 4, sabemos que temos caracteres vlidos, e portanto podemos escrev-los. Note a forma como inicializamos a string str com os caracteres 'J' 'o' 'a' 'o' e '\0' simplesmente declarando char str[10] = "Joao". Veremos, posteriormente que "Joao" (uma cadeia de caracteres entre aspas) o que chamamos de string constante, isto , uma cadeia de caracteres que est pr-carregada com valores que no podem ser modificados. J a string str uma string varivel, pois podemos modificar o que nela est armazenado, como de fato fizemos. No programa acima, %s indica que printf() deve colocar uma string na tela. Vamos agora fazer uma abordagem inicial sduas funes que j temos usado para fazer a entrada e sada.
Jos Danilson dos Reis Ferreira fonte:4085 21

#Aula Terica-001 Programao em C


printf A funo printf() tem a seguinte forma geral: printf (string_de_controle,lista_de_argumentos); Teremos, na string de controle, uma descrio de tudo que a funo vai colocar na tela. A string de controle mostra no apenas os caracteres que devem ser colocados na tela, mas tambm quais as variveis e suas respectivas posies. Isto feito usando-se os cdigos de controle, que usam a notao %. Na string de controle indicamos quais, de qual tipo e em que posio esto as variveis a serem apresentadas. muito importante que, para cada cdigo de controle, tenhamos um argumento na lista de argumentos. Apresentamos agora alguns dos cdigos %:
Jos Danilson dos Reis Ferreira fonte:4085 22

#Aula Terica-001 Programao em C

Jos Danilson dos Reis Ferreira fonte:4085

23

#Aula Terica-001 Programao em C


Vamos ver alguns exemplos de printf() e o que eles exibem:
printf ("Teste %% %%") -> "Teste % %" printf ("%f",40.345) -> "40.345" printf ("Um caractere %c e um inteiro %d",'D',120) -> "Um caractere D e um inteiro 120" printf ("%s e um exemplo","Este") -> "Este e um exemplo" printf ("%s%d%%","Juros de ",10) -> "Juros de 10%"
Jos Danilson dos Reis Ferreira fonte:4085 24

#Aula Terica-001 Programao em C


scanf O formato geral da funo scanf() : scanf (string-de-controle,lista-de-argumentos); Usando a funo scanf() podemos pedir dados ao usurio. Um exemplo de uso, pode ser visto acima. Mais uma vez, devemos ficar atentos a fim de colocar o mesmo nmero de argumentos que o de cdigos de controle na string de controle. Outra coisa importante lembrarmos de colocar o & antes das variveis da lista de argumentos.
Jos Danilson dos Reis Ferreira fonte:4085 25

#Aula Terica-001 Programao em C


Introduo a Alguns Comandos de Controlo de Fluxo Os comandos de controlo de fluxo so aqueles que permitem ao programador alterar a sequncia de execuo do programa. Vamos dar uma breve introduo a dois comandos de controle de fluxo. Outros comandos sero estudados posteriormente. - if O comando if representa uma tomada de deciso do tipo "SE isto ENTO aquilo". A sua forma geral : if (condio) declarao;
Jos Danilson dos Reis Ferreira fonte:4085 26

#Aula Terica-001 Programao em C


A condio do comando if uma expresso que ser avaliada. Se o resultado for zero a declarao no ser executada. Se o resultado for qualquer coisa diferente de zero a declarao ser executada. A declarao pode ser um bloco de cdigo ou apenas um comando. interessante notar que, no caso da declarao ser um bloco de cdigo, no necessrio (e nem permitido) o uso do ; no final do bloco. Isto uma regra geral para blocos de cdigo. Abaixo apresentamos um exemplo:
Jos Danilson dos Reis Ferreira fonte:4085 27

#Aula Terica-001 Programao em C


#include <stdio.h> int main () { int num; printf ("Digite um numero: "); scanf ("%d",&num); if (num>10) printf ("\n\nO numero e maior que 10"); if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10."); } if (num<10) printf ("\n\nO numero e menor que 10"); System(pause); return (0); }
Jos Danilson dos Reis Ferreira fonte:4085 28

#Aula Terica-002 Programao em C


No programa anterior a expresso num>10 avaliada e retorna um valor diferente de zero, se verdadeira, e zero, se falsa. No exemplo, se num for maior que 10, ser impressa a frase: "O nmero maior que 10". Repare que, se o nmero for igual a 10, estamos executando dois comandos. Para que isto fosse possvel, tivemos que agrupa-los em um bloco que se inicia logo aps a comparao e termina aps o segundo printf. Repare tambm que quando queremos testar igualdades usamos o operador == e no =. Isto porque o operador = representa apenas uma atribuio. Pode parecer estranho primeira vista, mas se escrevssemos if (num=10) ... /* Isto esta errado */ o compilador iria atribuir o valor 10 varivel num e a expresso num=10 iria retornar 10, fazendo com que o nosso valor de num fosse modificado e fazendo com que a declarao fosse executada sempre. Este problema gera erros frequentes entre iniciantes e, portanto, muita ateno deve ser tomada.
Jos Danilson dos Reis Ferreira fonte:4085 29

#Aula Terica-002 Programao em C Os operadores de comparao so: == (igual), != (diferente de), > (maior que), < (menor que), >= (maior ou igual), <= (menor ou igual).

Jos Danilson dos Reis Ferreira fonte:4085

30

#Aula Terica-002 Programao em C


ESTRUTURAS DE CONTROLO DE FLUXO(cont)

O else Podemos pensar no comando else como sendo um complemento do comando if. O comando if completo tem a seguinte forma geral: if (condio) declarao_1; else declarao_2;
Jos Danilson dos Reis Ferreira fonte:4085 31

#Aula Terica-002 Programao em C A expresso da condio ser avaliada. Se ela for diferente de zero a declarao 1 ser executada. Se for zero (ou falso) a declarao 2 ser executada. importante nunca esquecer que, quando usamos a estrutura if-else, estamos garantindo que uma das duas declaraes ser executada. Nunca sero executadas as duas ou nenhuma delas. Abaixo est um exemplo do uso do if- else
Jos Danilson dos Reis Ferreira fonte:4085 32

#Aula Terica-002 Programao em C


Com if #include <stdio.h> int main () { int num; printf ("Digite um numero: "); scanf ("%d",&num); if (num>10) printf ("\n\nO numero e maior que 10"); if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10."); } if (num<10) printf ("\n\nO numero e menor que 10"); System(Pause); return(0); } Com if e else #include <stdio.h> int main () { int num; printf ("Digite um numero: "); scanf ("%d",&num); if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10.\n"); } else { printf ("\n\nVoce errou!\n"); printf ("O numero e diferente de 10.\n"); } System(Pause); return(0); }

Jos Danilson dos Reis Ferreira fonte:4085

33

#Aula Terica-002 Programao em C


O if-else-if A estrutura if-else-if apenas uma extenso da estrutura if-else. Sua forma geral pode ser escrita como sendo: if (condio_1) declarao_1; else if (condio_2) declarao_2; else if (condio_3) declarao_3;

else if (condio_n) declarao_n; else declarao_default;


Jos Danilson dos Reis Ferreira fonte:4085 34

#Aula Terica-002 Programao em C


A estrutura acima funciona da seguinte maneira: o programa comea a testar as condies comeando pela 1 e continua a testar at que ele ache uma expresso cujo resultado d diferente de zero. Neste caso ele executa a declarao correspondente. S uma declarao ser executada, ou seja, s ser executada a declarao equivalente primeira condio que der diferente de zero. A ltima declarao (default) a que ser executada no caso de todas as condies darem zero e opcional.
Jos Danilson dos Reis Ferreira fonte:4085 35

#Aula Terica-002 Programao em C


#include <stdio.h> int main () { int num; printf ("Digite um numero: "); scanf ("%d",&num); if (num>10) printf ("\n\nO numero e maior que 10"); else if (num==10) { printf ("\n\nVoce acertou!\n"); printf ("O numero e igual a 10."); } else if (num<10) printf ("\n\nO numero e menor que 10"); return(0); }

Jos Danilson dos Reis Ferreira fonte:4085

36

#Aula Terica-002 Programao em C Operadores Aritmticos e de Atribuio Os operadores aritmticos so usados para desenvolver operaes matemticas. A seguir apresentamos a lista dos operadores aritmticos do C:

Jos Danilson dos Reis Ferreira fonte:4085

37

#Aula Terica-002 Programao em C Operadores Aritmticos e de Atribuio

Jos Danilson dos Reis Ferreira fonte:4085

38

#Aula Terica-002 Programao em C


O C possui operadores unrios e binrios. Os unrios agem sobre uma varivel apenas, modificando ou no o seu valor, e retornam o valor final da varivel. Os binrios usam duas variveis e retornam um terceiro valor, sem alterar as variveis originais. A soma um operador binrio pois pega duas variveis, soma seus valores, sem alterar as variveis, e retorna esta soma. Outros operadores binrios so os operadores - (subtrao), *, / e %. O operador como troca de sinal um operador unrio que no altera a varivel sobre a qual aplicado, pois ele retorna o valor da varivel multiplicado por -1. O operador / (diviso) quando aplicado a variveis inteiras, nos fornece o resultado da diviso inteira; quando aplicado avariveis em ponto flutuante nos fornece o resultado da diviso "real". O operador % fornece o resto da diviso de dois inteiros.

Jos Danilson dos Reis Ferreira fonte:4085

39

#Aula Terica-002 Programao em C Assim seja o seguinte trecho de cdigo: int a = 17, b = 3; int x, y; float z = 17. , z1, z2; x = a / b; y = a % b; z1 = z / b; z2 = a/b;
Jos Danilson dos Reis Ferreira fonte:4085 40

#Aula Terica-002 Programao em C Ao final da execuo destas linhas, os valores calculados seriam x = 5, y = 2, z1 = 5.666666 e z2 = 5.0 . Note que, na linha correspondente a z2, primeiramente feita uma diviso inteira (pois os dois operandos so inteiros). Somente aps efetuada a diviso que o resultado atribudo a uma varivel float.
Jos Danilson dos Reis Ferreira fonte:4085 41

Os operadores de incremento e decremento so unrios que alteram a varivel sobre a qual esto aplicados. O que eles fazem incrementar ou decrementar, a varivel sobre a qual esto aplicados, de 1. Ento x++; x--; so equivalentes a x=x+1; x=x-1; Estes operadores podem ser pr-fixados ou ps- fixados. A diferena que quando so prfixados eles incrementam e retornam o valor da varivel j incrementada. Quando so psfixados eles retornam o valor da varivel sem o incremento e depois incrementam a varivel. Ento, em x=23; y=x++; teremos, no final, y=23 e x=24. Em x=23; y=++x; teremos, no final, y=24 e x=24. Uma curiosidade: a linguagem de programao C++ tem este nome pois ela seria um "incremento" da linguagem C padro. A linguagem C++ igual linguagem C s que com extenses que permitem a programao orientada a objeto, o que um recurso extra. Jos Danilson dos Reis Ferreira fonte:4085 42

Operadores Relacionais e Lgicos Os operadores relacionais do C realizam comparaes entre variveis. So eles:

Jos Danilson dos Reis Ferreira fonte:4085

43

Os operadores relacionais retornam verdadeiro (1) ou falso (0). Para verificar o funcionamento dos operadores relacionais, execute o programa abaixo:

Jos Danilson dos Reis Ferreira fonte:4085

44

Operadores Relacionais e Lgicos


#include <stdio.h> int main() { int i, j; printf("\nEntre com dois nmeros inteiros: "); scanf("%d%d", &i, &j); printf("\n%d == %d %d\n", i, j, i==j); printf("\n%d != %d %d\n", i, j, i!=j); printf("\n%d <= %d %d\n", i, j, i<=j); printf("\n%d >= %d %d\n", i, j, i>=j); printf("\n%d < %d %d\n", i, j, i<j); printf("\n%d > %d %d\n", i, j, i>j); System(Pause); return(0); }

Jos Danilson dos Reis Ferreira fonte:4085

45

Operadores Relacionais e Lgicos


Para fazer operaes com valores lgicos (verdadeiro e falso) temos os operadores lgicos:

Jos Danilson dos Reis Ferreira fonte:4085

46

Operadores Relacionais e Lgicos


O programa a seguir ilustra o funcionamento dos operadores lgicos. Compile-o e faa testes com vrios valores para i e j:

#include <stdio.h> int main() { int i, j; printf("informe dois nmeros(cada um sendo 0 ou 1): "); scanf("%d%d", &i, &j); printf("%d AND %d %d\n", i, j, i && j); printf("%d OR %d %d\n", i, j, i || j); printf("NOT %d %d\n", i, !i); system("PAUSE"); return 0; }

Jos Danilson dos Reis Ferreira fonte:4085

47

Jos Danilson dos Reis Ferreira fonte:4085

48

Potrebbero piacerti anche