Professional Documents
Culture Documents
Programao C
Cleide Bittencourt
cleidetb@gmail.com
Breve Histrico
Em 1973 Dennis Ritchie reescreveu o sistema
operacional UNIX em uma linguagem de alto
nvel (Ling. C).
Introduo Linguagem C
C comparado a outras
linguagens
Devemos entender Nvel Alto como sendo a
capacidade da linguagem em compreender
instrues escritas em dialetos prximos do
ingls (Ada e Pascal, por exemplo) e Nvel Baixo
para aquelas linguagens que se aproximam do
assembly, que a linguagem prpria da mquina,
compostas por instrues binrias e outras
incompreensveis para o ser humano no treinado
para este propsito. Infelizmente, quanto mais
clara uma linguagem for para o humano
(simplicidade >) mais obscura o ser para a
mquina (velocidade <).
Introduo Linguagem C
C comparado a outras
linguagens
Nvel Baixo Nvel Mdio Nvel Alto
Clareza
Velocidade
Introduo Linguagem C
Aplicaes escritas em C
Sistema Operacional: UNIX
Planilhas: 1,2,3 e Excel
Banco de Dados: dBase III, IV e Access
( gerenciador de base de dados).
Aplicaes Grficas: Efeitos Especiais
de filmes como Star Trek e Star War.
Introduo Linguagem C
Caractersticas da Linguagem C
Portabilidade entre mquinas e sistemas
operacionais.
Alia caractersticas de linguagens de alto e
baixo nvel (liberdade ao programador).
Programas Estruturados.
Total interao com o Sistema Operacional.
Cdigo compacto e rpido, quando
comparado ao cdigo de outras linguagem
de complexidade anloga.
Introduo Linguagem C
Caractersticas da Linguagem C
C uma linguagem compilada: l
todo o cdigo fonte e gera o cdigo
objeto (ling. de mquina) uma nica
vez.
Linguagens Interpretadas: l o
cdigo fonte, traduz e executa,
repete esse ciclo cada vez que o
programa for executado.
Introduo Linguagem C
Detalhes Importantes
Sempre que o cdigo fonte for alterado
ele deve ser Novamente Compilado.
C case sensitive
Introduo Linguagem C
Palavras reservadas
So palavras que tm um significado
especial para a linguagem.
auto, break, case, if, for, while, begin, end,
continue, return, const,....
#include minha_biblioteca.h ou
#include <minha_biblioteca.h>
Introduo Linguagem C
Estrutura de um programa
C
/* Primeiro Programa em C */
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf(Meu primeiro programa em C\n);
System(pause);
}
Introduo Linguagem C
Estrutura de um programa
C
/* Primeiro Programa em C */ comentrios
#include <stdio.h> /*biblioteca de E/S */
Introduo Linguagem C
Digitando um programa C
Utilizar um editor qualquer: Dev-C++
www.bloodshed.net
Digite o programa anterior
Introduo Linguagem C
Compilando e Executando
Para compilar: (verifica a sintaxe)
Executar / compilar ou
Para executar: (exibir tela para usurio)
Executar / Executar ou
Para compilar e executar:
(simultaneamente)
Executar/Compilar & Executar ou
Introduo Linguagem C
Varivel
Varivel: objeto que pode assumir
diversos valores;
espao de memria de um certo tipo de
dado associado a um nome para
referenciar seu contedo
Main ( )
{
int idade;
idade = 30;
printf ( A idade : %d, idade);
}
Introduo Linguagem C
Nomes de Variveis
quantos caracteres quiser at o limite (32);
comece com letras ou sublinhado:
Seguidos de letras, nmeros ou sublinhados
C sensvel ao caso:
peso <> Peso <> pEso
no podemos definir um identificador com o
mesmo nome que uma palavra chave
auto static extern int long if while do ......
Introduo Linguagem C
Declarao de Variveis
Instruo para reservar uma
quantidade de memria para um
certo tipo de dado, indicando o nome
pelo qual a rea ser referenciada
>> tipo nome-da-varivel; ou
>> tipo nome1, nome2,...,nomen;
EX: char nome;
int idade, num;
Introduo Linguagem C
Tipos Bsicos de Dados
determinar um conjunto de valores e as possveis
operaes realizadas sobre os mesmos ;
informa a quantidade de memria (bytes);
Introduo Linguagem C
Diferentes tipos de inteiros
Long ou Long int (4 bytes)
Unsigned Char (0 a 255)
Unsigned int (0 a 65.535)
} Introduo Linguagem C
Comandos bsicos
Entrada Sada
Processamento de
de de dados Dados
Dados
Instrues de E/S
Introduo Linguagem C
Intrues de E/S Scanf ( )
Leitura de dados tipados via
teclado
Scanf (string de controle, lista de
argumentos);
OBS: Para seqncia
Exemplo: de caracteres (%s),
scanf(%d,&idade); o caracter & no
dever ser usado.
Introduo Linguagem C
Comandos de E/S printf (
)
Apresentao de dados no monitor
printf(string de controle, lista de
argumentos);
Exemplo:
printf (Digite a sua idade:\n);
scanf (%d, &idade);
printf(Sua idade : %d, idade);
Introduo Linguagem C
String de controle
%c caracter
%d inteiro
%e nmero ou notao cientfica
%f ponto flutuante
%o octal
%x hexadecimal
%s string (cadeia de caracteres)
%lf double
Introduo Linguagem C
Exemplo strings de
controle
#include <stdio.h>
main ( )
{
char a ;
printf ( digite um caracter );
scanf ( % c, &a );
printf ( \n %c = %d em decimal, a, a);
printf (%o em octal, %x em hexadecimal, a, a);
}
Digitando m:
m = 109 em decimal, 155 em octal, 6d em
hexadecimal
Introduo Linguagem C
Operador de Endereo &
um endereo de memria o nome que o
computador usa para identificar uma varivel
Ex:
inteiro2bytes
float4bytes
char 1 byte
Introduo Linguagem C
Operador de Endereo &
Quando usamos & precedendo uma
varivel estamos falando do
endereo desta varivel na memria
Introduo Linguagem C
Caracteres Especiais
\n nova linha
\r enter
\t tabulao (tab)
\b retrocesso
\ aspas
\\ barra
Introduo Linguagem C
Formatando as sadas -
printf
possvel estabelecer o tamanho mnimo
para a impresso de um campo
#include <stdio.h>
main ( )
{
printf (os alunos so %2d \n, 350);
printf (os alunos so %4d \n, 350);
printf (os alunos so %5d \n, 350);
}
Sada: os alunos so 350
os alunos so 350
os alunos so 350
Introduo Linguagem C
Formatando as sadas -
printf
#include <stdio.h>
main ( )
{
printf ( %3.1f \n, 3456.78);
printf ( %10.3f \n, 3456.78);
}
Sada: 3456.8
3456.780
Introduo Linguagem C
Programando Exerccio 1
Faa um programa para ler e escrever na
tela o seu nome e a sua idade.
#include <stdio.h>
main( )
{
int idade;
char nome[30];
printf (Digite o seu nome:\n);
scanf(%s, nome);
printf (Digite a sua idade:\n);
scanf (%d, &idade);
printf(A idade do(a) %s %d,nome, idade);
} Introduo Linguagem C
Operadores Aritmticos
Operador Ao
+ Adio
* Multiplicao
/ Diviso
% Resto da diviso
inteira
- Subtrao (unrio)
-- Decremento
++ Incremento
Introduo Linguagem C
Operadores Relacionais e
Lgicos
Operador Ao
> Maior que
>= Maior ou igual que
< Menor que
<= Menor ou igual que
== Igual a
!= Diferente de
&& Condio E
|| Condio OU
! No
Introduo Linguagem C
Operadores - Observao
Em C o resultado da comparao
ser ZERO se resultar em FALSO e
DIFERENTE DE ZERO no caso de
obtermos VERDADEIRO num teste
qualquer.
Introduo Linguagem C
Operadores - Exemplo
#include <stdio.h>
main ( ) Sada: Verd.=1 Falso = 0
{
int verdadeiro, falso;
Introduo Linguagem C
Comparaes e Testes
Observemos antes de mais nada
que ++x diferente de x++!
Se
x = 10; porm Se
x = 10;
y = ++x;
y = x++;
/* x=x+1; y=x; */
/* y=x; x=x+1 */
ento ento
x = 11 e x = 11 e
y = 11 y = 10
Introduo Linguagem C
Programa Exemplo
Pre/Pos Incremento
#include<stdio.h>
main()
{
int cont = 0, loop;
loop=++cont;
printf(Loop=%d, Cont=%d\n, loop, cont);
loop=cont++;
printf(Loop=%d, Cont=%d\n, loop, cont);
Introduo Linguagem C
Comparaes e Testes
Se
x = 1;
y = 2;
printf(%d == %d e %d\n, x, y, x==y )
Introduo Linguagem C
Operador Sizeof
Introduo Linguagem C
Converses de Tipos
Quando forem misturadas variveis de diferentes tipos, o
compilador C converter os operandos para o tipo de
operando maior, de acordo com as regras descritas a seguir:
Introduo Linguagem C
Converses de Tipos -
NOTA
Nota: Devemos observar que o compilador C bastante flexvel e
pouco vigilante, comportando-se de maneira muito diferente de
um compilador Clipper ou Pascal, sempre vigilantes com relao
aos tipos das variveis. De fato aqueles compiladores podem gerar
executveis misturando tipos, porm a ocorrncia de erros de
execuo quase inevitvel. Ao contrrio destes compiladores, os
compiladores C ajeitam as coisas para o programa funcionar da
melhor maneira possvel, o que no significa em hiptese
alguma que os resultados sero os esperados por programadores
relapsos. Assim esta boa caracterstica dos compiladores C, pode
transformar-se numa autntica bomba relgio para programas
no muito bem elaborados.
Introduo Linguagem C
Estruturas de Deciso
Permitir testes para decidir aes
alternativas:
if
if - else
switch
(?:) Operador Condicional
Introduo Linguagem C
Comando if
if (condio) {
if (condio) instruo1;
instruo; intruo2;
}
#include<stdio.h> #include<stdio.h>
main() main()
{ {
charch; if(getchar())==p){
ch=getchar(); printf(vocdigitoup);
if(ch==p) printf(pressioneoutratecla);
printf(vocpressionoua getchar();
teclap); }
} }
Introduo Linguagem C
if aninhados
Se um comando if est dentro do outro if,
dizemos que o if interno est aninhado.
#include<stdio.h> #include<stdio.h>
main() main()
{ {
charch; charch;
printf(digiteumaletra printf(digiteumaletra
entreAeZ); entreAeZ);
ch=getchar(); ch=getchar();
if(ch>=A) if((ch>=A)&&(ch<=Z))
if(ch<=Z) printf(vocacertou);
printf(vocacertou); }
}
Introduo Linguagem C
Comando if-else
O comando if s executa a instruo
caso a condio de teste seja
verdadeira, nada fazendo se a
expresso for falsa.
Introduo Linguagem C
Exemplo: Evitar-se divises por Zero,
usando recursos do comando if-else.
include <stdio.h>
main()
{
int a,b;
printf(Digite 2 nmeros: );
scanf(%d %d,&a,&b);
if (b)
printf(%f,a/b);
else
printf(Nao posso dividir por zero\n);
}
Introduo Linguagem C
Comando if-else aninhados
#include<stdio.h>
if (condio1) main()
{
instruo intnmero;
else if scanf(%d,&nmero);
(condio2) if(nmero<0)
printf(nmeromenorquezero);
instruo elseif(nmero<10)
else if printf(nmeroe<10);
elseif(nmero<100)
(condio3)...
printf(nmero10e<100);
else
printf(nmero100);
}
Introduo Linguagem C
Como o computador decide de
qual if o else pertence?
else sempre associado ao if mais
interno
Ex2:
EX1: quando z = b ser executado?
if(n>0){
if(n>0) if(a>b)
if(a>b){ z=a;
z=a; }else
calculafatorial(z); z = b;
}
else
Ex1: Quando n > 0 e a < b
z = b; Ex2: Quando n < 0
Introduo Linguagem C
Exemplo 1: Programa Adulto, Jovem ou
Velho.
#include <stdio.h>
main()
{
int i;
printf(Digite sua idade: );
scanf(%d,&i);
if (i > 70)
printf(Esta Velho!);
else
if (i > 21)
printf(Adulto);
else
printf(Jovem);
}
Introduo Linguagem C
Exemplo2:Maiorentretrsnmeros
main() main()
{ {
inta,b,c; inta,b,c,d;
printf(Digiteo1Nmero:); cls();
scanf(%d,&a); printf(Digiteo1Nmero:);
printf(\nDigiteo2Nmero:); scanf(%d,&a);
scanf(%d,&b);
printf(\nDigiteo2Nmero:);
printf(\nDigiteo3Nmero:);
scanf(%d,&b);
scanf(%d,&c);
printf(\nDigiteo3Nmero:);
if(a>b)
scanf(%d,&c);
if(a>c)
printf(\nOMaior%d,a);
if(a>b)
else d=a;
printf(\nOMaior%d,c); else
else d=b;
if(b>c) if(c>d)
printf(\nOMaior%d,b); printf(\nOMaior%d,c);
else else
printf(\nOMaior%d,c); printf(\nOMaior%d,d);
} }
Exemplo 3: Dados 2 nmeros apresente-
os ordenados.
main()
{
inta,b,t;
printf(Digiteo1Nmero:);
scanf(%d,&a);
printf(\nDigiteo2Nmero:);
scanf(%d,&b);
if(a<b){
t=a;
a=b;
b=t;
}
printf(\nOrdenados: %d e %d ,b,a);
}
Introduo Linguagem C
Comando ?:
Forma compacta de expressar uma
instruo if else
(condio) ? expresso1 : expresso2
Max = (num1 > num2) ? num1 : num2
Note:
if (num1 > num2) max = num1;
else max = num2;
Exemplo:
ABS = (num < 0) ? - num : num;
Introduo Linguagem C
Comando Switch
Forma de se substituir o comando if
else ao se executar vrios testes
Diversas vezes precisamos determinar
se um valor encontra-se numa lista de
valores. Apesar de podermos usar uma
seqncia de ifs, este recurso alm de
no ser elegante, por vezes confunde o
entendimento do programa. Vejamos
uma opo melhor: o comando switch.
Introduo Linguagem C
Comando Switch
switch <varivel> { OBS:
case <constante 1> :
<comandos>;
varivel deve ser uma
[break;] varivel do tipo inteiro ou
case <constante 2> : caracter;
<comandos>; break serve para terminar
[break;] a seqncia de comandos em
case <constante 3> : execuo, por serem
<comandos>; opcionais, se forem
[break;] suprimidos permitem que o
[default : case a seguir seja
<comandos>;] executado, sem haver
} qualquer quebra na
seqncia do processamento.
Comando Switch - Ex: uma calculadora
#include <stdio.h>
main ( )
{
char op;
float num 1, num 2;
}
Estruturas de Repetio
#include <stdio.h>
main ( )
{ Como imprimir os
printf (1); 1000 1os nmeros
printf (2); a partir de 1?
: : :
printf (10);
}
sada: 1 2 3 4 ...
10
Introduo Linguagem C
Estruturas de Repetio
for, while, do-while
repetir uma seqncia de comandos
#include<stdio.h>
main ( )
{
int num;
Introduo Linguagem C
Comando for
for (<incio>;<condio>;<incremento>) <comand
alterada
sempre executada aps a execuo do corpo
do lao
Exemplo: imprimindo nmeros pares
#include<stdio.h> Sada 2 4 6 8
main ( )
{
int nmero;
for ( nmero = 2; nmero < 10; nmero += 2 )
printf ( %d, nmero);
}
Comando for
Flexibilidade: qualquer expresso de um lao for
pode conter vrias instrues separadas por vrgula.
for (x=0,y=0;x+y<100;++x,y=y+x)
printf(%d,x+y);
Introduo Linguagem C
Comando for Loop Vazio
for(i=0;i<10;i++);
Introduo Linguagem C
Comando for Loop Finito
Ao contrrio de outras linguagens que no permitem o trmino do
loop a no ser quando a condio de finalizao for satisfeita, a
linguagem C permite que um loop seja interrompido antes de seu
trmino normal (desestruturao) sem que exista qualquer tipo de
inconveniente. O comando break causa essa interrupo.
for(;;) {
scanf(%c,&c);
if (c == A)
break;
/*interrompe o que deveria ser um lao eterno*/
}
printf(Fim do Loop!);
Comando While
while <condio> <comando>;
Exemplo: Contagem
O loop se repete,
#include <stdio.h> enquanto a
main()
{
condio for
int i=0; verdadeira
while (i < 10) {
printf(%d,i);
i++;
}
}
Introduo Linguagem C
Comando do - while
Ao contrrio das estruturas for e while que
testam a condio no comeo do loop, do /
while sempre a testa no final, garantido a
execuo ao menos uma vez da estrutura.
intnota0,nota1,nota2;
printf(entrecoma1a.nota);
scanf(%d,¬a0);
: : :
printf(mdia = %f, (nota0 + nota1 + nota2) / 3));
Introduo Linguagem C
Ex: Calcular a mdia de 300 alunos
#include<stdio.h>
#define N_ALUNOS 40
main( )
{ int i;
float notas [ N_ALUNOS ], media = 0;
NO ACEITO !!!
Introduo Linguagem C
Vetores Observaes
importantes
Soluo: declarar um vetor que
suporte um nmero mximo de
elementos
Ex: intalunos;
intnotas[70];
:: :
printf(entrecomonmerodealunos);
scanf (%d, &alunos);
Introduo Linguagem C
Vetores Observaes
importantes
Cnorealizaverificaodelimitesem
vetores
Introduo Linguagem C
#include<stdio.h>
#defineTAMANHO100 Vetores Obs importantes
main()
{
int quantidade,media=0;
floatnotas[TAMANHO];
// quantidade deve ser TAMANHO
printf(quantasnotasdevoler?);
scanf(%d,&quantidade);
for(i=0;i<quantidade;i++){
printf(entrecomanota%d,i+1);
scanf(%d,¬as[i]);
}
: : :
for(i=0;i<quantidade;i++)
media+=notas[i];
: : :
Matrizes
emCpodemosdefinirumvetoremque
cadaposiotemosumoutrovetor(matriz).
estruturadedadoshomognea
multidimensional
Note:
int matria [ 4 ] [ 40 ];
temos 4 matrias, cada uma com 40
alunos
Introduo Linguagem C
Matrizes - Leitura
inti,j,matria[4][40];
for(i=0;i<4;i++){
printf(entrecomasnotasdamatria%d,i+1);
for(j=0;j<40;j++){
printf(entrecomanotadoaluno%d,j+1);
scanf(%d,&materia[i][j]);
}
}
Introduo Linguagem C
Varivel String
matrizdotipocharterminadapelocaracterenull\0
cada caractere de um string pode ser acessado
individualmente
vetor de tamanho n string de tamanho ( n-1 )
Ex:
charstring[10]=exemplo;
charstring[10]={exemplo};
charstring[10]={e,x,e,m,p,l,o,\0};
printf(%s,string);
printf(%c,string[0]);
Introduo Linguagem C
Lendo Strings
scanf:l o string at que um branco seja
encontrado
Ex: Sada:
main() Digiteseunome:Jose Maria
{ Bom dia Jose
charnome[40];
printf(Digiteseunome:);
scanf(%s,&nome[0]);
//scanf(%s,nome);
printf(Bomdia%c,nome[0]);
}
Introduo Linguagem C
Lendo Strings
Gets
lcaracteresatencontrar\n
substitui \n por \0
Ex:
main() Sada:
{ Digiteseunome:Jose Maria
Bom dia Jose Maria
charnome[40];
printf(Digiteseunome:);
gets(&nome[0]);//ougets(nome);
printf(Bomdia%s,nome);
} Introduo Linguagem C
Imprimindo Strings
printf
puts
Sada:
Ex: Digiteseunome:Jose Maria
main() Bomdia
{ Jose Maria
charnome[40];
printf(Digiteseunome:);
gets(&nome[0]);
puts(Bomdia);
puts(nome);
} Introduo Linguagem C
Funes de manipulao de
strings
Strlen
retorna o tamanho do string - no conta \0
Ex: Sada:
main() Digiteseunome:Jose Maria
{ Tamanho = 10
charnome[40];
printf(Digiteseunome:);
gets(&nome[0]);
printf(Tamanho=%d,strlen(&nome[0]));
}
Introduo Linguagem C
Funes de manipulao de
strings
strcat(str1,str2)
concatena str2 ao final de str1
Ex: Sada:
main() Maria
{ JoseMaria
char nome[40]=Jose, Cuidado:
charsobrenome[30]=Maria; dado str1 +
str2 tem que
strcat(nome,sobrenome); caber em str1
puts(sobrenome);
puts(nome);
}
Introduo Linguagem C
Funes de manipulao de
strings
strcmp(str1,str2)
comparadoisstringsretornando:
negativosestr1<str2
0sestr1=str2
positivosestr1>str2
acomparaofeitaporordem
alfabtica
Introduo Linguagem C
#include<stdio.h>
main()
{
char nome[40]=Jose;
char sobrenome[30]=Maria;
if(strcmp(nome,sobrenome)!=0)
puts(osstringssodiferentes);
else
puts(osstringssoidenticos);
}