Вы находитесь на странице: 1из 71
Linguagem de Programação C José Maria Monteiro zemaria@lia.ufc.br
Linguagem de Programação C
José Maria Monteiro
zemaria@lia.ufc.br
Breve Histórico Em 1973 Dennis Ritchie reescreveu o sistema operacional UNIX em uma linguagem de
Breve Histórico
Em 1973 Dennis Ritchie reescreveu o sistema
operacional UNIX em uma linguagem de alto
nível (Ling. C).
Surgem diversas implementações utilizando C,
porém os códigos gerados eram incompatíveis.
ANSI (American National Standard Institute),
em 1983 padronizou a ling. C.
Introdução Linguagem C
C comparado a outras linguagens Devemos entender Nível Alto como sendo a capacidade da linguagem
C
comparado a outras linguagens
Devemos entender Nível Alto como sendo a
capacidade da linguagem em compreender instruções
escritas em “dialetos” próximos do inglês (Ada e
Pascal, por exemplo) e Nível Baixo para aquelas
linguagens que se aproximam do assembly, que é a
linguagem própria da máquina, compostas por
instruções binárias e outras incompreensíveis para o
ser humano não treinado para este propósito.
Infelizmente, quanto mais clara uma linguagem for
para o humano (simplicidade >) mais obscura o será
para a máquina (velocidade <).
Introdução Linguagem C
C
comparado a outras linguagens
Nível Alto
Nível Baixo
Nível Médio
Clareza
Velocidade
Ada
C
Basic
Pascal
Assembler
COBOL
Modula -2
Introdução Linguagem C
Aplicações escritas em C Sistema Operacional: UNIX Planilhas: 1,2,3 e Excel Banco de Dados: dBase
Aplicações 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).
Aplicações Gráficas: Efeitos Especiais de
filmes como Star Trek e Star War.
Introdução Linguagem C
Características da Linguagem C
Portabilidade
entre
máquinas
e
sistemas
operacionais.
Alia características de linguagens de alto e
baixo nível (liberdade ao programador).
Programas Estruturados.
Total interação com o Sistema Operacional.
Código compacto e rápido, quando comparado
ao código de outras linguagem de
complexidade análoga.
Introdução Linguagem C
Características da Linguagem C C é uma linguagem compilada: lê todo o código fonte e
Características da Linguagem C
C é uma linguagem compilada: lê todo
o código fonte e gera o código objeto
(ling. de máquina) uma única vez.
Linguagens Interpretadas: lê o código
fonte, traduz e executa cada vez que o
programa for executado.
Introdução Linguagem C
Detalhes Importantes
Sempre que o código fonte for alterado
ele deve ser novamente compilado.
C é “case senitive”
Deve-se listar antecipadamente todas a
as variáveis utilizadas no programa.
Introdução Linguagem C
Palavras reservadas São palavras que têm um significado especial para a linguagem. auto, break, case,
Palavras reservadas
São palavras que têm um significado
especial para a linguagem.
auto, break, case, if, for, while, begin, end,
continue, return, const,
C entende tais palavras apenas em
letras minúsculas
Introdução Linguagem C
Bibliotecas
Conjunto de funções para realizar tarefas
específicas.
Biblioteca padrão C - ANSI - funções básicas.
As primeiras linhas do programa indicam as
bibliotecas utilizadas
#include “minha_biblioteca.h” ou
#include <minha_biblioteca.h>
Introdução Linguagem C
Estrutura de um programa C /* Primeiro Programa em C */ #include <stdio.h> main() {
Estrutura de um programa C
/* Primeiro Programa em C */
#include <stdio.h>
main()
{
printf(“Meu primeiro programa em C\n”);
}
Introdução Linguagem C
Estrutura de um programa C
/* Primeiro Programa em C */ comentários
#include <stdio.h> /*biblioteca de E/S */
main() /*função principal – inicio do programa*/
{
/*marca início da função*/
printf(“Meu primeiro programa em C\n”);
/*função para escrever na tela*/
} /*marca fim da função*/
Introdução Linguagem C
Digitando um programa C Utilizar um editor qualquer: vi ou xedit Digite o programa anterior
Digitando um programa C
Utilizar um editor qualquer: vi ou xedit
Digite o programa anterior
Salve com o nome p1.c
Introdução Linguagem C
Compilando e Executando
Para compilar: (verifica a sintaxe)
>> cc fonte.c <ENTER>
Para compilar e gerar executável:
>> cc fonte.c –o nomeexec <ENTER>
Executando:
>> ./nomeexec <ENTER>
OBS:
Se o nome do executável não for informado o default é a.out
Introdução Linguagem C
Variável Variável: “objeto” que pode assumir diversos valores; espaço de memória de um certo tipo
Variável
Variável: “objeto” que pode assumir diversos
valores;
espaço de memória de um certo tipo de dado
associado a um nome para referenciar seu
conteúdo
Main ( )
{
int idade;
idade = 30;
printf (“ A idade é : %d”, idade);
}
Introdução Linguagem C
Nomes de Variáveis quantos caracteres quiser (32); comece com letras ou sublinhado: Seguidos de letras,
Nomes de Variáveis
quantos caracteres quiser (32);
comece com letras ou sublinhado:
Seguidos de letras, números ou sublinhados
C é sensível ao caso:
peso
<>
Peso
<>
pEso
não podemos definir um identificador com o
mesmo nome que uma palavra chave
auto static extern
int long
if
while do
Introdução Linguagem C
Declaração de Variáveis Instrução para reservar uma quantidade de memória para um certo tipo de
Declaração de Variáveis
Instrução para reservar uma quantidade
de memória para um certo tipo de dado,
indicando o nome pelo qual a área será
referenciada
>> tipo nome-da-variável; ou
>> tipo nome1, nome2,
EX: char nome;
int idade, num;
,nomen
Introdução Linguagem C
Tipos Básicos de Dados
determinar um conjunto de valores e as possíveis
operações realizadas sobre os mesmos ;
informa a quantidade de memória (bytes);
tipo
bytes
escala
char
1
-128
a
127
int
2
-32.768
a
32.767
float
4
3.4e-38
a
3.4e+38
double
8
1.7e-308
a
1.7e+308
Introdução Linguagem C
Diferentes tipos de inteiros Long ou Long int Unsigned Char Unsigned int (4 bytes) (0
Diferentes tipos de inteiros
Long ou Long int
Unsigned Char
Unsigned int
(4 bytes)
(0
a 255)
(0 a 65.535)
obs: int tem sempre o tamanho da
palavra da máquina
Introdução Linguagem C
Programa Exemplo – Tipos de Dados e Variáveis #include <stdio.h> main( ) { int soma=10;
Programa Exemplo – Tipos de Dados
e Variáveis
#include <stdio.h>
main( )
{
int soma=10;
float money=2.21;
char letra= ´A´;
double pi=2.01E6;
printf (“valor da soma = %d\n”, soma);
printf (“Valor de Money = %f\n”, money);
printf(“Valor de Letra = %c\n”, letra);
printf(“Valor de Pi = %e\n”, pi);
}
Introdução Linguagem C
Comandos básicos Saída Entrada de Dados Processamento de dados de Dados Instruções de E/S Introdução
Comandos básicos
Saída
Entrada
de Dados
Processamento
de dados
de
Dados
Instruções de E/S
Introdução Linguagem C
Intruções de E/S – Scanf ( )
Leitura de dados tipados via teclado
Scanf (“string de controle”, lista de argumentos);
Exemplo:
scanf(“%d”,&idade);
OBS: Para seqüência
de caracteres (%s), o
caracter & não deverá
ser usado.
Introdução Linguagem C
Comandos de E/S – printf ( ) Apresentação de dados no monitor printf(“string de controle”,
Comandos de E/S – printf ( )
Apresentação 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);
Introdução Linguagem C
String de controle
%c → caracter
%d → inteiro
%e → número ou notação científica
%f → ponto flutuante
%o → octal
%x → hexadecimal
%s → string (cadeia de caracteres)
%lf → double
Introdução Linguagem C
Exemplo strings de controle #include <stdio.h> main ( ) { char a ; printf (
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
Introdução Linguagem C
Operador de Endereço &
um endereço de memória é o nome que o
computador usa para identificar uma variável
toda variável ocupa uma área de memória e seu
endereço é o primeiro byte por ela ocupado
Ex :
inteiro → 2 bytes
float
4 bytes
char
→ 1
byte
Introdução Linguagem C
Operador de Endereço & Quando usamos & precedendo uma variável estamos falando do endereço desta
Operador de Endereço &
Quando usamos & precedendo uma
variável estamos falando do endereço
desta variável na memória
Ex:
Saída:
valor = 2, endereço = 1230
Main ( )
Varia conforme memória da máquina
{
int num;
num = 2;
printf (“valor = %d, endereço = %Iu”, num,&num);
}
Introdução Linguagem C
Caracteres Especiais
\n nova linha
\r enter
\t
tabulação (tab)
\b retrocesso
\” aspas
\\ barra
Introdução Linguagem C
Formatando as saídas - printf é possível estabelecer o tamanho mínimo para a impressão de
Formatando as saídas - printf
é possível estabelecer o tamanho mínimo para a
impressão de um campo
#include <stdio.h>
main ( )
{
printf (“os alunos são %2d \n”, 350);
printf (“os alunos são %4d \n”, 350);
printf (“os alunos são %5d \n”, 350);
}
Saída:
os alunos são 350
os alunos são
os alunos são
350
350
Introdução Linguagem C
Formatando as saídas - printf
#include <stdio.h>
main ( )
{
printf (“ %3.1f \n”, 3456.78);
printf (“ %10.3f \n”, 3456.78);
}
Saída:
3456.8
3456.780
Introdução Linguagem C
Programando – Exercício 1 Faça um programa para ler e escrever na tela o seu
Programando – Exercício 1
Faça 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);
}
Introdução Linguagem C
Programando – Exercício 2 Faça um programa para ler e escrever na tela os seguintes
Programando – Exercício 2
Faça um programa para ler e escrever
na tela os seguintes dados:
Nome
Endereço
Telefone
Cidade
Cep
Introdução Linguagem C
Operadores Aritméticos Operador + * / Ação Adição Multiplicação Divisão % Resto da divisão inteira
Operadores Aritméticos
Operador
+
*
/
Ação
Adição
Multiplicação
Divisão
%
Resto da divisão inteira
-
--
++
Subtração (unário)
Decremento
Incremento
Introdução Linguagem C
Operadores Relacionais e
Lógicos
Operador
Ação
>
>=
Maior que
Maior ou igual que
<
<=
==
!=
&&
||
!
Menor que
Menor ou igual que
Igual a
Diferente de
Condição “E”
Condição “OU”
Não
Introdução Linguagem C
Operadores - Observação Em C o resultado da comparação será ZERO se resultar em FALSO
Operadores - Observação
Em C o resultado da comparação será
ZERO se resultar em FALSO e
DIFERENTE DE ZERO no caso de
obtermos VERDADEIRO num teste
qualquer.
Introdução Linguagem C
Operadores - Exemplo
#include <stdio.h>
main ( )
Saída: Verd.=1 Falso = 0
{
int verdadeiro, falso;
verdadeiro = (15 < 20);
=
falso
(15 == 20);
printf(“Verd.= %d,Falso= %d”,
verdadeiro, falso);
}
Introdução Linguagem C
Comparações e Testes Observemos antes de mais nada que ++x é diferente de x++! Se
Comparações e Testes
Observemos antes de mais nada que
++x é diferente de x++!
Se
porém Se
x = 10;
x = 10;
y = ++x;
y = x++;
/* x=x+1;
y=x; */
/* y=x;
x=x+1 */
então
então
x = 11 e
x = 11 e
y = 11
y = 10
Introdução 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);
Quais são as saídas deste programa ?
Introdução Linguagem C
Comparações e Testes Se x = 1; y = 2; printf(“%d == %d e’ %d\n”,
Comparações e Testes
Se
x = 1;
y = 2;
printf(“%d == %d e’ %d\n”, x, y, x==y )
Qual seria a saída deste comando?
resultaria em
1 == 2
0
(pois a expressão é falsa)
Introdução Linguagem C
Comparações e Testes
if (10 > 4 && !(10 < 9) || 3 <= 4)
Como seria avaliado esta instrução?
resultaria em Verdadeiro, pois dez é maior
que quatro E dez não é menor que nove
OU três é menor ou igual a quatro
Introdução Linguagem C
Operador Sizeof Este operador retorna o tamanho da variável ou tipo que está em seu
Operador Sizeof
Este operador retorna o tamanho da variável
ou tipo que está em seu operando.
Por exemplo “sizeof(char)” resultaria em 1.
Introdução Linguagem C
Conversões de Tipos
Quando forem misturadas variáveis de diferentes tipos, o compilador C
converterá os operandos para o tipo de operando maior, de acordo
com as regras descritas a seguir:
1-Todo char e short int é convertido para int. Todo float é convertido
para double.
2-Para os demais pares de operandos valem as seguintes regras em
seqüência:
2.1- Se um operando for long double, o outro também o será.
2.2- Se um operando for double, o outro também o será.
2.3- Se um operando for long, o outro também o será.
2.4- Se um operando for unsigned, o outro também o será.
Introdução Linguagem C
Conversões de Tipos - NOTA Nota: Devemos observar que o compilador C é bastante flexível
Conversões de Tipos - NOTA
Nota: Devemos observar que o compilador C é bastante flexível e
pouco vigilante, comportando-se de maneira muito diferente de um
compilador Clipper ou Pascal, sempre vigilantes com relação aos tipos
das variáveis. De fato aqueles compiladores podem gerar executáveis
misturando tipos, porém a ocorrência de erros de execução é quase
inevitável. Ao contrário destes compiladores, os compiladores C
“ajeitam” as coisas para o programa funcionar da “melhor maneira
possível”, o que não significa em hipótese alguma que os resultados
serão os esperados por programadores “relapsos”. Assim esta boa
característica dos compiladores C, pode transformar-se numa
autêntica “bomba relógio” para programas não muito bem
elaborados.
Introdução Linguagem C
Exercícios
2)
3)
Introdução Linguagem C
Estruturas de Decisão Permitir testes para decidir ações alternativas: if if - else switch (?:)
Estruturas de Decisão
Permitir testes para decidir ações
alternativas:
if
if - else
switch
(?:) Operador Condicional
Introdução Linguagem C
Comando if
if (condição) {
if (condição)
instrução1;
instrução;
intrução2;
}
#include <stdio.h>
main ( )
#include <stdio.h>
main ( )
{
{
char ch;
ch = getchar ( );
if
(ch == ‘p’)
printf (“você pressionou a
if (getchar()) == ‘p’ ) {
printf (“ você digitou p”);
printf (“ pressione outra tecla ”);
getchar( );
}
tecla p”);
}
}
Introdução Linguagem C
if aninhados Se um comando if está dentro do outro if, dizemos que o if
if aninhados
Se um comando if está dentro do outro if,
dizemos que o if interno está aninhado.
#include <stdio.h>
main ( )
#include <stdio.h>
main ( )
{
{
char ch;
printf (“ digite uma letra
entre A e Z”);
ch = getchar ( );
if (ch >= ‘A’)
if (ch < = ‘Z’)
printf (“ você acertou”);
char ch;
printf (“ digite uma letra
entre A e Z”);
ch = getchar ( );
if
((ch >= ‘A’)
&&
(ch < = ‘Z’))
printf (“ você acertou”);
}
}
Introdução Linguagem C
Comando if-else
O comando if só executa a instrução caso a
condição de teste seja verdadeira, nada
fazendo se a expressão for falsa.
O comando else executará uma instrução ou
um conjunto de instruções se a expressão for
falsa.
Introdução Linguagem C
Comando if-else if (condição) instrução; #include <stdio.h> main ( ) { else instrução; if (getchar
Comando if-else
if (condição)
instrução;
#include <stdio.h>
main ( )
{
else
instrução;
if (getchar ( ) == ‘p’)
printf (“ você digitou p”);
else
printf (“ você não digitou p”);
}
Introdução Linguagem C
Exemplo: Evitar-se divisões por Zero, usando recursos do comando if-else. include <stdio.h> main() { int
Exemplo: Evitar-se divisões por Zero,
usando recursos do comando if-else.
include <stdio.h>
main()
{
int a,b;
printf(“Digite 2 números: “);
scanf(“%d %d”,&a,&b);
if (b)
printf(“%f”,a/b);
else
printf(“Nao posso dividir por zero\n”);
}
Introdução Linguagem C
Comando if-else aninhados if (condição1) instrução else if (condição2) instrução else if (condição3)
Comando if-else aninhados
if (condição1)
instrução
else if (condição2)
instrução
else if (condição3)
#include <stdio.h>
main ( )
{
int número;
scanf (“ % d”, &número);
if (número < 0)
printf (“número menor que zero”);
else if (número < 10)
printf (“ número ≥ 0 e < 10”);
else if (número < 100)
printf (“número ≥ 10 e < 100);
else
printf (“número ≥ 100”);
}
Introdução Linguagem C
Como o computador decide de qual
if o else pertence?
• else é sempre associado ao if mais interno
• quando z = b será executado?
Ex2:
EX1:
if (n > 0)
if (a > b){
z = a;
calculafatorial(z);
if (n > 0) {
if (a > b)
z = a;
} else
z = b;
}
else
z = b;
Ex1: Quando n > 0 e a < b
Ex2: Quando n < 0
Introdução Linguagem C
Exemplo 1: Programa Adulto, Jovem ou Velho. #include <stdio.h> main() { int i; printf(“Digite sua
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”);
}
Introdução Linguagem C

Exemplo 2: Maior entre três números

main()

{

int a,b,c; printf(“Digite o 1º Número: “); scanf(“%d”,&a); printf(“\nDigite o 2º Número: “); scanf(“%d”,&b); printf(“\nDigite o 3º Número: “); scanf(“%d”,&c); if (a > b) if (a > c) printf(“\nO Maior é %d”,a);

else

printf(“\nO Maior é %d”,c);

else if (b > c) printf(“\nO Maior é %d”,b);

else

printf(“\nO Maior é %d”,c);

}

main()

{

int a,b,c,d; cls(); printf(“Digite o 1º Número: “); scanf(“%d”,&a); printf(“\nDigite o 2º Número: “);

scanf(“%d”,&b); printf(“\nDigite o 3º Número: “); scanf(“%d”,&c); if (a > b)

 

d

= a;

else

 

d

= b;

if (c > d)

 

printf(“\nO Maior é %d”,c);

else

 

printf(“\nO Maior é %d”,d);

}

Exemplo 3: Dados 2 números apresente-os ordenados. main() { int a,b,t; printf(“Digite o 1º Número:
Exemplo 3: Dados 2 números apresente-os
ordenados.
main()
{
int a,b,t;
printf(“Digite o 1º Número: “);
scanf(“%d”,&a);
printf(“\nDigite o 2º Número: “);
scanf(“%d”,&b);
if (a < b) {
t = a;
a
= b;
b
= t;
}
printf(“\nOrdenados: %d e %d “,b,a);
}
Introdução Linguagem C
Comando ?:
Forma compacta de expressar uma instrução
if – else
(condição) ? expressão1 : expressão2
Max = (num1 > num2) ? num1 : num2
Note:
if (num1 > num2) max = num1;
else max = num2;
Exemplo:
ABS = (num < 0) ? - num : num;
Introdução Linguagem C
Exercícios 4) 5) 6) Introdução Linguagem C Comando Switch Forma de se substituir o comando
Exercícios
4)
5)
6)
Introdução Linguagem C
Comando Switch
Forma de se substituir o comando if – else ao
se executar vários testes
Diversas vezes precisamos determinar se um
valor encontra-se numa lista de valores.
Apesar de podermos usar uma seqüência de
ifs, este recurso além de não ser elegante,
por vezes confunde o entendimento do
programa. Vejamos uma opção melhor: o
comando switch.
Introdução Linguagem C

Comando Switch

switch <variável> { case <constante 1> :

<comandos>; [break;] case <constante 2> :

<comandos>; [break;] case <constante 3> :

<comandos>; [break;] [default :

<comandos>;]

}

OBS:

•“ variável” deve ser uma variável do tipo inteiro ou caracter;

•“break” serve para terminar a seqüência de comandos em execução, por serem opcionais, se forem suprimidos permitem que o “case” a seguir seja executado, sem haver qualquer quebra na seqüência do processamento.

Comando Switch - Ex: uma calculadora

#include <stdio.h> main ( )

{

char op; float num 1, num 2;

printf (“ digite um n.o, um operador e um n.o”);

scanf (“ %f %c %f”,

switch (op) { case ‘+’:

&num1, &op, &num2);

printf (“ = %f”, num 1 + num 2);

break:

case ‘-’:

printf (“ = %f”, num 1 - num 2); break; default:

printf (“ operador inválido”);

}

}

Exercício Seguindo a idéia do exercício anterior incremente a calculadora com mais funções matemáticas.
Exercício
Seguindo a idéia do exercício anterior
incremente a calculadora com mais
funções matemáticas.
Sugestão: use funções da biblioteca
matemática math.h como por exemplo:
sin(x) cos(x) log(x) sqrt(x) pow(x1,x2)
Para compilar a biblioteca matemática :
cc p1.c -o p1 -lm
Introdução Linguagem C
Estruturas de Repetição
#include <stdio.h>
main ( )
{
printf (“1”);
Como imprimir os
1000 1os números a
partir de 1?
printf (“2”);
:
:
:
printf (“10”);
}
saída:
1
2
3
4
10
Introdução Linguagem C
Estruturas de Repetição for, while, do-while repetir uma seqüência de comandos #include<stdio.h> main (
Estruturas de Repetição
for, while, do-while
repetir uma seqüência de comandos
#include<stdio.h>
main ( )
{
int num;
for (num = 1;
num <= 1000;
num++)
printf (“ % d”, num);
}
Saída:
1
2
3
1000
Introdução Linguagem C
Comando for
for (<início>;<condição>;<incremento>) <comando>;
Na forma mais simples:
• Inicialização:
• expressão de atribuição
• sempre executada uma única vez
• Teste:
• condição que controla a execução do laço
• é sempre avaliada a cada execução
• verdadeiro
continua a execução
• falso → para a execução
Introdução Linguagem C

Comando for

•Incremento:

• define como a variável de controle será alterada

• é sempre executada após a execução do corpo do laço

Exemplo: imprimindo números pares

#include<stdio.h> main ( )

{ int número;

Saída

2

4

6

8

for ( número = 2; número < 10; número += 2 ) printf (“ %d”, número);

}

Comando for

Flexibilidade: qualquer expressão de um laço “for” pode conter várias instruções separadas por vírgula.

for (x=0,y=0;x+y<100;++x,y=y+x) printf(“%d”,x+y);

Esta instrução inicializaria x e y com zero, incrementando x de 1 em 1 e y receberia seu valor acrescido do de x. O resultado a cada iteração seria impresso desta forma: 0 (x=0 e y=0) 2 (x=1 e y=1) 5 (x=2 e y=3) 9 14 e assim sucessivamente.

Comando for - Exemplo

Exemplo 1: Contagem simples com condição no teste “for”. main()

{

int i,j,resposta; char feito = ‘ ‘; for (i=1;i<100 && feito != ‘N’;i++) { for (j=1;j<10;j++) { printf(“Quanto e’ %d + %d? “,i,j); scanf(“%d”,&resposta); getchar(); /* limpar o buffer do teclado */ if (resposta != i+j) printf(“Errou!\n);

else

printf(“Acertou!\n”);

}

printf(“Mais? (S/N) “); scanf(“%c”,&feito); getchar(); /* limpar o buffer do teclado */

}

}

Comando for – loop infinito for(;;) printf(“Este loop rodará eternamente!\n”); A ausência de condições de
Comando for – loop infinito
for(;;)
printf(“Este loop rodará eternamente!\n”);
A ausência de condições de inicialização,
continuidade e terminação, causarão um processo
contínuo e teoricamente infinito (veremos
posteriormente a intrução break, que tem a
capacidade de encerrar um processo assemelhado ao
exemplificado).
Introdução Linguagem C
Comando for – Loop Vazio for(i=0;i<10;i++); A presença do ponto e vírgula finalizando o comando,
Comando for – Loop Vazio
for(i=0;i<10;i++);
A presença do ponto e vírgula finalizando
o comando, força a execução do loop
sem que seja executado qualquer outro
comando.
Introdução Linguagem C

Comando for – Loop Finito

Ao contrário de outras linguagens que não permitem o término do loop a não ser quando a condição de finalização for satisfeita, a linguagem C permite que um loop seja interrompido antes de seu término normal (desestruturação) sem que exista qualquer tipo de inconveniente. O comando “break” causa essa interrupção.

for(;;) { scanf(“%c”,&c); if (c == ‘A’) break;

/*interrompe o que deveria ser um laço eterno*/

}

printf(“Fim do Loop!”);

Comando While while <condição> <comando>; Exemplo: Contagem #include <stdio.h> main() • O
Comando While
while <condição> <comando>;
Exemplo: Contagem
#include <stdio.h>
main()
• O loop se repete,
enquanto a condição
for verdadeira
{
int i=0;
while (i < 10) {
printf(“%d”,i);
i++;
}
}
Introdução Linguagem C

Comando do - while

Ao contrário das estruturas “for” e “while” que testam a condição no começo do loop, “do / while” sempre a testa no final, garantido a execução ao menos uma vez da estrutura.

do {

<comandos>; } while <condição>;

Exemplo: Término determinado pelo usuário.

#include <stdio.h> main()

{

int num;

do {

scanf(“%d”,&num); } while (num < 100);

}

/ * testa a capacidade de adivinhar uma letra * /

#include <stdio.h>

main ( ) char ch;

{

int

tentativas;

do

{ printf (“digite uma letra”);

scanf(“%c”, ch);

getchar ( );

tentativas = 1; while ( ch!= ‘t’)

{

printf (“%c é incorreto \n”, ch); tentativas++; printf (“tente novamente \n”);

}

printf (“%c é correto”, ch); printf (“acertou em %d vezes”, tentativas); printf (“continua? (s / n):”);

scanf(“%c”,ch);

getchar( );

} while

(ch ==

‘s’);

}

Exercícios

Funções / Procedimentos Dividir uma tarefa complexa em tarefas menores, permitindo esconder detalhes de
Funções / Procedimentos
Dividir uma tarefa complexa em tarefas
menores, permitindo esconder detalhes de
implementação
Evita-se a repetição de um mesmo código
Tipo
Nome (lista de parâmetros)
{
corpo
}
Introdução Linguagem C

Procedimentos

usando

funcoes

“Funções” que não retornam valores

Tipo: void

#include <stdio.h> void desenha();

void

desenha( )

{

int i; for (i = 0;

i < = 10;

i++)

 

printf (“-”);

}

main ( )

 

{

desenha ( ); printf (“ usando funções”); desenha ( );

}

Funções

Retornam valores

#include <stdio.h>

int

fatorial (int);

int

fatorial (int n)

{

int i, resultado = 1;

 

for ( i = 1;

i <= n;

i ++)

resultado *= i; return resultado;

}

main ( )

 

{

printf (“ o fatorial de 4 = %d”, fatorial(4) ); printf (“ o fatorial de 3 = %d”, fatorial(3) );

}

Variáveis locais Variáveis declaradas dentro de uma função são denominadas locais e somente podem ser
Variáveis locais
Variáveis declaradas dentro de uma
função são denominadas locais e
somente podem ser usadas dentro do
próprio bloco
São criadas apenas na entrada do bloco
e destruídas na saída (automáticas)
Introdução Linguagem C

Variáveis Locais

void desenha ( )

{

 

int

i, j;

.

.

.

}

main ( )

{

int a;

desenha();

}

void desenha ( )

 

{

int i, j;

i, j

em

 

.

.

.

desenha são

.

.

.

variáveis

}

diferentes de i, j em

void calcula ( )

{

calcula.

 

int i, j;

 

.

.

.

.

.

.

}

a = i; .

.

.

a = i; ← . . . erro

erro

Variáveis Globais Variável que é declarada externamente podendo ser acessada por qualquer função void desenha
Variáveis Globais
Variável que é declarada externamente
podendo ser acessada por qualquer função
void desenha ( )
#include <stdio.h>
main ( )
{
int j;
{
int i;
i = 0;
.
.
.
}
void calcula ( )
desenha ( );
{
calcula ( );
int m;
}
i = 5;
.
.
.
}
Introdução Linguagem C
Comando Return Causa a atribuição da expressão a função forçando o retorno imediato ao ponto
Comando Return
Causa a atribuição da expressão a função
forçando o retorno imediato ao ponto de chamada da função.
#include <stdio.h>
main ( )
char minúsculo ( )
{
{
char ch;
char letra;
scanf(“%c”, ch);
printf (“ digite uma letra em
minúsculo”);
if
( (ch >= ‘A’)
&&
(ch <= ‘Z’))
letra = minúsculo ( );
return (ch + ‘a’ - ‘A’);
else
return (ch);
if
(letra == ‘a’)
printf (“ok”);
}
}
Introdução Linguagem C
Note pelo exemplo anterior que a função minúsculo lê um valor internamente convertendo-o para minúsculo.
Note pelo exemplo anterior que a
função minúsculo lê um valor
internamente convertendo-o para
minúsculo.
Como usar esta função se já temos uma
letra e desejamos convertê-la para
minúsculo?
Introdução Linguagem C
Passando dados para função Passagem de parâmetro por valor - uma cópia do argumento é
Passando dados para função
Passagem de parâmetro por valor -
uma cópia do argumento é passada
para a função
O parâmetro se comporta como uma
variável local
Introdução Linguagem C
Passando dados para função
main ( )
{
printf (“ %c”, minúsculo (‘A’) );
parâmetro real
}
char minúsculo (char ch)
↑ parâmetro formal
{
if (( ch >= ‘A’)&& (ch <= ‘Z’))
return (ch + ‘a’-, ‘A’);
else
return (ch);
}
Introdução Linguagem C

Passando dados para função - Exemplo

#include <stdio.h> main ( )

{

int num, b; printf (“ entre com um número > o”); scanf (“ %d”, &num ); b = abs (num);

. . printf (“ Valor absoluto de num = %d”, abs(num) );

.

. . b = abs(-3);

.

}

int abs (int x)

{

return ( ( x < 0 ) ? -x : x );

}

Passando vários argumentos Ex 2: Ex 1: float potência (float base, int expoente) float área_retângulo
Passando vários argumentos
Ex 2:
Ex 1:
float potência (float base, int expoente)
float área_retângulo (float
largura, float altura)
{
int i;
float resultado = 1;
{
return (largura * altura);
if (expoente == 0)
return 1;
}
for (i = 1; i <= expoente; i++)
resultado *= base
return resultado;
}
Introdução Linguagem C
Usando várias funções: calcular a seguinte seqüência S(x, n) = x/1! + x 2 /2!
Usando várias funções: calcular a seguinte seqüência
S(x, n) = x/1!
+ x 2 /2!
+
x 3 /3!
+
+
x n / n!
#include <stdio.h>
float serie (float ,
int );
float
potencia (float , int)
int fat (int);
main( )
{
float x;
int termos;
printf(“entre com o numero de termos: “);
scanf(“%d”, &termos);
printf(“entre com o valor de X: “);
scanf(“%f”, &x);
printf(“O valor de série = %f “, serie(x, termos));
}

float serie (float x,

int n)

{

int i;

float resultado = 0;

 

for ( i = 1;

i <= n; i++)

resultado += return resultado;

potência( x, i )

/

fat( i );

}

float

potencia (float base, int expoente)

{

int i;

float resultado = 1;

 

if (expoente == 0)

return 1; for (i = 1;

i <= expoente; i++)

 

resultado *= base; return resultado;

}

int fat (int n)

{

int i, resultado = 1;

 

for ( i = 1;

i <= n;

i ++)

resultado *= i; return resultado;

}

Vetores tipo de dado usado para representar uma coleção de variáveis de um mesmo tipo
Vetores
tipo de dado usado para representar uma coleção de
variáveis de um mesmo tipo
estrutura de dados homogênea unidimensional
Ex: Ler a nota de 3 alunos e calcular a média
int nota0, nota1, nota2;
printf(“entre com a 1a. nota”);
scanf(“%d”, &nota0);
:::
printf(“média = %f”, (nota0 + nota1 + nota2) / 3));
Introdução Linguagem C

Ex: Calcular a média de 300 alunos

#include<stdio.h>

#define N_ALUNOS 40 main( )

{

int

i;

float notas [ N_ALUNOS ], media = 0;

for ( i = 0; i < N_ALUNOS; i++ ) { printf (“entre com a nota %d”, i+1); scanf (“%f”, &notas[ i ]); media += notas [ i ];

}

printf (“ Média = %f \n”, media / N_ALUNOS);

for ( i = 0; i < N_ALUNOS; i++ ) { printf (“\n Nota do aluno %d = ”, i+1); printf (“%f \n”, notas[ i ]);

}

}

Vetores – Observações importantes em ‘C’ não existe declaração de vetor dinâmico o tamanho de
Vetores – Observações importantes
em ‘C’ não existe declaração de vetor
dinâmico
o tamanho de um vetor tem que ser
determinado em tempo de compilação
Ex:
int alunos;
int notas [ alunos ];
:
:
:
printf (“entre com o número de alunos”);
scanf (“%d”, &alunos);
NÂO É ACEITO !!!
Introdução Linguagem C
Vetores – Observações importantes Solução: declarar um vetor que suporte um número máximo de elementos
Vetores – Observações importantes
Solução: declarar um vetor que suporte
um número máximo de elementos
Ex:
int alunos;
int
notas [ 70 ];
: :
:
printf (“entre com o número de alunos”);
scanf (“%d”, &alunos);
Introdução Linguagem C
Vetores – Observações importantes C não realiza verificação de limites em vetores nada impede o
Vetores – Observações importantes
C não realiza verificação de limites em
vetores
nada impede o acesso além do fim do vetor
faça sempre que necessário a verificação dos
limites
Introdução Linguagem C

#include <stdio.h> #define TAMANHO main( )

{

100

Vetores – Obs importantes

int

float notas [ TAMANHO ];

// quantidade deve ser

printf ( “quantas notas devo ler ?”);

scanf(“%d”, &quantidade); for ( i = 0; i < quantidade; i++) { printf ( “entre com a nota %d”, i+1); scanf(“%d”, &notas [ i ]);

TAMANHO

quantidade, media = 0;

}

:::

for ( i = 0; i < quantidade; i++) media += notas [ i ]; :::

}

Passando um vetor para uma função #include <stdio.h> int maximum( int [] ); /* ANSI
Passando um vetor para uma função
#include <stdio.h>
int maximum( int [] );
/* ANSI function prototype */
main( )
{
int values[5], i, max;
printf("Entre com 5 numeros:\n");
for( i = 0; i < 5; ++i )
scanf("%d", &values[i] );
max = maximum( values );
printf("\nValor Maximo: %d\n", max );
}
Introdução Linguagem C
int maximum( int values[5] ) Saída: { int max_value, i; max_value = values[0]; Entre com
int maximum( int values[5] )
Saída:
{
int max_value, i;
max_value = values[0];
Entre com 5 numeros:
7 23 45 9 121
Valor Maximo: 121
for( i = 0; i < 5; ++i )
if( values[i] > max_value )
max_value = values[i];
return max_value;
}
Introdução Linguagem C
Matrizes
em ‘C’ podemos definir um vetor em que
cada posição temos um outro vetor (matriz).
estrutura de dados homogênea
multidimensional
Note:
int
matéria [ 4 ] [ 40 ];
temos 4 matérias, cada uma com 40 alunos
Introdução Linguagem C
Matrizes - Leitura int i, j, matéria [ 4 ] [ 40 ]; for (
Matrizes - Leitura
int
i,
j, matéria [ 4 ] [ 40 ];
for ( i = 0 ; i < 4; i++ ) {
printf (“entre com as notas da matéria %d”, i+1);
for ( j = 0; j < 40; j++) {
printf (“entre com a nota do aluno %d”, j+1);
scanf (“%d”, &materia [ i ] [ j ]);
}
}
Introdução Linguagem C
Variável String matriz do tipo char terminada pelo caractere null ‘\0’ cada caractere de um
Variável String
matriz do tipo char terminada pelo caractere null ‘\0’
cada caractere de um string pode ser acessado
individualmente
vetor de tamanho n → string de tamanho ( n-1 )
Ex:
char string[10] = “exemplo” ;
char string[10] = { “exemplo” };
char string[10] = { ‘e’, ‘x’, ‘e’, ‘m’, ‘p’, ‘l’, ‘o’, ‘\0’ };
printf ( “%s”, string );
printf ( “%c”, string [ 0 ] );
Introdução Linguagem C
Lendo Strings scanf : lê o string até que um branco seja encontrado Ex: Saída:
Lendo Strings
scanf : lê o string até que um branco seja
encontrado
Ex:
Saída:
main ( )
{
Digite seu nome: Jose Maria
Bom dia Jose
char nome[40];
printf ( “Digite seu nome: “ );
scanf ( “%s”, &nome[ 0 ] );
//scanf ( “%s”, nome );
printf ( “Bom dia %c”, nome[0] );
}
Introdução Linguagem C
Lendo Strings
Gets
lê caracteres até encontrar ‘\n’
substitui ‘\n’ por ‘\0’
Ex:
main ( )
Saída:
{
Digite seu nome: Jose Maria
Bom dia Jose Maria
char nome[40];
printf ( “Digite seu nome: “ );
gets ( &nome[ 0 ] ); // ou gets(nome);
printf ( “Bom dia %s”, nome );
}
Introdução Linguagem C
Imprimindo Strings printf puts Saída: Ex: main ( ) Digite seu nome: Jose Maria Bom
Imprimindo Strings
printf
puts
Saída:
Ex:
main ( )
Digite seu nome: Jose Maria
Bom dia
{
Jose Maria
char nome[40];
printf ( “Digite seu nome: “ );
gets ( &nome[ 0 ] );
puts ( “Bom dia ” );
puts ( nome );
}
Introdução Linguagem C
Funções de manipulação de
strings
Strlen
retorna o tamanho do string - não conta ‘\0’
Ex:
Saída:
main ( )
{
Digite seu nome: Jose Maria
Tamanho = 10
char nome[40];
printf ( “Digite seu nome: “ );
gets ( &nome[ 0 ] );
printf (“Tamanho = %d”, strlen(&nome[ 0 ]) );
}
Introdução Linguagem C
Funções de manipulação de strings strcat ( str1, str2 ) concatena str2 ao final de
Funções de manipulação de
strings
strcat ( str1, str2 )
concatena str2 ao final de str1
Ex:
Saída:
main ( )
Maria
{
JoseMaria
char
nome[40] = “Jose”,
Cuidado:
char sobrenome[30] = “Maria”;
dado
str1 + str2
tem que caber em
strcat(nome, sobrenome);
puts (sobrenome);
puts (nome);
str1
}
Introdução Linguagem C
Funções de manipulação de
strings
strcmp ( str1, str2 )
compara dois strings retornando:
– negativo se str1 < str2
– 0 se
str1 = str2
– positivo se str1 > str2
a comparação é feita por ordem
alfabética
Introdução Linguagem C

#include <stdio.h> main ( )

{

 

char nome[40] = “Jose”; char sobrenome[30] = “Maria”;

if ( strcmp ( nome, sobrenome ) !=0) puts ( “os strings são diferentes” ); else puts ( “os strings são identicos” );

}

Conversões podemos também converter strings e números (inteiros/fracionários) conforme desejarmos: Exemplo:
Conversões
podemos também converter strings e números
(inteiros/fracionários) conforme desejarmos:
Exemplo: Conversão de String em Número Inteiro
#include <stdio.h>
main()
{
int i;
char s[10];
printf(“Digite uma sequencia de numeros com letras: “);
gets(s);
i = atoi(s);
printf(“Numero: %d “,i);
}
Introdução Linguagem C
Ponteiros Ponteiros, como o próprio nome diz, é um tipo de variável que aponta para
Ponteiros
Ponteiros, como o próprio nome diz, é
um tipo de variável que aponta para
outra (de um tipo qualquer). Na
verdade um ponteiro guarda o
endereço de memória (local onde se
encontra na memória) de uma variável.
Introdução Linguagem C
Ponteiros
int teste=20;
int teste=20;
int *p;
int *p;
p=&teste;
printf("%d\n",*p);
p=&teste;
p irá armazenar o endereço de memória da variável teste.
Ou seja, p não armazena o valor 20, mas sim o endereço de
teste que, este sim, armazena o valor 20.
como chegar ao valor 20 usando a variável p?
Introdução Linguagem C
Ponteiros Outro exemplo: char algo[5] = { 5, 4, 3, 2, 1 }; char *c;
Ponteiros
Outro exemplo:
char algo[5] = { 5, 4, 3, 2, 1 };
char *c;
c=&algo[2];
Colocamos em c o endereço do terceiro elemento de algo:
c[0]=3, c[1]=2 e c[2]=1.
Se tivéssemos feito c=&algo[3], então:
c[0]=2 e c[1]=1.
Introdução Linguagem C

int vet_notas[50]; int *pont_notas;

pont_notas=vet_notas;

Ponteiros

Para imprimir a primeira e a décima nota de nosso vetor, temos duas opções:

print ("A primeira nota é: %d", vet_notas[0]); print ("A primeira nota é: %d", *pont_notas); print ("A décima nota é: %d", vet_notas[9]); print ("A décima nota é: %d", *(pont_notas+9));

Equivalência entre vetores e ponteiros vet_notas[0]==*(pont_notas); vet_notas[1]==*(pont_notas+1);
Equivalência entre vetores e ponteiros
vet_notas[0]==*(pont_notas);
vet_notas[1]==*(pont_notas+1);
vet_notas[2]==*(pont_notas+2);
Introdução Linguagem C
Malloc e Free
Alocação dinâmica
#include <stdio.h>
main()
{
int *notas, numero, i;
Introdução Linguagem C

Printf(“Entre com o número total de alunos\n’”);

scanf(“%d”, &numero);

notas=(int *)malloc(numero * sizeof(int));

for (i=0; i,numero; i++) {

printf(“Digite a nota do aluno %d”, i+1);

scanf(“%d”, &notas[i]);

printf(“\n A nota do aluno %d é :%d: , i+1, notas[i]);

}

free(notas);

Estruturas Uma estrutura é um conjunto de variáveis dentro de um mesmo nome. Em geral,
Estruturas
Uma estrutura é um conjunto de variáveis
dentro de um mesmo nome. Em geral, uma
variável é de um tipo específico, por exemplo,
temos uma variável do tipo inteira e estamos
fechados a nos referenciar aquele nome que
lhe foi dado sempre por um número do tipo
inteiro, logicamente. Já as estruturas, dentro
de um mesmo nome podemos nos referenciar
a uma gama de variáveis pré-definidas.
Introdução Linguagem C
Estruturas struct molde_conta { char nome[50]; int telefone; float saldo ; }; Definido o molde,
Estruturas
struct molde_conta
{
char nome[50];
int telefone;
float saldo ;
};
Definido o molde, devemos agora declarar a variável
que utilizará desse molde:
struct molde_conta conta;
Introdução Linguagem C
Estruturas struct molde_conta { char nome[50]; int telefone; float saldo; } conta1, conta2; equivalente a:
Estruturas
struct molde_conta
{
char nome[50];
int telefone;
float saldo;
} conta1, conta2;
equivalente a:
struct molde_conta conta1, conta2;
Introdução Linguagem C
Estrutras - Utilização do tipo Podemos fazer atribuição de structs, do tipo conta2 = conta,
Estrutras - Utilização do tipo
Podemos fazer atribuição de structs, do tipo
conta2 = conta, e os valores serão idênticos.
Para contar o número de caracteres de nome
dentro da estrutura conta, podemos fazer:
for (i=0,conta.nome[i],++i) ;
printf ("o nome tem -> %d letras \n",i);
Introdução Linguagem C
Vetores de Estruturas struct molde_conta conta[100]; conta[1].telefone=2212324; conta[1].nome=“joao carlos”;
Vetores de Estruturas
struct molde_conta conta[100];
conta[1].telefone=2212324;
conta[1].nome=“joao carlos”;
conta[1].saldo=1245.89;
conta[5].telefone=2212888;
conta[5].nome=“Maria dos Santos”;
conta[5].saldo=6908.79;
Introdução Linguagem C
Arquivos - feopen( ) A função “fopen” tem duas finalidades: - abrir uma fila de
Arquivos - feopen( )
A função “fopen” tem duas finalidades:
- abrir uma fila de bytes
- ligar um arquivo em disco àquela fila
FILE *fopen(char *NomeArquivo, char *modo);
FILE *arquivo;
if ((arquivo = fopen(“teste”,”w”)) == NULL) {
puts(“Não posso abrir o Arquivo teste.\n”);
exit(1); /* força o término da execução da rotina */
}
Introdução Linguagem C

Modo

Significado

“r”

Abre Arquivo de Texto para Leitura

“w”

Cria Arquivo de Texto para Gravação

“a”

Anexa a um Arquivo de Texto

“rb”

Abre Arquivo Binário para Leitura

“wb”

Cria Arquivo Binário para Gravação

“ab”

Anexa a um Arquivo Binário

“r+”

Abre Arquivo de Texto para Leitura/Gravação

“w+”

Cria Arquivo de Texto para Leitura/Gravação

“a+”

Abre ou Cria Arquivo de Texto para Leitura/Gravação

“r+b”

Abre Arquivo Binário para Leitura/Gravação

“w+b”

Cria Arquivo Binário para Leitura/Gravação

“a+b”

Abre ou Cria Arquivo Binário para Leitura/Gravação

Arquivos - putc ( ) Grava caracteres em fila previamente abertos int putc(int ch, FILE
Arquivos - putc ( )
Grava caracteres em fila previamente abertos
int putc(int ch, FILE *fp);
ch é o caracter a ser gravado
fp é o ponteiro devolvido por fopen
putc(‘a’, arquivo);
Introdução Linguagem C
Arquivos - getc ( )
Ler caracteres em uma fila aberta
int getc(FILE *arquivo);
Exemplo:
ch = getc(arquivo);
while (ch != EOF)
ch = getc(arquivo);
Introdução Linguagem C
Arquivos - fclose ( ) Fechar as filas abertas. Caso o programa seja encerrado sem
Arquivos - fclose ( )
Fechar as filas abertas. Caso o programa
seja encerrado sem que as filas sejam
fechadas, dados gravados nos buffers
podem ser perdidos.
int fclose(FILE *fp);
fclose(arquivo);
Introdução Linguagem C

main()

{

FILE *arq; char ch; if ((arq=fopen(“teste.dat”,”w”)) == NULL) {

printf(“Arquivo não pode ser criado\n”);

exit(1);

}

do{

ch=getchar(); putc(ch,arq); }while (ch!=0); fclose(arq);

}

Arquivos - ferror ( ) Determina se a operação de arquivo produziu um erro. Sua
Arquivos - ferror ( )
Determina
se
a
operação
de
arquivo
produziu um erro. Sua forma geral será:
int ferror(FILE *fp);
Introdução Linguagem C
Arquivos - rewind( ) Reinicia o arquivo, equivale ao Reset do Pascal, ou seja apenas
Arquivos - rewind( )
Reinicia o arquivo, equivale ao Reset do
Pascal, ou seja apenas movimenta o
ponteiro do arquivo para seu início.
Introdução Linguagem C
Arquivos - fwrite ( ) fread ( ) Permitem que leiamos/gravemos blocos de dados, sua
Arquivos - fwrite ( ) fread ( )
Permitem que leiamos/gravemos blocos de
dados, sua forma geral é a seguinte:
int fread(void *buffer, int num_bytes, int cont,
FILE *fp);
int fwrite(void *buffer, int num_bytes, int cont,
FILE *fp);
Introdução Linguagem C

Arquivos - fwrite ( )

main()

{

FILE *fp; float f = 12.23; if ((fp=fopen(“teste”,”wb”)) == NULL) { printf(“Arquivo não pode ser criado\n”);

exit(1);

}

fwrite(&f,sizeof(float(),1,fp);

fclose(fp);

}

Arquivos - fseek ( ) Entrada e saída com acesso aleatório int fseek(FILE *fp, long
Arquivos - fseek ( )
Entrada e saída com acesso aleatório
int fseek(FILE *fp, long int num_bytes,
int origem);
fp- é o ponteiro de arquivo devolvido por fopen().
num_bytes - é um inteiro longo que representa o
número de bytes desde a origem até chegar a
posição corrente.
OBS: Este comando é normalmente utilizado em
arquivos binários.
Introdução Linguagem C

Exemplo : Leitura de um caracter em um arquivo binário.

main()

{

FILE *fp;

if ((fp=fopen(“teste”,”rb”)) == NULL) { printf(“Arquivo não pode ser aberto\n”);

exit(1);

}

fseek(fp,234L,0);

um inteiro longo */ return getc(fp); /* lê o caracter 234 */

/* L força que seja

}

carga()

{

FILE *fp;

int i; if ((fp=fopen(“LISTA.DAT”,”rb”)) == NULL) { puts(“Falha na Abertura do Arquivo!”); return;

}

inicia_matriz(); for (i=0; i < 100; i++)

Exemplo de montagem de um pequeno cadastro de nomes, endereços e salários de funcionários em arquivo.

if (fread(&matriz[i], sizeof(struct registro), 1, fp) != 1)

{

if (feof(fp)) { fclose(fp); return;

}

else { puts(“Erro de Leitura! “); fclose(fp);

}

}

}

return;

salvar()

{

FILE *fp; int i; if ((fp=fopen(“LISTA.DAT”,”wb”))==NULL) { puts(“Falhou Abertura! “); return;

}

for (i=0;i<100;i++) if (*matriz[i].nome) if(fwrite(&matriz[i], sizeof(struct registro), 1,fp) != 1) puts(“Falha na Gravacao! “); fclose(fp);

}

Vamos supor que desejamos criar um programa que escreva num arquivo cujo nome será fornecido na chamada do programa

(Exemplificando: KTOD TESTE <Enter>).

Gostaríamos que o DOS criasse o arquivo TESTE guardando o conteúdo digitado durante a execução do programa.

main(argv,argc)

onde

argc - tem o número de argumentos contidos nas linha de comando (necessariamente maior ou igual a um, pois o próprio programa já é considerado um argumento pelo D.O.S.).

argv é um ponteiro que acomodará os caracteres digitados.

Exemplo 1: Programa KTOD, que escreve caracteres num arquivo criado/aberto via D.O.S.

#include “stdio.h” main(argc,argv) int argc; char *argv[];

{

FILE *fp; char ch; if (arg != 2) { printf(“Digite o Nome do Arquivo\n”);

exit(1);

}

if ((fp=fopen(argv[1],”w”)) == NULL) { printf(“Arquivo não pode ser aberto\n”);

exit(1);

}

do { ch = getchar(); putc(ch,fp); } while( ch != ‘$’); fclose(fp);

}

Exemplo 2: Programa DTOV, que apresenta em vídeo os caracteres digitados via KTOD.

#include “stdio.h” main(argc,argv) int argc; char *argv[];

{

FILE *fp; char ch; if (arg != 2) { printf(“Digite o Nome do Arquivo\n”);

exit(1);

}

if ((fp=fopen(argv[1],”r”)) == NULL) { printf(“Arquivo não pode ser aberto\n”);

exit(1);

}

ch = getc(fp);

do {

putchar(ch); ch=getc(fp); } while( ch != ‘$’); fclose(fp);

}

Exemplo 3: Programa para copiar Arquivos.

#include “stdio.h” main(argc,argv) int argc; char *argv[];

{

FILE *in, *out; char ch; if (arg != 3) { printf(“Digite o Nome dos Arquivos\n”);

exit(1);

}

if ((in=fopen(argv[1],”rb”)) == NULL) {

printf(“Arquivo origem não existe\n”);

exit(1);

}

if ((out=fopen(argv[2],”wb”)) == NULL) {

printf(“Arquivo destino não existe\n”);

exit(1);

}

while (! feof(in)) putc(getc(in),out); /* esta é a cópia propriamente dita */

fclose(in);

fclose(out);

}