Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


linguagem C 1, Notas de estudo de Engenharia Informática

abordada um pouco da sintaxe da linguagem C, para iniciante.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 31/08/2010

felipe-memphis-8
felipe-memphis-8 🇧🇷

2 documentos

1 / 36

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Curso C Starter
www.t2ti.com
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24

Pré-visualização parcial do texto

Baixe linguagem C 1 e outras Notas de estudo em PDF para Engenharia Informática, somente na Docsity!

www.t2ti.com

Apresentação

O Curso C Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam aprender a linguagem C. A estrutura do curso é formada por módulos em PDF e por mini-cursos em vídeo. O aluno deve baixar esse material e estudá-lo. Deve realizar os exercícios propostos. Todas as dúvidas devem ser enviadas para a lista de discussão que está disponível para inscrição na página do Curso C Starter no site www.t2ti.com. As dúvidas serão respondidas pelos instrutores Albert Eije, Cláudio de Barros e Miguel Kojiio, além dos demais participantes da lista. Nosso objetivo é que após o estudo do Curso C Starter o aluno tenha as noções fundamentais da linguagem C e consiga, a partir deste momento, aprofundar- se no assunto de forma autônoma e de acordo com as suas expectativas. Albert Eije trabalha com informática desde 1993. Durante esse período já trabalhou com várias linguagens de programação: Clipper, PHP, Delphi, C, Java, etc. Atualmente mantém o site www.alberteije.com e trabalha como analista de sistemas do Banco do Brasil. Cláudio de Barros é Tecnólogo em Processamento de Dados e analista de sistemas do Banco do Brasil. Miguel Kojiio é bacharel em Sistemas de Informação, profissional certificado Java e também trabalha como analista de sistemas do Banco do Brasil.

www.t2ti.com

C é uma linguagem estruturada, ou seja, estrutura o programa em blocos para resolver os problemas. A filosofia básica de uma linguagem estruturada é dividir para trabalhar, você divide um problema em pequenas partes que sejam possíveis de serem feitas. Neste contexto C é igual a Pascal. C é uma linguagem muito poderosa que é utilizada para criar programas diversos como processadores de texto, planilhas eletrônicas, sistemas operacionais, programas de comunicação, programas para a automação industrial, gerenciadores de bancos de dados, programas de projeto assistido por computador, programas para a solução de problemas da Engenharia, Física, Química e outras ciências.

Compiladores e Interpretadores

Para que um programa seja executado em um computador o mesmo precisa estar em linguagem de máquina (zeros e uns). Quando digitamos nosso programa, seja em C, Pascal, Java, etc o mesmo ainda não está na linguagem de máquina. Para isso existem os interpretadores e os compiladores. Ambos convertem um programa de uma linguagem qualquer para a linguagem de máquina. No caso do C existem tanto interpretadores quanto compiladores. Mas, qual seria a diferença? O interpretador lê as instruções do programa linha a linha e vai checando os erros e convertendo para a linguagem de máquina. Após a conversão a linha é executada. Se a linguagem for apenas interpretada o interpretador sempre deverá estar presente para que o programa funcione. Já o compilador lê o programa linha a linha, checa se existem erros e converte a linha para a linguagem de máquina. Mas o compilador não executa a linha. Ele converte todas as linhas para a linguagem de máquina e ao chegar ao final do arquivo do programa sem nenhum erro ele gera um arquivo com a extensão .OBJ. Esse arquivo não pode ser executado. Nessa ocasião entra em cena um programa linkeditor que vai agregar algumas rotinas ao arquivo .OBJ. Após isso será gerado um arquivo .EXE , que é um programa executável. Após a criação do .EXE o compilador não é mais necessário. Na realidade quando pedimos para gerar um .EXE o compilador e o linkeditor atuam de tal maneira que, para o programador, é como se apenas um passo estivesse sendo executado. No nosso curso utilizaremos o compilador do programa gráfico DEV-C++. Esse programa é Open Source e serve para escrever programas tanto em C quanto em C+ +. Assista ao mini-curso que mostra como instalar esse programa e como iniciar e executar os seus programas em C.

www.t2ti.com

O C é Case Sensitive

Queremos dizer com isso que maiúsculas e minúsculas fazem diferença. Se você declarar uma variável com o nome teste ela será diferente de Teste , TESTE , TestE ou tESTe. Da mesma maneira, os comandos do C if e for , por exemplo, só podem ser escritos em minúsculas, caso contrário o compilador irá interpretá-los como variáveis.

Estrutura Básica de um Programa em C

O menor programa escrito em C seria o seguinte: main() { } Main() - Esse é o nome da função, que por convenção vem com os parênteses. A função Main precisa estar presente no seu projeto C. Ela é a função principal do programa. É através dessa função que o programa será executado. As chaves de abertura e fechamento significam abertura e fechamento de bloco. Seriam o equivalente ao Begin e End do pascal. O programa acima não faz nada. Vamos criar um pequeno programa que imprime algo na tela: main() { printf("Meu primeiro programa C"); } O fato de o C possuir diversos compiladores pode causar uma certa confusão. O programa acima poderia ser compilado e executado sem problemas em alguns compiladores. Outros iriam reclamar. No nosso caso, no programa Dev-C não haverá problema nenhum. O Dev-C utiliza o compilador GCC. No entanto, como o Dev-C é um programa gráfico e vai chamar o CMD para mostrar o resultado do nosso programa, nós vamos inserir mais uma linha para que haja uma pausa na tela antes do CMD ser fechado. Nosso programa ficará assim:

www.t2ti.com

função printf(). Observe a tabela abaixo onde constam os códigos que podemos utilizar com esta função:

Código de Formatação Formato

%c Caracteres simples %d Decimal – números inteiros %e Notação científica %f Ponto flutuante %g %e ou %f (o mais curto) %o Octal %s Cadeia de caracteres %u Decimal sem sinal %x Hexadecimal %ld Decimal longo %lf Ponto flutuante longo (double) Podemos utilizar os códigos acima conforme os exemplos abaixo: main() { printf("Este eh o numero dois: %d",2); printf("%s fica a %d kilometros daqui","Fortaleza",1200); printf("A letra %c pronuncia-se %s",'W',"dábiliu"); system("pause"); } Se você já está testando os exemplos acima deve ter observado que sai tudo impresso numa linha só. Como fazer para “quebrar” a linha? No C existe o que chamamos de caracteres de escape. Observe o exemplo abaixo: main() { printf("Este eh o numero dois: %d \n",2); printf("%s fica a %d kilometros daqui \n","Fortaleza",1200); printf("A letra %c pronuncia-se %s \n",'W',"dábiliu"); system("pause"); } Observou algo novo? Sim. Existe um \n em cada uma das linhas. Esse é um caractere de escape. Quando a função printf() encontra um \n na expressão de controle ela sabe que precisar simular um [enter]. Observe a tabela de caracteres de escape abaixo:

www.t2ti.com

Caracteres de Escape Significado

\n Nova linha – simula o [enter] \r Retorno de cursor \t Tab \b Retrocesso \” Aspas \ Barra \f Salta página de formulário \0 Nulo Faça alguns exemplos utilizando os caracteres acima e tente compreender a função de cada um deles. A função printf() faz parte de uma biblioteca que vem com o C. Conforme já mencionado essa é uma função de entrada/saida. Logo, a biblioteca que a contém é a stdio.h. O h significa header (cabeçalho). Isso significa que esse é um arquivo- cabeçalho. Como assim? A função printf() está contida dentro desse arquivo. Para usarmos essa função é necessário informarmos ao nosso programa onde essa função se encontra. Fazemos isso por inserir uma instrução no cabeçalho do nosso programa. Ué, então porque conseguimos utilizar essa função sem mencionar nada nos exemplos acima? É porque o Dev-C já trata essa função como algo padrão. Mas o mesmo código acima poderia causar problemas se fosse compilado diretamente na linha de comando. O nome do arquivo, stdio, também tem um significado: std – standard (padrão) io – input/output (entrada/saída) Ou seja, esse arquivo contém as funções de entrada/saída. Logo, a função printf() teria que estar nesse arquivo. E como faço para incluir esse arquivo no cabeçalho do meu programa? O raciocínio é esse mesmo: incluir. Pense na palavra incluir em inglês! Veja o exemplo abaixo: #include <stdio.h> void main ()

www.t2ti.com

No exemplo anterior utilizamos duas variáveis: Dias e Anos. Observe que antes do nome das variável temos as palavras int para Dias e float para Anos. O que significam? São o tipo dessas variáveis. Nós precisamos informar ao C de que tipo são os valores que queremos trabalhar em memória. Observe abaixo os tipos de dados que podemos utilizar no C:

Tipo Tamanho-Bytes Escala

char 1 -127 a 127 unsigned char 1 0 a 255 signed char 1 -127 a 127 int 4 -2.147.483.648 a 2.147.483.

Tipo Tamanho-Bytes Escala

unsigned int 4 0 a 4.294.967. signed int 4 -2.147.483.648 a 2.147.483. short int 2 -32.768 a 32. unsigned short int 2 0 a 65. signed short int 2 -32.768 a 32. long int 4 -2.147.483.648 a 2.147.483. signed long int 4 -2.147.483.648 a 2.147.483. unsigned long int 4 0 a 4.294.967. float 4 Seis digitos de precisão double 8 Dez digitos de precisão long double 10 Dez digitos de precisão

A Função scanf()

O terceiro novo conceito abordado no nosso exemplo anterior foi a função scanf(). Já vimos que a função printf() serve para imprimir informações na tela. E quando precisarmos solicitar algo ao usuário? Utilizamos a scanf(). Sintaxe: scanf(“expressão de controle”,lista de argumentos);

www.t2ti.com

A função scanf() é muito semelhante à printf(). Também é uma função de entrada e saída. Vamos utilizar os mesmos códigos de formatação que usamos na printf(). Mas ela tem uma diferença fundamental: o operador de endereço (&). A memória do computador é dividida em bytes, que são numerados de zero até o limite de memória da máquina (524.287 se a máquina tem 512K de memória). Estes números são chamados de endereços de bytes. Toda variável ocupa uma certa localização na memória e seu endereço é o primeiro byte ocupado por ela. Um número inteiro ocupa 4 bytes. Se você declarou a variável nota como inteiro e atribuiu a ela o valor 5, quando nota for referenciada devolverá o valor 5. No entanto, se você referenciar nota precedida por & (&nota) , você receberá o endereço do primeiro byte onde nota está guardada. Observe novamente o nosso exemplo: #include <stdio.h> void main () { /* esse programa pede ao usuario para entrar com um valor inteiro que chama de dias, depois ele divide esse numero por 365,25, ou seja, converte os dias para anos e informa ao usuario quantos anos equivalem aos dias digitados */ int Dias; // Declaracao de Variaveis float Anos; printf ("Entre com o número de dias: "); // Entrada de Dados scanf ("%d",&Dias); Anos=Dias/365.25; // Conversao Dias->Anos printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); system("pause"); } Quando solicitamos ao usuário que ele entre com o número de dias utilizamos o código de formatação %d , pois vamos armazenar um inteiro. Após isso, no argumento, utilizamos a variável Dias precedida por & (&Dias). Isso faz com que o valor digitado pelo usuário seja armazenado num endereço de memória.

Palavras Reservadas

Toda linguagem possuem palavras que não podem ser utilizadas como nomes de variáveis. Essas palavras são reservadas para o trabalho do compilador em cima delas. Por exemplo, a palavra for não poderia ser utilizada como um nome de

www.t2ti.com

cada um deles realmente faz. Execute o seguinte exemplo no Dev-C: #include <stdio.h> void main () { int a,b,c; float resultado = 0.0; printf ("Digite tres numeros: "); scanf ("%d %d %d",&a, &b, &c); resultado = ((a + b) * c) / (c-a); printf("O resultado de ((a + b) * c) / (c-a) eh %f \n", resultado); printf ("O resto da divisao entre a e b eh %d \n", a%b); printf ("E se multiplicarmos c por -1 o resultado sera %d \n", -c); system("pause"); } Faça alguns testes com o programa acima. Tente compreender o seu funcionamento. Faça os cálculos numa calculadora e observe se o resultado está correto. Comente sobre esse programa na lista de discussão. No programa anterior utilizamos todos os operadores aritméticos. Vamos observar agora um programa que utiliza alguns operadores e tem uma finalidade mais precisa: #include <stdio.h> void main () { /* para converter de Fahrenheit para Celsius usa-se a formula: c = (f-32) / 1. para converter de Celsius para Fahrenheit usa-se a formula: f = c * 1.8 + 32 */ float f; printf("Entre com a temperatura em Fahrenheit\n\n"); scanf("%f",&f); printf("%.f em Fahrenheit equivale a %.f em Celsius",f,(f-32)/1.8); printf("\n"); system("pause"); } O programa acima solicita ao usuário que entre com uma temperatura em Fahrenheit e devolve o resultado da mesma em Celsius.

Operadores de Incremento e Decremento

Observe o seguinte trecho de programa em Pascal:

www.t2ti.com

var a, b, soma: integer; begin soma := 0; a := 5; b := 6; soma := a + b; soma := soma + 1; end; O que nos interessa mesmo no algoritmo acima é a última linha onde somamos o resultado de soma com 1 e atribuímos à própria soma. O C possui u operador de incremento que faz isso de uma forma mais interessante. Observe: void main () { int a, b, soma; a = 5; b = 6; soma = a + b; soma++; printf("%d",soma); system("pause"); } Note a diferença. Basta utilizar o operador de incremento (++). O mesmo já atribui 1 à variável soma. Da mesma forma o operador de decremento (--) faria uma subtração de 1 e atribuiria o novo valor a variável. É importante saber que os operadores podem ser utilizados antes ou após a variável. No entanto, existe uma diferença fundamental. Observe: void main () { int n = 5, x; x = n++; printf("x=%d n=%d",x,n); system("pause"); } A saída será x=5 e n=6. Vamos fazer uma pequena alteração: void main () { int n = 5, x; x = ++n; printf("x=%d n=%d",x,n); system("pause"); }

www.t2ti.com

Comando de Decisões (Controle de Fluxo)

Toda linguagem de computador precisa oferecer um mínimo de três formas básicas de controle: 1 – executar uma série de instruções; 2 – praticar testes para decidir entre ações alternativas. 3 – repetir uma seqüência de instruções até que uma certa condição seja encontrada; Vamos conhecer o segundo item a partir de agora e o terceiro será explorado mais tarde. O C oferece 4 principais estrutura de decisão: if, if-else, switch e o operador condicional ternário.

O Comando if

Esse comando instrui o computador a tomar uma decisão simples. Sintaxe: if (expressão de teste) instrução; Observe o exemplo: void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5) printf("o valor de n eh %d e eh maior que dois\n",n); system("pause"); } Se o usuário digitar um número maior que cinco ele verá uma mensagem na tela. Caso digite um número menor ou igual a 5 o programa não faz nada. Mas e se eu quisesse inserir mais um comando dentro desse if? Caso se deseje inserir mais que uma linha de comando em um if será necessário abrir um bloco com chaves e fechá-lo após o último comando. Observe:

www.t2ti.com

void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5) { printf("o valor de n eh %d e eh maior que cinco\n",n); printf("esse if tem dois comandos, por isso utilizamos a chave\n"); printf("de abertura e a chave de fechamento de bloco\n"); } system("pause"); } No entanto, esse programa não faz nada se o usuário digitar um número menor ou igual a cinco. Vamos mudar isso. Utilizemos o else. Vejamos: void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5) { printf("o valor de n eh %d e eh maior que cinco\n",n); printf("esse if tem dois comandos, por isso utilizamos a chave\n"); printf("de abertura e a chave de fechamento de bloco\n"); } else printf("o valor de n eh %d e eh menor ou igual a cinco\n",n); system("pause"); } Nesse primeiro momento utilizamos apenas uma instrução no else, por esta razão não foi necessário abrir um bloco. Mas o princípio é o mesmo: se fosse necessário inserir mais comandos abaixo do else e que pertencessem ao mesmo, seria necessário abrir e fechar um bloco.

Comandos if Aninhados

Quando um if está dentro de outro dizemos que o if interno está aninhado. Veja o exemplo: void main () { int n; printf("Digite um valor, por favor!\n"); scanf("%d",&n); if (n > 5)

www.t2ti.com

|| Lógico OU = += -= = /= %= Aritméticos de atribuição Ou seja, o operador! (not)* é o de maior precedência e o %= é o de menor.

O Comando switch

Quando temos uma ou duas escolhas a fazer usar o if pode ser o ideal. Mas às vezes é necessário escolher entre uma de muitas opções. Quando isso ocorre, podemos utilizar o comando switch. Sintaxe switch(expressão constante) { case constante 1: instruções; break; case constante 2: instruções; break; default: instruções; } Vamos construir um pequeno menu e quando o usuário escolher uma das opções imprimiremos qual delas ele escolheu. Observe: void main () { printf("------------------------------\n"); printf("| PROGRAMA BANCO DE DADOS |\n"); printf("------------------------------\n"); printf("| 1 - INCLUSAO |\n"); printf("| 2 - EXCLUSAO |\n"); printf("| 3 - ALTERACAO |\n"); printf("------------------------------\n"); printf("| 4 - SAIR |\n"); printf("------------------------------\n"); int op; printf("Selecione uma das opcoes acima: "); scanf("%d",&op); switch(op) { case 1: printf("escolheu a opcao INCLUSAO"); break; case 2: printf("escolheu a opcao EXCLUSAO");

www.t2ti.com

break; case 3: printf("escolheu a opcao ALTERACAO"); break; case 4: printf("escolheu a opcao SAIR"); break; default: printf("digitou outra coisa..."); } printf("\n"); system("pause"); } Veja que após cada instrução é necessário inserir a instrução break. Esse comando “quebra” o switch, ou seja sai do switch. Utilizaremos esse comando novamente quando estivermos trabalhando com laços.

Operador Condicional Ternário?

Conheceremos agora um if-else um pouco estranho. Quando estivermos numa situação de uma simples condição podemos utilizar essa estrutura. Sintaxe: condição? expressão1 : expressão Traduzindo: se a condição for verdadeira execute a expressão1, senão execute a expressão2. Exemplo: max = (num1 > num2)? num1 : num2; A instrução acima equivale a: if (num1 > num2) max = num1; else max = num2;

www.t2ti.com