Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila de C
Apostila de C
Apostila de Programao II
- Linguagem de Programao C Material at a Prova G1
Maro de 2008
Sumrio
Pgina
1 INTRODUO........................................................................................................................................................................ 4
2 COMPILADORES E INTERPRETADORES ...................................................................................................................... 5
2.1 COMPILADORES C ............................................................................................................................................................... 5
2.1.1 Compilador GCC (GNU Compiler Collection).......................................................................................................... 6
2.1.2 Compilador Dev-C++................................................................................................................................................ 6
2.1.3 Compilador C++ Builder - Borland .......................................................................................................................... 6
2.1.4 Compilador Turbo C Borland .................................................................................................................................... 6
2.1.5 Compilador Visual C# - Microsoft ............................................................................................................................. 7
3 CONSIDERAES INICIAIS E DICAS.............................................................................................................................. 7
3.1 A LINGUAGEM C CASE SENSITIVE ................................................................................................................................ 7
3.2 VARIVEIS .......................................................................................................................................................................... 7
3.2.1 Declaraes................................................................................................................................................................ 8
3.2.2 Notao Hngara....................................................................................................................................................... 8
3.2.3 Inicializao de Variveis (Atribuio) ..................................................................................................................... 9
3.3 CARTO DE REFERNCIA DA LINGUAGEM ANSI C........................................................................................................... 10
3.4 TIPOS DE DADOS ............................................................................................................................................................... 10
4 INCIO DO APRENDIZADO: DOIS PRIMEIROS PROGRAMAS ............................................................................... 12
4.1 PRIMEIRO EXEMPLO DE UM PROGRAMA EM C.................................................................................................................... 12
4.2 SEGUNDO EXEMPLO DE UM PROGRAMA EM C.................................................................................................................... 13
5 AUTO AVALIAO: 1. PARTE DA DISCIPLINA ........................................................................................................ 13
6 MATRIZES UNIDIMENSIONAIS - VETORES (OU ARRAY) ...................................................................................... 14
7 FUNES: SCANF( ) E PRINTF( ) ................................................................................................................................. 15
8 CARACTERES: LENDO E ESCREVENDO ..................................................................................................................... 17
9 INTRODUO A ALGUNS COMANDOS DE CONTROLE DE FLUXO .................................................................... 18
9.1 COMANDO IF .................................................................................................................................................................... 18
9.1.1 Ifs Aninhados............................................................................................................................................................ 19
10 OPERADORES.................................................................................................................................................................... 20
10.1
10.2
10.3
10.4
10.5
12 STRINGS.............................................................................................................................................................................. 27
12.1 LENDO STRINGS DO TECLADO: COM MAIS DE UMA PALAVRA (COM ESPAOS EM BRANCO)............................................. 28
12.2 EXERCCIOS COM STRINGS (TPICOS DE PROVA)............................................................................................................... 29
13 INTRODUO S FUNES.......................................................................................................................................... 30
13.1 ARGUMENTOS (PARMETROS) ........................................................................................................................................ 30
13.2 RETORNANDO VALORES ................................................................................................................................................. 31
14 AUTO AVALIAO: 2. PARTE DA DISCIPLINA ...................................................................................................... 32
REFERNCIAS BIBLIOGRFICAS..................................................................................................................................... 33
1 Introduo
A Linguagem de Programao C foi primeiramente criada por Dennis Ritchie e Ken Thompson nos
laboratrios da empresa Bell, em 1972. C foi baseada na Linguagem B de Thompson, que por sua vez era
uma evoluo da Linguagem BCPL (o que nos leva a concluir que uma prxima evoluo desta
linguagem gerasse a linguagem P ;-D ). Esta linguagem foi inicialmente concebida para ser utilizada no
Sistema Operacional Unix.
A definio de C est contida em um livro escrito pelo prprio Dennis Ritchie, juntamente com Brian
Kernighan cujo ttulo C - A Linguagem de Programao padro ANSI1 (American National
Standards Institute). um livro quase obrigatrio para quem estiver estudando a linguagem C. Uma fonte
alternativa de aprendizado so os milhares de tutoriais, apostilas e livros disponveis na Internet. bom
prestar muita ateno neste tipo de fonte, pois nem sempre o material confivel. Mas a vai uma dica: o
livro C / C++ e Orientao a Objetos em Ambiente Multiplataforma foi escrito pelo Prof. Sergio
Villas-Boas da UFRJ e encontrado na Internet facilmente para download gratuito (no formato PDF).
C uma linguagem de programao genrica que utilizada para criao de programas diversos como
processadores de texto, planilhas eletrnicas, sistemas operacionais, programas de comunicao,
programas para automao industrial, gerenciadores de bancos de dados, programas para soluo de
problemas da Engenharia, Fsica, Qumica e outras Cincias etc. bem provvel que o Navegador Web
que voc usou para acessar este material tenha sido escrito em C ou C++.
C freqentemente chamada de linguagem de mdio nvel para computadores. Isso no significa que C
seja menos poderosa, difcil de usar ou menos desenvolvida que uma linguagem de alto nvel como
Pascal, tampouco implica que C seja similar linguagem assembly e seus problemas correlatos aos
usurios. C tratada como uma linguagem de mdio nvel porque combina elementos de linguagens de
alto nvel com a funcionalidade da linguagem assembly.
Como uma linguagem de mdio nvel, C permite a manipulao de bits, bytes e endereos os elementos
bsicos com os quais o computador funciona. Um cdigo escrito em C muito portvel. Portabilidade
significa que possvel adaptar um software escrito para um tipo de computador a outro. Por exemplo, se
voc pode facilmente converter um programa escrito para DOS de tal forma a executar sob Windows,
ento esse programa portvel. Por haver compiladores C para quase todos os computadores, possvel
pegar um cdigo escrito para uma mquina, compil-lo e rod-lo em outra com pouca ou nenhuma
modificao. Esta portabilidade economiza tempo e dinheiro. Os compiladores C tambm tendem a
produzir um cdigo-objeto muito compacto e rpido.
Embora o termo linguagem estruturada em blocos no seja rigorosamente aplicvel a C, ela
normalmente referida simplesmente como linguagem estruturada. C tem muitas semelhanas com outras
linguagens estruturadas, como Pascal, por exemplo. A razo pela qual C no , tecnicamente, uma
linguagem estruturada em blocos, que as linguagens estruturadas em blocos permitem que
procedimentos e funes sejam declarados dentro de procedimentos e funes. No entanto, como C no
permite a criao de funes dentro de funes, no pode ser chamada formalmente de uma linguagem
estruturada em blocos [SCH97].
1 Esse livro pode ser adquirido diretamente na Editora Campus. Na pgina da disciplina de Programao II, na seo
Downloads, est disponvel o link direcionado para a compra. E tambm tem a disposio dos alunos na nossa biblioteca.
Profa. Flvia Pereira de Carvalho fpereira@faccat.br http://fit.faccat.br/~fpereira
2 Compiladores e Interpretadores
Os termos compiladores e interpretadores referem-se maneira como um programa executado. Existem
dois mtodos gerais pelos quais um programa pode ser executado. Em teoria, qualquer linguagem de
programao pode ser compilada ou interpretada, mas algumas linguagens geralmente so executadas de
uma maneira ou de outra. A maneira pela qual um programa executado no definida pela linguagem
em que ele escrito. Interpretadores e compiladores so simplesmente programas sofisticados que
operam sobre o cdigo-fonte do seu programa.
Um interpretador l o cdigo-fonte do seu programa uma linha por vez, executando a instruo especfica
contida nessa linha. Um compilador l o programa inteiro e converte-o em um cdigo-objeto, que uma
traduo do cdigo-fonte do programa em uma forma que o computador possa executar diretamente.
Quando um interpretador usado, deve estar presente toda vez que voc executar o seu programa. O
processo lento e ocorre toda vez que o programa for executado. Um compilador, ao contrrio, converte
seu programa em um cdigo-objeto que pode ser executado diretamente por seu computador. Como o
compilador traduz seu programa de uma s vez, tudo o que voc precisa fazer executar se programa
diretamente, geralmente apenas digitando seu nome. Assim, o tempo de compilao s gasto uma vez,
enquanto o cdigo interpretado incorre neste trabalho adicional cada vez que o programa executa
[SCH97].
2.1 Compiladores C
Existem diversos compiladores C / C++ disponveis para os programadores. A deciso sobre qual
compilador utilizar pode ser baseada em vrios fatores, como por exemplo:
Qualidade do compilador
- rpido
- est conforme com a padronizao da linguagem
- a interface com o usurio agradvel - possui ou no um IDE (Integrated Development
Enviroment)
- possui diversas opes de compilao; etc.
Custo do compilador
Dentro deste cenrio, temos tambm um fator determinante: quais so os compiladores mais utilizados
atualmente? Esta informao muito importante, pois indicado que estejamos habituados e com
experincia naquele compilador que provavelmente tenhamos que utilizar em algum futuro emprego ou
projeto de pesquisa que venhamos a nos engajar.
2
3
4
3. To logo inicia a instalao, o software instalador solicita a informao sobre o drive de origem
da instalao: digite o drive onde a pasta foi criada (possivelmente C:) e confirme o caminho da
pasta que o prprio instalador ir sugerir.
Tudo pronto: v em File - New e digite seu primeiro programa. Para compil-lo e rod-lo v em Run Run.
3.2 Variveis
Primeiramente com relao aos nomes das variveis (e tambm das funes) -- em C os identificadores
podem ter qualquer nome se duas condies forem satisfeitas:
O nome de uma varivel no pode ser igual a uma palavra reservada (palavra-chave), nem igual
ao nome de uma funo declarada pelo programador, ou pelas bibliotecas do C. Variveis de at
32 caracteres so aceitas.
bom sempre lembrar que C uma linguagem "case sensitive" e, portanto deve-se prestar
ateno s maisculas e minsculas.
3.2.1 Declaraes
Todas as variveis devem ser declaradas antes de serem usadas. Uma declarao especifica um tipo, e
seguida por uma lista de uma ou mais variveis daquele tipo, tal como nos seguintes exemplos:
int inicio, fim, numero;
float valor;
short int codigo;
char c, linha [100];
10
Tipo
Char
unsigned char
signed char
Int
unsigned int
signed int
short int
unsigned short int
Signed short int
long int
Signed long int
unsigned long int
Float
Double
long double
Tamanho em Bytes
1
1
1
4
4
4
2
2
2
4
4
4
4
8
10
Faixa Mnima
-127 a 127
0 a 255
-127 a 127
-2.147.483.648 a 2.147.483.647
0 a 4.294.967.295
-2.147.483.648 a 2.147.483.647
-32.768 a 32.767
0 a 65.535
-32.768 a 32.767
-2.147.483.648 a 2.147.483.647
-2.147.483.648 a 2.147.483.647
0 a 4.294.967.295
Seis digitos de preciso
Dez digitos de preciso
Dez digitos de preciso
Percebemos ento que h uma srie de qualificadores que podem ser aplicados aos tipos bsicos: short
e long.
short int iTesteShort;
long int iTesteLong;
A inteno que short e long devam prover tamanhos diferentes de inteiros onde isso for possvel;
int normalmente ser o tamanho natural para uma determinada mquina. short ocupa normalmente 16
bits, long 32 bits, e int, 16 ou 32 bits (de acordo com a mquina). Cada compilador livre para escolher
tamanhos adequados para o seu prprio hardware, com a nica restrio de que short e int devem ocupar
pelo menos 16 bits, long pelo menos 32 bits, e short no pode ser maior que int, que no maior do que
long.
Existem tambm os qualificadores signed e unsigned, que podem ser aplicados a char ou a
qualquer inteiro. Nmeros unsigned so sempre positivos ou 0.
O tipo long double especifica ponto flutuante com preciso estendida. Assim como os inteiros, os
tamanhos de objetos em pontos flutuantes so definidos pela implementao.
11
#include <stdio.h>
/*Um Primeiro Programa*/
main ()
{
printf ("Ola! Eu estou vivo!\n"); //Escreve na tela
}
Compilando e executando este programa, ele escreve na tela: Ola! Eu estou vivo!
Analisando o programa acima por partes (linhas numeradas para facilitar):
1) #include <stdio.h> diz ao compilador que ele deve incluir o arquivo-cabealho padro da
linguagem C stdio.h. Nesse arquivo existem declaraes de funes teis para entrada e sada de dados
onde:
std = standard, que significa padro, em ingls
io = Input/Output, entrada e sada
Ento: stdio = entrada e sada padronizadas.
Toda vez que voc quiser usar uma destas funes deve incluir este comando. A linguagem C possui
diversos arquivos-cabealhos.
2) Quando fazemos um programa, uma boa idia usar comentrios que ajudem a elucidar o
funcionamento do mesmo. No exemplo apresentado temos um comentrio:
/*Um Primeiro Programa*/
O compilador desconsidera qualquer coisa que esteja comeando com /* e terminando com */.
*/ Um
comentrio pode, inclusive, ter mais de uma linha. Alis, se o comentrio for de apenas uma linha, podese usar //.
//
3) main() indica que estamos definindo uma funo de nome main. Todos os programas em C tm que
ter uma funo main, pois esta funo que ser chamada quando o programa for executado. No
exemplo, a funo main no recebe argumentos (os parnteses esto vazios).
4) O corpo (contedo) da funo delimitado por chaves { }.
} O cdigo que estiver dentro das chaves
ser executado seqencialmente quando a funo for chamada.
5) A nica coisa que o programa realmente faz chamar a funo printf(), passando a string (uma
string uma seqncia de caracteres, como veremos a seguir) "Ola! Eu estou vivo!\n" como
argumento. por causa do uso da funo printf() pelo programa que devemos incluir o arquivocabealho stdio.h . A funo printf( ) neste caso ir apenas colocar a string na tela do computador. O \n
uma constante chamada de constante barra invertida. No caso, o \n a constante barra invertida de
"new line" e ele interpretado como um comando de mudana de linha, isto , aps imprimir Ola! Eu
estou vivo! o cursor passar para a prxima linha. importante observar tambm que os comandos do C
terminam com ; e que strings so delimitadas por aspas duplas.
6) As chaves, ou seja, o terminador } indica o fim da rea da funo.
Programas em C so definidos em arquivos texto que normalmente possuem a extenso .c.
12
13
Exemplos:
1)
int codigos[100];
2)
char nomes[80];
3)
float salarios[30];
No exemplo nmero 1 apresentado acima, estamos declarando um vetor de inteiros com 100 posies,
chamado codigos. Os ndices vo de codigos[0] at codigos[99].
No exemplo 2, temos um vetor de caracteres com 80 posies, de nome[0] at nome[79]. Esta a forma
bsica para declaraes de strings em C.
No exemplo 3, temos um vetor float com 30 posies (ndices de 0 a 29), chamado salarios.
Por exemplo, o seguinte programa carrega uma matriz inteira com os nmeros de 0 a 99:
void main (void)
{
int x[100];
int t;
for (t=0; t<100; ++t)
{
x[t]=t;
}
}
14
Significado
%d
Inteiro Decimal
%f
%c
Caractere
%s
%o
Inteiro Octal
%x
Nmero Hexadecimal
%u
%l
Inteiro Longo
%%
Coloca na tela um %
15
Alm dos cdigos de controle, existem tambm os cdigos especiais, tais como o '\n' que j vimos
anteriormente. Na tabela abaixo esto listados esses cdigos especiais:
Cdigo
Significado
\n
Nova Linha
\t
Tab
\b
Retrocesso
\"
Aspas
\\
Contrabarra
\f
\0
Nulo
Veja no exemplo abaixo as diversas possibilidades do uso dos cdigos de formatao nas funes
scanf( ) e printf( ):
main()
{
char a;
printf ("Digite um caractere e veja-o em decimal, octal e
hexadecimal: ");
scanf ("%c",&a);
printf ("\n %c = %d em decimal, %o em octal e %x em
hexadecimal.\n",a,a,a,a);
}
Um exemplo de resultado de execuo do programa acima:
Digite um caractere e veja-o em decimal, octal e hexadecimal: m
m = 109 em decimal, 155 em octal e 6D em hexadecimal.
16
17
9.1 Comando if
O comando if representa uma tomada de deciso do tipo "SE isto, ENTO aquilo". A forma geral :
if (condio) comando;
else comando;
A condio do comando if uma expresso que ser avaliada. Abaixo est apresentado um exemplo:
#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10) printf ("\n\nO numero e' maior que 10");
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.");
}
if (num<10) printf ("\n\nO numero e' menor que 10");
return (0);
}
No programa acima a expresso num>10 avaliada e retorna um valor diferente de zero, se verdadeira, e
zero, se falsa. No exemplo, se num for maior que 10, ser impressa a frase: "O nmero e' maior que 10".
Repare que, se o nmero for igual a 10, estamos executando dois comandos. Para que isto fosse possvel,
tivemos que agrup-los em um bloco (com chaves) que se inicia logo aps a comparao e termina aps o
segundo printf. Repare tambm que quando queremos testar igualdades usamos o operador == e no = .
Isto porque o operador = representa apenas uma atribuio.
18
19
10 Operadores
Neste captulo so apresentadas tabelas com os operadores da linguagem C: aritmticos, relacionais e
lgicos.
Significado
Subtrao
Adio
Multiplicao
Diviso
Decremento
++
Incremento
Operadores Aritmticos
ou
++i;
i--;
--;
ou
--i;
--i;
20
Exemplos:
b = ++a;
equivalente a {a = a + 1; b = a;}
b = a++;
equivalente a {b = a; a = a + 1;}
b = --a;
--a;
equivalente a {a = a 1; b = a;}
b = a-a--;
--;
equivalente a {b = a; a = a - 1;}
Esses operadores quando usados no meio de comandos, confundem um pouco. conveniente us-los em
sua forma mais simples.
Exemplos:
a = 5;
b = a*
a*(a++);
b = a*++a;
a*++a;
b = a*a++;
a*a++;
Significado
==
igual
!=
>
maior que
<
menor que
>=
maior ou igual
<=
menor ou igual
Operadores Relacionais
&&
Ao
AND
||
OR
NOT
Operadores Lgicos
21
A idia de verdadeiro e falso a base dos conceitos dos operadores lgicos e relacionais. Em C,
verdadeiro qualquer valor diferente de zero e falso zero. As expresses que usam operadores
relacionais ou lgicos devolvem 0 para falso e 1 para verdadeiro. A tabela verdade dos operadores lgicos
apresentada a seguir, usando 0s e 1s:
p&&q
p||q
!p
Tabela Verdade
Na linguagem C permitido combinar diversas operaes em uma expresso como mostrado abaixo:
10>5 && !(10<9) || 3<=4
Qual o resultado da expresso acima: verdadeiro ou falso?
10.4 Operador de Endereo &
A memria do computador dividida em bytes, e estes bytes so numerados de 0 at o limite de memria
do computador em questo. Estes nmeros so chamados de 'endereos' de bytes. Um endereo o nome
que o computador usa para identificar a varivel.
Toda varivel ocupa uma certa localizao na memria, e seu endereo o do primeiro byte ocupado por
ela. Um inteiro ocupa 2 bytes. Se declararmos uma varivel n como inteira e a ela atribuirmos o valor 2,
quando n for referenciada devolver 2. Entretanto, se referenciarmos n precedido de & (&n), teremos
como retorno o endereo do primeiro byte onde n est armazenado na memria do computador.
O programa a seguir imprime o contedo da varivel n e o endereo fsico de n na memria:
main()
{
int iNum;
iNum=2;
printf ("Valor = %d, Endereo = %u", num, &num);
}
Um endereo na memria visto como um nmero inteiro sem sinal, por isso usamos o cdigo de
formatao %u.
%u
A sada deste programa varia conforme a mquina e a memria do equipamento (e o momento em que for
utilizado, mesmo estando na mesma mquina). Mas um exemplo de sada :
Valor = 2, Endereo = 1370
22
++
* / %
+
Mais baixa
Prioridades dos Operadores Aritmticos
!
> >= < <=
== !=
&&
||
Mais baixa
Prioridades dos Operadores Relacionais e Lgicos
Como no caso das expresses aritmticas, possvel usar parnteses para alterar a ordem natural de
avaliao de uma expresso relacional e/ou lgica. Por exemplo,
!0 && 0 || 0
falso. Porm, quando adicionamos parnteses, como abaixo, o resultado verdadeiro:
!(0 && 0) || 0
Lembre-se de que toda expresso relacional e lgica produz como resultado 0 ou 1. Ento, o seguinte
fragmento de programa no apenas est correto, como imprimir o nmero 1 na tela:
int x;
x = 100;
printf (%d, x>10);
23
E por ltimo, um lao adequado para situaes em que sabemos o nmero pr-determinado de
repeties que devero ser realizadas.
favor
24
25
Outro exemplo interessante mostrado a seguir: o programa l uma string e conta quantos dos caracteres
desta string so iguais letra 'c':
#include <stdio.h>
int main ()
{
char palavra[100]; /*String, ate 99 caracteres*/
int i, cont;
printf("\n\n Digite uma palavra: ");
scanf ("%s", palavra); /*Le a string*/
printf("\n\n Palavra digitada:\n %s", palavra);
cont = 0;
for (i=0; palavra[i] != '\0'; i=i+1)
{
if ( palavra[i] == 'c' ) /*Se for a letra 'c'*/
cont = cont+1; /*Incrementa o contador de caracteres*/
}
printf("\n Numero de caracteres c = %d", cont);
return(0);
}
Note o teste que est sendo feito no for: o caractere armazenado em palavra[i] comparado com '\0'
(caractere final da string). Caso o caractere seja diferente de '\0', a condio verdadeira e o bloco do for
executado. Dentro do bloco existe um if que testa se o caractere igual a 'c'. Caso seja, o contador de
caracteres c incrementado.
Mais um exemplo, agora envolvendo caracteres:
/*Este programa imprime o alfabeto: letras maiusculas*/
#include <stdio.h>
int main()
{
char letra;
for(letra = 'A'; letra <= 'Z'; letra =letra+1)
printf("%c ", letra);
}
Este programa funciona porque as letras maisculas de A a Z possuem cdigo inteiro seqencial.
26
2) Escreva um programa que coloque os nmeros de 1 a 100 na tela na ordem inversa (comeando em
100 e terminando em 1).
3) Escreva um programa que leia 10 valores do teclado. Imprima na tela a mdia dos 10 valores lidos.
4) Escreva um programa que leia 10 caracteres do teclado. Aps, todos os caracteres devero ser escritos
na tela, na mesma ordem em que foram digitados.
4.1) O mesmo exerccio anterior, mas agora os caracteres devem ser escritos na tela na ordem INVERSA
a que foram digitados.
12 Strings
Na linguagem C uma string um vetor de caracteres terminado com um caractere nulo. O caractere
nulo um caractere com valor inteiro igual a zero (cdigo ASCII igual a 0). O terminador nulo tambm
pode ser escrito usando a conveno de barra invertida do C como sendo '\0'.
0' Veremos a seguir os
fundamentos necessrios para que possamos utilizar strings. Para declarar uma string, podemos usar o
seguinte formato geral:
char nome_da_string [tamanho];
Isto declara um vetor de caracteres (uma string) com nmero de posies igual a tamanho. Note que,
como temos que reservar um caractere para ser o terminador nulo, temos que declarar o comprimento da
string como sendo, no mnimo, um caractere maior que a maior string que pretendemos armazenar.
Vamos supor que declaremos uma string de 7 posies e coloquemos a palavra casa nela. Teremos:
\0
No caso acima, as duas clulas no usadas tm valores indeterminados. Isto acontece porque a linguagem
C no inicializa variveis, cabendo ao programador esta tarefa. Portanto as nicas clulas que so
inicializadas so as que contm os caracteres 'c', 'a', 's', 'a' e '\0'.
Ateno: Existe um detalhe muito importante quanto a leitura de strings pelo teclado. O identificador
(nome) de um vetor/matriz retorna automaticamente o endereo inicial na memria que este vetor est
armazenado. Assim sendo, errado utilizar o operador de endereo (&) junto ao nome do vetor. Por
exemplo, quando fazemos referncia ao vetor palavra do cdigo abaixo, equivalente a &palavra[0].
#include <stdio.h>
int main () /*Este cdigo possui um ERRO!!! O & no scanf do vetor/string*/
{
char sPalavra[100];
printf ("Digite uma palavra: ");
scanf ("%s", &sPalavra);
printf ("\n\n Voce digitou %s",sPalavra);
return(0);
}
27
Para que este mesmo cdigo fique correto, basta retirar o operador (&) que est junto ao nome da
string, ficando ento da seguinte forma:
#include <stdio.h>
int main ()
/*Este codigo ESTA CORRETO!! FOI RETIRADO O & no scanf do
vetor/string*/
{
char sPalavra[100];
printf ("Digite uma palavra: ");
scanf ("%s", sPalavra);
sPalavra
printf ("\n\n Voce digitou %s",sPalavra);
return(0);
}
Neste programa acima, o tamanho mximo da string que voc pode entrar uma string de 99
caracteres.
12.1 Lendo Strings do Teclado: com mais de uma palavra (com espaos em branco)
gets: esta funo utilizada para ler strings do STDIN (normalmente o teclado). gets continua lendo
caracteres at que NEWLINE ou EOF seja encontrado.
Sintaxe:
char nome[80];
gets (nome);
Observao: gets no verifica o tamanho do buffer de entrada de dados. Por este motivo, pode acabar
sobrescrevendo informaes anteriormente armazenadas nesta rea de memria e corromper o
funcionamento do software e at mesmo do sistema.
fgets: usado para ler linhas de dados. Pode ser utilizado tanto para leituras de arquivos como para
entradas pelo teclado. Deve ser utilizado preferencialmente no lugar de gets, pois fgets verifica se o dado
que est sendo lido no excede o tamanho do buffer.
Sintaxe (para leituras de strings pelo teclado):
char sNome[80];
fgets (sNome, sizeof(sNome), stdin);
Como as strings so vetores de caracteres, para acessar um determinado caractere de uma string, basta
"indexarmos", ou seja, usar um ndice para acessar o caractere desejado dentro da string. Suponha uma
string chamada str. Podemos acessar a segunda letra de str da seguinte forma:
str[1] = 'a';
28
Por que se est acessando a segunda letra e no a primeira? Na linguagem C, o ndice de vetores
comea em zero. Assim, a primeira letra da string sempre estar na posio 0. A segunda letra sempre
estar na posio 1 e assim sucessivamente. Segue um exemplo que imprimir a segunda letra da string
"pera". Em seguida, ele mudar esta letra e apresentar a string no final.
#include <stdio.h>
int main()
{
char str[10] = "pera";
printf("\n\n String: %s", str);
printf("\n Segunda letra: %c", str[1]);
str[1] = 'a';
printf("\n Agora a segunda letra eh: %c", str[1]);
printf("\n\n String resultante: %s", str);
return(0);
}
Nesta string (" 'p' 'e' 'r' 'a' '\o' "), o terminador nulo est na posio 4. Das posies 0 a 4, sabemos que
temos caracteres vlidos, e portanto podemos escrev-los. Note a forma como inicializamos a string str
com os caracteres 'p' 'e' 'r' 'a' e '\0' simplesmente declarando char str[10] = "pera".
No programa acima, %s indica que printf( ) deve colocar uma string na tela. Nos prximos captulos,
veremos uma abordagem inicial s duas funes que j temos usado para fazer a entrada e sada.
29
13 Introduo s Funes
Uma funo um bloco de cdigo de programa que pode ser usado diversas vezes em sua execuo. O
uso de funes permite que o programa fique mais legvel, mais bem estruturado. Um programa em C
consiste, no fundo, de vrias funes colocadas juntas.
Abaixo o tipo mais simples de funo:
#include <stdio.h>
int mensagem () /* Funcao simples: imprime "Ola!" */
{
printf ("Ola! ");
return(0);
}
int main ()
{
mensagem();
printf ("Eu estou vivo!\n");
return(0);
}
Este programa ter o mesmo resultado que o primeiro exemplo da seo 4.1. O que ele faz definir uma
funo mensagem() que coloca uma string na tela e retorna 0. Esta funo chamada a partir de
main(), que, como j vimos, tambm uma funo. A diferena fundamental entre main() e as demais
funes do exemplo que main() uma funo especial, cujo diferencial o fato de ser a primeira
funo a ser executada em um programa.
30
Em primeiro lugar, temos que satisfazer aos requisitos da funo quanto ao tipo e quantidade de
argumentos quando a chamamos. Apesar de existirem algumas converses de tipo, que a linguagem
C faz automaticamente, importante ficar atento.
Em segundo lugar, no importante o nome da varivel que se passa como argumento, ou seja, a
varivel iNum, ao ser passada como argumento para quadrado() copiada para a varivel
iArgumento. Dentro de quadrado() trabalha-se apenas com iNum. Se mudarmos o valor de
iNum dentro de quadrado() o valor de iNum na funo main() permanece inalterado.
Vamos ver um exemplo de funo que receba mais de uma varivel como argumento. Repare que,
neste caso, os argumentos so separados por vrgula e que deve-se explicitar o tipo de cada um dos
argumentos, um a um. Note tambm, que os argumentos passados para a funo no necessitam ser todos
variveis porque mesmo sendo constantes sero copiados para a varivel de entrada da funo.
#include <stdio.h>
int mult (float a, float b,float c) /* Multiplica 3 numeros */
{
printf ("%f",a*b*c);
return(0);
}
int main ()
{
float x,y;
x=2;
y=3;
mult (x,y,4);
return(0);
}
31
posteriormente foi impressa usando o printf. Uma observao adicional: se no especificarmos o tipo
de retorno de uma funo, o compilador C automaticamente supe que esse tipo inteiro. Ento, no
uma boa prtica no especificar o valor de retorno.
Com relao funo main, o retorno sempre ser inteiro. Normalmente faremos a funo main retornar
um zero quando ela executada sem qualquer tipo de erro.
Mais um exemplo de funo, que agora recebe dois floats e tambm retorna um float:
#include <stdio.h>
float prod (float x,float y)
{
return (x*y);
}
int main ()
{
float fSaida;
fSaida=prod (2.5,4);
printf ("A saida eh: %f\n",fSaida);
return(0);
}
32
Referncias Bibliogrficas
Para elaborao desta apostila foram consultados vrios tipos de materiais, como: livros, outras apostilas,
pginas web etc. Algumas das referncias consultadas esto apresentadas neste captulo, mas grande parte
do material disponibilizado na apostila, como exemplos e exerccios foram fornecidos pelo Prof.
Marcelo Azambuja. Esse material utilizado por ele em suas aulas de Programao II C e est
disponvel em: http://professores.faccat.br/azambuja/
[CRU97] CRUZ, Adriano Joaquim de Oliveira. Material de aula sobre Linguagem C. Disponvel em:
http://equipe.nce.ufrj.br/adriano/c/home.htm. Acesso em: Mar. 2008.
[MAN97] MANZANO, Jos Augusto N. G. Estudo Dirigido de Linguagem C. So Paulo, rica, 1997.
[OUA97] OUALLINE, Steve. Practical C Programming - 3rd. Edition. Editora O'REILLY, 1997.
Disponvel em: http://www.oreilly.com/catalog/pcp3/chapter/ch13.html. Acesso em: Mar.
2008.
[SCH97] SCHILDT, Herbert. C - Completo e Total 3. Edio. So Paulo, Pearson Makron Books,
1997.
[ZIV02] ZIVIANI, Nivio. Projeto de Algoritmos: com implementaes em Pascal e C. So Paulo,
Pioneira Thomson Learning, 2002.
33