#+title: Curso Básico da Linguagem C #+subtitle: Exercícios #+author: Blau Araujo #+startup: show2levels #+options: toc:3 * Exercícios da aula 4: Variáveis e ponteiros - [[../../aulas/04-variaveis/README.org][Anotações da aula]] - [[https://youtu.be/i7RKtMgSSrM][Vídeo]] ** 1. Pesquise e responda - Existe uma forma para alterar uma variável em uma função a partir de outra função: como fazer isso? - Por que as variáveis de uma função, em princípio, são locais à própria função? - Se o valor associado a um ponteiro é um endereço, o que termos com a avaliação de =&NOME_DO_PONTEIRO=? ** 2. Analise o código, pesquise e responda Este é mais um "Olá, mundo": #+begin_src c #include char *msg = "Salve, simpatia!"; int main(void) { puts(msg); return 0; } #+end_src Se ponteiros recebem endereços como valores, por que eu fiz a atribuição de uma string e o meu programa funcionou? ** 3. Compile, analise e demonstre #+begin_src c #include int main(void) { int a = 0; int b = 875569217; int c = 1280655661; int d = 1129071171; char *p = (char *)&d; int i = 0; while (*(p + i) != '\0') { putchar(*(p + i)); i++; } putchar('\n'); // printf("%p\n%p\n%p\n%p\n", &d, &c, &b, &a); return 0; } #+end_src - Como o código funciona? - O que estou tentando imprimir? - Com o =printf= comentado, eu consigo imprimir o que eu quero? - Se eu tirar o comentário, eu tenho a impressão que eu quero? - Por que acontece essa diferença de comportamento? - Como imprimir corretamente apenas o que eu quero? ** 4. Pesquise e responda - Para que serve e como usar a função =putchar=? - Quando e por que utilizar =putchar('\n')= em vez de =puts("")=? - Como funciona a estrutura de repetição =while=? - Para que servem os especificadores de formato =%zu= e =%p=? ** 5. Desafio: quadrado de um número Crie um programa que peça a digitação de um número inteiro ao usuário e imprima o quadrado desse número. *Requisitos:* - O programa deve testar se o número digitado é um inteiro válido. - Se não for, o programa deve terminar com uma mensagem enviada para a saída padrão de erros (=stderr=) e estado de término =1=. *Dicas:* - Utilize a função =scanf= para ler o número digitado. - Existe uma variante do =printf= que possibilita imprimir na saída de erros em vez da saída padrão. - Existe um cabeçalho que define constante com os limites dos tipos inteiros.