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


Apostila C, Notas de estudo de Eletrônica

Apostila sucinta u muita boa.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 02/03/2008

vinicius-freire-10
vinicius-freire-10 🇧🇷

2 documentos

1 / 104

Toggle sidebar

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

Não perca as partes importantes!

bg1
Centro Tecnológico de Mecatrônica
Fundamentos de
Linguagem C
ou
“Tudo que você precisa saber sobre C para não passar vergonha!”
Caxias do Sul, novembro de 1997
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
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Apostila C e outras Notas de estudo em PDF para Eletrônica, somente na Docsity!

Centro Tecnológico de Mecatrônica

Fundamentos de

Linguagem C

ou

“Tudo que você precisa saber sobre C para não passar vergonha!”

Caxias do Sul, novembro de 1997

Conselho Regional do SENAI - RS

Presidente

Dagoberto Lima Godoy

Conselheiros

Titulares Suplentes

Deomedes Roque Talini Valayr Hélio Wosiack

Enio Lúcio Scheln Valdomiro Bochese da Cunha

Astor Milton Schmitt José Carlos Cerveri

Diretoria SENAI - SR

Diretor Regional

José Zortéa

Diretor Técnico

Paulo Fernando Presser

Diretor Administrativo e Financeiro

Adalberto Luiz Lenhard

  1. Fundamentos da Linguagem C

Neste capitulo serão vistos os fundamentos da linguagem C. O conceito de linguagem de programação, linguagens de alto e baixo nível, linguagens genéricas e especificas. Será visto um pouco do histórico da criação da linguagem e a descrição das características mais importantes da linguagem C. Finalmente, será visto o aspecto geral de um código fonte escrito em C.

1.1 Linguagens de Programação

Um programa de computador é um conjunto instruções que representam um algoritmo para a resolução de algum problema. Estas instruções são escritas através de um conjunto de códigos (símbolos e palavras). Este conjunto de códigos possui regras de estruturação lógica e sintática própria. Dizemos que este conjunto de símbolos e regras formam uma linguagem de programação.

1.1.1 Exemplos de códigos.

Existem muitas linguagens de programação. Podemos escrever um algoritmo para resolução de um problema por intermédio de qualquer linguagem. A seguir mostramos alguns exemplos de trechos de códigos escritos em algumas linguagens de programação. Exemplo : trecho de um algoritmo escrito em Pseudo-linguagem que recebe um número num e escreve a tabuada de 1 a 10 para este valor: leia num para n de 1 até 10 passo 1 faça tab ← num * n imprime tab fim faça Exemplo : trecho do mesmo programa escrito em linguagem C : scanf(&num); for(n = 1; n <= 10; n++){ tab = num * n; printf(”\n %d”, tab); };

Exemplo : trecho do mesmo programa escrito em linguagem Basic :

10 input num 20 for n = 1 to 10 step 1 30 let tab = num * n 40 print chr$ (tab) 50 next n

Exemplo : trecho do mesmo programa escrito em linguagem Fortran : read (num); do 1 n = 1: tab = num * n write(tab) 10 continue

Exemplo : trecho do mesmo programa escrito em linguagem Assembly para INTEL 8088: MOV CX, IN AX,PORTA MOV DX,AX LABEL: INC CX MOV AX,DX MUL CX OUT AX, PORTA CMP CX, JNE LABEL

1.1.2 Linguagens de baixo e alto nível.

Podemos dividir, genericamente, as linguagens de programação em dois grandes grupos: as linguagens de baixo nível e as de alto nível :

Linguagens de baixo nível: São linguagens voltadas para a máquina, isto é, são escritas usando as instruções do microprocessador do computador. São genericamente chamadas de linguagens Assembly. Vantagens : Programas são executados com maior velocidade de processamento. Os programas ocupam menos espaço na memória. Desvantagens : Em geral, programas em Assembly tem pouca portabilidade , isto é, um código gerado para um tipo de processador não serve para outro. Códigos Assembly não são estruturados, tornando a programação mais difícil.

  • O C é uma linguagem estruturalmente simples e de grande portabilidade. O compilador C gera códigos mais enxutos e velozes do que muitas outras linguagens.
  • Embora estruturalmente simples (poucas funções intrínsecas) o C não perde funcionalidade pois permite a inclusão de uma farta quantidade de rotinas do usuário. Os fabricantes de compiladores fornecem uma ampla variedade de rotinas pré-compiladas em bibliotecas.

1.2.2 Histórico

1970: Denis Ritchie desenha uma linguagem a partir do BCPL nos laboratórios da Bell Telephones, Inc. Chama a linguagem de B. 1978: Brian Kerningham junta-se a Ritchie para aprimorar a linguagem. A nova versão chama-se C. Pelas suas características de portabilidade e estruturação já se torna popular entre os programadores. ~1980: A linguagem é padronizada pelo American National Standard Institute : surge o ANSI C. ~ 1990: A Borland International Co , fabricante de compiladores profissionais escolhe o C e o Pascal como linguagens de trabalho para o seu Integrated Development Enviroment (Ambiente Integrado de Desenvolvimento): surge o Turbo C. ~1992: O C se torna ponto de concordância entre teóricos do desenvolvimento da teoria de Object Oriented Programming (programação orientada a objetos): surge o C++.

1.3 Estrutura de um programa em C Um programa em C é constituído de:

  • um cabeçalho contendo as diretivas de compilador onde se definem o valor de constantes simbólicas, declaração de variáveis, inclusão de bibliotecas, declaração de rotinas, etc.
  • um bloco de instruções principal e outros blocos de rotinas.
  • documentação do programa: comentários. Programa Exemplo: O arquivo e0101.cpp contém um programa para calcular a raiz quadrada de um número real positivo:

1.3.1 Conjunto de caracteres Um programa fonte em C é um texto não formatado escrito em um editor de textos usando um o conjunto padrão de caracteres ASCII. A seguir estão os caracteres utilizados em C:

Caracteres válidos: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0

+ - * / \ = | &!? # % ( ) { } [ ] _ ‘ “. , : < >

Caracteres não válidos: @ $ ¨ á é õ ç

Os caracteres acima são válidos apenas em strings. Veja seção 2.1.4.

1.3.2 Comentários

Em C, comentários podem ser escritos em qualquer lugar do texto para facilitar a interpretação do algoritmo. Para que o comentário seja identificado como tal, ele deve ter um /* antes e um / depois. Observe que no exemplo e0101.cpp todo o cabeçalho esta dentro de um comentário. Exemplo: / esta e´ uma linha de comentário em C */

Observação: O C++ permite que comentários sejam escritos de outra forma: colocando um // em uma linha, o compilador entenderá que tudo que estiver a direita do símbolo é um comentário. Observe no programa exemplo e0101.cpp as linhas de comentários colocadas a direita dos comandos.

Exemplo: // este e´ um comentário valido apenas em C++

1.3.3 Diretivas de Compilação

Em C, existem comandos que são processados durante a compilação do programa. Estes comandos são genericamente chamados de diretivas de compilação. Estes comandos informam ao compilador do C basicamente quais são as constantes simbólicas usadas no programa e quais bibliotecas devem ser anexadas ao programa executável. A diretiva #include diz ao compilador para incluir na compilação do programa outros arquivos. Geralmente estes arquivos contem bibliotecas de funções ou rotinas do usuário. Voltaremos a trabalhas esta diretiva com mais detalhe no capítulo 5. A diretiva #define diz ao compilador quais são as constantes simbólicas usadas no programa. Veremos sobre esta diretiva no capitulo 2. 1.3.4 Declaração de variáveis Em C, como na maioria das linguagens, as variáveis devem ser declaradas no inicio do programa. Estas variáveis podem ser de vários tipos: int (inteiro), float (real de simples precisão) e outras que serão vistas no capitulo 2. No exemplo acima num, raiz, inf e sup são declaradas como variáveis reais, enquanto i é declarada como uma variável inteira.

Neste capitulo veremos como os dados constantes e variáveis são manipulados pela linguagem C. O que são constantes inteiras, reais, caracteres e strings. Quais são as regras de atribuição de nomes a variáveis e quais são os tipos de dados que O C pode manipular. Veremos também como são declaradas as variáveis e as constantes simbólicas usadas em um programa.

2.1 Constantes O C possui quatro tipos básicos de constantes: inteiras , de ponto flutuante , caracteres e strings. Constantes inteiras e de ponto flutuante representam números de um modo geral. Caracteres e strings representam letras e agrupamentos de letras (palavras).

2.1.1 Constantes inteiras

Uma constante inteira é um número de valor inteiro. De uma forma geral, constantes inteiras são seqüências de dígitos que representam números inteiros. Números inteiros podem ser escritos no formato decimal (base 10), hexadecimal (base 16) ou octal (base 8).

Uma constante inteira decimal é formada por uma seqüência de dígitos decimais: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Se a constante tiver dois ou mais dígitos, o primeiro não pode ser 0. Na verdade, pode ser 0 mas o compilador considerará esta constante como octal e não decimal.

Exemplo: A seguir são mostradas algumas constantes inteiras decimais válidas. 0 3 -45 26338 -7575 1010

Exemplo: Algumas constantes inteiras decimais inválidas.

  1. (ponto) 1,2 (vírgula) 045 (primeiro dígito é 0: não é constante decimal) 212-22-33 (caracter ilegal: -) Uma constante inteira hexadecimal é formada por uma seqüência de dígitos decimais: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (ou a, b, c, d, e). Uma constante hexadecimal deve começar por 0x. Neste caso, os dígitos hexadecimais podem ser minúsculos ou maiúsculos.

Exemplo: A seguir são mostrados algumas constantes inteiras hexadecimais válidas. 0x0 0x3 0x4f5a 0x2FFE OxABCD 0xAaFf

Exemplo: Algumas constantes inteiras hexadecimais inválidas.

0x3. (ponto) 0x1,e (vírgula) 0x ff (espaço) FFEE (não começa com 0x: não é constante hexadecimal) 0Xfg34 (caracter ilegal: g)

Uma constante inteira octal é formada por uma seqüência de dígitos octais: 0, 1, 2, 3, 4, 5, 6, 7. A constante octal deve ter o primeiro digito 0 para que o compilador a identifique como tal Exemplo: A seguir são mostrados algumas constantes octais válidas. 00 -03 045 02633 07575 -

Exemplo: Algumas constantes inteiras octais inválidas.

  1. (ponto) 01,2 (vírgula) 0 4 (espaço) 45 (primeiro digito não é 0: não é constante octal) 01784 (caracter ilegal: 8)

2.1.2 Constantes de ponto flutuante Números reais (não inteiros) são representados em base 10, por números com um ponto decimal e (opcionalmente) um expoente. Um número ponto flutuante deve ter um ponto decimal que não pode ser substituído por uma vírgula. Um número de ponto flutuante pode ser escrito em notação científica. Neste caso o x10 é substituído por e ou E. O número 1.23e4 representa 1.23 x 10 4 ou 12300. Exemplo: Números de ponto flutuante válidos. 0.234 125.65 .93 1.23e-9 -1.e2 10.6e18 -.853E+

A forma de representação de um número real em C é bastante flexível.

Exemplo: O número 314 pode ser representado por qualquer uma das seguintes formas:

  1. 3.14e2 +3.14e+2 31.4e1 .314E+3 314e 2.1.3 Constantes caracteres Uma constante caracter é uma letra ou símbolo colocado entre aspas simples. Exemplo: Abaixo estão representados algumas constantes caracteres. ’a’ ’b’ ’X’ ’&’ ’{’ ’ ’

Embora sejam visualizados como letras e símbolos as constantes caracteres são armazenadas internamente pelo computador como um número inteiro entre 0 e 255. O caracter ’A’ por exemplo, tem

  • O resto do identificador deve conter apenas letras, underscores ou dígitos ( 0 - 9 ). Não pode conter outros caracteres. Em C, os identificadores podem ter até 32 caracteres.
  • Em C, letras maiúsculas são diferentes de letras minúsculas: Por exemplo: MAX, max, Max são nomes diferentes para o compilador. Esta propriedade é chamada de case sensibility.

Exemplo: os nomes abaixo são válidos: abc, y24, VetorPontosMovimentoRobo, nota_1, TAM_MAX.

Exemplo: os nomes abaixo não são válidos: 3dia, vetor-1, pao&leite, iteração.

2.2.2 Palavras reservadas Existem certos nomes que não podem ser usados como identificadores. São chamadas as palavras reservadas e são de uso restrito da linguagem C (comandos, estruturas, declarações, etc.). O conjunto de palavras reservadas usadas em C é o seguinte: asm auto break case cdecl char class const continue _cs default delete do double _ds else enum _es extern _export far _fastcall float for friend goto huge if inline int interrupt _loadds long near new operator pascal private protected public register return _saveregs _seg short signed sizeof _ss static struct switch template this typedef union unsigned virtual void volatile while

Exemplo: Não é possível declarar estes conjunto de variáveis: do, re, mi, fa, sol, la, si old, new

Dos conjuntos acima, do e new são palavras reservadas. 2.3 Tipos de dados

Em C, como na maioria das linguagens, os dados são divididos tipos: inteiro, real, caracter, etc. Esta divisão se deve basicamente ao número de bytes reservados para cada dado. Cada tipo de dado possui um intervalo de valores permitidos.

2.3.1 Tipos básicos

Abaixo segue uma lista dos tipos básicos de dados permitidos em C. Os tipos char e int são inteiros e os tipos float e double são de ponto flutuante. Tipo Tamanho Intervalo Uso char 1 byte -128 a 127 número muito pequeno e caracter ASCII int 2 bytes -32768 a 32767 contador, controle de laço float 4 bytes 3.4e-38 a 3.4e38 real (precisão de 7 dígitos) double 8 bytes 1.7e-308 a 1.7e308 científico (precisão de 15 dígitos)

2.3.2 Declaração de variáveis Para que se possa usar uma variável em um programa, é necessário fazer uma declaração de variável antes. A declaração de variáveis simplesmente informa ao processador quais são os nomes utilizados para armazenar dados variáveis e quais são os tipos usados. Deste modo o processador pode alocar (reservar) o espaço necessário na memória para a manipulação destas variáveis. É possível declarar mais de uma variável ao mesmo tempo, basta separá-las por vírgulas (,).

Sintaxe: A sintaxe para declaração de variáveis é a seguinte: tipo variavel_1 [, variavel_2, ...] ;

Onde tipo é o tipo de dado e variavel_1 é o nome da variável a ser declarada. Se houver mais de uma variável, seus nomes são separados por vírgulas.

Exemplo: Declaração das variáveis: int i; int x,y,z; char letra; float nota_1,nota_2,media; double num;

No exemplo acima, i, x, y e z foram declaradas variáveis inteiras. Assim elas podem armazenar valores inteiros de -32768 até 32767. Do mesmo modo letra foi declarada como variável caracter podendo receber valores de -128 até 127 ou caracteres do conjunto padrão ASCII. As variáveis nota_1, nota_2 e media foram declaradas como ponto flutuante tipo float e num como ponto flutuante tipo double.

A declaração de variáveis é feita, em geral, dentro de uma rotina. Por exemplo, a rotina principal main(). Deste modo se diz que está se fazendo uma declaração de variáveis locais. Variáveis locais podem ser referenciadas apenas dentro da rotina dentro da qual foi declarada, neste caso a rotina main().

Sintaxe: Para declararmos uma variável para receber um conjunto caracter devemos escrever: char* var ;

Exemplo: No exemplo seguinte a variável nome foi declarada como conjunto caracter e em seguida recebe uma constante string. char* nome; nome = "João Carlos de Oliveira Andrade";

2.3.5 Inicialização de variáveis. Quando se faz a declaração de uma variável está se determinando que tipo de dado ela vai receber. É possível, em C, declarar uma variável e já armazenar nela um valor inicial. Chamamos este procedimento de inicialização de uma variável.

Sintaxe: A sintaxe para a inicialização de variáveis é: tipo var_1 = valor_1 [, var_2 = valor_2, ...] ;

Onde tipo é o tipo de dado, var_1 é o nome da variável a ser inicializada e valor_1 é o valor inicial da variável.

Exemplo: Inicialização de variáveis: int i = 0, j = 100; float num = 13.5; char* titulo = " Programa Teste "; No exemplo acima, i e j foram declaradas variáveis tipo int. O valor inicial de i é 0 e o de j é 100. Do mesmo modo num foi declarada como variável float com valor inicial de 13.5. Tambem a variavel titulo foi declarada como um conjunto caracter e recebeu como conteudo inicial a string " Programa Teste ".

2.3.6 Conversão de tipo ( Casting )

Algumas vezes queremos, momentaneamente, modificar o tipo de dado representado por uma variável, isto é, queremos que o dado seja apresentado em um tipo diferente do qual a variável foi inicialmente declarada. Por exemplo: declaramos uma variável como int e queremos, momentaneamente, que seu conteúdo seja apresentado como float. Este procedimento é chamado de conversão de tipo ou casting (moldagem, em inglês). Sintaxe: A sintaxe da instrução de conversão de tipo é: ( tipo ) variável

onde tipo é o nome do tipo ao qual queremos converter o dado armazenado em variável.

Exemplo: observe a conversão de tipo feita no exemplo abaixo: int num; float valor = 13.0; num = (int)valor % 2; No exemplo acima a variável valor foi declarada inicialmente como sendo do tipo float recebendo o valor inicial 13.0. Logo em seguida o conteúdo de valor é convertido para o tipo int para realizar a operação módulo (%) com o inteiro 2. Aqui a conversão é necessária pois a operação módulo somente pode ser feita com inteiros. É importante salientar que a conversão de tipo é feita com o dado armazenado em uma variável mas a variável continua tendo o seu tipo original. No exemplo acima a variável valor e os dados nela armazenados continuam sendo do tipo float após a conversão. Veremos na seção 3.1 uma explicação mais detalhada do uso da conversão de tipos.

2.4 Constantes Simbólicas

Muitas vezes identificamos uma constante numérica por um símbolo: Pi = 3,14159 por exemplo. Podemos definir um nome simbólico para esta constante, isto é, podemos definir uma constante simbólica que represente valor.

2.4.1 Constantes definidas pelo programador

O programador pode definir constantes simbólicas em qualquer programa.

Sintaxe: A sintaxe da instrução de definição de uma constante simbólica é: #define nome valor

Onde #define é uma diretiva de compilação que diz ao compilador para trocar as ocorrências do texto nome por valor. Observe que não há ; no final da instrução pois trata-se de um comando para o compilador e não para o processador. A instrução #define deve ser escrita antes da instrução de declaração da rotina principal. Exemplo: a seguir definimos algumas constantes simbólicas. #define PI 3. #define ON 1 #define OFF 0 #define ENDERECO 0x

conio.h GREEN 2 valor da cor (verde) conio.h CYAN 3 valor da cor (cyan) conio.h RED 4 valor da cor (vermelho) conio.h MAGENTA 5 valor da cor (magenta) limits.h INT_MAX 32767 limite superior do tipo int limits.h INT_MIN -32768 limite inferior do tipo int Cada uma das constantes acima esta definida em uma biblioteca. Uma biblioteca, em C, é um arquivo pré-compilado chamado arquivo header (cabeçalho, em inglês). Em cada biblioteca estão agrupadas constantes e funções semelhantes (veja seção 3.7.2). Por exemplo, constantes e funções matemáticas estão guardadas na biblioteca math.h ( mathematical functions ), constantes e funções de manipulação teclado e monitor estão guardadas na biblioteca conio.h ( console input and output ). Para que se possa usar a constante simbólica em um programa é preciso incluir a biblioteca na compilação do programa. Sintaxe: A sintaxe de inclusão de bibliotecas é a seguinte: #include < nome_bib >

onde nome_bib é o nome da biblioteca que se deseja incluir. Esta instrução deve ser escrita antes do programa principal.

Exemplo: O programa abaixo usa a constante predefinida M_PI para calcular a área de um disco circular. #include <math.h> void main(){ float area, raio = 5.0; área = M_PI * raio * raio; }

  1. Operadores, Expressões e Funções

Um programa tem como característica fundamental a capacidade de processar dados. Processar dados significa realizar operações com estes dados. As operações a serem realizadas com os dados podem ser determinadas por operadores ou funções. Os operadores podem ser de atribuição, aritméticos, de atribuição aritmética, incrementais, relacionais, lógicos e condicionais.

Exemplo: o símbolo + é um operador que representa a operação aritmética de adição. O identificador sqrt() é uma função que representa a operação de extrair a raiz quadrada de um número.

Uma expressão é um arranjo de operadores e operandos. A cada expressão válida é atribuído um valor numérico.

Exemplo: 4 + 6 é uma expressão cujo valor é 10. A expressão sqrt(9.0) tem valor 3.0.

3.1 Operador de Atribuição

A operação de atribuição é a operação mais simples do C. Consiste de atribuir valor de uma expressão a uma variável.

Sintaxe: A sintaxe da operação de atribuição é a seguinte:

identificador = expressão ; onde identificador é o nome de uma variável e expressão é uma expressão válida (ou outro identificador).

Exemplo: A seguir são mostradas algumas atribuições válidas: a = 1; delta = b * b - 4. * a * c; i = j;

Observe que o símbolo de atribuição ( = ) não tem o mesmo significado que o usual da matemática que representa a igualdade de valores. Este símbolo, em C, representa a atribuição do valor calculado em expressão a variável identificador. Em pseudo-linguagem o operador de