cblc/exercicios/03/README.org

115 lines
2.5 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+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 <stdio.h>
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 <stdio.h>
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