Você está na página 1de 24

UNORP

ALGORITMOS E LINGUAGEM DE PROGRAMAO

Conceitos Bsicos e Linguagem C

SO JOS DO RIO PRETO

2017
-2-

INTRODUO

A linguagem C foi criada por Dennis Ritchie, em 1972, no centro de Pesquisas da Bell
Laboratories. Sua primeira utilizao importante foi a reescrita do Sistema Operacional UNIX,
que at ento era escrito em assembly.
Em meados de 1970 o UNIX saiu do laboratrio para ser liberado para as universidades.
Foi o suficiente para que o sucesso da linguagem atingisse propores tais que, por volta de 1980, j
existiam vrias verses de compiladores C oferecidas por vrias empresas, no sendo mais
restritas apenas ao ambiente UNIX, porm compatveis com vrios outros sistemas operacionais.
O C uma linguagem de propsito geral, sendo adequada programao estruturada. No
entanto mais utilizada para escrever compiladores, analisadores lxicos, bancos de dados, editores
de texto, etc.
A linguagem C pertence a uma famlia de linguagens cujas caractersticas so: portabilidade,
modularidade, compilao separada, recursos de baixo nvel, gerao de cdigo eficiente,
confiabilidade, regularidade, simplicidade e facilidade de uso.

Viso geral de um programa C

A gerao do programa executvel a partir do programa fonte obedece a uma sequncia de


operaes antes de tornar-se um executvel. Depois de escrever o mdulo fonte em um editor
de textos, o programador aciona o compilador que no UNIX chamado pelo comando cc. Essa ao
desencadeia uma sequncia de etapas, cada qual traduzindo a codificao do usurio para uma
forma de linguagem de nvel inferior, que termina com o executvel criado pelo lincador.

Editor (mdulo fonte em C)


Pr-processador (novo fonte expandido)


Compilador (arquivo objeto)


Lincador (executvel )

SINTAXE
A sintaxe composta por regras detalhadas para cada construo vlida na linguagem C.
Estas regras esto relacionadas com os tipos, as declaraes, as funes e as expresses.
Os tipos definem as propriedades dos dados manipulados em um programa.
As declaraes expressam as partes do programa, podendo dar significado a um
identificador, alocar memria, definir contedo inicial, definir funes.
As funes especificam as aes que um programa executa quando roda. A determinao
e alterao de valores, e a chamada de funes de I/O so definidas nas expresses .
As funes so as entidades operacionais bsicas dos programas em C, que por sua vez so
a unio de uma ou mais funes executando cada qual o seu trabalho. H funes bsicas que esto
definidas na biblioteca C. As funes printf() e scanf() por exemplo, permitem respectivamente
escrever na tela e ler os dados a partir do teclado. O programador tambm pode definir novas
funes em seus programas, como rotinas para clculos, impresso, etc.
-3-

Todo programa C inicia sua execuo chamando a funo main(), sendo obrigatria a
sua declarao no programa principal.
Comentrios no programa so colocados entre /* e */ no sendo considerados na
compilao.
Cada instruo encerra com ; (ponto e vrgula) que faz parte do comando.
Ex:
int main() /* funo obrigatria */
{
printf("oi");
}

SADA DE DADOS - Funo printf() (biblioteca: stdio.h)

Sintaxe:
printf("expresso de controle",argumentos);

uma funo de I/O, que permite escrever no dispositivo padro (tela).

A expresso de controle pode conter caracteres que sero exibidos na tela e os cdigos de
formatao que indicam o formato em que os argumentos devem ser impressos. Cada
argumento deve ser separado por vrgula.

Caracteres exibidos na tela Cdigos de formatao


\n nova linha %c caractere simples
\t tab %d inteiro
\b retrocesso %e notao cientfica
\" aspas %f ponto flutuante
\\ barra %o octal
\f salta formulrio %s cadeia de caracteres
\0 nulo %u decimal sem sinal
%x hexadecimal

int main()
{
printf("Este o numero dois: %d",2);
printf("%s est a %d milhes de milhas\ndo
sol","Vnus",67);
}

Tamanho de campos na impresso: Para arredondamento:


int main() int main()
{ {
printf("\n%2d",350); printf("\n%4.2f",3456.78);
printf("\n%4d",350); printf("\n%3.2f",3456.78);
printf("\n%6d",350); printf("\n%3.1f",3456.78);
} printf("\n%10.3f",3456.78);
}
-4-

Para alinhamento:
Ex:
int main()
{
printf("\n%10.2f %10.2f %10.2f",8.0,15.3,584.13);
printf("\n%10.2f %10.2f %10.2f",834.0,1500.55,4890.21);
}

Complementando com zeros esquerda: Imprimindo caracteres:


Ex: Ex:
int main() int main()
{ {
printf("\n%04d",21); printf("%d %c %x %o\n",'A','A','A','A');
printf("\n%06d",21); printf("%c %c %c %c\n",'A',65,0x41,0101);
printf("\n%6.4d",21); }
printf("\n%6.0d",21);
}

A tabela ASCII possui 256 cdigos de 0 a 255, se imprimirmos em formato caractere um


nmero maior que 255, ser impresso o resto da diviso do nmero por 256; se o nmero for 3393
ser impresso A pois o resto de 3393 por 256 65.

Exerccio:
a. Faa um programa que escreva na tela seu nome e a data de hoje, uma informao em cada
linha.

VARIVEIS E CONSTANTES
So entidades que armazenam valores. A diferena entre variveis e constantes est na
possibilidade de alterao do valor armazenado, durante todo o tempo de durao do programa.

Constantes Variveis
Entendemos que uma informao Entendemos que uma informao varivel
constante quando no sofre nenhuma variao quando sofre variaes durante o decorrer do
no decorrer do tempo. tempo.
A declarao de constantes deve ser feita A declarao de variveis feita da seguinte
da seguinte maneira: maneira:
#define nome_const valor_const Tipo nome_var;
Ex: Ex:
#define UM_CM 1 float dolar;
#define NOME Joo char endereco;
#define PI 3.14159 int idade;

Identificadores

So nomes usados para se fazer referncia a variveis, funes, rtulos e vrios outros
objetos definidos pelo usurio. O primeiro caracter deve ser uma letra ou um sublinhado. Os 32
primeiros caracteres de um identificador so significativos. case sensitive, ou seja, as letras
maisculas diferem das minsculas.

int x; /* diferente de int X;*/


-5-

Exerccio: Assinale os identificadores vlidos:


1) abc 2) AB/C 3) Joo 4) [x] 5) 123a
6) 080 7) 1 a 3 8) (x) 9) #55 10) AH!
11) Etc... 12) ...a BAC 14) xyz 15) Porta_mala
16) A_B-C 17) B2 18) p{0} 19) A123 20) A.

TIPOS DE DADOS

Quando voc declara um identificador d a ele um tipo. Os tipos principais podem ser
colocados dentro da classe do tipo de objeto de dado. Um tipo de objeto de dados determina como
valores de dados so representados, que valores pode expressar, e que tipo de operaes
voc pode executar com estes valores.

Tipos Inteiros
char (0,128) igual a signed char ou unsigned char
signed char (-128,128) inteiro de pelo menos 8 bits
unsigned char (0,256) mesmo que signed char sem negativos
short (2-15,215) inteiro de pelo menos 16 bits tamanho pelo menos igual a char
16
unsigned sort (0,2 ) mesmo tamanho que sort sem negativos
-15 15
int (2 ,2 ) inteiro de pelo menos 16 bits; tamanho pelo menos igual a short
16
unsigned int (0,2 ) mesmo tamanho que int sem negativos
inteiro com sinal de pelo menos 32 bits; tamanho pelo menos
long (2-31,231)
igual a int
unsigned log (0,232) mesmo tamanho que long sem valores negativos
-6-

Uma implementao do compilador pode mostrar um faixa maior do que a mostrada na


tabela, mas no uma faixa menor. As potncias de 2 usadas significam:
215 32.768
216 65.536
231 2.147.483.648
232 4.294.967.298

Tipos Flutuantes
float [3.438, 3.4+38] pelo menos 6 dgitos de preciso decimal
308 +308
double (1.7 ,1.7 ) pelo menos 10 dgitos decimais e preciso maior que do float
308 +308
long double (1.7 ,1.7 ) pelo menos 10 dgitos decimais e preciso maior que do double

Exerccio:
1. Identifique para cada dado abaixo se ele do tipo Inteiro (int), Real (float), Lgico (boolean),
Caracter (char) ou Cadeia de caracteres (string):
a. Salrio do funcionrio de uma empresa.
b. Quantidade de vendedores de uma loja.
c. Nmero de latas de refrigerante em uma prateleira.
d. Nome de um assinante de linha telefnica.
e. Preo de um litro de leite.
f. Estado de iluminao de uma lmpada em perfeitas condies.
g. Quantidade de sacos de arroz vendidos a um mercado.
h. Preenchimento do sexo de uma pessoa em um formulrio (assuma M ou F).
i. Luz de um sinal de trnsito (assuma Vermelho, Amarelo ou vErde).
j. Quantidade de litros de combustvel no abastecimento em um posto.
k. Nmero de alunos de uma turma.
l. Resposta de uma questo de mltipla escolha (opes A at D).
m. CEP de uma carta.
n. Valor a pagar pela refeio num restaurante a quilo.
o. Placa de um automvel.

2. Identifique o tipo dos dados:


(a) int (b) float (c) boolean (d) char ou string

( ) true ( ) 234 ( ) ( ) false


( ) 45.0 ( ) 1 2 3 4 ( ) 354.0 ( ) 23
( ) 1234 ( ) 0.342 ( ) 15.E2 ( ) a
( ) 0.0 ( ) 35.23 ( ) false ( ) 15043-230
( ) aula ( ) 34 ( ) 0 ( ) 127.68
( ) c*d ( ) 18.589 ( ) 897 ( ) a+b
-7-

ENTRADA DE DADOS - Funo scanf() (biblioteca: stdio.h)

Tambm uma funo de I/O implementada em todos compiladores C. Ela o complemento


de printf() e nos permite ler dados formatados da entrada padro (teclado).

Sua sintaxe similar a printf():


scanf("expresso de controle", argumentos);

A lista de argumentos deve consistir nos endereos Cdigos de formatao


das variveis. C oferece um operador para tipos bsicos %c caractere simples
chamado operador de endereo e referenciado pelo %d inteiro
smbolo "&" que retorna o endereo do operando.
%f ponto flutuante
%s cadeia de caracteres
Operador de endereo &:

A memria do computador dividida em bytes, e so numerados de 0 at o limite da


memria. Estas posies so chamadas de endereos. Toda varivel ocupa uma certa localizao na
memria, e seu endereo o primeiro byte ocupado por ela.

Ex:

int main()
{
int num;
printf("Digite um nmero: ");
scanf("%d",&num);
printf("\no nmero %d",num);
printf("\no endereo e %u",&num);
}

Exerccio:
a. Faa um programa que leia o nome e a qualidade de uma pessoa, e exiba a seguinte mensagem
na tela:

<Nome> uma pessoa que tem <Qualidade>

Funo getchar()

a funo original de entrada de caractere dos sistemas baseados em UNIX. getchar()


armazena a entrada at que ENTER seja pressionada.
Ex:
int main()
{
char ch;
ch=getchar();
printf("%c\n",ch);
}
-8-

Funo putchar()

Escreve na tela o argumento de seu caractere na posio corrente.


Ex:
int main()
{
char ch;
printf("digite uma letra minscula : ");
ch=getchar();
putchar(toupper(ch));
putchar('\n');
}

H inmeras outras funes de manipulao de char complementares s que foram vistas,


como isalpha(), isupper(), islower(), isdigit(), isespace(), toupper(), tolower().

OPERADORES
Operador de atribuio

O operador de atribuio em C o sinal de igual "=". Ao contrrio de outras linguagens,


o operador de atribuio pode ser utilizado em expresses que tambm envolvem outros
operadores.

Ex:
soma = 3 + 2; /* leia: soma recebe 3 + 2 */
ano = 2007; /* leia: ano recebe 2007 */
soma = numero1 + numero2; /* leia: soma recebe numero1 + numero2 */

Exerccio: Dadas as declaraes:


int num;
float soma, x;
char simbolo;
char nome[30], cor[30], dia[30];

Assinale os comandos de atribuio invlidos:


( ) simbolo = 5; ( ) x = x + 1;
( ) soma = num + 2 * x; ( ) dia = segunda;
( ) num = *ABC*; ( ) nome = soma;
( ) cor = preto; ( ) num = simbolo;

Operadores Aritmticos

Os operadores *, /, + e - funcionam como na maioria das linguagens, o operador % indica o


resto de uma diviso inteira.

Matemtico Em C Descrio Exemplos:


+ + adio
9/4 = 2,25
X * multiplicao
- - subtrao 9 % 4 = 25
: / diviso 15 % 7 = 1
mod % resto da diviso
-9-

i+=2; i=i+2; Prioridade nas operaes:


x*=y+1; x=x*(y+1);
d-=3; d=d-3; 1. ( )
Ex:
int main() 2. %
{
int x,y; 3. * /
x=10; 4. + -
y=3;
printf("%d\n",x/y);
printf("%d\n",x%y);
}
Exerccio: Resolva as expresses abaixo:
a. 2+35*8/4 f. 9 / (2 * 3 + 1)
b. 7*4/2+96 g. 7%38+4
c. 7 * 4 / 2 + (9 6) h. 6/33*4%2
d. 9/2*3+1 i. 1+23*5%6
e. 9 / (2 * 3) + 1 j. ((1 + 2) 3) * 5 % 6

Operadores Relacionais

Utilizamos os operadores relacionais para realizar comparaes entre dois valores de mesmo
tipo primitivo. Tais valores so representados por constantes, variveis ou expresses aritmticas.
Os operadores so:
Exemplos:
== igual a
1) 5 = 5 (V)
> maior que
< menor que 3) a = A (F)
!= diferente de 2) V = F (F)
>= maior ou igual a
<= menor ou igual a 4) Considere:
real = 1 e dolar = 1,8
O resultado SEMPRE um valor lgico.
real = dolar (F)

Exerccio: Resolva as expresses abaixo:


a. 7>2
b. 4 * 2 * 3 % 7 < 15
c. 9 / (2 * 3) + 1 > 9 / (2 * 3 + 1)
d. (2 + 3) % 3 == 0 + 2
e. (5 - 3) * 5 >= 8 + 4 2
f. 7 % 3 8 != 4 / 2
g. 3 * 6 / 2 + 8 % 3 == 0
h. (10 + 5) % 3 > = 5
i. (8 / 2) % 2 != 2
j. 3 * 4 <= 3
k. 2 + 8 % 7 >= 3 * 6 - 15
- 10 -

Operadores Lgicos

Utilizaremos trs conectivos bsicos para a formao de novas proposies a partir de outras
j conhecidas. Os operadores lgicos so:
&& and conjuno As expresses que usam
|| or disjuno operadores de relao e
! not negao lgicos retornaro 0 para falso
e 1 para verdadeiro.
Tabela-Verdade: uma combinao de possibilidades a serem feitas pelo operador, indicando cada
tipo de resultado gerado. Se considerarmos X como o elemento esquerda do operador e Y o da
direita, as tabelas para cada operador ficam com a seguinte forma:

Tabela-verdade do operador && (AND) Tabela-verdade do operador || (OR)


X Y X && Y X Y X || Y
F F F F F F
F V F F V V
V F F V F V
V V V V V V

Prioridade nos operadores:


Tabela-verdade do operador ! (NOT) 1. ( )
X !X
2. op. aritmticos
F V
V F 3. op. relacionais

4. op. lgicos
Exemplos:
a. (5 > 2) && (10 >= 7) b. (5 > 3) && (10 <= 7)
V && V V && F
V F

c. (30 > 50) || (40 > 30) d. (5 == 3) || (3 > 2)


F || V F || F
V F

e. !(5 > 4) f. !(9 <= 2 )


!(V) !(F)
F V

Exerccio: Resolva as expresses abaixo:


a. (5 < 7) && (5 % 2 < 3)
b. (3 != 3) && (3 * 3 % 2 < 4)
c. (2 * 3 > 8 + 5) || (3 * 4 5 > 6 + 7)
d. (((20 % 3) / 3) == 4) && (((20 % 3) %2) == 0)
e. (!(V)) || (9 / 3 < 15 35 % 7)
f. (6 / 2 / 1 == 2) && (4 * 5 % 5 == 0)
g. !((5 != 10 / 2) || (2 5 > 5 2))
h. (((10 * 2) % 5 + 4 % 3) == 5) || (2 * 2 % 2 != 1)
i. (!(10 / 5 * 6 * 8 == 100)) && (2 * 10 % 2 != 3 )
- 11 -

Incremento e Decremento

O C fornece operadores diferentes para incrementar variveis. O operador soma 1 ao


seu operando, e o decremento subtrai 1. O aspecto no usual desta notao que podem ser
usado como operadores pr-fixo(++x) ou ps-fixo(x++).
++x incrementa x antes de utilizar o seu valor.
x++ incrementa x depois de ser utilizado.
Ex:
int main()
{
int x=0;
printf("x= %d\n",x++);
printf("x= %d\n",x);
printf("x= %d\n",++x);
printf("x= %d\n",x);
}

Precedncia

O nvel de precedncia dos operadores avaliado da esquerda para a direita. Os parnteses


podem ser utilizados para alterar a ordem da avaliao.
++ -- mais alta
*/%

+- mais baixa

Operador cast

Sintaxe:
(tipo)expresso

Podemos forar uma expresso a ser de um determinado tipo usando o operador cast.
Ex:
int main()
{
int i=1;
printf("%d/3 : %f",i,(float) i/3);
}

Operador sizeof

O operador sizeof retorna o tamanho em bytes da varivel, ou seja, do tipo que est em seu
operando. utilizado para assegurar a portabilidade do programa.
- 12 -

ESTRUTURAS DE CONTROLE DE FLUXO

Os comandos de controle de fluxo so a essncia de qualquer linguagem, porque


governam o fluxo da execuo do programa. So poderosos e ajudam a explicar a popularidade
da linguagem. Podemos dividir em trs categorias. A primeira consiste em instrues condicionais
if e switch. A segunda so os comandos de controle de loop o while, for e o do-while. A
terceira contm instrues de desvio incondicional goto.

ESTRUTURA CONDICIONAL SIMPLES IF


Sintaxe:
if (condio)
{
comando;
}

Atravs de uma determinada condio, retorna um valor possvel somente se essa condio
for verdadeira (devidamente atendida).
Ex:
int main()
{
int a,b;
printf("digite dois nmeros:");
scanf("%d%d",&a,&b);
if (b!=0)
printf("%d\n",a/b);
else
printf("diviso por zero\n");
}

Exerccios:
a. Faa um programa que leia a idade de uma pessoa e imprima a mensagem Voc maior de idade se ela
tiver 18 anos ou mais.

ESTRUTURA CONDICIONAL COMPOSTA IF ELSE


Sintaxe:
if (condio)
{
comando;
}
else
{
comando;
}

Se a condio avaliar em verdadeiro (qualquer coisa menos 0), o computador executar


o primeiro comando ou o bloco, de outro modo, o computador executar o comando ou o bloco que
foi escrito aps o else.
- 13 -

Ex:
#include <stdlib.h>
#include <time.h>
int main()
{
int num,segredo;
srand(time(NULL));
segredo=rand()/100;
printf("Qual e o numero: ");
scanf("%d",&num);
if (segredo==num)
{
printf("Acertou!");
printf("\nO numero e %d\n",segredo);
}
else
printf("Errado, tente novamente!\n");
}

Exerccios:
a. Faa um programa que leia uma distncia em Km e o tempo de viagem de um automvel, e informe se a
velocidade mdia foi superior ao limite (110 Km/h) ou no.
b. Ler a temperatura de uma pessoa e exibir a mensagem "Est com febre" ou "Sem Febre". Considere o valor
base como 36.5.
c. Ler um nmero inteiro e exibir a mensagem "O nmero mltiplo de 7" ou "O nmero no mltiplo de 7".
d. Ler o preo de duas blusas e imprimir qual o maior. Desconsidere empates.
e. Ler o ano de nascimento de uma pessoa e escrever uma mensagem que diga se ela poder ou no votar
em uma eleio para prefeito (no necessrio considerar o ms em que ela nasceu). Lembre-se de ler o
ano atual para efetuar o clculo.

ESTRUTURAS ANINHADAS IF ELSE IF

Uma varivel testada sucessivamente contra uma lista de variveis inteiras ou de


caracteres. Depois de encontrar uma coincidncia, o comando ou o bloco de comandos
executado.

Ex:
#include <stdlib.h>
#include <time.h>
int main()
{
int num,segredo;
srand(time(NULL));
segredo=rand()/100;
printf("Qual e o numero: ");
scanf("%d",&num);
if (segredo==num)
{
printf("Acertou!");
printf("\nO numero e %d\n",segredo);
}
else
- 14 -

if (segredo<num)
printf("Errado, muito alto!\n");
else
printf("Errado, muito baixo!\n");
}

Exerccios:
a. Um quiosque de sorvetes vende casquinhas somente nos sabores Chocolate (letra 'C') e Morango (letra
'M'). Faa um programa em C para imprimir uma mensagem nas seguintes situaes:
a. Sorvete de chocolate com mais de trs bolas: "desconto de 10%"
b. Sorvete de morango com qualquer quantidade de bolas: "desconto de 5%"
Considere que os dados de entrada so sempre vlidos.
b. Fazer um programa em C para ler as trs notas de um aluno em uma disciplina, e depois imprimir a mdia
aritmtica das notas e a situao do aluno, a partir da seguinte tabela:
a. Mdia maior ou igual a 7 : Aprovado
b. Mdia entre 4 e 7 : Exame
c. Mdia menor do que 4 : Reprovado
c. Um casal possui trs filhos: Marquinhos, Zezinho e Luluzinha. Faa um programa em C para ler as idades
dos filhos e exibir quem o caula da famlia; suponha que no haja empates.
d. A partir de dois nmeros fornecidos pelo usurio, escrever uma das seguintes mensagens:
a. Os dois so pares
b. Os dois so mpares
c. O primeiro par e o segundo mpar
d. O primeiro mpar e o segundo par
e. Ler trs valores reais e escrev-los em ordem ascendente; suponha no haver empates.
f. Faa um programa para ler a cor de um sinal de trnsito ('V' verde, 'A' amarelo, 'E' vermelho), e exibir
respectivamente as mensagens "Siga", "Ateno" ou "Pare". Assuma entradas vlidas.

OPERADOR TERNRIO
Sintaxe:
condio?expresso1:expresso2

uma maneira compacta de expressar if else.


Ex:
int main()
{
int x,y,max;
printf("Entre com dois nmeros: ");
scanf(%d,%d,&x,&y);
max=(x>y)?1:0;
printf("max= %d\n",max);
}
- 15 -

ESTRUTURA DE MLTIPLA ESCOLHA SWITCH CASE


Sintaxe:
switch(varivel)
{
case constante1:
sequncia de comandos
break;
case constante2:
sequncia de comandos
break;
default:
sequncia de comandos
}

Uma varivel testada sucessivamente contra uma lista de variveis inteiras ou de


caracteres. Depois de encontrar uma coincidncia, o comando ou o bloco de comandos
executado.
Se nenhuma coincidncia for encontrada o comando default ser executado. O default
opcional. A sequncia de comandos executada at que o comando break seja encontrado.
Ex:
int main()
{
char x;
printf("1. incluso\n");
printf("2. alterao\n");
printf("3. excluso\n");
printf(" Digite sua opo:");
x=getchar();
switch(x)
{
case '1':
printf("escolheu incluso\n");
break;
case '2':
printf("escolheu alterao\n");
break;
case '3':
printf("escolheu excluso\n");
break;
default:
printf("opo invlida\n");
}
}

Exerccios:
a. Fazer um programa para entrar com um valor e dizer qual ms do ano o mesmo corresponde. Se o valor for
maior que doze ou menor que um, diga que o valor no corresponde a nenhum ms. Ex. 3 = Maro.
b. Dado o nmero de matrcula de um scio do clube Boa Social, fornecido pelo usurio, faa um programa
que imprima o ms de pagamento da anuidade, de acordo com a tabela:
Final 0 Pagamento em janeiro
Final 1 Pagamento em fevereiro O nmero de matrcula
composto por:
Final 2 Pagamento em maro
nmero + dgito
Final 3 Pagamento em abril
Outro final Pagamento em maio
- 16 -

ESTRUTURA DE REPETIO (LOOP) FOR

Sintaxe:

for(inicializao;condio;incremento)

comando;

O comando for de alguma maneira encontrado em todas linguagens


procedurais de programao.
Em sua forma mais simples, a incializao um comando de atribuio que o compilador usa
para estabelecer a varivel de controle do loop. A condio uma expresso de relao que
testa a varivel de controle do loop contra algum valor para determinar quando o loop terminar. O
incremento define a maneira como a varivel de controle do loop ser alterada cada vez que o
computador repetir o loop.

Ex:
int main()
{
int x;
for(x=1;x<100;x++)
printf("%d\n",x);
}

Ex:
int main()
{
int x,y;
for (x=0,y=0;x+y<100;++x,++y)
printf("%d ",x+y);
}

Um uso interessante para o for o loop infinito, como nenhuma das trs definies so
obrigatrias, podemos deixar a condio em aberto.
Ex:
int main()
{
for(;;)
printf("loop infinito\n");
}

Outra forma usual do for o for aninhado, ou seja, um for dentro de outro.

Ex:
int main()
{
int linha,coluna;
for(linha=1;linha<=24;linha++)
{
for(coluna=1;coluna<40;coluna++)
printf("-");
putchar('\n');
}
}
- 17 -

Exerccios:
a. Faa um programa para imprimir os nmeros de 1 a 10.
b. Faa um programa que leia um nmero informado pelo usurio e imprima a tabuada na seguinte forma:
0 x NUM = RESULTADO
1 x NUM = RESULTADO

10 x NUM = RESULTADO
c. Faa um programa que imprima os nmeros pares entre 2 e 50.
d. Tem-se um conjunto de dados contendo a altura e o sexo (M ou F) de 15 pessoas. Faa um programa que
calcule e escreva:
a. a maior e a menor altura do grupo;
b. a mdia de altura das mulheres;
c. o nmero de homens;
e. Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou no de um novo
produto lanado. Para isso forneceu o sexo do entrevistado e sua resposta (sim ou no). Sabendo que
foram entrevistadas 10 pessoas, faa um programa que calcule e imprima:
a. o nmero de pessoas que responderam sim;
b. o nmero de pessoas que responderam no;
c. o nmero de mulheres que responderam sim;
d. a porcentagem de homens que responderam no entre todos os homens analisados.

ESTRUTURA DE REPETIO (LOOP) WHILE

Sintaxe:
while(condio)
comando;
Uma maneira possvel de executar um lao utilizando o comando while. Ele permite que o cdigo
fique sendo executado numa mesma parte do programa de acordo com uma determinada
condio.
- o comando pode ser vazio, simples ou bloco
- ele executado desde que a condio seja verdadeira - testa a condio antes de executar o lao

Ex:
int main()
{
char ch;
while(ch!='a')
ch=getchar();
}

Exerccios:
a. Faa um programa que leia o ano de nascimento de uma pessoa, calcule sua idade e imprima na tela. O
programa deve ser executado at que o ano digitado seja 9999.
b. Faa um programa para ler diversos nmeros reais e exibir quantos foram digitados. O valor 1 cdigo de
- 18 -

fim da entrada.
c. Faa um programa para ler diversos nmeros reais e exibir a soma dos nmeros lidos. O valor 999
cdigo de fim de entrada.
d. A fbrica da Vlquis produz uma determinada quantidade de automveis por dia. Faa um programa para
ler a quantidade produzida diariamente ao longo de uma semana, e depois informe:
a. A quantidade produzida na semana;
b. A menor produo diria.
Considere que o valor 1 indica fim da digitao; observe que h dias em que no h produo.

ESTRUTURA DE REPETIO (LOOP) DO WHILE


Sintaxe:
do {
comando;
} while(condio);

Tambm executa comandos repetitivos.

Ex:
int main()
{
char ch;
printf("1. incluso\n");
printf("2. alterao\n");
printf("3. excluso\n");
printf(" Digite sua opo:");
do
{
ch=getchar();
switch(ch)
{
case '1':
printf("escolheu inclusao\n");
break;
case '2':
printf("escolheu alteracao\n");
break;
case '3':
printf("escolheu exclusao\n");
break;
case '4':
printf("sair\n");
}
} while(ch!='1' && ch!='2' && ch!='3' && ch!='4');
}

Exerccios:
a. Faa um programa que receba um conjunto de valores inteiros e positivos, calcule e imprima o maior e o
menor valor do conjunto.
Para encerrar a entrada de dados deve ser digitado o valor zero.
Para valores negativos, deve ser enviada uma mensagem.
Esses valores (zero e negativos) no entraro nos clculos.
- 19 -

b. Em uma eleio presidencial, existem quatro candidatos. Os votos so informados atravs de cdigo. Os
cdigos utilizados so:
1,2,3,4 votos para os respectivos candidatos;
5 voto nulo;
6 voto em branco;
Escreva um programa que calcule e imprima:
total de votos para cada candidato;
total de votos nulos;
total de votos em branco;

BREAK

Quando o comando break encontrado em qualquer lugar do corpo do for, ele causa seu
trmino imediato. O controle do programa passar ento imediatamente para o cdigo que segue o
loop.
Ex:
int main()
{
char ch;
for(;;)
{
ch=getchar();
if (ch=='a')
break;
}
}

CONTINUE

Algumas vezes torna-se necessrio "saltar" uma parte do programa, para isso utilizamos o
"continue".

- fora a prxima iterao do loop

- pula o cdigo que estiver em seguida


Ex:
int main()
{
int x;
for(x=0;x<100;x++)
{
if(x%2)
continue;
printf("%d\n",x);
}
}
- 20 -

FUNES

uma unidade autnoma de cdigo do programa desenhada para cumprir uma tarefa
particular. Geralmente os programas em C consistem em vrias pequenas funes. A declarao do
tipo da funo obrigatria no C do UNIX. Os parmetros de recepo de valores devem ser
separados por vrgulas.

Sintaxe:
tipo nome(parmetros)

comandos;

Funo sem Retorno

Quando uma funo no retorna um valor para a funo que a chamou ela declarada
como void.
Ex:
void inverso();
int main()
{
char *vet="abcde";
inverso(vet);
}

void inverso(s)
char *s;
{
int t=0;
for(;*s;s++,t++);
s--;
for(;t--;)
printf("%c",*s--);
putchar('\n');
}

Funo com Retorno

O Tipo de retorno da funo deve ser declarado.

Ex:
int elevado();
int main()
{
int b,e;
printf("Digite a base e expoente x,y : ");
scanf("%d,%d",&b,&e);
printf("valor=%d\n",elevado(b,e));
- 21 -

int elevado(base,expoente)
int base,expoente;
{
int i;
if (expoente<0)
return;
i=1;
for(;expoente;expoente--)
i=base*i;
return i;
}

Parmetros Formais

Quando uma funo utiliza argumentos, ento ela deve declarar as variveis que
aceitaram os valores dos argumentos, sendo essas variveis os parmetros formais.

Ex:
int pertence(string,caracter) /* pertence(char *string,char caracter) */
char *string,caracter;
{
while (*string)
if (*string==caracter)
return 1;
else
string++;
return 0;
}

Chamada por Valor

O valor de um argumento copiado para o parmetro formal da funo, portanto as


alteraes no processamento no alteram as variveis.

Ex:
int sqr();
int main()
{
int t=10;
printf("%d %d",sqr(t),t);
}

int sqr(x)
int x;
{
x=x*x;
return(x)
}
- 22 -

Chamada por Referncia

Permite a alterao do valor de uma varivel. Para isso necessrio a passagem do


endereo do argumento para a funo.

Ex:
void troca();
int main()
{
int x=10,y=20;
troca(&x,&y);
printf("x=%d y=%d\n",x,y);
}

void troca(a,b)
int *a,*b;
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

Classe de Variveis

Uma funo pode chamar outras funes, mas o cdigo que compreende o corpo de uma
funo (bloco entre {}) est escondido do resto do programa, ele no pode afetar nem ser
afetado por outras partes do programa, a no ser que o cdigo use variveis globais. Existem trs
classes bsicas de variveis: locais, estticas e globais.

Variveis locais

As variveis que so declaradas dentro de uma funo so chamadas de locais. Na realidade


toda varivel declarada entre um bloco { } podem ser referenciadas apenas dentro deste
bloco. Elas existem apenas durante a execuo do bloco de cdigo no qual esto declaradas. O
armazenamento de variveis locais por default na pilha, assim sendo uma regio dinmica.

Ex:
void linha;
int main()
{
int tamanho;
printf("Digite o tamanho: ");
scanf("%d",&tamanho);
linha(tamanho);
}

void linha(x)
int x;
{
int i;
for(i=0;i<=x;i++)
putchar(95);
/* A varivel i na funo linha no reconhecida pela funo main.*/
}
- 23 -

Variveis Globais

So conhecidas por todo programa e podem ser usadas em qualquer parte do cdigo.
Permanecem com seu valor durante toda execuo do programa. Deve ser declarada fora de
qualquer funo e at mesmo antes da declarao da funo main. Fica numa regio fixa da memria
prpria para esse fim.

Ex:
void func1(),func2();
int cont;

int main()
{
cont=100;
func1();
}

void func1()
{
int temp;
temp=cont;
func2();
printf("cont = %d",cont);
}

void func2()
{
int cont;
for(cont=1;cont<10;cont++)
printf(".");
}

Variveis Estticas

Funcionam de forma parecida com as variveis globais, conservando o valor durante a


execuo de diferentes funes do programa. No entanto s so reconhecidas na funo
onde esto declaradas. So muitos utilizadas para inicializar vetores.
Ex:
int main()
{
int i;
static int x[10]={0,1,2,3,4,5,6,7,8,9};
for(i=0;i<10;i++)
printf("%d\n",x[i]);
}

Ex:
void mostra();
int main()
{
int t[10],i;
for(i=0;i<10;i++)t[i]=i;
mostra(t);
}
- 24 -

void mostra(num)
int num[]; /* ou declarar int *num; */
{
int i;
for(i=0;i<10;i++)
printf("%d",num[i]);
}

ARGUMENTOS DA LINHA DE COMANDO

No ambiente C existe uma maneira de passar argumentos atravs da linha de comandos


para um programa quando ele inicia. O primeiro argumento (argc) a quantidade de argumentos
que foram passados quando o programa foi chamado; o segundo argumento (argv) um ponteiro
de vetores de caracteres que contm os argumentos, um para cada string.
Por conveno argv[0] o nome do programa que foi chamado, portanto argc pelo menos 1.
Cada argumento da linha de comando deve ser separado por um espao ou tab.

Ex:
main(argc,argv)
int argc;
char *argv[];
{
if (argc!=2)
{
printf("falta digitar o nome\n");
exit(0);
}
printf("alo %s",argv[1]);
}

Ex:
main(argc,argv)
int argc;
char *argv[];
{
int disp,cont;
if (argc<2)
{
printf("falta digitar o valor para contagem\n");
exit(0);
}
if (argc==3&&!strcmp(argv[2],"display"))
disp=1;
else
disp=0;
for(cont=atoi(argv[1]);cont;--cont)
if(disp)printf("%d",cont);
printf("%c",7);
}