aulas de linguagem c
TRANSCRIPT
![Page 1: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/1.jpg)
Introdução a Computação
• O que é um computador?
“Um computador é uma coleção de componentesque realizam operações lógicas e aritméticas
sobre um grande volume de dados.” (F. K. Miyazawa)
![Page 2: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/2.jpg)
Introdução a ComputaçãoUm computador é composto por:
• Unidades de entrada de dados: Ex.: teclado, mouse, câmera de vídeo, etc…
• Unidades de saída de dados Ex.: monitor, impressora, etc…
• Unidades de armazenamento Ex.: memória RAM, memória ROM, discos rígidos, cache. etc...
• Unidade Central de Processamento – CPU
• Unidade Lógica Aritmética – ULA
![Page 3: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/3.jpg)
Introdução a Computação
![Page 4: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/4.jpg)
Introdução a Computação
Termos técnicos:
• Hardware: Componentes mecânicos e eletro-eletrônicos (Parte dura do computador).
• Software: Seqüência de instrucões e comandos quefazem o computador realizar determinada tarefa(Programas de computador).
• Sistema Operacional: Coleção de programas quegerencia e aloca recursos de hardware e software (Linux, Unix, Windows).
![Page 5: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/5.jpg)
Introdução a Computação
• Linguagem de Máquina: Conjunto de instruçõesque podem ser interpretados e executadosdiretamente pela CPU.
• Linguagem de alto nível: Linguagem queindepende do conjunto de instrucões da linguagem de máquina (Pascal, C, Algol, BASIC).
• Compilador: Tradutor de programas escritos emuma linguagem de programação para programas emlinguagem de máquina (GCC).
![Page 6: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/6.jpg)
Introdução a Computação
![Page 7: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/7.jpg)
Introdução a Computação
Bits e Bytes:
• A menor unidade de informação de um computadoré o Bit, um Bit pode assumir os valores 0 ou 1.
• Um Byte é um conjunto de oito Bits.
• Dados são armazenados na base binária não nadecimal.
0 = 000000001 = 0000000110 = 00001010255 = 11111111
![Page 8: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/8.jpg)
Introdução a Computação
Desafio:
Você possui dez caixas vazias e deve distribuirnessas caixas 1000 moedas de tal forma que, quandosolicitado, você possa retornar um número qualquerde moedas sem retirá-las das caixas. Cada caixa comporta pelo menos 1000 moedas e osvalores solicitados serão todos maiores que zero.
![Page 9: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/9.jpg)
Introdução a Computação
Solução:
Usando a base binária…
Caixas com:1 moeda 256 moedas2 moedas 488 moedas4 moedas8 moedas16 moedas32 moedas64 moedas128 moedas
![Page 10: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/10.jpg)
Introdução a Computação
Existem 10 tipos de pessoas…aquelas que entendem binário…
e as que não entendem.
![Page 11: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/11.jpg)
Introdução a Computação
Desafio:
Em um lado de um rio se encontram, você, um lobo um coelho e um repolho. Você possui uma canoa que te permite levar apenasum deles de cada vez, sabendo que caso o lobo fiquesozinho com o coelho o lobo o come e o mesmoacontece quando o coelho fica sozinho com o repolho. Como fazer para atravessar todos eles em segurançapara a outra margem do rio?
![Page 12: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/12.jpg)
Introdução a Computação
Desafio:
Suponha que você possui 3 pinos, A, B e C e que nopino A estão dispostos 3 discos de tamanhosdiferentes em ordem crescente de cima para baixo(menor em cima). O objetivo é levar os 3 discos do pino A para o pino C, usando o pino B como auxiliare obedecendo as seguintes restrições:
•Pode-se mover apenas 1 pino de cada vez
•Não se pode colocar um pino maior sobre um menor.
![Page 13: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/13.jpg)
Introdução a Computação
http://freeweb.supereva.com/nessunoforever/flash/hanoi/index.htm?p
![Page 14: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/14.jpg)
Introdução a Computação
Algoritmos:
• Um algoritmo é uma seqüência de passos com o objetivo de executar uma tarefa.
• São muito comuns, receitas, manuais
• As soluções para os problemas anteriores sãoalgoritmos.
• Computacionalmente:
“Um procedimento computacional que recebevalores de entrada e produz valores de saída.”
![Page 15: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/15.jpg)
Introdução a Computação
Exemplo:
• Entrada: Uma seqüência aleatória de números.
• Saída: A mesma seqüência de números ordenada.
Se a entrada é :(8, 49, 12, 23)
o seu algoritmo deve produzir como saída:(8, 12, 23, 49)
• Algoritmo Correto: Sempre termina e paraqualquer instância de entrada produz uma saídacorreta
![Page 16: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/16.jpg)
Introdução a Computação
Algoritmo de Euclides (Cálculo do MDC):
• Entrada: 2 valores inteiros positivos m e n (m > n).• Saída: O Máximo Divisor Comum de m e n.
• Passo 1: Faça x = m e y = n• Passo 2: Calcule o resto de x por y, isto ér = x mod y• Passo 3: Faça x = y e y = r• Passo 4: Se r != 0 (r diferente de zero) volte para o passo 2, senão retorne x como resposta.
mdc(x, y) = mdc(y, x mod y)mdc(x, 0) = x
![Page 17: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/17.jpg)
Introdução a Computação
Computacionalmente:
x recebe my recebe nRepita
r recebe x mod yx recebe yy recebe r
Até que r == 0Imprime x
![Page 18: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/18.jpg)
Introdução a Computação
Na linguagem C:
x = m;y = n;do {
r = x % y;x = y;y = r;
}while( r != 0 );printf(“%d”, x);
![Page 19: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/19.jpg)
Introdução a Computação
Para ver depois:
• JL Hennessy e DA Patterson, “Arquitetura de Computadores – Uma Abordagem Quantitativa” Ed Campus.
• Mais desafios: http://www2.fundao.pro.br/pages/desafios.asp
• Torre de Hanoi:http://freeweb.supereva.com/nessunoforever/flash/hanoi/index.htm?p
• Página da disciplina:http://www.las.ic.unicamp.br/~chenca/mc102/mc102.html
![Page 20: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/20.jpg)
Linguagem C
Características da Linguagem C:
• linguagem estruturada em bloco simples, ou seja, é composta basicamente por funções e variáveis.
• C é sensível ao caso, letras maiúsculas e minúsculas são tratadas como caracteres separados.
MDC != Mdc != mdcmain != Main != maiN
![Page 21: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/21.jpg)
Primeiro Programa em C/*MC102 - Primeiro Programa em C - Cálculo do MDC */#include<stdio.h>int main(){
int m = 76;int n = 42;int x, y, r;x = m;y = n;do{
r = x % y;x = y;y = r;
}while( r != 0 );printf("O MDC entre %d e %d eh: %d\n", m, n, x);return 0;
}
![Page 22: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/22.jpg)
Estruturas de um ProgramaComentários:
/*MC102 - Primeiro Programa em C - Cálculo do MDC */
• São ignorados pelo compilador.• Ajudam no entendimento do código.• Funcionam como lembretes.• Em C comentários começam com /* .• Terminam com */ .• Podem ter mais de uma linha.• Não se pode criar um comentário dentro de outro.• Deverão ser usados nos laboratórios.
/*MC102 – Lab 0x Nome: Ra: */
![Page 23: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/23.jpg)
Estruturas de um ProgramaInclusão de Arquivos:
#include<stdio.h>
• Avisam ao compilador que neste programa serão usados os procedimentos, funções e variáveis declarados no arquivo especificado (no caso stdio.h).
• Permite o reutilização de código• Não é necessário saber como funciona• Basta saber o nome e onde está implementado.• Outras inclusões muito comuns em C:
#include<math.h> /*Funções Matemáticas */#include<stdlib.h> /*Funções de Gerência de Memória*/#include<string.h> /*Funções de Manipulação de Strings */
![Page 24: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/24.jpg)
Estruturas de um ProgramaFunção main:
int main(){ … }
• Função principal do programa.• Todo programa em C deve ter uma.• O programa começa a ser executado na primeira
linha da main.• O programa termina quando a última linha da
função main é executada.
![Page 25: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/25.jpg)
Estruturas de um ProgramaDeclarações:
int m = 76;int x, y;
• Informam ao compilador o nome e o tipo da variável.
• Desse modo é possível saber quanto de memória será utilizada.
• Deve ser feita sempre no início de cada bloco ({).• Terminam sempre com ‘;’
int x, y; É a mesma coisa que
int x;int y;
![Page 26: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/26.jpg)
Estruturas de um ProgramaComandos:
y = n; r = x % y;
• São as ações do programa.• Sempre terminam com ‘;’• Podemos ter mais de um comando por linha.• Sempre terminam com ‘;’• Como cada comando termina com ‘;’ não é preciso
colocar ‘;’ depois de }
![Page 27: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/27.jpg)
Entrada e Saídaprintf:
printf("O MDC entre %d e %d eh: %d\n", m, n, x);
• Utilizado para imprimir na tela.• Comando da biblioteca stdio.h• Composto por
– String de Formato– Lista de Argumentos
• Imprime a partir do último caracter impresso.• Não muda de linha até que a linha acabe ou que
encontre um \n.
![Page 28: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/28.jpg)
Entrada e SaídaString de Formato (printf):
• Como imprimir o produto de 3 por 4 ?
printf(“12");
• Como imprimir o produto de 65487 por 236597 ?
printf(“??????????????");
![Page 29: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/29.jpg)
Entrada e SaídaString de Formato (printf):
• Cadeia de caracteres que informam como será a saída.
• Pode conter variáveis.• Variáveis são indicadas pelo caracter ‘%’• Cada variável na string de formato é preenchida
por uma variável na lista de argumentos.
printf("O MDC entre %d e %d eh: %d\n", m, n, x);
![Page 30: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/30.jpg)
Entrada e SaídaAlgumas possíveis variáveis:
• %d: Para números inteiros (int).• %f: Para números de ponto-flutuante (float).• %c: Para caracteres (char).• %s: Para cadeias de caracteres (“…”).
![Page 31: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/31.jpg)
Entrada e SaídaLista de Argumentos (printf):
• Depende da String de Formato.• Separados por ‘,’ .• Podem ser variáveis ou constantes .
int p = 65487 * 236597 ;printf("O Produto entre %d e %d eh: %d\n", 65487, 236597 , p);
![Page 32: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/32.jpg)
Entrada e SaídaCaracteres especiais:
• Qual o resultado do comando?
printf("Olá Mundo”);
• Saída: Olá Mundo• Qual o resultado do comando?
printf("Olá ”);printf("Mundo”);
![Page 33: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/33.jpg)
Entrada e SaídaCaracteres especiais:
• Utilizados para indicar quebra de linha.• Indicar tabulação.• Caracteres reservados.• Ex.:
\n - Quebra de linha\t - Tabulação\” - Caracter “\% - Caracter %\a - Sinal de alerta (beep)
![Page 34: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/34.jpg)
Entrada e SaídaO que será impresso?
printf(“\n\t****\n\t*\n\t*\n\t*\n\t*\n\t****\n”);
![Page 35: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/35.jpg)
Entrada e SaídaOnde está o erro?
printf(“\n %d dividido por %d eh %d e o resto eh %d \n”, x, y, resultado)
![Page 36: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/36.jpg)
Entrada e Saídascanf:
printf(“Entre com o seu ra: ");scanf(“%d", &x);
• Utilizado para receber informações do teclado.• Recebe o valor digitado pelo usuário.• Ativada após a tecla “enter” ser pressionada.• Estrutura similar ao printf.• Composto por
– String de Formato– Lista de Argumentos
![Page 37: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/37.jpg)
Entrada e SaídaString de Formato (scanf):
• Cadeia de caracteres que informam como será a entrada.
• Sempre contém variáveis.• Variáveis são indicadas pelo caracter ‘%’• Mesmo tipos de variáveis do printf.
![Page 38: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/38.jpg)
Entrada e SaídaLista de Argumentos (scanf):
• Depende da String de Formato.• Separados por ‘,’ .• Sempre variáveis.• As variáveis devem ser precedidas por ‘&’.
int ra;float media;printf(“Entre com o RA do aluno e sua media: ");scanf(“%d %f“, &ra, &media);
![Page 39: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/39.jpg)
Entrada e SaídaExercício:
Alterar o programa MDC (lab01) para que o mesmo, ao invés de calcular o MDC entre dois valores fixos,solicite ao usuário que informe entre quais valoresele deseja calcular o MDC.
O programa deve ler esses valores, calcular o MDC eretornar a resposta ao usuário.
![Page 40: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/40.jpg)
Entrada e Saída/*MC102 - Primeiro Programa em C - Cálculo do MDC */#include<stdio.h>int main(){
int m = 76;int n = 42;int x, y, r;x = m;y = n;do{
r = x % y;x = y;y = r;
}while( r != 0 );printf("O MDC entre %d e %d eh: %d\n", m, n, x);return 0;
}
![Page 41: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/41.jpg)
Entrada e Saída/*MC102 - Primeiro Programa em C - Cálculo do MDC */#include<stdio.h>int main(){
int m;int n;int x, y, r;
printf(“Entre com os valores desejados: ");scanf("%d %d", &m, &n);
x = m;y = n;do{
r = x % y;x = y;y = r;
}while( r != 0 );printf("O MDC entre %d e %d eh: %d\n", m, n, x);return 0;
}
![Page 42: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/42.jpg)
Entrada e SaídaExercício:
Escreva um programa em linguagem C que lê umatemperatura em Celsius e imprime o valor desta temperatura em Farenheit.
P.s.: F = C * (9.0 / 5.0) + 32.0
Repita o mesmo exercício mas convertendo de Farenheit para Celsius.
![Page 43: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/43.jpg)
1
Linguagem C
Características da Linguagem C:
• linguagem estruturada em bloco simples, ou seja, é composta basicamente por funções e variáveis.
• C é sensível ao caso, letras maiúsculas e minúsculas são tratadas como caracteres separados.
MDC != Mdc != mdcmain != Main != maiN
Primeiro Programa em C/*MC102 - Primeiro Programa em C - Cálculo do MDC */
#include<stdio.h>int main()
{
int m = 76;
int n = 42;
int x, y, r;
x = m;
y = n;do
{
r = x % y;
x = y;
y = r;
}while( r != 0 );
printf("O MDC entre %d e %d eh: %d\n", m, n, x);
return 0; }
Estruturas de um Programa
Comentários:
/*MC102 - Primeiro Programa em C - Cálculo do MDC */
• São ignorados pelo compilador.• Ajudam no entendimento do código.• Funcionam como lembretes.• Em C comentários começam com /* .• Terminam com */ .• Podem ter mais de uma linha.• Não se pode criar um comentário dentro de outro.• Deverão ser usados nos laboratórios.
/*MC102 – Lab 0x Nome: Ra: */
Estruturas de um Programa
Inclusão de Arquivos:
#include<stdio.h>
• Avisam ao compilador que neste programa serão usados os procedimentos, funções e variáveis declarados no arquivo especificado (no caso stdio.h).
• Permite o reutilização de código• Não é necessário saber como funciona• Basta saber o nome e onde está implementado.• Outras inclusões muito comuns em C:
#include<math.h> /*Funções Matemáticas */
#include<stdlib.h> /*Funções de Gerência de Memória*/
#include<string.h> /*Funções de Manipulação de Strings */
![Page 44: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/44.jpg)
2
Estruturas de um Programa
Função main:int main()
{ … }
• Função principal do programa.• Todo programa em C deve ter uma.• O programa começa a ser executado na primeira
linha da main.• O programa termina quando a última linha da
função main é executada.
Estruturas de um Programa
Declarações:
int m = 76;
int x, y;
• Informam ao compilador o nome e o tipo da variável.
• Desse modo é possível saber quanto de memória será utilizada.
• Deve ser feita sempre no início de cada bloco ({).• Terminam sempre com ‘;’
int x, y;
É a mesma coisa queint x;int y;
Estruturas de um Programa
Comandos:
y = n;
r = x % y;
• São as ações do programa.• Sempre terminam com ‘;’• Podemos ter mais de um comando por linha.• Sempre terminam com ‘;’• Como cada comando termina com ‘;’ não é preciso
colocar ‘;’ depois de }
Entrada e Saída
printf:
printf("O MDC entre %d e %d eh: %d\n", m, n, x);
• Utilizado para imprimir na tela.• Comando da biblioteca stdio.h• Composto por
– String de Formato– Lista de Argumentos
• Imprime a partir do último caracter impresso.• Não muda de linha até que a linha acabe ou que
encontre um \n.
![Page 45: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/45.jpg)
3
Entrada e Saída
String de Formato (printf):
• Como imprimir o produto de 3 por 4 ?
printf(“12");
• Como imprimir o produto de 65487 por 236597 ?
printf(“??????????????");
Entrada e Saída
String de Formato (printf):
• Cadeia de caracteres que informam como será a saída.
• Pode conter variáveis.• Variáveis são indicadas pelo caracter ‘%’• Cada variável na string de formato é preenchida
por uma variável na lista de argumentos.
printf("O MDC entre %d e %d eh: %d\n", m, n, x);
Entrada e Saída
Algumas possíveis variáveis:
• %d: Para números inteiros (int).• %f: Para números de ponto-flutuante (float).• %c: Para caracteres (char).• %s: Para cadeias de caracteres (“…”).
Entrada e Saída
Lista de Argumentos (printf):
• Depende da String de Formato.• Separados por ‘,’ .• Podem ser variáveis ou constantes .
int p = 65487 * 236597 ;printf("O Produto entre %d e %d eh: %d\n", 65487, 236597 , p);
![Page 46: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/46.jpg)
4
Entrada e Saída
Caracteres especiais:
• Qual o resultado do comando?
printf("Olá Mundo”);
• Saída: Olá Mundo• Qual o resultado do comando?
printf("Olá ”);printf("Mundo”);
Entrada e Saída
Caracteres especiais:
• Utilizados para indicar quebra de linha.• Indicar tabulação.• Caracteres reservados.• Ex.:
\n - Quebra de linha\t - Tabulação\” - Caracter “\% - Caracter %\a - Sinal de alerta (beep)
Entrada e Saída
O que será impresso?
printf(“\n\t****\n\t*\n\t*\n\t*\n\t*\n\t****\n”);
Entrada e Saída
Onde está o erro?
printf(“\n %d dividido por %d eh %d e o resto eh %d \n”,
x, y, resultado)
![Page 47: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/47.jpg)
5
Entrada e Saída
scanf:printf(“Entre com o seu ra: ");
scanf(“%d", &x);
• Utilizado para receber informações do teclado.• Recebe o valor digitado pelo usuário.• Ativada após a tecla “enter” ser pressionada.• Estrutura similar ao printf.• Composto por
– String de Formato– Lista de Argumentos
Entrada e Saída
String de Formato (scanf):
• Cadeia de caracteres que informam como será a entrada.
• Sempre contém variáveis.• Variáveis são indicadas pelo caracter ‘%’• Mesmo tipos de variáveis do printf.
Entrada e Saída
Lista de Argumentos (scanf):
• Depende da String de Formato.• Separados por ‘,’ .• Sempre variáveis.• As variáveis devem ser precedidas por ‘&’.
int ra;
float media;
printf(“Entre com o RA do aluno e sua media: ");scanf(“%d %f“, &ra, &media);
Entrada e Saída
Exercício:
Alterar o programa MDC (lab01) para que o mesmo, ao invés de calcular o MDC entre dois valores fixos,solicite ao usuário que informe entre quais valoresele deseja calcular o MDC.
O programa deve ler esses valores, calcular o MDC eretornar a resposta ao usuário.
![Page 48: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/48.jpg)
6
Entrada e Saída/*MC102 - Primeiro Programa em C - Cálculo do MDC */
#include<stdio.h>int main()
{
int m = 76;
int n = 42;
int x, y, r;
x = m;
y = n;do
{
r = x % y;
x = y;
y = r;
}while( r != 0 );
printf("O MDC entre %d e %d eh: %d\n", m, n, x);
return 0; }
Entrada e Saída/*MC102 - Primeiro Programa em C - Cálculo do MDC */
#include<stdio.h>int main(){int m;int n;int x, y, r;
printf(“Entre com os valores desejados: ");scanf("%d %d", &m, &n);
x = m;y = n;
do{
r = x % y;x = y;y = r;
}while( r != 0 );printf("O MDC entre %d e %d eh: %d\n", m, n, x);return 0;
}
Entrada e Saída
Exercício:
Escreva um programa em linguagem C que lê umatemperatura em Celsius e imprime o valor desta temperatura em Farenheit.
P.s.: F = C * (9.0 / 5.0) + 32.0
Repita o mesmo exercício mas convertendo de Farenheit para Celsius.
![Page 49: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/49.jpg)
1
Variáveis
Variáveis em C:
• São objetos que não possuem valor fixo.• Representam uma região da memória (gaveta).• Cada variável está associada a um tipo.• Podem armazenar apenas um único valor a cada
instante.• Os valores são armazenados em binário.
Ex.:
int i = 76;
char c = ‘a’;
float f = 3.1415926536;
Tipos
Os Tipos Básicos de C são:
• char
• int
• float
• double
Tipos
char :
• Representam os caracteres.• Possuem tamanho de 1 byte (8 bits).• Representam valores entre -127 e 127.• Cada valor está associado a um símbolo na tabela
ASCII.• Formato para impressão é %c
Ex.:char c1 = ‘a’;
char c2 = ‘@’;
Tipos
Tabela ASCII American Standard Code for Information Interchange
![Page 50: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/50.jpg)
2
Tipos
int :
• Representam os números inteiros.• Possuem tamanho de 4 bytes (32 bits).• O primeiro bit indica o sinal.• Podem representar valores entre:
-2147483648 e + 2147483647• Formato para impressão é %d
Tipos
float :
• Representam os números de ponto-flutuante (com vírgula).
• Possuem tamanho de 4 bytes (32 bits).• O primeiro bit indica o sinal, os 7 seguintes e
expoente e os 24 restantes a mantissa.• Podem representar valores positivos entre:
2E-38 e 2E+38.• Podem representar valores negativos entre:
-2E+38 e -2E-38.• Formato para impressão é %f
Tipos
double :
• Também representam os números de ponto-flutuante (com vírgula).
• Possuem tamanho de 8 bytes (64 bits).• O primeiro bit indica o sinal, os 11 seguintes e
expoente e os 52 restantes a mantissa.• Podem representar valores positivos entre
2E-308 e 2E+308.• Podem representar valores negativos entre
-2E+308 e -2E-308.• Formato para impressão é %lf
Variáveis
Declaração de Variáveis em C:
nome_tipo + lista_identificadorers + ;
• nome_tipo: int, char, float, double…• lista_identificadorers: conjunto de identificadores
separados por ‘,’.
Ex.:
int i;
char a, b, c;
![Page 51: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/51.jpg)
3
Variáveis
Identificadores:
• São os rótulos (nomes) das variáveis.• São compostos sempre por letras e dígitos.• Começam sempre com letra.• O caracter ‘_’ (underline) também é considerado
letra.• Não podem coincidir com as palavras reservadas da
linguagem.Certo Erradox1 1x
nome_casa int
Variáveis
Palavras reservadas do C:
whilevolatilevoidunsigneduniontypedefswitchstruct
staticsizeofsignedshortreturnregisterlongint
ifgotoforfloatexternenumelsedouble
dodefaultcontinueconstcharcasebreakauto
• Não podem ser usadas como identificadores• São sempre grafadas em letras minúsculas.
Variáveis
Atribuição de Variáveis:
• Pode ser feito na declaração ou através de um comando.
Ex.:
int i = 0;
i = 0;
Variáveis
Modificador unsigned:
• Diz ao compilador que os valores daquele tipo são todos positivos.
• O primeiro bit passa a fazer parte da representação.• Muda o intervalo de representação.• Aparece antes do nome do tipo.
Ex.:
unsigned int i = 32569;
![Page 52: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/52.jpg)
4
Variáveis
• unsigned char 0 até 255• unsigned int 0 até (2E+32 - 1)
Outros Modificadores:
• long
• const
• static
• volatile
Variáveis
Exercício:
Escreva um programa em Linguagem C que imprima na tela os seguintes dados:
1. Seu nome – string (entre “”)2. Seu sexo (M ou F ou I) – tipo char3. Sua idade – tipo int4. Seu peso – tipo float
Variáveis
Exercício:
Escreva um programa em Linguagem C que requisite os seguintes dados para o usuário:
1. Nome – string (entre “”)2. Sexo (M ou F ou I) – tipo char
3. Idade – tipo int4. Peso – tipo float
![Page 53: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/53.jpg)
1
Constantes
Exemplo:
#include<stdio.h>int main()
{
float raio, peri, area;
printf(“Entre com o raio :”);
scanf(“%f”, &raio) ;
area = 3.14 * raio * raio;
peri = 2 * 3.14 * raio;
printf(“Perimetro = %.6f \n Area = %.6f \n", peri, area);
return 0;
}
Constantes
Problema:
E se notássemos que Pi precisa ter pelo menos 4casas decimais? Imagine que seu programa tem maisde 1000 linhas e Pi aparece 326 vezes no código.
• Variáveis ocupam espaço na memória.• O valor de Pi não muda durante a execução do
programa
Como resolver ???
Constantes
Solução:
#include<stdio.h>
#define Pi 3.141593
int main()
{
float raio, peri, area;
printf(“Entre com o raio :”);
scanf(“%f”, &raio) ;
area = Pi * raio * raio;
peri = 2 * Pi * raio;
printf(“Perimetro = %.6f \n Area = %.6f \n", peri, area);
return 0;
}
Constantes
Constantes Simbólicas:
# define + nome + valor
• Não possuem tipo.• São substituídas antes do código ser compilado.• Não terminam com ‘;’• Não utilizam o operador ‘=‘• São precedidas por “# define“• A regra para criação dos nomes é a mesma para
criação de nomes de variáveis.
![Page 54: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/54.jpg)
2
Constantes
Exemplos:
# define PI 3.141593
# define MASCULINO ‘m’
# define NOME “Renato”
Operadores
Operadores Aritméticos:
Resto%
Divisão/
Multiplicação*
Subtração-
Soma+
FinalidadeOperador
Operadores
Operadores Aritméticos:
• Precedência: * / % > + -
• Assim: 3 + 5 * 7 == 3 + (5 * 7)
• Associatividade da esquerda para direita.
• Assim: 3 * 5 % 2 == (3 * 5) % 2
• Para resolvermos “problemas” de precedência utilizamos parênteses. Ex.:
raiz = (-B + Delta) / (2 * A)
Operadores
Operadores Aritméticos:
• Devem ser utilizados com valores numéricos apenas. (char pode?)
• Operador % só pode ser utilizado com operandos inteiros.
• Operador / quando utilizado com operandos inteiros retorna um valor inteiro.
• Divisão por zero interrompe a execução do programa.
![Page 55: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/55.jpg)
3
Divisão por Zero
A = 1, B = 1
A = B
multiplica por A dos dois lados…
A2 = AB
subtrai B2 dos dois lados…
A2 - B2 = AB - B2
fatorando...
(A – B)(A + B) = B(A – B)
corta (A – B) dos dois lados…
A + B = B
2 = 1
Operadores
Operadores Relacionais:
!=
==
<=
>=
<
>
Operador
Diferente
Igual
Menor ou igual que
Maior ou igual que
Menor que
Maior que
Finalidade
Operadores
Operadores Relacionais:
• Retornam 1 quando a expressão é verdadeira e zero se for falsa.
• Todos possuem a mesma precedência.• Associatividade da esquerda para direita.• Possuem precedência menor que qualquer operador
aritmético.
Ex.:
3 * 5 > 8 – 10
3 + 4 != 7
Operadores
Operadores Lógicos:
||
&&
Operador
OU lógico (or)
E lógico (and)
Finalidade
![Page 56: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/56.jpg)
4
Operadores
Operadores Lógicos:
• Retornam 1 quando a expressão é verdadeira e zero se for falsa.
• Precedência: && > ||
• Associatividade da esquerda para direita.• Possuem precedência menor que qualquer operador
relacional.
Ex.:
3 * 5 > 8 – 10 && 3 + 4 != 7
3 * 5 > 8 – 10 || 3 + 4 != 7
Operadores
Operadores Unários:
Incremento++Negação!
Decremento--
Indica sinal positivo+
-
OperadorIndica sinal negativo
Finalidade
Operadores
Operadores Unários:• + ou - : Indicam o sinal da variável ou constante.
Ex.:+3 == -B
• ++ ou -- : Incrementam ou decrementam de 1 o valor da variável, devem ser usado sempre com variáveis. Ex:
i++; é o mesmo que i = i + 1;
j--; é o mesmo que j = j - 1;
• ! : Troca tudo que for diferente de zero por 0, e troca zero por 1. Ex.:
3 * 5 > 8 – 10 || !(3 + 4 != 7)
Operadores
Operadores Unários:
• Possuem precedência maior que qualquer outro operador.
• Associatividade da esquerda para direita.
![Page 57: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/57.jpg)
5
Operadores
Conversão de Tipos:
• Numa expressão todos os operandos são convertidos para o mesmo tipo.
• Sempre convertidos para o tipo maior.• Durante uma atribuição com tipos diferentes podem
aparecer aviso do compilador (WARNINGS).Ex.:
int A = 3.141593;
float B = A;
A = 5 / 2;
A = 4.0 / 2.0;
Operadores
Exercício:
Faça um programa que solicite ao usuário a nota de
suas 3 provas e imprima a média aritmética delas.
Operadores
Exercício:
Repita o exercício anterior usando apenas duas
variáveis.
Operadores
Exercício:
Faça um programa que calcula a média de provas dadisciplina MC102 (a fórmula está na ementa do curso),utilize duas variáveis apenas.
![Page 58: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/58.jpg)
Aula Passada#include<stdio.h>#define PESO1 0.3#define PESO2 0.3#define PESO3 0.4int main(){
float nota, media;printf("\nEntre com a primeira nota: ");scanf("%f", ¬a);media = nota * PESO1;printf("\nEntre com a segunda nota: ");scanf("%f", ¬a);media += nota * PESO2;printf("\nEntre com a terceira nota: ");scanf("%f", ¬a);media += nota * PESO3;printf("\nA media das notas eh: %f\n ", media);return 0;
}
![Page 59: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/59.jpg)
Comandos Condicionais
Problema:
Escreva um programa que lê dois números inteiros (a e b) e imprime como saída o maior deles.
• Temos duas saídas possíveis.• Só uma deve ser executada.
Como resolver ???
![Page 60: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/60.jpg)
Comandos Condicionais
Definição:
Uma estrutura condicional permite a escolha de um grupo de comandos ou instruções a ser executadoquando determinada condição, composta porexpressões aritméticas, e/ou operadores relacionais, e/ou operadores lógicos é satisfeita, ou seja éverdadeira != 0.
![Page 61: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/61.jpg)
Comandos Condicionais
Em linguagem C:
if( expressão ){
comando1;comando2;…comandoN;
}
![Page 62: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/62.jpg)
Comandos CondicionaisResposta:
#include<stdio.h>int main(){
int a, b;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b);if( a > b ){
printf("\nO maior numero eh: %d\n ", a);}if( b >= a ){
printf("\nO maior numero eh: %d\n ", b);}return 0;
}
![Page 63: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/63.jpg)
Comandos Condicionais
Comando if:
• O bloco de comandos é executado apenas se a expressão é verdadeira, ou seja, tem valor diferente de zero.
• Quando o bloco de comandos possui apenas um comando não é necessário o uso de { }.
• Quando a expressão é falsa, a execução do programa passa para o comando seguinte ao bloco de comandos.
![Page 64: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/64.jpg)
Comandos CondicionaisProblema:
O programa anterior realiza duas comparações, sendoque uma delas é desnecessária, como evitá-la?
if( a > b ){
printf("\nO maior numero eh: %d\n ", a);}if( b >= a ){
printf("\nO maior numeor eh: %d\n ", b);}
![Page 65: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/65.jpg)
Comandos CondicionaisResposta:
#include<stdio.h>int main(){
int a, b;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b);if( a > b )printf("\nO maior numero eh: %d\n ", a);
elseprintf("\nO maior numeor eh: %d\n ", b);
return 0;}
![Page 66: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/66.jpg)
Comandos Condicionais
Comando else:
• Deve sempre estar precedido de um if.• O bloco de comandos é executado apenas se a
expressão é falsa, ou seja, tem valor igual a zero.• Quando o bloco de comandos possui apenas um
comando não é necessário o uso de { }.• O else é opcional ( if pode ter ou não um else,
mas todo else tem um if ).
![Page 67: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/67.jpg)
Comandos Condicionais
Exercício:
Escreva um programa que calcula a média final dosalunos de MC102 das turmas P e R. Solicite aousuário apenas as notas de prova, considere quetodos os alunos entregaram todos os exercícios delaboratório. Imprima como saída a media final doaluno e uma mensagem dizendo se o aluno foiaprovado ou está de exame.
![Page 68: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/68.jpg)
Comandos CondicionaisExercício:
Faça um programa que imprime o maior entre 3números inteiros distintos (a, b, c).
![Page 69: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/69.jpg)
Comandos Condicionais#include<stdio.h>int main(){
int a, b, c;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b, &c);if( a > b && a > c)printf("\nO maior numero eh: %d\n ", a);
if( b > a && b > c)printf("\nO maior numero eh: %d\n ", b);
if( c > a && c > b)printf("\nO maior numero eh: %d\n ", c);
return 0;}
![Page 70: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/70.jpg)
Comandos CondicionaisProblema:
Faça um programa que imprime o maior entre 3números inteiros distintos. O programa deve realizarapenas duas comparações.
![Page 71: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/71.jpg)
Comandos Condicionais#include<stdio.h>int main(){
int a, b, c;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b, &c);if( a > b ){
if( a > c )printf("\nO maior numero eh: %d\n ", a);
elseprintf("\nO maior numero eh: %d\n ", c);
}else{
if( b > c )printf("\nO maior numero eh: %d\n ", b);
elseprintf("\nO maior numero eh: %d\n ", c);
}return 0;
}
![Page 72: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/72.jpg)
Comandos Condicionais
Comando Condicionais Aninhados:
• A quantidade de if-else aninhados depende da vontade do programador.
• Cada else está relacionado ao if que se encontra no mesmo bloco.
![Page 73: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/73.jpg)
Comandos Condicionais
Exercício:
Escreva um programa que lê 3 valores inteiros eimprime como saída os mesmos valores em ordemcrescente.
![Page 74: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/74.jpg)
Comandos Condicionais
Exercício:
Escreva um programa em linguagem C que solicita aousuário os coeficientes A, B, e C de uma equação dosegundo grau, e imprime, se existirem, o(s) valor(es)da(s) raíz(es) da equação. Caso não existam raízesreais o programa deve informar o usuário deste fato.
![Page 75: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/75.jpg)
1
Aula Passada
#include<stdio.h>#define PESO1 0.3#define PESO2 0.3#define PESO3 0.4int main(){
float nota, media;printf("\nEntre com a primeira nota: ");scanf("%f", ¬a);media = nota * PESO1;printf("\nEntre com a segunda nota: ");scanf("%f", ¬a);media += nota * PESO2;printf("\nEntre com a terceira nota: ");scanf("%f", ¬a);media += nota * PESO3;printf("\nA media das notas eh: %f\n ", media);return 0;
}
Comandos Condicionais
Problema:
Escreva um programa que lê dois números inteiros (a e b) e imprime como saída o maior deles.
• Temos duas saídas possíveis.• Só uma deve ser executada.
Como resolver ???
Comandos Condicionais
Definição:
Uma estrutura condicional permite a escolha de um grupo de comandos ou instruções a ser executadoquando determinada condição, composta porexpressões aritméticas, e/ou operadores relacionais, e/ou operadores lógicos é satisfeita, ou seja éverdadeira != 0.
Comandos Condicionais
Em linguagem C:
if( expressão )
{
comando1;
comando2;
…
comandoN;
}
![Page 76: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/76.jpg)
2
Comandos Condicionais
Resposta:
#include<stdio.h>int main()
{
int a, b;
printf("\nEntre com os numeros: ");
scanf("%d%d", &a, &b);
if( a > b )
{printf("\nO maior numero eh: %d\n ", a);
}
if( b >= a )
{
printf("\nO maior numero eh: %d\n ", b);
}
return 0;
}
Comandos Condicionais
Comando if:
• O bloco de comandos é executado apenas se a expressão é verdadeira, ou seja, tem valor diferente de zero.
• Quando o bloco de comandos possui apenas um comando não é necessário o uso de { }.
• Quando a expressão é falsa, a execução do programa passa para o comando seguinte ao bloco de comandos.
Comandos Condicionais
Problema:
O programa anterior realiza duas comparações, sendoque uma delas é desnecessária, como evitá-la?
if( a > b ){
printf("\nO maior numero eh: %d\n ", a);}if( b >= a ){
printf("\nO maior numeor eh: %d\n ", b);}
Comandos Condicionais
Resposta:
#include<stdio.h>int main(){
int a, b;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b);if( a > b )printf("\nO maior numero eh: %d\n ", a);
elseprintf("\nO maior numeor eh: %d\n ", b);
return 0;}
![Page 77: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/77.jpg)
3
Comandos Condicionais
Comando else:
• Deve sempre estar precedido de um if.• O bloco de comandos é executado apenas se a
expressão é falsa, ou seja, tem valor igual a zero.• Quando o bloco de comandos possui apenas um
comando não é necessário o uso de { }.• O else é opcional ( if pode ter ou não um else,
mas todo else tem um if ).
Comandos Condicionais
Exercício:
Escreva um programa que calcula a média final dosalunos de MC102 das turmas P e R. Solicite aousuário apenas as notas de prova, considere quetodos os alunos entregaram todos os exercícios delaboratório. Imprima como saída a media final doaluno e uma mensagem dizendo se o aluno foiaprovado ou está de exame.
Comandos Condicionais
Exercício:
Faça um programa que imprime o maior entre 3números inteiros distintos (a, b, c).
Comandos Condicionais
#include<stdio.h>int main(){
int a, b, c;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b, &c);if( a > b && a > c)printf("\nO maior numero eh: %d\n ", a);
if( b > a && b > c)printf("\nO maior numero eh: %d\n ", b);
if( c > a && c > b)printf("\nO maior numero eh: %d\n ", c);
return 0;}
![Page 78: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/78.jpg)
4
Comandos Condicionais
Problema:
Faça um programa que imprime o maior entre 3números inteiros distintos. O programa deve realizarapenas duas comparações.
Comandos Condicionais
#include<stdio.h>int main(){int a, b, c;printf("\nEntre com os numeros: ");scanf("%d%d", &a, &b, &c);
if( a > b ){
if( a > c )printf("\nO maior numero eh: %d\n ", a);
elseprintf("\nO maior numero eh: %d\n ", c);
}else{
if( b > c )printf("\nO maior numero eh: %d\n ", b);
else
printf("\nO maior numero eh: %d\n ", c);}return 0;
}
Comandos Condicionais
Comando Condicionais Aninhados:
• A quantidade de if-else aninhados depende da vontade do programador.
• Cada else está relacionado ao if que se encontra no mesmo bloco.
Comandos Condicionais
Exercício:
Escreva um programa que lê 3 valores inteiros eimprime como saída os mesmos valores em ordemcrescente.
![Page 79: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/79.jpg)
5
Comandos Condicionais
Exercício:
Escreva um programa em linguagem C que solicita aousuário os coeficientes A, B, e C de uma equação dosegundo grau, e imprime, se existirem, o(s) valor(es)da(s) raíz(es) da equação. Caso não existam raízesreais o programa deve informar o usuário deste fato.
![Page 80: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/80.jpg)
UNIVERSIDADE FEDERAL DE OURO PRETOINSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICASDEPARTAMENTO DE COMPUTAÇÃOCIC107 – PROGRAMAÇÃO DE COMPUTADORES I
5ª Aula prática
Estrutura de repetição “for”
Seu formato é for (inicialização; condição; incremento) comando interno;
e sua finalidade é repetir o “comando interno” enquanto a “condição” permanecer verdadeira. É semelhante à estrutura “while” da aula anterior, mas a estrutura “for” prevê campos específicos para “inicialização” e para estabelecer “incremento”. É especialmente projetada para executar uma ação repetida sob controle de um contador que é incrementado em cada iteração (repetição).
Ela trabalha da seguinte forma:1. inicialização é executada; visa, geralmente, a atribuição de valor a uma variável contadora;2. condição é verificada; se é verdadeira a repetição continua, senão a repetição é encerrada e o
“comando interno” não é mais executado;3. comando interno é executado. Na verdade, pode ser um comando composto, ou bloco de comandos,
entre chaves { };4. finalmente, incremento é executado e o processo retorna para o passo 2 acima.
Exemplo 1 : programa para calcular o fatorial de um número.#include <iostream>using namespace std;main(){
int x, fat;cout << "Digite um número inteiro: ";cin >> x;fat = 1;for ( int i=2; i<=x; i=i+1 ) fat = fat * i;cout << "fatorial: " << fat << endl;
system("pause");}
Exemplo 2 : programa que imprime todos os divisores de um número#include <iostream>using namespace std;main(){
int x;cout << "Digite um número: ";cin >> x;for ( int i=x; i >= 1; i=i-1 ) if ( x%i = = 0 )
cout << i << " é divisor de " << x << endl; system("pause");}
Observações: 1. estamos designando como incremento algo que, na verdade, pode ser um decremento, como no
![Page 81: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/81.jpg)
exemplo 2 acima;2. a instrução de incremento i=i+1 pode ser escrita como i++; também a instrução
i=i-1 pode ser escrita como i--;3. a estrutura “for” é muito mais flexível do que apresentado aqui. Quem quiser conhecer todas as
possibilidades deve consultar um livro ou um tutorial;
Exemplo 3 : programa que escreve uma mensagem com a seguinte estrutura:sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho …#include <iostream>using namespace std;main(){ int linhas; cout << "Quantas linhas: "; cin >> linhas; for (int lin=1; lin<=linhas; lin++) { for (int col=1; col<=lin; col++) cout << "sonho "; cout << endl; } system("pause");}
Exercícios:
3)Crie um programa para imprimir a tabela de conversão de graus Celsius para Farenheit e Kelvin. A tabela deve abranger as temperaturas de 0oC a 100o C.
4)O valor aproximado do número π pode ser calculado usando-se a série: S = 1/13 - 1/33 + 1/53 - 1/73 + 1/93 - ...sendo π = (S *32)1/3.Escreva um programa para ler um número inteiro n, calcular e imprimir uma aproximação para o valor de π usando os n primeiros termos da série.
a) Altere o programa do exemplo 3 para imprimir o dobro do número de linhas especificado, formando uma configuração como exemplificado abaixo para número de linhas igual a 4.sonho
sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho
b) Altere o programa do exemplo 3 para imprimir o número de linhas especificado, com a seguinte configuração: sonho
sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho ........
![Page 82: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/82.jpg)
1
Decisão Múltipla
Problema:
Escreva um programa que solicita ao usuário quedigite o seu RA e em seguida o programa retorna se ousuário está ou não matriculado na disciplina MC102.
Decisão Múltipla
Solução:
int RA;
scanf("%d", &RA);
if( RA == 042066 || RA == 042417 || … || RA == 044609 )
printf("\nO aluno esta matriculado\n ");
else
printf("\nO aluno NAO esta matriculado\n ");
Decisão Múltipla
Problema:
Agora seu programa deve dizer o nome do aluno caso ele esteja matriculado.
Decisão Múltipla
Em linguagem C:
switch( expressão )
{
case valor1 : bloco de comandos
case valor2 : bloco de comandos
…
case valorN : bloco de comandos
default : bloco de comandos
}
![Page 83: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/83.jpg)
2
Decisão Múltipla
Definição:
O comando switch é uma estrutura condicional dedecisão múltipla que testa o valor de uma expressão edesvia o fluxo de execução do programa de acordocom o resultado do teste.
Decisão Múltipla
Solução:
int RA;
scanf("%d", &RA);
switch( RA )
{
case 042066 :
case 042417 :
…
case 044609 : printf("\nO aluno esta matriculado\n ");
break;
default : printf("\nO aluno NAO esta matriculado\n ");
}
Decisão Múltipla
switch:
• A expressão deve ter valor numérico.• Começa a executar o bloco de comandos a partir
do case que for igual ao valor da expressão.• Só para de executar os comandos quando
encontra um break ou chega ao fim do switch.• break é opcional e vem sempre seguido de ;• default é opcional e é executado quando nenhum
case for igual a expressão.
Decisão Múltipla
Exercício:
Escreva um programa que a partir do RA imprime onome do usuário, se ele estiver matriculado emMC102, caso contrário o programa avisa que o usuário
não está matriculado.P.s.: Considere apenas os seguintes alunos:
Ana 042066Camila 042417
Leo 044609Outro Leo 044635
![Page 84: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/84.jpg)
3
Decisão Múltipla
Exercício:
Escreva um programa que solicita ao usuário quedigite um caracter e em seguida o programa imprimese esse caracter é ou não uma vogal.
![Page 85: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/85.jpg)
Comandos Repetitivos
Problema:
• Escreva um programa que imprime os 3 primeirosnúmeros ímpares.
• Escreva um programa que imprime os 100primeiros números ímpares.
• Escreva um programa que imprime os n primeirosnúmeros ímpares, onde n é indicado pelo usuário.
![Page 86: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/86.jpg)
Comandos Repetitivos
Comando do-while :
O comando do-while é uma instrução de repetiçãoonde a condição de parada é testada após a execuçãodo bloco de comandos. A execução continua até que acondição de parada seja falsa.
![Page 87: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/87.jpg)
Comandos Repetitivos
Em linguagem C:
do{
comando 1;comando 2;…comando n;
} while( condição de parada );
![Page 88: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/88.jpg)
Comandos RepetitivosExemplo:
int main(){
int x, y, r, m = 76, n = 42;x = m;y = n;
do{
r = x % y;x = y;y = r;
}while( r != 0 );
return 0; }
![Page 89: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/89.jpg)
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que imprime os100 primeiros números ímpares.
![Page 90: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/90.jpg)
Comandos Repetitivos
Solução:
#include <stdio.h>int main (){
int num = 1, cont = 1;do{
printf (“%d\t”, num);num += 2;cont++;
} while (cont <= 100);}
![Page 91: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/91.jpg)
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que imprime osn primeiros números ímpares.
![Page 92: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/92.jpg)
Comandos Repetitivos
Solução:
#include <stdio.h>int main (){
int num = 1, cont = 1, n;printf(“Entre com n ”);scanf(“%d”, &n);do{
printf (“%d\t”, num);num += 2;cont++;
} while (cont <= n);}
![Page 93: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/93.jpg)
Comandos Repetitivos
Exercício:
Construa um programa que imprime a soma de todosos valores positivos digitados pelo usuário até que eledigite um numero negativo.
![Page 94: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/94.jpg)
Comandos Repetitivos
Solução:
int n, soma = 0;do{
printf ( "Digite um numero positivo para ser somado ou negativo para sair: " );scanf ( "%d" , &n );
if ( n >= 0 )soma = soma + n;
}while ( n >= 0 ) ;printf ( "A soma eh %d\n" , soma );
![Page 95: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/95.jpg)
Comandos Repetitivos
Comando while :
O comando while é uma instrução de repetiçãoonde a condição de parada é testa antes da execuçãodo bloco de comandos. A execução continua até que acondição de parada seja falsa. Possui 4 etapasbásicas:
• Inicialização da variável de controle.• Teste da condição de parada.• Execução do bloco de comandos.• Atualização da variável de controle.
![Page 96: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/96.jpg)
Comandos Repetitivos
Em linguagem C:
inicializaçãowhile( condição de parada );{
comando 1;comando 2;…comando n;atualização
}
![Page 97: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/97.jpg)
Comandos Repetitivos
Solução:
int n, soma = 0;printf ( "Digite um numero positivo, ou negativo para sair: ");scanf ( "%d" , &n );while ( n >= 0 ) {
soma = soma + n;printf ( "Digite um numero positivo, ou negativo para sair:" );scanf ( "%d" , &n );
}printf ( "A soma eh %d\n" , soma );
![Page 98: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/98.jpg)
Comandos Repetitivos
Problema:
Qual é o melhor ? do-while ou while ? Analise oproblema da soma dos números positivos.
![Page 99: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/99.jpg)
Comandos Repetitivos
Problema:
Reescreva o algoritmo para imprimir os n númerosímpares utilizando o comando while.
![Page 100: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/100.jpg)
Comandos Repetitivos
Solução:
#include <stdio.h>int main (){
int num = 1, cont = 0, n;printf(“Entre com n ”);scanf(“%d”, &n);while (cont < n); {
printf (“%d\t”, num);num += 2;cont++;
}}
![Page 101: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/101.jpg)
Comandos Repetitivos
Problema:
Escreva um programa que informa se um númerointeiro é par ou é ímpar. Este programa deve rodar atéque o usuário digite 0 (zero).
![Page 102: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/102.jpg)
Comandos Repetitivos
Solução:
int n;do{
printf (“Entre um valor positivo (ou 0 para sair):");scanf ("%d", &n);if (n % 2 == 1)
printf ("%d eh impar\n", n);else
printf ("%d eh par\n", n);} while (n != 0);
![Page 103: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/103.jpg)
1
Comandos Repetitivos
Problema:
• Escreva um programa que imprime os 3 primeirosnúmeros ímpares.
• Escreva um programa que imprime os 100primeiros números ímpares.
• Escreva um programa que imprime os n primeirosnúmeros ímpares, onde n é indicado pelo usuário.
Comandos Repetitivos
Comando do-while :
O comando do-while é uma instrução de repetiçãoonde a condição de parada é testada após a execuçãodo bloco de comandos. A execução continua até que a
condição de parada seja falsa.
Comandos Repetitivos
Em linguagem C:
do
{
comando 1;
comando 2;
…
comando n;
} while( condição de parada );
Comandos Repetitivos
Exemplo:
int main()
{int x, y, r, m = 76, n = 42;x = m;
y = n;
do{
r = x % y;x = y;y = r;
}while( r != 0 );
return 0; }
![Page 104: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/104.jpg)
2
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que imprime os100 primeiros números ímpares.
Comandos Repetitivos
Solução:
#include <stdio.h>
int main ()
{
int num = 1, cont = 1;
do
{
printf (“%d\t”, num);
num += 2;
cont++;
} while (cont <= 100);
}
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que imprime osn primeiros números ímpares.
Comandos Repetitivos
Solução:
#include <stdio.h>
int main ()
{
int num = 1, cont = 1, n;
printf(“Entre com n ”);
scanf(“%d”, &n);
do
{
printf (“%d\t”, num);
num += 2;
cont++;
} while (cont <= n);
}
![Page 105: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/105.jpg)
3
Comandos Repetitivos
Exercício:
Construa um programa que imprime a soma de todosos valores positivos digitados pelo usuário até que ele
digite um numero negativo.
Comandos Repetitivos
Solução:
int n, soma = 0;
do
{
printf ( "Digite um numero positivo para ser somado ou negativo para sair: " );
scanf ( "%d" , &n );
if ( n >= 0 )
soma = soma + n;
}while ( n >= 0 ) ;
printf ( "A soma eh %d\n" , soma );
Comandos Repetitivos
Comando while :
O comando while é uma instrução de repetiçãoonde a condição de parada é testa antes da execuçãodo bloco de comandos. A execução continua até que a
condição de parada seja falsa. Possui 4 etapasbásicas:
• Inicialização da variável de controle.• Teste da condição de parada.
• Execução do bloco de comandos.• Atualização da variável de controle.
Comandos Repetitivos
Em linguagem C:
inicialização
while( condição de parada );
{
comando 1;
comando 2;
…
comando n;
atualização
}
![Page 106: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/106.jpg)
4
Comandos Repetitivos
Solução:
int n, soma = 0;
printf ( "Digite um numero positivo, ou negativo para sair: ");
scanf ( "%d" , &n );
while ( n >= 0 )
{
soma = soma + n;
printf ( "Digite um numero positivo, ou negativo para sair:" );
scanf ( "%d" , &n );
}
printf ( "A soma eh %d\n" , soma );
Comandos Repetitivos
Problema:
Qual é o melhor ? do-while ou while ? Analise oproblema da soma dos números positivos.
Comandos Repetitivos
Problema:
Reescreva o algoritmo para imprimir os n númerosímpares utilizando o comando while.
Comandos Repetitivos
Solução:
#include <stdio.h>
int main ()
{
int num = 1, cont = 0, n;
printf(“Entre com n ”);
scanf(“%d”, &n);
while (cont < n);
{
printf (“%d\t”, num);
num += 2;
cont++;
}
}
![Page 107: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/107.jpg)
5
Comandos Repetitivos
Problema:
Escreva um programa que informa se um númerointeiro é par ou é ímpar. Este programa deve rodar atéque o usuário digite 0 (zero).
Comandos Repetitivos
Solução:
int n;
do
{
printf (“Entre um valor positivo (ou 0 para sair):");
scanf ("%d", &n);
if (n % 2 == 1)
printf ("%d eh impar\n", n);
else
printf ("%d eh par\n", n);
} while (n != 0);
![Page 108: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/108.jpg)
1
Comandos Repetitivos
Aula passada:
int num = 1, cont = 0, n;
printf(“Entre com n ”);
scanf(“%d”, &n);
while (cont < n);
{
printf (“%d\t”, num);
num += 2;
cont++;
}
Comandos Repetitivos
Etapas do laço:
• Inicialização: cont = 0
• Condição de parada:
cont < n
• Bloco de comandos:printf (“%d\t”, num);
num += 2;
• Atualização:
cont++;
Comandos Repetitivos
Comando for :
O comando for é uma simplificação do comandowhile, onde a inicialização da variável de controle,a condição de parada e atualização da variável decontrole são especificados no próprio comando.
O comportamento é o mesmo do comando while :após a inicialização a condição de parada é testada,se for verdadeira o bloco de comandos é executado, avariável de controle é atualizada e a condição deparada é testada novamente e o comando se repeteaté que a expressão da condição de parada seja falsa.
Comandos Repetitivos
Em linguagem C:
for(inicialização ; condição de parada ; atualização)
{
comando 1;
comando 2;
…
comando n;
}
![Page 109: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/109.jpg)
2
Comandos Repetitivos
Exemplo:
int main()
{
int i;
for( i = 0; i < 100; i++ )
{
printf(“%d”, 2 * i + 1);
}
return 0;
}
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem Cque imprime os
n primeiros números ímpares utilizando o comando
for.
Comandos Repetitivos
Solução:
int main()
{
int i, n;printf(“Entre com n ”);
scanf(“%d”, &n);
for( i = 0; i < n; i++ )
{
printf(“%d”, 2 * i + 1);}
return 0; }
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que calcula osomatório de 1 até n. Onde n é fornecido pelo usuário.
![Page 110: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/110.jpg)
3
Comandos Repetitivos
Solução:
int main()
{
int i, n, soma = 0;printf(“Entre com n ”);
scanf(“%d”, &n);
for( i = 0; i < n; i++ )
{
soma = soma + i;}
printf(“%d”, soma);return 0;
}
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que determinase valor n informado pelo usuário é ou não um número
primo.
Comandos Repetitivos
Solução:
int main(){
int i, n;printf(“Entre com n ”);
scanf(“%d”, &n);for( i = 2; i < n; i++ )
{if(n % i == 0 )
break;
}if( i == n )
printf(“%d eh Primo”, n);else
printf(“%d NAO eh Primo”, n);return 0;
}
Comandos Repetitivos
Exercício:
Escreva um programa que imprime todos os númerosprimos entre 2 e n, onde n é fornecido pelo usuário.
![Page 111: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/111.jpg)
4
Comandos Repetitivos
Solução:
int n, i, j;
printf("Entre com n ");
scanf("%d", &n);for( i = 2; i < n; i++)
{
for( j = 2; j < i; j++ ){
if( i % j == 0 )
break; }
if( j == i )printf("%d\t", i);
}
Comandos Repetitivos
Exercício:
Escreva um programa em linguagem C que imprimatodas as tabuadas entre 2 e n, onde n é informado
pelo usuário.
Comandos Repetitivos
Solução:
int n;
int i, j;
printf("Entre com um numero inteiro positivo: ");scanf("%d", &n);
for( i = 2; i <= n; i++ ){
printf("\nTabuada do %d:\n", i);
for( j = 1; j <= 10; j++)
printf("%d x %d = %d\n", i, j, i * j);
}
![Page 112: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/112.jpg)
Exercícios
Exercício:
Diga qual será a saída do programa a seguir.
![Page 113: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/113.jpg)
Exercícios
int r = 0, n = 98;while( n > 0 ){
r += n % 10;n /= 10;if( n == 0 && r > 9){
n = r;r = 0;
}}printf("%d\n", r);
![Page 114: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/114.jpg)
Exercícios
Exercício:
Repita o exercício anterior mas considere que n valeagora:
a) 5b) 45c) 123
![Page 115: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/115.jpg)
Exercícios
Exercício:
Escreva um programa que lê uma seqüência denúmeros inteiros e imprime qual o maior e qual omenor valor dessa seqüência. A seqüência terminacom o número 0 (zero).
![Page 116: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/116.jpg)
Exercícios
int n, maior, menor;printf("Entre com um numero ou zero para terminar: ");scanf("%d", &n);maior = menor = n; while(n != 0 ){
if( n > maior )maior = n;
if( n < menor )menor = n;
printf("Entre com um numero ou 0 para sair: ");scanf("%d", &n);
}printf("maior: %d e o menor: %d\n", maior, menor);
![Page 117: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/117.jpg)
Exercícios
Exercício:
Escreva um programa que imprime a soma de todosos números inteiros entre A e B (incluindo A e B),onde A e B são fornecidos pelo usuário.
![Page 118: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/118.jpg)
Exercícios
#include<stdio.h>int main(){
int A, B, soma, i;printf("Entre com A e B: ");scanf("%d%d", &A, &B);soma = 0; for (i = A; i <= B; i++)
soma += i;printf("A soma eh %d\n", soma);return 0;
}
![Page 119: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/119.jpg)
Exercícios
Exercício:
Escreva um programa que lê um valor informado pelousuário e imprime se este valor é ou não uma potênciapositiva de 2.
![Page 120: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/120.jpg)
Exercícios
int n, pot;printf("Entre com o numero: ");scanf("%d", &n);
pot = 1; while( pot < n )
pot *= 2;
if( pot == n)printf("%d eh potencia de 2.\n", n);
elseprintf("%d NAO eh potencia de 2.\n", n);
![Page 121: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/121.jpg)
Exercícios
Exercício:
Altere o programa anterior para que ele execute atéque o usuário digite um valor negativo.
![Page 122: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/122.jpg)
Exercíciosint n, pot;printf("Entre com o numero: ");scanf("%d", &n);
while( n > 0 ){
pot = 1; while( pot < n )
pot *= 2;
if( pot == n)printf("eh potencia de 2.\n");
elseprintf("NAO eh potencia de 2.\n");
printf("Entre com o numero: ");scanf("%d", &n);
}
![Page 123: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/123.jpg)
1
Vetores
Exercício :
Escreva um programa em linguagem C que lêpalavras com 4 letras e as imprime de trás para frente.Ex.:
casa -- asaclata -- atal
sapo -- opas
Vetores
Solução:
int main()
{
char L1, L2, L3, L4;
printf(“Entre com palavras de 4 letras: “);
scanf(“%c%c%c%c”, &L1, &L2, &L3, &L4);
printf(“%c%c%c%c”, L4, L3, L2, L1);
return 0;
}
Vetores
Problema:
Refaça o programa anterior para palavras ou frasescom 20, 30, e 50 caracteres.
Vetores
Definição:
Um vetor é um tipo de dado utilizado para representaruma certa quantidade de variáveis do mesmo tipo.
![Page 124: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/124.jpg)
2
Vetores
Em Linguagem C:
tipo + identificador + [ número de variáveis ];
Onde:
• tipo: é o tipo das variáveis que devem ser criadas. Ex.: int, char, float, entre outros;
• identificador: é o nome que será utilizado para referenciar o conjunto de variáveis;
• número de variáveis: é o número de variáveis que será criado (tamanho do vetor).
Vetores
Exemplos :
int notas[10];
char letras[50];
float pesos[100];
notas[0] = 1;
scanf(“%c”, &letras[6]);
notas[5 + 2] = notas[5] * pesos[2];
for(i = 0; i < N; i++)
pesos[i] = 1.0;
Vetores
Importante:
• O primeiro elemento de um vetor é o de índice 0 (zero).
• Num vetor de 100 elementos o último elemento é o de índice 99.
• Acessar uma posição inválida de um vetor pode fazer seu programa “Abortar”.
Vetores
Exercício:
Escreva um programa em linguagem C que lê palavrascom 10 letras e as imprime de trás para frente. Utilizevetores e laços.
![Page 125: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/125.jpg)
3
Vetores
Solução:
#define TAM 10
int main()
{
char letras[TAM];
int i;
printf(“Entre com a frase: ”);
for(i = 0; i < TAM; i++)
scanf(“%c”, &letras[i]);
for(i = TAM - 1; i >= 0; i--)
printf(“%c”, letras[i]);
return 0;
}
Vetores
Exercício:
Escreva um programa em linguagem C que lê RA’s eas notas de no máximo 100 alunos. O programa develer e armazenar um novo RA e uma nova nota até que
o usuário digite um RA negativo.
Vetores
Solução:
#define TAM 100int main(){
float notas[TAM];int ras[TAM], aux, indice = 0, total;printf(“Entre com o RA (ou negativo para sair): ”);scanf(“%d”, &aux);while(aux > 0)
{ras[indice] = aux;printf(“Entre com a nota: ”);scanf(“%f”, ¬as[indice]);
printf(“Entre com o RA (ou negativo para sair): ”);scanf(“%d”, &aux);indice++;
}return 0;
}
Vetores
Exercício:
Utilizando o código do programa anterior, escreva umnovo programa que permite ao usuário consultar anota de um aluno digitando o seu RA, o programa
deve rodar até que o usuário digite um RA negativo.
Obs.: O trecho de código que lê os RA’s e as notas é o
mesmo do programa anterior.
![Page 126: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/126.jpg)
4
Vetores
Solução:total = indice;
printf(“Entre com o RA (ou negativo para sair): ”);
scanf(“%d”, &aux);
while( aux > 0 )
{
for( indice = 0; indice < total; indice++ )
if( ras[indice] == aux )
break;
if( indice < total )
printf(“A nota eh: %.2f\n”, notas[indice]);else
printf(“RA naum encontrado\n”);
printf(“Entre com o RA (ou negativo para sair): ”);
scanf(“%d”, &aux);
}
![Page 127: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/127.jpg)
Vetores
Exercício :
Escreva um programa em linguagem C que lêpalavras com 4 letras e as imprime de trás para frente.Ex.:
casa -- asaclata -- atalsapo -- opas
![Page 128: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/128.jpg)
Vetores
Solução:
int main(){
char L1, L2, L3, L4;printf(“Entre com palavras de 4 letras: “);scanf(“%c%c%c%c”, &L1, &L2, &L3, &L4);printf(“%c%c%c%c”, L4, L3, L2, L1);return 0;
}
![Page 129: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/129.jpg)
Vetores
Problema:
Refaça o programa anterior para palavras ou frasescom 20, 30, e 50 caracteres.
![Page 130: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/130.jpg)
Vetores
Definição:
Um vetor é um tipo de dado utilizado para representaruma certa quantidade de variáveis do mesmo tipo.
![Page 131: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/131.jpg)
Vetores
Em Linguagem C:
tipo + identificador + [ número de variáveis ];
Onde:
• tipo: é o tipo das variáveis que devem ser criadas. Ex.: int, char, float, entre outros;
• identificador: é o nome que será utilizado para referenciar o conjunto de variáveis;
• número de variáveis: é o número de variáveis que será criado (tamanho do vetor).
![Page 132: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/132.jpg)
Vetores
Exemplos :
int notas[10];char letras[50];float pesos[100];
notas[0] = 1;scanf(“%c”, &letras[6]);notas[5 + 2] = notas[5] * pesos[2];for(i = 0; i < N; i++)
pesos[i] = 1.0;
![Page 133: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/133.jpg)
Vetores
Importante:
• O primeiro elemento de um vetor é o de índice 0 (zero).
• Num vetor de 100 elementos o último elemento é o de índice 99.
• Acessar uma posição inválida de um vetor pode fazer seu programa “Abortar”.
![Page 134: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/134.jpg)
Vetores
Exercício:
Escreva um programa em linguagem C que lê palavrascom 10 letras e as imprime de trás para frente. Utilizevetores e laços.
![Page 135: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/135.jpg)
Vetores
Solução:
#define TAM 10int main(){
char letras[TAM];int i;printf(“Entre com a frase: ”);for(i = 0; i < TAM; i++)
scanf(“%c”, &letras[i]);for(i = TAM - 1; i >= 0; i--)
printf(“%c”, letras[i]);return 0;
}
![Page 136: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/136.jpg)
Vetores
Exercício:
Escreva um programa em linguagem C que lê RA’s eas notas de no máximo 100 alunos. O programa develer e armazenar um novo RA e uma nova nota até queo usuário digite um RA negativo.
![Page 137: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/137.jpg)
VetoresSolução:
#define TAM 100int main(){
float notas[TAM];int ras[TAM], aux, indice = 0, total;printf(“Entre com o RA (ou negativo para sair): ”);scanf(“%d”, &aux);while(aux > 0){
ras[indice] = aux;printf(“Entre com a nota: ”);scanf(“%f”, ¬as[indice]);printf(“Entre com o RA (ou negativo para sair): ”);scanf(“%d”, &aux);indice++;
}return 0;
}
![Page 138: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/138.jpg)
Vetores
Exercício:
Utilizando o código do programa anterior, escreva umnovo programa que permite ao usuário consultar anota de um aluno digitando o seu RA, o programadeve rodar até que o usuário digite um RA negativo.
Obs.: O trecho de código que lê os RA’s e as notas é omesmo do programa anterior.
![Page 139: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/139.jpg)
Vetores
Solução:total = indice;printf(“Entre com o RA (ou negativo para sair): ”);scanf(“%d”, &aux);while( aux > 0 ){
for( indice = 0; indice < total; indice++ )if( ras[indice] == aux )
break;if( indice < total )
printf(“A nota eh: %.2f\n”, notas[indice]);else
printf(“RA naum encontrado\n”);printf(“Entre com o RA (ou negativo para sair): ”);scanf(“%d”, &aux);
}
![Page 140: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/140.jpg)
1
Aula Passada
Problema :
Escreva um programa em linguagem C que lê os RA’se 4 notas de no máximo 100 alunos. O programa develer e armazenar um novo RA e as suas notas até que
o usuário digite um RA negativo.
Aula Passada
Solução:
#define TAM 100
int main(){
float notas1[TAM], notas2[TAM], notas3[TAM], notas4[TAM];
int ras[TAM], aux, indice = 0, total;printf(“Entre com o RA (ou negativo para sair): ”);
scanf(“%d”, &aux);while(aux > 0)
{…
}
return 0; }
Matrizes
Problema:
Escreva um programa em linguagem C que lê os RA’se n notas de no máximo 100 alunos, onde n é definidopelo usuário. O programa deve ler e armazenar umnovo RA e as suas notas até que o usuário digite umRA negativo.
Matrizes
Definição:
Uma matriz é uma generalização multidimensional deum vetor, em outras palavras, uma matriz é um vetor
de vetores.
![Page 141: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/141.jpg)
2
Matrizes
Em Linguagem C:
tipo + identificador + [ d1 ][ d2 ] … [ dn ];
Onde:
• tipo: é o tipo das variáveis que devem ser criadas. Ex.: int, char, float, entre outros;
• identificador: é o nome que será utilizado para referenciar o conjunto de variáveis;
• d1, d2 … dn: são o número de variáveis que serão criados em cada dimensão.
Matrizes
Exemplos :
int notas[10][10];
char texto[linhas][colunas];
notas[0][0] = 1;
scanf(“%c”, &texto[6][0]);
notas[5][2] = notas[5][1] + 1;
for(i = 0; i < N; i++)
for(j = 0; j < M; j++)
notas[i][j] = 5.0;
Matrizes
Importante:
• Como nos vetores, o primeiro elemento de uma matriz é o de índice 0 (zero).
• No caso de matrizes bidimensionais, a primeira dimensão representa a linha e a segunda a coluna.
• Na memória do computador, matrizes são armazenadas de forma linear como se fossem vetores.
• Durante a compilação o compilador se encarrega de determinar qual o verdadeiro endereço dos campos da matriz.
Matrizes
Exemplo:
IHG
FED
CBA
I
H
G
F
E
D
C
B
A
![Page 142: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/142.jpg)
3
Matrizes
Exercício:
Escreva um programa em linguagem C que lê os RA’se n notas de no máximo 100 alunos, onde n é definidopelo usuário. O programa deve ler e armazenar um
novo RA e as suas notas até que o usuário digite umRA negativo.
Matrizes
Solução:float notas[TAM][TAM];
int ra[TAM], n, i, j;printf("Entre com o numero de notas: ");
scanf("%d", &n);for (i = 0; i < TAM; i++)
{printf("Entre com o RA (ou negativo para sair): ");
scanf("%d", &ra[i]);if ( ra[i] < 0 )
break;
for (j = 0; j < n; j++){
printf("Entre com a nota %d: ", j + 1);scanf("%f", ¬as[i][j]);
}}
Matrizes
Exercício:
Escreva um programa em linguagem C que solicita aousuário duas matrizes A e B de dimensões n e m(definidas pelo usuário) e imprime a matriz resultante
C da soma de A e B.
Matrizes
Solução:int A[TAM][TAM], B[TAM][TAM], C[TAM][TAM], i, j, n, m;
printf("Entre com as dimensoes das matrizes ");
scanf("%d%d", &n, &m);printf("Entre com os elementos da primeira matriz:\n");
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
scanf("%d", &A[i][j]);
printf("Entre com os elementos da segunda matriz:\n");
for (i = 0; i < n; i++)for (j = 0; j < m; j++)
scanf("%d", &B[i][j]);
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
C[i][j] = A[i][j] + B[i][j];printf("A matriz resultante eh:\n");
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
printf("%d\t", C[i][j]);
![Page 143: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/143.jpg)
1
Relembrando
Memória do Computador :
Podemos entender a memória de um computadorcomo um conjunto de células que armazenam
informações. Cada célula da memória possui um endereço (número inteiro de 32 bits).
1024
1025
1026
1030
1029
1028
1027
Relembrando
Memória do Computador :
Quando criamos em nosso programa uma variável deum determinado tipo, o Sistema Operacional, ao
executar o nosso programa reserva uma posição dememória. Mas ao invés de utilizarmos o endereço davariável como referência, fazemos uso do
identificador(nome) que atribuímos a variável.
10
1025
x
1028
1027int x = 10;
Ponteiros
Definição:
Ponteiros ou Apontadores são tipos de variáveis quearmazenam endereços de memória, possivelmente,endereços de memória de outras variáveis.
Em Linguagem C:
tipo *identificador;
Ponteiros
Exemplos :
int *nota;
char *texto;
float *peso;
double *media;
![Page 144: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/144.jpg)
2
Ponteiros
Operadores de Ponteiros:
Existem dois “novos” operadores que são utilizadoscom ponteiros em C :
• & - é utilizado para obter o endereço de uma variável.
• * - é utilizado para obter o conteúdo do endereço apontado.
int *ptr, nota = 10;
ptr = ¬a;
nota = *ptr;
Ponteiros
Desenho para ficar mais fácil:
10
?
2356
…
1025
x
ptr
1027
int x = 10;int *ptr;
ptr = &x;*ptr = 50;
50
1026
…
1025
x
ptr
Ponteiros
Qual é a saída ?
int x = 10;
int *ptr;
ptr = &x;
*ptr = *ptr * x;
printf(“%d”, *ptr);
printf(“%d”, x);
printf(“%d”, ptr);
Ponteiros
Qual é a saída ?
int x[3] = {1, 2, 3};
int *p;
p = x;
p[0] = p[1] = p[2];
printf("%d\n", p[1]);
printf("%d\n", x[1]);
printf("%d\n", p);
![Page 145: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/145.jpg)
3
Ponteiros
Exercício:
Escreva um programa em linguagem C que solicita aousuário os pesos e alturas de no máximo 100 pessoas.Em seguida o seu programa deve solicitar ao usuárioque escolha entre calcular o Desvio Padrão dospesos ou das alturas. O seu programa deve imprimir oresultado do cálculo do desvio padrão.
P.s.: Seu programa deveria ter no máximo 4 laços (for, while, etc…)
Ponteiros
Desvio Padrão:
1. Calcule a média dos valores2. Calcule o quadrado da diferença de cada valor em
relação a média.3. Some todos os quadrados.4. Divida o valor da soma pelo número de elementos
menos um.5. Tire a raiz quadrada do resultado.
Ponteiros
Média :
media = 0;
for( i = 0; i < n; i++)
media += vetor[i];
media = media / n;
Ponteiros
Variância :
dif = 0;
for( i = 0; i < n; i++)
dif += (vetor[i] – media) * (vetor[i] – media);
dif = dif / (n – 1);
Desvio Padrão:
dif = sqrt(dif);
![Page 146: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/146.jpg)
Procedimentos e FunçõesA aula de MC está ficando muito chata por quê ?
1. Eu não entendo mais nada do que o professor fala.
2. Eu não consigo resolver os exercícios de laboratório e os exemplos de aula.
3. Não consigo enxergar para que servem as coisas que eu aprendo.
4. Os programas ficaram muito maiores e bem mais difíceis.
5. Tem mais de uma semana que ninguém deixa um recado para mim no meu Orkut.
6. Todas as anteriores.
![Page 147: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/147.jpg)
Procedimentos e FunçõesProblema :
Escreva um programa em linguagem C que solicitadois valores (n, k) ao usuário e calcula:
a) O número de permutações Pnb) O número de arranjos An,kc) O número de combinações Cn,k
Onde:
Pn = n!An,k = n! / (n - k)!Cn,k = n! / (k! * (n – k)!)
![Page 148: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/148.jpg)
Procedimentos e Funções
Problema:
Quantas vezes vamos escrever o código que calcula ofatorial de um número?
fat = 1;for( i = n; i > 1; i-- )
fat *= i;
![Page 149: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/149.jpg)
Procedimentos e Funções
Definição :
Procedimentos são estruturas que agrupam umconjunto de comandos, que são executados quando oprocedimento é chamado.
Funções são semelhantes aos procedimentos, excetoque uma função sempre retorna um valor.
![Page 150: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/150.jpg)
Procedimentos e Funções
Desenho para ficar mais fácil :
Programa
Procedimento
Instrução
Instrução
Procedimento
Instrução
Instrução
Instrução
Instrução
Instrução
![Page 151: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/151.jpg)
Procedimentos e Funções
Em C:
tipo NomeDaFuncao( lista_de_parâmetros ){
instruções;}
Lista de Parâmetros:
tipo identificador, tipo identificador …
![Page 152: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/152.jpg)
Procedimentos e Funções
Exemplo :
int SomaDoisNumeros(int A, int B){
return A + B;}
void ImprimeTexto(){
printf(“Ola Mundo”);}
![Page 153: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/153.jpg)
Procedimentos e Funções
Exemplo :
int main(){
int r;r = SomaDoisNumeros(30, 50);ImprimeTexto();return 0;
}
![Page 154: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/154.jpg)
Procedimentos e Funções
Exercício:
Escreva um procedimento ou função em linguagem Cque recebe como parâmetros dois valores A e B ecalcula o valor de AB. Seu procedimento ou funçãodeve se chamar pot.
![Page 155: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/155.jpg)
Procedimentos e Funções
Potência :
double pot(double A, double B){
double ret = 1;int i;for( i = 0; i < B; i++ )
ret *= A;
return ret;}
![Page 156: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/156.jpg)
Procedimentos e Funções
Exercício:
Escreva um procedimento ou função que calcula ofatorial de um número inteiro.
![Page 157: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/157.jpg)
Procedimentos e Funções
Fatorial :
int Fatorial(int n){
int fat = 1;int i;for( i = n; i > 1; i-- )
fat *= i;
return fat;}
![Page 158: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/158.jpg)
Procedimentos e Funções
Exercício:
Escreva um programa em linguagem C que solicitadois valores (n, k) ao usuário e calcula:
a) O número de permutações Pnb) O número de arranjos An,kc) O número de combinações Cn,k
Onde:
Pn = n!An,k = n! / (n - k)!Cn,k = n! / (k! * (n – k)!)
![Page 159: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/159.jpg)
1
Procedimentos e Funções
A aula de MC está ficando muito chata por quê ?
1. Eu não entendo mais nada do que o professor fala.
2. Eu não consigo resolver os exercícios de laboratório e os exemplos de aula.
3. Não consigo enxergar para que servem as coisas que eu aprendo.
4. Os programas ficaram muito maiores e bem mais difíceis.
5. Tem mais de uma semana que ninguém deixa um recado para mim no meu Orkut.
6. Todas as anteriores.
Procedimentos e FunçõesProblema :
Escreva um programa em linguagem C que solicitadois valores (n, k) ao usuário e calcula:
a) O número de permutações Pnb) O número de arranjos An,kc) O número de combinações Cn,k
Onde:
Pn = n!An,k = n! / (n - k)!Cn,k = n! / (k! * (n – k)!)
Procedimentos e Funções
Problema:
Quantas vezes vamos escrever o código que calcula o
fatorial de um número?
fat = 1;
for( i = n; i > 1; i-- )
fat *= i;
Procedimentos e Funções
Definição :
Procedimentos são estruturas que agrupam umconjunto de comandos, que são executados quando oprocedimento é chamado.
Funções são semelhantes aos procedimentos, excetoque uma função sempre retorna um valor.
![Page 160: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/160.jpg)
2
Procedimentos e Funções
Desenho para ficar mais fácil :
Programa
Procedimento
Instrução
Instrução
Procedimento
Instrução
Instrução
Instrução
Instrução
Instrução
Procedimentos e Funções
Em C:
tipo NomeDaFuncao( lista_de_parâmetros )
{
instruções;
}
Lista de Parâmetros:
Procedimentos e Funções
Exemplo :
int SomaDoisNumeros(int A, int B)
{
return A + B;
}
void ImprimeTexto()
{
printf(“Ola Mundo”);
Procedimentos e Funções
Exemplo :
int main()
{
int r;
r = SomaDoisNumeros(30, 50);
ImprimeTexto();
return 0;
}
![Page 161: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/161.jpg)
3
Procedimentos e Funções
Exercício:
Escreva um procedimento ou função em linguagem Cque recebe como parâmetros dois valores A e B ecalcula o valor de AB. Seu procedimento ou função
deve se chamar pot.
Procedimentos e Funções
Potência :
double pot(double A, double B)
{
double ret = 1;
int i;
for( i = 0; i < B; i++ )
ret *= A;
return ret;
}
Procedimentos e Funções
Exercício:
Escreva um procedimento ou função que calcula ofatorial de um número inteiro.
Procedimentos e Funções
Fatorial :
int Fatorial(int n)
{
int fat = 1;
int i;
for( i = n; i > 1; i-- )
fat *= i;
return fat;
![Page 162: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/162.jpg)
4
Procedimentos e Funções
Exercício:
Escreva um programa em linguagem C que solicitadois valores (n, k) ao usuário e calcula:
a) O número de permutações Pn
b) O número de arranjos An,k
c) O número de combinações Cn,k
Onde:
Pn = n!An,k = n! / (n - k)!Cn,k = n! / (k! * (n – k)!)
![Page 163: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/163.jpg)
Procedimentos e FunçõesProblema 1:
Escreva um procedimento ou função em linguagem Cque troca dois valores A e B.
Problema 2:
Escreva um procedimento ou função em linguagem Cque retorna a soma e o produto de dois valores A e B.
![Page 164: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/164.jpg)
Procedimentos e Funções
Passagem de Parâmetros:
• Passagem por Valor: Quando a função é chamada o parâmetro passado por valor é copiado, ou seja, o valor da variável utilizada como parâmetro não é alterado.
• Passagem por Referência: Quando a função é chamada o endereço do parâmetro passado por referência é atribuído à um ponteiro, ou seja, qualquer alteração no conteúdo apontado será refletida no conteúdo da variável utilizada como parâmetro.
![Page 165: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/165.jpg)
Procedimentos e FunçõesExemplo :
void FuncaoInutil(int A, int* B){
A = 1;*B = 2;
}
int main(){
int X = 0, Y = 0;FuncaoInutil(X, &Y);printf(“%d %d”, X, Y);return 0;
}
![Page 166: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/166.jpg)
Procedimentos e FunçõesExercício 1:
Escreva um procedimento ou função em linguagem Cque troca dois valores A e B.
Exercício 2:
Escreva um procedimento ou função em linguagem Cque recebe dois valores A e B, calcula a soma eguarda o resultado em A.
Exercício 3:
Escreva um procedimento ou função em linguagem Cque retorna a soma e o produto de dois valores A e B.
![Page 167: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/167.jpg)
Procedimentos e Funções
Solução:
void troca(int* A, int* B){
int aux;aux = *A;*A = *B;*B = aux;
}
![Page 168: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/168.jpg)
Procedimentos e Funções
Solução:
void SomaEmA(int* A, int B){
*A = *A + B;}
![Page 169: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/169.jpg)
Procedimentos e Funções
Solução:
void SomaProduto(int A, int B, int* soma, int* prod){
*soma = A + B;*prod = A * B;
}
![Page 170: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/170.jpg)
Procedimentos e Funções
Exercício :
Escreva um procedimento ou função em linguagem Cque recebe um vetor de números inteiros V detamanho 100, e um inteiro N, em seguida você deveimprimir os N primeiros valores do vetor.
![Page 171: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/171.jpg)
Procedimentos e Funções
Solução:
void ImprimeVetor(int V[100], int N){
int i;for (i = 0; i < N; i++)
printf(“%d ”, V[i]);}
![Page 172: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/172.jpg)
Procedimentos e Funções
Exercício :
Escreva um procedimento ou função em linguagem Cque recebe um vetor de números inteiros V detamanho 100, e um inteiro N por referência, emseguida você deve ler valores inteiros da entrada atéque o usuário digite -1. Ao final todos os valoresdiferentes de -1 devem estar armazenados em V e ototal de valores deve estar em N.
![Page 173: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/173.jpg)
Procedimentos e Funções
Solução:
void LeVetor(int V[100], int* N){
int aux;*N = 0;scanf(“%d”, &aux);while (aux != -1){
V[*N] = aux;(*N)++;scanf(“%d”, &aux);
}}
![Page 174: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/174.jpg)
Procedimentos e Funções
Exercício :
Escreva uma função em linguagem C que recebe umvetor de números inteiros V de tamanho 100, uminteiro N que contém o número de posiçõespreenchidas de V, e um número inteiro X. A suafunção deve retornar 1 se V contém o valor X e zerocaso contrário.
![Page 175: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/175.jpg)
Procedimentos e Funções
Algoritmo :
• Percorra todos os valores do Vetor• Compare cada valor com o número procurado• Se um dos valores for igual então retorne 1• Senão continue procurando• Se chegar ao fim da busca retorne zero, porque o
valor não foi encontrado.
![Page 176: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/176.jpg)
Procedimentos e Funções
Busca Linear:
int BuscaLinear(int V[100], int N, int X){
int i;for (i = 0; i < N; i++){
if( V[i] == X )return 1;
}return 0;
}
![Page 177: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/177.jpg)
Procedimentos e Funções
Problema :
E se os vetores do exercício anterior estivessemsempre ordenados? Seria necessário verificar todos oselementos para determinar se X está em V?
![Page 178: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/178.jpg)
Procedimentos e Funções
Algoritmo :
• Marque os extremos direito (dir) e esquerdo (esq) do vetor.
• Compare o valor procurado com o valor central (meio)
• Se for igual retorne saia do laço.• Senão, se o valor for maior que o valor de meio,
então esq recebe meio mais 1.• Senão dir recebe meio menos 1.• Atualize o valor do meio.• Repita enquanto esq for menor que dir.• Ao sair do laço se valor for igual a meio retorne 1,
senão retorne 0.
![Page 179: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/179.jpg)
Procedimentos e Funções
Busca Binária :X = 3; esq = 0; dir = N – 1; meio = (esq + dir)/2;
esq meio dir
1 2 7 15 23 56 57 58 70 72 78
meio diresq
1 2 7 15 23 56 57 58 70 72 78
1 2 7 15 23 56 57 58 70 72 78
esq meio dir
1 2 7 15 23 56 57 58 70 72 78
esq meio dir
![Page 180: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/180.jpg)
Procedimentos e Funções
Busca Binária:esq = 0; dir = N - 1; meio = (esq + dir) / 2;while (esq < dir){
if ( X == V[meio] )break;
else if ( X > V[meio] )esq = meio + 1;
elsedir = meio - 1;
meio = (esq + dir) / 2;}if ( X == V[meio] )
return 1;return 0;
![Page 181: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/181.jpg)
Procedimentos e Funções
Problema :
Não há como garantir que o usuário sempre digitaráum vetor ordenado. E agora? Como devemos fazerpara que seja possível utilizar a busca binária sempre?
![Page 182: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/182.jpg)
Procedimentos e Funções
Exercício :
Escreva uma função em linguagem C que retorna aposição no vetor (não é o valor) do menor elemento. Afunção recebe como parâmetros um vetor V de 100elementos e um inteiro N que indica o número deelementos de V.
![Page 183: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/183.jpg)
Procedimentos e Funções
Solução:
int MenorElemento(int V[100], int N){
int i, menor = 0;
for(i = 1; i < N; i++)if(V[i] < V[maior])
menor = i;
return menor;}
![Page 184: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/184.jpg)
Procedimentos e Funções
Algoritmo :
• Remova o menor elemento do vetor (V) e insira na primeira posição livre do vetor auxiliar (Ordenado).
• Repita este processo até acabarem os elementos do vetor V.
![Page 185: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/185.jpg)
Procedimentos e Funções
Ordenação por Seleção (Selection Sort) :N = 11; M = 0;
3 20 78 15 56 23 2 1 19 28 6
N = 10; M = 1;
3 20 78 15 56 23 2 6 19 28
1
N = 9; M = 2;
3 20 78 15 56 23 28 6 19
58 2
![Page 186: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/186.jpg)
Procedimentos e Funções
Ordenação por Seleção (Selection Sort) :
void SelectionSort(int V[100], int N, int Ordenado[100]){
int M = 0, i;while(N > 0){
i = MenorElemento(V, N);Ordenado[M] = V[i];V[i] = V[N - 1];N--;M++;
}}
![Page 187: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/187.jpg)
Procedimentos e Funções
Problema :
Como ordenar um vetor sem alterar os dados do vetororiginal V ?
![Page 188: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/188.jpg)
Procedimentos e Funções
Algoritmo :
• Percorra o vetor (V)• Para cada elemento (aux) de V, insira uma cópia
de aux na primeira posição livre do vetor auxiliar (Ordenado).
• Se o valor de aux for menor que do elemento anterior, então troque aux com o anterior.
• Senão saia do laço.• Repita as trocas até que aux chegue na primeira
posição.
![Page 189: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/189.jpg)
Procedimentos e Funções
Ordenação por Inserção (Insertion Sort) :
2 15 1 3 6 23 57M = 0; i = 0;
2
2 15 1 3 6 23 57M = 1; i = 1;
2 15
2 15
2 15 1 3 6 23 57M = 2; i = 2;
2 15 1
2 1 15
1 2 15
![Page 190: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/190.jpg)
Procedimentos e Funções
Ordenação por Inserção (Insertion Sort) :
2 15 1 3 6 23 57M = 3; i = 3;
1 2 15 3
1 2 3 15
1 2 3 15
2 15 1 3 6 23 57M = 4; i = 4;
1 2 3 15 6
1 2 3 6 15
1 2 3 6 15
![Page 191: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/191.jpg)
Procedimentos e Funções
Solução :void InsertionSort( int V[100], int N, int Ordenado[100]){
int M = 0, i, j, k;for (i = 0; i < N; i++){
Ordenado[M] = V[i]; k = M;for (j = M - 1; j >= 0; j--)
if (Ordenado[k] < Ordenado[j] )Troca(&Ordenado[k--], &Ordenado[j]);
elsebreak;
M++;}
}
![Page 192: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/192.jpg)
Procedimentos e Funções
Problema :
Como ordenar um vetor sem o uso de um vetor auxiliar(Ordenado) ?
![Page 193: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/193.jpg)
Procedimentos e Funções
Algoritmo :
• Para cada elemento i do vetor V.• Se o valor de i + 1 for menor que i• Então troque i + 1 com i.• Senão incremente o valor de i.• Repita este processo até i chegue ao fim do vetor.• Repita todo o processo até que todos os
elementos do vetor tenham sido comparados.
![Page 194: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/194.jpg)
Procedimentos e Funções
Ordenação por Troca (Bubble Sort) :
57 30 8 15 56 23 2i = 0;
30 57 8 15 56 23 2i = 1;
30 8 57 15 56 23 2i = 2;
30 8 15 57 56 23 2i = 3;
30 8 15 56 57 23 2i = 4;
30 8 15 56 23 57 2i = 5;
30 8 15 56 23 2 57
30 8 15 56 23 2 57
i = 6;
i = 0;
8 30 15 56 23 2 57i = 1;
![Page 195: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/195.jpg)
Procedimentos e Funções
Solução :
void BubbleSort( int V[100], int N){
int j, i;for ( i = 0; i < N - 1; i++ ){
for ( j = 0; j < N - 1; j++ )if ( V[j] < V[j + 1] )
Troca( &V[j], &V[j + 1] );}
}
![Page 196: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/196.jpg)
1
Procedimentos e Funções
Problema 1:
Escreva um procedimento ou função em linguagem Cque troca dois valores A e B.
Problema 2:
Escreva um procedimento ou função em linguagem Cque retorna a soma e o produto de dois valores A e B.
Procedimentos e Funções
Passagem de Parâmetros:
• Passagem por Valor: Quando a função é chamada o parâmetro passado por valor é copiado, ou seja, o valor da variável utilizada como parâmetro não é alterado.
• Passagem por Referência: Quando a função é chamada o endereço do parâmetro passado por referência é atribuído à um ponteiro, ou seja, qualquer alteração no conteúdo apontado será refletida no conteúdo da variável utilizada como parâmetro.
Procedimentos e Funções
Exemplo :
void FuncaoInutil(int A, int* B)
{
A = 1;*B = 2;
}
int main()
{
int X = 0, Y = 0;FuncaoInutil(X, &Y);
printf(“%d %d”, X, Y);return 0;
}
Procedimentos e Funções
Exercício 1:
Escreva um procedimento ou função em linguagem Cque troca dois valores A e B.
Exercício 2:
Escreva um procedimento ou função em linguagem Cque recebe dois valores A e B, calcula a soma eguarda o resultado em A.
Exercício 3:
Escreva um procedimento ou função em linguagem Cque retorna a soma e o produto de dois valores A e B.
![Page 197: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/197.jpg)
2
Procedimentos e Funções
Solução:
void troca(int* A, int* B)
{
int aux;
aux = *A;
*A = *B;
*B = aux;
}
Procedimentos e Funções
Solução:
void SomaEmA(int* A, int B)
{
*A = *A + B;
}
Procedimentos e Funções
Solução:
void SomaProduto(int A, int B, int* soma, int* prod)
{
*soma = A + B;
*prod = A * B;
}
Procedimentos e Funções
Exercício :
Escreva um procedimento ou função em linguagem Cque recebe um vetor de números inteiros V detamanho 100, e um inteiro N, em seguida você deve
imprimir os N primeiros valores do vetor.
![Page 198: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/198.jpg)
3
Procedimentos e Funções
Solução:
void ImprimeVetor(int V[100], int N)
{
int i;
for (i = 0; i < N; i++)
printf(“%d ”, V[i]);
}
Procedimentos e Funções
Exercício :
Escreva um procedimento ou função em linguagem Cque recebe um vetor de números inteiros V detamanho 100, e um inteiro N por referência, em
seguida você deve ler valores inteiros da entrada atéque o usuário digite -1. Ao final todos os valoresdiferentes de -1 devem estar armazenados em V e o
total de valores deve estar em N.
Procedimentos e Funções
Solução:
void LeVetor(int V[100], int* N)
{
int aux;
*N = 0;
scanf(“%d”, &aux);
while (aux != -1)
{
V[*N] = aux;
(*N)++;
scanf(“%d”, &aux);
}
}
Procedimentos e Funções
Exercício :
Escreva uma função em linguagem C que recebe umvetor de números inteiros V de tamanho 100, uminteiro N que contém o número de posições
preenchidas de V, e um número inteiro X. A suafunção deve retornar 1 se V contém o valor X e zerocaso contrário.
![Page 199: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/199.jpg)
4
Procedimentos e Funções
Algoritmo :
• Percorra todos os valores do Vetor• Compare cada valor com o número procurado• Se um dos valores for igual então retorne 1
• Senão continue procurando• Se chegar ao fim da busca retorne zero, porque o
valor não foi encontrado.
Procedimentos e Funções
Busca Linear:
int BuscaLinear(int V[100], int N, int X)
{
int i;
for (i = 0; i < N; i++)
{
if( V[i] == X )
return 1;
}
return 0;
}
Procedimentos e Funções
Problema :
E se os vetores do exercício anterior estivessemsempre ordenados? Seria necessário verificar todos oselementos para determinar se X está em V?
Procedimentos e Funções
Algoritmo :
• Marque os extremos direito (dir) e esquerdo (esq) do vetor.
• Compare o valor procurado com o valor central (meio)
• Se for igual retorne saia do laço.• Senão, se o valor for maior que o valor de meio,
então esq recebe meio mais 1.• Senão dir recebe meio menos 1.• Atualize o valor do meio.• Repita enquanto esq for menor que dir.• Ao sair do laço se valor for igual a meio retorne 1,
senão retorne 0.
![Page 200: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/200.jpg)
5
Procedimentos e Funções
Busca Binária :X = 3; esq = 0; dir = N – 1; meio = (esq + dir)/2;
727058575623 7815721
esq meio dir
727058575623 7815721
esq meio dir
727058575623 7815721
esq meio dir
727058575623 7815721
esq meio dir
Procedimentos e Funções
Busca Binária:esq = 0; dir = N - 1; meio = (esq + dir) / 2;
while (esq < dir)
{
if ( X == V[meio] )
break;
else if ( X > V[meio] )
esq = meio + 1;
else
dir = meio - 1;
meio = (esq + dir) / 2;
}
if ( X == V[meio] )
return 1;
return 0;
Procedimentos e Funções
Problema :
Não há como garantir que o usuário sempre digitaráum vetor ordenado. E agora? Como devemos fazerpara que seja possível utilizar a busca binária sempre?
Procedimentos e Funções
Exercício :
Escreva uma função em linguagem C que retorna aposição no vetor (não é o valor) do menor elemento. Afunção recebe como parâmetros um vetor V de 100
elementos e um inteiro N que indica o número deelementos de V.
![Page 201: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/201.jpg)
6
Procedimentos e Funções
Solução:
int MenorElemento(int V[100], int N)
{
int i, menor = 0;
for(i = 1; i < N; i++)
if(V[i] < V[maior])
menor = i;
return menor;
}
Procedimentos e Funções
Algoritmo :
• Remova o menor elemento do vetor (V) e insira na primeira posição livre do vetor auxiliar (Ordenado).
• Repita este processo até acabarem os elementos do vetor V.
Procedimentos e Funções
Ordenação por Seleção (Selection Sort) :
2819122356 61578203
28196223561578203
1
N = 11; M = 0;
N = 10; M = 1;
1962823561578203
258
N = 9; M = 2;
Procedimentos e Funções
Ordenação por Seleção (Selection Sort) :
void SelectionSort(int V[100], int N, int Ordenado[100])
{
int M = 0, i;
while(N > 0)
{
i = MenorElemento(V, N);
Ordenado[M] = V[i];
V[i] = V[N - 1];
N--;
M++;
}
}
![Page 202: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/202.jpg)
7
Procedimentos e Funções
Problema :
Como ordenar um vetor sem alterar os dados do vetororiginal V ?
Procedimentos e Funções
Algoritmo :
• Percorra o vetor (V)• Para cada elemento (aux) de V, insira uma cópia
de aux na primeira posição livre do vetor auxiliar (Ordenado).
• Se o valor de aux for menor que do elemento anterior, então troque aux com o anterior.
• Senão saia do laço.• Repita as trocas até que aux chegue na primeira
posição.
Procedimentos e Funções
Ordenação por Inserção (Insertion Sort) :
5723631152
2
5723631152
152
M = 0; i = 0;
M = 1; i = 1;
152
5723631152
1152
M = 2; i = 2;
1512
1521
Procedimentos e Funções
Ordenação por Inserção (Insertion Sort) :
5723631152
31521
M = 3; i = 3;
15321
15321
5723631152
615321
M = 4; i = 4;
156321
156321
![Page 203: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/203.jpg)
8
Procedimentos e Funções
Solução :void InsertionSort( int V[100], int N, int Ordenado[100])
{
int M = 0, i, j, k;
for (i = 0; i < N; i++)
{
Ordenado[M] = V[i]; k = M;
for (j = M - 1; j >= 0; j--)
if (Ordenado[k] < Ordenado[j] )
Troca(&Ordenado[k--], &Ordenado[j]);
else
break;
M++;
}
}
Procedimentos e Funções
Problema :
Como ordenar um vetor sem o uso de um vetor auxiliar(Ordenado) ?
Procedimentos e Funções
Algoritmo :
• Para cada elemento i do vetor V.• Se o valor de i + 1 for menor que i• Então troque i + 1 com i.
• Senão incremente o valor de i.• Repita este processo até i chegue ao fim do vetor.• Repita todo o processo até que todos os
elementos do vetor tenham sido comparados.
Procedimentos e Funções
Ordenação por Troca (Bubble Sort) :
223561583057
223561585730
i = 0;
i = 1;
223561557830i = 2;
572235615830i = 0;
223565715830i = 3;
223575615830i = 4;
257235615830i = 5;
572235615830i = 6;
572235615308i = 1;
![Page 204: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/204.jpg)
9
Procedimentos e Funções
Solução :
void BubbleSort( int V[100], int N)
{
int j, i;
for ( i = 0; i < N - 1; i++ )
{
for ( j = 0; j < N - 1; j++ )
if ( V[j] < V[j + 1] )
Troca( &V[j], &V[j + 1] );
}
}
![Page 205: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/205.jpg)
1
Cadeias de Caracteres
Problema :
Escreva um programa em linguagem C que lê umapalavra da entrada e imprime o número de caracteresdesta palavra.
Cadeias de Caracteres
Dúvida :
Quando parar de ler os caracteres da palavra?
Cadeias de Caracteres
Definição :
Cadeias de caracteres (Strings) são seqüências deletras, números ou símbolos onde o último caracter éo caracter ‘\0’ (da mesma família do ‘\n’, ‘\t’ ... ).
Na linguagem C utilizamos vetores do tipo char paraarmazenar cadeias de caracteres. Ex.:
char vetor[10] = “casa”;
Cadeias de Caracteres
Como usar :
Par ler ou para imprimir na tela uma cadeia decaracteres, utilizamos %s como parâmetro dasfunções scanf e printf. Ex.:
char vetor[10];
printf(“Entre com seu nome: ”);
scanf(“%s”, vetor);
printf(“O seu nome eh: %s”, vetor);
A função scanf, quando utilizada com o parâmetro %s
lê todos os caracteres até encontrar um caracter iguala espaço ou fim de linha.
![Page 206: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/206.jpg)
2
Cadeias de Caracteres
Pergunta :
Qual o tamanho do menor vetor que devemos declarar para armazenar uma cadeia de caracteres com 10letras?
Cadeias de Caracteres
Exercício :
Escreva um programa em linguagem C que lê umapalavra da entrada e imprime o número de caracteresdesta palavra.
Cadeias de Caracteres
Solução :
#include <stdio.h>int main(){
char vetor[100];int i, n;
printf("Entre com a palavra: ");scanf("%s", vetor);
i = 0;n = 0;
while(vetor[i++] != '\0')n++;
printf("O numero de caracteres eh %d", n);
return 0;}
Cadeias de Caracteres
Funções Importantes (string.h):
• strlen – Retorna o números de caracteres da cadeia de caracteres, sem contar o ‘\0’. Ex.:
strlen(“casa") == 4
• strcmp– Compara caracter a caracter duas cadeias e retorna o resultado dessa comparação. Ex.:
strcmp(“casa“, “carro”) == 1
strcmp(“casa“, “casa”) == 0
strcmp(“carro”, “casa") == -1
![Page 207: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/207.jpg)
3
Cadeias de Caracteres
Pergunta :
Qual o valor é retornado na chamada da seguintefunção:
strcmp(“Casa“, “carro”) == ?
Cadeias de Caracteres
Funções Importantes (string.h):
• strcmpi – Compara caracter a caracter duas cadeias ignorando se as letras são maiúsculas ou minúsculas, e retorna o resultado dessa comparação. Ex.:
strcmpi(“Casa“, “carro”) == 1
strcmpi(“Casa“, “cASa”) == 0
strcmpi(“caRro”, “casA") == -1
• strcpy – Copia uma string para dentro de outra. Ex.:
strcpy(vetor, “carro”);
strcpy(vetor2, vetor);
Cadeias de Caracteres
Funções Importantes (string.h):
• strcat – Concatena duas strings, a primeira string recebe o seu conteúdo seguido do conteúdo da segunda string. Ex.:
strcpy(vetor, “uva + ”);
strcat(vetor, “banana + ”); strcat(vetor, “pera");
Cadeias de Caracteres
Exercício :
Escreva uma função em linguagem C que recebe umacadeia de caracteres de tamanho máximo 100, eretorna 1 se esta cadeia é uma palíndrome e zerocaso contrário.
P.s.: Uma palavra é dita ser palíndrome se aseqüência de seus caracteres da esquerda para adireita é igual a seqüência de seus caracteres dadireita para a esquerda. Ex.:
arara
![Page 208: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/208.jpg)
4
Cadeias de Caracteres
Solução :
int palindrome(char palavra[100])
{char aux[100];
int i, n;
n = strlen(palavra);for( i = 0; i < n; i++ )
aux[i] = palavra[n – i - 1];
aux[n] = ‘\0’;if( strcmp(palavra, aux) == 0 )
return 1;
elsereturn 0;
}
Cadeias de Caracteres
Exercício :
Escreva um procedimento em linguagem C querecebe 3 cadeia de caracteres de tamanho máximo50, e as imprime na tela em ordem alfabética.
Cadeias de Caracteres
Solução :
void ordem(char a[50], char b[50], char c[50]){
if( strcmp(a, b) > 0 )
{if(strcmp(b, c) > 0 )
printf("%s,%s,%s", a,b,c);
else{
if( strcmp(a, c) > 0 )
printf("%s,%s,%s", a,c,b);else
printf("%s,%s,%s", c,a,b);
} continua no próximo slide
Cadeias de Caracteres
Continuação :
}
else
{if(strcmp(c, a) > 0 )
printf("%s,%s,%s", b,c,a);
else{
if(strcmp(b, c) > 0 )
printf("%s,%s,%s", b,a,c); else
printf("%s,%s,%s", c,b,a);}
}
}
![Page 209: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/209.jpg)
Cadeias de CaracteresProblema :
Escreva um programa em linguagem C que lê umapalavra da entrada e imprime o número de caracteresdesta palavra.
![Page 210: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/210.jpg)
Cadeias de CaracteresDúvida :
Quando parar de ler os caracteres da palavra?
![Page 211: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/211.jpg)
Cadeias de CaracteresDefinição :
Cadeias de caracteres (Strings) são seqüências deletras, números ou símbolos onde o último caracter éo caracter ‘\0’ (da mesma família do ‘\n’, ‘\t’ ... ).
Na linguagem C utilizamos vetores do tipo char paraarmazenar cadeias de caracteres. Ex.:
char vetor[10] = “casa”;
![Page 212: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/212.jpg)
Cadeias de CaracteresComo usar :
Par ler ou para imprimir na tela uma cadeia decaracteres, utilizamos %s como parâmetro dasfunções scanf e printf. Ex.:
char vetor[10];printf(“Entre com seu nome: ”);scanf(“%s”, vetor);printf(“O seu nome eh: %s”, vetor);
A função scanf, quando utilizada com o parâmetro %slê todos os caracteres até encontrar um caracter iguala espaço ou fim de linha.
![Page 213: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/213.jpg)
Cadeias de CaracteresPergunta :
Qual o tamanho do menor vetor que devemos declarar para armazenar uma cadeia de caracteres com 10letras?
![Page 214: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/214.jpg)
Cadeias de CaracteresExercício :
Escreva um programa em linguagem C que lê umapalavra da entrada e imprime o número de caracteresdesta palavra.
![Page 215: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/215.jpg)
Cadeias de CaracteresSolução :
#include <stdio.h>int main(){
char vetor[100];int i, n;printf("Entre com a palavra: ");scanf("%s", vetor);i = 0;n = 0;while(vetor[i++] != '\0')
n++;printf("O numero de caracteres eh %d", n);return 0;
}
![Page 216: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/216.jpg)
Cadeias de CaracteresFunções Importantes (string.h):
• strlen – Retorna o números de caracteres da cadeia de caracteres, sem contar o ‘\0’. Ex.:
strlen(“casa") == 4
• strcmp– Compara caracter a caracter duas cadeias e retorna o resultado dessa comparação. Ex.:
strcmp(“casa“, “carro”) == 1strcmp(“casa“, “casa”) == 0strcmp(“carro”, “casa") == -1
![Page 217: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/217.jpg)
Cadeias de CaracteresPergunta :
Qual o valor é retornado na chamada da seguintefunção:
strcmp(“Casa“, “carro”) == ?
![Page 218: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/218.jpg)
Cadeias de CaracteresFunções Importantes (string.h):
• strcmpi – Compara caracter a caracter duas cadeias ignorando se as letras são maiúsculas ou minúsculas, e retorna o resultado dessa comparação. Ex.:
strcmpi(“Casa“, “carro”) == 1strcmpi(“Casa“, “cASa”) == 0strcmpi(“caRro”, “casA") == -1
• strcpy – Copia uma string para dentro de outra. Ex.:
strcpy(vetor, “carro”);strcpy(vetor2, vetor);
![Page 219: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/219.jpg)
Cadeias de CaracteresFunções Importantes (string.h):
• strcat – Concatena duas strings, a primeira string recebe o seu conteúdo seguido do conteúdo da segunda string. Ex.:
strcpy(vetor, “uva + ”);strcat(vetor, “banana + ”); strcat(vetor, “pera");
![Page 220: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/220.jpg)
Cadeias de CaracteresExercício :
Escreva uma função em linguagem C que recebe umacadeia de caracteres de tamanho máximo 100, eretorna 1 se esta cadeia é uma palíndrome e zerocaso contrário.
P.s.: Uma palavra é dita ser palíndrome se aseqüência de seus caracteres da esquerda para adireita é igual a seqüência de seus caracteres dadireita para a esquerda. Ex.:
arara
![Page 221: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/221.jpg)
Cadeias de CaracteresSolução :
int palindrome(char palavra[100]){
char aux[100];int i, n;n = strlen(palavra);for( i = 0; i < n; i++ )
aux[i] = palavra[n – i - 1];aux[n] = ‘\0’;if( strcmp(palavra, aux) == 0 )
return 1;else
return 0;}
![Page 222: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/222.jpg)
Cadeias de CaracteresExercício :
Escreva um procedimento em linguagem C querecebe 3 cadeia de caracteres de tamanho máximo50, e as imprime na tela em ordem alfabética.
![Page 223: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/223.jpg)
Cadeias de CaracteresSolução :
void ordem(char a[50], char b[50], char c[50]){
if( strcmp(a, b) > 0 ){
if(strcmp(b, c) > 0 )printf("%s,%s,%s", a,b,c);
else{
if( strcmp(a, c) > 0 )printf("%s,%s,%s", a,c,b);
elseprintf("%s,%s,%s", c,a,b);
} continua no próximo slide
![Page 224: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/224.jpg)
Cadeias de CaracteresContinuação :
}else{
if(strcmp(c, a) > 0 )printf("%s,%s,%s", b,c,a);
else{
if(strcmp(b, c) > 0 )printf("%s,%s,%s", b,a,c);
elseprintf("%s,%s,%s", c,b,a);
}}
}
![Page 225: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/225.jpg)
Exercícios
Exercício:
Diga qual será a saída do programa a seguir.
![Page 226: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/226.jpg)
Exercícios#include <stdio.h>void f(int a) {
a = 2;printf ("a = %d\n", a);
}int main() {
int a;a = 1;printf ("a = %d\n", a);f(a);printf ("a = %d\n", a);return 0;
}
![Page 227: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/227.jpg)
Exercícios
Exercício:
E qual a saída deste programa?
![Page 228: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/228.jpg)
Exercícios#include <stdio.h>void f(int *a) {
*a = 2;printf ("a = %d\n", *a);
}int main(){
int a;a = 1;printf ("a = %d\n", a);f(&a);printf ("a = %d\n", a);return 0;
}
![Page 229: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/229.jpg)
Exercícios
Exercício:
Escreva uma função em linguagem C que recebe umamatriz de números inteiros com no máximo 50linhas e 50 colunas, recebe também dois númerosinteiros N e M que indicam respectivamente o númerode linhas e de colunas da matriz; a função tambémrecebe um valor inteiro X.A sua função deve retornar a soma de todos oselementos da matriz na linha X.
![Page 230: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/230.jpg)
Exercícios
int somaLinha(int Matriz[50][50], int M, int N, int X){
int soma, j;soma = 0;
for (j = 0; j < N; j++)soma += Matriz[X][j];
return soma;}
![Page 231: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/231.jpg)
Exercícios
Exercício:
Considere o vetor com 11 elementos abaixo e digaquantas comparações de igualdade realizam osalgoritmos de Busca Linear e Busca Binária, natentativa de se encontrar no vetor os valores:
a) 3b) 25c) 70
1 2 7 15 23 56 57 58 70 72 78
![Page 232: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/232.jpg)
Exercícios
Exercício:
Utilizando (não precisa implementar) as funções e procedimentos vistos em aula. Escreva um programaem linguagem C que solicita a usuário um vetor comno máximo 50 números inteiros maiores que zero.Como saída, seu programa deve imprimir o vetor emordem crescente e decrescente. Você pode utilizar seachar necessário os seguintes procedimentos:
LeVetor (int V[100], int * N);Troca(int* A, int* B);ImprimeVetor (int V[100], int N);InsertionSort(int V[100], int N, int S[100]);SelectionSort(int V[100], int N, int S[100]);BubleSort (int V[100], int N);
![Page 233: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/233.jpg)
Exercícios#include <stdio.h>int main() {
int v[100], n, i;printf (“Entre com o vetor");LeVetor(v, &n);BubbleSort(v, n);printf (“A saida eh:\n");ImprimeVetor(v, n);for( i = 0; i < (n/2); i++)
Troca(&v[i], &v[n-1-i]);ImprimeVetor(v, n);return 0;
}
![Page 234: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/234.jpg)
Exercícios
Exercício:
Escreva um procedimento em linguagem C, querecebe um vetor de strings, e um inteiro porreferência indicando o número de strings no vetor. Seuprograma deve remover do vetor qualquer stringduplicada, ou seja, cada string deve aparecer apenasuma vez no vetor. O procedimento deve ter a seguinte assinatura:
RemoveDup(char* Vetor[100], int* N);
![Page 235: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/235.jpg)
Exercícios
#include <sting.h>RemoveDup(char* Vetor[100], int* N){
int i, j;for( i = 0; i < n; i++)
for( j = i + 1; j < *N; j++)if( strcmp(Vetor[i], Vetor[j]) == 0 ){
strcpy(Vetor[j], Vetor[(*N) - 1]);(*N)--;j--;
}}
![Page 236: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/236.jpg)
1
Registros
Exercício :
Escreva uma função em C que recebe ascoordenadas de 3 pontos no plano e retorna a maiordistância entre eles. Utilize a função abaixo.
#include<math.h>
float Distancia(float X1, float Y1, float X2, float Y2)
{
float DX = (X2 – X1) * (X2 – X1);
float DY = (Y2 – Y1) * (Y2 – Y1);
return sqrt(DX + DY);
}
Registros
Solução :
float MaiorDist(float X1, float Y1, float X2, float Y2,
float X3, float Y3)
{
float D1 = Distancia(X1, Y1, X2, Y2);
float D2 = Distancia(X1, Y1, X3, Y3);
float D3 = Distancia(X3, Y3, X2, Y2);
if ( D1 > D2 && D1 > D3 )
return D1;
if ( D2 > D3 && D2 > D3 )
return D2;
return D3;
}
Registros
Problema :
E se os pontos estivessem no espaço? E se vocêprecisasse calcular a maior distância entre N pontos?
Registros
Definição :
Registros são tipos de variáveis definidos peloprogramador que agrupam outros tipos de dadosnuma só estrutura. Chamamos cada item de umregistro de membro.
![Page 237: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/237.jpg)
2
Registros
Em C :
typedef struct Ponto2D
{
float X;
float Y;
};
No exemplo acima criamos um Registro paraarmazenar as informações de um ponto no plano.Demos ao tipo desse Registro o nome de Ponto2D e X, Y são seus membros.
Registros
Como usar :
Ponto2D p1, p2;
p1.X = 0;
p1.Y = 0;
p2.X = p1.X + 1;
p2.Y = 2 * p1.Y;
Ponto2D pontos[100];
pontos[0].X = 0;
Registros
Exercício :
Defina um tipo Registro chamado Ponto3D, quearmazene as coordenadas de um ponto no espaço.
Registros
Solução :
typedef struct Ponto3D
{
float X;
float Y;
float Z;
};
![Page 238: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/238.jpg)
3
Registros
Exercício :
Reescreva a função Distancia abaixo utilizando o tipoPonto3D definido no exercício anterior para que a
mesma calcule a distância entre dois pontos noespaço.
float Distancia(float X1, float Y1, float X2, float Y2)
{
float DX = (X2 – X1) * (X2 – X1);
float DY = (Y2 – Y1) * (Y2 – Y1);
return sqrt(DX + DY);
}
Registros
Solução :
float Distancia(Ponto3D P1, Ponto3D P2)
{
float DX = (P2.X – P1.X) * (P2.X – P1.X);
float DY = (P2.Y – P1.Y) * (P2.Y – P1.Y);
float DZ = (P2.Z – P1.Z) * (P2.Z – P1.Z);
return sqrt(DX + DY + DZ);
}
Registros
Exercício :
Escreva uma função em C que recebe um ponto noespaço P, um vetor de pontos no espaço V, e a
quantidade de pontos no vetor N e retorna a maiordistância entre P e qualquer ponto de V. Utilize asestruturas e funções dos exercícios anteriores.
Registros
Solução :
float MaiorDistancia(Ponto3D P, Ponto3D V[100], int N)
{
int i;
float aux, maior = Distancia(P, V[0]);
for( i = 1; i < N; i++)
{
aux = Distancia(P, V[i]);
if ( maior < aux )
maior = aux;
}
return maior;
}
![Page 239: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/239.jpg)
4
Registros
Exercício :
Defina um tipo Registro para armazenar os dados deum paciente de um convênio médico. O registro devearmazenar pelo menos:
• Código• Nome• Sobrenome• Data nascimento• Tipo sanguíneo• Sexo• Tipo de plano de saúde
Registros
Solução :
typedef struct Data{
int Dia;int Mes;int Ano;
};
typedef struct Paciente{
int Codigo;char Nome[50];char Sobrenome[50];Data Nascimento;char Sangue[4];char Sexo;int PlanoSaude;
};
Registros
Detalhe :
Quando você tem um ponteiro para uma estrutura(registro) ao invés de utilizarmos ‘.’ utilizamos ‘->’
para acessar o membros. Ex.:
Ponto3D P1;
Ponto3D *ptr;
ptr = &P1;
ptr->X = 0;
ptr->Y = 0;
![Page 240: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/240.jpg)
RegistrosExercício :
Escreva uma função em C que recebe ascoordenadas de 3 pontos no plano e retorna a maiordistância entre eles. Utilize a função abaixo.
#include<math.h>float Distancia(float X1, float Y1, float X2, float Y2){
float DX = (X2 – X1) * (X2 – X1);float DY = (Y2 – Y1) * (Y2 – Y1);return sqrt(DX + DY);
}
![Page 241: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/241.jpg)
RegistrosSolução :
float MaiorDist(float X1, float Y1, float X2, float Y2,float X3, float Y3){
float D1 = Distancia(X1, Y1, X2, Y2);float D2 = Distancia(X1, Y1, X3, Y3);float D3 = Distancia(X3, Y3, X2, Y2);
if ( D1 > D2 && D1 > D3 )return D1;
if ( D2 > D3 && D2 > D3 )return D2;
return D3;}
![Page 242: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/242.jpg)
RegistrosProblema :
E se os pontos estivessem no espaço? E se vocêprecisasse calcular a maior distância entre N pontos?
![Page 243: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/243.jpg)
RegistrosDefinição :
Registros são tipos de variáveis definidos peloprogramador que agrupam outros tipos de dadosnuma só estrutura. Chamamos cada item de umregistro de membro.
![Page 244: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/244.jpg)
RegistrosEm C :
typedef struct Ponto2D{
float X;float Y;
};
No exemplo acima criamos um Registro paraarmazenar as informações de um ponto no plano.Demos ao tipo desse Registro o nome de Ponto2D e X, Y são seus membros.
![Page 245: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/245.jpg)
RegistrosComo usar :
Ponto2D p1, p2;p1.X = 0;p1.Y = 0;p2.X = p1.X + 1;p2.Y = 2 * p1.Y;
Ponto2D pontos[100];
pontos[0].X = 0;
![Page 246: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/246.jpg)
RegistrosExercício :
Defina um tipo Registro chamado Ponto3D, quearmazene as coordenadas de um ponto no espaço.
![Page 247: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/247.jpg)
RegistrosSolução :
typedef struct Ponto3D{
float X;float Y;float Z;
};
![Page 248: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/248.jpg)
RegistrosExercício :
Reescreva a função Distancia abaixo utilizando o tipoPonto3D definido no exercício anterior para que amesma calcule a distância entre dois pontos noespaço.
float Distancia(float X1, float Y1, float X2, float Y2){
float DX = (X2 – X1) * (X2 – X1);float DY = (Y2 – Y1) * (Y2 – Y1);return sqrt(DX + DY);
}
![Page 249: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/249.jpg)
RegistrosSolução :
float Distancia(Ponto3D P1, Ponto3D P2){
float DX = (P2.X – P1.X) * (P2.X – P1.X);float DY = (P2.Y – P1.Y) * (P2.Y – P1.Y);float DZ = (P2.Z – P1.Z) * (P2.Z – P1.Z);return sqrt(DX + DY + DZ);
}
![Page 250: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/250.jpg)
RegistrosExercício :
Escreva uma função em C que recebe um ponto noespaço P, um vetor de pontos no espaço V, e aquantidade de pontos no vetor N e retorna a maiordistância entre P e qualquer ponto de V. Utilize asestruturas e funções dos exercícios anteriores.
![Page 251: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/251.jpg)
RegistrosSolução :float MaiorDistancia(Ponto3D P, Ponto3D V[100], int N){
int i;float aux, maior = Distancia(P, V[0]);for( i = 1; i < N; i++){
aux = Distancia(P, V[i]);if ( maior < aux )
maior = aux;}return maior;
}
![Page 252: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/252.jpg)
RegistrosExercício :
Defina um tipo Registro para armazenar os dados deum paciente de um convênio médico. O registro devearmazenar pelo menos:
• Código• Nome• Sobrenome• Data nascimento• Tipo sanguíneo• Sexo• Tipo de plano de saúde
![Page 253: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/253.jpg)
RegistrosSolução :
typedef struct Paciente{
int Codigo;char Nome[50];char Sobrenome[50];Data Nascimento;char Sangue[4];char Sexo;int PlanoSaude;
};
typedef struct Data{
int Dia;int Mes;int Ano;
};
![Page 254: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/254.jpg)
RegistrosDetalhe :
Quando você tem um ponteiro para uma estrutura(registro) ao invés de utilizarmos ‘.’ utilizamos ‘->’para acessar o membros. Ex.:
Ponto3D P1;Ponto3D *ptr;
ptr = &P1;ptr->X = 0;ptr->Y = 0;
![Page 255: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/255.jpg)
ArquivosProblema :
Como manter persistentes os dados utilizadose/ou gerados por um programa de computador ?
Solução :
Armazenar os dados de entrada em arquivos.
![Page 256: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/256.jpg)
ArquivosTipos de Arquivo :
• Arquivos de Texto: Os dados são gravados como caracteres de 8 bits. Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 64 bits no arquivo.
• Arquivos Binários: Os dados são gravados na forma binária (do mesmo modo que estão na memória). Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 32 bits no arquivo.
![Page 257: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/257.jpg)
ArquivosExemplos :
Os dois trechos de arquivo abaixo possuem osmesmo dados :
• Arquivo Binário: Renato ÌÌÌÌÌ·áõ�A+ Ì• Arquivo Texto: Renato,32891319,A+
![Page 258: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/258.jpg)
ArquivosModos de abertura de Arquivo :
Existem 3 modos de se abrir um arquivo:
• Leitura • Escrita • Edição
![Page 259: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/259.jpg)
ArquivosAbrindo e fechando arquivos em C :
Um arquivo em C é representado pelo tipo FILE*.Quando queremos abrir um arquivo utilizamos afunção fopen e para fechá-lo usamos a função fclose.Ex.:
FILE* arquivo = fopen(“nome.txt”, “wb”);fclose(arquivo);
![Page 260: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/260.jpg)
ArquivosA função fopen:
A função fopen recebe duas strings comoparâmetros:
• Nome do Arquivo: Caminho relativo do arquivo. Ex.: “lab11.c”, “c:/temp/lab1.c”
• Modo de abertura: Determina como o arquivo deve ser aberto, os principais são:– “w” : Escrita, se o arquivo existir cria um novo.– “r” : Leitura, se o arquivo não existir dá erro.– “a” : Edição, se o arquivo não existir dá erro.
A função fopen retornará um ponteiro para o arquivoou 0 (zero) caso ocorra algum problema na abertura.
![Page 261: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/261.jpg)
ArquivosA função fclose:
A função fclose recebe o ponteiro do arquivo a serfechado. Ex.:
FILE* arquivo = fopen(“nome.txt”, “wb”);fclose(arquivo);
Obs.: A string “wb” indica que queremos abrir umarquivo binário para escrita. Sempre que quisermosabrir um arquivo binário acrescentamos o caracter bna string do modo de abertura.
![Page 262: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/262.jpg)
ArquivosLendo e escrevendo em Arquivos Texto :
Para ler ou escrever em um Arquivo Texto, utilizamosas funções, fscanf e fprintf:
• fscanf : Idêntica ao scanf, só que recebe o ponteiro para o arquivo como primeiro parâmetro.
• fprintf : Idêntica ao printf, só que recebe o ponteiro para o arquivo como primeiro parâmetro.
Importante: fscanf deve ser usado apenas comarquivos abertos para leitura e fprintf com arquivosabertos para escrita.
![Page 263: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/263.jpg)
ArquivosExemplo:include<stdio.h>int main(){
char texto[100];FILE *leitura, *escrita;leitura = fopen(“leitura.txt”, “r”);if( leitura == 0 ){
printf(“Nao abriu o leitura.txt”);return 0;
}escrita = fopen(“escrita.txt”, “w”);if( escrita == 0 ){
printf(“Nao abriu o escrita.txt”);return 0;
} to be continued
![Page 264: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/264.jpg)
Arquivos
fscanf(leitura, “%s”, texto);fprintf(escrita, “%s”, texto);
fclose(leitura);fclose(escrita);
return 0;}
![Page 265: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/265.jpg)
ArquivosExercício :
Escreva um programa em C que solicita ao usuário onome(string), telefone(inteiro) e tipo sanguíneo(string).Em seguida o seu programa deve gravar esses dadosnum arquivo texto chamado “dados.txt”.
![Page 266: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/266.jpg)
ArquivosExercício :
Escreva um programa em C que lê de um arquivochamado “dados.txt” e imprime na tela os seguintesdados do usuário: nome(string), telefone(inteiro) e tiposanguíneo(string).
![Page 267: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/267.jpg)
ArquivosLendo e escrevendo em Arquivos Binários :
Arquivos binários nos permitem ler e escreverestruturas ou mesmo vetores de estruturas de umavez. Utilizamos as funções, fread e fwrite. Ambas recebem os mesmos parâmetros:
• Ponteiro: Um ponteiro para estrutura (ou vetor)que será lido ou escrito no arquivo.• Tamanho: Inteiro que indica o tamanho daestrutura, utilizamos sizeof para descobrir o tamanho.• Quantidade: Número de estruturas (maior que 1 quando for vetor).• Arquivo: Ponteiro para o arquivo.
![Page 268: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/268.jpg)
ArquivosExemplo:
int val;fread(&val, sizeof(int), 1, leitura);fwrite(&val, sizeof(int), 1, escrita);
int vetor[100];fread(vetor, sizeof(int), 100, leitura);fwrite(vetor, sizeof(int), 100, escrita);
![Page 269: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/269.jpg)
ArquivosExercício :
Escreva um programa em C que solicita ao usuário onúmero de pacientes e os seguintes dados para cadapaciente nome(string), telefone(inteiro) e tiposanguíneo(string). Em seguida o seu programa devegravar o número de pacientes e na seqüência osdados de todos os pacientes num arquivo bináriochamado “dadosbin.txt”.
![Page 270: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/270.jpg)
ArquivosExercício :
Escreva um programa em C que lê de um arquivochamado “dadosbin.txt” o número de pacientes eem seguida os seus dados e imprime na tela osmesmos.
![Page 271: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/271.jpg)
1
Arquivos
Problema :
Como manter persistentes os dados utilizadose/ou gerados por um programa de computador ?
Solução :
Armazenar os dados de entrada em arquivos.
Arquivos
Tipos de Arquivo :
• Arquivos de Texto: Os dados são gravados como caracteres de 8 bits. Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 64 bits no arquivo.
• Arquivos Binários: Os dados são gravados na forma binária (do mesmo modo que estão na memória). Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 32 bits no arquivo.
Arquivos
Exemplos :
Os dois trechos de arquivo abaixo possuem osmesmo dados :
• Arquivo Binário: Renato ÌÌÌÌÌ·áõ�A+ Ì• Arquivo Texto: Renato,32891319,A+
ArquivosModos de abertura de Arquivo :
Existem 3 modos de se abrir um arquivo:
• Leitura • Escrita • Edição
![Page 272: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/272.jpg)
2
Arquivos
Abrindo e fechando arquivos em C :
Um arquivo em C é representado pelo tipo FILE*.
Quando queremos abrir um arquivo utilizamos a
função fopen e para fechá-lo usamos a função fclose.
Ex.:
FILE* arquivo = fopen(“nome.txt”, “wb”);
fclose(arquivo);
Arquivos
A função fopen:
A função fopen recebe duas strings comoparâmetros:
• Nome do Arquivo: Caminho relativo do arquivo. Ex.: “lab11.c”,“c:/temp/lab1.c”
• Modo de abertura: Determina como o arquivo deve ser aberto, os principais são:– “w” : Escrita, se o arquivo existir cria um
novo.“r” : Leitura, se o arquivo não existir dá
Arquivos
A função fclose:
A função fclose recebe o ponteiro do arquivo a serfechado. Ex.:
FILE* arquivo = fopen(“nome.txt”, “wb”);
fclose(arquivo);
Obs.: A string “wb” indica que queremos abrir um
arquivo binário para escrita. Sempre que quisermosabrir um arquivo binário acrescentamos o caracter bna string do modo de abertura.
Arquivos
Lendo e escrevendo em Arquivos Texto :
Para ler ou escrever em um Arquivo Texto, utilizamos
as funções, fscanf e fprintf:
• fscanf : Idêntica ao scanf, só que recebe o ponteiro para o arquivo como primeiro parâmetro.
• fprintf : Idêntica ao printf, só que recebe o ponteiro para o arquivo como primeiro parâmetro.
![Page 273: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/273.jpg)
3
ArquivosExemplo:include<stdio.h>int main(){
char texto[100];FILE *leitura, *escrita;
leitura = fopen(“leitura.txt”, “r”);if( leitura == 0 )
{printf(“Nao abriu o leitura.txt”);return 0;
}escrita = fopen(“escrita.txt”, “w”);
if( escrita == 0 ){
printf(“Nao abriu o escrita.txt”);return 0;
} to be continued
Arquivos
fscanf(leitura, “%s”, texto);fprintf(escrita, “%s”, texto);
fclose(leitura);fclose(escrita);
return 0;}
Arquivos
Exercício :
Escreva um programa em C que solicita ao usuário onome(string), telefone(inteiro) e tipo sanguíneo(string).
Em seguida o seu programa deve gravar esses dadosnum arquivo texto chamado “dados.txt”.
Arquivos
Exercício :
Escreva um programa em C que lê de um arquivochamado “dados.txt” e imprime na tela os seguintes
dados do usuário: nome(string), telefone(inteiro) e tiposanguíneo(string).
![Page 274: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/274.jpg)
4
Arquivos
Lendo e escrevendo em Arquivos Binários :
Arquivos binários nos permitem ler e escreverestruturas ou mesmo vetores de estruturas de umavez. Utilizamos as funções, fread e fwrite. Ambas recebem os mesmos parâmetros:
• Ponteiro: Um ponteiro para estrutura (ou vetor)que será lido ou escrito no arquivo.• Tamanho: Inteiro que indica o tamanho daestrutura, utilizamos sizeof para descobrir o tamanho.• Quantidade: Número de estruturas (maior que 1 quando for vetor).• Arquivo: Ponteiro para o arquivo.
ArquivosExemplo:
int val;fread(&val, sizeof(int), 1, leitura);
fwrite(&val, sizeof(int), 1, escrita);
int vetor[100];
fread(vetor, sizeof(int), 100, leitura);
fwrite(vetor, sizeof(int), 100, escrita);
Arquivos
Exercício :
Escreva um programa em C que solicita ao usuário onúmero de pacientes e os seguintes dados para cada
paciente nome(string), telefone(inteiro) e tiposanguíneo(string). Em seguida o seu programa devegravar o número de pacientes e na seqüência os
dados de todos os pacientes num arquivo bináriochamado “dadosbin.txt”.
Arquivos
Exercício :
Escreva um programa em C que lê de um arquivochamado “dadosbin.txt” o número de pacientes e
em seguida os seus dados e imprime na tela osmesmos.
![Page 275: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/275.jpg)
1
Recursividade
Exercício :
Escreve uma função que recebe como parâmetro uminteiro positivo N e retorna a soma de todos os
números inteiros entre 0 e N.
RecursividadeSolução:
int Somatorio(int N)
{
int i, resp = 0;
for( i = 1; i <= N; i++ )
resp += i;
return resp;
}
Recursividade
Exercício :
Refaça o exercício anterior, mas desta vez não utilizenenhum tipo de laço (for, while, do while, etc...).
Recursividade
Solução:
int Somatorio(int N)
{
if( N == 1 )
return 1;
else
return (N + Somatorio(N – 1));
}
![Page 276: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/276.jpg)
2
Recursividade
Definição :
“Uma função ou procedimento é dito recursivo ( ouapresenta recursividade ) se for definido em termos de
si próprio.”
Recursividade
Recursão :
É o processo de resolução de um problema,reduzindo-o em um ou mais sub-problemas com as
seguintes características:
• idênticos ao problema original.
• resolução mais simples e conhecida.
Dois tipos:
• Direta• Indireta
Recursividade
Exemplo Numérico :
int Somatorio(int N)
{
if( N == 1 )
return 1;
else
return (N + Somatorio(N – 1));
}
Recursividade
Exemplo Numérico :
Para N == 4, temos:
N == 4
return 4 + 6;
N == 3
return 3 + 3;
N == 2
return 2 + 1;
N == 1 return 1;
![Page 277: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/277.jpg)
3
Recursividade
Exercício :
Escreva uma função recursiva que recebe comoparâmetro um inteiro N maior que zero e retorna o
valor do fatorial de N.
Recursividade
Solução:
int Fatorial(int N)
{
if( N == 1 )
return 1;
else
return (N * Fatorial(N – 1));
}
Recursividade
Exercício :
Reescreva a função abaixo tornando-a recursiva:
int Digitos( int N )
{
int cont = 1;
while( abs( N ) > 9)
{
N = N / 10;
cont++;
}
return cont;
}
Recursividade
Solução:
int Digitos(int N)
{
if( abs( N ) < 10 )
return 1;
else
return (1 + Digitos(N / 10));
}
![Page 278: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/278.jpg)
4
Recursividade
Exercício :
Escreva uma função recursiva que recebe comoparâmetros um número real X e um inteiro N e retorna
o valor de XN.
Obs.: N pode ser negativo.
Recursividade
Solução:
float Potencia(float X, int N)
{
if( N == 0 )
return 1;
else
{
if( N < 0 )
return 1 / (X * Potencia(X, abs(N) - 1));
else
return (X * Potencia(X, N - 1));
}
}
![Page 279: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/279.jpg)
RecursividadeExercício :
Escreve uma função que recebe como parâmetro uminteiro positivo N e retorna a soma de todos osnúmeros inteiros entre 0 e N.
![Page 280: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/280.jpg)
RecursividadeSolução:
int Somatorio(int N){
int i, resp = 0;for( i = 1; i <= N; i++ )
resp += i;
return resp;}
![Page 281: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/281.jpg)
RecursividadeExercício :
Refaça o exercício anterior, mas desta vez não utilizenenhum tipo de laço (for, while, do while, etc...).
![Page 282: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/282.jpg)
RecursividadeSolução:
int Somatorio(int N){
if( N == 1 )return 1;
elsereturn (N + Somatorio(N – 1));
}
![Page 283: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/283.jpg)
RecursividadeDefinição :
“Uma função ou procedimento é dito recursivo ( ouapresenta recursividade ) se for definido em termos desi próprio.”
![Page 284: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/284.jpg)
RecursividadeRecursão :
É o processo de resolução de um problema,reduzindo-o em um ou mais sub-problemas com as seguintes características:
• idênticos ao problema original.• resolução mais simples e conhecida.
Dois tipos:
• Direta• Indireta
![Page 285: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/285.jpg)
RecursividadeExemplo Numérico :
int Somatorio(int N){
if( N == 1 )return 1;
elsereturn (N + Somatorio(N – 1));
}
![Page 286: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/286.jpg)
RecursividadeExemplo Numérico :
Para N == 4, temos:
N == 4
return 4 + 6;
N == 3
return 3 + 3;
N == 2
return 2 + 1;
N == 1 return 1;
![Page 287: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/287.jpg)
RecursividadeExercício :
Escreva uma função recursiva que recebe comoparâmetro um inteiro N maior que zero e retorna ovalor do fatorial de N.
![Page 288: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/288.jpg)
RecursividadeSolução:
int Fatorial(int N){
if( N == 1 )return 1;
elsereturn (N * Fatorial(N – 1));
}
![Page 289: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/289.jpg)
RecursividadeExercício :
Reescreva a função abaixo tornando-a recursiva:
int Digitos( int N ){
int cont = 1;while( abs( N ) > 9){
N = N / 10;cont++;
}return cont;
}
![Page 290: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/290.jpg)
RecursividadeSolução:
int Digitos(int N){
if( abs( N ) < 10 )return 1;
elsereturn (1 + Digitos(N / 10));
}
![Page 291: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/291.jpg)
RecursividadeExercício :
Escreva uma função recursiva que recebe comoparâmetros um número real X e um inteiro N e retornao valor de XN.
Obs.: N pode ser negativo.
![Page 292: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/292.jpg)
RecursividadeSolução:
float Potencia(float X, int N){
if( N == 0 )return 1;
else{
if( N < 0 )return 1 / (X * Potencia(X, abs(N) - 1));
elsereturn (X * Potencia(X, N - 1));
}}
![Page 293: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/293.jpg)
1
RecursividadeExercício :
Reescreva a função abaixo tornando-a recursiva:
int Fibonacci ( int n )
{int A = 0, B = 1, i, temp;
if ( n <= 1)
return n;
for ( i = 2; i <= n; i++)
{
temp = B; B += A; A = temp;}
return B;
}
Recursividade
Solução:
int Fibonacci( int n )
{
if ( n <= 1)
return n;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
Recursividade
Problema :
Para o problema anterior qual das duas soluções eramais eficiente?
Recursividade
Quando não usar Recursão:
• Repetição do processamento:Em geral, cada chamada recursiva é independente
uma da outra. Caso ocorram os mesmos cálculos paraduas chamadas recursivas independentes, essescálculos serão repetidos para cada chamada.
• Gasto de memória excessivo:Cada chamada recursiva aloca memória para asvariáveis locais e para os parâmetros, sendo que naforma iterativa isso ocorre apenas uma vez.
![Page 294: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/294.jpg)
2
Recursividade
Busca Binária:esq = 0; dir = N - 1; meio = (esq + dir) / 2;
while (esq < dir)
{
if ( X == V[meio] )
break;
else if ( X > V[meio] )
esq = meio + 1;
else
dir = meio - 1;
meio = (esq + dir) / 2;
}
if ( X == V[meio] )
return 1;
return 0;
Recursividade
int BuscaBin(int vetor[100], int esq, int dir, int x)
{
int meio = (esq + dir) / 2;
if( dir <= esq )
return vetor[meio] == x;
else if( x > vetor[meio] )
return BuscaBin(vetor, meio + 1, dir, x);
else if( x < vetor[meio] )
return BuscaBin(vetor, esq, meio - 1, x);
else
return 1;
}
RecursividadeIntercalação:
void Intercala(int A[10], int nA, int B[10], int nB, int C[10]){
int i, iA = 0, iB = 0;
for(i = 0; i < iA + iB; i++){
if( iA == nA )C[i] = B[iB++];
else if( iB == nB )C[i] = A[iA++];
else if( A[iA] < B[iB] )C[i] = A[iA++];
else
C[i] = B[iB++];}
}
12235657172278
172278 12235657
278 172
23 12
Recursividade
Ordenação por Intercalação (Merge Sort):
72
12235657
78 5712 56
![Page 295: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/295.jpg)
3
Recursividade
Merge Sort:
int MergeSort ( int v[10], int inicio, int fim )
{
int meio;
if ( inicio < fim )
{
meio = (inicio + fim ) / 2;
MergeSort (v, inicio, meio );
MergeSort (v, meio + 1, fim );
Intercala (v, inicio, meio, fim );
}
}
Recursividade
http://freeweb.supereva.com/nessunoforever/flash/hanoi/index.htm?p
![Page 296: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/296.jpg)
RecursividadeExercício :
Reescreva a função abaixo tornando-a recursiva:
int Fibonacci ( int n ) {
int A = 0, B = 1, i, temp;if ( n <= 1)
return n;for ( i = 2; i <= n; i++) {
temp = B; B += A; A = temp;}return B;
}
![Page 297: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/297.jpg)
RecursividadeSolução:
int Fibonacci( int n ){
if ( n <= 1)return n;
elsereturn Fibonacci(n - 1) + Fibonacci(n - 2);
}
![Page 298: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/298.jpg)
RecursividadeProblema :
Para o problema anterior qual das duas soluções eramais eficiente?
![Page 299: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/299.jpg)
RecursividadeQuando não usar Recursão:
• Repetição do processamento:Em geral, cada chamada recursiva é independenteuma da outra. Caso ocorram os mesmos cálculos paraduas chamadas recursivas independentes, essescálculos serão repetidos para cada chamada.
• Gasto de memória excessivo:Cada chamada recursiva aloca memória para asvariáveis locais e para os parâmetros, sendo que naforma iterativa isso ocorre apenas uma vez.
![Page 300: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/300.jpg)
Recursividade
Busca Binária:esq = 0; dir = N - 1; meio = (esq + dir) / 2;while (esq < dir){
if ( X == V[meio] )break;
else if ( X > V[meio] )esq = meio + 1;
elsedir = meio - 1;
meio = (esq + dir) / 2;}if ( X == V[meio] )
return 1;return 0;
![Page 301: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/301.jpg)
Recursividadeint BuscaBin(int vetor[100], int esq, int dir, int x){
int meio = (esq + dir) / 2;if( dir <= esq )
return vetor[meio] == x;else if( x > vetor[meio] )
return BuscaBin(vetor, meio + 1, dir, x);else if( x < vetor[meio] )
return BuscaBin(vetor, esq, meio - 1, x);else
return 1;}
![Page 302: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/302.jpg)
RecursividadeIntercalação:
void Intercala(int A[10], int nA, int B[10], int nB, int C[10]){
int i, iA = 0, iB = 0;for(i = 0; i < iA + iB; i++)
{if( iA == nA )
C[i] = B[iB++];else if( iB == nB )
C[i] = A[iA++];else if( A[iA] < B[iB] )
C[i] = A[iA++];else
C[i] = B[iB++];}
}
![Page 303: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/303.jpg)
78 2 72 1 57 56 23 12
78 2 72 1 57 56 23 12
78 2 72 1
23 12
RecursividadeOrdenação por Intercalação (Merge Sort):
72
23 1257 56
78 5712 56
![Page 304: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/304.jpg)
RecursividadeMerge Sort:
int MergeSort ( int v[10], int inicio, int fim ){
int meio;if ( inicio < fim ){
meio = (inicio + fim ) / 2;MergeSort (v, inicio, meio );MergeSort (v, meio + 1, fim );Intercala (v, inicio, meio, fim );
}}
![Page 305: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/305.jpg)
Recursividade
http://freeweb.supereva.com/nessunoforever/flash/hanoi/index.htm?p
![Page 306: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/306.jpg)
Alocação DinâmicaProblema :
Como evitar o desperdício de memória quandoalocamos vetores? Como criar um vetor do tamanhoque será necessário ao usuário? Como devolver aosistema regiões de memória que não são maisnecessárias? Quem somos? De onde viemos? Paraonde vamos?
![Page 307: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/307.jpg)
Alocação DinâmicaSolução:
1. Determinar o quanto de memória será necessário.2. Solicitar ao sistema a quantidade necessária de
memória.3. Devolver ao sistema a região de memória após o
seu uso.
![Page 308: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/308.jpg)
Alocação Dinâmica
Função malloc:
<ponteiro> = malloc ( <tamanho em bytes> );
• Recebe como parâmetro o número de bytesnecessários (tamanho da memória).
• Retorna um ponteiro para a região de memória alocada dinamicamente pelo sistema.
• Se o sistema não conseguir alocar uma região com o tamanho especificado (por falta de espaço) a função malloc retorna zero.
![Page 309: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/309.jpg)
Alocação Dinâmica
Função free:
free ( <ponteiro para região de memória> );
• Recebe como parâmetro o ponteiro para região de memória alocada dinamicamente e devolve a região alocada ao sistema.
• Apenas regiões de memória alocadas com mallocpodem ser desalocadas com free.
• A mesma região de memória só pode ser desalocada uma vez.
![Page 310: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/310.jpg)
Alocação Dinâmica
#include<stdlib.h>#include<stdio.h>int main(){
int *vetor, n;printf(“Entre com o tamanho do vetor: ”);scanf(“%d”, &n);vetor = malloc(n * (sizeof(int)));if( vetor == 0 ){
printf(“Erro: Memoria insuficiente”);return -1;
}else ...
![Page 311: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/311.jpg)
Alocação DinâmicaExercício :
Escreva um programa em linguagem C que solicita aousuário um vetor de notas (números reais) e imprimea média aritmética das notas.
P.s.: Apesar de não ser necessário utilize um vetor.P.s.: O programa não deve limitar o tamanho do vetor.P.s.: Não deve ocorrer desperdício de memória.P.s.: Após ser utilizada a memória deve ser devolvida.
![Page 312: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/312.jpg)
Alocação DinâmicaExercício :
Escreva um programa em linguagem C que solicita aousuário o RA (inteiro) e a média final (real) de todos osseus alunos e imprime todos os alunos que estão deexame.
P.s.: Utilize um vetor de registros (estruturas) paraarmazenar os dados dos alunos.P.s.: O programa não deve limitar o número dealunos.P.s.: Não deve ocorrer desperdício de memória.P.s.: Após ser utilizada a memória deve ser devolvida.
![Page 313: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/313.jpg)
Alocação DinâmicaExercício :
Escreva um programa em linguagem C que utiliza aestrutura abaixo para criar lista. Numa lista o campoprox recebe o endereço do próximo elemento da lista.Solicite ao usuário o número de elementos da lista ecrie a mesma preenchendo o campo val com aposição do elemento na lista. Depois imprima a lista.
typedef struct Elemento{
int val;struct Elemento* prox;
}Elemento;
![Page 314: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/314.jpg)
1
Alocação Dinâmica
Problema :
Como evitar o desperdício de memória quandoalocamos vetores? Como criar um vetor do tamanhoque será necessário ao usuário? Como devolver aosistema regiões de memória que não são maisnecessárias? Quem somos? De onde viemos? Paraonde vamos?
Alocação Dinâmica
Solução:
1. Determinar o quanto de memória será necessário.2. Solicitar ao sistema a quantidade necessária de
memória.3. Devolver ao sistema a região de memória após o
seu uso.
Alocação Dinâmica
Função malloc:
<ponteiro> = malloc ( <tamanho em bytes> );
• Recebe como parâmetro o número de bytesnecessários (tamanho da memória).
• Retorna um ponteiro para a região de memória alocada dinamicamente pelo sistema.
• Se o sistema não conseguir alocar uma região com o tamanho especificado (por falta de espaço) a função malloc retorna zero.
Alocação Dinâmica
Função free:
free ( <ponteiro para região de memória> );
• Recebe como parâmetro o ponteiro para região de memória alocada dinamicamente e devolve a região alocada ao sistema.
• Apenas regiões de memória alocadas com mallocpodem ser desalocadas com free.
• A mesma região de memória só pode ser desalocada uma vez.
![Page 315: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/315.jpg)
2
Alocação Dinâmica
#include<stdlib.h>
#include<stdio.h>
int main()
{
int *vetor, n;
printf(“Entre com o tamanho do vetor: ”);
scanf(“%d”, &n);
vetor = malloc(n * (sizeof(int)));
if( vetor == 0 )
{
printf(“Erro: Memoria insuficiente”);
return -1;
}
else ...
Alocação Dinâmica
Exercício :
Escreva um programa em linguagem C que solicita aousuário um vetor de notas (números reais) e imprimea média aritmética das notas.
P.s.: Apesar de não ser necessário utilize um vetor.P.s.: O programa não deve limitar o tamanho do vetor.P.s.: Não deve ocorrer desperdício de memória.P.s.: Após ser utilizada a memória deve ser devolvida.
Alocação Dinâmica
Exercício :
Escreva um programa em linguagem C que solicita aousuário o RA (inteiro) e a média final (real) de todos osseus alunos e imprime todos os alunos que estão deexame.
P.s.: Utilize um vetor de registros (estruturas) paraarmazenar os dados dos alunos.P.s.: O programa não deve limitar o número dealunos.P.s.: Não deve ocorrer desperdício de memória.P.s.: Após ser utilizada a memória deve ser devolvida.
Alocação Dinâmica
Exercício :
Escreva um programa em linguagem C que utiliza aestrutura abaixo para criar lista. Numa lista o campoprox recebe o endereço do próximo elemento da lista.Solicite ao usuário o número de elementos da lista ecrie a mesma preenchendo o campo val com aposição do elemento na lista. Depois imprima a lista.
typedef struct Elemento
{
int val;
struct Elemento* prox;
}Elemento;
![Page 316: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/316.jpg)
ExercíciosExercício:
Diga qual será a saída do programa a seguir.
![Page 317: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/317.jpg)
Exercícios#include <stdio.h>void f(int a, int b) {
if( a <= b )printf (“%d", b);
else{
f(a – 1);printf (“, %d", a);
}}int main() {
int a = 12, b = 4;f(a, b);return 0;
}
![Page 318: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/318.jpg)
ExercíciosExercício:
Escreva uma função recursiva em linguagem C querecebe como parâmetros dois inteiros X, Y (onde X ésempre menor que Y) e retorna a soma de todos osvalores entre X e Y (incluindo X e Y).
![Page 319: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/319.jpg)
Exercíciosint Somatorio(int X, int Y) {
if( Y <= X )return X;
elsereturn Y + Somatorio(Y – 1);
}
![Page 320: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/320.jpg)
ExercíciosExercício:
Escreva um programa em Linguagem C que lê doisvetores de números reais de um arquivo texto einforma ao usuário se os vetores lidos são iguais.Considere que a primeira informação do arquivo é ovalor que indica o tamanho dos vetores, e que osvalores consecutivos são os seus valores. Seuprograma deve solicitar ao usuário o nome do arquivotexto a ser lido e deve utilizar alocação dinâmica.Ex. Arquivo de entrada:
3 1.5 2.5 4.7 1.5 2.5 4.7
![Page 321: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/321.jpg)
ExercíciosExercício:
Escreva um programa em linguagem C que solicita aousuário dados de alguns pacientes (nome, sobrenome,peso, idade) e grava estas informações em um arquivotexto, cujo nome é informado pelo usuário:• Utilize registros para resolver este exercício.• A primeira informação a ser gravada no arquivo
deve ser o número de pacientes.• A seguir, os dados de cada paciente devem ser
gravados em uma linha do arquivo, separados por espaços.
![Page 322: Aulas de Linguagem c](https://reader030.vdocuments.site/reader030/viewer/2022012315/5571f7ca49795991698c0132/html5/thumbnails/322.jpg)
ExercíciosExercício:
Escreva um programa em linguagem C que lê de umarquivo texto os dados de alguns pacientes (nome,sobrenome, peso, idade), calcula o peso médio destespacientes e imprime os nomes completos daquelespacientes que estiverem acima da média.• O nome do arquivo deve ser solicitado ao usuário• Utilize registros e alocação dinâmica para resolver
este exercício• Lembre-se de que a primeira informação do
arquivo é o número de pacientes.