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 de C , Notas de estudo de Informática

Apostilia Adotada pelo Professor de LABORATORIO de PROGRAMAÇÃO..

Tipologia: Notas de estudo

2011

Compartilhado em 05/04/2011

hegel-farias-4
hegel-farias-4 🇧🇷

2 documentos

1 / 203

Toggle sidebar

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

Não perca as partes importantes!

bg1
Curso de Linguagem C
Em Constru¸ao
v0.001
Adriano Joaquim de Oliveira Cruz
Instituto de Matem´atica
ucleo de Computa¸ao Eletrˆonica
UFRJ
c
2009 Adriano Cruz
20 de Agosto de 2009
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 de C e outras Notas de estudo em PDF para Informática, somente na Docsity!

Curso de Linguagem C

Em Constru¸c˜ao

v0.

Adriano Joaquim de Oliveira Cruz

Instituto de Matem´atica

N´ucleo de Computa¸c˜ao Eletrˆonica

UFRJ

©c2009 Adriano Cruz

20 de Agosto de 2009

8 CONTE UDO´

10 LISTA DE FIGURAS

Lista de Tabelas

Lista de Algoritmos

14 LISTA DE ALGORITMOS

  • 1 Introdu¸c˜ao
    • 1.1 Sucessos e Fracassos da Computa¸c˜ao
    • 1.2 Um Pouco da Hist´oria da Computa¸c˜ao
      • 1.2.1 O In´ıcio
      • 1.2.2 A Era Moderna
      • 1.2.3 O Desenvolvimento durante as Grandes Guerras
      • 1.2.4 As Gera¸c˜oes
    • 1.3 O Hardware
      • 1.3.1 Microcomputadores
      • 1.3.2 Mem´orias
      • 1.3.3 Bits e Bytes
      • 1.3.4 Perif´ericos
    • 1.4 O Software
    • 1.5 Um programa em C
    • 1.6 Exerc´ıcios
  • 2 Algoritmos
    • 2.1 Introdu¸c˜ao
    • 2.2 Primeiros Passos
    • 2.3 Representa¸c˜ao
      • 2.3.1 Linguagem Natural
      • 2.3.2 Fluxogramas
      • 2.3.3 Pseudo-Linguagem
    • 2.4 Modelo de von Neumann
    • 2.5 Estruturas B´asicas de Algoritmos
      • 2.5.1 Comandos de leitura
      • 2.5.2 Comandos de escrita
      • 2.5.3 Express˜oes
      • 2.5.4 Comandos de atribui¸c˜ao 4 CONTE UDO´
      • 2.5.5 Comandos de controle
      • 2.5.6 Comandos de repeti¸c˜ao
    • 2.6 Exemplos de Algoritmos
    • 2.7 Exerc´ıcios
  • 3 Tipos de Dados, Constantes e Vari´aveis
    • 3.1 Introdu¸c˜ao
    • 3.2 Tipos de Dados
      • 3.2.1 Tipos B´asicos
      • 3.2.2 Modificadores de tipos
    • 3.3 Constantes Num´ericas
      • 3.3.1 Constantes Inteiras na base
      • 3.3.2 Constantes Inteiras Octais
      • 3.3.3 Constantes Inteiras Hexadecimais
      • 3.3.4 Convers˜ao entre Bases
      • 3.3.5 Constantes em Ponto Flutuante
    • 3.4 Constantes Caracteres
      • 3.4.1 Constantes Cadeias de Caracteres
    • 3.5 Vari´aveis
      • 3.5.1 Nomes das Vari´aveis
      • 3.5.2 Declara¸c˜ao de vari´aveis
      • 3.5.3 Atribui¸c˜ao de valores
    • 3.6 Exerc´ıcios
  • 4 Entrada e Sa´ıda pelo Console
    • 4.1 Introdu¸c˜ao
    • 4.2 Biblioteca Padr˜ao
    • 4.3 Sa´ıda - A Fun¸c˜ao printf
      • 4.3.1 C´odigos de Convers˜ao
    • 4.4 Entrada - A Fun¸c˜ao scanf
    • 4.5 Lendo e Imprimindo Caracteres
      • 4.5.1 Fun¸c˜oes getchar e putchar
      • 4.5.2 Lendo e Imprimindo Cadeias de Caracteres
      • 4.5.3 Lendo e Imprimindo cadeias com scanf e printf
      • 4.5.4 Lendo e Imprimindo cadeias com gets e puts
      • 4.5.5 A Fun¸c˜ao fgets
    • 4.6 Exerc´ıcios
  • CONTE UDO´
  • 5 Operadores e Express˜oes
    • 5.1 Introdu¸c˜ao
    • 5.2 Operador de Atribui¸c˜ao
    • 5.3 Operadores Aritm´eticos
    • 5.4 Operadores Relacionais e L´ogicos
      • 5.4.1 Operadores Relacionais
      • 5.4.2 Operadores L´ogicos
    • 5.5 Operadores com Bits
    • 5.6 Operadores de Atribui¸c˜ao Composta
    • 5.7 Operador v´ırgula
    • 5.8 Operador sizeof()
    • 5.9 Convers˜ao de Tipos
    • 5.10 Regras de Precedˆencia
    • 5.11 Exerc´ıcios
  • 6 Comandos de Controle
    • 6.1 Introdu¸c˜ao
    • 6.2 Blocos de Comandos
    • 6.3 Comandos de Teste
      • 6.3.1 Comando if
      • 6.3.2 Comando switch
      • 6.3.3 Comando Tern´ario
    • 6.4 La¸cos de Repeti¸c˜ao
      • 6.4.1 Comando for
      • 6.4.2 Comando while
      • 6.4.3 Comando do-while
    • 6.5 Comandos de Desvio
      • 6.5.1 Comando break
      • 6.5.2 Comando continue
      • 6.5.3 Comando goto
      • 6.5.4 Fun¸c˜ao exit()
      • 6.5.5 Comando return
    • 6.6 Exerc´ıcios
  • 7 Vetores e Cadeias de Caracteres 6 CONTE UDO´
    • 7.1 Introdu¸c˜ao
    • 7.2 Declara¸c˜ao de Vetores Unidimensionais
    • 7.3 Cadeias de Caracteres
    • 7.4 Declara¸c˜ao de Vetores Multidimensionais
    • 7.5 Vetores de Cadeias de Caracteres
    • 7.6 Inicializa¸c˜ao de Vetores e Matrizes
    • 7.7 Exerc´ıcios
  • 8 Fun¸c˜oes
    • 8.1 Introdu¸c˜ao
    • 8.2 Forma Geral
    • 8.3 Prot´otipos de Fun¸c˜oes
    • 8.4 Escopo de Vari´aveis
      • 8.4.1 Vari´aveis Locais
    • 8.5 Vari´aveis Globais
    • 8.6 Parˆametros Formais
      • 8.6.1 Passagem de Parˆametros por Valor
      • 8.6.2 Passagem de Parˆametros por Referˆencia
      • 8.6.3 Passagem de Vetores e Matrizes
    • 8.7 O Comando return
    • 8.8 Recurs˜ao
    • 8.9 Argumentos - argc e arga
    • 8.10 Exerc´ıcios
  • 9 Ponteiros
    • 9.1 Introdu¸c˜ao
    • 9.2 Opera¸c˜oes com Ponteiros
      • 9.2.1 Declara¸c˜ao de Ponteiros
      • 9.2.2 Os Operadores Especiais para Ponteiros
      • 9.2.3 Atribui¸c˜ao de Ponteiros
      • 9.2.4 Incrementando e Decrementando Ponteiros
      • 9.2.5 Compara¸c˜ao de Ponteiros
    • 9.3 Ponteiros e Vetores
    • 9.4 Ponteiros e Cadeias de Caracteres
    • 9.5 Aloca¸c˜ao Dinˆamica de Mem´oria
    • 9.6 Ponteiros e Matrizes
    • 9.7 Vetores de Ponteiros
    • 9.8 Ponteiros para Ponteiros
    • 9.9 Exerc´ıcios
  • CONTE UDO´
  • 10 Estruturas
    • 10.1 Introdu¸c˜ao
    • 10.2 Defini¸c˜oes B´asicas
    • 10.3 Atribui¸c˜ao de Estruturas
    • 10.4 Matrizes de Estruturas
    • 10.5 Estruturas e Fun¸c˜oes
    • 10.6 Ponteiros para Estruturas
    • 10.7 Exerc´ıcios
  • 11 Entrada e Sa´ıda por Arquivos
    • 11.1 Introdu¸c˜ao
    • 11.2 Fluxos de Dados
      • 11.2.1 Fluxos de Texto
      • 11.2.2 Fluxo Bin´ario
      • 11.2.3 Arquivos
    • 11.3 Fun¸c˜oes de Entrada e Sa´ıda
    • 11.4 In´ıcio e Fim
      • 11.4.1 Abrindo um Arquivo
      • 11.4.2 Fechando um Arquivo
      • 11.4.3 Fim de Arquivo
      • 11.4.4 Volta ao In´ıcio
    • 11.5 Lendo e Escrevendo Caracteres
    • 11.6 Testando Erros
    • 11.7 Lendo e Escrevendo Cadeias de Caracteres
    • 11.8 Entrada e Sa´ıda Formatada
    • 11.9 Lendo e Escrevendo Arquivos Bin´arios
    • 11.10Exerc´ıcios
  • A Tabela ASCII
  • B Palavras Reservadas
  • 1.1 Fotografia de um circuito integrado de microprocessador Pentium.
  • 1.2 Imagem de um ´abaco.
  • 1.3 Blaise Pascal
  • 1.4 Charles Babbage
  • 1.5 Fotografia da Difference Engine
  • 1.6 Computador Eniac
  • 1.7 Diagrama B´asico de um Computador Digital
  • 1.8 N´ıveis de hierarquia da mem´oria de um computador.
  • 1.9 Tamanho de Bits, Bytes e Palavras
  • 1.10 Ciclo de desenvolvimento de um programa.
  • 2.1 S´ımbolos mais comumente usados em fluxogramas.
  • 2.2 Fluxograma para resolver uma equa¸c˜ao do primeiro grau.
  • 2.3 Modelo de mem´oria
  • 2.4 Fluxograma do comando se ent~ao sen~ao.
  • 2.5 Fluxograma para decidir se deve levar um guarda-chuva.
  • 2.6 Fluxograma do comando enquanto.
  • 7.1 Mapa de mem´oria de uma matriz.
  • 9.1 Mapa de mem´oria com duas vari´aveis e ponteiro.
  • 9.2 Ponteiro apontando para ´area de mem´oria contendo vetor.
  • 9.3 Declara¸c˜ao de ponteiros.
  • 9.4 Atribui¸c˜ao de endere¸co de uma vari´avel a um ponteiro.
  • 9.5 Uso de um ponteiro para copiar valor de uma vari´avel.
  • 9.6 Exemplos de atribui¸c˜oes de ponteiros.
  • 9.7 Armazenamento de matrizes com vetores de ponteiros.
  • 11.1 Fluxos de dados.
  • 1.1 Transistores por circuito integrado nos microprocessadores da Intel
  • 1.2 Tempo de execu¸c˜ao das instru¸c˜oes aritm´eticas no ENIAC
  • 1.3 Exemplos de Microprocessadores
  • 1.4 Abrevia¸c˜oes usadas em referˆencias `as mem´orias.
  • 1.5 Exemplos de perif´ericos
  • 2.1 Operadores Aritm´eticos.
  • 3.1 Tipos de dados definidos pelo Padr˜ao ANSI C.
  • 3.2 Constantes Inteiras na Base
  • 3.3 Constantes octais
  • 3.4 Constantes hexadecimais
  • 3.5 Constantes em ponto flutuante
  • 3.6 Exemplos de constantes caractere
  • 3.7 Exemplos de caracteres invis´ıveis.
  • 4.1 C´odigos de Convers˜ao para leitura e entrada de dados.
  • 5.1 Operadores aritm´eticos.
  • 5.2 Operadores Relacionais.
  • 5.3 Operador L´ogico E.
  • 5.4 Operador L´ogico OU.
  • 5.5 Operador L´ogico N~AO.
  • 5.6 Precedˆencia dos operadores l´ogicos e relacionais.
  • 5.7 Operadores com bits.
  • 5.8 Operador L´ogico OU.
  • 5.9 Precedˆencia dos operadores.
  • 7.1 Passos executados durante o algoritmo da bolha.
  • 2.1 Exemplo de Algoritmo.
  • 2.2 Algoritmo para resolver uma equa¸c˜ao do primeiro grau.
  • 2.3 Algoritmo para calcular a m´edia das notas de um aluno.
  • 2.4 Algoritmo para calcular a maior nota de um grupo de notas.
  • 2.5 Modelo de mem´oria e funcionamento de um algoritmo
  • 2.6 Comando se em pseudo-linguagem
  • 2.7 Algoritmo para decidir o que fazer no domingo.
  • 2.8 Algoritmo para decidir se deve levar um guarda-chuva.
  • 2.9 Algoritmo para ler 10 n´umeros e imprimir se s˜ao pares ou n˜ao.
  • 2.10 Algoritmo para ler n´umeros e imprimir se s˜ao pares ou n˜ao.
  • 2.11 Algoritmo para calcular a maior nota de uma turma de 25 alunos.
  • 2.12 Algoritmo para calcular a nota m´edia de uma turma de 25 alunos.
  • 2.13 Algoritmo para calcular a maior temperatura do ano.
  • 3.1 Algoritmo para converter inteiros na base 10 para uma base b.
  • 1.1 Exemplo de Programa em C.
  • 4.1 Exemplo de impress˜ao de resultados
  • 4.2 Exemplo de justifica¸c˜ao de resultados.
  • 4.3 Exemplo de uso de especificador de precis˜ao.
  • 4.4 Exemplo de uso de scanf.
  • 4.5 Exemplo de uso de getchar e putchar.
  • 4.6 Exemplo de uso de getchar e putchar.
  • 4.7 Exemplo de uso de printf e scanf na leitura de cadeias.
  • 4.8 Exemplo de uso de puts e gets na leitura de cadeias.
  • 5.1 Exemplo de operadores de deslocamento.
  • 5.2 Exemplo do operador sizeof.
  • 6.1 Exemplo de comandos if.
  • 6.2 Programas com ifs em escada e aninhados.
  • 6.3 Exemplo de switch.
  • 6.4 Exemplo de comando tern´ario.
  • 6.5 Exemplo de comando for.
  • 6.6 Exemplo de comando for com testes sobre outras vari´aveis.
  • 6.7 Exemplo de comando for sem altera¸c˜ao da vari´avel de controle.
  • 6.8 Exemplo de comando for sem teste de fim.
  • 6.9 Comando for aninhados.
  • 6.10 Comando while com uma fun¸c˜ao.
  • 7.1 Exemplo de vetores.
  • 7.2 Produto escalar de dois vetores.
  • 7.3 Ordena¸c˜ao pelo m´etodo da bolha.
  • 7.4 Exemplos de fun¸c˜oes para cadeias.
  • 7.5 Leitura de uma matriz.
  • 7.6 Multiplica¸c˜ao de duas matrizes.
  • 7.7 Leitura de um vetor de nomes.
  • 7.8 Exemplos de tratamento de vetores. 16 LISTINGS
  • 7.9 Exemplos de tratamento de vetores.
  • 8.1 Exemplo de prot´otipos.
  • 8.2 Exemplos de vari´aveis locais.
  • 8.3 Defini¸c˜ao de vari´avel dentro de um bloco.
  • 8.4 Defini¸c˜ao de vari´avel global.
  • 8.5 Exemplo de passagem por valor.
  • 8.6 Uso indevido de vari´aveis locais.
  • 8.7 Passagem de vetor com dimens˜oes.
  • 8.8 Passagem de vetores sem dimens˜oes.
  • 8.9 Fun¸c˜ao recursiva para calcular xn.
  • 8.10 Uso de argc e arga.
  • 9.1 Exemplo de atribui¸c˜ao de ponteiros.
  • 9.2 Exemplos de opera¸c˜oes com ponteiros.
  • 9.3 Exemplo de subtra¸c˜ao de ponteiros.
  • 9.4 Exemplo de compara¸c˜ao de ponteiros.
  • 9.5 Exemplo de altera¸c˜oes inv´alidas sobre ponteiros.
  • 9.6 Exemplo de nota¸c˜oes de vetores.
  • 9.7 Exemplo de ponteiro vari´avel.
  • 9.8 Exemplo de ponteiro para cadeia de caracteres.
  • 9.9 Exemplo de c´opia de cadeias de caracteres.
  • 9.10 Exemplo de uso de calloc e free.
  • 9.11 Exemplo de uso de malloc.
  • 9.12 Exemplo de matriz normal sem uso de ponteiros.
  • 9.13 Exemplo de matriz mapeada em um vetor.
  • 9.14 Exemplo de uso de vetor de ponteiros.
  • 9.15 Exemplo de uso de ponteiros para ponteiros.
  • 9.16 Exemplo de uso de ponteiros para ponteiros usando fun¸c˜oes.
  • 9.17 Continua¸c˜ao do exemplo 9.16.
  • 10.1 Defini¸c˜ao de uma estrutura.
  • 10.2 Atribui¸c˜ao de Estruturas.
  • 10.3 Ordena¸c˜ao de Estruturas.
  • 10.4 Passando elementos para fun¸c˜oes.
  • 10.5 Passagem de estruturas para fun¸c˜oes.
  • 10.6 Fun¸c˜ao que ordena estruturas.
  • 10.7 Aloca¸c˜ao de espa¸co para estruturas.
  • 10.8 Aloca¸c˜ao de espa¸co para vetores de estruturas.
  • LISTINGS
    • 10.9 Listagem do exercicio 3.
    • 11.1 Uso da fun¸c˜ao feof().
    • 11.3 Exemplo de leitura e escrita de caracteres.
    • 11.2 Exemplo de leitura e escrita de caracteres.
    • 11.4 Uso da fun¸c˜ao ferror().
    • 11.5 Exemplo de leitura e escrita de cadeias de caracteres.
    • 11.6 Exemplo de leitura e escrita de dados formatados.
    • 11.7 Exemplo de leitura e escrita na forma bin´aria.
    • 11.8 Exemplo de leitura e escrita de estruturas.

Cap´ıtulo 1

Introdu¸c˜ao

1.1 Sucessos e Fracassos da Computa¸c˜ao

Os objetivos principais deste Cap´ıtulo s˜ao mostrar para o aluno iniciante alguns aspectos da hist´oria da computa¸c˜ao e definir, informalmente, termos e palavras- chave que os profissionais da ´area de computa¸c˜ao usam no seu dia a dia. Adriano Cruz ©c. A hist´oria do desenvolvimento dos computadores tem sido impressionante. O avan¸co da tecnologia e a presen¸ca da computa¸c˜ao na nossa vida s˜ao ineg´aveis. Embora a hist´oria deste fant´astico desenvolvimento seja recente e bem documen- tada, h´a lacunas e controv´ersias impressionantes sobre diversos pontos. Neste cap´ıtulo iremos ver hist´orias de espionagem e brigas na justi¸ca por roubo de id´eias. H´a oportunidades perdidas e gente que soube aproveitar a sua chance. H´a verdades estabelecidas que tiveram de ser revistas. O avan¸co na tecnologia dos computadores se deu em passos t˜ao largos que os primeiros computadores parecem t˜ao distantes no tempo quanto a Pr´e-Hist´oria. O aumento de velocidade, desde os anos 40, foi da ordem de v´arias ordens de grandeza, enquanto que o custo dos computadores caiu de milh˜oes de d´olares para valores em torno de centenas de d´olares. As primeiras m´aquinas tinham mi- lhares de v´alvulas, ocupavam ´areas enormes e consumiam quilowatts de energia. O microprocessador Pentium, lan¸cado em 1993, tinha em torno de 3,1 milh˜oes de transistores, ocupava uma ´area de aproximadamente 25 cm^2 e consumia alguns watts de energia, custando aproximadamente 1000 d´olares, somente o microprocessador. A Figura 1.1 mostra a imagem de um circuito integrado de microprocessador Pentium. No entanto, esta hist´oria de redu¸c˜ao de tamanho, aumento de velocidade e diminui¸c˜ao de gasto de potˆencia, pode, para alguns pesquisadores, j´a ter uma data fixada para terminar. Em 1965, Gordon Moore, um dos fundadores da In- tel, fabricante do Pentium e uma dos maiores fabricantes de circuitos integrados do mundo, enunciou o que ficou conhecido como a Lei de Moore: “Cada novo circuito integrado ter´a o dobro de transistores do anterior e ser´a lan¸cado dentro de um intervalo de 18 a 24 meses.” Moore achava que esta lei seria v´alida so- mente at´e 1975, no entanto, ela continua v´alida at´e hoje. Na tabela 1.1, pode-se observar a evolu¸c˜ao dos microprocessadores usados em nossos computadores.

19

20 CAP´ITULO 1. INTRODUC¸ AO˜

Figura 1.1: Fotografia de um circuito integrado de microprocessador Pentium.

Ano Processador Transistores 1971 4004 2. 1972 8008 2. 1974 8080 5. 1982 80286 120. 1985 80386 275. 1989 80486 DX 1.180. 1993 Pentium 3.100. 1997 Pentium II 7.500. 1999 Pentium III 24.000. 2000 Pentium 4 42.000.

Tabela 1.1: Transistores por circuito integrado nos microprocessadores da Intel

Os transistores, que comp˜oem os circuitos eletrˆonicos, est˜ao diminu´ıdo de tamanho, e estamos nos aproximando da fronteira final, os el´etrons. J´a se houve falar em tamanho de transistores medidos em n´umeros de el´etrons. Devemos nos lembrar que toda a tecnologia atual est´a baseada em fluxo de el´etrons, ou seja uma corrente el´etrica. Os fios conduzem correntes de el´etrons e os transistores controlam este fluxo. Se o tamanho diminuir al´em dos el´etrons estaremos em outro dom´ınio.

No entanto, na hist´oria da computa¸c˜ao, muitas promessas n˜ao foram cum- pridas e falhas gigantescas aconteceram. Como em diversas quest˜oes, artistas geniais, apontam o que n˜ao conseguimos ou n˜ao queremos ver e mostram que o rei est´a nu. H´a uma frase de Picasso que diz: “Computadores s˜ao est´upidos, eles somente conseguem responder perguntas”. Esta frase exp˜oe com ironia um fracasso da comunidade de computa¸c˜ao que havia prometido criar rapida- mente computadores inteligentes, computadores que poderiam questionar-se e nos questionar. Muitos acreditaram nesta promessa e muitos livros de fic¸c˜ao ci- ent´ıfica foram publicados em que este tipo de computador estaria dispon´ıvel em um futuro muito pr´oximo. Com not´avel exemplo podemos citar o filme “2001 - Uma Odiss´eia no Espa¸co”, de Stanley Kubrik que estreou em 1968 e foi baseado no conto “The Sentinel”, escrito em 1950 por Arthur Clark, um dos mestres da fic¸c˜ao cient´ıfica. Neste filme o enlouquecido computador HAL 9000, que era capaz de ver, falar, raciocinar etc, mata quase todos os tripulantes de uma nave