Linguagem C Conteúdos já desenvolvidos Estrutura de um programa em C Identificadores, variáveis, constantes, operadores e expressões Linguagem C, A. Barão, 2002 1 Linguagem C Estrutura de um programa em C #include <bibliotecas> #define <funções de macros> #define <constantes> declaração de funções ou protótipos de funções; definição de novos tipos de dados; declaração de variáveis globais; tipo de dado da função main (argumentos) { definição e declaração de variáveis locais; código de execução da função; } tipo de dado da função identificador (argumentos) { definição e declaração de variáveis locais; código de execução da função; } Linguagem C, A. Barão, 2002 2 Linguagem C Estrutura de um programa em C Exemplos: #include <stdio.h> void main(void) { printf(“Linguagem C”); } #include <stdio.h> void main(void) { int numeroAluno = 12; printf(“O número do aluno é %d”, numeroAluno); } Linguagem C, A. Barão, 2002 3 Linguagem C Estrutura de um programa em C Caracteres especiais no código fonte: ; , /* // “ = { } (após cada instrução) (para separar identificadores) */ (para incluir comentários numa ou mais linhas (incluir comentários numa linha) (delimitar grupos de caracteres) (atribuição) (início de um bloco de instruções) (fim de um bloco de instruções) Palavras reservadas: auto double if static break else int struct case entry long switch char extern register typedef continue float return union default for sizeof unsigned do goto short while Linguagem C, A. Barão, 2002 4 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Identificador Deve começar por uma letra ou underscore (a..z, A..Z ou _ ); Não pode conter espaços; Não é possível utilizar acentuação; É case-sensitive Exemplos mediaAluno totalVendas MAXIMO ctd _enderecoSistema ... Linguagem C, A. Barão, 2002 5 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Variável Entidade que pode assumir vários valores durante a execução do programa Declaração de variáveis (exemplos) int numeroAluno; char sexo; Tipo de dado Identificador da variável Linguagem C, A. Barão, 2002 6 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Declaração de variáveis, continuação int numeroAluno; As declarações terminam com ponto e vírgula char sexo; Outro exemplo: int numeroAluno; int numeroContribuinte; é o mesmo que: int numeroAluno, numeroContribuinte; quando os tipos de atributo são iguais. Linguagem C, A. Barão, 2002 7 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Declaração de variáveis, conclusão. As variáveis podem ser inicializadas no momento da declaração Exemplos: int numeroAluno = 12; char sexo = ‘M’; Tipos de dados básicos char – carácter int – inteiro float – vírgula flutuante fouble – vírgula flutuante de precisão dupla void – vazio ou sem valor definido Linguagem C, A. Barão, 2002 8 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Capacidade dos tipos de dados char (-128 .. 127, 8 bits) Importante: int (-32768 .. 32767, 16 bits) O operador sizeof devolve o espaço de memória unsigned int ( 0 .. 65535, 16 bits) Que um determinado tipo de dado ocupa signed int (-32768 .. 32767, 16 bits) short int (-32768 .. 32767, 16 bits) unsigned short int ( 0 .. 65535, 16 bits) signed short int (-32768 .. 32767, 16 bits) long int (-2 147 483 648 .. 2 147 483 647, 32 bits) unsigned long int (0 .. 4 294 967 295, 32 bits) float (3,4x10E-38..3,4x10E38, 32 bits) double (1,7x10E-308 .. 1,7x10E308, 64 bits) long double (3,4x10E-4932 .. 3,4x10E4932) Linguagem C, A. Barão, 2002 9 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Conversão de tipos de dados Em expressões com diferentes tipos de dados podem existir promoções Exemplos: •Todos os char e short int são convertidos para int •Todos os float são convertidos para double Caso concreto numa expressão: char c; int i; float f; double d; resultado = ( c / i ) + ( f * d ) + ( f – i ) int double Int float double float double Linguagem C, A. Barão, 2002 10 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Conversão de tipos de dados Casts • É possível forçar a conversão de tipos através da técnica de cast Exemplo: float f = 17.5; float g; g = (int) f; g fica com 17 Linguagem C, A. Barão, 2002 11 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Variáveis globais e locais • Uma variável global é conhecida por todas as funções do programa • Uma variável local só é conhecida dentro da função que a declara Como optar? Depende do problema a resolver... Mas deve-se optar por variáveis locais sempre que possível. • Quando um nome de uma variável local é o mesmo que uma variável global, o sistema dá preferência à variável local. Ou seja, variáveis locais têm precedência sobre variáveis globais Linguagem C, A. Barão, 2002 12 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Variáveis globais e locais #include <stdio.h> Int numeroAlunos = 30; void main(void) { int numeroProfessores = 8; } void X() { int numeroMonitores = 16; } Só a função main conhece esta variável A função X() pode usar a variável numeroAlunos (global) mas não conhece a variável numeroProfessores (local noutra função) Esta variável só é conhecida pela função X() Linguagem C, A. Barão, 2002 13 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Constantes • O valor de uma constante permanece por definição inalterado durante a execução do programa. Exemplos: #define ALUNOS_DA_TURMA 30 Outro tipo de constante: const alunosDaTurma = 30; Palavra reservada para declarar uma constante Linguagem C, A. Barão, 2002 14 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Constantes Exemplos: #define mensagem = “Seja bem vindo ao sistema” ou const mensagem = “Seja bem vindo ao sistema”; Atenção: aspas e plicas são diferentes! Constante do tipo caractere (plicas) Constante do tipo string (aspas) letra = ‘b’; frase = “Seja bem vindo...”; Linguagem C, A. Barão, 2002 15 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Constantes de barra Código Significado /? Ponto de interrogação // Barra invertida /’ Plica ou apóstrofo /” Aspas \b backspace \f Form feed \n New line \r Carriage return \t Tabulação horizontal \v Tabulação vertical \xValor Código Valor ASCII em hexadecimal Linguagem C, A. Barão, 2002 16 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Constantes e variáveis Exemplo 1: #include <stdio.h> #include <conio.h> #define mensagemEntrada "Seja bem vindo ao sistema" #define mensagemSaida "Obrigado por ter escolhido o nosso Banco" #define TAXA_JURO 15.5 void main(void) { clrscr(); printf("\nBanco X\n"); printf("%s\n", mensagemEntrada); printf("A nossa taxa de juro é muito boa: %.2f", TAXA_JURO); printf("\n%s", mensagemSaida); } Linguagem C, A. Barão, 2002 17 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Constantes e variáveis Exemplo 2: #include <stdio.h> // necessário para printf #include <conio.h> // necessário para clrscr() e getch() void x(); // protótipo da função X() int numeroAluno = 10; // variável global void main(void) { int numeroAluno; // variável local com mesmo nome da global para ver a diferença.. char turma; clrscr(); // limpar ecrã turma = 'A'; printf("\nTurma %c", turma); numeroAluno = 20; printf("\nO numero do aluno da variável local é: %d", numeroAluno); numeroAluno = 21; printf("\nAgora o numero do aluno da variável local é‚: %d", numeroAluno); x(); getch(); // aguardar uma tecla para terminar programa } /* Função X() que usa a variável global e tem uma variável local */ void x() { int numeroProfessor = 8; // esta variável só é conhecida nesta função printf("\nO valor da variável numeroAluno global é: %d", numeroAluno ); printf("\nO valor da variável numeroProfessor é: %d", numeroProfessor ); } Linguagem C, A. Barão, 2002 18 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Operadores Aritméticos Relacionais Lógicos + Adição == Igual && Conjunção (E) - Subtracção > Maior || Disjunção (OU) * Multiplicação < Menor ! Negação / Divisão >= Maior ou igual % Resto da divisão inteira <= Menor ou igual ++ Incremento != Diferente -- Decremento = Atribuição Manipulação de bits Em C existem formas abreviadas de codificar, exemplos: k = k + 1; é o mesmo que ++k; k = k – 1; é o mesmo que --k; Ou k = k + 10; é o mesmo que k+=10; a = b = c = 25; // atribuição múltipla do mesmo valor etc... & Conjunção (E) | Disjunção (OU) ^ Disjunção Exclusiva (XOR) ~ Complemento >> Deslocamento para a direita << Deslocamento para a esquerda Linguagem C, A. Barão, 2002 19 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Operadores Aritméticos (exemplo) #include <stdio.h> #include <conio.h> void main(void) { float valor1, valor2, resultado; int resto; clrscr(); printf("\nDigite um valor: "); scanf("%f", &valor1); printf("\nDigite outro valor: "); scanf("%f", &valor2); resultado = valor1 + valor2; printf("\nSoma: %f", resultado); resultado = valor1 - valor2; printf("\nSubtraccao: %f", resultado); resultado = valor1 * valor2; printf("\nMultiplicacao: %f", resultado); resultado = valor1 / valor2; printf("\nDivisao: %f", resultado); O resto da divisão inteira não pode ser efectuado com floats daí a necessidade de efectuar o cast para int Linguagem C, A. Barão, 2002 resto = (int) valor1 % (int) valor2; printf("\nResto da divisao inteira: %d", resto); getch(); } 20 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Operadores Relacionais (exemplo) #include <stdio.h> #include <conio.h> void main(void) { int valor1, valor2; clrscr(); printf("\nDigite um valor: "); scanf("%d", &valor1); O resultado da expressão lógica (0/1) será impresso por printf printf("\nDigite outro valor: "); scanf("%d", &valor2); printf("\n0 - Falso, 1 - Verdade"); printf("\nvalor1 igual a valor2? %d", (valor1 == valor2) ); printf("\nvalor1 maior que valor2? %d", (valor1 > valor2) ); printf("\nvalor1 menor que valor2? %d", (valor1 < valor2) ); printf("\nvalor1 maior ou igual que valor2? %d", (valor1 >= valor2) ); printf("\nvalor1 menor ou igual que valor2? %d", (valor1 <= valor2) ); printf("\nvalor1 diferente que valor2? %d", (valor1 != valor2) ); getch(); } Linguagem C, A. Barão, 2002 21 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Operadores de manipulação de bits (exemplo #1) #include <stdio.h> #include <conio.h> void main(void) { int valor; clrscr(); printf("\nDigite um valor: "); scanf("%d", &valor); printf("\nValor digitado: %d", valor); printf("\nValor depois de deslocar todos os bits uma posicao para a esquerda: %d", ( valor << 1 ) ); printf("\nValor depois de deslocar todos os bits duas posicoes para a esquerda: %d", ( valor << 2 ) ); printf("\nValor depois de deslocar todos os bits tres posicoes para a esquerda: %d", ( valor << 3 ) ); getch(); } Linguagem C, A. Barão, 2002 22 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Operadores de manipulação de bits (exemplo #2) #include <stdio.h> #include <conio.h> Nota: As técnicas de manipulação de bits são muito importantes Para acesso e configuração de hardware... void main(void) { int a = 45; // em binario 101110 int b = 28; // em binario 011100 clrscr(); printf("\na E b = %d", ( a & b ) ); // resultado 12 (1100) printf("\na OU b = %d", ( a | b ) ); // resultado 61 getch(); } Linguagem C, A. Barão, 2002 23 Linguagem C Identificadores, variáveis, constantes, operadores e expressões Prioridade dos operadores ( ) [ ] -> Maior prioridade ! - ++ -- & (cast) sizeof */% +<< >> < <= > >= == != & ^ | && || ?: = += -= /= %= &= ^= != <<= >>= Menor prioridade , Linguagem C, A. Barão, 2002 24