From bdcb5ce492c72dec6dfb4899796b4ad55559db1a Mon Sep 17 00:00:00 2001 From: Blau Araujo Date: Sun, 16 Mar 2025 13:33:53 -0300 Subject: [PATCH] =?UTF-8?q?Exerc=C3=ADcios=20da=20aula=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercicios/03/README.org | 115 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/exercicios/03/README.org b/exercicios/03/README.org index e69de29..fc4b427 100644 --- a/exercicios/03/README.org +++ b/exercicios/03/README.org @@ -0,0 +1,115 @@ +#+title: Curso Básico da Linguagem C +#+subtitle: Exercícios +#+author: Blau Araujo +#+startup: show2levels +#+options: toc:3 + +* Exercícios da aula 3: Tipos de dados + +- [[../aulas/03-tipos-de-dados/README.org][Anotações da aula]] +- [[https://youtu.be/iMiRzZCU7hE][Vídeo]] + + +** 1. Pesquise e demonstre + +No programa =quadrado-long.c=, da aula 2, encontre uma forma de demonstrar o tipo +do valor avaliado pela expressão =base * base= nesta função: + +#+begin_src c +unsigned long quadrado(long base) { + return base * base; /* Qual é o tipo desse expressão? */ +} +#+end_src + +** 2. Desafio: conversão de Fahrenheit para Celsius + +Criar um programa que converta valores inteiros de -100ºF a 100ºF para Celsius +e apresente os resultados no terminal. + +Fórmula da conversão: =C = 5 × (F - 32) / 9= + +Os valores em Fahrenheit serão expressos pela variável =i=, declarada no loop =for=. + +Por exemplo: + +#+begin_src c +for (int i = -100; i <= 100; i++) { + /* O código que você achar que deve ser executado... */ +} +#+end_src + +** 3. Pesquise e responda + +O operador =sizeof(TIPO)= expressa o tamanho em bytes de =TIPO= com o tipo =size_t=. + +- O que é o tipo =size_t=? +- Como utilizá-lo no seu programa sem incluir cabeçalhos? +- Em quais cabeçalhos ele é definido? +- Qual é o especificador de formatos para ele no =printf=? + +** 4. Compile, corrija e responda + +O programa abaixo deveria imprimir =0.25= no terminal... + +#+begin_src c +#include + +int main(void) { + int valor = 1 / 4; + + printf("%d\n", valor); + + return 0; +} +#+end_src + +Responda: + +- Depois de compilado e executado, qual foi o valor impresso? +- Por que isso aconteceu? +- Como solucionar? + +** 5. Analise, pesquise e comente o código + +Programa =dump.c=: + +#+begin_src c +#include + +void print_bytes(char *label, void *addr, size_t size); + +int main(void) { + + int num = 100000; + + int sqr_int = num * num; + unsigned long sqr_long = (unsigned long)num * num; + + print_bytes("num ", &num, sizeof(num)); + printf("-> %d\n", num); + + print_bytes("sqr_int ", &sqr_int, sizeof(sqr_int)); + printf("-> %d\n", sqr_int); + + print_bytes("sqr_long", &sqr_long, sizeof(sqr_long)); + printf("-> %lu\n", sqr_long); + + return 0; +} + + +void print_bytes(char *label, void *addr, size_t size) { + + unsigned char *bytes = (unsigned char *)addr; + + printf("%p - %s - ", bytes, label); + + for (size_t i = 0; i < 8; i++) + printf("%02x ", i > (size - 1) ? 0 : bytes[i]); +} +#+end_src + + + + +