cblc/exercicios/03
2025-03-27 08:26:25 -03:00
..
README.org Atualização de todos os exercícios 2025-03-27 08:26:25 -03:00

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]);
}