2025-03-16 13:33:53 -03:00
|
|
|
|
#+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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|