Escolar Documentos
Profissional Documentos
Cultura Documentos
3123 - C Ou C++ PDF
3123 - C Ou C++ PDF
9
Prefcio
Prof Call
10
Captulo 1
Introduo
Origem da Linguagem C
Linguagem de Mdio Nvel e Estruturada
Interpretadores e Compiladores
Modelo de um programa em C
Compilao Separada
Compilando um programa em C
Mapa de Memria de C
11
Origem
Foi inventada e implementada inicialmente pr Dennis M.
Ritchie e Ken Thompson em um DEC PDP-11 utilizando o sistema
operacional UNIX, em 1972.
Linguagem C com
BCPL B C padro formado
pelo ANSI
Desenvolveu a
Linguagem C (dcada de 70)
Linguagem antiga, mas
ainda em uso na Europa.
Originou a Linguagem B.
Exemplo:
Linguagem Estruturada
A caracterstica especial de uma linguagem estruturada de,
atravs da criao de sub-rotinas, com o uso de variveis locais,
processar eventos que no causem nenhum efeito inesperado nas
outras partes do programa. Por exemplo, em uma linguagem
estruturada, o uso do goto proibido.
13
Obs: O termo Linguagem estruturada em blocos no
rigorosamente aplicvel em C.
Linguagem C simplesmente referida como Linguagem
Estruturada.
Interpretadores e Compiladores
Os termos, interpretadores e compiladores referem-se a
maneira como um programa executado.
Palavras-Chaves de C:
Mais vantagens:
Se o programa j foi compilado e linkeditado, no ser mais
necessria a presena do compilador.
Programas .Exe no podem ser alterados, com isso o cdigo fonte
estar protegido.
Obs:
16
Modelo de programa C
Em muitos compiladores acrescidas diversas palavras-
chaves para explorar melhor os processadores 8088/8086.
As mais comuns so:
main ( )
A Biblioteca e a Linkedio
Todo compilador C vem com uma biblioteca C padro de
funes para realizar tarefas necessrias mais comuns, definidas pelo
padro ANSI C. No entanto provvel que um compilador tenha
outras funes adicionais, como por exemplo: grfica.
Se o programador usa uma funo (determinada funo)
vrias vezes e sua biblioteca padro no contm esta funo,
possvel coloc-la em uma biblioteca. Assim sempre que necessrio
ela ser utilizada. E quando esta funo for chamada, uma vez
memorizada pelo compilador C, o linkeditor combinar o cdigo-
escrito com o cdigo-objeto j encontrado na biblioteca. Este
processo chamado de Linkedio.
17
Alguns compiladores C tem seu prprio linkeditor,
enquanto outros usam o linkeditor padro fornecido pelo sistema
operacional.
Compilao Separada
Compilando um Programa em C
Para compilarmos um programa em C, devemos:
Criar o programa ;
Compilar o programa ;
Linkeditar o programa com funes necessrias da biblioteca.
Mapa de memria de C
Pilha
Heap
> 4 regies da memria
Variveis Globais
Cdigo do Programa
19
Captulo 2
Elementos
Bsicos de
C
A funo main ( )
Comentrios
A funo printf ( )
Cdigos de caracteres de Escape
Strings
Comandos de formato printf
Exerccios
20
A funo main ( )
Um programa em C constitudo de:
Nome da funo
{
instruo;
instruo;
{
instruo;
}
instruo;
}
21
Quando aberta uma chave {, deslocamos o cdigo de
programa direita desta, e quando fechamos uma chave },
deslocamos para a esquerda.
Comentrios
Todo programa deve conter comentrios como guia de
explicao, e em C, iniciado com o par de caracteres : /* ; e
finalizado pelo par: */ .
O comentrio pode ser colocado em qualquer lugar do
programa, menos no meio de uma palavra-chave ou entre outro
comentrio, e sempre so delimitados pelo chamados smbolos de
comentrios.
/* barra-astersco
*/ astersco-barra
Comentrios so teis tambm para identificar o propsito
ou nome de um programa.
main ( )
{ ou
printf (Programando em C );
} /*este progr./*no funciona*/
22
Como o compilador ignora caracteres contidos em smbolos
de comentrios e espaos, os comentrios podem ser escritos em
vrias linhas.
/*
Exemplo de comentrio
em vrias
linhas
*/
A funo printf ( )
23
A sintaxe para a funo printf ( ) :
Exemplo:
/* primeiro exemplo */
main( )
{
printf(O resultado do jogo foi %d x 0,2);
}
Na primeira linha do programa temos um comentrio
sugerindo um ttulo ou nome do programa. Todo comentrio fica a
critrio do programador, sendo assim no obrigatrio o uso deste.
A funo main( ) a seguir inicia a parte executvel.
A chave de abertura utilizada para que o compilador possa
ler as instrues.
Em seguida a funo printf( ) passa a ter o controle. O texto
a ser impresso est compreendido entre aspas duplas e o cdigo de
formatao %d indica que ser impresso um nmero decimal. Este
nmero decimal o 2 que se encontra na lista de argumentos.
A linha de instruo finalizada por um ponto-vrgula ;
fato este fundamental para concluir uma linha de instruo.
A chave de fechamento encerra o corpo do programa e o
texto impresso no monitor de vdeo ser:
Exemplo:
25
.
main ( )
{
printf (\n\tisto um teste.);
}
1 coluna
Strings
Strings uma das mais teis e importantes formas de dados
em C. Armazena e manipula textos como palavras e sentenas.
Ateno: No deve-se confundir string com caractere. Um nico
caractere estar envolvido por aspas simples. Exemplo: a
Uma string envolvida por aspas duplas.
Exemplo: o , teste ou o teste .
Sempre que o compilador encontrar qualquer coisa entre
aspas duplas, ele reconhecer que trata-se de uma string constante.
Cada caractere de uma string ocupa 1 byte de memria.
As strings consistem em dois tipos:
Exemplo:
.
.
printf(Estamos %s\na linguagem %c.,aprendendo,C);
.
.
Ser impresso no vdeo o seguinte texto:
Estamos aprendendo
a linguagem C.
Exemplo:
O nmero 156,55479832 pode ser arredondado para:
................. 156,5547983 ou
................. 156,554798 ou
................. 156,55480 ou
................. 156,5549 ou
................. 156,555 ou
................. 156,6 ou
................. 157
Exerccios
28
1- Comente resumidamente a origem da Linguagem C.
________________________________________________________
________________________________________________________
_____________________________________________________
31
Captulo 3
Iniciao
de
Variveis
Constantes
Tipos de Constantes
Variveis
Tipos de Variveis
Significado das Variveis Bsicas
Variveis Globais e Locais
Exerccios
32
Constantes
Constantes referem-se a valores fixos que o programa no
pode alterar. A maneira como cada constante representada depende
do seu tipo.
Ou seja:
Tipos de Constantes
Existem trs tipos de constantes em C: literais, simblicas
e objeto.
Uma constante literal um valor digitado diretamente
em um comando ou expresso de um programa.
Exemplo : pi=3.1415;
MAX=0xff; /*hexadecimal*/
distancia=4.3E+09;
ch='h';
34
Exemplo: int i, j ;
i= PI;
j= PI*3;
Exemplo:
.
.
main( )
{
int resultado = 200;
resultado = valor;
printf("conta = %d\n",resultado);
printf("resposta = %d\n",valor);
}
conta = 200
resposta = 200
Variveis 35
As Variveis so o aspecto fundamental de qualquer
linguagem de computador. Uma varivel uma posio de memria,
com um nome para referenciar o seu contedo, que usada para
guardar um valor que pode ser modificado pelo programa.
Tipos de Variveis
36
Estes tipos bsicos podem estar acompanhados por
modificadores de tipo : signed , unsigned e long .
O uso importante de signed modificar char ou int nas
implementaes em que esse tipo no tem sinal.
Algumas implementaes podem permitir que unsigned
seja aplicado aos tipos de ponto flutuante.
Exemplo de programa:
.
.
main( )
{
int quantidade;
char empresa;
float tempo;
quantidade=5;
empresa='B';
tempo=13.456;
printf("A fabricao de %d terminais de vdeo,quantidade);
printf(\nna empresa %c gasta apenas %.2f minutos de hora,
empresa,tempo);
}
Resultado:
Exemplo: int a, b;
double despesas;
main( )
{
int d, e;
.
.
}
Exerccios
_________________________________________________
_______________________________________________
6 - Cite 4 variveis bsicas em C explicando seu significado e
tamanho em C.
________________________________________________________
________________________________________________________
_____________________________________________________
7 - Faa um programa utilizando 3 variveis bsicas.
________________________________________________________
________________________________________________________
41
________________________________________________________
________________________________________________________
___________________________________________________
8 - Escreva um programa que declare 3 variveis inteiras e atribua os
valores 6, 14 e 53 a elas ; 3 variveis caracteres e atribua a elas as
letras x, y e z ; finalmente imprima na tela:
As variveis inteiras contm os nmeros 6, 14 e 53.
As variveis caracteres contm os valores x, y e z.
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
___________________________________________________
9 - Qual a forma de se representar um caracter de cdigo acima de
127 decimal ?
_______________________________________________________
10 - O programa abaixo est correto ? Porque ?
.
main( )
{
char a[19]={Compilar e Linkeditar}
printf(Em C necessrio %s,a);
}
_______________________________________________________
________________________________________________________
_____________________________________________________
Captulo 4
43
Operadores
Definio de Operadores
Operadores de Atribuio
Operadores Aritmticos
Operador Unrio
Operadores de Incremento e Decremento
Operadores Aritmticos de Atribuio
Operador Vrgula
Precedncia dos Operadores em C
Exerccios
Definio de Operadores
A linguagem C d mais nfase aos operadores que a
maioria das outras linguagens de computador; com isso dizemos que C
rica em Operadores Internos. Tendo um pouco mais de 40 tipos de
operadores, alguns so mais usados que outros, como por exemplo os
Operadores Aritmticos.
O que fazem os Operadores ? Trabalham sobre seus
operandos de modo precisamente definido. A linguagem C define
quatro tipos de operadores: Aritmticos, Relacionais, Lgicos e Bit a 44
bit. A linguagem C possui tambm alguns operadores especiais para
tarefas particulares.
Operador de Atribuio
possvel utilizar um operador de atribuio dentro de
qualquer expresso vlida em C. Isso no possvel em certas
linguagens de computao, tais como: Pascal, Basic e Fortan, que
tratam os operadores de atribuio como um caso especial de
comando.
A forma geral do operador de atribuio :
Exemplo: PI = 3.1415 ;
Kilo = 1000 ;
Exemplo: x = y = z = 80 ;
Exemplo de programa:
45
.
main( )
{
int x ;
x = y = 30 ;
printf(O resultado foi %d,y);
}
Operadores Aritmticos
Representam as operaes aritmticas bsicas como a
soma, subtrao, multiplicao e diviso .
+ ..................... soma
- ..................... subtrao
* ..................... multiplicao
/ ..................... diviso
% ..................... mdulo de diviso (resto)
Exemplo de programa:
.
main( )
{
int x , y ;
float b,c;
float a = 5.13 ;
b= x = 10 ;
c= y = 4 ;
printf(\n X + Y = %d , x + y);/* soma */
printf(\n A - Y = %.2f, a - y );/*subtrao */
printf(\n Y x A = %.2f, y * a );/* multiplicao */
printf(\n X\xf6Y= %d e o resto =%d,x/y , x%y );/* diviso*/; 46
printf(\n ou X\xf6Y = %.1f, b/c ); /* diviso */
}
Resultado:
X + Y = 14
A - Y = 1.13
Y x A = 20.52
X Y = 2 e o resto = 2
ou X Y = 2.5
Quanto a anlise do programa, podemos afirmar que o uso
de float e o comando de formato printf %.f deve-se ao fato de usarmos
nmeros com ponto flutuante.
No caso de um nmero puramente inteiro, o uso de int
satisfaz a condio.
O sinal de = envolvido por aspas duplas significa em
C apenas um caractere a ser impresso. Utilizamos \xf6, cdigo este em
hexa, para imprimirmos o caractere .
Nas ltimas duas linhas de instruo, possvel
observarmos os dois exemplos de respostas utilizando desta vez
variveis diferentes, mas com o mesmo valor. O fato de usarmos
variveis diferentes refere-se ao fato de no podermos imprimir um
resultado de diviso com ponto flutuante utilizando variveis do tipo
int .
.................ou
.
.
int Valor=30; /*letras maisculas e minsculas*/ 47
.
.
printf(O resultado %d,Valor);
.
.
O no cumprimento desta norma em C, acarretar erro ao
compilarmos o programa !
Operador Unrio
Indica a troca do sinal algbrico do valor, ou seja um
operador que multiplica o seu operando por -1 .
Exemplo: resultado_A= -3 ;
resultado_B= - resultado_A ;
1exemplo: (pr-fixado)
a=6;
b=++a;
printf ( a = %d, b = %d , a , b );
Imprimir:
a=7,b=7
2exemplo: (ps-fixado)
a=6;
b=a++;
printf( a = %d , b = %d , a , b );
Imprimir:
a=7,b=6
49
A anlise vale tambm para o operador de decremento(--)
Exemplo:
main( ) /*ps-fixado*/
{
int a = 0 ;
printf(%d um nmero nulo \n,a );
printf(%d indica vazio \n,a- - );
printf(%d um nmero negativo.,a);
}
Imprimir:
0 um nmero nulo
0 indica vazio
-1 um nmero negativo.
Exemplo:
main( ) /*pr-fixado*/
{
int a = 0 ;
printf(%d um nmero nulo \n, a );
printf(%d um nmero negativo \n,- - a);
printf(%d um ndecrescente em relao ao ao zero,a );
}
Imprimir:
0 um nmero nulo
-1 um nmero negativo
-1 um ndecrescente em relao ao zero
x + + ; /* prefervel */
50
A maioria dos compiladores C produzem o cdigo-objeto
muito mais rpido e eficiente para as operaes se incremento e/ou
decremento. Por essa razo, devemos usar os operadores de
incremento e decremento sempre que possvel !
Precedncia
Exemplo:
conta = a + b * h ;
So eles: += , -= , *= , /= e %=
Forma geral:
Exemplos:
Exemplo de programa:
.
main( );
{
int a=2;
int b=3;
printf(valor = %d\n,a);
a+=b;/*equivale a: a=2+3*/
printf(valor = %d\n,a);
a+=b;/*equivale a: a=5+3*/
printf(valor = %d\n,a); 52
}
Imprimir:
valor = 2
valor = 5
valor = 8
Operadores Relacionais
Utilizamos para fazer comparaes de valores relativos de
operadores inteiros ou de ponto flutuante. Os operadores relacionais
em C so:
Operador Ao
Exemplo de diagrama:
se a>2 53
vai para e e
se a==1
vai para f
f
se a <1
vai para g
Concluso
do
programa
Exemplo:
.
main( );
{
int a=10;
printf(\nO nmero igual a 100 ? %d,a==100);
a=50;
printf(\nO nmero igual a 50 ?%d,a==50);
printf(\n0...................falso e 1...........verdadeiro);
}
Imprimir:
54
O Operador Vrgula
usado para encadear vrias expresses. O operador
vrgula tem o mesmo significado da expresso: faa isso e isso.
Exemplo:
a = ( b = 2 , b + 1 );
Operadores
em ordem de
precedncia:................ + + , - - maior
* , / , %
+ , -
= = , !=
= , += , - = , * = , / = , %=
, (vrgula) menor
55
Exerccios
1 - Quais os operadores aritmticos bsicos em C ?
________________________________________________________
________________________________________________________
_____________________________________________________
soma = soma +1 ;
_______________________________________________________
x=5;
y = x ==5;
________________________________________________________
______________________________________________________
main ( )
{
int x=2 ;
printf (%d um nmero positivo,x--); 57
}
a) Operador de Incremento
b) Operador Unrio
c) Operador Aritmtico pr-fixado
d) Operador de decremento ps-fixado
________________________________________________________
______________________________________________________
13 - Descreva a equivalncia:
j /= 2 ____________________
x += y ____________________
h %=10 ____________________
c*3.1415 ___________________
M - =12 ____________________
Imprimir:
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
___________________________________________________
________________________________________________________
________________________________________________________
_____________________________________________________
main ( );
{
int a , b ;
float c ;
a = ((20*1*3) + 4) + (16/2);
b = (6/2+4) - 3*1.5;
c = a/b ;
59
printf ( O resultado %.2f, c+=3);
}
________________________________________________________
________________________________________________________
________________________________________________________
____________________________________________________
19 - O programa abaixo possui erros de execuo. Demonstre-os:
main ( );
int a = b = 20 ,
printf (%d equivale a %d,a,b);
printf (Com incremento fica %d, ++a)
printf (*pr-fixado*);
}
a) x++ + y
b) x + ++y
c) x + y
d) x - y
60
Captulo 5
Pr-
processador
de C
Diretivas do pr-processador
Tipos de diretivas
A diretiva #include
61
A diretiva #define
Exerccios
62
Diretivas do pr-processador
63
TIPOS: Segundo o padro ANSI , o pr-processador de C contm
as diretivas:
# include
# define
# if
# ifdef
# ifndef
# undef
# else
# endif
# elif
# line
# error
# pragma
A diretiva #include
Sabemos que diretivas so, de certo modo,
64
minilinguagens embutidas em C.
A diretiva #include instrui o compilador a ler outro
programa, chamado de arquivo-fonte, adicionado quele que contm a
diretiva #include.
ou
Exemplo:
/* prog.1 */ / * prog.2 * /
main( ) #include <prog.1>
{ main( )
. {
. .
65
} .
}
/* Programa DIRETIVA */
# include <stdio.h>
# include <conio.h>/*o nome do arquivo-fonte pode ser escrito */
# include <DOS.H> /* em letras maisculas ou minsculas */
main ( )
{
clrscr( );
printf (linguagem C );
delay(1000); /*atraso*/
}
Imprimir:
Linguagem C
67
A diretiva #define
Exemplo:
# define PI 3.14159
# define VALOR 100
# define PROGRAMA Diretivas em C
68
Dever haver espaos entre o identificador (macro) e a
string, para evidentemente separ-los. A clareza do cdigo aumenta
com o uso de macros permitindo assim o uso de nomes sugestivos para
as expresses.
Um dos exemplos de programa, na qual recomendvel o
uso da diretiva #define, a de utilizarmos uma constante vrias vezes
no programa. Ou seja, podemos definir um valor a uma constante, no
qual em cada vez que a solicitarmos, poderemos escrev-la apenas
citando seu identificador.
Exemplo:
# include <stdio.h>
# include <conio.h>
# include <dos.h>
# define PI 3.14159
main( )
{
float L=30; /*podemos resumir em uma s linha: */
float R=18;/* float L=30,R=18; */
clrscr( );
printf (A rea : %.3f, PI*R*R);
printf (\nO volume : %.3f, PI*R*R*L);
delay(3000);
}
Imprimir:
A rea :1017.875
O volume :30536.255
O programa acima utiliza trs diretivas includes no qual
possuem os prottipos para a pausa, limpar a tela, e impresso das
respostas no vdeo.
A diretiva #define associa o identificador PI a uma string
3.14159, assim sempre que o identificador for mencionado o programa
o substitui pela string.
Esta diretiva tambm possui outra forte caracterstica: O
nome do macro pode ter argumentos. Isto significa que toda vez que o
nome do macro encontrado, os argumentos a ele associados podem
69
ser substitudos pelos argumentos reais encontrados no programa.
Exemplo:
# include <stdio.h>
# include <conio.h>
# include <dos.h>
# define CONTA(X) printf(%.3f\n,X)
main( )
{
float Z=35.10;
float Y;
Y=Z*3.14;
clrscr( );
CONTA (Z);
CONTA (Y);
delay (2000);
}
Imprimir: 35.100
110.214
Outro exemplo:
70
# include <stdio.h>
# include <conio.h>
# include <dos.h>
# define PI 3.15159
# define AREA(X) (2*PI*X*X)
main( )
{
float raio;
raio=3;
clrscr( );
printf(A rea da esfera %.2f,AREA(raio));
delay(6000);
}
Imprimir:
Exerccios
# include <stdio.h>
#define RESULTADO(X) printf(%.2f\n,Y)
main( )
{
float A=40.3;
float B;
B=A * 3.14;
resultado(A);
resultado(B);
}
________________________________________________________
________________________________________________________
_____________________________________________________
Captulo 6
75
Operadores
de endereo
A funo scanf( )
Operador de endereo
Matriz String
Operadores de E/S atravs do console
As funes getch( ) e getche( )
As funes getchar( ) e putchar( )
As funes gets( ) e puts( )
Funo scanf( )
Operador de endereo
limite de memria
Exemplo de Programa:
/* Programa Clculo de Rentabilidade */
# include <stdio.h>
# include <conio.h>
# include <dos.h>
main( )
{
float valor_principal, juros, rentabilidade;
clrscr( );
printf (Digite o valor principal:);
scanf (%f,&valor_principal);
printf (Digite a taxa de juros (%):);
scanf (%f,&juros);
rentabilidade = valor_principal * (juros/100);
printf(A rentabilidade foi de r$%.2f,rentabilidade);
delay (3000);
}
Funcionamento do Programa:
Matriz String
String, conforme visto no captulo 2, uma das formas
mais importantes de armazenagem e manipulao de dados. O
compilador, quando encontra qualquer caractere entre aspas duplas,
reconhecer que trata-se de uma string constante. Uma string
finalizada pelo caractere null, ou seja, em uma string cada caractere
ocupa 1 byte de memria e o ltimo caractere sempre \0 (null) que
tem valor zero (0) decimal, sendo assim a nica maneira que as
funes possuem para poderem reconhecer onde o fim de uma string.
Este efeito melhor visualizado quando utilizamos uma
matriz como um conjunto de dados de mesmo tipo.
A funo scanf( ) considerada limitada para a leitura de
strings, pois usa o espao em branco para terminar a leitura na
entrada.
Exemplo:
.
. 79
char nome [ 18 ];
printf (Qual o seu nome completo ?);
scanf (%s, nome);
printf (Ol, %s .,nome );
.
.
Exemplo de programa:
/* Programa Exemplo_1 */
# include <stdio.h>
# include <conio.h>
main( )
{
char caractere;
clrscr( );
printf (Digite um caractere : );
caractere = getch( );
printf(\nO caractere pressionado :%c.,caractere);
getch( );
}
Exemplo de programa:
/* Programa Exemplo_2 */
# include <stdio.h>
# include <conio.h>
main( )
{
char caractere;
clrscr( );
printf (Digite um caractere e veja seu sucessor:);
caractere = getchar ( );
putchar (caractere + 1 );
getch( );
}
Exemplo de programa:
/* Programa Exemplo_1 */
# include <stdio.h>
# include <conio.h>
main( )
{
char nome [50];
int idade;
printf (Qual seu nome ?\n);
gets (nome);
printf (\nQual sua idade?\n);
scanf (%d,&idade);
printf(\nOl %s, em seu ltimo aniversrio voc
completou %d dias de vida !,nome,idade*365);
getch( );
}
Exemplo de programa:
/* Programa Exemplo_2 */
#include <stdio.h>
#include <conio.h>
main( )
{
char nome [50];
clrscr( );
puts (Qual o seu nome ?);
gets (nome);
puts;
puts (Ol);
puts (nome);
puts (tudo bem ?);
getch( );
}
O exemplo de programa, solicitar atravs de um texto o
nome do usurio, que por sua vez ser lido por gets( ). Se, por
exemplo, o nome digitado for RONALDO o programa imprime:
Exemplo: printf(%s\n,nome);
....ser visualizado:
Ol
RONALDO
Tudo bem?
Seu apelido
NALDO
?
O operador nos possibilita a determinar o nmero de
caracteres iniciais que no devero ser impressos.
Exerccios
1 Defina Operador de Endereo:
________________________________________________________
________________________________________________________
_____________________________________________________
85
2 Qual a sintaxe da funo scanf( ) ?
________________________________________________________
______________________________________________________
#include <stdio.h>
#include <conio.h>
main( )
{
char PALAVRA [50];
clrscr( );
puts(Escreva uma palavra:);
scanf(%c,PALAVRA);
puts(PALAVRA);
getch( );
}
________________________________________________________
________________________________________________________
________________________________________________________
____________________________________________________
8 Para ler uma string de caracteres qual funo deve ser utilizada:
getchar( ) ou gets( ) ? Explique:
________________________________________________________
________________________________________________________
________________________________________________________
____________________________________________________
#include <stdio.h>
#include <conio.h>
main( )
{
char palavra;
clrscr( );
puts(Digite uma palavra:);
palavra = getchar( );
putchar(palavra);
getch( );
}
________________________________________________________
________________________________________________________
________________________________________________________
____________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
_________________________________________________
87
11-Elabore um programa que calcule a quantidade de combustvel
gastos em uma viagem. O programa deve solicitar ao usurio os
seguintes dados: Qual distncia(em Km)o veculo faz por litro de
combustvel, tempo (em horas) gasto na viagem e a velocidade mdia
(em Km) durante a mesma.
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
_________________________________________________
Captulo 7
88
Decises e
Seleo
mltipla
O comando if
Bloco de comando com if
O comando if-else
O comando if-else-if
O operador alternativo ?
Operadores lgicos
O comando switch
Comandos de Seleo
O comando if
Utilizamos esse comando quando deseja-se tomar uma
deciso simples. Se a expresso verdadeira (diferente de 0), o
comando ou bloco que forma o corpo do if executado uma nica
vez. Se a expresso for falsa, o programa no executa a instruo
iniciada por if .
Exemplo:
.
.
main( )
{
clrscr( );
int x;
printf(Digite um nmero:);
scanf(%d,&x);
if (x>=0)
if (x<100)
puts(O nmero menor que uma centena ! );
getch( );
}
Sintaxe :
if ( expresso de controle )
comando ;
Bloco de comando if
Em C, possvel a utilizao de ifs aninhados ,que
formam um comando composto, tambm chamado bloco de
comando. Neste caso, um comando if o objeto de outro if .
Sintaxe:
if (expresso de controle) {
if (expresso de controle)
comando 1;
comando 2;
}
Exemplo:
.
.
main ( )
{
clrscr( );
int a,b;
puts(Digite dois valores:\n); 91
scanf(%d,&a);
scanf(%d,&b);
if (a < b) {
if (b < 10)printf(O 2nmero menor que 10\n);
puts(O 1 nmero menor que o 2nmero);
}
getch( );
}
O comando if-else
Vimos que o comando if executa uma nica instruo ou
um bloco de comando quando verdadeira ( 1 ) a expresso. Porm,
nada far se esta for falsa ( 0 ).
Quando associamos if ao comando else, haver a execuo
de uma ou mais instrues compreendidas entre chaves, se a expresso
de teste relacionada ao comando if for falsa ( 0 ) .
Ou seja, quando o comando if estiver acompanhado de uma
clusula else, esta selecionar um comando alternativo a ser
executado.
Sintaxe:
if (expresso de controle)
comando 1;
else
comando 2;
92
Se a expresso de controle for verdadeira, o programa
executar comando 1; do contrrio executar comando 2. Ambos os
comandos terminam com ponto-e-vrgula, como de resto, todos os
comandos em C.
Exemplo:
.
.
main( )
{
clrscr( );
int a,b,c,d;
float e;
puts(Digite 4 valores inteiros:);
scanf(%d%d%d%d,&a,&b,&c,&d);
e=(a+b+c+d)/4;
if(a < b)
puts(O 1nmero menor que o ltimo nmero digitado);
else
printf(A mdia aritmtica dos nrs digitados :%.1f,e);
getch( );
}
O comando if-else-if
Tambm chamada de escada if-else-if ou rvore de
deciso devido a sua aparncia na listagem do programa, faz com que
as condies sejam avaliadas de cima para baixo. Encontrada a
93
condio verdadeira, o comando associado a ela executado fazendo
com que o restante da escada seja contornado.
Esta coleo de comandos if com clusulas else pode
conter um else final para garantir no mnimo que um comando seja
relacionado.
Sintaxe:
if (condio 1 )
comando 1;
else if (condio 2)
comando 2;
else if (condio 3)
comando 3;
.
.
else comando n ;
Exemplo:
.
.
main( )
{
clrscr( );
char x;
puts(Escolha apenas uma das letras: a,b ou c );
scanf(%c,&x);
if(x==a)
printf(O incremento de a :%c\n,++x); 94
else if (x==b)
printf(O incremento de b :%c\n,++x);
else if (x==c)
printf(O incremento de c :%c\n,++x);
else
puts(Voc no digitou uma letra vlida !);
puts(Pressione uma tecla p/finalizar);
getch( );
}
Funcionamento:
O programa sugere a escolha de uma letra que, atravs de
scanf( ) associar varivel x. Apenas uma das condies ser
verdadeira; e se for ser impresso, portanto, o incremento deste
caractere (a,b ou c) passando, posteriormente, para as instrues que
solicita uma tecla para finalizar o programa . Se nenhuma das
condies for verdadeira, atravs do ltimo else ser impressa uma
mensagem alertando para o fato e posteriormente solicitando uma
tecla para finalizar o programa.
O operador alternativo ?
Em C, existe uma forma compacta de representar uma
instruo if-else simples.
Tambm chamado de Operador ternrio ( o nico em C),
o ? requer trs operandos.
Sintaxe:
Exemplo:
95
#include <stdio.h>
#include <conio.h>
#include <math.h>
main( )
{
clrscr( );
int x;
float y;
puts(Digite um valor inteiro positivo:);
scanf(%d,&x);
y = x>100 ? printf(O nmero maior que cem e sua
raiz quadrada :%.2f,sqrt(x)): printf(O nmero
menor que cem e seu quadrado :%d,x*x);
getch( );
}
Operadores lgicos
Os operadores lgicos explanam as maneiras que as
relaes podem ser conectadas. Os operadores relacionais (visto no
captulo 4), freqentemente, trabalham juntos com esses operadores.
Como sabemos, verdadeiro qualquer valor diferente de zero,
enquanto que falso zero. Assim como o operador relacional, o
operador lgico devolve 0 para falso e 1 para verdadeiro.
possvel formar expresses relacionais complexas
utilizando os operadores lgicos. 96
Operadores lgicos:
operador ao
&& AND
|| OR
! NOT
x y x&&y x||y !x !y
0 0 0 0 1 1
0 1 0 1 1 0
1 0 0 1 0 1
1 1 1 1 0 0
Obs: Assim como toda expresso relacional, a lgica produz como
resultado o zero (falso) ou 1 (verdadeiro).
Exemplo 1:
.
.
if ((a>=10) && (a<=100))
comando ;
.
.
No exemplo acima deseja-se executar um comando se a
varivel a estiver compreendida entre 10 e 100.
97
L-se: Se a for maior ou igual a 10 e menor ou igual a 100.........
Neste caso, o comando ser executado se, to somente, as condies
forem verdadeiras.
Exemplo 2 :
.
.
if ((a<10) || (a>100))
comando ;
.
.
No exemplo 2, se qualquer uma das condies for
verdadeira, ou se ambas forem verdadeiras, o comando ser
executado; do contrrio ignorado.
L-se: Se a for menor que 10 ou maior que 100 .......
Exemplo:
40>10&&!(40<7)||6>=4
98
Neste caso, a condio verdadeira .
O comando switch
Esse comando freqentemente utilizado para processar
uma entrada de dados pelo console.
Algumas rvores de deciso se tornam mais claras, se
escritas com o comando switch que similar ao else-if mas tem maior
flexibilidade. O comando switch testa sucessivamente o valor de uma
expresso com uma lista de constantes. Se o valor coincide, os
comandos associados quela constante so executados.
Sintaxe:
switch (expresso) {
case constante_1:
comando_1;
break ;
case constante_2:
comando_2;
break;
.
.
default:
comando_n;
}
#include <stdio.h>
#include <conio.h>
main( )
{
clrscr( );
char x ;
puts(Selecione a opo:\n a -Soma\n b -Subtrao\n c -
Multiplicao\nd-Diviso);
x=getch( );
switch (x) {
case a :
puts(Voc selecionou Soma);
break ;
case b :
puts(Voc selecionou Subtrao);
break ;
case c :
puts(Voc selecionou Multiplicao);
break ;
case d :
puts(Voc selecionou Diviso);
break ;
default :
puts(Voc escolheu uma opo invlida.);
}
getch( );
}
100
Outro exemplo:
#include <stdio.h>
#include <conio.h>
main( )
{
clrscr( );
char x ;
puts(Selecione a opo:\n + -Soma\n - -Subtrao\n * ou x
-Multiplicao\n / -Diviso);
x=getch( );
switch (x) {
case + :
puts(Voc selecionou Soma);
break ;
case - :
puts(Voc selecionou Subtrao);
break ;
case * :
case x :
puts(Voc selecionou Multiplicao);
break ;
case / :
puts(Voc selecionou Diviso);
break ;
default :
puts(Voc escolheu uma opo invlida.);
}
getch( );
}
Exerccios
a b a&&b a||b !a !b
( ) 70>20&&!(70<8)||6>=5
( ) 1<2||2>=3
( ) 4*2-7<=4-8
( )6>=5&&5!=2||2<4
( )++15>15||70!=60+7&&5>=5/1
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
___________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
____________________________________________________
105