disciplina: introdução a programação. iprj/uerj professora ... · passo 1 - receber os três...

21
1 Disciplina: Introdução a Programação. IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer Índice: Aula1 - Introdução Programa Algoritmo Aula 2 - Variáveis Tipos de dados Identificadores Aula 3 - Programação Estruturada Estrutura Sequencial em algoritmos - Declaração de variáveis - Comando de atribuição - Comando de entrada - Comando de saída Estrutura Sequencial em C/C++ - Declaração de variáveis - Comando de atribuição - Comando de entrada - Comando de saída - Comentário Aula 4 - Operadores em C/C++ Aula 5 - Funções pré-definidas em C/C++ Palavras reservadas em C/C++

Upload: dinhtuyen

Post on 02-Dec-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

1

Disciplina: Introdução a Programação.

IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer

Índice:

Aula1 - Introdução

Programa Algoritmo

Aula 2 - Variáveis

Tipos de dados Identificadores

Aula 3 - Programação Estruturada

Estrutura Sequencial em algoritmos

- Declaração de variáveis - Comando de atribuição

- Comando de entrada - Comando de saída

Estrutura Sequencial em C/C++ - Declaração de variáveis

- Comando de atribuição - Comando de entrada

- Comando de saída - Comentário

Aula 4 - Operadores em C/C++

Aula 5 - Funções pré-definidas em C/C++

Palavras reservadas em C/C++

Page 2: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

2

Aula 1: Introdução

Computador digital:

Dispositivo eletrônico que recebe, manipula e armazena informações

(dados). Processa vários tipos diferentes de dados: dados numéricos, caracteres (nomes,

endereços,...), gráficos (tabelas, desenhos,...) e som. Aplicações técnicas e científicas preocupam-se fundamentalmente com dados numéricos, enquanto aplicações

comerciais normalmente envolvem processamento tanto numérico como de caractere. Possui duas partes diferentes que trabalham juntas: o hardware (partes físicas) e o

software (programas).

Programa: --> Conjunto de instruções que descrevem uma tarefa a ser realizada por um

computador, escritas numa linguagem precisa chamada linguagem de programação.

Estas instruções são traduzidas em um compilador, para uma linguagem de baixo nível, a linguagem de máquina, para que o computador possa entender.

As linguagens de programação servem para escrever programas que permitem a

comunicação entre usuário e máquina.

Um programa armazenado na memória pode ser executado a qualquer momento.

A execução de um programa produz os seguintes efeitos:

1. Um conjunto de informações, denominados dados de entrada, será inserido no

computador (através de teclado, pen drive, etc..) e armazenado em uma parte da memória do computador.

2. Os dados de entrada serão, então, processados para produzir os resultados

desejados, conhecidos como dados de saída.

3. Os dados de saída, e talvez alguns dos dados de entrada, serão impressos em

papel ou mostrados na tela do vídeo, ou ainda armazenados em arquivos.

Os dados de entrada são convertidos em informação significativa:

DADOS: valores brutos e números

INFORMAÇÃO: dados processados

Exemplo: Um computador foi programado para calcular a área de um círculo utilizando a fórmula πr2, o valor numérico do raio r é o dado de entrada. Os

seguintes passos serão executados:

Page 3: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

3

1. Ler o valor numérico do raio do círculo.

2. Calcular o valor da área, utilizando a fórmula acima. Esse valor será armazenado, juntamente com o dado de entrada, na memória.

3. Imprimir (ou mostrar na tela) o valor do raio e a área correspondente.

Cada um desses passos exigirá uma ou mais instruções de um programa.

Etapas para o desenvolvimento de um programa:

Análise – nesta etapa estuda-se o enunciado do problema para definir os dados de

entrada, o processamento e os dados de saída.

Algoritmo – ferramenta do tipo descrição narrativa, fluxograma ou português

estruturado (pseudocódigo) (são usados para descrever o problema com suas

soluções.)

Codificação – O algoritmo é transformado em códigos da linguagem de programação

escolhida para se trabalhar.

Portanto, um programa é a codificação de um algoritmo em uma linguagem de

programação.

Algoritmo:

Processo sistemático para a resolução de um problema. Significa descrever, de forma lógica, os passos a serem executados no cumprimento de determinada tarefa.

Um algoritmo correto deve possuir 3 qualidades:

1- Cada passo no algoritmo deve ser uma instrução que possa ser realizada. 2- A ordem dos passos deve ser precisamente determinada.

3- O algoritmo deve ter fim.

Exemplo de um procedimento que não é um algoritmo:

Procedimento para contar:

Passo 1: Faça N igual a zero

Passo 2: Some 1 a N. Passo 3: Volte ao passo 2

Não satisfaz a condição 3 de um algoritmo correto!!!

Exemplo de um algoritmo correto:

Procedimento para contar até 100:

Passo 1: Faça N igual a zero

Page 4: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

4

Passo 2: Some 1 a N.

Passo 3: Se N é menor que 100, volte ao Passo 2, senão pare.

Satisfaz as três condições!!!

Outros exemplos:

Algoritmo 1: Somar três números

PASSO 1 - Receber os três números

PASSO 2 - Somar os três números

PASSO 3 - Mostrar o resultado obtido

Algoritmo 2: Sacar dinheiro no Banco 24 horas

OBS: um mesmo problema pode ser resolvido de diversas maneiras e gerar a mesma resposta, ou seja, podem existir vários algoritmos para solucionar o mesmo

problema!!

Tipos de algoritmos (os mais usados):

1- Descrição narrativa: consiste em analisar o enunciado do problema e escrever

utilizando uma linguagem natural (ex: a língua portuguesa), os passos a serem seguidos para a sua resolução.

2- Fluxograma: utiliza símbolos gráficos pré-definidos. Principais símbolos:

Page 5: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

5

3- Pseudocódigo (pseudolinguagem): utiliza regras pré-definidas que facilitam a passagem do algoritmo para qualquer linguagem de programação.

Na definição de uma linguagem, precisamos fixar: sua sintaxe: como escrever os comandos e seus componentes (tipos, variáveis, etc) e a sua semântica: o

significado de cada comando e conceito.

Exemplos de algoritmos com os três tipos citados acima:

Exemplo1:

Faça um algoritmo para mostrar o resultado da multiplicação de dois números:

1- Algoritmo em descrição narrativa:

PASSO 1 – Receber os dois números que serão multiplicados.

PASSO 2 – Multiplicar os dois números. PASSO 3 – Mostrar o resultado obtido na multiplicação.

2- Algoritmo em fluxograma:

Page 6: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

6

3- Algoritmo em pseudocódigo:

Exemplo2: Faça um algoritmo para mostrar o resultado da divisão de dois números.

1- Algoritmo em descrição narrativa:

PASSO 1- Receber os dois números que serão divididos PASSO 2- Se o segundo número foi igual a zero, não poderá ser feita a divisão,

pois não existe divisão por zero; caso contrário, dividir os números e mostrar o resultado da divisão.

2- Algoritmo em fluxograma

Page 7: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

7

3- Algoritmo em pseudocódigo

Exemplo 3: Faça um algoritmo para calcular a média aritmética entre duas notas de

um aluno e mostrar a sua situação, que pode ser aprovado ou reprovado.

1- Algoritmo em descrição narrativa:

PASSO 1 - Receber as duas notas

PASSO 2 - Calcular a média aritmética.

PASSO 3 - Mostrar a média aritmética.

PASSO 4 - Se a média aritmética for maior ou igual a 7, então a situação do aluno é aprovado; caso contrário, a situação é reprovado.

2- Algoritmo em fluxograma:

Page 8: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

8

3- Algoritmo em pseudocódigo

Page 9: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

9

Aula 2: Variáveis e Tipos de dados

Um algoritmo e, posteriormente, um programa, recebem dados, que precisam ser

armazenados no computador para serem utilizados no processamento. Esse armazenamento é feito na memória.

Todos os computadores trabalham com sistema numérico binário: os dados são

transformados em 0 e 1 ('zeros' e 'uns') para, então serem armazenados na memória. Cada dígito binário (0 ou 1) ocupa porções de memória chamadas bytes (8

bits), e cada byte é identificado e acessado por meio de um endereço.

Todos os caracteres existentes possuem um correspondente numérico na tabela ASCII, que é transformado em caractere binário pelo método da divisão para, então,

ser armazenado na memória.

Variável:

- representa uma posição de memória. - possui nome e tipo.

- o conteúdo pode variar ao longo do tempo, durante a execução de um programa. - pode assumir valores diferentes, mas só pode armazenar um valor a cada

instante.

Page 10: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

10

Tipos de Dados

1- Dados numéricos: podem ser números inteiros ou reais.

Números inteiros:

- podem ser positivos ou negativos e não possuem parte fracionária!!

Exemplos de dados numéricos inteiros:

-23, 34, 199, 0, 28, 100

Números reais:

- podem ser positivos ou negativos e possuem parte fracionária!!

Exemplos de dados numéricos reais:

-23.0 , 34.0, 199.2 , 0.0 , 28.5 , 100.2

2- Dados Lógicos

Também chamados de dados booleanos e podem assumir valores verdadeiro ou falso.

3- Dados Literais ou caracteres

Formados por um único caractere ou por uma cadeia de caracteres.

Esses caracteres podem ser as letras maiúsculas, as letras minúsculas, os números

(não podem ser usados para cálculo) e os caracteres especiais (&,#,@,?,+).

Exemplos de dados literais: 'aluno', '1234', '@ internet', '100 + 150', '10.6'

Page 11: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

11

Identificadores:

Nomes escolhidos para rotular os nomes das variáveis, dos programas, das

constantes, procedimentos, funções, etc.

Regras: O primeiro caractere deve ser sempre uma letra ou o caractere sublinhado (_).

Os demais caracteres podem ser: números, letras maiúsculas, letras minúsculas e o caractere sublinhado.

Os nomes escolhidos devem explicitar seu conteúdo. Não podem ser usadas palavras reservadas, ou seja, palavras que pertençam a

uma linguagem de programação. Não são permitidos espaços em branco e caracteres especiais (@, $, + , - , %,

!).

Exemplos de identificadores válidos:

A, idade, Dia, nota1, media_total

Exemplos de identificadores inválidos: 8ab - começa com um número,

e 12 - contém espaço em branco, nota(10) - contém caracteres especiais ()

SET - palavra reservada, case - palavra reservada,

x+y - contém caractere especial

Page 12: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

12

Aula 3- Programação estruturada

Qualquer problema pode ser resolvido utilizando três estruturas: sequencial,

condicional e iterativa (repetição). Procura encontrar uma forma de quebrar um

problema complexo em partes mais simples que, trabalhadas conjuntamente,

permitem solucioná-lo.

A ideia é que, utilizando corretamente tais estruturas, o recurso da modularização e a

parametrização, seja possível criar programas com menor repetição possível de

linhas de comando.

O programador que utiliza o paradigma estruturado analisa o problema tentando

relacionar as ações que deverão ser executadas e como poderão ser divididas em

módulos.

Estrutura Sequencial em algoritmos

Declaração de variáveis em algoritmos:

ocorre após a palavra DECLARE e os tipos mais usados são: NUMÉRICO (para

variáveis que receberão números, LITERAL (para variáveis que receberão caracteres)

e LÓGICO (para variáveis que receberão apenas dois valores: verdadeiro ou falso).

Exemplo:

Comando de atribuição em algoritmos:

para conceder valores ou operações a variáveis (símbolo ). Exemplo:

Page 13: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

13

Comando de entrada em algoritmos:

Usado para receber dados digitados pelo usuário, que serão armazenados em

variáveis. Representado pela palavra LEIA.

Exemplo:

LEIA X

- um valor digitado pelo usuário será armazenado na variável X.

LEIA Y

- um ou vários caracteres digitados pelo usuário serão armazenados na variável Y.

Comando de saída em algoritmos:

Usado para mostrar dados na tela ou na impressora. Representado pelo palavra

ESCREVA. Os dados podem ser conteúdos de variáveis ou mensagens.

Exemplo:

ESCREVA X

Mostra o valor armazenado na variável X

ESCREVA "Conteúdo de Y = ", Y

Mostra a mensagem "Conteúdo de Y =" e em seguida o valor armazenado na variável

Y.

Page 14: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

14

Estrutura Sequencial em C/C++

Bibliotecas: arquivos contendo várias funções que podem ser incorporadas aos

programas escritos em C/C++. A diretiva #include faz com que o texto contido na

biblioteca especificada seja inserida no programa.

Exemplo: as bibliotecas iostream.h e conio.h permitem a utilização de diversos

comandos de entrada e saída.

A linguagem C/C++ é sensível a letras maiúsculas e minúsculas, ou seja, letras

minúsculas são diferentes de minúsculas (por exemplo, b é diferente de B). TODOS

os comandos devem, obrigatoriamente, ser escritos com letras minúsculas.

Declaração de variáveis em C/C++

As variáveis são declaradas após a especificação de seus tipos.

Tipos de dados mais usados:

int (para números inteiros);

float (para números reais);

char (para um caractere)

Não possui tipo de dados boolean (que pode assumir os valores verdadeiro ou falso),

pois considera verdadeiro qualquer valor diferente de 0 (zero).

Não possui um tipo especial para armazenar cadeias de caracteres (strings). Deve-

se utilizar um vetor contendo vários elementos do tipo char.

Exemplo:

float X;

- declara uma variável chamada X em que pode ser armazenado um número real.

float X,Y;

- declara duas variáveis X e Y em que podem ser armazenados dois números reais.

char opcao;

- declara uma variável chamada opcao em que pode ser armazenado um caractere.

char nome[50];

Page 15: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

15

- declara uma variável chamada nome em que podem ser armazenados até 50

caracteres.

Tipos de dados:

Obs: de acordo com o processador ou compilador C/C++ utilizado, o tamanho e a

faixa de valores podem variar.

Comando de atribuição em C/C++

Utilizado para conceder valores ou operações a variáveis. Representado por = (sinal

de igualdade). Exemplo:

Os caracteres são representados entre apóstrofos ( ' ).

As cadeias de caracteres são representadas entre aspas ( " ).

Para armazenar uma cadeia de caracteres dentro de uma variável, deve-se

utilizar uma função para manipulação de caracteres:

Para que seja possível a utilização da função strcpy deve-se inserir no programa, por

meio da diretiva include, a biblioteca string.h.

Todo comando deve ser finalizado com o sinal de ponto e vírgula (;)

Page 16: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

16

Comando de entrada em C/C++

Usado para receber dados digitados pelo usuário.

Os dados recebidos são armazenados em variáveis. Exemplos:

Comando Definição

cin >> x;

Um valor digitado pelo usuário será

armazenado na variável x.

gets(nome); Um ou mais caracteres digitados pelo

usuário serão armazenados na variável nome.

scanf("%d",&x); Um valor digitado pelo usuário será

armazenado na variável x.

O comando gets deve ser usado quando se deseja digitar uma cadeia contendo

espaços em branco. Ex: Maria Jose.

O comando cin consegue armazenar os caracteres até que seja encontrado o primeiro

espaço em branco (os caracteres posteriores são descartados). Ex: Maria.

Os comandos gets e scanf: armazenam toda a cadeia até que seja pressionada a

tecla ENTER. (Necessário incluir a biblioteca stdio.h, ou seja, #include <stdio.h>)

Comando de Saída em C/C++

Usados para mostrar dados na tela ou na impressora. Exemplo:

Comando Definição

cout << x; Mostra o valor armazenado na variável x.

cout << "Conteudo de x = ", << x; Mostra a mensagem "Conteudo de X= " e em seguida o valor armazenado na variável

x.

printf ("%d",y); Mostra o número inteiro armazenado na variável y.

printf ("%Conteudo de y = %d",y); Mostra a mensagem "Conteudo de y= " e em seguida o número inteiro armazenado na

variável y.

printf ("%f",x); Mostra o número real armazenado na variável x.

printf("%5.2f", x); Mostra o número real na variável x utilizando cinco casas para a parte inteira e

duas casas decimais.

Page 17: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

17

No comando printf é necessário indicar o tipo de variável que será mostrada:

%f: para variáveis que armazenam números reais;

%d: para variáveis que armazenam números inteiros:

%c: para variáveis que armazenam um único caractere;

%s: para variáveis que armazenam um conjunto de caracteres.

Comentário em C/C++

Importante para documentação do programa.

Para várias linhas:

/*

linhas de comentário

linhas de comentário

. . .

*/

Para uma linha apenas:

// uma linha de comentário

Page 18: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

18

Aula 4: Operadores em C/C++

Operadores

Operador Exemplo Comentário

= x=y O conteúdo da variável y é atribuído à variável x. (A uma variável pode ser atribuído o conteúdo de outra, um valor

constante ou, ainda, o resultado de uma função).

+ x + y Soma o conteúdo de x e de y.

- x - y Subtrai o conteúdo de x e de y.

* x * y Multiplica o conteúdo de x pelo conteúdo de y.

/ x/y Obtém o quociente de divisão de x por y.

% x%y Obtém o resto da divisão de x por y (obs: apenas para

números inteiros)

+= x += y Equivale a x = x + y.

-= x -= y Equivale a x = x - y.

*= x *= y Equivale a x = x * y.

/= x /= y Equivale a x = x / y.

%= x %= y Equivale a x = x % y.

++ x++ Equivale a x = x + 1.

++ y= ++x Equivale a x = x + 1 e depois y=x.

++ y= x++ Equivale a y = x e depois x=x+1.

-- x-- Equivale a x = x - 1.

-- y= --x Equivale a x = x - 1 e depois y=x.

-- y= x-- Equivale a y = x e depois x=x-1.

== x == y O conteúdo de x é igual ao conteúdo de y.

!= x != y O conteúdo de x é diferente do conteúdo de y.

<= x <= y O conteúdo de x é menor ou igual ao conteúdo de y.

>= x >= y O conteúdo de x é maior ou igual ao conteúdo de y.

< x < y O conteúdo de x é menor que o conteúdo de y.

> x > y O conteúdo de x é maior que o conteúdo de y.

Page 19: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

19

Aula 5: Funções pré-definidas em C/C++

Funções matemáticas

Exemplos de algumas funções matemáticas da biblioteca math.h:

Função Exemplo O que faz Retorno

Calcula o menor valor inteiro maior que x. Ex: ceil (3.2) é 4.

Retorna o menor inteiro maior que . Embora inteiro, o valor é retornado como double.

Calcula o maior valor inteiro menor que x. Ex: floor (3.2) é 3.

Retorna o maior inteiro menor que . Embora inteiro, o valor é retornado como double.

Calcula o cosseno de ( em radianos).

O cosseno do arco , um valor no intervalo [-1,+1].

Calcula o seno de ( em radianos).

O seno do arco , um valor no intervalo [-1,+1].

Calcula a tangente de ( em radianos).

O valor da tangente do arco x como um número de dupla precisão (double).

calcula o valor absoluto do argumento , onde é um inteiro.

o inteiro que representa o valor absoluto do argumento .

calcula o valor absoluto do argumento , onde é um double.

o double que representa o valor absoluto do argumento .

Obtém o logaritmo natural elevado à potência .

O valor de em precisão dupla.

Obtém o logaritmo natural de (logaritmo neperiano).

O valor de em precisão dupla.

Obtém o logaritmo de base 10 de (logaritmo decimal). o valor de deve ser positivo. Se , então

O valor de em precisão dupla.

calcula a parte fracionária de e coloca a parte inteira em .

retorna o valor da parte fracionária de x em dupla precisão.

calcula a potência . Se ou for 0, o resultado é 0. Se qualquer um dos dois for negativo, pode ocorrer um erro.

o valor de em dupla precisão.

calcula a raiz quadrada de , isto

é

.

o valor da raiz quadrada de em dupla precisão (double).

Constante que define o valor de

O valor de .

Page 20: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

20

Exemplo (código em C):

As funções sin, cos e tan esperam receber argumentos no formato de radianos;

para receberem argumentos em graus, siga o exemplo a seguir:

Exemplo com o valor de π:

valorPI = 3.415;

cin >> x; // x em graus

y = sin ((valorPI * x)/180);

Page 21: Disciplina: Introdução a Programação. IPRJ/UERJ Professora ... · PASSO 1 - Receber os três números PASSO 2 - Somar os três números PASSO 3 - Mostrar o resultado obtido Algoritmo

21

ou usando a função M_PI:

cin >> x; // x em graus y = sin((M_PI*x)/180);

Palavras reservadas de C/C++

Materiais de referência:

Livros:

1- Fundamentos da Programação. Ascencio, Ana/Campos, Edilene.

http://wps.prenhall.com/br_ascencio_2/77/19865/5085520.cw/index.html

2- C completo e total. Herbert Schildt

3- Programando em C

Schaum McGraw-Hill