cblc/exercicios/04/README.org

98 lines
2.5 KiB
Org Mode

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