Você está na página 1de 30

Linguagem C

Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A


Linguagem C foi baseada na Linguagem B criada por Thompson.
C é uma linguagem utilizada para programação de qualquer tipo de sistema como
Sistemas Operacionais (Linux, Unix), Planilhas, Processadores de Texto, etc.

Compiladores e Interpretadores

A maneira de se comunicar com o computador chama-se programa e a única


linguagem que o computador entende chama-se linguagem de máquina. Portanto todos os
programas que se comunicam com a máquina devem estar em linguagem de máquina.
Há duas formas de tradução:
- Interpretadores: lê a primeira instrução do programa, faz uma consistência de
sua sintaxe e se não houver erro converte-a para uma linguagem de máquina
para executá-la. Segue, então, para a próxima instrução, repetindo o processo até
que a última instrução seja executada ou a consistência aponte algum erro. O
interpretador precisa estar presente todas as vezes que vamos executar o
programa e trabalho de checagem e tradução deverá ser repetido.
- Compiladores: lê a primeira instrução do programa, faz uma consistência de
sua sintaxe e se não houver erro converte-a para a linguagem de máquina, e em
vez de executá-la, segue para a próxima instrução repetindo o processo até que a
última instrução seja atingida ou a consistência aponte um erro. Se não houver
erros ele gera um programa em disco com o sufixo .OBJ com as instruções já
traduzidas. Depois o linkeditor agrega rotinas em linguagem de máquina que lhe
permitirão a execução criando em disco o .EXE (este não pode ser alterado).

Criar um Programa

DEVC++

Clique no botão para criar um novo projeto, conforme figura 1(a). Selecione o tipo
de aplicação a ser desenvolvida, Console Application, a linguagem de programação, C
Project, e o nome do projeto, conforme figura 1(b). Finalmente, escolha o diretório onde os
arquivos do projeto serão armazenados.
(a) Criação do projeto.

(b) Escolha do tipo de aplicação (console), linguagem (C) e nome do projeto.

(c) Escolha do diretório do projeto.


Figura 1 - Criação de novo projeto.

1
O Dev-C++ preenche já um código que normalmente você vai precisar para
testar/rodar o seu programa em consoles do MS Windows. Como indica a figura 2.

Figura 2 - Preenchimento automático do arquivo fonte pelo Dev-C++.

Compilação e execução

Para compilar o arquivo fonte feito clique no botão de compilação conforme a


figura 3 (a). Durante a compilação, aparece a janela da figura 3 (b). Ao final da compilação,
a janela deve estar igual à figura. Em particular, os campos Errors e Warnings devem
estar com o valor 0. Se não, olhe na aba de Log o erro, ou o aviso, e corrija seu código para
eliminá-lo. Feche a janela de compilação.

(a) Botão para compilar o projeto.

(b) Compilação bem sucedida do projeto.


Figura 3 - Compilação projeto.

Observação: Ao rodar este programa pelo sistema de janelas do MS Windows clicando no


seu ícone, você vai fazer com que o MS Windows crie uma janela DOS para rodar o

2
programa, execute o programa e feche a janela depois que o programa terminou. Na
maioria dos computadores novos, isto se passa tão rápido que você pode nem perceber que
ele rodou. É por esta razão que o Dev-C++ já incluiu no código de novos projetos a
chamada da função system() com o argumento "PAUSE" que provoca uma parada antes do
término do programa para que o usuário do sistema de janelas possa ver o resultado do
programa. Se você quiser, use o system("PAUSE"). Mas lembre-se de contar para o
compilador onde estão as definições necessárias para usar esta função:
Insira um #include <stdlib.h>.

Code::Blocks

Uma vez obtida a tela inicial do Code::Blocks clique em

File ———> New ———> File....

conforme ilustrado abaixo.

Na próxima janela, escolha C/C++ source e clique em Go.

3
Clique em Next para as duas próximas janelas, em especial para a segunda janela a
seguir, se certifique que linguagem selecionada é a C.

Na janela a seguir, digite um nome para o arquivo de programa a ser digitado. Para
tanto, clique no quadrado com ... que aparece ao lado da caixa com título Filename with full
path: e digite um nome de arquivo.

4
Clique agora em Salvar e depois em Finish. Na janela que foi criada você vai digitar,
compilar e executar seu primeiro programa em C.

Vamos compilar o seu programa. Você deve clicar em

Build ———> Compile current file

5
se tudo der certo, na janela de log abaixo do programa, haverá a indicação de que o
programa foi compilado com sucesso: 0 errors, 0 warnings

Com o programa compilado sem erros, a pasta onde foi salvo o arquivo contém
agora o programa executável ".exe." Para executar o programa clique no botão

Build ———> Run

da janela principal do Code::Blocks. Deverá surgir uma nova janela, de DOS, mostrando a
execução de seu programa, como pode ser visto na figura abaixo.

Note que na janela do DOS aparece a mensagem

6
Pressione qualquer tecla para continuar . . .

Depois de conferir o resultado, pressione qualquer tecla para que a janela do DOS
desapareça. Se a janela do DOS não desaparecer, para fechá-la clique no X, no canto
superior direito da mesma.

A estrutura Básica de um Programa

Consiste em uma ou várias “funções” ou programas.

main( ) // primeira função a ser executada


{ // inicia a função
} // termina a função

main( ): deve existir em algum lugar do programa, pois marca o início do programa.

Primeiro Programa

main ( )
{
printf(“Primeiro Programa”);
}
onde:
- “printf(“Primeiro Programa”);” é uma instrução e as instruções em
devem ser encerradas por “;”.
- printf( ) é uma função de E/S (Entrada e Saída), em que no interior dos
parenteses estão as informações passadas pelo programa, neste caso
main( ), a função printf ( ), isto é, “Primeiro Programa”, que chamamos
de argumento.
Quando o programa encontra a linha “printf(“Primeiro Programa”);”, ele passa o
controle para a função printf ( ), que irá imprimir na tela do computador e quando encerra a
execução volta novamente para o programa.

Sintaxe:
printf(“expressão de controle”,lista de argumentos);

Exemplo:
main( )
{
printf(“Este e o numero dois: %d”,2);
}
Saída: Este e o numero dois: 2

7
Esta função printf ( ), ilustrada acima possui 2 argumetos, onde o primeiro é “Este e
o numero dois: %d” e o segundo o “2”, mas ela pode possuir vários argumentos, que devem
ser separados por “,”.
A expressão de controle pode conter caracteres que serão exibidos na tela e códigos
de formatação que indicam o formato em que os argumentos devem ser impressos. Na
função printf ( ), acima a expressão de controle é o %d, que solicita a printf ( ) que imprima
o segundo argumento em formato decimal.
Abaixo está listado algumas expressões de controle de printf ( ):

%c Caractere simples
%d Decimal
%f Ponto flutuante
%s Cadeia de caracteres

Alguns códigos especiais:

\n Nova linha
\” Aspas
\\ Barra
/* Comentários
%% %

Constantes e Variáveis

Constante é definido como um valor fixo e inalterável. Exemplo: 8, “Primeiro


Programa”, “x”.
Variáveis são espaços de memória reservados para armazenar um certo tipo de dado
e tendo um nome referenciar o seu conteúdo, ou seja, espaço de memório que pode conter,
a cada tempo, valores diferentes.

Exemplo:
main ( )
{
int num;
num = 2;
printf(“Este e o numero dois: %d”,num);
}

Chamamos de declaração de variáveis uma instrução para reservar uma quantidade


de memória apropriada para armazenar o tipo especificado e indicar que o seu conteúdo
será referenciado pelo nome dado a esta variável, pois todas as variáveis devem ser
declaradas antes de ser utilizadas.
Existem alguns tipos de variáveis, que informam a quantidade de memória, em
bytes, que esta irá ocupar e a forma como o conteúdo será armazenado:

8
Tipo Descrição
char equivale ao tipo caractere
int equivale ao tipo inteiro
float equivale ao tipo real
void tipo nenhum

Exemplo: evento.c
main ( )
{
int evento;
char corrida;
float tempo;
evento = 5;
corrida = ‘c’;
tempo = 27.25;
printf("O tempo vitorioso na eliminatoria %c",corrida);
printf("\n da competicao %d foi %f.",evento,tempo);
}

Palavras-Chaves

auto float static


break for struct
case goto switch
char if typedef
const int union
continue long unsigned
do register void
double return volatile
else short while
enum signed
extern sizeof

Exercícios

1. Escreva um programa que contenha uma única instrução e imprima na tela:


Esta e a linha um.
Esta e a linha dois.
2. Escreva um programa que declare 3 variáveis inteiras e atribua os valores 1,2,3 a
elas; 3 variáveis caracteres e atribua a elas as letras a,b,c; finalmente imprima na
tela:
As variaveis inteiras contem os numeros: 1, 2, 3.
As variaveis caracteres contem os valores: a, b, c.

9
Função scanf( )

Função de E/S, que permite ler dados formatados da entrada padrão (teclado).
Sintaxe:
scanf (“expressão de controle”, lista de argumentos);
onde os argumentos devem ser endereços de variáveis. A expressão de controle
deve conter códigos de formatação, precedidos por um sinal %. A lista de argumentos deve
consistir somente nos endereços das variáveis.
O operador de endereços “&”, é o endereço do operando. Exemplo:
int n; /* variável n, do tipo inteiro
n = 2; /* n recebe o valor 2
n /*se for referenciado assim retorna o valor 2
&n /*se for referenciado assim retorna o endereço
onde n está guardado.*/
main()
{
int num;
num = 2;
printf(“Valor = %d, Endereço = %u”, num, &num);
}
Saída: Valor = 2, Endereço = 1370.
A seguir estão alguns códigos de formatação da função scanf ( ):

Código Função
%c Leia um único caractere.
%d Leia um inteiro decimal.
%s Leia uma série de caracteres
%f Leia um número em ponto flutuante.

Exemplo: idade.c
main()
{
float anos, dias;
printf(“Digite a sua idade em anos:”);
/*Necessário que digite [enter] para terminar a leitura*/
scanf(“%f”,&anos);
dias = anos * 365;;
printf (“Sua idade em dias e: %.0f.\n”,dias);
}
Em algumas situações a função scanf ( ) não se adapta perfeitamente pois você
precisa pressionar [enter] depois de sua entrada para que scanf ( ) termine a leitura. Neste
caso existem outras funções:

10
Operadores Aritméticos

Os operadores aritméticos binários, ilustrados abaixo, são aqueles que operam sobre
dois operandos:

= Atribuição
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Módulo (devolve o resto da divisão)

O operador unário, opera sobre um operando somente e é utilizado para indicar a


troca de sinal.

- Menos unário

Exemplo:

num = -1;
num1 = - num; /* então, num1 = 1

Outro exemplo:

main()
{
int ftemp, ctemp;
printf (“Digite a temperatura em graus Fahrenheit:");
scanf (“%d”,&ftemp);
ctemp = (ftemp – 32) *5/9;
printf(“Temperatura em graus Celsius: %d”,ctemp);
}

Operadores de Incremento ( + + ) e Decremento ( -- )

++ Incrementa de 1 seu operando


-- Decrementa de 1 seu operando

Estes operadores trabalham de 2 modos:


- Pré-fixado: antes da variável.
 ++ n: incrementa antes da variável ser utilizada.
- Pós-fixado: depois da variável.
 n ++: incrementa depois da variável ser utilizada.

11
Exemplos:
n=5
x = n++;
printf (“x = %d n = %d”,x,n);
Saída: x = 5 n = 6

n=5
x = ++n;
printf (“x = %d n = %d”,x,n);
Saída: x = 6 n = 6

Operadores de Atribuição ( + =, - =, * =, /=, %=)

Os operadores são usados com um nome da variável à esquerda e uma expressão à


direita.
x: variável
exp: expressão
op: operador(+ , -, *, / ou %)

x op = exp equivale a x = (x) op (exp)

Exemplos:
i+ = 2 i=i+2
x* = y + 1 x = x * (y+1)
t/=2.5 t = t / 2.5
p% =5 p = p%5
d - =3 d=d–3

Operadores Relacionais

São utilizados para fazer comparações.

> Maior
>= Maior ou igual
< Menor
<= Menor ou igual
== Igualdade
!= Diferente

Observação:
Variável booleana: assume V (verdadeiro) ou F (falso), ou seja, 1 se verdadeiro e 0
se falso.

12
Exemplo:

main()
{
int verdade, falso;
verdade = (15<20);
falso = (15==20);
printf(“Verdadeiro = %d, Falso = %d”, verdade, falso);
}
Saída
Verdadeiro = 1, Falso = 0

Atenção: Operadores aritméticos tem prioridade aos operadores relacionais.

Comentários

/*Comentários
ou
/*Comentários
Comentários*/

Exercícios

1. Escreva um programa no qual você digita o ano de nascimento e ele te informa quantos
anos você tem ou vai fazer neste ano.
2. Escreva um programa que solicite 3 números em ponto flutuante e imprima a média
aritmética.
3. Escreva um programa que receba 4 números inteiros, calcule e mostre a soma desses
números.
4. Faça um programa que receba 3 notas, calcule e mostre a média aritmética entre elas.
5. Faça um programa que receba o salário de um funcionário, calcule e mostre o novo
salário, sabendo-se que este sofreu um aumento de 25%.
6. Faça um programa que calcule e mostre a área de um triângulo.
Sabe-se que: Área = (base * altura)/2
7. Faça um programa que calcule e mostre a área de um círculo.
Sabe-se que: A = R2 e  = 3,1415
8. Faça um programa que receba o custo de um espetáculo teatral e o preço do convite
desse espetáculo. Esse programa deve calcular e mostrar a quantidade de convites que
devem ser vendidos para que pelo menos o custo do espetáculo seja alcançado.
9. Faça um programa que receba o preço de um produto, calcule e mostre o novo preço,
sabendo-se que este sofreu um desconto de 10%.
10. Faça um programa que calcule e mostre a área de um quadrado.
Sabe-se que: A = lado * lado.

13
Operadores Lógicos

Os operadores lógicos são utilizados para conectar expressões lógicas sendo


geralmente utilizados em expressões condicionais.
O
Operador Função
&& AND lógico
|| OR lógico
! NOT lógico

Exemplo: x = 5; y = (x>0)&&(x<7); A condição é verdadeira ou falsa?

Comando if

Sintaxe:

if(condição)
comando1;
else
comando2;

Se condição for verdadeira (diferente de 0) é executado comando1, senão é


executado comando2. Quando mais de um comando for utilizado, devem estar agrupados
entre { e }.O else, que é opcional, eqüivale sempre ao último if pendente (sem else).

Exemplos:

/* Exemplo 1 */
#include <stdio.h>
main()
{
int num;
printf("Digite um numero: ");
scanf("%d", &num);
if(num>0)
printf("%d eh positivo", num);
else
printf("%d eh negativo", num);
}

/* Exemplo 2 */
#include <stdio.h>

int main(void)
{
int num;
printf("Digite um numero: ");

14
scanf("%d", &num);
if(num%2==0){
printf("%d e' par\n", num);
printf("A metade e' %d\n", num/2);
}
else
printf("%d e' impar\n", num);
}

Exercício: Faça um programa que teste se um número lido é positivo ou negativo, e ainda,
que verifique se é par ou ímpar.

Comando else if

O comando else if é utilizado quando existem mais que duas condições a serem
testadas para diferentes saídas.

Sintaxe:

if(condição1)
comando1;
else if (condiçao2)
comando2;
else
comando3;

Comando switch

Este é um comando de seleção útil para ser utilizado quando a mesma variável é
comparada diversas vezes com valores diferentes. Um switch pode substituir muitos
comandos if.

Sintaxe:

switch(variável){
case valor1:
comandos a serem executados se
variável==valor1
break;
case valor2:
comandos a serem executados se
variável==valor12
break;
...
case valorn:
comandos a serem executados se
variável==valorn

15
break;
default:
comandos a serem executados se o valor não foi
encontrado
}

O valor da variável é comparado com o valor fornecido em cada um dos case


seguintes. Se for encontrado um valor igual, todos os comandos após este case são
executados, até encontrar um break. O default, no final do comando, é opcional. Os
comandos após o default somente serão executados se o valor da variável não coincidir
com nenhum dos valores correspondentes aos case anteriores.

/* Exemplo3: */
#include <stdio.h>
main()
{
int dia;
printf("Informe o dia da semana (1-7): ");
scanf("%d" , &dia);
switch(dia){
case 1:
printf("Domingo\n");
break;
case 2:
printf("Segunda-feira\n");
break;
case 3:
printf("Terça-feira\n");
break;
case 4:
printf("Quarta-feira\n");
break;
case 5:
printf("Quinta-feira\n");
break;
case 6:
printf("Sexta-feira\n");
break;
case 7:
printf("Sábado\n");
break;
default:
printf("Dia inválido\n");
}
}

16
Exercícios

1. Faça um programa que teste se um número é múltiplo de 2.


2. Qual é o valor de x no final da execução do programa abaixo?

main ()
{
int x = 3;
if (x > 4)
x = 2 *x;
x = x + 1;
}

3. Desenvolva um programa para determina o maior número de 3 números dados.


4. Desenvolva um programa para calcular e mostrar o desconto no valor de uma compra
(fornecido pelo usuário), de acordo com a tabela:
Valor Desconto
Até R$ 1000,00 10%
De R$ 1001,00 a R$ 5000,00 20%
Acima de R$ 5001,00 30%
5. Desenvolva um programa para ordenar o conteúdo de 3 variáveis.
6. Imagine uma prova com 100 questões, cada uma valendo 1 ponto, devendo o resultado
ser divulgado através de conceitos de acordo com a seguinte tabela:

Pontos Conceito
0 a 49 D
50 a 69 C
70 a 89 B
90 a 100 A

Escreva um programa que exiba o conceito da pontuação obtida.


7. Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um programa
que calcule seu peso ideal, utilizando as seguintes fórmulas:
- para homens: (72.7*h)-58;
- para mulheres: (62.1*h)-44.7

17
Laços

Em C existem 3 estruturas principais de laços:


- for
- while
- do-while

O Laço for

Engloba 3 expressões numa única expressão e é útil principalmente quando


queremos repetir algo um número fixo de vezes.

Sintaxe:
for (inicialização; condição; incremento)
{
comandos;
}

Onde:
- inicialização: instrução de atribuição, que é executada uma única vez antes
do laço ser inicializado;
- condição: instrução de teste que controla o laço, é avaliada como verdadeira
ou falsa toda vez que o laço for iniciado ou reiniciado. Se verdadeira o corpo
do laço é executado e se for falsa o laço é terminado e o programa passa para
a instrução seguinte do programa.
- incremento: define como a variável de controle do laço será alterada cada
vez que o laço é repetido. Esta instrução é executada, toda vez,
imediatamente após a execução do corpo do laço. Pode ser feito tanto
incremento quanto decremento da variável de controle.

Exemplo1: lacofor.c

/*Imprime os números de 0 a 4*/


main()
{
int conta;
for (conta=0; conta < 5; conta++)
printf(“Conta = %d \n”,conta);
}

Saída do programa:
Conta = 0
Conta = 1
Conta = 2
Conta = 3
Conta = 4

Instruções Múltiplas no Corpo do Laço for

18
Exemplo2:

main()
{
int conta, total;
total = 0;
for (conta = 0; conta < 10; conta++)
{
total =total+conta;
printf(“Conta = %d, Total = %d \n”,conta,
total);
}
}

Laços for Aninhados

Quando um laço for está dentro de outro laço for.


Exemplo:

/*gera a tabuada do numero 1 ate a do numero 9 */


main()
{
int i,j;
printf("\n");
for(i=1;i<=9;i++)
{
printf(" \n Gerando a Tabuada do %d \n ",i);
for(j=0;j<=10;j++)
{
printf("%d x %d = %d \n ",i,j,i*j);

}
}
}

Exercícios
1. Modifique o programa lacofor.c, para as seguintes situações:
a. Imprima os números de 9 a 0.
b. Imprima os números múltiplos de 3 contidos no intervalo de 0 a 9.
2. Escreva um programa que imprima o quadrado de todos os inteiros de 1 ao 20,
utilizando o laço for.
3. Escreva um programa, utilizando o laço for, para ler e determinar a média de 4 notas.
4. Faça um programa para calcular o fatorial de n, sabendo que o fatorial de um inteiro
não negativo n é o produto de todos os inteiros de 1 até n.
n! = 1, se n = 1 ou n = 0

19
n! = 1 * 2 * 3 * ... * n-1 * n
5. A seqüência de Fibbonaci é a seqüência (1,1,2,3,5,8,13,...) definida por:
An = 1, se n =1 ou n = 2
An = An - 1 + An - 2, se n >2
Escreva um programa que determine o n-ésimo termo desta seqüência, sabendo que n é
fornecido pelo usuário.

O Laço while
Sintaxe:
while (condição)
{
comandos;
}

Se a condição for verdadeira o corpo do laço while é executado uma vez e a


expressão de teste é avaliada novamente. Este ciclo é repetido até que a expressão de teste
se torne falsa, então o laço termina e o controle do programa passa para a próxima linha.

Exemplo:
main(){
int conta = 0;
while (conta < 10)
{
printf(“Conta = %d\n”,conta);
conta++;
} }

Este laço é mais utilizado em situações em que o laço pode ser terminado
inesperadamente por condições desenvolvidas dentro do próprio laço. Como o laço for ele
pode possuir múltiplas instruções dentro de um laço e pode ser utilizado também aninhado.

Exercícios
6. Escreva um programa que leia n notas e calcule a média, sabendo que ele deve mostrar
a média quando a nota lida for –1.

7. Qual o valor da variável x no final da execução dos trechos de programa abaixo:

a-) b-)
int cont = 0, x = 2; int i = 0, x = 3;
while (cont < 5) while (i <= 6)
{ {
x = x + 10; x = x + 3;
cont++; i +=2;
} }

20
O Laço do-while
Bastante similar ao laço while, mas a diferença entre os dois é que no do-while o
teste de condição é avaliado depois do laço ser executado. Assim este laço é sempre
executado uma vez.
Sintaxe:
do
{
comandos;
} while(condição);

Exemplo:
main()
{
float nota, soma, media;
int cont = 0;
soma=0;
do{
printf("Digite a nota:");
scanf("%f",&nota);
soma =soma + nota;
cont++;
} while(nota!=-1);
media = soma/(cont-1);
printf("Media = %.2f",media);
}

Exercícios

8. Qual o valor da variável x no final da execução dos trechos de programa abaixo:


a-) b-)
int cont = 0, x = 2; int j = 4, x = 1;
do do
{ {
x = 3*x; x = x + 2;
cont++; j--;
} while (cont <=3); } while (j > 0);

21
Vetores

Vetor é um tipo de dado usado para representar uma certa quantidade de variáveis
de valores homogêneos (do mesmo tipo).
Imagine o seguinte problema: calcular a média das notas da prova de 5 alunos. Você
poderia declarar:

int nota0, nota1, nota2, nota3, nota4;

e o programa deverá ler os valores separadamente:

printf(“Digite a nota do aluno 0”);


scanf(“%d”, &nota0);
printf(“Digite a nota do aluno 1”);
scanf(“%d”, &nota1);
.......
.......
.......
printf(“Digite a nota do aluno 4”);
scanf(“%d”, &nota4);

Imagine se pretendêssemos encontrar a média aritmética das notas de uma classe de


50 alunos? Seria uma programação bastante volumosa.
O vetor é uma série de variáveis do mesmo tipo referenciadas por um único nome,
onde cada variável é diferenciada através de um número chamado “índice”.

A declaração em linguagem C para um vetor é feita da seguinte maneira:

int notas[5];

Esta declaração aloca memória para armazenar 5 inteiros e anuncia que “notas” é
um vetor de 5 elementos de inteiros. A palavra “int” declara que todo elemento do vetor é
do tipo “int”. “notas” é o nome dado ao vetor e “[5]” indica que o vetor terá 5 elementos.
Em C, os vetores precisam ser declarados, como quaisquer outras variáveis, para
que o compilador conheça o tipo do vetor e reserve espaço de memória suficiente para
armazená-la.
Os elementos de um vetor são guardados numa seqüência contínua de memória, isto
é, um seguido ao outro.
Na declaração de um vetor, deve-se colocar entre [ ] o tamanho o do vetor (quantos
elementos ele poderá armazenar).

22
Referenciando um elemento do vetor

Uma vez declarado o vetor, precisamos de um modo de referenciar os elementos


individualmente. Isto é feito através de um número entre colchetes seguindo o nome do
vetor.
Quando referenciamos um elemento do vetor este número especifica a posição do
elemento no vetor. É importante diferenciar bem os conceitos de posição e conteúdo.
Os elementos do vetor são sempre numerados por índices iniciados por 0 (zero),
como mostra o exemplo da figura abaixo:

vetor
conteúdo
0 1 2 3 4 posição

O elemento referenciado pela posição (índice) 2 é especificado pela seguinte


instrução:

notas[2]

Este não é o segundo elemento do vetor e sim o terceiro, pois a numeração começa
em 0. Assim o último elemento do vetor possui um índice menor que o tamanho do vetor.

Exemplo 1: Faça uma programa que declare um vetor para armazenar 5 notas, leia
as 5 notas e calcule a média.

#include <stdio.h>
main()
{
int notas[5];
int i, soma = 0;

for (i=0; i<5; i++)


{
printf(“Digite a nota do aluno %d: ”, i);
scanf(“%d”, &notas[i]);
soma = soma + notas[i];
}
printf(“media das notas = %d”, soma/5);
}

23
Armazenando dados no vetor

No exemplo1, a parte do programa que armazena dados no vetor é:

for (i=0; i<5; i++)


{
printf(“Digite a nota do aluno %d: ”, i);
scanf(“%d”, &notas[i]);
}

O laço for causa um processo de solicitação ao usuário e leitura das notas, repetido
5 vezes. Na instrução scanf( ), nós usamos o operador (&) junto da variável notas[i], que é
uma variável como outra qualquer.

Lendo dados do vetor

No exemplo1, a parte do programa que lê dados do vetor é:

soma = soma + notas[i];

O laço for adiciona os valores contidos em cada elemento do vetor (notas[i]) em


uma variável “soma”, para depois calcular a média.

Utilizando a diretiva #define

Com a diretiva #define podemos definir um valor constante conforme o exemplo


abaixo.

Exemplo 2: Faça um programa que leia notas até que a nota seja menor ou igual a
0. Calcule e apresente a média das notas.

#include<stdio.h>
#define tamanho 40

main(){
float notas[40], soma = 0.0;
int i;
do
{
printf(“Digite a nota do aluno %d: ”, i);
scanf(“%f”, &notas[i]);
if (notas[i] > 0)
soma = soma + notas[i];
i++;
} while(notas[i] > 0);
printf(“media das notas = %.2f”, soma/(i-1) );
}

24
No exemplo2, a diretiva define foi utilizada para criar uma constante chamada
“tamanho” e que contém o valor 40. O uso de constantes para dimensionar vetores é
comum em C, pois, se com o passar do tempo quisermos aumentar ou diminuir este valor,
precisamos somente trocar o 40 pelo número desejado e a troca refletirá em qualquer parte
do programa onde a palavra “tamanho” aparece.
A variável notas foi definida com o tamanho máximo de 40 elementos reais,
utilizando a palavra “tamanho”.
No exemplo 2, o laço do-while repete a solicitação da nota ao usuário,
armazenando-a no vetor “notas”, até que seja fornecido um valor menor ou igual à zero (0).
Quando o último item for digitado, a variável i terá alcançado um valor acima do valor total
de itens. Portanto, para encontrar o número de itens válidos devemos subtrair 1 do valor
contido em i.
O ideal no exemplo 2 é verificar se o limite máximo do vetor não foi ultrapassado e
isso é de responsabilidade do programador. Sendo assim, poderíamos embutir o seguinte
trecho no código:

do
{
if (i > = tamanho)
{
printf(“capacidade máxima do vetor
preenchida\n”);
break;
}

printf(“Digite a nota do aluno %d: ”, i);


scanf(“%f”, &notas[i]);
if (notas[i] > 0)
soma = soma + notas[i];
i++;
} while(notas[i] > 0);

O comando “break” termina a execução do laço “do-while”.

Inicializando vetores

Um vetor pode ser inicializado na instrução de sua declaração, para que possamos
especificar valores prefixados. Para sua inicialização devemos colocar os valores separados
por vírgulas e todos eles entre { }. A quantidade de valores definidos não pode ser superior
ao tamanho máximo do vetor. Se há menos inicializadores que a dimensão especificada, os
outros serão zero.

25
Exemplo 3:

#include<stdio.h>
main()
{
float soma = 0.0 , notas[5] = {5.0, 6.0, 7.0, 8.0,
9.0};
int i;

for (i=0; i<5; i++)


{
printf(“Digite a nota do aluno %d: ”, i);
scanf(“%d”, &notas[i]);
soma = soma + notas[i];
}
printf(“media das notas = %d”, soma/5);
}

Exercícios

1) Faça um programa que seja capaz de conhecer e armazenar quaisquer 10 valores


inteiros em um vetor.
2) Faça um programa que seja capaz de conhecer e armazenar N valores inteiros quaisquer
em um vetor com capacidade de armazenamento de 50 elementos inteiros. O valor de N
é fornecido pelo usuário.
3) Faça um programa que, tendo como dados de entrada 10 valores reais, calcule a média
aritmética entre os mesmos, e que seja possível saber quantos elementos são superiores
a média calculada.
4) Faça um programa que leia 2 vetores de 10 elementos inteiros cada, e que construa um
terceiro vetor composto somente com os elementos que estão nos dois vetores.
5) Refaça o item 4, evitando elementos repetidos no vetor gerado.
6) Faça um programa que leia 2 vetores de 50 elementos inteiros cada. Em seguida crie um
vetor soma com base nos dois vetores lidos.

26
Matrizes

Matriz é um conjunto de dados com o mesmo tipo, referenciado por um nome e que
necessita de mais de um índice para armazenar seus elementos.

Exemplo: se quisermos armazenar 3 notas de 5 alunos. Podemos criar uma matriz


com 2 dimensões, uma com 5 linhas e outra com 3 colunas.

float nota[5][3];

Em C, a declaração de uma matriz é feita como no exemplo acima, iniciando pelo


tipo da variável, o nome da variável e as dimensões para linha e coluna.

0 1 2 índice da coluna (nota)


0 7.0 5.0 3.0
1 8.0 4.5 6.7
variável nota 2 4.5 5.0 10.0
3 9.0 8.0 6.0
4 6.0 5.0 5.0

índice da linha (aluno)

Utilizando a estrutura de dados matriz, foi possível armazenar em uma única


variável as 3 notas para os 5 alunos.

Acessando os elementos de uma matriz

Para particularizar uma célula de uma estrutura “matriz”, devemos utilizar o


identificador e um valor de índice para cada dimensão.

identificador[índice da linha][índice da coluna]

Se quisermos acessar, na variável nota, a nota 2 do aluno 3, devemos utilizar


nota[3][2] = 6.0.
Observação: o índice em linguagem C começa sempre em zero.

Armazenando dados em uma matriz

Para o armazenamento em linha, deve-se fixar um valor de índice de linha e variar


seqüencialmente os índices de coluna. Após o término do mapeamento de coluna para a
linha fixada, se fixa à próxima linha e percorre-se o mapeamento da coluna para esta nova
linha. Para o armazenamento em coluna o procedimento é o mesmo, porém, fixando-se a
coluna e variando a linha.

27
Exemplo1: armazenando dados na matriz “nota”

#include<stdio.h>

main(){
float nota[5][3];
int i,j;

for (i=0; i<5; i++)


{
for (j=0; j<3; j++)
{
printf(“Entre com a nota %d do aluno %d”, j, i);
scanf(“%f”, &nota[i][j]);
}
}
}

Acessando os dados armazenados de uma matriz


Para acessar os dados de uma matriz por linha, o procedimento é o mesmo, deve-se
fixar um valor de índice de linha e variar seqüencialmente os índices de coluna. Após o
término do mapeamento de coluna para a linha fixada, se fixa à próxima linha e percorre-se
o mapeamento da coluna para esta nova linha.

Exemplo1: Escrevendo dados da matriz “nota”


for (i=0; i<5; i++)
{
for (j=0; j<3; j++)
{
printf(“nota[%d][%d] = %f”, i, j, nota[i][j]);
}
printf(“\n”);
}

Inicializando uma matriz

A inicialização de uma matriz é feita da mesma forma que a de um vetor, onde os


elementos de cada linha são colocados entre chaves.

Exemplo:
float nota[2][3] = { {8.0, 3.0, 5.0},
{8.5, 3.5, 5.5}};

28
Declarando e armazenando dados em uma matriz de strings

#include <stdio.h>

main()
{char aluno[5][30];
int i;
for (i=0; i<5; i++)
{
printf(“Entre com o nome do aluno %d”, i);
scanf(“%s”, aluno[i]);
}
}

OBS: É importante notar que para a leitura de uma string, usando scanf, não é necessário
usar o símbolo & antes do nome da variável.

Exercícios:

1) Faça um programa que leia 200 números inteiros e armazená-los por linha em uma
matriz de 20 linhas e 10 colunas.
2) Faça um programa onde os seguintes números devem ser lidos para uma matriz de 4
linhas e 3 colunas: 21, -3, 55, 788, 5, 93, 4, 45, 595, 666, 5 e 88. A saída do programa
deve ter o seguinte formato.

21 5 595
-3 93 666
55 4 5
788 45 88

3) Faça um programa que leia os dados de uma matriz de 4 linhas e 4 colunas, composta
de elementos reais, e calcule a soma dos elementos da diagonal principal da matriz.
4) Faça um programa que leia os valores de uma matriz 10x10 de elementos reais, e crie a
matriz transposta da matriz fornecida.
5) Faça um programa que leia uma matriz 20x20 de elementos reais e gere um vetor de 20
elementos reais, onde cada elemento do vetor seja a soma de cada linha da matriz.
6) Faça um programa que receba uma matriz 10x10 de elementos inteiros, e localize a
posição (linha e coluna) do maior elemento da matriz.
7) Faça um programa que calcule a média das notas por aluno e a média geral de 5 alunos,
sabendo que cada um fez 3 provas.

Bibliografia

1. MIZRAHI, Victorine Viviane. Treinamento em linguagem C: curso completo. São


Paulo: Makron Books, 2004. v1 e v2.
2. SCHILDT, Herbert, C Completo e Total, 3ª edição, São Paulo, Editora Makron Books.
3. ASTÊNCIO, A.F.G. & CAMPOS, E.D. Fundamentos da Programação de Computadores
São Paulo: Prentice Hall Brasil, 2002.

29