A maior rede de estudos do Brasil

Grátis
120 pág.
ApostilaANSI-C

Pré-visualização | Página 8 de 27

simula um jogo de azar que verifica se o usuário 
acertou um número sorteado randomicamente. 
 
******************************************************************************/ 
int main () 
{ 
 int Aposta, Sorteio; /*Declaracao de variáveis*/ 
 time_t t; 
 
 srand((unsigned)time(&t)); /*Iniciar gerador de numeros 
 aleatorios*/ 
 printf ("Este programa simula um jogo de azar.\n\n"); /* Entrada de Dados */ 
 printf ("Digite um numero inteiro ente 0 e 10.\n\n"); 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
35 
 scanf ("%d",&Aposta); 
 Sorteio = random(10); /* Sorteio randomico*/ 
 printf ("\n\nVoce %s o numero sorteado e’ igual a %d.",(Aposta == Sorteio) ? "acertou" : 
 "errou" , Sorteio); 
 printf ("\n\n"); 
 system("pause"); 
 return 0; 
} 
 
a. Existe alguma estrutura que você estudou em PascaL que poderia substituir o 
operador condicional? 
 
#include <stdio.h> 
#include <stdlib.h> 
 
/***************************************************************************** 
 Programa 14 
Através deste programa você testara os operadores lógicos. 
 
******************************************************************************/ 
int main() 
{ 
 int i, j; 
 printf("Digite dois numeros inteiros (cada um sendo 0 ou 1): \n"); 
 scanf("%d\n%d", &i, &j); 
 printf("\n%d AND %d e’ %d\n", i, j, i && j); 
 printf("%d OR %d e’ %d\n", i, j, i || j); 
 printf("NOT %d e’ %d\n\n", i, !i); 
 system(“pause”); 
 return 0; 
} 
 
b. Execute o programa novamente, mas insira números inteiros quaisquer. Faça 
mais de uma execução e não se esqueça de introduzir o zero. Explique o ocorrido. 
 
 
Dica:Dica:Dica:Dica: 
� Se você não estiver entendendo dê uma olhadinha no item Expressões. 
 
#include <stdio.h> 
#include <stdlib.h> 
 
/***************************************************************************** 
 Programa 15 
Através deste programa você testara os operadores relacionais. 
 
******************************************************************************/ 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
36 
int main() 
{ 
 int i, j; 
 printf("Entre com dois numeros inteiros:\n"); 
 scanf("%d\n%d", &i, &j); 
 printf("\n%d == %d e’ %d.\n", i, j, i==j); 
 printf("\n%d != %d e’ %d.\n", i, j, i!=j); 
 printf("\n%d <= %d e’ %d.\n", i, j, i<=j); 
 printf("\n%d >= %d e’ %d.\n", i, j, i>=j); 
 printf("\n%d < %d e’ %d.\n", i, j, i<j); 
 printf("\n%d > %d e’ %d.\n\n", i, j, i>j); 
 system(“pause”); 
 return 0; 
} 
 
c. Explique porque o retorno de uma operação relacional assume apenas os 
inteiros “0” e “1” e o significado desses valores na linguagem C. 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
37 
 
AULA PRÁTICA 04 
 
OBJETIVO: 
 
� Estudar as expressões aritméticas e lógicas. 
 
 
INTRODUÇÃO 
 
Uma vez que vocês já sabem o que são variáveis, constantes, operadores 
aritméticos e lógicos, vamos aplicar esses conhecimentos utilizado-os em 
expressões que é um passo muito importante na solução dos nossos problemas. 
Além de expressões veremos a formatação de valores numéricos que possibilitará 
formatar os dados impressos por você. 
EXPRESSÕES 
As expressões são combinações de variáveis, constantes e operadores, elas 
podem ser expressões aritméticas ou lógicas. 
Expressões aritméticas 
Expressões aritméticas são executadas com operandos do mesmo tipo. O 
resultado da operação terá o mesmo tipo dos operandos. Como pode haver 
valores inteiros e valores ponto flutuante (float), haverá uma conversão implícita 
de tipo, de int para float, sempre que necessário para que a operação seja feita 
entre operandos do mesmo tipo. 
Observe a solução da seguinte expressão: v = (a + (d - c)) / ((b*b) * d) * (1.0 / c); 
Sabendo-se que: a= 15; b= 2; c= 4; d= 3 
Tabela 12 - Operadores aritméticos 
Ordem Operação Resultado Conversão de tipo? 
1º (d - c) 3 – 4 = -1 Não 
2º (b * b) 2 * 2 = 4 Não 
3º (1.0 / c) 1.0 / 4 = 0.25 Sim (4 para 4.0) 
4º a + 1º 15 + (-1) = 14 Não 
5º 2º * d 4 * 3 = 12 Não 
6º 4º / 5º 14/12 = 1 Não (divisão inteira) 
7º 6º * 3º 1 * 0.25 = 0.25 Sim (1 para 1.0) 
8º v = 7º v = 0.25 Não 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
38 
Se as conversões forem possíveis o processador as faz, seguindo as regras 
abaixo: 
1. Em operações onde um ou mais operandos são char ou short int e o(s) 
outro(s) operando(s) é int, haverá uma conversão daqueles (char ou short 
int) para int. O mesmo acontece com operando floats que são convertidos 
para doubles. 
2. Para pares de operandos de tipos diferentes: se um deles é long double o 
outro é convertido para long double; se um deles é double o outro é 
convertido para double; se um é long o outro é convertido para long; se 
um é unsigned o outro é convertido para unsigned. 
Ainda com relação à expressão que acabamos de resolver podemos verificar 
que ela foi executada da esquerda para a direita de acordo com a prioridade 
dos operadores. Observe se a ordem de execução seguiu a Tabela 13, 
apresentada a seguir: 
Tabela 13 – Precedência dos operadores 
Prioridade Operador Descrição 
() Parênteses 
[ ] Colchete 1º 
���� Membro de uma estrutura 
++ Incremento prefixado ou pós-fixado 
-- Decremento prefixado ou pós-fixado 
! NÃO lógico 
~ NÃO binário 
, Encadeamento de expressões 
-(unário) Número negativo 
*(unário) Ponteiro 
&(unário) Endereço de uma variável 
(cast) Modeladores de tipo de dado 
2º 
sizeof Retorna o tamanho de uma variável 
* Multiplicação aritmética 
/ Divisão aritmética 3º 
% Resto de divisão 
+ Mais aritmético 4º 
- Menos aritmético 
< Menor relacional 
<= Menor ou igual relacional 
> Maior relacional 5º 
>= Maior ou igual relacional 
 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
39 
 
. Tabela 13 – Precedência dos operadores 
Prioridade Operador Descrição 
6º && E lógico 
7º || OU lógico 
8º ?: Condicional 
= Atribuição 
*= Aritmético de atribuição (multiplicação) 
/= Aritmético de atribuição (divisão) 
%= Aritmético de atribuição (módulo) 
+= Aritmético de atribuição (adição) 
9º 
-= Aritmético de atribuição (subtração) 
 
 
Expressões lógicas bit a bit 
 
Expressões lógicas bit a bit são elaboradas entre operandos inteiros que podem 
ser escritos em decimal, octal ou hexadecimal e o resultado também é um inteiro. 
Se usarmos operandos inteiros com bases diferentes a operação é executada 
normalmente pois independente da base os operando e a respostas são inteiros. 
Na realidade o computador só efetua operações em binário e isso todos nós já 
sabemos. 
 
Podemos implementar através de software qualquer expressão booleana, uma vez 
que a linguagem C possui todos os operadores lógicos básicos (and, or e 
complemento). A única diferença é que se forem implementados em hardware, os 
circuitos serão mais rápidos. 
 
Observe a expressão a seguir: 
 
Int portaXNor, a= 017, b= 0x5A; 
portaXNor = (~a & ~b)