Texto

(1)

Faculdade de Computação

I n t r o d u ç ã o à C i ê n c i a d a C o m p u t a ç ã o 3 ª L i s t a d e E x e r c í c i o s

P r o f . C l á u d i o C . R o d r i g u e s Introdução à Programação & Linguagem C

Primeiro Módulo: Conceitos Básicos de Linguagens.

Objetivo: Reforçar os conceitos relacionados com estruturas de linguagens de programação.

1. Se average é uma variável, o que significa &average?

2. Pelas variáveis e endereços ilustrados na figura 1, determine &temp, &dist, &date e

&miles.

Figura 1 Memória em bytes:

Endereços 16892 16893 16894 16895 16896 16897 16898 16899

Temp dist

Endereços 16900 16901 16902 16903 16904 16905 16906 16907

date

Endereços 16908 16909 16910 16911 16912 16913 16914 16915

miles

3. Declarando variáveis e alocação de memória:

3.A. Escreva um programa incluindo as declarações seguintes. Use no programa o endereço do operador e a função printf para exibir os endereços correspondentes a cada variável.

char key, choice;

int num, count;

long date;

float yield;

double price;

3.B. Depois de ter funcionado o programa escrito no exercício 3.A, desenhe um diagrama de como seu compilador reservou o espaço de armazenamento atribuído as variáveis do programa. Em seu diagrama, preencha os endereços exibidos pelo programa.

(2)

3.C. Modifique o programa escrito para o exercício 3.A exibindo a quantidade de armazenamentos que seu computador reserva para cada tipo de dado (use o operador sizeof). Com esta informação e a informação do endereço provida do exercício 3B, determine se seu compilador reservou o espaço de armazenamento atribuído as variáveis na ordem pelo qual elas foram declaradas.

4. O que são palavras reservadas de uma linguagem? Liste as palavras reservadas da Linguagem C ANSI.

Segundo Módulo: Critérios de Seleção

Objetivo: Conhecer modelos de critérios de seleção

1. Determine o valor das seguintes expressões. Assuma a=5, b=2, c=4, d=6, e=3 a.

b.

c.

d.

e.

f.

g.

h.

i.

a.

b.

c.

d.

a.

b.

c.

d.

e.

f.

g.

h.

i.

j.

a.

b.

c.

a > b a != b

d % b == c % b a * c != d * b d * b == c * e

!(a * b)

!(a % b * c)

!(c % b * a) b % c * a

2. Usando parênteses, reescreva as seguintes operações para indicar corretamente a ordem de avaliação. Após, calcule o valor de cada expressão assumindo a=5, b=2, c=4.

a % b * c && c % b * a a % b * c || c % b * a b % c * a && a % c * b b % c * a || a % c * b

3. Escreva expressões relacionais para expressar as seguintes condições (use nomes de variáveis de sua própria escolha):

a idade de uma pessoa é igual a 30

a temperatura de uma pessoa é maior que 37,2 graus a altura de uma pessoa é menor que 1,8 metros o mês corrente é 12 (dezembro)

a letra digitada é m

a idade da pessoa é igual a 30 e ela tem mais de 1,80 metros hoje é o décimo quinto dia do mês de janeiro

o funcionário tem mais de 50 anos ou trabalha na empresa há pelo menos 5 anos o número de identificação de alguém é menor que 500 e esta pessoa tem mais que 55 anos

o comprimento é maior que 60 cm e menor que 90 cm

4. Determine o valor das seguintes expressões, assumindo a=5, b=2, d=5.

a == 5

b * d == c * c

d % b * c > 5 || c % b * d < 7

(3)

Terceiro Módulo: Estruturas de Controle

Objetivo: desenvolver algoritmos utilizando estruturas de controle condicionais If - Else

1. Escreva comandos if apropriados para cada uma das seguintes condições:

a.

b.

c.

d.

e.

f.

g.

h.

Se angulo é igual a 90 graus imprima a mensagem É um ângulo reto, senão imprima a mensagem Não é um ângulo reto

Se a temperatura for superior a 100 graus, imprima a mensagem acima do ponto de fervura da água, senão imprima abaixo do ponto de fervura da água.

Se o número for positivo, some ele à variável somapos, senão some ele à variável somaneg.

Se rampa for menor que 0,5 faça a variável flag conter zero, senão faça conter um.

Se a diferença entre num1 e num2 for menor que 0,001, atribua zero à variável aprox, senão calcule aprox como sendo (num1 - num2) / 2.0.

Se a diferença entre temp1 e temp2 exceder 2,3 graus, calcule o erro como sendo (temp1 - temp2) * fator.

Se x for maior que y e z for maior que 20, leia um valor para p.

Se distancia for maior que 30 e menor que 35, leia um valor para tempo.

2. Um ângulo é considerado agudo se for menor que 90 graus, obtuso se for maior que 90 graus e reto se for igual a 90 graus. Usando esta informação, escreva um programa em linguagem C que aceite um ângulo, em graus, e que mostre o tipo de ângulo

correspondente aos graus digitados.

3. A fasede um estudante de graduação americano é tipicamente determinada de acordo com a seguinte tabela:

Número de créditos vencidos Fase

Menos de 32 Freshman

32 a 63 Sophomore

64 a 95 Junior

96 ou mais Senior

Usando esta informação, escreva um programa em C que receba o número de créditos vencidos por um dado estudante e determine e informe a fase correspondente.

4. O conceito de um estudante é calculado de acordo com a seguinte tabela:

Nota Conceito

Maior ou igual a 9,0 A

Menor que 9,0 mas maior ou igual a 8,0 B Menor que 8,0 mas maior ou igual a 7,0 C Menor que 7,0 mas maior ou igual a 6,0 D

Menor que 6,0 F

(4)

Usando esta informação, escreva um programa em C que receba a nota numérica de um estudante e a converta para o conceito correspondente, mostrando-o ao final.

5. Escreva um programa em C que receba um número seguido de um espaço e uma letra.

Se a letra seguinte ao número for f, o programa deve tratar o numero digitado como uma temperatura em graus Fahrenheit, converter o número para o equivalente em graus Celsius e imprimir uma mensagem adequada. Se a letra seguinte ao número for c, o programa deve tratar o número digitado como uma temperatura em graus Celsius, converter o número para o equivalente em graus Fahrenheit e imprimir uma mensagem adequada. Se a letra não for f nem c, o programa deve imprimir uma mensagem

avisando que os dados estão incorretos e terminar. Use uma cadeia if-else no seu programa e faça uso das fórmulas de conversão:

Celsius = (5.0 / 9.0) * (Fahrenheit - 32.0) Fahrenheit = (9.0 / 5.0) * Celsius + 32.0

Programa 1:

#include <stdio.h>

void main(void) {

char estciv;

printf("Digite o código do estado civil\n");

scanf("%c", &estciv);

if (estciv == ’C’)

printf("Indivíduo é casado.\n");

else if (estciv == ’S’)

printf("Indivíduo é solteiro.\n");

else if (estciv == ’D’)

printf("Indivíduo é divorciado.\n");

else if (estciv == ’V’)

printf("Indivíduo é viúvo.\n");

else

printf("Dado digitado é inválido.\n");

printf("Grato por participar da pesquisa.\n");

}

6. Modifique o programa acima para aceitar letras maiúsculas ou minúsculas como códigos de estado civil. Por exemplo, se um usuário digitar tanto m quanto M, o programa

deveria mostrar a mensagem Indivíduo é casado.

(5)

Programa 2:

#include <stdio.h>

void main(void) {

float venda_mes, salario;

printf("Digite o valor de vendas no mês: ");

scanf("%f", &venda_mes);

if (venda_mes >= 50000.00)

salario = 375.00 + .16 * venda_mes;

else if (venda_mes >= 40000.00)

salario = 350.00 + .14 * venda_mes;

else if (venda_mes >= 30000.00)

salario = 325.00 + .12 * venda_mes;

else if (venda_mes >= 20000.00)

salario = 300.00 + .09 * venda_mes;

else if (venda_mes >= 10000.00)

salario = 250.00 + .05 * venda_mes;

else

salario = 200.00 + .03 * venda_mes;

printf("O salário é $%7.2f\n", salario);

}

Programa 3:

#include <stdio.h>

void main(void) {

float venda_mes, salario;

printf("Digite o valor de vendas no mês: ");

scanf("%f", &venda_mes);

if (venda_mes >= 50000.00)

salario = 375.00 + .16 * venda_mes;

if (venda_mes >= 40000.00 && venda_mes < 50000.00) salario = 350.00 + .14 * venda_mes;

if (venda_mes >= 30000.00 && venda_mes < 40000.00) salario = 325.00 + .12 * venda_mes;

if (venda_mes >= 20000.00 && venda_mes < 30000.00) salario = 300.00 + .09 * venda_mes;

if (venda_mes >= 10000.00 && venda_mes < 20000.00) salario = 250.00 + .05 * venda_mes;

if (venda_mes < 10000.00)

salario = 200.00 + .03 * venda_mes;

printf("O salário é $%7.2f\n", salario);

}

7. O programa 3 irá produzir o mesmo resultado do programa 2?

8. Qual programa é melhor e porquê?

(6)

Switch - Case

9. Reescreva a cadeia de if-else a seguir usando um comando switch.

if (let_nota == ’A’)

printf("A nota numérica está entre 9,0 e 10,0\n");

else if (let_nota == ’B’)

printf("A nota numérica está entre 8,0 e 9,0\n");

else if (let_nota == ’C’)

printf("A nota numérica está entre 7,0 e 8,0\n");

else if (let_nota == ’D’)

printf("Como você vai explicar essa\n");

else {

printf("Claro que não tive nada a ver com isso.\n");

printf("Deve ter sido culpa do professor.\n");

}

10. Uma encomenda de unidades de disco flexível contém unidades marcadas com um código de 1 a 4, que indica o tipo seguinte:

código Tipo da unidade

1 360 quilobytes (5,5 polegadas) 2 1,2 megabytes (5,5 polegadas) 3 722 quilobytes (3,25 polegadas) 4 1,4 megabytes (3,25 polegadas)

Escreva um programa em C que receba p número de um código como entrada e, baseado no valor digitado, informe o tipo correto de unidade de disco.

Quarto Módulo: Comandos de Repetição

1. Escreva um programa em C que converta galões para litros. O programa deve mostrar valores de galão entre 10 a 20 em incrementos de um, juntamente com o valor

equivalente em litros. Use a relação de 1 galão para 3,78 litros.

2. Uma máquina comprada por $28.000 se deprecia com uma taxa de $4.000 por ano em sete anos. Escreva um programa em C que calcula e mostra a tabela de depreciação para sete anos. A tabela deve ter a forma abaixo.

Ano Depreciação Valor no fim do ano

Depreciação Acumulada 1 4000 24000 4000 2 4000 20000 8000 3 4000 16000 12000 4 4000 12000 16000 5 4000 8000 20000 6 4000 4000 24000

7 4000 0 28000

(7)

3. Escreva um programa que produza a saída abaixo.

a. **** b. ****

**** ****

**** ****

**** ****

Quinto Módulo: Resolvendo Problemas

4. No jogo de Vinte e Um, as cartas de 2 a 10 são contadas com seus valores nominais, independentemente do naipe. As cartas com figuras (valete, dama e rei) são contadas como 10 e o ás é contado como 1 ou como 11, dependendo da contagem total de pontos na mão do jogador. O ás é contado como 11 somente se o valor resultante total das cartas na mão do jogador não exceder 21, senão é contado como 1. Usando esta

informação, faça um programa em linguagem C para receber o valor de três cartas como entrada (1 correspondendo ao ás, 2 correspondendo ao 2, e assim por diante), calcule o valor total da mão de forma apropriada e mostre o este valor com uma mensagem impressa.

5. Todos os anos que são múltiplos de 400, ou são múltiplos de 4 e não são múltiplos de 100, são anos bissextos. Por exemplo, como 1600 é múltiplo de 400, o ano 1600 é bissexto. Similarmente, já que 1988 é múltiplo de 4 e não é múltiplo de 100, o ano 1988 também é bissexto. Usando esta informação, escreva um programa em C que receba o ano como entrada de dados, determine se o ano é bissexto, e dê uma mensagem apropriada dizendo se o ano digitado é bissexto ou não.

6. Escreva um programa em C para encontrar a soma, a soma dos quadrados e a soma dos cubos dos n primeiros inteiros, começando com 1 e terminando com n=100. Verifique se em cada caso as igualdades se abaixo confirmam.

7. Escreva um programa em C para encontrar a soma dos 100 primeiros termos da série:

Verifique se a soma é igual a n/(n+1). Determine o valor para o qual a soma se aproxima quando n se torna infinitamente grande.

Data de Entrega: 20/05/2004

Imagem

Referências

temas relacionados :