2025-03-20 15:05:11 -03:00
|
|
|
#+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
|
|
|
|
|
2025-03-27 08:26:25 -03:00
|
|
|
- [[../../aulas/04-variaveis/README.org][Anotações da aula]]
|
2025-03-20 15:05:11 -03:00
|
|
|
- [[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.
|
|
|
|
|