200 likes | 368 Views
PROGRAMAÇÃO ou LINGUAGEM C?. Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo. TÓPICOS. 1. Introdução à Linguagem C 2. Operadores e Expressões 3. Estruturas de Controle 4. Entrada e Saída 5. Matrizes e strings 6. Funções
E N D
PROGRAMAÇÃO ou LINGUAGEM C? Centro Federal de Educação Tecnológica da ParaíbaCoordenação de InformáticaProfessor: Lafayette B. Melo
TÓPICOS 1. Introdução à Linguagem C 2. Operadores e Expressões 3. Estruturas de Controle 4. Entrada e Saída 5. Matrizes e strings 6. Funções 7. Ponteiros 8. Estruturas e Uniões 9. Arquivos Texto 10. Arquivos Binários
Funções em detalhes • Funções são blocos de construção nos quais ocorrem todas as atividades dos programas • As funções em maiores detalhes possuem formas de modificar argumentos, regras de escopo, tempo de vida de variáveis, recursividade e especificidades da função main • Sintaxe: especificador_tipo nome_função(lista_parâmetros) declarações de parâmetros { corpo }
Uma função simples main() { linha(); printf("\xDB UM PROGRAMA EM C \xDB\n"); linha(); getche(); } linha() { int j; for(j=1;j<=20;j++) printf("\xDB"); printf("\n"); } • A chamada é encerrada por “;”, mas a declaração não
Variáveis locais: declaradas dentro de uma função ou de um bloco (existem durante a execução desse bloco de código) • Uso de variáveis locais func1() func2() { { int x; int x; x = 10; x = -199; } } • Mais uso de variáveis locais f() { char ch; printf (“continua (s/n)? :”); ch = getche(); if (ch == ‘s’) { char s[80]; printf (“digite nome:”); gets(s); } }
Funções que retornam um valor – são a maioria e têm padrão o inteiro minusculo() { char ch; ch = getche(); if (ch >= 'A' && ch <= 'Z') ch+='a'-'A'; return(ch); } main() { char ch; printf("digite 'a' e depois 'b': "); ch=minusculo(); switch(ch) { case 'a': printf("\n vc pressionou 'a'."); break; case 'b': printf("\n vc pressionou 'b'" ); break; default: printf("\n vc escolheu algo desconhecido."); } }
Comando return: faz com que haja uma saída da função e devolve valores • A função retorna com chave (}) e com return. • Usos: • Devolver valor e retornar para a próxima instrução • Causar uma saída imediata da função • Só retorna um valor a cada chamada Exemplos de uso de return potência(base, exp) int base, exp; { int t; if (exp<0) return; i = 1; for(;exp;exp--) i = base * i; printf (“a resposta é: %d: “,i); }
C usa argumentos e passagem por valores Exemplo passando constante main() { printf (“%d %d %d\n”, abs(0),abs(-3),abs(10)); } abs(x) int x; { return((x < 0?-x:x); } Exemplo passando argumentos main() { int enpontos; while (1) { printf(“(0 para terminar) pontos = “); scanf(“%d”&enpontos); if (!enpontos) break; else bar(enpontos); } bar(pontos) int pontos; { int j; for (j=1;j<=pontos;j++) printf(“\xCD”); printf(“\n”); }
Erro de uso de função swap (x,y) = 100; • Tipos de valores devolvidos: • Valores computacionais - devolve valores com base em uma operação. Ex.: sqrt() e sin() • Valores que indicam sucesso na operação. Ex: fwrite() • Valores não explícitos. Ex.: printf() • Valores podem não ser atribuídos: Exemplo de valores não atribuídos mul (a,b)---------> no main: z = mul(x,y) int a, b; printf(“%d”,mul(x,y)); { mul(x,y) return a*b; } • Regras de escopo: em c cada função é um bloco de código discreto. As variáveis podem ser locais, globais e parâmetros formais
Parâmetros formais: variáveis que assumem valores dos argumentos Exemplo de uso de parâmetros formais esta_em(s,c)-------> alternativo esta_em(char*s, char c) char *s; char c; { while (*s) if (*s == c) return 1; else s++; return 0; } • Variáveis globais: conhecidas em todo o programa e declaradas fora de qualquer função mesmo que não seja antes do main.
Variáveis globais int cont; main() { cont = 100; func1(); } func1() { int temp; temp = cont; func2(); printf(“%d”,cont); } func2() { int cont; for (cont=1;cont<10;cont++) printf(“.”); }
Razões de se evitar as variáveis globais: • ocupam espaço de memória • pouca generalização • programação de erros • alteração acidental • Vantagem das variáveis globais: uso dos mesmos dados em várias funções no programa Ex. geral Ex. local mul(x,y) int x, y; int x, y; mul() { { return(x*y); return(x*y); } }
Argumentos de funções: parâmetros formais dos mesmos tipos dos argumentos, podem ser feitas atribuições aos parâmetros formais ou pode ser usada dentro de uma função, são usadas como outra variável local • chamada por valor e por referência - em c é feita por valor • chamada por referência - é simulada Exemplos main() troca(x,y){ { int t = 10; int *x, *y; printf (“%d %d”,sqr(t),t); temp = *x; } *x = *y; sqr(x) *y = temp; int x; } { chamada: x = x*x; troca(&x,&y) return (x); }
chamando funções com matrizes - 3 formas: • declarando o ponteiro como matriz Exemplo de funções com matrizes main() { int t[10], I; for(I=0;I<10;++I) t[I]=I; mostre(t); } mostre(num) int num[10]; { int I; for (I=0;I<10;I++) printf(“%d “,num[I]); } • especificar o parâmetro como uma matriz sem tamanho Exemplo de matriz sem tamanho mostre() int num[]; { int I; for (I=0;I<10;I++) printf(“%d “,num[I]);}
especificar o parâmetro como um ponteiro Exemplo de matriz com ponteiro mostre() int *num; { int I; for (I=0;I<10;I++) printf(“%d “,num[I]);} • especificar o elemento de uma matriz Exemplo de especificar elemento de uma matriz main() { int t[10], i; for (I=0;I<10;I++) t[I] = I; for (I=0;I<10;I++) mostre(t[I]); } mostre(num) int num; { printf(“%d “,num); }
Argumentos argc e argv: argumentos de linha de comando. Argc e argv são os únicos argumentos aceitos por main. • Argc - número de argumentos (int). No mínimo um. • Argv - ponteiro para uma matriz de ponteiros para caracteres. Cada elemento na matriz aponta para um argumento da linha de comando Exemplo de uso de argc e argv main(argc,argv) int argc; char *argv[]; { if (argc != 2) { printf(“esqueceu o nome\n”); exit(0); } printf(“alo %s”,argv[1]); }
Outro exemplo de uso de argc e argv /* contagem regressiva */ main(argc,argv) int argc; char *argv[]; { int disp, cont; if (argc < 2) { printf(“faltou comprimento. Tente novamente.\n”); exit(0); } if (argc == 3 && !strcmp(argv[2],”display”)) disp = 1; else disp = 0; for(cont=atoi(argv[1]);cont;--cont) if (disp) printf (“%d “,cont); printf(“%c”,7); }
Para se ter acesso a um caractere individual em uma das strings de comando acrescenta-se um segundo índice a argv. Exemplo caracteres individuais da linha de comando main(argc,argv) { int argc; char *argv[]; { int t, I; for (t=0;t<argc;++t) { I=0; while (argv[t][I]) { printf (“%c”,argv[t][I]); ++I; } printf(“ “); } }
Funções que devolvem não inteiros - quando não é o valor default é necessário duas etapas: • 1) dar à função um especificador de tipo explicito; • 2) identificar o tipo da função antes de chamá-la pela primeira vez Exemplo funções não-inteiras float soma(); main() { float primeiro, segundo; primeiro = 123.13; segundo = 99.09; printf(“%f”,soma(primeiro,segundo)); } float soma(a,b) float a,b; { return a+b; }
Funções void - padrão do unix (nenhum valor) • Protótipos - funções que se pode declarar o número e o tipo de argumentos - para grandes programas ou quando muitos programadores trabalham em um projeto Exemplo protótipo float func(int, float) /* prototipo */ main() { int x, y; x = 10; y =10; func(x,y); /* não coincide tipos */ } float func(x,y) int x; float y; { printf(“%f”,y/(float)x); }