diff --git a/exercicios/01/.01_pesquise_responda.md.swp b/exercicios/01/.01_pesquise_responda.md.swp new file mode 100644 index 0000000..5f18282 Binary files /dev/null and b/exercicios/01/.01_pesquise_responda.md.swp differ diff --git a/exercicios/01/01_pesquise_responda.md b/exercicios/01/01_pesquise_responda.md new file mode 100644 index 0000000..5f05cdf --- /dev/null +++ b/exercicios/01/01_pesquise_responda.md @@ -0,0 +1,22 @@ +## 1. Pesquise e explique + +## As classificações abaixo são utilizadas para descrever as características da linguagem C: pesquise e explique cada uma delas. + +### - Linguagem de alto nível; +Uma linguagem de alto nível é caracterizada pela proximidade com a linguagem humana e a distância da linguagem de máquina. Como no C, elas foram criadas para facilitar a vida do programador e usuário do programa. É utilizada uma sintaxe mais próxima do inglês no caso, com palavras reservadas. + +### - Linguagem compilada; + +Uma linguagem compilada passa pelo processo de compilação na qual o código fonte é transformado em código de máquina(binário) antes de sua execução. + +### - Linguagem procedural; + +Uma linguagem procedural é um paradigma de programação que organiza o código em procedimentos ou funções. ELes são blocos de código que realizam tarefas especifícas. + +### - Linguagem imperativa; + +Uma linguagem imperativa também é um paradigma de programação na qual uma sequência de comandas alteram o estado de um programa. As instruções modificam variáveis e estruturas de dados. + +### - Linguagem estruturada. + +Uma linguagem estruturada também é um paradigma de programação que enfatiza a organização lógica do código em blocos hierárquicos e estruturas de controle. Assim, melhora a legibilidade, manutenção e reduz erros. diff --git a/exercicios/01/02_analise_programa.md b/exercicios/01/02_analise_programa.md new file mode 100644 index 0000000..6de7f37 --- /dev/null +++ b/exercicios/01/02_analise_programa.md @@ -0,0 +1,28 @@ +# 2. Analise o programa + +Dado o programa abaixo (salve.c), explique cada uma perguntas nos comentários. + +~~~C + + +#include // O que é isso e para que serve? + +// Por que todo o programma é escrito na função 'main()'? +int main(void) { + + puts("Salve, simpatia!"); // O que faz e como se usa a função 'puts()'? + + return 0; // Para que serve esta instrução? +} + +~~~ + +_#include _ é o cabeçalho de nosso programa. Aqui estão incluídas bibliotecas padrão da linguagem C que contém funções específicas. No caso, temos a biblioteca padrão. + +_main()_ é a função padrão onde se inicia efetivamente a execuçã ode um programa em C. Tratra-se de uma convenção do compilador e sistema operacional e um padrão da Linguagem C. + +_puts()_ a função imprime uma string e uma quebra de linha na saída padrão do programa, no caso a nosso console/terminal/monitor. +Ao contrário de _printf_, ela imprime apenas strings e não aceita outros formatos e especificadores. + +Por padrão, a função _main()_ deve retornar um tipo _int_. Por isso, a função _return 0;_ funciona como um código de status(exit status) para o sistema operacional ou ambiente que o programa foi executado com sucesso. _return 0;_, significa sucesso e qualquer valor diferente de 0 indica um erro. + diff --git a/exercicios/01/03_compile_corrija.c b/exercicios/01/03_compile_corrija.c new file mode 100644 index 0000000..fe2e284 --- /dev/null +++ b/exercicios/01/03_compile_corrija.c @@ -0,0 +1,9 @@ +#include +#include + +int main(void) { + puts("Salve, simpatia!"); + return EXIT_SUCCESS; +} + + diff --git a/exercicios/01/03_compile_corrija.md b/exercicios/01/03_compile_corrija.md new file mode 100644 index 0000000..f4bf140 --- /dev/null +++ b/exercicios/01/03_compile_corrija.md @@ -0,0 +1,34 @@ +# 3. Compile, encontre, explique e corrija os bugs + +O uso de números mágicos (valores literais que não dão pistas de seus significados) é desaconselhado porque dificultam a leitura semântica do código. Sendo assim, nós utilizaremos a constante simbólica EXIT_SUCCESS, definida na biblioteca padrão com valor 0, em vez do inteiro literal 0 como argumento da instrução return: + +~~~C + + +#include + +int main(void) { + puts("Salve, simpatia!"); + return EXIT_SUCCESS +} + +~~~ + +Observe o resultado da compilação: +~~~bash +:~$ gcc salve.c -o salve +~~~ + + +## Quantos erros foram encontrados e quais são eles? + +_EXIT_SUCESS_ não foi declarado no retorno da linha 5; +É esperado ponto e vírgula após _EXIT_SUCESS_. + +## Quais são as correções sugeridas pelo gcc? + +Ele sugere a inclusão da biblioteca/cabeçalho __; + +## Como ficou o código corrigido? + +Praticamente igual, somente teve a inclusão da biblioteca no começalho; diff --git a/exercicios/01/04_compile_responda.md b/exercicios/01/04_compile_responda.md new file mode 100644 index 0000000..d4a4f58 --- /dev/null +++ b/exercicios/01/04_compile_responda.md @@ -0,0 +1,27 @@ +# compile, pesquise e responda: + +Dado o código: + +~~~C + + +#define EXIT_SUCCESS 0 + +int puts(const char *string); + +int main(void) { + puts("Salve, simpatia!"); + return EXIT_SUCCESS; +} + +~~~ +## Nenhum erro foi reportado. Por quê? + +Porque o protótipo funciona e o EXIT_SUCCESS foi definido com valor válido do inteiro 0. Apesar da não inclusão da biblioteca padrão __ o compilador busca a biblioteca padrão libc e encontra a função _puts)_; + +A prática não é recomendada pois em outros pode gerar resultados inconstantes. + +## Como você executaria o binário resultante? + +Normalmente, Com o comando _./main.c_. + diff --git a/exercicios/01/05_pesquise_responda.md b/exercicios/01/05_pesquise_responda.md new file mode 100644 index 0000000..c5119c4 --- /dev/null +++ b/exercicios/01/05_pesquise_responda.md @@ -0,0 +1,13 @@ +# 5. Pesquise e responda + +Quando não explicitamos a especificação utilizada para compilar o nosso programa (opção -std=PADRÃO do gcc), qual será o padrão utilizado e como podemos confirmar isso pela linha de comandos? + +O comando _gcc version_ dá somente a versão do nosso compilador mas não mostra o padrão utilizado. Encontrei no _man gcc_ como definir a saída , mas não consegui encontrar o padrão utilizado. + +A única maneira que imaginei seria compilar algum programa com algum paramêtro que jogue a saída de pipe grep std para um arquivo ou terminal, , mas não consegui fazer sozinho. + +O DeepSeek deu uma sugestão parecida: + +~~~bash +gcc -v -x c /dev/null -o /dev/null 2>&1 | grep "std=" +~~~ diff --git a/exercicios/01/compile_corrija b/exercicios/01/compile_corrija new file mode 100755 index 0000000..1d61159 Binary files /dev/null and b/exercicios/01/compile_corrija differ diff --git a/exercicios/01/main.c b/exercicios/01/main.c new file mode 100644 index 0000000..b51c653 --- /dev/null +++ b/exercicios/01/main.c @@ -0,0 +1,10 @@ +#define EXIT_SUCCESS 0 + +int puts(const char *string); + +int main(void) { + puts("Salve, simpatia!"); + return EXIT_SUCCESS; +} + + diff --git a/exercicios/02/.04_pesquise_responda.md.swp b/exercicios/02/.04_pesquise_responda.md.swp new file mode 100644 index 0000000..ca08999 Binary files /dev/null and b/exercicios/02/.04_pesquise_responda.md.swp differ diff --git a/exercicios/02/01_pesquise_responda.md b/exercicios/02/01_pesquise_responda.md new file mode 100644 index 0000000..b21331c --- /dev/null +++ b/exercicios/02/01_pesquise_responda.md @@ -0,0 +1,19 @@ +# Pesquise e responmda + +## Quais são as finalidades da função printf? + +Formata e imprime uma saída (para a saída padrão) com o controle da formatação de strings que especificam os elementos a serem convertidos. + +## Em que cabeçalho da glibc ela é declarada? + +## Quantos argumentos ela recebe? + +Recebe um mínimo de 1 argumento e pode receber vários argumentos como as variáveis e seus especificadores. Não encontrei um limite. + +## Como fazer para que a saída imprima quebras de linha? +\n + +## Para que servem os especificadores de formato %d, %s, %c e %f? + +Para a conversão de valores determinados ao tipo. + diff --git a/exercicios/02/02op_artimeticas.c b/exercicios/02/02op_artimeticas.c new file mode 100644 index 0000000..6699783 --- /dev/null +++ b/exercicios/02/02op_artimeticas.c @@ -0,0 +1,13 @@ +#include + +int main(){ + + int num = 10; + printf("%d x 15 = %d\n", num, num * 15); + printf("%d + 42 = %d\n", num, num + 42); + printf("123 - %d = %d\n",num, 123 - num); + printf("%d / 5 = %d\n", num, num / 5); + printf("Resto de %d / 5= %d\n", num, num % 5); + return 0; + +} diff --git a/exercicios/02/04_compile_corrija.c b/exercicios/02/04_compile_corrija.c new file mode 100644 index 0000000..df2fb5c --- /dev/null +++ b/exercicios/02/04_compile_corrija.c @@ -0,0 +1,16 @@ +#include + +float circ_perim(int raio) { + /* Circunferência = 2πr */ + return 2 * 3.14 * raio; +} + int main(void) { + int r = 22; + char *fmt = "Circunferência de um círculo de raio %d: %.2f\n"; + printf(fmt, r, circ_perim(r)); + return 0; +} + + + + diff --git a/exercicios/02/04_compile_corrija.md b/exercicios/02/04_compile_corrija.md new file mode 100644 index 0000000..fcf6faf --- /dev/null +++ b/exercicios/02/04_compile_corrija.md @@ -0,0 +1,52 @@ +# Compile, corrija e responda + +~~~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; +} + +~~~ + +## Qual foi o erro encontrado na compilação? + +A variável _r_ não foi declarada antes do uso. A função circ_perim, por ser declarada depois da função _main_ estava sendo reconhecida como valores _int_ e não _float_; + +## Por quê esse erro aconteceu? + +Variável não declarada não é reconhecida. A função criada não é reconhecida também pelo compilador e retorna um _int_; + +## Qual foi a solução adotada? + +Arquivo 04_compile_corrija.c : + +~~~C + #include + + float circ_perim(int raio) { + /* Circunferência = 2πr */ + return 2 * 3.14 * raio; + } + int main(void) { + int r = 22; + char *fmt = "Circunferência de um círculo de raio %d: %.2f\n"; + printf(format: fmt, r, circ_perim(raio: r)); + return 0; + } + ~~~ + +## A sua solução é a única possível? Cite outras possibilidades + +Não. Acredito que existem várias soluções para o problema. Mas a princípio só consigo enxergar que a variável _r_ pode ser definida como uma variável global. + + diff --git a/exercicios/02/05_pesquise_responda.md b/exercicios/02/05_pesquise_responda.md new file mode 100644 index 0000000..6e108e0 --- /dev/null +++ b/exercicios/02/05_pesquise_responda.md @@ -0,0 +1,57 @@ +## Pausar a execução de um programa por dez segundos + +~~~bash +$ man -k "pause" +sleep (3) - sleep for a specified number of seconds +$ man 3 sleep +~~~ + +A função _sleep()_, da __ permite a pausa da execução de um programa até o número especificado de segundos terminar. + +## Apenas imprimir uma quebra de linha + +~~~bash +$ man -k "print" +puts (3) - output of characters and strings +$ man 3 puts +~~~ + +A função _puts()_ imprime a string e uma quebra de linha para _stdout_ +Eu posso utilizar a função sem argumento para imprimir uma quebra de linha. +~~~C +puts(""); +~~~ + +## Ler um número inteiro interativamente e atribuí-lo a uma variável + +~~~bash +$ man -k "input" | grep -i "scan" +fscanf (3) - input FILE format conversion +scanf (3) - input FILE format conversion +sscanf (3) - input string format conversion +vfscanf (3) - input FILE format conversion +vscanf (3) - input FILE format conversion +vsscanf (3) - input string format conversion +$ man 3 scanf +~~~ + +As funções da família _scanf_ podem ler entradas formatadas. A função _scanf()_ lê a a entrada de dados padrão. + +~~~C +int a; +printf("Insira um número inteiro:\n",) +scanf ("%d", &a); +~~~ + +## Ler um número inteiro decimal e atribuí-lo a uma variável + +Podemos utilizar a função _printf_ para converter os mesmos valores utilizando os especificadores de número octais e hexagonais. + +~~~C +int a = 3; +printf("decimal %d, base 8 %o, base 16 %x\n",a , a, a); +~~~ + +## Terminar a execução de um programa com um valor de estado de término + +Podemos utilizar a função exit(), segundo _man 3 exit_, a função causa término do processo e o valor de status -0377 retorna para o parente. Ou seja, podemos utilizar qualquer número inteiro como atributo e o sistema irá utilizar somente enxerga 0-255. diff --git a/exercicios/02/3_1_num_magicos.c b/exercicios/02/3_1_num_magicos.c new file mode 100644 index 0000000..2ab22ca --- /dev/null +++ b/exercicios/02/3_1_num_magicos.c @@ -0,0 +1,14 @@ +#include + +#define MULT 10 + +int main(void) { + int num1 = 13; + int num2 = 29; + + printf("%d x %d = %d\n", num1, MULT, num1 * MULT); + printf("%d x %d = %d\n", num1 + num2, MULT, (num1 + num2) * MULT); + printf("%d x %d = %d\n", num2, MULT, num2 * MULT); +} + + diff --git a/exercicios/02/3_num_magicos.c b/exercicios/02/3_num_magicos.c new file mode 100644 index 0000000..e428c89 --- /dev/null +++ b/exercicios/02/3_num_magicos.c @@ -0,0 +1,24 @@ +#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) { + int raio; + printf("Insira o raio do círculo:"); + scanf("%d", &raio); + + printf("O círculo do raio é %f\n", circ_perim(raio)); + printf("A área do círculo é %lf\n", circ_area(raio)); + + return 0; +} + + diff --git a/exercicios/02/a.out b/exercicios/02/a.out new file mode 100755 index 0000000..c7336b2 Binary files /dev/null and b/exercicios/02/a.out differ