Você está na página 1de 55

Lógica de Programação I

Linguagem C (2)

Sávio Braga

1
Programa

1. Variável e Comandos de E/S


2. Funções
3. Estruturas de Seleção
4. Estruturas de Repetição
5. Vetores

2
Conceito e Utilização

PARTE I

3
Conceito
⚫ Blocos: unidades de programa
– em sequência a partir da primeira instrução.
⚫ Subprogramas
– dão nome a uma unidade de programa
⚫ sua chamada faz com que o controle seja transferido
para a unidade chamada e executa até encontrar o fim
da unidade

4
Conceito

⚫ Função:
– Rotina a ser executada dentro do algoritmo para
realizar alguma tarefa específica e normalmente retorna
um valor

5
Conceito
⚫ As funções são um tipo de subprograma. Elas são blocos de
código que podem ser chamados de outro lugar no programa.
⚫ A principal diferença entre funções e blocos é que as funções
retornam um valor, enquanto os blocos não.
⚫ Outra diferença é que as funções podem ter parâmetros,
enquanto os blocos não.
⚫ Os subprogramas, por outro lado, são blocos de código que
podem ser chamados de outro lugar no programa. Eles podem
ser funções ou procedimentos.
⚫ Os procedimentos são similares às funções, mas eles não
6 retornam um valor.
Conceito

Funcao1()
Programa Inicio
Inicio 1a. instrução
....... 2a. instrução 1
.......
A = Funcao1() última instrução
A= A+1; Fim
última
.......

Fim
7
Conceito

⚫ Ao terminar, o controle volta para instrução seguinte a


chamada
⚫ Parâmetros Formais: convenções para passagem de
parâmetros. Permitem troca de informação entre
unidades
⚫ Forma Geral de uma Função
– Tipo nome_da_funcao(parametros)

8
Conceito
Exemplos de como funções, blocos e subprogramas podem ser
usados:

⚫ Função: Uma função pode ser usada para calcular o quadrado


de um número.

⚫ Bloco: Um bloco pode ser usado para definir uma variável e


atribuir um valor a ela.

⚫ Subprograma: Um subprograma pode ser usado para


implementar uma funcionalidade complexa, como a leitura de
um arquivo ou a conexão a um banco de dados.
9
Conceito

⚫ Porque usar funções:


– Dividir
um programa em blocos menores e
mais gerenciáveis
– Facilitar a reutilização de código
– Melhorar a legibilidade
– Facilitar a Manutenção
10
Chamada de Funções

⚫ Na unidade anterior, fizemos uso das funções:


– printf() // Exemplo de uso de funções:
– scanf() #include <stdio.h>

– fgets() int main() {


char texto[30];
printf("Informe um nome: \n");

São da biblioteca stdio.h fgets(nome, 20, stdin);

printf("Texto: %s \n", texto);


}

11
Bibliotecas e Funções

⚫ Biblioteca stdio.h
⚫ Biblioteca stdlib.h
⚫ Biblioteca math.h
⚫ Biblioteca string.h

12
Bibliotecas e Funções

⚫ Biblioteca stdio.h (em C++ tem a iostream)


• printf() - exibe dados formatados na saída padrão.
• scanf() - lê dados da entrada padrão.
• fopen() - abre um arquivo para leitura ou escrita.
• fclose() - fecha um arquivo aberto.
• fgets() - lê uma linha de texto de um arquivo ou da entrada padrão.
• fputs() - escreve uma string em um arquivo ou na saída padrão.
• fprintf() - escreve dados formatados em um arquivo.
• fscanf() - lê dados formatados de um arquivo.
• feof() - testa se o fim do arquivo foi alcançado.

13
Bibliotecas e Funções

⚫ Biblioteca stdlib.h
• malloc() - aloca uma quantidade específica de memória.
• free() - libera a memória alocada previamente.
• exit() - termina o programa.
• system() - executa um comando no sistema operacional.
• rand() - gera um número aleatório.
• srand() - define a semente de rand() (iniciaiza rand().
• atof() - converte uma string em um número float.
• atoi() - converte uma string em um número inteiro.
• itoa() - converte um número inteiro em uma string.

14
Exemplo

⚫ Exemplo de uso das funções abs(), rand() e


srand() #include <stdio.h>
#include <stdlib.h>
#include <time.h>

main() {
int num1 = -10;
int aleatorio;
srand(time(NULL));
aleatorio = rand() % 100;

printf("Valor absoluto de %d = %d\n", num1, abs(num1));


printf("Valor aleatorio eh %d\n", aleatorio);
}
15
Exemplo

⚫ Exemplo de uso da função system():


#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
main() {
setlocale(LC_ALL,"Portuguese");
printf("Vamos ver o conteúdo da pasta\n\n");
system("pause");
system("dir");
printf("\n\tVamos limpar a tela\n\n");
system("pause");
system("cls");
16 }
Bibliotecas e Funções

⚫ Biblioteca math.h
• abs(): retorna o valor absoluto de um número.
• ceil(): retorna o menor inteiro que é maior ou igual a um número decimal.
• floor(): retorna o maior inteiro que é menor ou igual a um número decimal.
• round(): arredonda um número para o inteiro mais próximo.
• trunc(): retorna somente a parte inteira de um número real.
• pow(): retorna a base elevada a um expoente.
• sqrt(): retorna a raiz quadrada de um número.
• cos(): retorna o cosseno de um ângulo em radianos.
• exp(): retorna o valor de e elevado a um determinado expoente.
• log(): retorna o logaritmo natural (base e) de um número.
• sin(): retorna o seno de um ângulo em radianos.
• tan(): retorna a tangente de um ângulo em radianos
17
Exemplo

⚫ Exemplo de uso das funções round(), ceil() e


floor(): #include <stdio.h>
#include <math.h>

main() {
float num = 2.5;
float ceilResult = ceil(num);
float floorResult = floor(num);
float roundResult = round(num);

printf("O numero %.1f arredondado para cima eh %.1f\n", num, ceilResult);


printf("O numero %.1f arredondado para baixo eh %.1f\n", num, floorResult);
printf("O numero %.1f arredondado eh %.1f\n", num, roundResult);
18 }
Exemplo

⚫ Exemplo de uso da função pow():


#include <stdio.h>
#include <math.h>

main() {
double base, expoente, resultado;

printf("Digite a base: ");


scanf("%lf", &base);
printf("Digite o expoente: ");
scanf("%lf", &expoente);

resultado = pow(base, expoente);

printf("%.2f elevado a %.2f eh igual a %.2f\n", base, expoente, resultado);


19 }
Desafio

⚫ Como fazer para arredondar um número real


para duas casas decimais?

20
Desafio
main() {
float num = 3.14159;
float parte1, parte2, round_2;
parte1 = round(num * pow(10, 2));
parte2 = pow(10, 2);
round_2 = parte1/parte2;

printf("Parte 1 eh %.5f\n", parte1);


printf("Parte 2 eh %.5f\n", parte2);

printf("O número %.5f arredondado para 2 casas decimais eh %.5f\n", num, round_2);
}

21
Bibliotecas e Funções

⚫ Biblioteca string.h
• strcpy() - Copia uma string de origem para uma string de destino.
• strncpy() - Copia uma parte da string de origem para uma string de destino.
• strcat() - Concatena (junção) duas strings em uma única string.
• strlen() - Retorna o comprimento de uma string.
• strcmp() - Compara duas strings e retorna um valor inteiro indicando se as strings são
iguais ou diferentes.
• strchr() - Retorna um ponteiro para a primeira ocorrência de um caractere em uma
string.
• strtok() - Divide uma string em substrings com base em um caractere delimitador.

22
Exemplo

⚫ Exemplo de uso das funções strcpy(), strcat e


strlen(): #include <stdio.h>
#include <string.h>

main() {
char origem1[20] = "Ola,";
char origem2[10] = " mundo!";
char destino[20];

printf("Tamanho antes de concatenar: %d\n", strlen(origem1));


strcat(origem1, origem2);
printf("Tamanho depois de concatenar: %d\n", strlen(origem1));
printf("Origem: %s\n", origem1);
strcpy(destino, origem1);
printf("Destino: %s\n", destino);
23 }
Exercícios
1. Escreva um programa em C para calcular a raiz enésima de um
número informado pelo usuário. Além do número, o usuário também
informará o índice n do radical. Ao final, imprima o resultado da raiz;
2. Altere o programa acima para que o índice seja gerado
aleatoriamente entre 2 e 10, Ao final, imprima o índice gerado e o
resultado da raiz;
3. Faça um programa em C que arredonde um número real da divisão
de dois números informados pelo usuário para a quantidade de
casas decimais também informada pelo usuário. Ao final, mostre o
resultado sem e com arredondamento;
4. Escreva um programa em C que o usuário informe uma data no
formato DD/MM/AAAA e o programa imprima o dia DD, o mês MM e
24 o ano AAAA.
Escrevendo Funções

PARTE II

25
Escrevendo Funções

⚫ Quando criamos uma função (ou


procedimento), estamos modularizando
esse trecho de código para que
possamos utilizá-lo de forma mais
rápida quantas vezes precisarmos.

26
Escrevendo Funções

⚫ Exemplo de funcao quadrado(int x):int

uma Função inicio


soma: quadrado = x * x;
fim

⚫ Essa função poderia ser utilizada repetidas vezes no programa


int x = 5;
int y = 6;
int z = 4;
int result1 = quadrado(x);
int result2 = quadrado(y);
27 int result3 = quadrado(z);
Escrevendo Funções

⚫ Exemplo da #include <stdio.h>


Função soma
int quadrado(int x) {
em C: int valor = x * x;
return valor;
}

int main() {
int x = 5;
int result = quadrado(x);
printf(“O resultado é: %d”, result);
}
28
Escrevendo Funções

⚫ Para criar funções, é necessário definir:


– O tipo da função ou o tipo que a função irá
retornar (tipo de retorno)
– Os argumentos que a função deve receber

29
Escrevendo Funções
Nome Argumentos

int soma(int x, int y) {


Tipo/
Retorno
int valor = x + y; Corpo

return valor;
Retorno
}

30
Tipos de Retorno

⚫ As funções podem retornar ou não valores


para quem as chamou.
⚫ Funções que não possuem valores de retorno,
ou seja, que nada retornam são também
chamadas de procedimentos

31
Tipos de Retorno

⚫ Exemplos:
– Sem retorno
⚫ escrever(‘mensagem’);
– Com retorno
⚫ valor = soma(10, 20);

32
Tipos de Retorno

⚫ void: quando uma função não retorna um valor


específico.
– Exemplos: printf(), sleep()
⚫ Tipos de dados básicos: as funções podem
retornar valores dos tipos que já conhecemos,
ou seja, int, char, float, ...
– Exemplos:
⚫ strcat() retorna uma string
⚫ sqrt() retorna um float
33
Argumentos

⚫ As funções também podem ou não receber


valores como argumentos, ou seja, receber
dados externos do programa para que possam
executar sua tarefa.

34
Argumentos

⚫ Exemplo:

– Sem argumentos
⚫ data_atual()
– Com argumentos
⚫ escrever(‘mensagem’)

35
Argumentos

Quando a função possui


argumentos, dizemos que ocorre
uma passagem de parâmetros
para essa função.

36
Argumentos

No exemplo da função soma(x, y),


a passagem de parâmetros ocorre
quando passamos os valores das
variáveis x e y para dentro da
função soma.

37
Argumentos

No caso, como estamos passando


os valores das variáveis x e y,
dizemos que a passagem de
parâmetros é por valor.

38
Argumentos

⚫ Os argumentos também são chamados de


parâmetros.
⚫ Passagem por valor:
– Isso significa que a função recebe uma cópia do
valor da variável e pode modificá-la sem afetar o
valor original da variável.
⚫ Passagem por referência:
– É passado o endereço de memória da variável e a
função pode alterar o valor da variável.
39
Escrevendo Funções

40
Tipo de Retorno e Argumentos

⚫ Exemplo: #include <stdio.h>

void dobrar_valor(int x) {
x = x * 2;
printf("O valor dobrado eh %d\n", x);
}

int main() {
int valor = 5;
dobrar_valor(valor);
printf("O valor original eh %d\n", valor);
return 0;
41 }
Escrevendo Funções
⚫ Exemplo:
– Vamos escrever uma função para calcular a área de retângulo, uma
vez que conhecemos o comprimento da sua base e o comprimento
da sua altura.
– Em seguida, vamos escrever o programa que faz uso dessa função.

42
Exemplo

43
Exercício

1. Escreva uma função em C que retorne o


quadrado de um inteiro e o programa que
utiliza a função.
2. Escreva uma função em C que receba uma
quantidade de horas, faça a conversão de
horas para minutos e retorne a quantidade de
minutos. Escreva o programa que utiliza a
função.
3. Escreva uma função em C que calcule e
retorne o IMC e o programa que a utiliza.
44
Função com Passagem de Referência

⚫ Permite a alteração do valor de uma variável.


– Exemplo: #include <stdio.h>

void troca(int *a,int *b){


int temp;
temp=*a;
*a=*b;
*b=temp;
}

main(){
int x=10,y=20;
troca(&x,&y);
printf("x=%d y=%d\n",x,y);
45 }
Passagem por Valor x Passagem de Referência

46
Passagem por Valor x Passagem de Referência

47
Protótipo de Função

⚫ Uma forma de organizar o código é utilizar


protótipos de função
⚫ As funções são somente “iniciadas” no
começo do código e depois são efetivamente
implementadas

48
Protótipo de Função

49
Exercício

⚫ Escreva um programa que utilize as funções


escritas no exercício anterior, utilizando
protótipos de função

50
Escopo das Variáveis

PARTE III

51
Escopo de Variáveis
⚫ Variáveis Locais x Variáveis Globais
– Variáveis locais são definidas dentro de uma função ou bloco de
código específico e só podem ser acessadas dentro desse contexto.
Elas são criadas quando a função é chamada e destruídas quando a
função retorna. Variáveis locais são úteis quando se deseja manter
um valor temporário ou intermediário durante a execução de uma
função.
– Já as variáveis globais são definidas fora de qualquer função ou
bloco de código e podem ser acessadas de qualquer lugar do
programa. Elas são criadas quando o programa é iniciado e
destruídas quando o programa termina. Variáveis globais são úteis
quando se deseja compartilhar um valor entre várias funções ou
52 blocos de código.
Escopo de Variáveis
⚫ A variável valor é #include <stdio.h>
local e não pode
ser acessada por int soma(int x, int y) {
nenhuma outra int valor = x + y;
return valor;
parte do programa
}
fora da função
soma(). int main() {
int x = 5;
int y = 6;
int result = soma(x,y);
printf(“O resultado é: %d”, result);
53 }
Escopo de Variáveis
⚫ No código ao lado, #include <stdio.h>

a variável contador int contador = 0;


é global e foi void incrementa() {
acessada em }
contador++;

outras funções.
void imprime_contador() {
printf("O contador é %d\n", contador);
}

int main() {
incrementa();
imprime_contador();
incrementa();
incrementa();
imprime_contador();
}
54
Exercícios

Vamos praticar!

55

Você também pode gostar