Você está na página 1de 22

Conceitos Básicos da

Linguagem C

Caro(a) aluno(a),
Neste capítulo, serão apresentados os conceitos fundamentais da lin-
guagem de programação C. O objetivo principal é que ao final do
capítulo você esteja familiarizado com as características fundamen-
tais desta linguagem espetacular. Desta forma, você será capaz de
aplicar os conhecimentos de lógica aprendidos no semestre anterior
usando C.
Desejo-lhe um ótimo estudo!

A linguagem C pode ser considerada o “canivete suíço” da área de pro-


gramação. É uma linguagem usada para desenvolver aplicações mais
simples como uma agenda eletrônica, bem como protocolos de rede ou
sistemas operacionais.

C é considerada uma linguagem de alto nível, mas permite a cri-


ação de rotinas capazes de atuar diretamente na arquitetura da
máquina, com o uso de ponteiros.

Nas próximas seções são apresentados os principais conceitos da lin-


guagem C.

2.1 – A história de C

Nesta seção, será possível conhecer as principais datas históricas rela-


cionadas à linguagem C, como apresentado em Manzano (2003).

• 1963: surge a linguagem CPL (Combined Programming Language),


no laboratório de matemática da Universidade de Cambridge.
• 1967: desenvolvimento da linguagem BCPL (Basic Combined Pro-
gramming Language), criada por Martin Richards, baseada na lin-
guagem CPL.
20
Capítulo 2

• 1969: concluída a primeira versão do sistema operacional UNIX,


desenvolvida em Assembly por Ken Thompson. A relação entre a
linguagem C e o UNIX é estreita, visto que ambos tiveram seu de-
senvolvimento ocorrendo de forma quase simultânea. Após a cria-
ção de C, o UNIX foi reescrito utilizando os recursos oferecidos por
esta nova linguagem.
• 1970: criada por Kenneth (Ken) Lane Thompson a linguagem B,
uma evolução da linguagem BCPL (Basic Combined Programming
Language).
• 1972: a linguagem C é projetada por Dennis M. Ritchie e Brian W.
Kernighan, na empresa Bell Telephone Labs. Inc. (atualmente AT&T
– Lucent Technologies)
• 1979: surge a linguagem C++, uma extensão da linguagem C, de-
senvolvida por Bjarne Stroustrup para o Bell Labs. Ela mantém as
características e funcionalidades de C, mas fornece o suporte à pro-
gramação orientada a objetos.
• 1983: é criado pela ANSI (American National Standards Institute –
Organização de Padronização Norte-Americana) o comitê X3J16
com o propósito de criar um padrão definitivo para a linguagem C,
denominado de “ANSI C”.
• 1989: a padronização da linguagem C é finalizada, sendo ratificada
como ANSI X3.159-1989 “Programming Language C” .
• 1990: o padrão ANSI C sofre algumas alterações e é adotado pela
ISO (International Organization for Standardization) com a nomen-
clatura ISO/IEC 9899:1990, popularmente conhecido como C90.
• 1999: aconteceu uma revisão no padrão no final da década de 1990,
levando à publicação de uma nova norma, a ISO 9899:1999, tam-
bém conhecido como C99.

2.2 – C é case sensitive

C é case sensitive, ou seja, o compilador difere as palavras digitadas com


letras maiúsculas ou minúsculas.

A instrução if é diferente de IF, iF ou If. Se o usuário digitar o


comando
IF (x > 10)
o compilador detecta a palavra IF como um identificador descon-
hecido (erro de compilação) pois não é uma palavra reservada da
linguagem.

Licenciatura em Informática
21
Conceitos Básicos da Linguagem C

2.3 – Palavras reservadas

Os identificadores apresentados na Tabela 1 são ditos reservados, ou


seja, fazem parte da linguagem C (são palavras-chave) e não podem ser
utilizados para outra finalidade, como por exemplo nome de variáveis.
São 32 identificadores criados na versão original da linguagem, sendo
as 5 restantes incluídas pelo comitê ANSI (enum, const, signed, void e
volatile), como descrito em Schildt (1997).

auto double int struct


break else long switch
case enum register typedf
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Tabela 1: Identificadores reservados (palavras-
chave) de C

2.4 – Fim de instrução em C

Sempre no fim de uma instrução da linguagem C, deve-se inserir o sím-


bolo “;” (ponto-e-vírgula). Para o compilador esta é a indicação que é o
fim da instrução e irá encontrar uma próxima instrução. Se no trecho
de código

x = 0;

y = x + 2;

o “;” for omitido, o compilador gera uma mensagem de erro, para in-
formar que não foi encontrado este símbolo para indicar o fim da
instrução.

2.5 – Nomes de identificadores

Na linguagem C, nomes de variáveis, constantes, funções e outros ele-


mentos definidos pelo programador recebem o nome de identificado-
res. É possível criar um identificador com um ou mais caracteres. Para

Linguagem de Programação I
22
Capítulo 2

isso, algumas regras devem ser observadas:

• O primeiro caractere deve ser uma letra ou o caractere sublinhado


( _ ) e os demais caracteres podem ser letras, números ou
sublinhados;
• Os identificadores podem ter qualquer tamanho, mas os primeiros
31 caracteres são significativos;
• Um identificador não pode ser igual a um identificador reservado
da linguagem C;
• Um identificador não deve ter o mesmo nome que as funções per-
tencentes a C ou àquelas criadas pelo programador;
• O identificador SOMA é diferente de Soma, sOma ou soMa, como
descrito na seção 2.2

2.6 – Declaração de variáveis

A declaração de variáveis em C é feita, como descrito a seguir:

tipo-da-variável nome-do-identificador;

Onde:

tipo-da-variável: um dos tipos de dados da linguagem C

nome-do-identificador: nome atribuído à variável

São exemplos de declaração de variáveis em C:

char op;

long fat;

int soma, contador;

float altura;

É possível declarar mais de uma variável de mesmo tipo, bastando para


isso separá-las por vírgula, como em int soma, contador;

O tipo padrão do C é int. Isto quer dizer que é possível declarar variá-
veis do tipo int com o uso de modificadores de tipo, sem citar o tipo int,
como em long fat. Esta declaração é equivalente à long int fat.

Licenciatura em Informática
23
Conceitos Básicos da Linguagem C

Atividades:
1) O que foi entendido como “palavras reservadas” da lingua-
gem C? Escolha três palavras reservadas e explique o que eles
fazem.
2) A instrução
m=m+2
está correta? Justifique sua resposta.
3) Dê nomes para identificadores que possam representar:
a) um nome próprio
b) a idade de uma pessoa
c) o salário de um funcionário
d) a média de uma temperatura
e) a quantidade de filhos de um pai

2.8 – Constantes

Constantes se diferem das variáveis pelo fato destas armazenarem va-


lores temporários. Quer dizer, uma variável é capaz de armazenar um
único valor num dado instante de tempo, porém este conteúdo pode ser
alterado no decorrer da execução do programa. Já uma constante, ao
ser declarada sempre armazenará o mesmo valor, não sendo permitido
alterar este valor.

As constantes em C pode ser declaradas de qualquer um dos tipos de


dados básicos e pode ser explícita ou implícita. Explícita quando o valor
é usado diretamente numa instrução, como em

RESPOSTA = VALOR + 2.43;

printf(“Esta é uma constante do tipo string!”);

O valor 2.43 é uma constante inteira e a mensagem “Esta é uma constan-


te do tipo string!” é uma constante string.

Linguagem de Programação I
24
Capítulo 2

Não confunda string com caractere. A cadeia de caracteres, ou


string, está entre aspas duplas. A constante de um único caractere
está sempre entre aspas simples. Logo, “c” é diferente de ‘c’ pois
é uma constante string com dois chars (‘c’ é o primeiro e ‘\0’, o
segundo).

O símbolo ‘\0’ faz parte de um grupo de constantes, denominado cons-


tantes de barra invertida. A Tabela 2 apresenta tais constantes.

Código ‘Significado
\b Retrocesso (“back”)
\f Alimentação de formulário (“form feed”)
\n Nova linha (“new line”)
\r Retorno de carro (“carriage return”)
\t Tabulação horizontal (“tab”)
\” Aspas
\’ Apóstrofo
\0 Nulo (zero em decimal)
\\ Barra invertida
\v Tabulação vertical
\a Sinal sonoro (“beep”)
\N Constante octal (N é o valor da constante)
\xN Constante hexadecimal (N é o valor da constante)
Tabela 2: Constantes Caractere de Barra Invertida

Licenciatura em Informática
25
Conceitos Básicos da Linguagem C

Figura 5: Escopo de variáveis e comentários em C

2.9 – Comentários em C

Na linguagem C, é possível fazer comentários de duas formas, a saber:

• o símbolo “//” é usado para fazer comentários de linha, ou seja, co-


mentar uma linha inteira
• os símbolos “/*” e “*/” são usados para comentar trechos num códi-
go-fonte (mais de uma linha)

O uso de comentários no código-fonte facilita a legibilidade e


entendimento de seu programa. São informações adicionadas ao
código-fonte que não fazem parte das instruções que serão com-
piladas. O uso de comentários é um recurso muito importante na
prática de programação.

Linguagem de Programação I
26
Capítulo 2

A Figura 5 exemplifica como é possível usar comentários em C.

2.10 – Identação

Identação é um termo usado na área de programação para indicar que


um código-fonte está organizado, facilitando assim sua leitura e en-
tendimento. São pequenas regras que contribuem para que seu código
fique legível. A Figura 5 é um bom exemplo de código identado. No
trecho apresentado na Figura 6, é fácil perceber o que é a identação. A
instrução return (a + b); está com uma tabulação para a direita a mais
em relação as demais linhas deste trecho. Na Figura 7 é possível visuali-
zar um exemplo de código-fonte não identado.

Figura 6: Uma tabulação para definir o estilo de


identação

Um código não identado será compilado normalmente. Este é um


conceito que foge ao propósito do compilador. É um aspecto es-
tético de responsabilidade do programador e que deve, desde já,
ser cultivado! Afinal, revela que o aluno segue as boas práticas de
programação.

Para o programador iniciante, a identação pode parecer algo sem sen-


tido. Mas para o programador experiente a identação torna-se um re-
curso fundamental. Para tentar demonstrar a importância da identação,
uma pequena comparação é apresentada a seguir. É transcrito trecho
do poema No Meio do Caminho, de Carlos Drummond de Andrade
publicada em 1928:

“[...]Nunca me esquecerei desse acontecimento

na vida de minhas retinas tão fatigadas.

Nunca me esquecerei que no meio do caminho

tinha uma pedra

tinha uma pedra no meio do caminho

no meio do caminho tinha uma pedra.”

Licenciatura em Informática
27
Conceitos Básicos da Linguagem C

Figura 7: Exemplo de código-fonte não identado

Esta é a visão que o programador experiente tem ao ver o código iden-


tado. Ou seja, a grafia, a concordância e a estrutura das frases estão cor-
retas em relação às regras da Língua Portuguesa. Em termos de progra-
mação, identar um código permite aos programadores entender com
clareza, objetividade e sem ambiguidade o código-fonte. Porém, ao ler
um código não identado (popularmente chamado de “desdentado”), o
programador experiente teria os mesmos sentimentos de um professor
de Português ao ler a versão do poema No Meio do Caminho, apresen-
tada a seguir:

Nunca mim exquesserei deçe acontesimento

na vilda de mimnhas retinas tãl fatigadas.

Nunca mim exquesserei que no meio do camimnhú

tinha uma preda

tinha uma preda no meio do camimnhú

no meio do camimnhú timnha uma preda.

É claro que este exemplo serve para que os programadores iniciantes


tenham a exata noção da importância de se identar seu código-fonte.

Linguagem de Programação I
28
Capítulo 2

Principalmente quando se trabalha em equipe, a identação do código


facilita seu entendimento e deixa clara a relação existente entre os blo-
cos que compõem o programa. Desta forma, a boa identação de seu
programa-fonte vai garantir sua correta interpretação.

A única regra válida no que diz respeito à identação é o bom senso.


Alguns programadores usam uma tabulação para realizar a organiza-
ção de seu código, como no exemplo da Figura 6. Porém, nada impede
que você, caro(a) aluno(a), crie seu próprio estilo. Alguns programa-
dores usam três espaços para definir uma identação. O importante é
definir qual estilo adotar e ter o bom senso de usá-lo de forma coerente
e adequada.

Atividades:
4) Explique a diferença entre variáveis globais e locais.
5) Reescreva o código da Figura 8, aplicando os conceitos apren-
didos sobre identação.
6) Reescreva o código da Figura 9, fazendo comentários para ex-
plicar o que acontece em cada instrução.

Figura 8: Programa do Exercício 2

Figura 9: Programa do Exercício 3

Licenciatura em Informática
29
Conceitos Básicos da Linguagem C

2.11 – Tipos de dados

Os computadores são ferramentas que funcionam basicamente em fun-


ção de dados que são lidos, processados e um resultado é apresentado.
Para ser capaz de armazenar informações, o computador é projetado
com a estrutura de receber dados de formatos de acordo com a reali-
dade do mundo real. Como exemplo, é possível informar um conjunto
de nomes para serem ordenados, ou receber vários números inteiros e
obter a média desses valores, bem como encontrar dentro de uma quan-
tidade de alturas de atletas, aquela que é a maior.

Para oferecer a possibilidade de manipular estes diferentes formatos de


dados, a linguagem C fornece um conjunto básico de tipos de dados.
Nesta seção serão apresentados os cinco tipos básicos da linguagem C
(char, double, float, int e void) e seus modificadores de tipo (signed,
unsigned, long e short).

2.11.1 – Inteiros

São considerados inteiros aqueles valores numéricos positivos ou nega-


tivos, excetuando os números fracionários (ou reais). Este tipo de dados
pode ser usado por meio dos identificadores:

Tipo Faixa de Quantidade de


abrangência bits
int -32.768 a 32767 16
unsigned int 0 a 65535 16
signed int -32.768 a 32.767 16
shor int -32.768 a 32.767 16
unsigned short int 0 a 65535 16
signed shor int -32.768 a 32.767 16
long int -2147483648 a 32
214748647
signed long int -2147483648 a 32
214748647
unsigned long int 0 a 4294967295 32
Tabela 3: Tipos de dados da linguagem C

Linguagem de Programação I
30
Capítulo 2

O modificador unsigned indica a existência de valores numéricos


sem sinal negativo, ou seja somente positivos. Os modificadores
short e long permitem a utilização de valores inteiros menores
ou maiores, respectivamente. Os quatro modificadores podem ser
aplicados ao tipo inteiro.

2.11.2 – Reais

São considerados reais os valores numéricos positivos e negativos sendo


números fracionários ou inteiros. Este tipo de dados pode ser usado por
meio dos identificadores:

Tipo Faixa de Quantidade de


abrangência bits
float 3.4 e-38 a 3.4 e+38 32
double 1.7 e-308 a 1.7 e+308 64
long double 3.4 e-4932 a 1.1 e+4932 80
Tabela 4: Tipos de dados reais de C

O tipo float define um número de ponto flutuante com seis dígitos de-
cimais de precisão absoluta. O tipo double representa números de pon-
to flutuante com quinze dígitos decimais de precisão absoluta e o long
double suporta um número de ponto flutuante com quinze dígitos deci-
mais de precisão absoluta.

2.11.3 – Caracteres

Caracteres ou sequências de caracteres (strings) são formados por le-


tras, números e símbolos especiais, representando dados alfanuméricos.
A linguagem C permite o uso de dados alfanumérico de duas formas:

• um caractere delimitado por apóstrofos: ‘x’


• uma sequência de caracteres delimitadas por aspas: “x”

Tipo Faixa de Quantidade de bits


abrangência
char -128 a 127 8
unsigned char 0 a 255 8
signed char -128 a 127 8
Tabela 5: Tipos de dados caracteres de C

Licenciatura em Informática
31
Conceitos Básicos da Linguagem C

2.11.4 – Tipo lógico

Os dados do tipo lógico podem assumir somente dois valores: verda-


deiro (true) ou falso (false). No padrão ANSI C, não encontra-se um
tipo básico para representar tais valores. Por convenção, a linguagem
permite que se considere o valor inteiro 0 (zero) como falso e o valor 1
(um) como verdadeiro (na verdade, qualquer valor diferente de zero é
tido como verdadeiro).

Nos testes condicionais, vamos considerar o resultado 0 (zero)


indicando falso e 1 (um) como verdadeiro.

2.12 – Operadores

Segundo Schildt (1997), C dá maior ênfase aos operadores do que a


maioria de outras linguagens de programação. Em C, é possível encon-
trar quatro classes de operadores. São eles: aritméticos, relacionais, ló-
gicos e bit a bit. Também é possível operadores especiais para tarefas
específicas.

A atribuição em C é feita da seguinte forma:

nome_variável = expressão;

Onde nome_variável deve ser uma variável ou um ponteiro e não pode


ser uma função ou uma constante. Assim em

x = 2 + 3;

y = x;

a operação 2 + 3 é realizada e atribuída à variável x. Por sua vez, o con-


teúdo armazenado em x, é atribuído à variável y.

É possível em C realizar atribuições múltiplas, ou seja, atribuir o mesmo


conteúdo a muitas variáveis num único comando. Em

m = n = x = 9;

o valor 9 é atribuído a m, n e x.

Linguagem de Programação I
32
Capítulo 2

Atividades:
1) Declare variáveis que sejam capazes de armazenar:
a) um nome próprio;
b) a idade de uma pessoa;
c) o salário de um funcionário;
d) a média de uma temperatura;
e) a quantidade de filhos de um pai.

2.12.1 – Operadores aritméticos

Os operadores aritméticos são usados para desenvolver operações ma-


temáticas. Na Tabela 6 são apresentados os operadores aritméticos de
C.

Operador Ação
+ Soma (inteira e ponto flutuante)
– Subtração ou troca de sinal (inteira e ponto flutuante)
* Multiplicação (inteira e ponto flutuante)
/ Divisão (inteira e ponto flutuante)
% Resto de divisão (de inteiros)
++ Incremento (inteiro e ponto flutuante)
–– Decremento (inteiro e ponto flutuante)
Tabela 6: Operadores aritméticos da linguagem C

Os operadores de incremento e decremento são unários, alterando a va-


riável sobre a qual estão aplicados.

z++; é equivalente a z = z + 1;

z--; é equivalente a z = z – 1;

Tais operadores podem ser pré ou pós-fixados. Quando são pré-fixados,


incrementam e retornam o valor da variável incrementada. Ao serem
pós-fixados, retornam o valor da variável sem o incremento e depois
fazem o incremento da variável.

x = 16;

y = x++;

Licenciatura em Informática
33
Conceitos Básicos da Linguagem C

Ao final, tem-se y = 16 e x = 17

x = 16;

y = ++x;

Neste caso, tem-se y = 17 e x = 17.

Outro operador unário é –, usado para troca de sinal que não altera a
variável. Somente retorna o valor da variável multiplicado por -1.

Os demais operadores de C são binários, ou seja, usam duas variáveis e


retornam como resultado um terceiro valor, mantendo as variáveis ori-
ginais, como ocorre na soma e subtração.

2.12.2 – Operadores Relacionais e Lógicos

Os operadores relacionais de C, que realizam comparações, são apre-


sentados na Tabela 7.

Operador Ação
> Maior que
< Menor que
>= Maior ou igual
<= Menor ou igual
== Igual
!= Diferente (não igual)
Tabela 7: Operadores relacionais da linguagem C

Os operadores lógicos permitem a realização de operações com valores


lógicos (verdadeiro ou falso). Para isso, em C são encontrados os opera-
dores descritos na Tabela 8.

Operador Ação
&& E (AND)
|| OU (OR)
! NÃO (NOT)
Tabela 8: Operadores lógicos da linguagem C

Linguagem de Programação I
34
Capítulo 2

2.13 – Expressões

São chamadas de expressões, a combinação de variáveis, operadores


e constantes. O entendimento correto do funcionamento de uma ex-
pressão deve se basear na ordem em que os operadores são executados.
Logo, isto diz respeito à precedência que um operador pode ter em re-
lação a outro.

As expressões

z = x * y + a / b;

z = x * (y + a) / b;

são válidas mas possuem execuções diferentes devido ao uso dos parên-
teses que alteram a precedência entre os operadores. No primeiro caso,
a multiplicação e divisão são executadas antes da soma. No segundo, a
soma é realizada e depois a multiplicação e a divisão, respectivamente.

A Tabela 9 apresenta a precedência dos operadores em C. Alguns deles


ainda não foram estudados. Isto irá acontecer no decorrer do curso.

Maior precedência () [] {}
! ~++ –– – (binário) . – (unário) (cast)
*(unário) &(unário) sizeof
*/%
+–
<< >>
<<= =>>
== !=
&
^
|
&&
||
?
= += –= *= /=
Menor precedência ,
Tabela 9: Tabela de precedência de operadores em C

Licenciatura em Informática
35
Conceitos Básicos da Linguagem C

C é uma linguagem maravilhosa! Sua flexibilidade permite ao progra-


mador extrair ao máximo seus recursos. É possível usar abreviações
para expressões para simplificá-las ou facilitar seu entendimento, como
descrito na Tabela 10.

Expressão Expressão
Original Equivalente
x = x + k; x +=k;
x = x – k; x -=k;
x = x * k; x *=k;
x = x / k; x /=k;
Tabela 10: Abreviação de expressões em C

2.14 – Um programa utilizando função

Como você deve ter percebido, a linguagem de programação C, utiliza


claramente os conceitos de função. Para elucidar melhor tal conceito,
veja o programa apresentado na Figura 10.

A função soma é chamada por main(), por meio da instrução

resultado = soma(n1, n2);

e retorna para a função main() a soma dos números passados como


parâmetros(argumentos). Na função main(), o valor retornado (a res-
posta da função soma), é atribuído à variável resultado. Por fim, os nú-
meros lidos pela função scanf() e a sua soma são apresentados na tela,
por meio de printf().

Os conceitos gerais sobre funções serão abordados no capítulo 6. Po-


rém, é importante você se acostumar com o uso delas, visto que fazem
parte da natureza da linguagem C.

2.15 – As funções printf() e scanf()

Para escrever na tela do computador e ler informações digitadas pelo


usuário, a linguagem C fornece as funções printf() e scanf(), respectiva-
mente. Por meio delas podemos apresentar mensagens mais elaboradas
facilitando o entendimento do usuário sobre os objetivos do progra-
ma. Da mesma forma, temos condições de definir no programa quais
formatos de dados serão recebidos pelo usuário, permitindo a forma

Linguagem de Programação I
36
Capítulo 2

adequada de seu tratamento durante a execução do programa. Tanto


printf() como scanf() fazem parte da biblioteca stdio.h.

2.15.1 – printf()

A função printf() é usada para imprimir na saída padrão (tela do com-


putador) mensagens como constantes de caracteres, sendo possível
também a impressão do conteúdo de variáveis. Isto é possível por meio
de uma string de controle, que faz parte da sintaxe de printf()

int printf(const char *string_de_controle, ...);

Figura 10: Um programa que utiliza função

Na Figura 10, é possível encontrar exemplos de uso com printf(). Na


instrução

printf(“\n\tInforme um valor inteiro: ”);

será impressa na tela a mensagem Informe um valor inteiro:, com um


salto de linha e uma tabulação, em função das constantes de caracteres
\n e \t, respectivamente.

e em
printf(“\n\tA soma %d + %d = %d\n\n”, n1, n2, resultado);

Licenciatura em Informática
37
Conceitos Básicos da Linguagem C

temos, além da impressão de uma constante de caracteres, o uso de co-


mandos de formato. Neste exemplo o uso de %d formata os valores como
inteiros. Perceba que existem três %d dentro das aspas duplas e fora das
aspas duplas, após a vírgula, encontramos três variáveis separadas por
vírgulas: n1, n2 e resultado. Isto quer dizer que no lugar dos comandos
de formato %d, serão apresentados os conteúdos das variáveis. Assim,
o primeiro %d apresenta o conteúdo de n1, o segundo %d o de n2 e o
terceiro %d o da variável resultado. A Tabela 11 relaciona os comandos
de formato mais usados na função printf().

Código Formato
%c Caractere
%d Inteiros decimais com sinal
%i Inteiros decimais com sinal
%f Ponto flutuante
%o Octal sem sinal
%s Cadeia de caracteres (string)
%x Hexadecimal sem sinal
%p Apresenta o endereço de um ponteiro
%% Escreve o símbolo %
Tabela 11: Comandos de formato da função printf()

Com printf() é possível escrever mensagens ao usuário e formatá-las


para que sejam apresentadas de forma organizada e clara. Podemos al-
terar a largura na qual um campo seja apresentado, permitindo a cria-
ção de tabelas com colunas alinhadas. Para isso, é preciso colocar um
número entre o símbolo % e o código de formato, que recebe o nome de
especificador de largura mínima de campo. O preenchimento padrão
é feito com espaços, mas pode-se colocar o 0 (zero) antes do especifica-
dor de largura mínima. Na instrução

printf(“%06d”, m);

%06d preenche um número de menos de seis dígitos com 0s (zeros) de


modo que seu comprimento total seja cinco. Logo, %4d, preenche um
número de menos de quatro dígitos com espaços.

É possível também especificar a precisão para um número float, de-


terminando o número de casas decimais a ser mostrado. Por exemplo,
%5.3f apresenta um número com pelo menos cinco caracteres com três
casas decimais.

Linguagem de Programação I
38
Capítulo 2

2.15.2 – scanf()

Schildt (1997) informa que a função scanf() lê todos os tipos de dados


intrínsecos e converte automaticamente números ao formato interno
apropriado. O protótipo da função é

int scanf(const char, *string_de_controle,...);

onde a string_de_controle indica como os valores são lidos para as va-


riáveis apontadas na lista de argumentos. No programa da Figura 10, a
instrução

scanf(“%d”, &n1);

receber o valor digitado pelo usuário e o formata de acordo com %d,


ou seja, como um inteiro decimal. A Tabela 12 apresenta os principais
especificadores de formato da função scanf().

Depois da formatação, o número é armazenado na posição de memó-


ria onde está alocada a variável n1. Isto é possível por causa do uso do
operador &, que retorna o endereço da variável n1. Este operador será
melhor entendido no Capítulo 5, que aborda os ponteiros. Por enquan-
to, é importante entender que & retorna o endereço da variável que vai
armazenar o valor lido por scanf().

É comum o programador iniciante esquecer e não usar o opera-


dor & em scanf(). Ao usar a instrução
scanf(“%d”, & n1);
não será acusado erro de compilação, porém na execução do pro-
grama ele será abortado. Isso ocorre, pois como o endereço da
variável não é retornado, scanf() não “sabe” onde guardar a infor-
mação numérica digitada pelo usuário.

Código Formato
%c Faz a leitura de um único caractere
%d Faz a leitura de um inteiro
%i Faz a leitura de um inteiro
%f Faz a leitura de um número ponto flutuante
%o Faz a leitura de um número octal
%s Faz a leitura de uma string

Licenciatura em Informática
39
Conceitos Básicos da Linguagem C

%x Faz a leitura de um número hexadecimal


%p Faz a leitura de um inteiro o endereço de um ponteiro
Tabela 12: Especificadores de formato da função scanf()

Atividades:
1) Verifique se as declarações abaixo, estão corretas, corrigindo as
que estiverem erradas:
a) char ch, letra;
b) long float salário;
c) float PI = 3.14;
d) int $teste;
e) char céu;
f) 18ouble 18ouble;
g) int Double;
2) Baseando-se na declaração de variáveis, indique o resultado das
sentenças lógicas:
a) int i = 5, j = 7;
b) (i > 3)
c) ( (j <= 7) && (i > 3))
d) (i != j)
e) (i == 0)
f) ((i != j) || (i == 3))
g) !(i < 8)
3) Escreva as expressões simplificadas equivalentes às expressões
abaixo:
a) i = i + 2;
b) x = x * (y + 1);
c) d = d – 3;
d) a = a / 4;
4) Explique o funcionamento das funções printf() e scanf() utili-
zadas no código-fonte apresentado na Figura 8.

Linguagem de Programação I
40
Capítulo 2

Licenciatura em Informática

Você também pode gostar