LINGUAGEM DE PROGRAMAÇÃO I “C” Prof. : Marcelo Mendes Portal do aluno MRM Sistemas http://www.mrmsistemas.com.br/men des Linguagem C 1 CARGA HORÁRIA 80 horas Período: 04/03/2015 a 30/03/2015 Linguagem C 2 AVALIAÇÕES 11/03/2015 19/03/2015 27/03/2015 Linguagem C 3 Bibliografia • Schildt, H., C Completo e Total, Editora Makron Books do Brasil Editora Ltda, 1997, 827p (livro texto). • Evaristo. J., Aprendendo a programar: programando em C, Book Express,2001, 205p • Mizrahi, V. V., Treinamento em Linguagem C, Curso Completo, Módulos 1 (241p) e 2 (273p) , Makron Books do Brasil Editora Ltda,1990 Linguagem C 4 Software Dev-C++ Linguagem C 5 LINGUAGEM “C” 1 - INTRODUÇÃO Linguagem C 6 Histórico · Linguagem C foi inventada e implementada por Brian W. Kernighan Dennis Ritchie em um DEC-PDP 11 sobre o S.O. Unix na década de 1970; · Predecessor Linguagem B, de Ken Thompson, que tinha forte influencia da linguagem BCPL, de Martin Richards; · Inicialmente C era fornecida junto com o S.O. Unix, versão 5; 11/5/2015 Linguagem C 7 Histórico • Com os microcomputadores apareceram grande número de implementações de C o que gerava discrepâncias; • Em 1983 o ANSI (American National Standards Institute) estabeleceu um padrão; 11/5/2015 Linguagem C 8 Características Básicas • Linguagem de Nível Médio, pois combina elementos de linguagens de alto nível (Basic, Pascal) com a funcionalidade da linguagem assembler (instruções de máquinas) Permite manipulação de bits, bytes e endereços; • Linguagem Portável (Portabilidade); 11/5/2015 Linguagem C 9 Características Básicas • As primeiras implementações de C não consistiam parâmetros e argumentos, já o padrão ANSI introduziu o conceito de protótipos de funções; • Possui 32 palavras chaves (27 originais de seus criadores e 5 do comitê ANSI) (Obs.: Basic possui mais de 100); • C é estruturada, apesar de não permitir a criação de funções dentro de funções; 11/5/2015 Linguagem C 10 Características Básicas • Principal componente estrutural de C é a função (blocos de construção); • Tem o conceito de bloco de código ou bloco de instruções, que é um grupo de comandos de programa conectado logicamente e tratado como uma unidade; if (a < b) { printf(“valor de A é menor que B”); scanf (“%d”,&numero); } 11/5/2015 Linguagem C 11 Características Básicas • C é uma linguagem para programadores, dá ao programador o que ele quer: poucas restrições, poucas reclamações, estruturas de blocos,funções isoladas e um conjunto de palavras chaves ; • Inicialmente C foi usada para S.O, compiladores, interpretadores, planilhas, SGBD, hoje é usada na construção de sistemas comerciais, sistemas de controle, etc. (portabilidade, código compacto e rápido); • Atualmente em grande crescimento devido ascensão do S.O Linux; 11/5/2015 Linguagem C 12 Compiladores e Interpretadores • Qualquer linguagem de programação pode ser compilada ou interpretada; • Compiladores e interpretadores são programas que operam sobre o código-fonte; • Interpretador lê o código-fonte linha por linha e executa-a; • Compilador lê todo o código-fonte e converte-o para código-objeto; 11/5/2015 Linguagem C 13 Compiladores e Interpretadores • Código-objeto não é executável, precisa ser utilizado um linkeditor para torná-lo executável; • Programas C são criados por intermédio da linkedição de um ou mais códigos-objetos com uma ou mais bibliotecas; • Uma biblioteca é um conjunto de códigoslinkeditáveis criados, fornecidos com os compiladores ou adquiridos; 11/5/2015 Linguagem C 14 Compiladores e Interpretadores Ciclo de desenvolvimento Início Editar código fonte Erros de linkedição? Sim Não Sim Compilar Executar programa Erros de compilação? Não Erros de tempo de Execução? Sim Não Linkeditar Fim 11/5/2015 Linguagem C 15 Estrutura de um Programa C Declarações globais tipo de retorno main (lista de parâmetros) { comandos; } tipo de retorno função1 (lista de parâmetros) { comandos; } .................. tipo de retorno função2 (lista de parâmetros) { comandos; } 11/5/2015 Linguagem C 16 Ponto e vírgula, Chaves e Comentários • Ponto e vírgula: – Todos os comandos em C terminam obrigatoriamente com “;”. • Chaves (Blocos de Comando) – utilizadas para definir um bloco de comando, que são grupos de comandos relacionados que são tratados como uma unidade e estão logicamente conectados. Um bloco começa com uma { e termina com uma } 11/5/2015 Linguagem C 17 Ponto e vírgula, Chaves e Comentários – Um bloco de comando pode ser colocado em qualquer lugar onde seja possível a inserção de um comando. – Ex.: – – – – – – – – – – – – – 11/5/2015 #include <stdio.h> #include <conio.h> int main() { int total, a,b; printf ("Digite um numero: "); scanf("%d",&a); printf ("Digite outro numero: "); scanf("%d",&b); printf ("Os numeros digitados foram %d %d",a,b); getch(); //segura tela return 0; } Linguagem C 18 Ponto e vírgula, Chaves e Comentários • Comentários: – Começa com o par de caracteres /* e termina com */ . Em C++ e alguns compiladores //; – Tudo é ignorado entre os símbolos de comentários; – Uma palavra chave não pode conter comentários; – Ex.: /* x = x+1 ; printf (“ %d\n”,x); */ soma_total + = valorMensal + /* valor mensal das despesas */ acumuladoAnterior; 11/5/2015 Linguagem C 19 Palavras Chaves auto break case char const * continue default do double else enum * extern float for goto!! if int struct long switch register typedef return union short unsigned signed * void * Sizeof volatile* static while * ANSI 11/5/2015 Linguagem C 20 Mapa de Memória em C Pilha Heap Variáveis Globais Código do Programa 11/5/2015 Linguagem C 21 Mapa de memória em C • Pilha = usada para guardar o endereço de retorno das chamadas de função, argumentos para funções e variáveis locais e estado atual da CPU; • Heap = região de memória livre a ser usada pelo programa via funções de alocação dinâmica (Ex.: listas encadeadas e árvores) 11/5/2015 Linguagem C 22 C e C++ • C++ é uma versão estendida e melhorada de C, projetada para suportar programação orientada a objetos (OOP - Oriented Object Programming); • C++ é um superconjunto de C; • Compiladores C++ também são compiladores C padrão ANSI completo; 11/5/2015 Linguagem C 23 Tipos de Dados • Tipos Básicos de Dados Tipo Tamanho em bits char int float 8 16(depende) 32 Faixa 0 a 255 -32768 a 32767 -3.4E-38 a 3.4E38 seis dígitos de precisão double 64 -1.7E-308 a 1.7E308 dez dígitos de precisão void 11/5/2015 0 Linguagem C sem valor 24 Tipos de Dados • Modificadores de tipo – – – – signed unsigned long short • Ex.: long int 32(bits) faixa ( -2.147.483.648 a 2.147.483.647) • unsigned char 8 (bits) faixa de 0 a 255 11/5/2015 Linguagem C 25 Tipos de Dados • Os modificadores signed, unsigned, short e long podem ser aplicados aos tipos básicos char e int; • long pode ser aplicado a double (long float tem o mesmo significado que double); • Signed com int é redundante; • unsigned com ponto flutuante pode ser permitido mas reduz portabilidade; 11/5/2015 Linguagem C 26 Identificadores • Identificadores = nomes de variáveis, funções e outros objetos definidos pelos usuários (não usar caracteres especiais); • Primeiro caractere deve ser letra ou um underscore e o restante pode ser letras, números ou undersocores; • Correto = xyz, soma_de_tudo • Incorreto = 1x, ju!lio 11/5/2015 Linguagem C 27 Identificadores • Em C, letras maiúsculas e minúsculas são diferentes; • Identificador não pode ser uma palavra chave de C; • Os identificadores devem ser auto explicativos; • Sugestão = somaTotalMensal, indicadorDeRepeticao ou soma_total_mensal e indicador_de_repeticao 11/5/2015 Linguagem C 28 Variáveis • Posição nomeada de memória, que é usada para guardar um valor que pode ser modificado pelo programa. • Todas as variáveis em C devem ser declaradas antes de serem usadas. • Forma geral de declaração: – tipo lista_de_variáveis; – onde tipo = qualquer tipo válido mais qualquer modificador 11/5/2015 Linguagem C 29 Variáveis – Lista_de_variáveis = um ou mais nomes de identificadores separados por vírgulas. – O nome da variável não tem nenhuma relação com o seu tipo. • Ex.: – short int controlador, id_processo_1; – unsigned int total_funcionarios; – double balanco_anual; 11/5/2015 Linguagem C 30 Variáveis • Onde declarar: – interna as funções ou blocos(variáveis locais); – parâmetros de funções (parâmetros formais); – fora de todas as funções (variáveis globais). • Variáveis Locais (auto - redundante): – Só podem ser referenciadas dentro das funções ou blocos onde foram declaradas; – Só existem enquanto o bloco de código onde estão está sendo executado (armazenadas na pilha); 11/5/2015 Linguagem C 31 Variáveis int calculaQuadrado (void) { int valor; scanf(“%d”, &valor); return (valor*valor); } int calculaCubo (void) { int valor; scanf(“%d”, &valor); return (valor*valor*valor); } 11/5/2015 Linguagem C 32 Variáveis – As variáveis locais podem ser declaradas dentro de qualquer bloco e não apenas no início das funções. void CalculaMediaDoisNumeros (void) { int primeiroValor, segundoValor; printf(“entre como primeiro número = “); scanf(“%d”, &primeiroValor); printf (“entre com segundo valor = “); scanf (“%d”,&segundoValor); if (primeiroValor > egundoValor) { int media; /* só é valida dentro do bloco */ media = (primeiroValor+segundoValor)/2; printf (“media = %d \n”, media); } } 11/5/2015 Linguagem C 33 Variáveis • Parâmetros Formais: – São variáveis que recebem os valores dos argumentos das funções e devem ser do mesmo tipo; – Se comportam como qualquer outra variável local dentro da função; int ImprimeQuadrado( int valor) { int numeroPontos; for (numeroPontos=0; numeroPontos <10; numeroPontos++) printf(“.”); printf(“ O quadrado de (%d) é (%d)\n”, valor, valor *valor); return valor*valor;} 11/5/2015 Linguagem C 34 Variáveis • Variáveis Globais – não usar( guardadas em área específica memória): – São reconhecidas dentro do contexto em que estão declaradas; – São declaradas fora das funções; int contador,x; /* declaração de variável global */ int main (void) { contador = 50; x=50; ImprimePontos(); printf (“ Contador (%d) \n”, contador); /* imprime o valor 50 */ getch(); return 0; } int ImprimePontos(void) { for (contador =0; contador < 100; contador ++) printf( “%d”,x+contador); } 11/5/2015 Linguagem C 35 Variáveis • Const – Não podem ser modificadas pelo programa só podem receber um valor inicial; const int contador = 100; – Pode ser usado também para proteger os valores passados como parâmetros de uma função; int Produto (const int a, const int b) { a += b; /* não pode ser efetuada - erro de sintaxe */ return (a*b); } – Muitas funções da biblioteca C padrão usam const em suas declarações de parâmetros, por exemplo : – size_t strlen (const char *str) 11/5/2015 Linguagem C 36 Diretiva include • Instrui ao compilador a ler outro arquivo a ser adicionado aquele que contém a diretiva; • Nome do arquivo deve estar entre aspas (procura-o inicialmente no diretório atual) ou entre símbolos de menor ou igual (procura-o no padrão do compilador - diretórios de include); #include “meuProjeto.hpp” #include <stdio.h> • Recomendação : – Aspas para incluir arquivos do projeto; – Chaves angulares para incluir os arquivos de cabeçalho padrão; 11/5/2015 Linguagem C 37 Função main() • Função main() – Deve existir em algum lugar do programa e marca o ponto de início de execução do mesmo; #include <stdio.h> #include <conio.c> // implementga getch no devC++ int main (void) { printf( “hello este é o meu primeiro programa\n”); getch(); return 0; } 11/5/2015 Linguagem C 38 Função printf() • É uma função que imprime um determinado conteúdo na tela; • Forma geral – int printf (“string de controle”, lista de argumentos); – string de controle - contém caracteres que serão exibidos na tela e comandos de formatação; – lista de argumentos - contém os valores a serem formatados; • Deve haver o mesmo número de argumentos e de comandos de formato (ordem: esquerda->direita) 11/5/2015 Linguagem C 39 Função printf() • Códigos Especiais: \n \r \t \” \\ 11/5/2015 nova linha retorno do cursor tabulador aspas barra Linguagem C 40 Função printf() • Códigos de impressão formatada %c %d, %i %e %E %f %g %G 11/5/2015 Caractere Inteiros com sinal Notação científica (e minúsculo) Notação científica (E maiúsculo) Ponto flutuante usa %e ou %f, que for mais curto usa %E ou %f, que for mais curto Linguagem C 41 Função printf() • Códigos de impressão formatada %o %s %u %x %X %% 11/5/2015 Octal String Inteiros sem sinal Hexadecimal (letras minúsculas) Hexadecimal (letras maiúsculas) Escreve o símbolo Linguagem C 42 Função printf() #include <stdio.h> #include <conio.c> // implementa getch no devC++ int main (void) { int i; for (i=0; i<80;i+=10) printf(“ %d”,i); ======> 0 10 20 30 40 50 60 70 printf(“ valor de float(%f) \n”, 123.4567); ===> valor de float(123.4567) printf(“string (%s)\n”, “teste de impressão”);===> string( teste de impressão) getch(); return 0; } 11/5/2015 Linguagem C 43 Função printf() • Largura mínima de campo – Número colocado entre o símbolo % e o código de formato; – 0 antes do especificador de largura mínima coloca 0s a esquerda; – Usado para produzir tabelas; double soma; soma = 1234.56; printf(“%f\n”, soma); ===> 1234.56 printf(“%8f\n”, soma); ====> 1234.56 printf(“%012f\n”, soma); ====> 000001234.56 11/5/2015 Linguagem C 44 Função printf() • Especificador de precisão – Segue o especificador de largura mínima se houver; – Consiste em um ponto (.) seguido de um número; – Ponto flutuante - especifica o número de casas decimais; – %g ou %G - especifica a quantidade de dígitos significativos; 11/5/2015 Linguagem C 45 Função printf() – String - determina o comprimento máximo do campo; – Inteiros - identifica o número de dígitos dos números, sendo adicionado zeros para completar; printf (“%.4f\n”, 8976.12345678); ==> 8976.1234 printf(“%5.9s\n”,”hello, como vai”); ===> hello com 11/5/2015 Linguagem C 46 Função printf() • Justificação – As saídas são justificadas a direita, para justificar a esquerda colocar o sinal menos após o %; printf(“%-10.2f\n”, 3456.8909); ===> 3456.89 printf(“%10.2d\n”, 3456.8909); ====> 3456.89 • Manipulação outros tipos de dados – l - tipo de dado long ( Ex. %ld, %lf); – h - tipo de dado short (Ex. %hu); 11/5/2015 Linguagem C 47 Função scanf() • Rotina de entrada pela console; • Próximo do inverso da printf – int scanf(“string de controle”, lista de argumentos); – string de controle - determina como os valores serão lidos; – lista de argumentos - argumentos a serem lidos (passar endereços); 11/5/2015 Linguagem C 48 Função scanf() • Especificadores de formato %c %d %e, %f %o %s %x %g %u 11/5/2015 lê caracter lê inteiro lê ponto flutuante lê octal lê string lê hexadecimal lê ponto flutuante lê inteiro sem sinal Linguagem C 49 Função scanf() #include <stdio.h> #include <conio.c> // implementa getch no devC++ int main (void) { int i, j; unsigned soma; scanf (“%d%d”, &i,&j); scanf (“%u”, &soma); • } 11/5/2015 Linguagem C 50 Função clrscr() • Esta função efetua a limpeza de toda a tela (ou janela). Esta limpeza consiste em apagar todos os símbolos (ou caracteres) que estavam sendo apresentados em um momento anterior. • Com a limpeza de toda a tela o cursor fica posicionado na primeira posição dela, ou seja, no canto superior esquerdo. 11/5/2015 Linguagem C 51 Função clrscr() • Exemplo: #include <conio.c> // implementa clrscr no devC++ #include <stdio.h> int main (void) { float salario; printf(“ Digite o salario do funcionario: “); scanf(“%f “,&salario); clrscr( ); printf(“O salario lido e = %.2f ”, salario); getch(); return 0; } 11/5/2015 Linguagem C 52 Função gotoxy() • A execução de um programa elaborado no compilador C abre uma nova janela que possui um tamanho padrão de 24 linhas, por 80 colunas. Colunas (1 => 80) Informe sua idade 25 Linhas (1 => 24) Sua fase é adulta 11/5/2015 Linguagem C 53 Função gotoxy() • Esta função possibilita o posicionamento exato do cursor na execução de qualquer programa em C. gotoxy(<coluna> , <linha>); • Exemplo: #include <conio.c> // implementa gotoxy no devC++ #include <stdio.h> : gotoxy(24,11); /* posiciona cursor coluna 24 linha 11 */ printf("Aula de Laboratorio deProgramacao"); 11/5/2015 Linguagem C 54