A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução a Linguagem de Programação C

Apresentações semelhantes


Apresentação em tema: "Introdução a Linguagem de Programação C"— Transcrição da apresentação:

1 Introdução a Linguagem de Programação C

2 Introdução Linguagem C
Resumo 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

3 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

4 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

5 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

6 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

7 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

8 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

9 Introdução Linguagem C
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

10 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

11 Estrutura de um programa C
/* Primeiro Programa em C */ #include <stdio.h> main() { printf(“Meu primeiro programa em C\n”); } Introdução Linguagem C

12 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

13 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

14 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

15 Introdução Linguagem C
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

16 Introdução Linguagem C
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

17 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,...,nomen EX: char nome; int idade, num; Introdução Linguagem C

18 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 a 127 int a float e-38 a 3.4e+38 double e a 1.7e+308 Introdução Linguagem C

19 Diferentes tipos de inteiros
Long ou Long int (4 bytes) Unsigned Char (0 a 255) Unsigned int (0 a ) obs: int tem sempre o tamanho da palavra da máquina Introdução Linguagem C

20 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

21 Processamento de dados
Comandos básicos Saída de Dados Entrada de Dados Processamento de dados Instruções de E/S Introdução Linguagem C

22 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

23 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

24 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

25 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

26 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

27 Operador de Endereço & Quando usamos & precedendo uma variável estamos falando do endereço desta variável na memória Ex: Main ( ) { int num; num = 2; printf (“valor = %d, endereço = %Iu”, num,&num); } Saída: valor = 2, endereço = 1230 Varia conforme memória da máquina Introdução Linguagem C

28 Introdução Linguagem C
Caracteres Especiais \n nova linha \r enter \t tabulação (tab) \b retrocesso \” aspas \\ barra Introdução Linguagem C

29 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 350 os alunos são 350 Introdução Linguagem C

30 Formatando as saídas - printf
#include <stdio.h> main ( ) { printf (“ %3.1f \n”, ); printf (“ %10.3f \n”, ); } Saída: Introdução Linguagem C

31 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

32 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

33 Operadores Aritméticos
Ação + Adição * Multiplicação / Divisão % Resto da divisão inteira - Subtração (unário) -- Decremento ++ Incremento Introdução Linguagem C

34 Operadores Relacionais e Lógicos
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

35 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

36 Introdução Linguagem C
Operadores - Exemplo #include <stdio.h> main ( ) { int verdadeiro, falso; verdadeiro = (15 < 20); falso = (15 == 20); printf(“Verd.= %d,Falso= %d”, verdadeiro, falso); } Saída: Verd.=1 Falso = 0 Introdução Linguagem C

37 Introdução Linguagem C
Comparações e Testes Observemos antes de mais nada que ++x é diferente de x++! Se x = 10; y = ++x; /* x=x+1; y=x; */ então x = 11 e y = 11 porém Se x = 10; y = x++; /* y=x; x=x+1 */ então x = 11 e y = 10 Introdução Linguagem C

38 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++; Quais são as saídas deste programa ? Introdução Linguagem C

39 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

40 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

41 Introdução Linguagem C
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

42 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

43 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

44 Introdução Linguagem C
Exercícios 2) 3) Introdução Linguagem C

45 Introdução Linguagem C
Estruturas de Decisão Permitir testes para decidir ações alternativas: if if - else switch (?:) Operador Condicional Introdução Linguagem C

46 Introdução Linguagem C
Comando if if (condição) { instrução1; intrução2; } if (condição) instrução; #include <stdio.h> main ( ) { char ch; ch = getchar ( ); if (ch == ‘p’) printf (“você pressionou a tecla p”); } #include <stdio.h> main ( ) { if (getchar()) == ‘p’ ) { printf (“ você digitou p”); printf (“ pressione outra tecla ”); getchar( ); } Introdução Linguagem C

47 Introdução Linguagem C
if aninhados Se um comando if está dentro do outro if, dizemos que o if interno está aninhado. #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”); } #include <stdio.h> main ( ) { char ch; printf (“ digite uma letra entre A e Z”); ch = getchar ( ); if ((ch >= ‘A’) && (ch < = ‘Z’)) printf (“ você acertou”); } Introdução Linguagem C

48 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

49 Introdução Linguagem C
Comando if-else if (condição) instrução; else #include <stdio.h> main ( ) { if (getchar ( ) == ‘p’) printf (“ você digitou p”); else printf (“ você não digitou p”); } Introdução Linguagem C

50 Introdução Linguagem C
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

51 Comando if-else aninhados
#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”); } if (condição1) instrução else if (condição2) else if (condição3)... Introdução Linguagem C

52 Como o computador decide de qual if o else pertence?
else é sempre associado ao if mais interno quando z = b será executado? Ex2: if (n > 0) { if (a > b) z = a; } else z = b; EX1: if (n > 0) if (a > b){ z = a; calculafatorial(z); } else z = b; Ex1: Quando n > 0 e a < b Ex2: Quando n < 0 Introdução Linguagem C

53 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”); printf(“Jovem”); } Introdução Linguagem C

54 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); if (b > c) printf(“\nO Maior é %d”,b); } 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); printf(“\nO Maior é %d”,d); }

55 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

56 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

57 Introdução Linguagem C
Exercícios 4) 5) 6) Introdução Linguagem C

58 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

59 Comando Switch OBS: switch <variável> {
case <constante 1> : <comandos>; [break;] case <constante 2> : case <constante 3> : [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.

60 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”, &num1, &op, &num2); switch (op) { case ‘+’: printf (“ = %f”, num 1 + num 2); break: case ‘-’: printf (“ = %f”, num 1 - num 2); break; default: printf (“ operador inválido”); }

61 Introdução Linguagem C
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

62 Estruturas de Repetição
#include <stdio.h> main ( ) { printf (“1”); printf (“2”); : : : printf (“10”); } saída: Como imprimir os os números a partir de 1? Introdução Linguagem C

63 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: Introdução Linguagem C

64 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

65 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; for ( número = 2; número < 10; número += 2 ) printf (“ %d”, número); } Saída

66 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.

67 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);

68 Comando for – loop infinito
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

69 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

70 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!”);

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

72 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. Exemplo: Término determinado pelo usuário. #include <stdio.h> main() { int num; do { scanf(“%d”,&num); } while (num < 100); } do { <comandos>; } while <condição>;

73 / * 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’);

74 Exercícios

75 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

76 Procedimentos “Funções” que não retornam valores Tipo: void
___________usando funcoes___________ #include <stdio.h>  void desenha(); void desenha( ) { int i; for (i = 0; i < = 10; i++) printf (“-”); } main ( ) desenha ( ); printf (“ usando funções”); “Funções” que não retornam valores Tipo: void

77 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) );

78 Introdução Linguagem C
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

79 Variáveis Locais void desenha ( ) void desenha ( ) { { int i, j;
} main ( ) int a;   desenha(); a = i; ¬ erro void desenha ( ) { int i, j; } void calcula ( ) i, j em desenha são variáveis diferentes de i, j em calcula.

80 Introdução Linguagem C
Variáveis Globais Variável que é declarada externamente podendo ser acessada por qualquer função void desenha ( ) { int j; i = 0; }  void calcula ( ) int m; i = 5; #include <stdio.h> main ( ) { int i;   desenha ( ); calcula ( ); } Introdução Linguagem C

81 Introdução Linguagem C
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 letra; printf (“ digite uma letra em minúsculo”); letra = minúsculo ( ); if (letra == ‘a’) printf (“ok”); } char minúsculo ( ) { char ch; scanf(“%c”, ch); if ( (ch >= ‘A’) && (ch <= ‘Z’)) return (ch + ‘a’ - ‘A’); else return (ch); } Introdução Linguagem C

82 Introdução Linguagem C
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

83 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

84 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

85 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 );

86 Passando vários argumentos
Ex 2: float potência (float base, int expoente) { int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base return resultado; } Ex 1: float área_retângulo (float largura, float altura) { return (largura * altura); } Introdução Linguagem C

87 Usando várias funções: calcular a seguinte seqüência
S(x, n) = x/1! + x2/2! + x3/3! xn/ 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)); }

88 float serie (float x, int n)
{ int i; float resultado = 0;   for ( i = 1; i <= n; i++) resultado += potência( x, i ) / fat( i ); return resultado; } 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; }

89 int fat (int n) { int i, resultado = 1; for ( i = 1; i <= n; i ++) resultado *= i; return resultado; }

90 Introdução Linguagem C
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

91 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); printf (“\n Nota do aluno %d = ”, i+1); printf (“%f \n”, notas[ i ]);

92 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

93 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

94 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

95 Vetores – Obs importantes
#include <stdio.h> #define TAMANHO 100 main( ) { int quantidade, media = 0; float notas [ TAMANHO ];   // quantidade deve ser £ TAMANHO 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 ]); }   : : :   for ( i = 0; i < quantidade; i++) media += notas [ i ]; Vetores – Obs importantes

96 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

97 Introdução Linguagem C
int maximum( int values[5] ) { int max_value, i; max_value = values[0]; for( i = 0; i < 5; ++i ) if( values[i] > max_value ) max_value = values[i]; return max_value; } Saída: Entre com 5 numeros: Valor Maximo: 121 Introdução Linguagem C

98 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

99 Introdução Linguagem C
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

100 Introdução Linguagem C
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

101 Introdução Linguagem C
Lendo Strings scanf : lê o string até que um branco seja encontrado Ex: main ( ) { char nome[40]; printf ( “Digite seu nome: “ ); scanf ( “%s”, &nome[ 0 ] ); //scanf ( “%s”, nome ); printf ( “Bom dia %c”, nome[0] ); } Saída: Digite seu nome: Jose Maria Bom dia Jose Introdução Linguagem C

102 Introdução Linguagem C
Lendo Strings Gets lê caracteres até encontrar ‘\n’ substitui ‘\n’ por ‘\0’ Ex: main ( ) { char nome[40]; printf ( “Digite seu nome: “ ); gets ( &nome[ 0 ] ); // ou gets(nome); printf ( “Bom dia %s”, nome ); } Saída: Digite seu nome: Jose Maria Bom dia Jose Maria Introdução Linguagem C

103 Introdução Linguagem C
Imprimindo Strings printf puts Saída: Digite seu nome: Jose Maria Bom dia Jose Maria Ex: main ( ) { char nome[40]; printf ( “Digite seu nome: “ ); gets ( &nome[ 0 ] ); puts ( “Bom dia ” ); puts ( nome ); } Introdução Linguagem C

104 Funções de manipulação de strings
Strlen retorna o tamanho do string - não conta ‘\0’ Ex: main ( ) { char nome[40]; printf ( “Digite seu nome: “ ); gets ( &nome[ 0 ] ); printf (“Tamanho = %d”, strlen(&nome[ 0 ]) ); } Saída: Digite seu nome: Jose Maria Tamanho = 10 Introdução Linguagem C

105 Funções de manipulação de strings
strcat ( str1, str2 ) concatena str2 ao final de str1 Ex: main ( ) { char nome[40] = “Jose”, char sobrenome[30] = “Maria”; strcat(nome, sobrenome); puts (sobrenome); puts (nome); } Saída: Maria JoseMaria Cuidado: dado str1 + str2 tem que caber em str1 Introdução Linguagem C

106 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

107 #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” ); }

108 Introdução Linguagem C
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

109 Introdução Linguagem C
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

110 Introdução Linguagem C
Ponteiros int teste=20; int *p; p=&teste; printf("%d\n",*p); int teste=20; int *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

111 Introdução Linguagem 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

112 Ponteiros print ("A primeira nota é: %d", vet_notas[0]);
int vet_notas[50]; int *pont_notas; pont_notas=vet_notas; 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));

113 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

114 Introdução Linguagem C
Malloc e Free Alocação dinâmica #include <stdio.h> main() { int *notas, numero, i; Introdução Linguagem C

115 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);

116 Introdução Linguagem C
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

117 Introdução Linguagem C
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

118 Introdução Linguagem C
Estruturas struct molde_conta { char nome[50]; int telefone; float saldo; } conta1, conta2; equivalente a: struct molde_conta conta1, conta2; Introdução Linguagem C

119 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

120 Introdução Linguagem C
Vetores de Estruturas struct molde_conta conta[100]; conta[1].telefone= ; conta[1].nome=“joao carlos”; conta[1].saldo= ; conta[5].telefone= ; conta[5].nome=“Maria dos Santos”; conta[5].saldo= ; Introdução Linguagem C

121 Introdução Linguagem C
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

122 “r” Abre Arquivo de Texto para Leitura
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

123 Introdução Linguagem C
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

124 Introdução Linguagem C
Arquivos - getc ( ) Ler caracteres em uma fila aberta int getc(FILE *arquivo); Exemplo: ch = getc(arquivo); while (ch != EOF) Introdução Linguagem C

125 Introdução Linguagem C
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

126 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);

127 Introdução Linguagem C
Arquivos - ferror ( ) Determina se a operação de arquivo produziu um erro. Sua forma geral será: int ferror(FILE *fp); Introdução Linguagem C

128 Introdução Linguagem C
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

129 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, Introdução Linguagem C

130 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);

131 Introdução Linguagem C
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

132 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); /* L força que seja um inteiro longo */ return getc(fp); /* lê o caracter 234 */

133 Exemplo de montagem de um pequeno
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++) if (fread(&matriz[i], sizeof(struct registro), 1, fp) != 1) { if (feof(fp)) { fclose(fp); else { puts(“Erro de Leitura! “); Exemplo de montagem de um pequeno cadastro de nomes, endereços e salários de funcionários em arquivo.

134 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);

135 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.

136 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.

137 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); }

138 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);

139 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”); ch = getc(fp);

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

141 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”); if ((out=fopen(argv[2],”wb”)) == NULL) { printf(“Arquivo destino não existe\n”); while (! feof(in)) putc(getc(in),out); /* esta é a cópia propriamente dita */ fclose(in); fclose(out);


Carregar ppt "Introdução a Linguagem de Programação C"

Apresentações semelhantes


Anúncios Google