PCI- Introdução a linguagem C Profa. Mercedes Gonzales Márquez Primeiro Programa Estrutura do código fonte – Comentários – Diretivas de compilador – Procedimento principal Primeiro Programa /* file: oi.c * Este programa escreve a mensagem "Oi pessoal" * na tela. O programa foi tomado do livro * "Art and Science of C" de Eric Roberts. */ #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]){ printf("Oi pessoal.\n"); return 0; } Primeiro Programa Comentários Diretivas de Compilador Procedimento Principal /* file: oi.c * Este programa escreve a mensagem "Oi pessoal" * na tela. O programa foi tomado do livro * "Art and Science of C" de Eric Roberts. */ #include <stdio.h> int main(int argc, char* argv[]){ printf("Oi pessoal.\n"); return 0; } Primeiro Programa Comentários • Texto ignorado pelo compilador • Documentação útil para descrever trechos do algoritmo • Possível em qualquer posição do código fonte • Duas formas para comentários: - Uma linha: // Comentário ... - Várias linhas: /* Comentário... mais comentários ... */ Primeiro Programa Diretivas de Compilador: • Informam outros arquivos que devem ser consultados antes de compilar. • Definem parâmetros utilizados pelo compilador. • São colocadas no início do código fonte. Exemplos: #include <stdio.h> #include <stdlib.h> #include <math.h> Primeiro Programa Procedimento principal: • Sequência de instruções • Pontuação: ponto-e-vírgula termina instruções • Chaves agrupam instruções relacionadas int main(int argc, char* argv[]){ printf("Oi pessoal.\n"); return 0; • int argc, char* argv[] e return 0 são obrigatórios. Memória • Memória: sequência de células • Endereço: posição da célula • Células armazenam dados – Valor pequeno: uma célula – Valor grande: duas ou mais células Memória • Operações na memória: 1. Consulta (lê) células de memória 2. Programa calcula um novo valor 3. Armazena (escreve) o novo valor em uma célula Variáveis • Abstração dos endereços de memória. • Rótulo simbólico para cada endereço. Variáveis • Variável: nome simbólico associado a um dado. Nome (rótulo) Variável: Valor (conteúdo) Declarando uma variável Declara-se da seguinte forma: Tipo Variável Nome Variável; Exemplo : int numero; Variáveis inteiras Os seguintes são os tipos da linguagem C que servem para armazenar inteiros: int: Inteiro cujo comprimento depende do processador. E o inteiro mais utilizado. Em processadores Intel comum, ocupa 32 bits e pode armazenar valores de 2.147.483.648 a 2.147.483.647. unsigned int: Inteiro cujo comprimento depende do processador e que armazena somente valores positivos. Em processadores Intel comum, ocupa 32 bits e pode armazenar valores de 0 a 4.294.967.295. Variáveis inteiras long int: Inteiro que ocupa 64 bits em computadores Intel de 64bits e pode armazenar valores de aprox. -9 x1018 a aprox. 9 x1018. unsigned long int: Inteiro que ocupa 64 bits e em computadores Intel de 64bits e armazena valores de 0 ate aprox. 18 x1018. short int: Inteiro que ocupa 16 bits e pode armazenar valores de -32.768 a 32.767. unsigned short int: Inteiro que ocupa 16 bits e pode armazenar valores de 0 a 65.535. Variáveis de tipo caracter Variáveis utilizadas para armazenar letras e outros símbolos existentes em textos. Guarda apenas um caracter. Exemplos de declaração: char umaLetra; Variáveis de tipo ponto flutuante Variáveis utilizadas para armazenar letras e outros símbolos existentes em textos. Guarda apenas um caracter. Exemplos de declaração: char umaLetra; Variáveis de tipo ponto flutuante Armazenam valores reais. Mas possuem problemas de precisão pois há uma quantidade limitada de memória para armazenar um número real. Exemplos de números em ponto flutuante: 2.1345 ou 9098.123. - float: Utiliza 32 bits, e na pratica tem precisão de aproximadamente 6 casas decimais (depois do ponto). Pode armazenar valores de (+/-)10-38 a (+/-)1038 double: Utiliza 64 bits, e na pratica tem precisão de aproximadamente 15 casas decimais. Pode armazenar valores de (+/-)10-308 a (+/-)10308 Regras para nomes de variáveis em C Deve começar e pode conter letra (maiúscula ou minúscula) ou underline(_). • Não pode-se utilizar como parte do nome de uma variável: { ( + - * / \ ; . , ? • Letras maiúsculas e minúsculas são diferentes: • As seguintes palavras são reservadas na linguagem C e portanto não podem ser utilizadas como nome de variáveis: auto double int struct break enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while • Operações aritméticas e expressões Operações aritméticas podem ser combinadas formando expressões. Existe uma regra de multiplicação e divisão (mesma prioridade) sobre soma e subtração (mesma prioridade) e a ordem de execução para operadores da mesma prioridade é de esquerda para direita. Exemplo. int main(){ int a=20, b=10; float c=1.5,d; d=c*b/a; /*atribui 0.75 para d*/ d=c*(b/a); /*atribui 0.0 para d pois a divisão entre inteiros resulta em um inteiro*/ } Operações aritméticas e expressões Note que a melhor forma de garantir o resultado esperado é usar parênteses. A prioridade de execução neste caso é da expressão mais interna para a mais externa. Int main(){ int a=20, b=10; float c=1.5, d; d= (((a+5)*10)/2)+b; /*atribui 135 para d*/ } Operações aritméticas e expressões Símbolo Função + * / Adição % / Resto da divisão inteira Quociente da divisão inteira subtração Multiplicação Divisão real Constantes Assim como variáveis, constantes são usadas para armazenar números e caracteres. Exemplos: # define PI 3.1415926536 /* atribui o valor para PI*/ # define Delta 0.001 Definindo novos tipos Podemos usar o comando typedef para definir novos tipos de variáveis ou abreviar tipos existentes. Typedef enum {false,true} bool; /* o tipo bool só armazena 0/false e 1/true*/ Operações lógicas e expressões Os caracteres &&, ||, !, indicam as seguintes operações lógicas: and, or e not, correspondendo às operações de conjunção, disjunção e negação, respectivamente. Operações lógicas e expressões #include <stdio.h> /*Biblioteca para incluir comandos de entrada e saída como printf*/ Typedef enum {false,true} bool; Int main() { bool v1,v2,v3; v1=true; v2=false; v3=v1&&v2; v3=v1||v2; v3=!v1; v3=((v1&&v2))||(!v2); printf("%d,%d,%d\n",v1,v2,v3); } Funções matemáticas Várias funções matemáticas são disponibilizadas pela linguagem C. Função Resultado Sin(x) Seno de um ângulo cos(x) Coseno de um ângulo tan(x) Tangente do ângulo exp(x) O número e elevado a x. ln(x) Logaritmo neperiano de x sqrt(x) Raiz quadrada de x log10(x) Logaritmo base 10 de x Round(x) Arredondamento do ponto flutuante x. #include <stdio.h> #include <math.h> /* biblioteca padrão para funções matemáticas básicas*/ # define PI 3.1415926536 /* atribui o valor para PI*/ int main(int argc, char *argv[]) { float a=1.0,b; printf("O valor 4.3 arredondado usando round() e %f", round(4.3)); b=exp(a); printf(“a=%f, b=%f\n”,a,b); a=2.0; a=pow(a,3.0); printf(“a=%f\n”,a); a=cos(PI/2); printf(“a=%f\n”,a); return 0; } Funções matemáticas Comandos de entrada/saída Entrada de Dados: O teclado é o dispositivo padrão para entrada de dados. O comando scanf lê números e caracteres digitados no teclado da seguinte forma: scanf (%d”, &x) onde x é uma variável inteira e &x é o endereço em memória da variável x. Cada tipo de variável requer um símbolo específico de conversão. O símbolo %d é usado para variáveis int,short, unsigned short, unsigned char; O símbolo %u é usado para unsigned inteiro. O símbolo %c para char. O símbolo %s para char e cadeias de caracteres. O símbolo %f para flota e o símbolo %lf para double. Comandos de entrada/saída Saída de Dados: O teclado é o dispositivo padrão para saída de dados. O comando printf apresenta números e caracteres na tela da seguinte forma: printf (%d”, x) onde x é uma variável inteira Exemplo: #include<stdio.h> Int main(){ Int a=9, b=800; Float c=20.9176, d=-1.4219 /*\n pula linha, 3 indica o número de dígitos, incluindo o sinal, se houver, 5 indica o número de dígitos total, incluindo o sinal, se houver, e 2 indica o número de dígitos após o ponto. Printf (“\n a=3d,\n b=%3d, \n c=%5.2f, \n d=%5.2f.\n”,a,b,c,d); Comandos de entrada/saída include<stdio.h> int main() { int ano; printf(“Digite o ano de nascimento:"); scanf(“%d",&ano); printf(“O ano de nascimento digitado foi: %d\n",ano); } Comandos de entrada/saída include<stdio.h> int main() { int base, altura, area; printf`(“Digite a base do retangulo:"); scanf(“%d",&base); printf(“Digite a altura do retangulo:"); scanf(“%d",&altura); area = base altura; printf(“Valor da area e: %d\n",area); } Exercícios de comandos de entrada e saída 1. Faça um programa que leia o valor do salário de um funcionário, calcule e mostre seu novo salário, sabendo que o mesmo recebeu um aumento de 21,3%. 2. Faça um programa que receba a altura do degrau de uma escada e a altura que o usuário deseja alcançar subindo a escada. Calcular e mostrar quantos degraus o usuário deverá subir para atingir seu objetivo, sem se preocupar com a altura do usuário. 3. 3. Leia o valor do raio de um círculo e calcule a área deste círculo. Comandos de entrada/saída 4. A importância de R$ 780.000,00 será dividida entre três ganhadores de um concurso. Sendo que da quantia total: O primeiro ganhador receberá 46%; O segundo receberá 32%; O terceiro receberá o restante. Calcule e imprima a quantia ganha por cada um dos ganhadores. 5. Uma empresa contrata um encanador a R$ 30,00 por dia. Crie um programa que solicite o número de dias trabalhados pelo encanador e imprima a quantia líquida que deverá ser paga, sabendo-se que são descontados 8% para pagamento de impostos e taxas devidas. 6. Leia os valores de dois catetos de um triângulo e calcule e mostre o valor da hipotenusa