Você está na página 1de 210

Curso de Linguagem C Em Constru¸c˜ao

v0.001

Adriano Joaquim de Oliveira Cruz Instituto de Matem´atica N´ucleo de Computa¸c˜ao Eletrˆonica UFRJ c 2009 Adriano Cruz

21 de Janeiro de 2009

2

Conte´udo

1 Introdu¸c˜ao

19

1.1 Sucessos e Fracassos da Computa¸c˜ao

 

19

1.2 Um Pouco da Hist´oria da Computa¸c˜ao

 

2 1

1.2.1

O In´ıcio

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

21

1.2.2 A Era Moderna

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

22

1.2.3 O Desenvolvimento durante as Grandes Guerras

 

24

1.2.4 As Gera¸c˜oes .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

27

1.3 O Hardware .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

27

1.3.1 Microcomputadores

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

1.3.2 Mem´orias

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

30

1.3.3 Bits e Bytes .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

32

1.3.4 Perif´ericos

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

1.4 O Software

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

1.5 Um programa em C

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

39

1.6 Exerc´ıcios

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

40

2 Algoritmos

41

2.1 Introdu¸c˜ao

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

2.2 Primeiros Passos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

2.3 Representa¸c˜ao

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

44

2.3.1 Linguagem Natural

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

45

2.3.2 Fluxogramas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

45

2.3.3 Pseudo-Linguagem

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

46

2.4 Modelo de von Neumann

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

48

2.5 Estruturas B´asicas de Algoritmos

 

49

3

 

´

4

CONTE UDO

 

2.5.1 Comandos de leitura

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

2.5.2 Comandos de escrita

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

2.5.3 Express˜oes

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

51

2.5.4 Comandos de atribui¸c˜ao

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

53

2.5.5 Comandos de controle

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

54

2.5.6 Comandos de repeti¸c˜ao

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

55

2.6 Exemplos de Algoritmos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

57

2.7 Exerc´ıcios

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

58

3

Tipos de Dados, Constantes e Vari´aveis

 

63

3.1 Introdu¸c˜ao .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

63

3.2 Tipos de Dados

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

63

3.2.1 Tipos B´asicos .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

63

3.2.2 Modificadores de tipos

 

.

.

.

.

.

.

.

64

3.3 Constantes Num´ericas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

64

3.3.1 Constantes Inteiras na base 10

 

66

3.3.2 Constantes Inteiras Octais

 

.

.

.

.

.

.

.

.

.

67

3.3.3 Constantes Inteiras Hexadecimais

 

67

3.3.4 Convers˜ao entre Bases

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

68

3.3.5 Constantes em Ponto Flutuante

 

68

3.4 Constantes Caracteres

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

70

3.4.1

Constantes Cadeias de Caracteres

 

70

3.5 Vari´aveis .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

71

3.5.1 Nomes das Vari´aveis

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

71

3.5.2 Declara¸c˜ao de vari´aveis

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

72

3.5.3 Atribui¸c˜ao de valores

 

.

.

.

.

.

.

.

.

.

73

3.6 Exerc´ıcios

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

73

4

Entrada e Sa´ıda pelo Console

 

75

4.1 Introdu¸c˜ao .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

75

4.2 Biblioteca Padr˜ao .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

75

4.3 Sa´ıda - A Fun¸c˜ao printf

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

76

4.3.1

C´odigos de Convers˜ao

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

77

4.4 Entrada - A Fun¸c˜ao scanf

 

.

.

.

.

.

.

.

.

.

79

4.5 Lendo e Imprimindo Caracteres

 

82

 

´

CONTE UDO

 

5

 

4.5.1

Fun¸c˜oes getchar e putchar

 

82

4.5.2

Lendo e Imprimindo Cadeias de Caracteres

 

83

4.5.3

Lendo e Imprimindo cadeias com scanf e printf

 

84

4.5.4

Lendo e Imprimindo cadeias com gets e puts

 

84

4.5.5

A Fun¸c˜ao fgets

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

86

4.6

Exerc´ıcios

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

86

5 Operadores e Express˜oes

 

89

5.1

Introdu¸c˜ao

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

89

5.2

Operador de Atribui¸c˜ao

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

89

5.3

Operadores Aritm´eticos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

90

5.4

Operadores Relacionais e L´ogicos

 

91

5.4.1 Operadores Relacionais

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

91

5.4.2 Operadores L´ogicos

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

92

5.5

Operadores com Bits .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

94

5.6

Operadores de Atribui¸c˜ao Composta

 

96

5.7

Operador v´ırgula

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

96

5.8

Operador sizeof()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

97

5.9

Convers˜ao de Tipos .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

97

5.10

Regras de Precedˆencia

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

99

5.11

Exerc´ıcios

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

99

6 Comandos de Controle

 

101

6.1 Introdu¸c˜ao

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

101

6.2 Blocos de Comandos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

101

6.3 Comandos de Teste .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

102

 

6.3.1 Comando if

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

102

6.3.2 Comando switch .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

103

6.3.3 Comando Tern´ario

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

106

6.4 La¸cos de Repeti¸c˜ao .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

106

 

6.4.1 Comando for .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

106

6.4.2 Comando while

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

111

6.4.3 Comando do-while

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

6.5 Comandos de Desvio

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

 

6.5.1

Comando break

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

 

´

6

CONTE UDO

 

6.5.2 Comando continue

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

114

6.5.3 Comando goto

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

114

6.5.4 Fun¸c˜ao exit()

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

114

6.5.5 Comando return

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

115

 

6.6

Exerc´ıcios

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

115

7

Vetores e Cadeias de Caracteres

 

117

7.1

Introdu¸c˜ao .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.