Modulo 01

Você também pode gostar

Você está na página 1de 36

Curso C Starter

www.t2ti.com
1

Curso C Starter Apresentao

O Curso C Starter foi projetado com o objetivo de ajudar quelas pessoas que tm uma base de lgica de programao e desejam aprender a linguagem C. A estrutura do curso formada por mdulos em PDF e por mini-cursos em vdeo. O aluno deve baixar esse material e estud-lo. Deve realizar os exerccios propostos. Todas as dvidas devem ser enviadas para a lista de discusso que est disponvel para inscrio na pgina do Curso C Starter no site www.t2ti.com. As dvidas sero respondidas pelos instrutores Albert Eije, Cludio de Barros e Miguel Kojiio, alm dos demais participantes da lista. Nosso objetivo que aps o estudo do Curso C Starter o aluno tenha as noes fundamentais da linguagem C e consiga, a partir deste momento, aprofundarse no assunto de forma autnoma e de acordo com as suas expectativas. Albert Eije trabalha com informtica desde 1993. Durante esse perodo j trabalhou com vrias linguagens de programao: Clipper, PHP, Delphi, C, Java, etc. Atualmente mantm o site www.alberteije.com e trabalha como analista de sistemas do Banco do Brasil. Cludio de Barros Tecnlogo em Processamento de Dados e analista de sistemas do Banco do Brasil. Miguel Kojiio bacharel em Sistemas de Informao, profissional certificado Java e tambm trabalha como analista de sistemas do Banco do Brasil.

www.t2ti.com
2

Curso C Starter

Mdulo

01
A Linguagem C

Conhecendo a Linguagem C Parte I

A linguagem C foi criada em 1972 por Dennis M. Ritchie e Ken Thompson no laboratrio Bell. Ela foi baseada na linguagem B que j era uma evoluo da linguagem BCPL. estruturada, imperativa, procedural, de baixo nvel e padronizada.

Criadores da linguagem C Ken Thompson e Dennis Ritchie

Caractersticas
Pela definio C uma linguagem de baixo nvel, no entanto a mesma alia caractersticas de linguagens de alto nvel (como Pascal) e outras de baixo nvel como assembly. Isso significa que a linguagem C junta flexibilidade, praticidade e poder de manipulao da mquina diretamente. Dessa forma no tem as limitaes que tem o Pascal. C permite liberdade total ao programador e este responsvel por tudo que acontece.

www.t2ti.com
3

Curso C Starter
C uma linguagem estruturada, ou seja, estrutura o programa em blocos para resolver os problemas. A filosofia bsica de uma linguagem estruturada dividir para trabalhar, voc divide um problema em pequenas partes que sejam possveis de serem feitas. Neste contexto C igual a Pascal. C uma linguagem muito poderosa que utilizada para criar 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.

Compiladores e Interpretadores
Para que um programa seja executado em um computador o mesmo precisa estar em linguagem de mquina (zeros e uns). Quando digitamos nosso programa, seja em C, Pascal, Java, etc o mesmo ainda no est na linguagem de mquina. Para isso existem os interpretadores e os compiladores. Ambos convertem um programa de uma linguagem qualquer para a linguagem de mquina. No caso do C existem tanto interpretadores quanto compiladores. Mas, qual seria a diferena? O interpretador l as instrues do programa linha a linha e vai checando os erros e convertendo para a linguagem de mquina. Aps a converso a linha executada. Se a linguagem for apenas interpretada o interpretador sempre dever estar presente para que o programa funcione. J o compilador l o programa linha a linha, checa se existem erros e converte a linha para a linguagem de mquina. Mas o compilador no executa a linha. Ele converte todas as linhas para a linguagem de mquina e ao chegar ao final do arquivo do programa sem nenhum erro ele gera um arquivo com a extenso .OBJ. Esse arquivo no pode ser executado. Nessa ocasio entra em cena um programa linkeditor que vai agregar algumas rotinas ao arquivo .OBJ. Aps isso ser gerado um arquivo .EXE, que um programa executvel. Aps a criao do .EXE o compilador no mais necessrio. Na realidade quando pedimos para gerar um .EXE o compilador e o linkeditor atuam de tal maneira que, para o programador, como se apenas um passo estivesse sendo executado. No nosso curso utilizaremos o compilador do programa grfico DEV-C++. Esse programa Open Source e serve para escrever programas tanto em C quanto em C+ +. Assista ao mini-curso que mostra como instalar esse programa e como iniciar e executar os seus programas em C.

www.t2ti.com
4

Curso C Starter

O C Case Sensitive
Queremos dizer com isso que maisculas e minsculas fazem diferena. Se voc declarar uma varivel com o nome teste ela ser diferente de Teste, TESTE, TestE ou tESTe. Da mesma maneira, os comandos do C if e for, por exemplo, s podem ser escritos em minsculas, caso contrrio o compilador ir interpret-los como variveis.

Estrutura Bsica de um Programa em C


O menor programa escrito em C seria o seguinte:
main() { }

Main() - Esse o nome da funo, que por conveno vem com os parnteses. A funo Main precisa estar presente no seu projeto C. Ela a funo principal do programa. atravs dessa funo que o programa ser executado. As chaves de abertura e fechamento significam abertura e fechamento de bloco. Seriam o equivalente ao Begin e End do pascal. O programa acima no faz nada. Vamos criar um pequeno programa que imprime algo na tela:
main() { } printf("Meu primeiro programa C");

O fato de o C possuir diversos compiladores pode causar uma certa confuso. O programa acima poderia ser compilado e executado sem problemas em alguns compiladores. Outros iriam reclamar. No nosso caso, no programa Dev-C no haver problema nenhum. O Dev-C utiliza o compilador GCC. No entanto, como o Dev-C um programa grfico e vai chamar o CMD para mostrar o resultado do nosso programa, ns vamos inserir mais uma linha para que haja uma pausa na tela antes do CMD ser fechado. Nosso programa ficar assim:

www.t2ti.com
5

Curso C Starter
main() { printf("Meu primeiro programa C"); system("pause"); }

Com o comando system(pause) haver uma pausa na tela e poderemos ver o resultado do nosso programa, que simplesmente imprime uma linha na tela. Observe que as duas instrues terminam com ponto-e-vrgula (;). Toda instruo em C deve terminar com ponto-e-vrgula.

A funo printf()
Essa uma funo do tipo E/S (entrada/sada), ou I/O (input/output) em ingls. O uso dos parnteses indica que printf realmente uma funo. Dentro dos parnteses ns digitamos o argumento dessa funo. No nosso caso, a frase que foi impressa na tela. Sintaxe:
printf("expr. de controle", lista de argumentos)

Vamos a outro exemplo:


main() { printf("Este eh o numero dois: %d",2); system("pause"); }

O que ser impresso pelo programa acima o seguinte:


Este eh o numero dois: 2

Observe que no programa acima estamos passando dois argumentos para a funo printf(). Primeiro a frase e depois o nmero 2. Os argumentos so separados por vrgula. A expresso de controle, que o primeiro argumento entre aspas, pode conter caracteres que sero exibidos na tela, como as frases que j utilizamos, e cdigos de formatao que indicam o formato em que os argumentos devem ser impressos. No exemplo anterior utilizamos o %d que indica que o segundo argumento deve ser impresso em formato decimal. Mas esse cdigo para o formato decimal no o nico que podemos utilizar na

www.t2ti.com
6

Curso C Starter
funo printf(). Observe a tabela abaixo onde constam os cdigos que podemos utilizar com esta funo:

Cdigo de Formatao
%c %d %e %f %g %o %s %u %x %ld %lf

Formato
Caracteres simples Decimal nmeros inteiros Notao cientfica Ponto flutuante %e ou %f (o mais curto) Octal Cadeia de caracteres Decimal sem sinal Hexadecimal Decimal longo Ponto flutuante longo (double)

Podemos utilizar os cdigos acima conforme os exemplos abaixo:


main() { printf("Este eh o numero dois: %d",2); printf("%s fica a %d kilometros daqui","Fortaleza",1200); printf("A letra %c pronuncia-se %s",'W',"dbiliu"); system("pause"); }

Se voc j est testando os exemplos acima deve ter observado que sai tudo impresso numa linha s. Como fazer para quebrar a linha? No C existe o que chamamos de caracteres de escape. Observe o exemplo abaixo:
main() { printf("Este eh o numero dois: %d \n",2); printf("%s fica a %d kilometros daqui \n","Fortaleza",1200); printf("A letra %c pronuncia-se %s \n",'W',"dbiliu"); system("pause"); }

Observou algo novo? Sim. Existe um \n em cada uma das linhas. Esse um caractere de escape. Quando a funo printf() encontra um \n na expresso de controle ela sabe que precisar simular um [enter]. Observe a tabela de caracteres de escape abaixo:

www.t2ti.com
7

Curso C Starter

Caracteres de Escape
\n \r \t \b \ \\ \f \0

Significado
Nova linha simula o [enter] Retorno de cursor Tab Retrocesso Aspas Barra Salta pgina de formulrio Nulo

Faa alguns exemplos utilizando os caracteres acima e tente compreender a funo de cada um deles. A funo printf() faz parte de uma biblioteca que vem com o C. Conforme j mencionado essa uma funo de entrada/saida. Logo, a biblioteca que a contm a stdio.h. O h significa header (cabealho). Isso significa que esse um arquivocabealho. Como assim? A funo printf() est contida dentro desse arquivo. Para usarmos essa funo necessrio informarmos ao nosso programa onde essa funo se encontra. Fazemos isso por inserir uma instruo no cabealho do nosso programa. U, ento porque conseguimos utilizar essa funo sem mencionar nada nos exemplos acima? porque o Dev-C j trata essa funo como algo padro. Mas o mesmo cdigo acima poderia causar problemas se fosse compilado diretamente na linha de comando. O nome do arquivo, stdio, tambm tem um significado: std standard (padro) io input/output (entrada/sada) Ou seja, esse arquivo contm as funes de entrada/sada. Logo, a funo printf() teria que estar nesse arquivo. E como fao para incluir esse arquivo no cabealho do meu programa? O raciocnio esse mesmo: incluir. Pense na palavra incluir em ingls! Veja o exemplo abaixo:
#include <stdio.h> void main ()

www.t2ti.com
8

Curso C Starter
{ /* esse programa pede ao usuario para entrar com um valor inteiro que chama de dias, depois ele divide esse numero por 365,25, ou seja, converte os dias para anos e informa ao usuario quantos anos equivalem aos dias digitados */ int Dias; // Declaracao de Variaveis float Anos; printf ("Entre com o nmero de dias: "); // Entrada de Dados scanf ("%d",&Dias); Anos=Dias/365.25; // Conversao Dias->Anos printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); system("pause");

Observe a primeira linha do nosso programa: #include <stdio.h>. assim que inclumos um arquivo que tem as funes que queremos utilizar em nosso programa. Mas espere. Esse exemplo tem bastante coisa nova. Para sermos mais precisos, esse exemplo traz 3 novos conceitos que vamos comear a estudar agora.

Comentrios em C
No exemplo anterior utilizamos dois estilos de comentrios:

/* comentrio 1 comentrio 2 */ // comentrio

Esse estilo serve para comentrios longos que ocuparo mais de uma linha. Voc abre o comentrio com /* e fecha o mesmo com */. Esse estilo serve para comentrios breves, de uma linha s. Tudo que est a frente das duas barras no ser levado em conta pelo compilador.

Variveis em C
As variveis so o aspecto fundamental em qualquer linguagem de computador. Uma varivel em C um espao de memria reservado para armazenar um certo tipo de dado e tem um nome para referenciar o seu contedo. Esse espao de memria pode conter, a cada tempo, valores diferentes.

www.t2ti.com
9

Curso C Starter
No exemplo anterior utilizamos duas variveis: Dias e Anos. Observe que antes do nome das varivel temos as palavras int para Dias e float para Anos. O que significam? So o tipo dessas variveis. Ns precisamos informar ao C de que tipo so os valores que queremos trabalhar em memria. Observe abaixo os tipos de dados que podemos utilizar no C:

Tipo
char unsigned char signed char int

Tamanho-Bytes
1 1 1 4

Escala
-127 a 127 0 a 255 -127 a 127 -2.147.483.648 a 2.147.483.647

Tipo
unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double

Tamanho-Bytes
4 4 2 2 2 4 4 4 4 8 10

Escala
0 a 4.294.967.295 -2.147.483.648 a 2.147.483.647 -32.768 a 32.767 0 a 65.535 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 -2.147.483.648 a 2.147.483.647 0 a 4.294.967.295 Seis digitos de preciso Dez digitos de preciso Dez digitos de preciso

A Funo scanf()
O terceiro novo conceito abordado no nosso exemplo anterior foi a funo scanf(). J vimos que a funo printf() serve para imprimir informaes na tela. E quando precisarmos solicitar algo ao usurio? Utilizamos a scanf(). Sintaxe:
scanf(expresso de controle,lista de argumentos);

www.t2ti.com
10

Curso C Starter

A funo scanf() muito semelhante printf(). Tambm uma funo de entrada e sada. Vamos utilizar os mesmos cdigos de formatao que usamos na printf(). Mas ela tem uma diferena fundamental: o operador de endereo (&). A memria do computador dividida em bytes, que so numerados de zero at o limite de memria da mquina (524.287 se a mquina tem 512K de memria). Estes nmeros so chamados de endereos de bytes. Toda varivel ocupa uma certa localizao na memria e seu endereo o primeiro byte ocupado por ela. Um nmero inteiro ocupa 4 bytes. Se voc declarou a varivel nota como inteiro e atribuiu a ela o valor 5, quando nota for referenciada devolver o valor 5. No entanto, se voc referenciar nota precedida por & (&nota), voc receber o endereo do primeiro byte onde nota est guardada. Observe novamente o nosso exemplo:
#include <stdio.h> void main () { /* esse programa pede ao usuario para entrar com um valor inteiro que chama de dias, depois ele divide esse numero por 365,25, ou seja, converte os dias para anos e informa ao usuario quantos anos equivalem aos dias digitados */ int Dias; // Declaracao de Variaveis float Anos; printf ("Entre com o nmero de dias: "); // Entrada de Dados scanf ("%d",&Dias); Anos=Dias/365.25; // Conversao Dias->Anos printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); system("pause"); }

Quando solicitamos ao usurio que ele entre com o nmero de dias utilizamos o cdigo de formatao %d, pois vamos armazenar um inteiro. Aps isso, no argumento, utilizamos a varivel Dias precedida por & (&Dias). Isso faz com que o valor digitado pelo usurio seja armazenado num endereo de memria.

Palavras Reservadas
Toda linguagem possuem palavras que no podem ser utilizadas como nomes de variveis. Essas palavras so reservadas para o trabalho do compilador em cima delas. Por exemplo, a palavra for no poderia ser utilizada como um nome de

www.t2ti.com
11

Curso C Starter
varivel, pois o compilador sabe que essa palavra inicia um lao, que veremos mais a frente. Veja agora a lista de palavras reservadas do C:

auto break case char const continue default do

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

Operadores Aritmticos
O C uma linguagem com muitos operadores, cerca de 40. C oferece 6 operadores aritmticos binrios (que operam sobre dois operandos) e um operador unrio (que opera sobre um operando). So eles:

Binrios:
= + * / % Atribuio Soma Subtrao Multiplicao Diviso Mdulo (resto da diviso inteira)

Unrio:
Menos unrio No existe muito o que falar sobre cada operador. Vejamos na prtica o que

www.t2ti.com
12

Curso C Starter
cada um deles realmente faz. Execute o seguinte exemplo no Dev-C:
#include <stdio.h> void main () { int a,b,c; float resultado = 0.0; printf ("Digite tres numeros: "); scanf ("%d %d %d",&a, &b, &c); resultado = ((a + b) * c) / (c-a); printf("O resultado de ((a + b) * c) / (c-a) eh %f \n", resultado); printf ("O resto da divisao entre a e b eh %d \n", a%b); printf ("E se multiplicarmos c por -1 o resultado sera %d \n", -c); system("pause"); }

Faa alguns testes com o programa acima. Tente compreender o seu funcionamento. Faa os clculos numa calculadora e observe se o resultado est correto. Comente sobre esse programa na lista de discusso. No programa anterior utilizamos todos os operadores aritmticos. Vamos observar agora um programa que utiliza alguns operadores e tem uma finalidade mais precisa:
#include <stdio.h> void main () { /* para converter de Fahrenheit para Celsius usa-se a formula: c = (f-32) / 1.8 para converter de Celsius para Fahrenheit usa-se a formula: f = c * 1.8 + 32 */ float f; printf("Entre com a temperatura em Fahrenheit\n\n"); scanf("%f",&f); printf("%.f em Fahrenheit equivale a %.f em Celsius",f,(f-32)/1.8); printf("\n"); system("pause"); }

O programa acima solicita ao usurio que entre com uma temperatura em Fahrenheit e devolve o resultado da mesma em Celsius.

Operadores de Incremento e Decremento


Observe o seguinte trecho de programa em Pascal:

www.t2ti.com
13

Curso C Starter
var begin a, b, soma: integer; soma a := b := soma soma := 0; 5; 6; := a + b; := soma + 1;

end;

O que nos interessa mesmo no algoritmo acima a ltima linha onde somamos o resultado de soma com 1 e atribumos prpria soma. O C possui u operador de incremento que faz isso de uma forma mais interessante. Observe:
void main () { int a, b, soma; a = 5; b = 6; soma = a + b; soma++; printf("%d",soma); system("pause"); }

Note a diferena. Basta utilizar o operador de incremento (++). O mesmo j atribui 1 varivel soma. Da mesma forma o operador de decremento (--) faria uma subtrao de 1 e atribuiria o novo valor a varivel. importante saber que os operadores podem ser utilizados antes ou aps a varivel. No entanto, existe uma diferena fundamental. Observe:
void main () { int n = 5, x; x = n++; printf("x=%d n=%d",x,n); system("pause"); }

A sada ser x=5 e n=6. Vamos fazer uma pequena alterao:


void main () { int n = 5, x; x = ++n; printf("x=%d n=%d",x,n); system("pause"); }

www.t2ti.com
14

Curso C Starter
A sada ser x=6 e n=6. Percebeu a diferena? Quando o operador vem aps a varivel, primeiro o valor da varivel atribudo outra varivel, depois que ela incrementada. Quando o operador vem antes da varivel, primeiro feito o incremento e depois a atribuio. Faa mais alguns testes atribuindo valores entre variveis e utilizando os operadores de incremento e decremento para entender o seu funcionamento.

Operadores Aritmticos de Atribuio


Existem ainda os operadores aritmticos de atribuio (+=; -=; *=; /=; %=). Vejamos como eles funcionam:

Exemplo
i += 2; x *= y+1; t /= 2.5; p %= 5; d -= 3;

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

Operadores Relacionais
Esses operadores so utilizados para fazer comparaes. So os seguintes: > >= < <= == != Maior Maior ou igual Menor Menor ou igual Igualdade Diferente

Mais adiantes utilizaremos bastante esses operadores quando trabalharmos com controle de fluxo e laos.

www.t2ti.com
15

Curso C Starter Comando de Decises (Controle de Fluxo)


Toda linguagem de computador precisa oferecer um mnimo de trs formas bsicas de controle: 1 executar uma srie de instrues; 2 praticar testes para decidir entre aes alternativas. 3 repetir uma seqncia de instrues at que uma certa condio seja encontrada; Vamos conhecer o segundo item a partir de agora e o terceiro ser explorado mais tarde. O C oferece 4 principais estrutura de deciso: if, if-else, switch e o operador condicional ternrio.

O Comando if
Esse comando instrui o computador a tomar uma deciso simples. Sintaxe:
if (expresso de teste) instruo;

Observe o exemplo:
void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5) printf("o valor de n eh %d e eh maior que dois\n",n); system("pause"); }

Se o usurio digitar um nmero maior que cinco ele ver uma mensagem na tela. Caso digite um nmero menor ou igual a 5 o programa no faz nada. Mas e se eu quisesse inserir mais um comando dentro desse if? Caso se deseje inserir mais que uma linha de comando em um if ser necessrio abrir um bloco com chaves e fech-lo aps o ltimo comando. Observe:

www.t2ti.com
16

Curso C Starter
void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5) { printf("o valor de n eh %d e eh maior que cinco\n",n); printf("esse if tem dois comandos, por isso utilizamos a chave\n"); printf("de abertura e a chave de fechamento de bloco\n"); } system("pause"); }

No entanto, esse programa no faz nada se o usurio digitar um nmero menor ou igual a cinco. Vamos mudar isso. Utilizemos o else. Vejamos:
void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5) { printf("o valor de n eh %d e eh maior que cinco\n",n); printf("esse if tem dois comandos, por isso utilizamos a chave\n"); printf("de abertura e a chave de fechamento de bloco\n"); } else printf("o valor de n eh %d e eh menor ou igual a cinco\n",n); system("pause"); }

Nesse primeiro momento utilizamos apenas uma instruo no else, por esta razo no foi necessrio abrir um bloco. Mas o princpio o mesmo: se fosse necessrio inserir mais comandos abaixo do else e que pertencessem ao mesmo, seria necessrio abrir e fechar um bloco.

Comandos if Aninhados
Quando um if est dentro de outro dizemos que o if interno est aninhado. Veja o exemplo:
void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5)

www.t2ti.com
17

Curso C Starter
if (n < 10) printf("n eh %d e eh maior que cinco e menor que 10 \n",n); system("pause"); }

Operadores Lgicos
Est na hora de conhecermos mais 3 operadores: && || ! Lgico E Lgico Ou Lgico de negao Seria o and no Pascal Seria o or no Pascal Seria o not no Pascal

Exemplo:
void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n>5 && n<10) printf("n eh %d e eh maior que cinco e menor que 10 \n",n); system("pause"); }

Precedncia dos Operadores


Precedncia quer dizer qual dos operadores ser executado primeiro numa instruo quando eles aparecerem juntos. Observe a tabela abaixo, pois ela mostra a precedncia dos operadores de cima para baixo e da esquerda para a direita.

Operadores
! - ++ -* / % + < > <= >= == != &&

Tipos
Unrios; no lgico e menos aritmticos Aritmticos Aritmticos Relacionais Relacionais Lgico E

www.t2ti.com
18

Curso C Starter
|| = += -= *= /= %= Lgico OU Aritmticos de atribuio

Ou seja, o operador ! (not) o de maior precedncia e o %= o de menor.

O Comando switch
Quando temos uma ou duas escolhas a fazer usar o if pode ser o ideal. Mas s vezes necessrio escolher entre uma de muitas opes. Quando isso ocorre, podemos utilizar o comando switch. Sintaxe
switch(expresso constante) { case constante 1: instrues; break; case constante 2: instrues; break; default: instrues; }

Vamos construir um pequeno menu e quando o usurio escolher uma das opes imprimiremos qual delas ele escolheu. Observe:
void main () { printf("------------------------------\n"); printf("| PROGRAMA BANCO DE DADOS |\n"); printf("------------------------------\n"); printf("| 1 - INCLUSAO |\n"); printf("| 2 - EXCLUSAO |\n"); printf("| 3 - ALTERACAO |\n"); printf("------------------------------\n"); printf("| 4 - SAIR |\n"); printf("------------------------------\n"); int op; printf("Selecione uma das opcoes acima: "); scanf("%d",&op); switch(op) { case 1: printf("escolheu a opcao INCLUSAO"); break; case 2: printf("escolheu a opcao EXCLUSAO");

www.t2ti.com
19

Curso C Starter
break; case 3: printf("escolheu a opcao ALTERACAO"); break; case 4: printf("escolheu a opcao SAIR"); break; default: printf("digitou outra coisa...");

} printf("\n"); }

system("pause");

Veja que aps cada instruo necessrio inserir a instruo break. Esse comando quebra o switch, ou seja sai do switch. Utilizaremos esse comando novamente quando estivermos trabalhando com laos.

Operador Condicional Ternrio ?


Conheceremos agora um if-else um pouco estranho. Quando estivermos numa situao de uma simples condio podemos utilizar essa estrutura. Sintaxe:
condio ? expresso1 : expresso2

Traduzindo: se a condio for verdadeira execute a expresso1, seno execute a expresso2. Exemplo: max = (num1 > num2) ? num1 : num2; A instruo acima equivale a: if (num1 > num2) max = num1; else max = num2;

www.t2ti.com
20

Curso C Starter Laos


Em C existem 3 estruturas principais de laos: for, while e do-while.

O Lao for
O lao for engloba 3 expresses numa nica e til principalmente quando queremos repetir algo um nmero fixo de vezes. O exemplo seguinte imprime os nmero 0 a 9 utilizando um lao for:
void main () { int conta; for(conta=0;conta<10;conta++) printf("Conta=%d\n",conta); system("pause"); }

Sintaxe:
for(inicializao;teste;incremento) instruo;

A expresso de inicializao uma atribuio e executada uma nica vez antes do lao ser iniciado. O teste uma instruo de condio que controla o lao. Essa expresso avaliada a cada passo do lao. Quando a mesma torna-se falsa o lao terminado. A expresso de incremento define a maneira como a varivel de controle do lao ser alterada a cada vez que o lao repetido. Vamos modificar o programa anterior para imprimir apenas os nmeros mpares de 1 a 9.
void main () { int conta; for(conta=1;conta<10;conta+=2) printf("Conta=%d\n",conta); system("pause"); }

O lao for uma estrutura bem flexvel. Na verdade voc poderia informar mais do que um parmetro em cada uma das expresses do lao ou at mesmo no

www.t2ti.com
21

Curso C Starter
fornecer parmetro algum. Observe:
void main () { int x,y; for(x=0, y=0; x+y<100; x=x+1, y=y+1) printf("%d\n",x+y); system("pause"); }

Execute o programa acima e descubra o que o mesmo faz. Analise o cdigo e veja que estamos utilizando mais do que um parmetro na inicializao e no incremento.

O Lao while
O while utiliza os mesmos elementos do for, s que distribudos de forma diferente. Sintaxe:
inicializao; while(expresso de teste){ instruo; incremento; }

Vamos fazer o mesmo programa para contar de 0 a 9 com o while.


void main () { int conta; conta = 0; while(conta < 10) { printf("Conta=%d\n",conta); conta++; } system("pause"); }

O Lao do-while
O lao while executa os comandos enquanto sua expresso de teste for verdadeira. J o do-while cria um ciclo de repetio at que a expresso de teste seja falsa. Outra diferena que devido a estrutura, o lao do-while executado pelo

www.t2ti.com
22

Curso C Starter
menos uma vez. Sintaxe:
do { instrues; } while (expresso de teste);

Vamos criar um menu dinmico com o do-while. O usurio s sair do nosso programa quando selecionar a opo sair. Vamos utilizar o mesmo menu criado anteriormente.
void main () { int op; do { system("cls"); printf("------------------------------\n"); printf("| PROGRAMA BANCO DE DADOS |\n"); printf("------------------------------\n"); printf("| 1 - INCLUSAO |\n"); printf("| 2 - EXCLUSAO |\n"); printf("| 3 - ALTERACAO |\n"); printf("------------------------------\n"); printf("| 4 - SAIR |\n"); printf("------------------------------\n"); scanf("%d",&op); switch(op) { case 1: printf("escolheu a opcao INCLUSAO \n"); system("pause"); break; case 2: printf("escolheu a opcao EXCLUSAO \n"); system("pause"); break; case 3: printf("escolheu a opcao ALTERACAO \n"); system("pause"); break; case 4: printf("escolheu a opcao SAIR \n"); break; default: printf("digitou outro numero... \n"); system("pause"); } } while (op != 4); } system("pause");

www.t2ti.com
23

Curso C Starter
Os Comandos break e continue
Dentro dos laos voc poder utilizar os comandos break e continue. Como j foi explicado o comando break vai interromper o lao. O comando continue vai pular uma iterao do lao e passar para a prxima. Vamos modificar nosso programar que conta de 0 a 9. Se o nmero for mpar ns vamos chamar o comando continue. Vejamos o que ocorre:
void main () { int conta; conta = 0; while(conta < 10) { if(conta%2 == 1){ conta++; continue; } printf("Conta=%d\n",conta); conta++; } system("pause"); }

O comando continue passa o fluxo do programa para o incio do lao novamente. Dessa forma apenas os nmeros pares sero impressos.

Explorando a Funo printf()


Podemos definir o tamanho mnimo para a impresso de um campo. Observe:
void main () { printf("Os empregados sao %2d \n",350); printf("Os empregados sao %4d \n",350); printf("Os empregados sao %5d \n",350); system("pause"); }

Execute o programa acima e observe o que ocorre. O tamanho do campo definido pelo nmero que colocamos antes da letra d. A esquerda o C preenche com espaos em branco. interessante quando queremos alinhar um resultado e mostrar para o usurio. Podemos tambm controlar quantas casas decimais sero mostradas num nmero de ponto flutuante. Veja:

www.t2ti.com
24

Curso C Starter

void main () { printf("%.2f \n",123456.789); printf("%4.2f \n",123456.789); printf("%3.2f \n",123456.789); printf("%3.1f \n",123456.789); printf("%10.3f \n",123456.789); system("pause"); }

O nmero que vem antes do ponto serve para definir o tamanho do campo, como j vimos anteriormente. J o nmero aps o ponto e antes do f serve para dizer ao C quantas casas decimais queremos que ele apresente no resultado. Veja que o C arredonda os valores quando pedimos um nmero de casas menor que o nmero a ser exibido. Utilizado o arredondamento simtrico.

Imprimindo Caracteres
Em C um caractere pode ser representado de diversas maneiras: o prprio caractere entre aspas simples ou sua representao decimal, hexadecimal ou octal segundo a tabela ASCII. Veja o programa abaixo:
void main () { printf("%d %c %x %o \n",'A', 'A', 'A', 'A'); system("pause"); }

A sada ser: 65 A 41 101. A Tabela ASCII (American Standard Code for Information Interchange) usada pela maior parte da industria de computadores para a troca de informaes. Cada caracter representado por um cdigo de 8 bits (um byte). Abaixo mostramos a tabela ASCII de 7 bits. Existe uma tabela estendida para 8 bits que inclui os caracteres acentuados.

Caracter
NUL SOH

Decimal Hexa Binrio


00 01 00 01 0000 0000 0000 0001

Comentrio
Caracter Nulo Comeo de cabealho de transmisso

www.t2ti.com
25

Curso C Starter
STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE D1 D2 D3 D4 NAK 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 0000 0010 0000 0011 0000 0100 0000 0101 0000 0110 0000 0111 0000 0100 0000 1001 0000 1010 0000 1011 0000 1100 0000 1101 0000 1110 0000 1111 0001 0000 0001 0001 0001 0010 0001 0011 0001 0100 0001 0101 0001 0110 0001 0111 0001 1000 0001 1001 0001 1010 0001 1011 0001 1100 0001 1101 0001 1110 0001 1111 0010 0000 0010 0001 0010 0010 0010 0011 0010 0100 0010 0101 Comeo de texto Fim de texto Fim de transmisso Interroga Confirmao Sinal sonoro Volta um caracter Tabulao Horizontal Prxima linha Tabulao Vertical Prxima Pgina Incio da Linha Shift-out Shift-in Data link escape Controle de dispositivo Controle de dispositivo Controle de dispositivo Controle de dispositivo Negativa de Confirmao

Caracter
SYN ETB CAN EM SUB ESC FS GS RS US Espao ! " # $ %

Decimal Hexa Binrio

Comentrio
Synchronous idle Fim de transmisso de bloco Cancela Fim de meio de transmisso Substitui Escape Separador de Arquivo Separador de Grupo Separador de registro Separador de Unidade

www.t2ti.com
26

Curso C Starter
& ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 0010 0110 0010 0111 0010 1000 0010 1001 0010 1010 0010 1011 0010 1100 0010 1101 0010 1110 0010 1111 0011 0000 0011 0001 0011 0010 0011 0011 0011 0100 0011 0101 0011 0110 0011 0111 0011 1000 0011 1001

Caracter
: ; < = > ? @ A B C D E F G H I

Decimal Hexa Binrio


0011 1010 0011 1011 0011 1100 0011 1101 0011 1110 0011 1111 0100 0000 0100 0001 0100 0010 0100 0011 0100 0100 0100 0101 0100 0110 0100 0111 0100 1000 0100 1001

Comentrio

www.t2ti.com
27

Curso C Starter
J K L M N O P Q R S T U V W X Y Z [ \ ] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 0100 1010 0100 1011 0100 1100 0100 1101 0100 1110 0100 1111 0101 0000 0101 0001 0101 0010 0101 0011 0101 0100 0101 0101 0101 0110 0101 0111 0101 1000 0101 1001 0101 1010 0101 1011 0101 1100 0101 1101

Caracter
^ _ ` a b c d e f g h i j k l m

Decimal Hexa Binrio


0101 1110 0101 1111 0110 0000 0110 0001 0110 0010 0110 0011 0110 0100 0110 0101 0110 0110 0110 0111 0110 1000 0110 1001 0110 1010 0110 1011 0110 1100 0110 1101

Comentrio

www.t2ti.com
28

Curso C Starter
n o p q r s t u v w x y z { | } ~ DELETE 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 0110 1110 0110 1111 0111 0000 0111 0001 0111 0010 0111 0011 0111 0100 0111 0101 0111 0110 0111 0111 0111 1000 0111 1001 0111 1010 0111 1011 0111 1100 0111 1101 0111 1110 0111 1111

Outras Funes Importantes

Existem situaes em que scanf() no serve porque voc precisa pressionar [enter] para que a mesma termine sua leitura. O C oferece funes que lem o caractere no momento em que ele digitado. A funo getche() l o caractere e permite que seja impresso na tela. Esta funo no aceita argumentos e devolve o caractere lido para a funo que a chamou. Vamos a um exemplo:
void main () { char caractere; printf("Digite um caractere: "); caractere = getche(); printf("\nA tecla pressionada foi %c \n", caractere); system("pause"); }

Observe que a funo getche() permite que o caractere digitado pelo usurio

www.t2ti.com
29

Curso C Starter
seja impresso na tela. J a funo getch() no permite. Vamos ao mesmo exemplo com a funo getch().
void main () { char caractere; printf("Digite um caractere: "); caractere = getch(); printf("\nA tecla pressionada foi %c \n", caractere); system("pause"); }

As funes acima so interessantes, mas capturam apenas um caractere. E se quisssemos capturar uma frase? Para isso vamos utilizar a gets(). Veja o exemplo abaixo:
void main () { char frase[100]; printf("Digite uma frase e eu direi quantos caracteres ela possui \n\n"); gets(frase); int anda = 0; //o caractere '\0' indica que se chegou ao final da cadeia de caracteres //eh conhecido como caractere nulo while (frase[anda] != '\0') { anda++; } printf("A frase tem %d caracteres, contando com os espacos",anda); printf("\n"); } system("pause");

Procedimentos e Funes
At o momento falamos muito de funes j prontas que o C disponibiliza para ns atravs de suas bibliotecas. E se quisssemos elaborar nossas prprias funes? Note que Main em si uma funo. a funo principal de um programa. Observe o exemplo abaixo:
#include <stdio.h> main () { void repete(char a, int vezes); //main sabe que existe um procedimento repete('-',30); printf("| PROGRAMA BANCO DE DADOS |\n");

www.t2ti.com
30

Curso C Starter
repete('-',30); printf("| 1 - INCLUSAO printf("| 2 - EXCLUSAO printf("| 3 - ALTERACAO repete('-',30); printf("| 4 - SAIR repete('-',30); } system("pause"); |\n"); |\n"); |\n"); |\n");

void repete(char a, int vezes) { int i=0; for (i=0; i<vezes; i++) { printf("%c",a); } printf("\n"); }

Eu criei um procedimento chamado repete que recebe dois parmetros: um char e um int. O objetivo desse procedimento repetir determinado caractere um nmero qualquer de vezes. No caso anterior eu usei para repetir o hfen (-) 30 vezes quando desenhei o meu menu. Mas porque estou chamando o repete de procedimento e no de funo? Existe uma diferena bsica entre procedimento e funo. A funo sempre retorna um valor. O procedimento no. E como sei que o procedimento no est retornando um valor? Observe a assinatura do procedimento, ou seja, a declarao do mesmo: void repete(char a, int vezes) Em primeiro lugar precisamos definir o tipo de retorno. No caso acima o retorno do tipo void, ou seja, sem valor. Isso indica que no haver retorno. Aps o tipo de retorno indicamos o nome de nosso procedimento ou funo. No nosso caso o procedimento chama-se repete. Depois, dentro dos parnteses, informamos os nossos parmetros. bom frisar que no obrigatria a presena de parmetros. Para entendermos a diferena entre procedimentos e funes vamos criar agora uma funo bem simples:
main () { int num1, num2; printf("Digite dois numeros para a realizacao da soma: \n"); scanf("%d %d",&num1, &num2); printf("a soma dos numeros: %d\n",soma(num1,num2)); system("pause");

www.t2ti.com
31

Curso C Starter
} int soma(int a, int b) { return (a+b); }

Observe que o tipo de retorno da funo diferente de void. No caso da funo soma o retorno do tipo int. Alm disso a funo deve retornar um valor com a utilizao do comando return.

A Biblioteca math.h
Para finalizarmos a primeira parte do nosso curso vamos analisar a biblioteca math.h que j traz prontas diversas funes matemticas. Para a utilizao dessa biblioteca basta inclu-la no cabealho de nosso programa e depois chamar suas funes. Observe o exemplo:
#include <math.h> main () { int num1, num2; printf("Digite dois numeros: \n"); scanf("%d %d",&num1, &num2); printf("a raiz quadrada de %d eh %f\n",num1,sqrt(num1)); printf("%d ao quadrado eh %f\n",num2,pow(num2,2)); } system("pause");

Agora observe a lista das funes contidas em math.h:

Funo
fabs(double) floor(double) ceil(double) modf(double, double *) sqrt(double) atof(char *) sin(double) cos(double)

Descrio
Absoluto. abs (inteiro), cabs (complexo), fabs(real), labs (longo). Trunca nmero real. Arredonda nmero real Quebra um real em uma parte inteira e outra fracionria. Raiz quadrada. Converte string para real. Seno. Cosseno.

www.t2ti.com
32

Curso C Starter
Funo
tan(double) asin(double) acos(double) atan(double) atan2(double, double) frexp(double, int *) ldexp(double, int) log(double) log10(double) pow(double, double) exp(double) sinh(double) cosh(double) tanh(double)

Descrio
Tangente. Arco seno. Arco cosseno. Arco tangente. Arco tangente. Quebra nmero real em mantissa e expoente. Equivale a (double * 2^int) Logaritmo natural. Logaritmo na base 10. x ^ y. Ex: pow(2,4) = 16. e ^ double Seno hiperblico. Cosseno hiperblico. Tangente hiperblico.

Agora voc deve tentar resolver a lista de exerccios abaixo. Qualquer dificuldade envie para a lista de discusso:

Exerccios
01 - Elaborar um programa que leia dois nmeros reais e apresente como
resultado a soma e o produto entre eles.

02 - Elaborar um programa que leia o nome e as 4 notas de um aluno e


apresente como resultado o nome e a mdia aritmtica das notas.

03 - Elaborar um programa que receba um nmero positivo e maior que zero,


calcule e mostre o nmero digitado ao quadrado; o nmero digitado ao cubo; a raiz quadrada do nmero digitado e a raiz cbica do nmero digitado.

04 - Elaborar um programa em C que a partir da idade do usurio decida se o


mesmo jovem (idade < 21), adulto (21 < idade < 70) ou idoso (idade > 70).

05 - Elaborar um programa que dados 3 nmeros apresente-os ordenados na

www.t2ti.com
33

Curso C Starter
tela.

06 - Elaborar um programa em C que decida qual o maior entre trs nmeros digitados
por um usurio e o apresente na tela.

07 - Elaborar um programa em C que receba 3 nmeros em qualquer ordem e


apresente como resultado o maior e o menor entre eles.

08 - Elaborar um programa em C que resolva uma equao do 2 o grau (ax2 +


bx + c = 0).

09 - A nota final de um estudante calculada a partir de trs notas atribudas respectivamente a um trabalho de laboratrio, a uma avaliao semestral e a um exame final. A mdia das trs notas mencionadas obedece aos pesos 2, 3 e 5, respectivamente. Elaborar um programa em C que receba as trs notas, calcule e mostre a mdia ponderada e o conceito (A 10 a 8; B 8 a 7; C 7 a 6; D 6 a 5; E 5 a 0). 10 - Elaborar um programa que realize a contagem de 1 a 96, ordenados de 8
em 8.

11 - Elaborar um programa que imprima a tabuada multiplicativa de 1 a 10 de


um nmero N fornecido pelo usurio.

12 - Elaborar um programa que simule um jogo de adivinhao, onde o usurio deve informar um valor aleatrio e o programa deve testar se o resultado est certo ou errado, calculando o nmero de vezes que o usurio necessitou para acertar. Em cada iterao o programa deve fornecer uma pista. 13 - Elaborar um programa que decida se um nmero informado pelo usurio
o nmero 1, primo (possui apenas 2 divisores naturais) ou composto (possui mais de 2 divisores).

14 - Elaborar um programa que apresente em ordem decrescente os nmeros

www.t2ti.com
34

Curso C Starter
de 100 at 11.

15 - Elaborar um programa que passa dois argumentos (base e altura) para a funo retang( ), cujo propsito desenhar retngulos de vrios tamanhos na tela, correspondentes a cmodos de uma casa. 16 - Elaborar um programa em C que pea ao usurio que digite 3 nmeros
reais, e calcule o mdulo destes nmeros e devolva o maior valor em mdulo e o menor valor real, utilizando funo.

17 - Elaborar um programa em C que calcula o fatorial de um nmero


informado pelo usurio, utilizando funo.

18 - Faa um programa que calcule o imposto de renda de 10 contribuintes


considerando que o nmero de dependentes e renda mensal de cada contribuinte so valores fornecidos pelo usurio. Para cada contribuinte ser feito um desconto de 5% de salrio mnimo por dependente. Os valores da alquota para clculo do imposto so: At 2 salrios mnimos 2..3 (inclusive) 3..5 (inclusive) 5..7 (inclusive) Acima de 7 Isento 5% 10% 15% 20%

19 - Faca um programa para verificar se um nmero inteiro lido quadrado


perfeito. Para que um nmero seja quadrado perfeito a soma dos seus divisores deve resultar num valor igual ao nmero. Ex: Os divisores de 6 so: 1, 2, 3 que somados totalizam 6, logo 6 quadrado perfeito. 20 Faa um programa que contenha um menu com 4 opes: 1 calcular o fatorial de um nmero dado 2 calcular a raiz quadrada de 3 nmeros dados 3 imprimir a tabuada completa de 1 a 10

www.t2ti.com
35

Curso C Starter
4 sair do programa Cada um dos 3 itens acima deve ser elaborado em forma de funo ou procedimento.

www.t2ti.com
36

Você também pode gostar