mirror of
https://gitlab.com/blau_araujo/cblc.git
synced 2025-05-09 18:16:37 -03:00
.. | ||
README.org |
Curso Básico da Linguagem C
Exercícios da aula 3: Tipos de dados
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:
unsigned long quadrado(long base) {
return base * base; /* Qual é o tipo desse expressão? */
}
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:
for (int i = -100; i <= 100; i++) {
/* O código que você achar que deve ser executado... */
}
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…
#include <stdio.h>
int main(void) {
int valor = 1 / 4;
printf("%d\n", valor);
return 0;
}
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
:
#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]);
}