You are on page 1of 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, aprofundar-
se 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
Conhecendo a Linguagem C
Parte I
A Linguagem C
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.
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
Criadores da linguagem C Ken Thompson e Dennis Ritchie
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 .!". Esse arquivo no pode ser executado. Nessa
ocasio entra em cena um programa linkeditor que vai agregar algumas rotinas ao
arquivo .!". Aps isso ser gerado um arquivo .#$#, que um programa
executvel. Aps a criao do .#$# o compilador no mais necessrio. Na realidade
quando pedimos para gerar um .#$# 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
C % Case Sensiti&e
Queremos dizer com isso que maisculas e minsculas fazem diferena. Se
voc declarar uma varivel com o nome teste ela ser diferente de Teste, T#ST#,
Test# ou t#STe. Da mesma maneira, os comandos do C i' e 'or, por exemplo, s
podem ser escritos em minsculas, caso contrrio o compilador ir interpret-los
como variveis.
#strutura !(sica de um )rograma 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 'uno print'*+
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:
C-digo de .ormatao .ormato
%c Caracteres simples
%d Decimal - nmeros inteiros
%e Notao cientfica
%f Ponto flutuante
%g %e ou %f (o mais curto)
%o Octal
%s Cadeia de caracteres
%u Decimal sem sinal
%x Hexadecimal
%ld Decimal longo
%lf 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 i!ometros da"ui","#orta!e$a",%2&&);
printf("' !etra %c pronuncia(se %s",)*),"d+,i!iu");
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 i!ometros da"ui -n","#orta!e$a",%2&&);
printf("' !etra %c pronuncia(se %s -n",)*),"d+,i!iu");
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 #scape Signi'icado
\n Nova linha - simula o [enter]
\r Retorno de cursor
\t Tab
\b Retrocesso
\ Aspas
\\ Barra
\f Salta pgina de formulrio
\0 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 arquivo-
cabealho. 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:
.inc!ude /stdio0h1
2oid main ()
www.t2ti.com
8
Curso C Starter
{
34 esse programa pede ao usuario para entrar com um
2a!or inteiro "ue chama de dias, depois e!e di2ide
esse numero por 567,27, ou se8a, con2erte os dias
para anos e informa ao usuario "uantos anos e"ui2a!em
aos dias digitados
43
int 9ias; 33 9ec!aracao de :aria2eis
f!oat 'nos;
printf ("Entre com o n;mero de dias: "); 33 Entrada de 9ados
scanf ("%d",<9ias);
'nos=9ias3567027; 33 Con2ersao 9ias(1'nos
printf ("-n-n%d dias e"ui2a!em a %f anos0-n",9ias,'nos);
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.
Coment(rios em C
No exemplo anterior utilizamos dois estilos de comentrios:
/* comentrio 1
comentrio 2
*/
Esse estilo serve para comentrios longos
que ocuparo mais de uma linha. Voc
abre o comentrio com /* e fecha o
mesmo com */.
// comentrio 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.
0ari(&eis 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 Tamanho1!2tes #scala
char 1 -127 a 127
unsigned char 1 0 a 255
signed char 1 -127 a 127
int 4
-2.147.483.648 a
2.147.483.647
Tipo Tamanho1!2tes #scala
unsigned int 4 0 a 4.294.967.295
signed int 4
-2.147.483.648 a
2.147.483.647
short int 2 -32.768 a 32.767
unsigned short int 2 0 a 65.535
signed short int 2 -32.768 a 32.767
long int 4
-2.147.483.648 a
2.147.483.647
signed long int 4
-2.147.483.648 a
2.147.483.647
unsigned long int 4 0 a 4.294.967.295
float 4 Seis digitos de preciso
double 8 Dez digitos de preciso
long double 10 Dez digitos de preciso
A .uno scan'*+
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 3 *3nota+, voc receber o
endereo do primeiro byte onde nota est guardada.
Observe novamente o nosso exemplo:
.inc!ude /stdio0h1
2oid main ()
{
34 esse programa pede ao usuario para entrar com um
2a!or inteiro "ue chama de dias, depois e!e di2ide
esse numero por 567,27, ou se8a, con2erte os dias
para anos e informa ao usuario "uantos anos e"ui2a!em
aos dias digitados
43
int 9ias; 33 9ec!aracao de :aria2eis
f!oat 'nos;
printf ("Entre com o n;mero de dias: "); 33 Entrada de 9ados
scanf ("%d",<9ias);
'nos=9ias3567027; 33 Con2ersao 9ias(1'nos
printf ("-n-n%d dias e"ui2a!em a %f anos0-n",9ias,'nos);
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 3 *3Dias+. Isso faz com que o
valor digitado pelo usurio seja armazenado num endereo de memria.
)ala&ras Reser&adas
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 'or 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 double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
peradores Aritm%ticos
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:
!in(rios4
= Atribuio
+ Soma
- Subtrao
* Multiplicao
/ Diviso
% Mdulo (resto da diviso inteira)
5n(rio4
- 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:
.inc!ude /stdio0h1
2oid main ()
{
int a,,,c;
f!oat resu!tado = &0&;
printf ("9igite tres numeros: ");
scanf ("%d %d %d",<a, <,, <c);
resu!tado = ((a > ,) 4 c) 3 (c(a);
printf("? resu!tado de ((a > ,) 4 c) 3 (c(a) eh %f -n", resu!tado);
printf ("? resto da di2isao entre a e , eh %d -n", a%,);
printf ("E se mu!tip!icarmos c por (% o resu!tado 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:
.inc!ude /stdio0h1
2oid main ()
{
34
para con2erter de #ahrenheit para Ce!sius usa(se a formu!a:
c = (f(52) 3 %0@
para con2erter de Ce!sius para #ahrenheit usa(se a formu!a:
f = c 4 %0@ > 52
43
f!oat f;
printf("Entre com a temperatura em #ahrenheit-n-n");
scanf("%f",<f);
printf("%0f em #ahrenheit e"ui2a!e a %0f em Ce!sius",f,(f(52)3%0@);
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.
peradores de Incremento e Decremento
Observe o seguinte trecho de programa em Pascal:
www.t2ti.com
13
Curso C Starter
2ar
a, ,, soma: integer;
,egin
soma := &;
a := 7;
, := 6;
soma := a > ,;
soma := soma > %;
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:
2oid main ()
{
int a, ,, soma;
a = 7;
, = 6;
soma = a > ,;
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:
2oid main ()
{
int n = 7, A;
A = n>>;
printf("A=%d n=%d",A,n);
system("pause");
}
A sada ser x=5 e n=6. Vamos fazer uma pequena alterao:
2oid main ()
{
int n = 7, A;
A = >>n;
printf("A=%d n=%d",A,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.
peradores Aritm%ticos de Atri6uio
Existem ainda os operadores aritmticos de atribuio (+=; -=; *=; /=; %=).
Vejamos como eles funcionam:
#7emplo #8ui&ale a
i += 2; i = i + 2;
x *= y+1; x = x * (y+1);
t /= 2.5; t = t / 2.5;
p %= 5; p = p % 5;
d -= 3; d = d - 3;
peradores 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 Decis9es *Controle de .lu7o+
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.
Comando i'
Esse comando instrui o computador a tomar uma deciso simples.
Sintaxe:
if (expresso de teste)
instruo;
Observe o exemplo:
2oid main ()
{
int n;
printf("9igite um 2a!or, por fa2orB-n");
scanf("%d",<n);
if (n 1 7)
printf("o 2a!or de n eh %d e eh maior "ue 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
2oid main ()
{
int n;
printf("9igite um 2a!or, por fa2orB-n");
scanf("%d",<n);
if (n 1 7)
{
printf("o 2a!or de n eh %d e eh maior "ue cinco-n",n);
printf("esse if tem dois comandos, por isso uti!i$amos a cha2e-n");
printf("de a,ertura e a cha2e de fechamento de ,!oco-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:
2oid main ()
{
int n;
printf("9igite um 2a!or, por fa2orB-n");
scanf("%d",<n);
if (n 1 7)
{
printf("o 2a!or de n eh %d e eh maior "ue cinco-n",n);
printf("esse if tem dois comandos, por isso uti!i$amos a cha2e-n");
printf("de a,ertura e a cha2e de fechamento de ,!oco-n");
}
e!se
printf("o 2a!or de n eh %d e eh menor ou igua! 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 i' Aninhados
Quando um if est dentro de outro dizemos que o if interno est aninhado.
Veja o exemplo:
2oid main ()
{
int n;
printf("9igite um 2a!or, por fa2orB-n");
scanf("%d",<n);
if (n 1 7)
www.t2ti.com
17
Curso C Starter
if (n / %&)
printf("n eh %d e eh maior "ue cinco e menor "ue %& -n",n);
system("pause");
}
peradores L-gicos
Est na hora de conhecermos mais 3 operadores:
&& Lgico E Seria o and no Pascal
|| Lgico Ou Seria o or no Pascal
! Lgico de negao Seria o not no Pascal
Exemplo:
2oid main ()
{
int n;
printf("9igite um 2a!or, por fa2orB-n");
scanf("%d",<n);
if (n17 << n/%&)
printf("n eh %d e eh maior "ue cinco e menor "ue %& -n",n);
system("pause");
}
)reced:ncia dos peradores
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.
peradores 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.
Comando s=itch
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
s!itch(expresso constante) "
case constante #:
instru$es;
%rea&;
case constante 2:
instru$es;
%rea&;
default:
instru$es;
'
Vamos construir um pequeno menu e quando o usurio escolher uma das
opes imprimiremos qual delas ele escolheu. Observe:
2oid main ()
{
printf("((((((((((((((((((((((((((((((-n");
printf("C DE?FE'M' G'HC? 9E 9'9?I C-n");
printf("((((((((((((((((((((((((((((((-n");
printf("C % ( JHCKLI'? C-n");
printf("C 2 ( EMCKLI'? C-n");
printf("C 5 ( 'KNEE'C'? C-n");
printf("((((((((((((((((((((((((((((((-n");
printf("C O ( I'JE C-n");
printf("((((((((((((((((((((((((((((((-n");
int op;

printf("Ie!ecione uma das opcoes acima: ");
scanf("%d",<op);

sPitch(op)
{
case %:
printf("esco!heu a opcao JHCKLI'?");
,rea;
case 2:
printf("esco!heu a opcao EMCKLI'?");
www.t2ti.com
19
Curso C Starter
,rea;
case 5:
printf("esco!heu a opcao 'KNEE'C'?");
,rea;
case O:
printf("esco!heu a opcao I'JE");
,rea;
defau!t:
printf("digitou outra coisa000");
}
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.
perador Condicional Tern(rio >
Conheceremos agora um if-else um pouco estranho. Quando estivermos numa
situao de uma simples condio podemos utilizar essa estrutura.
Sintaxe:
condio ( expresso# : 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.
Lao 'or
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:
2oid main ()
{
int conta;
for(conta=&;conta/%&;conta>>)
printf("Conta=%d-n",conta);
system("pause");
}
Sintaxe:
for(iniciali)ao;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.
2oid main ()
{
int conta;
for(conta=%;conta/%&;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:
2oid main ()
{
int A,y;
for(A=&, y=&; A>y/%&&; A=A>%, y=y>%)
printf("%d-n",A>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.
Lao =hile
O while utiliza os mesmos elementos do for, s que distribudos de forma
diferente.
Sintaxe:
iniciali)ao;
!hile(expresso de teste)"
instruo;
incremento;
'
Vamos fazer o mesmo programa para contar de 0 a 9 com o while.
2oid main ()
{
int conta;
conta = &;
Phi!e(conta / %&) {
printf("Conta=%d-n",conta);
conta>>;
}
system("pause");
}
Lao do1=hile
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 "
instru$es;
' !hile (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.
2oid main ()
{
int op;
do
{
system("c!s");
printf("((((((((((((((((((((((((((((((-n");
printf("C DE?FE'M' G'HC? 9E 9'9?I C-n");
printf("((((((((((((((((((((((((((((((-n");
printf("C % ( JHCKLI'? C-n");
printf("C 2 ( EMCKLI'? C-n");
printf("C 5 ( 'KNEE'C'? C-n");
printf("((((((((((((((((((((((((((((((-n");
printf("C O ( I'JE C-n");
printf("((((((((((((((((((((((((((((((-n");
scanf("%d",<op);
sPitch(op)
{
case %:
printf("esco!heu a opcao JHCKLI'? -n");
system("pause");
,rea;
case 2:
printf("esco!heu a opcao EMCKLI'? -n");
system("pause");
,rea;
case 5:
printf("esco!heu a opcao 'KNEE'C'? -n");
system("pause");
,rea;
case O:
printf("esco!heu a opcao I'JE -n");
,rea;
defau!t:
printf("digitou outro numero000 -n");
system("pause");
}
} Phi!e (op B= O);
system("pause");
}
www.t2ti.com
23
Curso C Starter
s Comandos 6rea? 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:
2oid main ()
{
int conta;
conta = &;
Phi!e(conta / %&) {
if(conta%2 == %){
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.
#7plorando a .uno print'*+
Podemos definir o tamanho mnimo para a impresso de um campo. Observe:
2oid main ()
{
printf("?s empregados sao %2d -n",57&);
printf("?s empregados sao %Od -n",57&);
printf("?s empregados sao %7d -n",57&);
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
2oid main ()
{
printf("%02f -n",%25O760Q@R);
printf("%O02f -n",%25O760Q@R);
printf("%502f -n",%25O760Q@R);
printf("%50%f -n",%25O760Q@R);
printf("%%&05f -n",%25O760Q@R);
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:
2oid main ()
{
printf("%d %c %A %o -n",)'), )'), )'), )'));
system("pause");
}
A sada ser: @A A BC CDC.
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 Decimal Ee7a !in(rio Coment(rio
NUL 00 00 0000 0000 Caracter Nulo
SOH 01 01 0000 0001 Comeo de cabealho de transmisso
www.t2ti.com
25
Curso C Starter
STX 02 02 0000 0010 Comeo de texto
ETX 03 03 0000 0011 Fim de texto
EOT 04 04 0000 0100 Fim de transmisso
ENQ 05 05 0000 0101 Interroga
ACK 06 06 0000 0110 Confirmao
BEL 07 07 0000 0111 Sinal sonoro
BS 08 08 0000 0100 Volta um caracter
HT 09 09 0000 1001 Tabulao Horizontal
LF 10 0A 0000 1010 Prxima linha
VT 11 0B 0000 1011 Tabulao Vertical
FF 12 0C 0000 1100 Prxima Pgina
CR 13 0D 0000 1101 Incio da Linha
SO 14 0E 0000 1110 Shift-out
SI 15 0F 0000 1111 Shift-in
DLE 16 10 0001 0000 Data link escape
D1 17 11 0001 0001 Controle de dispositivo
D2 18 12 0001 0010 Controle de dispositivo
D3 19 13 0001 0011 Controle de dispositivo
D4 20 14 0001 0100 Controle de dispositivo
NAK 21 15 0001 0101 Negativa de Confirmao
Caracter Decimal Ee7a !in(rio Coment(rio
SYN 22 16 0001 0110 Synchronous idle
ETB 23 17 0001 0111 Fim de transmisso de bloco
CAN 24 18 0001 1000 Cancela
EM 25 19 0001 1001 Fim de meio de transmisso
SUB 26 1A 0001 1010 Substitui
ESC 27 1B 0001 1011 Escape
FS 28 1C 0001 1100 Separador de Arquivo
GS 29 1D 0001 1101 Separador de Grupo
RS 30 1E 0001 1110 Separador de registro
US 31 1F 0001 1111 Separador de Unidade
Espao 32 20 0010 0000
! 33 21 0010 0001
" 34 22 0010 0010
# 35 23 0010 0011
$ 36 24 0010 0100
% 37 25 0010 0101
www.t2ti.com
26
Curso C Starter
& 38 26 0010 0110
' 39 27 0010 0111
( 40 28 0010 1000
) 41 29 0010 1001
* 42 2A 0010 1010
+ 43 2B 0010 1011
, 44 2C 0010 1100
- 45 2D 0010 1101
. 46 2E 0010 1110
/ 47 2F 0010 1111
0 48 30 0011 0000
1 49 31 0011 0001
2 50 32 0011 0010
3 51 33 0011 0011
4 52 34 0011 0100
5 53 35 0011 0101
6 54 36 0011 0110
7 55 37 0011 0111
8 56 38 0011 1000
9 57 39 0011 1001
Caracter Decimal Ee7a !in(rio Coment(rio
: 58 3A 0011 1010
; 59 3B 0011 1011
< 60 3C 0011 1100
= 61 3D 0011 1101
> 62 3E 0011 1110
? 63 3F 0011 1111
@ 64 40 0100 0000
A 65 41 0100 0001
B 66 42 0100 0010
C 67 43 0100 0011
D 68 44 0100 0100
E 69 45 0100 0101
F 70 46 0100 0110
G 71 47 0100 0111
H 72 48 0100 1000
I 73 49 0100 1001
www.t2ti.com
27
Curso C Starter
J 74 4A 0100 1010
K 75 4B 0100 1011
L 76 4C 0100 1100
M 77 4D 0100 1101
N 78 4E 0100 1110
O 79 4F 0100 1111
P 80 50 0101 0000
Q 81 51 0101 0001
R 82 52 0101 0010
S 83 53 0101 0011
T 84 54 0101 0100
U 85 55 0101 0101
V 86 56 0101 0110
W 87 57 0101 0111
X 88 58 0101 1000
Y 89 59 0101 1001
Z 90 5A 0101 1010
[ 91 5B 0101 1011
\ 92 5C 0101 1100
] 93 5D 0101 1101
Caracter Decimal Ee7a !in(rio Coment(rio
^ 94 5E 0101 1110
_ 95 5F 0101 1111
` 96 60 0110 0000
a 97 61 0110 0001
b 98 62 0110 0010
c 99 63 0110 0011
d 100 64 0110 0100
e 101 65 0110 0101
f 102 66 0110 0110
g 103 67 0110 0111
h 104 68 0110 1000
i 105 69 0110 1001
j 106 6A 0110 1010
k 107 6B 0110 1011
l 108 6C 0110 1100
m 109 6D 0110 1101
www.t2ti.com
28
Curso C Starter
n 110 6E 0110 1110
o 111 6F 0110 1111
p 112 70 0111 0000
q 113 71 0111 0001
r 114 72 0111 0010
s 115 73 0111 0011
t 116 74 0111 0100
u 117 75 0111 0101
v 118 76 0111 0110
w 119 77 0111 0111
x 120 78 0111 1000
y 121 79 0111 1001
z 122 7A 0111 1010
{ 123 7B 0111 1011
| 124 7C 0111 1100
} 125 7D 0111 1101
~ 126 7E 0111 1110
DELETE 127 7F 0111 1111
utras .un9es 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:
2oid main ()
{
char caractere;
printf("9igite um caractere: ");
caractere = getche();
printf("-n' tec!a 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().
2oid main ()
{
char caractere;
printf("9igite um caractere: ");
caractere = getch();
printf("-n' tec!a 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:
2oid main ()
{
char fraseS%&&T;
printf("9igite uma frase e eu direi "uantos caracteres e!a possui -n-n");
gets(frase);
int anda = &;
33o caractere )-&) indica "ue se chegou ao fina! da cadeia de caracteres
33eh conhecido como caractere nu!o
Phi!e (fraseSandaT B= )-&))
{
anda>>;
}
printf("' frase tem %d caracteres, contando com os espacos",anda);
printf("-n");
system("pause");
}
)rocedimentos e .un9es
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:
.inc!ude /stdio0h1
main ()
{
2oid repete(char a, int 2e$es); 33main sa,e "ue eAiste um procedimento
repete()(),5&);
printf("C DE?FE'M' G'HC? 9E 9'9?I C-n");
www.t2ti.com
30
Curso C Starter
repete()(),5&);
printf("C % ( JHCKLI'? C-n");
printf("C 2 ( EMCKLI'? C-n");
printf("C 5 ( 'KNEE'C'? C-n");
repete()(),5&);
printf("C O ( I'JE C-n");
repete()(),5&);
system("pause");
}
2oid repete(char a, int 2e$es)
{
int i=&;
for (i=&; i/2e$es; 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 num%, num2;
printf("9igite dois numeros para a rea!i$acao da soma: -n");
scanf("%d %d",<num%, <num2);
printf("a soma dos numeros: %d-n",soma(num%,num2));
system("pause");
www.t2ti.com
31
Curso C Starter
}
int soma(int a, int ,)
{
return (a>,);
}
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 !i6lioteca 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:
.inc!ude /math0h1
main ()
{
int num%, num2;
printf("9igite dois numeros: -n");
scanf("%d %d",<num%, <num2);
printf("a rai$ "uadrada de %d eh %f-n",num%,s"rt(num%));
printf("%d ao "uadrado eh %f-n",num2,poP(num2,2));
system("pause");
}
Agora observe a lista das funes contidas em math.h:
.uno Descrio
fabs(double)
Absoluto. abs (inteiro), cabs (complexo), fabs(real), labs
(longo).
floor(double) Trunca nmero real.
ceil(double) Arredonda nmero real
modf(double, double *) Quebra um real em uma parte inteira e outra fracionria.
sqrt(double) Raiz quadrada.
atof(char *) Converte string para real.
sin(double) Seno.
cos(double) Cosseno.
www.t2ti.com
32
Curso C Starter
.uno Descrio
tan(double) Tangente.
asin(double) Arco seno.
acos(double) Arco cosseno.
atan(double) Arco tangente.
atan2(double, double) Arco tangente.
frexp(double, int *) Quebra nmero real em mantissa e expoente.
ldexp(double, int) Equivale a (double * 2^int)
log(double) Logaritmo natural.
log10(double) Logaritmo na base 10.
pow(double, double) x ^ y. Ex: pow(2,4) = 16.
exp(double) e ^ double
sinh(double) Seno hiperblico.
cosh(double) Cosseno hiperblico.
tanh(double) Tangente hiperblico.
Agora voc deve tentar resolver a lista de exerccios abaixo. Qualquer
dificuldade envie para a lista de discusso:
#7erccios
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 (ax
2
+
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 Isento
2..3 (inclusive) 5%
3..5 (inclusive) 10%
5..7 (inclusive) 15%
Acima de 7 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

You might also like