Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
9
Prefácio
Profº Callé
10
Capítulo 1
Introdução
• Origem da Linguagem C
• Linguagem de Médio Nível e Estruturada
• Interpretadores e Compiladores
• Modelo de um programa em C
• Compilação Separada
• Compilando um programa em C
• Mapa de Memória de C
11
Origem
Foi inventada e implementada inicialmente pôr Dennis M.
Ritchie e Ken Thompson em um DEC PDP-11 utilizando o sistema
operacional UNIX, em 1972.
Linguagem C com
BCPL B C padrão formado
pelo ANSI
Desenvolveu a
Linguagem C (década de 70)
Linguagem antiga, mas
ainda em uso na Europa.
Originou a Linguagem B.
Exemplo:
Linguagem Estruturada
A característica especial de uma linguagem estruturada é de,
através da criação de sub-rotinas, com o uso de variáveis locais,
processar eventos que não 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” não é
rigorosamente aplicável 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, não será mais
necessária a presença do compilador.
• Programas .Exe não podem ser alterados, com isso o código 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 são:
main ( )
A Biblioteca e a Linkedição
Todo compilador C vem com uma biblioteca C padrão de
funções para realizar tarefas necessárias mais comuns, definidas pelo
padrão ANSI C. No entanto é provável que um compilador tenha
outras funções adicionais, como por exemplo: gráfica.
Se o programador usa uma função (determinada função)
várias vezes e sua biblioteca padrão não contém esta função, é
possível colocá-la em uma biblioteca. Assim sempre que necessário
ela será utilizada. E quando esta função for chamada, uma vez
memorizada pelo compilador C, o linkeditor combinará o código-
escrito com o código-objeto já encontrado na biblioteca. Este
processo é chamado de Linkedição.
17
Alguns compiladores C tem seu próprio linkeditor,
enquanto outros usam o linkeditor padrão fornecido pelo sistema
operacional.
Compilação Separada
Compilando um Programa em C
Para compilarmos um programa em C, devemos:
• Criar o programa ;
• Compilar o programa ;
• Linkeditar o programa com funções necessárias da biblioteca.
Mapa de memória de C
Pilha
Heap
> 4 regiões da memória
Variáveis Globais
Código do Programa
19
Capítulo 2
Elementos
Básicos de
C
• A função main ( )
• Comentários
• A função printf ( )
• Códigos de caracteres de Escape
• Strings
• Comandos de formato printf
• Exercícios
20
A função main ( )
Um programa em C é constituído de:
Nome da função
{
instrução;
instrução;
{
instrução;
}
instrução;
}
21
Quando é aberta uma chave “{“, deslocamos o código de
programa à direita desta, e quando fechamos uma chave “}”,
deslocamos para a esquerda.
Comentários
Todo programa deve conter comentários como guia de
explicação, e em C, é iniciado com o par de caracteres : /* ; e
finalizado pelo par: */ .
O comentário pode ser colocado em qualquer lugar do
programa, menos no meio de uma palavra-chave ou entre outro
comentário, e sempre são delimitados pelo chamados símbolos de
comentários.
/* ➧ barra-asterísco
*/ ➧ asterísco-barra
Comentários são úteis também para identificar o propósito
ou nome de um programa.
main ( )
{ ou
printf (“Programando em C “);
} /*este progr./*não funciona*/
22
Como o compilador ignora caracteres contidos em símbolos
de comentários e espaços, os comentários podem ser escritos em
várias linhas.
/*
Exemplo de comentário
em várias
linhas
*/
A função printf ( )
23
A sintaxe para a função printf ( ) é:
Exemplo:
/* primeiro exemplo */
main( )
{
printf(“O resultado do jogo foi %d x 0”,2);
}
Na primeira linha do programa temos um comentário
sugerindo um título ou nome do programa. Todo comentário fica a
critério do programador, sendo assim não é obrigatório o uso deste.
A função main( ) a seguir inicia a parte executável.
A chave de abertura é utilizada para que o compilador possa
“ler” as instruções.
Em seguida a função printf( ) passa a ter o controle. O texto
a ser impresso está compreendido entre aspas duplas “ ” e o código de
formatação “%d” indica que será impresso um número decimal. Este
número decimal é o 2 que se encontra na lista de argumentos.
A linha de instrução é finalizada por um ponto-vírgula “ ; “
fato este fundamental para concluir uma linha de instrução.
A chave de fechamento encerra o corpo do programa e o
texto impresso no monitor de vídeo 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 sentenças.
Atenção: Não 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 memória.
As strings consistem em dois tipos:
Exemplo:
.
.
printf(“Estamos %s\na linguagem %c.”,”aprendendo”,’C’);
.
.
Será impresso no vídeo o seguinte texto:
Estamos aprendendo
a linguagem C.
Exemplo:
O número 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
Exercícios
28
1- Comente resumidamente a origem da Linguagem C.
________________________________________________________
________________________________________________________
_____________________________________________________
31
Capítulo 3
Iniciação
de
Variáveis
• Constantes
• Tipos de Constantes
• Variáveis
• Tipos de Variáveis
• Significado das Variáveis Básicas
• Variáveis Globais e Locais
• Exercícios
32
Constantes
Constantes referem-se a valores fixos que o programa não
pode alterar. A maneira como cada constante é representada depende
do seu tipo.
Ou seja:
Tipos de Constantes
Existem três tipos de constantes em C: literais, simbólicas
e objeto.
Uma constante literal é um valor digitado diretamente
em um comando ou expressão 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
Variáveis 35
As Variáveis são o aspecto fundamental de qualquer
linguagem de computador. Uma variável é uma posição de memória,
com um nome para referenciar o seu conteúdo, que é usada para
guardar um valor que pode ser modificado pelo programa.
Tipos de Variáveis
36
Estes tipos básicos podem estar acompanhados por
“modificadores de tipo” : signed , unsigned e long .
O uso importante de signed é modificar char ou int nas
implementações em que esse tipo não tem sinal.
Algumas implementações 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 fabricação de %d terminais de vídeo”,quantidade);
printf(“\nna empresa %c gasta apenas %.2f minutos de hora”,
empresa,tempo);
}
Resultado:
βφ≡÷π
Exemplo: int a, b;
double despesas;
main( )
{
int d, e;
.
.
}
Exercícios
_________________________________________________
_______________________________________________
6 - Cite 4 variáveis básicas em C explicando seu significado e
tamanho em C.
________________________________________________________
________________________________________________________
_____________________________________________________
7 - Faça um programa utilizando 3 variáveis básicas.
________________________________________________________
________________________________________________________
41
________________________________________________________
________________________________________________________
___________________________________________________
8 - Escreva um programa que declare 3 variáveis inteiras e atribua os
valores 6, 14 e 53 a elas ; 3 variáveis caracteres e atribua a elas as
letras x, y e z ; finalmente imprima na tela:
As variáveis inteiras contém os números 6, 14 e 53.
As variáveis caracteres contém os valores x, y e z.
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
___________________________________________________
9 - Qual a forma de se representar um caracter de código acima de
127 decimal ?
_______________________________________________________
10 - O programa abaixo está correto ? Porque ?
.
main( )
{
char a[19]={“Compilar e Linkeditar”}
printf(“Em C é necessário %s”,a);
}
_______________________________________________________
________________________________________________________
_____________________________________________________
Capítulo 4
43
Operadores
• Definição de Operadores
• Operadores de Atribuição
• Operadores Aritméticos
• Operador Unário
• Operadores de Incremento e Decremento
• Operadores Aritméticos de Atribuição
• Operador Vírgula
• Precedência dos Operadores em C
• Exercícios
Definição 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 são mais usados que outros, como por exemplo os
Operadores Aritméticos.
O que fazem os Operadores ? Trabalham sobre seus
operandos de modo precisamente definido. A linguagem C define
quatro tipos de operadores: Aritméticos, Relacionais, Lógicos e Bit a 44
bit. A linguagem C possui também alguns operadores especiais para
tarefas particulares.
Operador de Atribuição
É possível utilizar um operador de atribuição dentro de
qualquer expressão válida em C. Isso não é possível em certas
linguagens de computação, tais como: Pascal, Basic e Fortan, que
tratam os operadores de atribuição como um caso especial de
comando.
A forma geral do operador de atribuição é:
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 Aritméticos
Representam as operações aritméticas básicas como a
soma, subtração, multiplicação e divisão .
+ ..................... soma
- ..................... subtração
* ..................... multiplicação
/ ..................... divisão
% ..................... módulo de divisão (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 );/*subtração */
printf(“\n Y x A = %.2f”, y * a );/* multiplicação */
printf(“\n X\xf6Y= %d e o resto =%d”,x/y , x%y );/* divisão*/; 46
printf(“\n ou X\xf6Y = %.1f”, b/c ); /* divisão */
}
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 análise do programa, podemos afirmar que o uso
de float e o comando de formato printf %.f deve-se ao fato de usarmos
números com ponto flutuante.
No caso de um número puramente inteiro, o uso de int
satisfaz a condição.
O sinal de “ = “ envolvido por aspas duplas significa em
C apenas um caractere a ser impresso. Utilizamos \xf6, código este em
hexa, para imprimirmos o caractere ÷ .
Nas últimas duas linhas de instrução, é possível
observarmos os dois exemplos de respostas utilizando desta vez
variáveis diferentes, mas com o mesmo valor. O fato de usarmos
variáveis diferentes refere-se ao fato de não podermos imprimir um
resultado de divisão com ponto flutuante utilizando variáveis do tipo
int .
.................ou
.
.
int Valor=30; /*letras maiúsculas e minúsculas*/ 47
.
.
printf(“O resultado é %d”,Valor);
.
.
O não cumprimento desta norma em C, acarretará erro ao
compilarmos o programa !
Operador Unário
Indica a troca do sinal algébrico do valor, ou seja é um
operador que multiplica o seu operando por -1 .
Exemplo: resultado_A= -3 ;
resultado_B= - resultado_A ;
1ºexemplo: (pré-fixado)
a=6;
b=++a;
printf (“ a = %d, b = %d “, a , b );
Imprimirá:
a=7,b=7
2ºexemplo: (pós-fixado)
a=6;
b=a++;
printf(“ a = %d , b = %d “, a , b );
Imprimirá:
a=7,b=6
49
A análise vale também para o operador de decremento(--)
Exemplo:
main( ) /*pós-fixado*/
{
int a = 0 ;
printf(“%d é um número nulo \n”,a );
printf(“%d indica vazio \n”,a- - );
printf(“%d é um número negativo.”,a);
}
Imprimirá:
0 é um número nulo
0 indica vazio
-1 é um número negativo.
Exemplo:
main( ) /*pré-fixado*/
{
int a = 0 ;
printf(“%d é um número nulo \n”, a );
printf(“%d é um número negativo \n”,- - a);
printf(“%d é um nºdecrescente em relação ao ao zero”,a );
}
Imprimirá:
0 é um número nulo
-1 é um número negativo
-1 é um nºdecrescente em relação ao zero
x + + ; /* preferível */
50
A maioria dos compiladores C produzem o código-objeto
muito mais rápido e eficiente para as operações se incremento e/ou
decremento. Por essa razão, devemos usar os operadores de
incremento e decremento sempre que possível !
Precedência
Exemplo:
conta = a + b * h ;
São 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 comparações de valores relativos de
operadores inteiros ou de ponto flutuante. Os operadores relacionais
em C são:
Operador Ação
Exemplo de diagrama:
se a>2 53
vai para “e” e
se a==1
vai para “f”
f
se a <1
vai para “g”
Conclusão
do
programa
Exemplo:
.
main( );
{
int a=10;
printf(“\nO número é igual a 100 ? %d”,a==100);
a=50;
printf(“\nO número é igual a 50 ?%d”,a==50);
printf(“\n0...................falso e 1...........verdadeiro”);
}
Imprimirá:
54
O Operador Vírgula
É usado para encadear várias expressões. O operador
vírgula tem o mesmo significado da expressão: “faça isso e isso”.
Exemplo:
a = ( b = 2 , b + 1 );
Operadores
em ordem de
precedência:................ + + , - - maior
* , / , %
+ , -
= = , !=
= , += , - = , * = , / = , %=
, (vírgula) menor
55
Exercícios
1 - Quais os operadores aritméticos básicos em C ?
________________________________________________________
________________________________________________________
_____________________________________________________
soma = soma +1 ;
_______________________________________________________
x=5;
y = x ==5;
________________________________________________________
______________________________________________________
main ( )
{
int x=2 ;
printf (“%d é um número positivo”,x--); 57
}
a) Operador de Incremento
b) Operador Unário
c) Operador Aritmético pré-fixado
d) Operador de decremento pós-fixado
________________________________________________________
______________________________________________________
13 - Descreva a equivalência:
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 execução. 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
Capítulo 5
Pré-
processador
de C
• Diretivas do pré-processador
• Tipos de diretivas
• A diretiva #include
61
• A diretiva #define
• Exercícios
62
Diretivas do pré-processador
63
TIPOS: Segundo o padrão ANSI , o pré-processador de C contém
as diretivas:
# include
# define
# if
# ifdef
# ifndef
# undef
# else
# endif
# elif
# line
# error
# pragma
A diretiva #include
Sabemos que diretivas são, 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 contém 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 maiúsculas ou minúsculas */
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 espaços entre o identificador (macro) e a
string, para evidentemente separá-los. A clareza do código aumenta
com o uso de macros permitindo assim o uso de nomes sugestivos para
as expressões.
Um dos exemplos de programa, na qual é recomendável o
uso da diretiva #define, é a de utilizarmos uma constante várias 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 três diretivas includes no qual
possuem os protótipos para a pausa, limpar a tela, e impressão das
respostas no vídeo.
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 também possui outra forte característica: 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 substituídos 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á:
Exercícios
# 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);
}
________________________________________________________
________________________________________________________
_____________________________________________________
Capítulo 6
75
Operadores
de endereço
• A função scanf( )
• Operador de endereço
• Matriz String
• Operadores de E/S através do console
• As funções getch( ) e getche( )
• As funções getchar( ) e putchar( )
• As funções gets( ) e puts( )
Função scanf( )
Operador de endereço
limite de memória
Exemplo de Programa:
/* Programa Cálculo 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 capítulo 2, é uma das formas
mais importantes de armazenagem e manipulação 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 memória e o último caractere é sempre ‘\0’ (null) que
tem valor zero (0) decimal, sendo assim a única maneira que as
funções 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 função scanf( ) é considerada “limitada” para a leitura de
strings, pois usa o “espaço 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 aniversário 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á através de um texto o
nome do usuário, 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 número de
caracteres iniciais que não deverão ser impressos.
Exercícios
1 – Defina Operador de Endereço:
________________________________________________________
________________________________________________________
_____________________________________________________
85
2 – Qual a sintaxe da função 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 função 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 combustível
gastos em uma viagem. O programa deve solicitar ao usuário os
seguintes dados: Qual distância(em Km)o veículo faz por litro de
combustível, tempo (em horas) gasto na viagem e a velocidade média
(em Km) durante a mesma.
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
_________________________________________________
Capítulo 7
88
Decisões e
Seleção
múltipla
• O comando if
• Bloco de comando com if
• O comando if-else
• O comando if-else-if
• O operador alternativo “ ? “
• Operadores lógicos
• O comando switch
Comandos de Seleção
O comando if
Utilizamos esse comando quando deseja-se tomar uma
decisão simples. Se a expressão é verdadeira (diferente de 0), o
comando ou bloco que forma o “corpo “ do if é executado uma única
vez. Se a expressão for falsa, o programa não executa a instrução
iniciada por if .
Exemplo:
.
.
main( )
{
clrscr( );
int x;
printf(“Digite um número:”);
scanf(“%d”,&x);
if (x>=0)
if (x<100)
puts(“O número é menor que uma centena ! “);
getch( );
}
Sintaxe :
if ( expressão de controle )
comando ;
Bloco de comando if
Em C, é possível a utilização de “ ifs aninhados “,que
formam um comando composto, também chamado “bloco de
comando”. Neste caso, um comando if é o objeto de outro if .
Sintaxe:
if (expressão de controle) {
if (expressão 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 2ºnúmero é menor que 10\n”);
puts(“O 1º número é menor que o 2ºnúmero”);
}
getch( );
}
O comando if-else
Vimos que o comando if executa uma única instrução ou
um bloco de comando quando é verdadeira ( 1 ) a expressão. Porém,
nada fará se esta for falsa ( 0 ).
Quando associamos if ao comando else, haverá a execução
de uma ou mais instruções compreendidas entre chaves, se a expressão
de teste relacionada ao comando if for falsa ( 0 ) .
Ou seja, quando o comando if estiver acompanhado de uma
“cláusula” else, esta selecionará um comando alternativo a ser
executado.
Sintaxe:
if (expressão de controle)
comando 1;
else
comando 2;
92
Se a expressão de controle for verdadeira, o programa
executará comando 1; do contrário executará comando 2. Ambos os
comandos terminam com ponto-e-vírgula, 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 1ºnúmero é menor que o último número digitado”);
else
printf(“A média aritmética dos nrs digitados é:%.1f”,e);
getch( );
}
O comando if-else-if
Também chamada de “escada if-else-if” ou “árvore de
decisão” devido a sua aparência na listagem do programa, faz com que
as condições sejam avaliadas de cima para baixo. Encontrada a
93
condição verdadeira, o comando associado a ela é executado fazendo
com que o restante da escada seja contornado.
Esta coleção de comandos if com cláusulas else pode
conter um else final para garantir no mínimo que um comando seja
relacionado.
Sintaxe:
if (condição 1 )
comando 1;
else if (condição 2)
comando 2;
else if (condição 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ê não digitou uma letra válida !”);
puts(“Pressione uma tecla p/finalizar“);
getch( );
}
Funcionamento:
O programa sugere a escolha de uma letra que, através de
scanf( ) associará à variável x. Apenas uma das condições será
verdadeira; e se for será impresso, portanto, o incremento deste
caractere (a,b ou c) passando, posteriormente, para as instruções que
solicita uma tecla para finalizar o programa . Se nenhuma das
condições for verdadeira, através 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
instrução if-else simples.
Também chamado de “Operador ternário” ( o único em C),
o ? requer três 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 número é maior que cem e sua
raiz quadrada é:%.2f”,sqrt(x)): printf(“O número é
menor que cem e seu quadrado é:%d”,x*x);
getch( );
}
Operadores lógicos
Os operadores lógicos explanam as maneiras que as
relações podem ser conectadas. Os operadores relacionais (visto no
capítulo 4), freqüentemente, trabalham juntos com esses operadores.
Como sabemos, verdadeiro é qualquer valor diferente de zero,
enquanto que falso é zero. Assim como o operador relacional, o
operador lógico devolve 0 para falso e 1 para verdadeiro.
É possível formar expressões relacionais complexas
utilizando os operadores lógicos. 96
Operadores lógicos:
operador ação
&& 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 expressão relacional, a lógica 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
variável 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, tão somente, as condições
forem verdadeiras.
Exemplo 2 :
.
.
if ((a<10) || (a>100))
comando ;
.
.
No exemplo 2, se qualquer uma das condições for
verdadeira, ou se ambas forem verdadeiras, o comando será
executado; do contrário é ignorado.
Lê-se: Se a for menor que 10 ou maior que 100 .......
Exemplo:
40>10&&!(40<7)||6>=4
98
Neste caso, a condição é verdadeira .
O comando switch
Esse comando é freqüentemente utilizado para processar
uma entrada de dados pelo console.
Algumas “árvores de decisão” 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
expressão com uma lista de constantes. Se o valor coincide, os
comandos associados àquela constante são executados.
Sintaxe:
switch (expressão) {
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 opção:\n a -Soma\n b -Subtração\n c -
Multiplicação\nd-Divisão”);
x=getch( );
switch (x) {
case ‘a’ :
puts(“Você selecionou Soma”);
break ;
case ‘b’ :
puts(“Você selecionou Subtração”);
break ;
case ‘c’ :
puts(“Você selecionou Multiplicação”);
break ;
case ‘d’ :
puts(“Você selecionou Divisão”);
break ;
default :
puts(“Você escolheu uma opção inválida.”);
}
getch( );
}
100
Outro exemplo:
#include <stdio.h>
#include <conio.h>
main( )
{
clrscr( );
char x ;
puts(“Selecione a opção:\n + -Soma\n - -Subtração\n * ou x
-Multiplicação\n / -Divisão”);
x=getch( );
switch (x) {
case ‘+’ :
puts(“Você selecionou Soma”);
break ;
case ‘-’ :
puts(“Você selecionou Subtração”);
break ;
case ‘*’ :
case ‘x’ :
puts(“Você selecionou Multiplicação”);
break ;
case ‘/’ :
puts(“Você selecionou Divisão”);
break ;
default :
puts(“Você escolheu uma opção inválida.”);
}
getch( );
}
Exercícios
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