#+title: Curso Básico da Linguagem C #+subtitle: Exercícios #+author: Blau Araujo #+startup: show2levels #+options: toc:3 * Exercícios da aula 2: Dados e instruções - [[../../aulas/02-dados-e-instrucoes/README.org][Anotações da aula]] - [[https://youtu.be/2KsvRJjshQ0][Vídeo]] ** 1. Pesquise e responda - Quais são as finalidades da função =printf=? - Em que cabeçalho da =glibc= ela é declarada? - Quantos argumentos ela recebe? - Como fazer para que a saída imprima quebras de linha? - Para que servem os especificadores de formato =%d=, =%s=, =%c= e =%f=? ** 2. Operações aritméticas Escreva um programa que, dado um valor inteiro associado à variável =num=, calcule e imprima os resultados das seguintes operações: - =num= multiplicado por 15; - =num= somado a =42=; - =123= menos =num=; - Divisão de =num= por =5=; - Resto da divisão de =num= por =5=. Esquema geral da saída do programa: #+begin_example NUM x 15 = VALOR NUM + 42 = VALOR 123 - NUM = VALOR NUM / 5 = VALOR RESTO DE NUM / 5 = VALOR #+end_example ** 3. Números mágicos O uso de valores literais sem um significado óbvio (/números mágicos/) é uma prática indesejável, mas pode ser evitada de várias formas. Sendo assim, analise as situações abaixo e proponha uma solução. *Caso 1:* Propriedades de círculos Meu programa tem funções para calcular a área e o perímetro de um círculo cujo raio (um inteiro) é recebido como argumento: #+begin_src c #include ... float circ_perim(int raio) { /* Circunferência = 2πr */ return 2 * 3.14 * raio; } double circ_area(int raio) { /* Área = πr² */ return 3.14 * raio * raio; } int main(void) { ... } #+end_src *Caso 2:* Multiplicador constante No meu programa, todas as operações aritméticas envolvem a multiplicação de um valor por =10=. #+begin_src c #include int main(void) { int num1 = 13; int num2 = 29; printf("%d x %d = %d\n", num1, 10, num1 * 10); printf("%d x %d = %d\n", num1 + num2, 10, (num1 + num2) * 10); printf("%d x %d = %d\n", num2, 10, num2 * 10); } #+end_src ** 4. Compile, corrija e responda Dado o programa abaixo (por exemplo, =main.c=)... #+begin_src c #include int main(void) { char *fmt = "Circunferência de um círculo de raio %d: %.2f\n"; printf(fmt, r, circ_perim(r)); return 0; } float circ_perim(int raio) { /* Circunferência = 2πr */ return 2 * 3.14 * raio; } #+end_src - Qual foi o erro encontrado na compilação? - Por que esse erro aconteceu? - Qual foi a solução adotada? - A sua solução é a única possível? - Se não for, cite outras possibilidades. ** 5. Pesquise e responda Pesquise, entre as funções da =glibc=, aquelas que podem solucionar os problemas abaixo e demonstre como elas podem ser utilizadas. - Pausar a execução do programa por 10 segundos. - Apenas imprimir uma quebra de linha. - Ler um número inteiro interativamente e atribuí-lo a uma variável. - Imprimir um número inteiro decimal em base 8 e base 16. - Terminar a execução do programa com um valor de estado de término.