Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAÇÃO
EM
LINGUAGEM C
Sumário
Introdução ............................................................................................................. 6
Algoritmos ..................................................................................................... 7
Constantes ................................................................................................... 18
Operadores .......................................................................................................... 22
Operadores Aritméticos................................................................................... 22
Página 2 de 50
Operadores de Incremento e Decremento ....................................................... 23
for ................................................................................................................ 30
while ............................................................................................................ 32
do-while ....................................................................................................... 33
Funções ............................................................................................................... 35
Página 3 de 50
Declaração de Arrays ...................................................................................... 41
Exercícios ........................................................................................................... 49
Página 4 de 50
Bibliografia ......................................................................................................... 50
Página 5 de 50
INTRODUÇÃO
Bem-vindo à Apostila de Introdução à Programação em C! Nesta apostila, você
aprenderá os fundamentos da linguagem de programação C, incluindo tipos de dados,
operadores, variáveis, estruturas de controle, funções e matrizes. Ao final do curso, você
terá uma base sólida para criar programas simples em C e entender conceitos básicos de
programação.
Lógica de Programação
A lógica de programação é a habilidade fundamental que um programador precisa
para desenvolver soluções eficazes para problemas utilizando algoritmos. Ela envolve o
processo de planejamento, organização e estruturação das instruções que um computador
deve seguir para executar uma tarefa específica. Aqui estão os conceitos essenciais da
lógica de programação:
1. Algoritmos
3. Estruturas de Controle
4. Entrada e Saída
5. Funções e Modularização
Página 6 de 50
Funções são blocos de código que podem ser chamados várias vezes, promovendo
a reutilização e a organização do código. A modularização divide um programa em partes
menores, facilitando a manutenção e a colaboração.
6. Estruturas de Dados
Entender como usar arrays, listas, pilhas, filas e outros tipos de estruturas de dados
é fundamental para organizar e manipular informações de maneira eficiente.
7. Resolução de Problemas
8. Abstração
Algoritmos
Um algoritmo é um conjunto finito e ordenado de instruções precisas e bem
definidas que descrevem uma sequência de passos a serem seguidos para resolver um
determinado problema ou realizar uma tarefa específica. Em outras palavras, é um plano
ou procedimento lógico que guia a execução de uma série de ações para atingir um
objetivo desejado.
Página 7 de 50
1. Precisão: Cada passo do algoritmo deve ser claramente definido, sem
ambiguidades, para que qualquer pessoa ou computador possa entender e seguir
as instruções.
2. Finitude: O algoritmo deve ter um número finito de passos, ou seja, ele deve
eventualmente chegar a um fim após um número finito de etapas.
3. Eficiência: Um bom algoritmo é projetado para ser eficiente, ou seja, deve atingir
o objetivo com um número mínimo de passos ou operações.
4. Entrada: O algoritmo deve receber uma entrada (dados ou informações) sobre os
quais ele vai operar para produzir uma saída.
5. Saída: O algoritmo produz uma saída (resultado) após a execução das etapas.
6. Determinismo: Cada etapa do algoritmo deve ser determinística, ou seja, para um
conjunto específico de entradas, as mesmas instruções levarão sempre ao mesmo
resultado.
Página 8 de 50
media <- (numero1 + numero2) / 2
// Saída do resultado
Escreva("A média é: ", media)
Fim
Neste algoritmo:
Criar um algoritmo
Para criar um algoritmo, siga estas etapas básicas:
1. Entenda o Problema
2. Dívida em Etapas
3. Pseudocódigo ou Fluxograma
Página 9 de 50
4. Escreva as Instruções
6. Teste e Revisão
8. Teste a Implementação
O que é Programação em C?
A programação em C é um processo pelo qual você cria, desenvolve e escreve
instruções em linguagem C para que um computador possa executar tarefas específicas.
A linguagem de programação C é uma das linguagens mais populares e influentes na área
de desenvolvimento de software. Foi criada originalmente por Dennis Ritchie na década
Página 10 de 50
de 1970 e desde então tem sido amplamente usada em uma variedade de aplicações, desde
sistemas operacionais até aplicativos de desktop e sistemas embarcados.
➢ Tipos de Dados: C oferece diversos tipos de dados, como inteiros, ponto flutuante,
caracteres, entre outros, que permitem ao programador manipular diferentes tipos
de informações.
➢ Estruturas de Controle: Isso inclui comandos condicionais (como if e switch) para
tomar decisões em um programa, e loops (como for, while e do-while) para repetir
tarefas.
➢ Funções: As funções permitem dividir um programa em partes menores e mais
gerenciáveis. Cada função realiza uma tarefa específica.
➢ Ponteiros: Ponteiros são elementos fundamentais em C que permitem manipular
diretamente a memória e endereços de variáveis.
➢ Matrizes e Ponteiros para Funções: C oferece recursos para manipular matrizes e
usar ponteiros para funções, o que proporciona flexibilidade e poder ao
programador.
Ambiente de Desenvolvimento
O Code::Blocks é um ambiente de desenvolvimento integrado (IDE) de código
aberto que é amplamente utilizado por programadores para escrever, compilar e depurar
programas em várias linguagens de programação, incluindo C e C++. Ele oferece uma
interface amigável e várias ferramentas para facilitar o processo de desenvolvimento de
software. Aqui estão alguns aspectos chave do ambiente de desenvolvimento
Code::Blocks.
Página 11 de 50
Características Principais
1. Interface Gráfica: O Code::Blocks possui uma interface gráfica intuitiva que
permite aos programadores criar, editar e depurar códigos de maneira conveniente.
2. Compilação e Execução: Ele suporta a compilação e execução direta de
programas em várias linguagens, incluindo C e C++.
3. Depuração Integrada: O IDE possui um depurador integrado que ajuda a
identificar e corrigir erros no código, permitindo que você inspecione variáveis,
acompanhe a execução passo a passo e defina pontos de interrupção.
4. Gerenciamento de Projetos: O Code::Blocks permite criar projetos que podem
conter vários arquivos de código-fonte. Isso ajuda a organizar o desenvolvimento
de software complexo.
5. Editor de Código: Oferece um editor de código com recursos como realce de
sintaxe, recuo automático, preenchimento automático e muito mais.
6. Gerenciamento de Bibliotecas: Permite a integração de bibliotecas externas e
oferece ferramentas para configurar e vincular bibliotecas.
7. Customização: O Code::Blocks é altamente customizável. Você pode personalizar
atalhos de teclado, esquemas de cores e mais de acordo com suas preferências.
Página 12 de 50
TIPOS DE DADOS E VARIÁVEIS
Em programação, tipos de dados e variáveis são conceitos fundamentais usados
para armazenar e manipular informações em um programa. Vamos entender melhor esses
conceitos em relação à linguagem de programação C:
Os tipos de dados especificam o tipo de valor que uma variável pode armazenar. Eles
definem a faixa de valores possíveis e as operações que podem ser realizadas sobre esses
valores. Em C, existem diversos tipos de dados, como inteiros, ponto flutuante, caracteres
e mais. Alguns exemplos:
Variáveis
Em C, as variáveis devem ser declaradas antes de serem usadas, e seus nomes são
sensíveis a maiúsculas e minúsculas. Elas podem ser usadas para armazenar dados
temporários, cálculos intermediários e informações necessárias para a execução do
programa.
Resumindo, os tipos de dados definem o tipo de valor que uma variável pode
armazenar, e as variáveis são os "nomes" que você atribui aos locais de memória onde os
valores são armazenados. Juntos, esses conceitos são essenciais para a manipulação de
dados em programas C.
Página 13 de 50
➢ int: O tipo int é usado para armazenar números inteiros. Ele normalmente ocupa
4 bytes (32 bits) na maioria das plataformas modernas. Por exemplo:
➢ short int: É uma versão menor do tipo "int", ocupando normalmente 2 bytes (16
bits). Pode armazenar valores inteiros menores. Por exemplo:
➢ float: O tipo float é usado para armazenar números de ponto flutuante. Ele
normalmente ocupa 4 bytes (32 bits) e tem uma precisão limitada. Por exemplo:
double pi = 3.14159265;
Tipo de Dado Caractere
O tipo de dado caractere em C é usado para armazenar caracteres individuais.
➢ char: O tipo char é usado para armazenar um único caractere. Ele normalmente
ocupa 1 byte (8 bits) e pode representar letras, números e símbolos. Por exemplo:
Página 14 de 50
Esses tipos de dados são fundamentais em C e são usados para armazenar
diferentes tipos de informações em programas. Eles fornecem a base para a manipulação
de dados numéricos e de caracteres.
#include <stdbool.h>
#include <stdio.h>
int main() {
bool estaChovendo = true;
bool temSol = false;
if (estaChovendo) {
printf("Está chovendo.\n");
}
if (!temSol) {
printf("Não tem sol.\n");
}
return 0;
}
No entanto, mesmo sem a biblioteca stdbool.h, você pode usar inteiros para
representar valores booleanos:
#include <stdio.h>
int main() {
int estaChovendo = 1; // verdadeiro
int temSol = 0; // falso
Página 15 de 50
if (estaChovendo) {
printf("Está chovendo.\n");
}
if (!temSol) {
printf("Não tem sol.\n");
}
return 0;
}
Apesar de C não ter um tipo booleano embutido, a maioria das expressões
relacionais e lógicas em C retorna 0 para falso e 1 para verdadeiro. Isso permite que você
use avaliações lógicas em seus programas. Se você preferir uma abordagem mais
explícita, a biblioteca stdbool.h pode ser útil.
Declarando Variáveis
Para declarar uma variável em C, você precisa especificar o tipo de dados da
variável, seguido pelo seu nome. Aqui está a sintaxe geral para declarar uma variável em
C:
tipo_de_dados nome_da_variavel;
Vou dar alguns exemplos para ilustrar como declarar diferentes tipos de variáveis
em C:
Exemplos:
➢ Variável Inteira:
➢ Variável Caractere:
Página 16 de 50
Ao declarar variáveis em C, você está essencialmente reservando um espaço na
memória para armazenar valores do tipo especificado. Certifique-se de escolher nomes
significativos para suas variáveis e escolher o tipo de dados apropriado para o que você
deseja armazenar.
Atribuição de Valores
Atribuir valores a variáveis em C é feito utilizando o operador de atribuição `=`.
Você pode usar esse operador para associar um valor a uma variável que foi previamente
declarada. Aqui estão alguns exemplos de como atribuir valores a variáveis em C:
Exemplos:
➢ Variável Inteira:
Página 17 de 50
de usar o tipo de dados correto ao atribuir um valor, para que o valor seja compatível com
o tipo de variável que você está usando.
Constantes
Constantes em C são valores fixos que não podem ser alterados após serem
definidos. Elas são usadas para representar informações que permanecem constantes
durante a execução de um programa, como números, caracteres e valores especiais.
Constantes tornam o código mais legível, evitam erros e facilitam a manutenção.
Constantes Literais:
Constantes literais são valores específicos que são usados diretamente no código.
Eles podem ser de diferentes tipos de dados, como inteiros, ponto flutuante, caracteres
e strings. Aqui estão alguns exemplos de constantes literais:
Constantes Simbólicas
#define PI 3.14159265
#define TAMANHO_MAXIMO 100
No exemplo acima, PI será substituído por 3.14159265 sempre que for usado no
código, e TAMANHO_MAXIMO será substituído por 100.
Para criar constantes simbólicas, você utiliza a diretiva `#define` seguida pelo
nome da constante e seu valor. Geralmente, essas definições são colocadas no início do
arquivo de código.
Página 18 de 50
Exemplo:
#include <stdio.h>
#define PI 3.14159265
int main() {
float raio = 5.0;
float area = PI * raio * raio;
printf("Área do círculo: %f\n", area);
return 0;
}
Neste exemplo, a constante simbólica PI é usada para calcular a área de um
círculo. O uso de constantes torna o código mais claro e evita a repetição de valores.
Página 19 de 50
FUNÇÕES DE ENTRADA E SAÍDA DE DADOS
As funções de entrada e saída de dados em C estão presentes na biblioteca padrão
stdio.h. Essas funções permitem que você interaja com o usuário (entrada) e exiba
informações (saída) durante a execução do programa. As duas principais funções de
entrada/saída são printf() e scanf().
Função printf()
A função printf() é usada para imprimir (exibir) informações na saída padrão
(geralmente a tela). Ela é usada para formatar e exibir dados na forma de texto.
Sintaxe básica:
Exemplo:
Sintaxe básica:
Exemplo:
int numero;
printf("Digite um número inteiro: ");
Página 20 de 50
scanf("%d", &numero);
Importante:
➢ Os especificadores de formato são usados para definir o tipo de dado que será lido
ou impresso.
➢ O scanf() deve ser usado com cuidado para evitar problemas de entrada inválida
ou inadequada.
➢ O printf() permite formatação de saída, permitindo que você controle o layout e a
aparência dos dados impressos.
➢ Os parâmetros para printf() e scanf() são separados por vírgulas.
Ambas as funções são parte da biblioteca padrão stdio.h em C. O uso correto dessas
funções é importante para interagir eficientemente com o usuário e exibir informações
formatadas.
Página 21 de 50
OPERADORES
Os operadores em C são símbolos especiais usados para realizar operações em
variáveis e valores. Eles permitem que você realize cálculos, comparações e outras
manipulações de dados em seus programas. Os operadores em C podem ser divididos em
várias categorias, como operadores aritméticos, operadores de atribuição, operadores de
comparação, operadores lógicos, entre outros. Aqui estão alguns exemplos das categorias
mais comuns de operadores em C:
Operadores Aritméticos
Esses operadores são usados para realizar operações matemáticas em variáveis.
Operadores de Atribuição
Esses operadores são usados para atribuir valores a variáveis.
Operadores de Comparação
Esses operadores são usados para comparar valores.
Operadores Lógicos
Esses operadores são usados para combinar expressões lógicas.
Esses são apenas alguns dos operadores disponíveis em C. Eles são fundamentais
para realizar tarefas como cálculos, decisões e manipulação de dados em seus programas.
1. Pré-fixado: ++variável
➢ Incrementa a variável antes de usar seu valor.
2. Pós-fixado: variável++
➢ Usa o valor atual da variável e, em seguida, incrementa.
Exemplos:
int numero = 5;
int resultado;
// Pré-fixado
resultado = ++numero; // 'numero' é incrementado para 6
antes de ser atribuído a 'resultado'
// Pós-fixado
resultado = numero++; // 'numero' é atribuído a
'resultado' (valor 6), então é incrementado para 7
Página 23 de 50
Operador de Decremento: `--`
O operador de decremento diminui o valor de uma variável por uma unidade.
1. Pré-fixado: --variável
➢ Decrementa a variável antes de usar seu valor.
2. Pós-fixado: variável--
➢ Usa o valor atual da variável e, em seguida, decrementa.
Exemplos:
Página 24 de 50
➢ %u: Formatação para números inteiros sem sinal.
➢ %%: Representa o próprio caractere de porcentagem (%).
Exemplos de uso:
int idade;
float altura;
char nome[50];
scanf("%d", &idade);
scanf("%f", &altura);
scanf("%s", nome);
Lembre-se de que é importante usar os operadores de formatação corretamente
para corresponder ao tipo de dado que você está manipulando. O uso incorreto de
operadores de formatação pode levar a comportamentos imprevisíveis e erros na leitura
ou exibição dos dados.
#include <stdio.h>
int main() {
float numero1 = 3.14159;
double numero2 = 1234.56789;
Página 25 de 50
// Exemplo 1: Imprimir com precisão padrão
printf("Número 1: %f\n", numero1);
printf("Número 2: %f\n", numero2);
// Exemplo 2: Imprimir com precisão limitada
printf("Número 1 com 2 casas decimais: %.2f\n", numero1);
printf("Número 2 com 3 casas decimais: %.3f\n", numero2);
// Exemplo 3: Notação científica
printf("Número 1 em notação científica: %e\n", numero1);
printf("Número 2 em notação científica: %e\n", numero2);
// Exemplo 4: Largura mínima de campo
printf("Número 1 com largura mínima de campo 10: %10f\n",
numero1);
printf("Número 2 com largura mínima de campo 15: %15f\n",
numero2);
return 0;
}
Neste exemplo, o programa demonstra diferentes formas de formatar números em
ponto flutuante usando o operador %f juntamente com outras opções de formatação. Note
que:
Página 26 de 50
ESTRUTURAS DE CONTROLE
Em C, as estruturas de controle são usadas para controlar o fluxo de execução de
um programa. Elas permitem que você tome decisões, repita ações e realize diferentes
caminhos de acordo com condições específicas. As três principais estruturas de controle
em C são:
Essas estruturas de controle permitem que você escreva programas que se adaptem
a diferentes cenários, tornando seu código mais dinâmico e eficiente. Elas são
fundamentais para a lógica de programação em C.
Comando if e else
A estrutura if`, else if`, else em C é usada para tomar decisões em um programa
com base em diferentes condições. Ela permite que você execute diferentes blocos de
código, dependendo de qual condição é verdadeira. Aqui está como essa estrutura
funciona:
if (condicao1) {
// Código a ser executado se a condicao1 for verdadeira
} else if (condicao2) {
// Código a ser executado se a condicao1 for falsa e a
condicao2 for verdadeira
} else {
// Código a ser executado se nenhuma das condições
anteriores for verdadeira
}
Explicação passo a passo
1. O bloco começa com um if`, onde você fornece uma condição que será avaliada
como verdadeira ou falsa.
2. Se a condicao1 for verdadeira, o bloco de código dentro do primeiro if` será
executado. O restante das cláusulas (else if` e else) será ignorado.
Página 27 de 50
3. Se a condicao1 for falsa, o programa verificará a próxima condição na cláusula
else if`, ou seja, condicao2. Se essa condição for verdadeira, o bloco de código
dentro do else if` será executado.
4. Se ambas as condições condicao1 e condicao2 forem falsas, o bloco de código
dentro da cláusula else será executado.
A estrutura if`, else if`, else permite que você lide com diferentes cenários e
execute o código apropriado com base nas condições. Lembre-se de que apenas o bloco
de código correspondente à primeira condição verdadeira será executado. Se nenhuma
das condições for verdadeira e houver um bloco else, esse bloco será executado.
Exemplo:
Comando switch
A estrutura switch em C é utilizada para tomar decisões com base no valor de uma
expressão. Ela permite que você selecione um dos vários blocos de código para ser
executado, dependendo do valor da expressão. A estrutura switch é frequentemente usada
quando você tem múltiplas opções a serem escolhidas, como quando você quer realizar
ações diferentes para diferentes casos.
switch (expressao) {
case valor1:
// Código a ser executado se expressao for igual a
valor1
Página 28 de 50
break;
case valor2:
// Código a ser executado se expressao for igual a
valor2
break;
// ...
default:
// Código a ser executado se nenhum dos valores
anteriores for correspondido
}
Explicação passo a passo
1. A estrutura switch começa com a palavra-chave switch seguida pela expressão que
você deseja avaliar.
2. O programa avalia o valor da expressão e verifica se corresponde a um dos valores
especificados nos casos (case).
3. Se a expressão corresponder a um valor do case, o bloco de código dentro desse
case será executado.
4. O bloco de código dentro de um case deve ser finalizado com a palavra-chave
break. Isso evita que o programa execute os outros blocos de código abaixo dos
casos correspondentes.
5. Se nenhum dos valores nos case corresponder ao valor da expressão, o bloco de
código dentro do default será executado. O default é opcional e pode ser usado
para lidar com casos que não foram especificamente tratados nos case.
Exemplo:
int opcao = 2;
switch (opcao) {
case 1:
printf("Opção 1 selecionada.\n");
break;
case 2:
printf("Opção 2 selecionada.\n");
break;
Página 29 de 50
case 3:
printf("Opção 3 selecionada.\n");
break;
default:
printf("Opção inválida.\n");
}
Neste exemplo, o programa avalia o valor da variável opcao e executa o bloco de
código correspondente ao valor. Se opcao for 2, o programa imprimirá "Opção 2
selecionada." Se opcao não corresponder a nenhum dos valores nos case, ele imprimirá
"Opção inválida."
Laços de Repetição
Em C, os laços de repetição são utilizados para executar um bloco de código várias
vezes, permitindo que você automatize tarefas que precisam ser realizadas repetidamente.
Existem três tipos principais de laços de repetição: for, while e do while. Cada um deles
tem sua própria maneira de controlar a repetição com base em uma condição.
for
O laço de repetição for em C é utilizado quando você sabe exatamente quantas
vezes deseja repetir um bloco de código. Ele é especialmente útil quando você precisa
iterar por uma sequência específica de valores. A estrutura do laço for é a seguinte:
Página 30 de 50
for (inicializacao; condicao; atualizacao) {
// Código a ser repetido
}
Explicação dos componentes do laço `for`
➢ inicializacao: É a parte onde você inicializa uma variável de controle antes do
início do loop. Isso é executado apenas uma vez no início. Pode ser uma
declaração de variável ou uma atribuição.
➢ condicao: É a condição que deve ser verdadeira para continuar executando o
loop. A cada iteração, a condição é verificada.
➢ atualizacao: É a parte onde você atualiza a variável de controle após cada
iteração. Geralmente é uma operação de incremento ou decremento.
#include <stdio.h>
int main() {
// Exemplo de uso do laço for
for (int i = 0; i < 5; i++) {
printf("Iteração %d\n", i);
}
return 0;
}
Explicação passo a passo
1. A declaração int i = ` é executada apenas uma vez no início, inicializando a
variável i com o valor 0.
2. A condição i < 5 é verificada antes de cada iteração. Se for verdadeira, o bloco de
código dentro do for é executado; caso contrário, o loop é encerrado.
3. O bloco de código dentro do for (entre as chaves) é executado.
4. A atualização i++ incrementa o valor de i após cada iteração.
5. O processo se repete até que a condição i < 5 se torne falsa.
Página 31 de 50
O laço for é eficaz quando você sabe quantas iterações são necessárias, tornando-
o uma escolha comum para iterar por matrizes, sequências e outras estruturas de dados
definidas.
while
O laço de repetição while em C é usado para executar um bloco de código
repetidamente enquanto uma determinada condição for verdadeira. Ele permite que você
crie iterações baseadas em uma condição específica, garantindo que o bloco de código
seja executado apenas enquanto essa condição for atendida.
while (condicao) {
// Código a ser repetido
}
Explicação passo a passo
1. O laço while começa com a palavra-chave while seguida de uma condição entre
parênteses. Essa condição é uma expressão lógica que é avaliada como verdadeira
(1) ou falsa (0).
2. Antes de cada iteração (execução do bloco de código), a condição é avaliada. Se
a condição for verdadeira, o bloco de código dentro do while é executado. Se for
falsa, o loop é interrompido e a execução continua após o bloco while.
int contador = 0;
while (contador < 5) {
printf("Contagem: %d\n", contador);
contador++; // Incrementa o contador para controlar o
número de iterações
}
Neste exemplo, o bloco de código dentro do while será executado enquanto a
condição contador < 5 for verdadeira. A cada iteração, o contador é incrementado. O
resultado será a impressão da contagem de 0 a 4.
Observações:
Página 32 de 50
➢ Se a condição for falsa desde o início, o bloco de código dentro do while nunca
será executado.
➢ Certifique-se de atualizar a variável que controla a condição dentro do loop, caso
contrário, o loop pode não terminar.
O laço de repetição while é útil quando você não sabe antecipadamente quantas
iterações serão necessárias, mas quer repetir um bloco de código enquanto uma
determinada condição for verdadeira.
do-while
O laço de repetição do-while em C é uma estrutura que permite executar um bloco
de código pelo menos uma vez, e então repetir esse bloco enquanto uma condição
específica for verdadeira. Ao contrário do laço while, onde a condição é verificada antes
da primeira execução do bloco de código, no laço do-while, o bloco de código é executado
primeiro e a condição é verificada depois.
do {
// Código a ser repetido
} while (condicao);
Passo a passo de como o laço do-while funciona
1. O bloco de código dentro do do é executado.
2. Após a execução do bloco de código, a condição especificada após o while é
verificada.
3. Se a condição for verdadeira, o bloco de código é executado novamente, repetindo
o processo a partir do passo 1.
4. Se a condição for falsa, o loop do-while é interrompido e a execução continua
após o bloco while.
Exemplo:
#include <stdio.h>
int main() {
int contador = 1;
do {
Página 33 de 50
printf("Contador: %d\n", contador);
contador++;
} while (contador <= 5);
return 0;
}
Neste exemplo, o bloco de código dentro do do imprime o valor do contador e o
incrementa. O loop continuará a ser executado enquanto o contador for menor ou igual a
5. Mesmo que o contador seja 1, o bloco de código será executado pelo menos uma vez
antes que a condição seja verificada.
O laço do-while é especialmente útil quando você precisa garantir que um bloco
de código seja executado pelo menos uma vez, independentemente da condição.
Certifique-se de que a condição do while seja verificada somente após a primeira
execução do bloco de código.
Página 34 de 50
FUNÇÕES
O que são Funções?
Em C, as funções são blocos de código independentes que podem ser chamados e
executados em qualquer parte do programa. Elas são utilizadas para modularizar o código,
permitindo que você divida tarefas complexas em partes menores e mais gerenciáveis. As
funções também ajudam a reutilizar o código, tornando-o mais organizado e legível.
Declaração de Função
A declaração informa ao compilador a assinatura da função, permitindo que o
código que a chama seja verificado quanto à corretude dos tipos e quantidade de
parâmetros.
Página 35 de 50
Exemplo de definição:
Tipos de Retorno
Em C, as funções podem ter diferentes tipos de retorno, indicando qual tipo de
valor a função irá retornar após sua execução. Aqui estão alguns dos tipos de retorno de
função mais comuns:
Exemplo:
Exemplo:
Exemplo:
Página 36 de 50
Exemplo:
Exemplo:
void imprimirMensagem() {
printf("Olá, mundo!\n");
}
Lembre-se de que o tipo de retorno especificado na declaração da função deve
corresponder ao tipo de valor que a função realmente retorna. O uso correto de tipos de
retorno é fundamental para garantir que seu código seja compreensível e que funcione
conforme o esperado.
Passagem de Parâmetros
Em C, a passagem de parâmetros para funções permite que você envie valores ou
referências de variáveis para serem usados dentro do corpo da função. Existem dois tipos
de passagem de parâmetros: por valor (passagem por valor) e por referência (passagem
por referência).
Página 37 de 50
return 0;
}
Passagem por Referência
A passagem por referência envolve passar um ponteiro que aponta para a
localização da variável. Isso permite que a função modifique diretamente o valor da
variável original.
Dicas Importantes
➢ A passagem por valor é usada quando você não quer que a função modifique o
valor original da variável.
➢ A passagem por referência é usada quando você deseja que a função modifique o
valor original da variável.
➢ Lembre-se de usar ponteiros na passagem por referência para garantir que a
função possa acessar e modificar a variável original.
Ao decidir como passar parâmetros para uma função, considere se você deseja que as
alterações na variável dentro da função afetem a variável original.
Funções Recursivas
Imagine que você está resolvendo um quebra-cabeça complexo, onde você precisa
resolver várias partes menores do mesmo quebra-cabeça. Em uma função recursiva, você
Página 38 de 50
divide um grande problema em partes menores e resolve cada parte da mesma maneira
que você resolveria o problema geral.
Em termos mais técnicos, uma função recursiva é uma função que se chama a si
mesma para resolver um problema. É como se você estivesse dando um passo de cada
vez para resolver uma tarefa maior.
Aqui está um exemplo prático: imagine que você quer calcular o fatorial de um
número. O fatorial de um número é o resultado da multiplicação de todos os números
inteiros positivos até aquele número. Por exemplo, o fatorial de 5 é 5 * 4 * 3 * 2 * 1 =
120.
Agora, em vez de tentar calcular o fatorial de 5 diretamente, você pode usar uma
função recursiva para dividir o problema em partes menores. Veja como:
#include <stdio.h>
int fatorial(int num) {
if (num == 1) {
return 1;
} else {
return num * fatorial(num - 1);
}
}
int main() {
int numero = 5;
int resultado = fatorial(numero);
printf("O fatorial de %d é %d\n", numero, resultado);
return 0;
}
Página 39 de 50
O que acontece aqui é que a função fatorial chama a si mesma com um valor
menor a cada vez, até que atinja o caso base (quando num é 1). Isso permite que ela
resolva a multiplicação de todos os números inteiros de forma recursiva.
Embora seja poderoso, o uso de funções recursivas deve ser cuidadoso para evitar
loops infinitos. Mas, no geral, essa técnica é uma maneira elegante de resolver problemas
complexos, dividindo-os em partes menores e mais gerenciáveis.
Página 40 de 50
ARRAYS E MATRIZES
O que é um Array em C?
Um array em C é uma estrutura de dados que armazena um conjunto de elementos
do mesmo tipo. Cada elemento do array é identificado por um índice, que começa em 0
para o primeiro elemento, 1 para o segundo, e assim por diante. Os arrays são usados
para armazenar coleções de dados de maneira organizada e acessível.
Declaração de Arrays
Você declara um array especificando seu tipo de dado, nome e tamanho entre
colchetes [ ]. Aqui está um exemplo de declaração de um array de inteiros com 5
elementos:
int numeros[5];
Você também pode inicializar o array durante a declaração:
Acesso a Elementos
Você pode acessar elementos de um array usando seus índices. Lembre-se de que
os índices começam em 0. Por exemplo, para acessar o primeiro elemento de `numeros`,
você usaria `numeros[0]`.
Página 41 de 50
Limitações dos Arrays
➢ O tamanho do array precisa ser definido no momento da declaração e não pode
ser alterado.
➢ Arrays não podem armazenar tipos de dados diferentes. Todos os elementos do
array devem ser do mesmo tipo.
Nota:
tipo_dados nome_matriz[linhas][colunas];
Exemplo de declaração de uma matriz 3x3 de inteiros:
int matriz[3][3];
Inicializando uma Matriz
Você pode inicializar uma matriz da mesma maneira que
inicializa um array.
int matriz[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Acessando Elementos de uma Matriz
Os elementos de uma matriz são acessados usando dois índices: um para a linha e
outro para a coluna. Lembre-se de que os índices começam em 0.
Página 42 de 50
int elemento = matriz[1][2]; // Acessando o elemento na
segunda linha e terceira coluna
Iterando sobre uma Matriz
Você pode usar loops aninhados para percorrer todos os elementos de uma matriz.
As matrizes são úteis para representar dados em formato de tabela ou grade, como
planilhas, imagens e mapas. Elas são uma ferramenta poderosa para lidar com
problemas que envolvem duas dimensões de informações.
Página 43 de 50
EXEMPLOS PRÁTICOS
Calculadora Simples
Aqui está um exemplo simples de código em C para uma calculadora que realiza
operações básicas de adição, subtração, multiplicação e divisão:
#include <stdio.h>
int main() {
char operador;
double numero1, numero2, resultado;
printf("Digite um operador (+, -, *, /): ");
scanf("%c", &operador);
printf("Digite dois números: ");
scanf("%lf %lf", &numero1, &numero2);
switch (operador) {
case '+':
resultado = numero1 + numero2;
break;
case '-':
resultado = numero1 - numero2;
break;
case '*':
resultado = numero1 * numero2;
break;
case '/':
if (numero2 != 0) {
resultado = numero1 / numero2;
} else {
printf("Não é possível dividir por zero.\n");
return 1;
}
break;
default:
Página 44 de 50
printf("Operador inválido.\n");
return 1;
}
printf("Resultado: %.2lf\n", resultado);
return 0;
}
Este código solicita ao usuário um operador (+, -, *, /) e dois números. Com base
no operador escolhido, a calculadora realiza a operação correspondente e exibe o
resultado. Certifique-se de que os números sejam inseridos corretamente para evitar erros
de cálculo. Note também que estamos verificando se o segundo número é zero antes de
realizar a divisão.
Lembre-se de que este é um exemplo simples e que uma calculadora real poderia
ser mais complexa e incluir mais funcionalidades e validações.
#include <stdio.h>
int main() {
int numero1, numero2;
printf("Digite dois números: ");
scanf("%d %d", &numero1, &numero2);
// Verificando se um número é múltiplo do outro
if (numero1 % numero2 == 0) {
printf("%d é múltiplo de %d.\n", numero1, numero2);
} else if (numero2 % numero1 == 0) {
printf("%d é múltiplo de %d.\n", numero2, numero1);
} else {
printf("Os números não são múltiplos um do outro.\n");
}
return 0;
}
Página 45 de 50
Neste código, o programa lê dois números da entrada e verifica se um número é
múltiplo do outro. Ele utiliza o operador de módulo `%` para determinar se o resto da
divisão entre os números é igual a zero, o que indica que eles são múltiplos.
Lembre-se de que a ordem dos números é importante para determinar qual número
é múltiplo do outro. Este código verifica ambas as direções para garantir que a verificação
seja correta.
Manipulação de Matrizes
Aqui estão alguns exemplos de códigos em C que mostram como manipular
matrizes, realizando operações como preenchimento, impressão, soma de matrizes e
transposição. Esses exemplos demonstram algumas operações básicas, mas você pode
expandir essas ideias para realizar outras manipulações mais complexas.
Página 46 de 50
Exemplo 2: Soma de Duas Matrizes
#include <stdio.h>
int main() {
int matriz1[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int matriz2[3][3] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
int soma[3][3];
// Somando as matrizes
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
soma[i][j] = matriz1[i][j] + matriz2[i][j];
}
}
// Imprimindo a matriz resultante da soma
printf("Matriz Soma:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", soma[i][j]);
}
printf("\n");
}
return 0;
}
Exemplo 3: Transposição de Matriz
#include <stdio.h>
int main() {
int matriz[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10,
11, 12}};
int transposta[4][3];
// Transpondo a matriz
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
transposta[j][i] = matriz[i][j];
Página 47 de 50
}
}
// Imprimindo a matriz transposta
printf("Matriz Transposta:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", transposta[i][j]);
}
printf("\n");
}
return 0;
}
Esses exemplos ilustram algumas das operações básicas que você pode realizar
com matrizes em C. A manipulação de matrizes é fundamental para muitos problemas em
ciência da computação e engenharia.
Página 48 de 50
EXERCÍCIOS
Conjunto de exercícios para praticar os conceitos aprendidos em cada capítulo.
5. Exercício: Fatorial
Peça ao usuário para inserir um número inteiro e, em seguida, calcule e imprima
o fatorial desse número.
6. Exercício: Tabuada
Peça ao usuário para inserir um número inteiro e imprima a tabuada desse número.
Página 49 de 50
9. Exercício: Sequência Fibonacci
Crie um programa que gera e imprime os primeiros n números da sequência de
Fibonacci, onde n é inserido pelo usuário.
BIBLIOGRAFIA
BACKES, A. Linguagem C - Completa e Descomplicada. 1ª. ed. [S.l.]: GEN
LTC, 2022.
Página 50 de 50