Programacao C
Programacao C
Programacao C
Conteúdo Programático
Conceito de Algoritmos, Programas, Linguagens de Programação. Sintaxe e Semâ
Resolução de problemas e desenvolvimento de algoritmos: análise e solução de problem
representação e documentação. Estruturas de programas: decisão e repetição. Tipos de
simples. Modularização de programas: funções e passagem de parâmetros. Tipos
compostos: vetores, matrizes, cadeias de caracteres, registros (STRUCT). Estruturas de
homogêneas e heterogêneas. Arquivo Texto. Programação em linguagem C.
BIBLIOGRAFIA BÁSICA:
FORBELLONE, A. L. VILLAR; EBERSPACHER, H. FREDERICO; Lógica de Programação -
3ª Edição. São Paulo: Pearson, 2005.
Critério de Avaliação
1ª. nota = 1ª. Prova Bimestral + trabalhos práticos
2ª. nota = 2ª. Prova Bimiestral + trabalhos práticos
3ª. nota = prova substitutiva/repositiva/exame
÷2
Média final = (Σ 2 maiores notas)
2
INDICE
3
1. CONCEITOS BÁSICOS
Algoritmo: Seqüência de passos que visam atingir um determinado objetivo. É uma redação
que deve descrever de forma lógica e sem ambigüidades, os passos (ações) a serem
seguidos para se resolver um problema específico que tenha um comportamento padrão em
sua solução. Exemplo: receita de bolo.
Sintaxe x Semântica: Numa linguagem, a sintaxe dita as regras de como as frases devem
ser construídas corretamente(verbo, sujeito, ...). A semântica se preocupa com o
significado da frase construída (entendimento).
Exemplo: “Descoloridas idéias verdes sonham furiosamente”
Sintaxe correta, mas a semântica está confusa!
Observação: A linguagem computacional utilizada nesta apostila será a linguagem C. Isto
significa que na resolução de algoritmos utilizando esta linguagem, temos que observar as
regras de sintaxe mas também nos preocuparmos com a semântica (em qual sequência as
ações devem ser realizadas para atingir o objetivo proposto no algoritmo)
4
Memória: A Memória do computador é o local onde ficam armazenados os dados e
instruções. Ela é organizada em Endereços de Memória, identificados por um código
numérico que possibilita a identificação e acesso ao conteúdo de cada endereço. O
conteúdo da memória se apaga cada vez que o computador é desligado. Para armazenar os
dados e programas é preciso utilizar Dispositivos de Armazenamento: discos rígidos (HD),
CD's, HD externos, discos de Zip Drives, mini disks, etc.
2. CONSTRUÇÃO DE ALGORITMOS
Sugestões para Construção de Algoritmos
i. Ler atentamente o enunciado;
ii. Retirar do enunciado a relação das entradas de dados;
iii. Retirar do enunciado a relação das saídas de dados;
iv. Determinar o que deve ser feito para transformar as entradas determinadas nas
especificadas; (Etapa em que, realmente, se constrói o algoritmo, a partir de alguns requ
especificados.)
v. Construir o algoritmo;
vi. Executar o algoritmo;
(Implicaexecutartodasas açõesdescritasseguindoo fluxo de execuçãoestabelecido,
verificando se os resultados obtidos correspondem ao esperado quando da monta
algoritmo, detectando então algum possível erro no desenvolvimento deste. Essa ativida
conhecida por "TESTE DE MESA".
Exemplo:
Construa um algoritmo (textualmente e em fluxograma) que, calcule a área de um
triângulo, onde são dados Base e Altura.
Base
Altura
A fórmula que efetua o cálculo é: Área =
2
Ações:
Conheça um valor e atribua ao argumento base
Conheça um valor e atribua ao argumento altura
Calcule (base*altura/2) e atribua o resultado ao argumento área
Informe o resultado do argumento área
Fim das ações
Simulação:
5
Exercícios de Fixação
1:-) Elaborar um algoritmo que informe o maior número entre dois números conhecidos pelo U
2:-) Construir um algoritmo para calcular a média de dois valores inteiros e positivos, p
conhecidos.
Adicionais
Comentários no programa são colocados entre /* e */ não sendo considerados na compil
Comentário numa única linha (pode ser realizado através de 2 barras invertidas \\.)
Função getchar(): Armazena a entrada até que a tecla ENTER seja pressionada
VARIÁVEL: Um dado é classificado como variável, quando tem a possibilidade de ser alterado e
algum instante no decorrer do tempo. Ex; o peso de uma pessoa, o valor do dólar ( Util
identificadores de variáveis em letras minúsculas)
FORMAÇÃO DE IDENTIFICADORES: Os nomes de informação de caráter variável são os
identificadores, os quais devem acompanhar as seguintes regras de formação:
- Devem começar por um caractere alfabético;
Memória
- Podem ser seguidos por mais caracteres alfabéticos ou numéricos;
- Não devem ser usados caracteres especiais. nome
x
Exemplos:
- Identificadores válidos: Alpha, X, B5, Notas, Médias, INPS 6 conteúdo
- Identificadores não válidos: 5X, e(13), A:B, Nota/2 2F8D
Obs: a ling.C, normalmente, reconhece até 31 caracteres Endereço de
x
memória do
6
Válidos Não-válidos
x salário bruto
total @mail
soma taxa%
salario 1x
salarioBruto Salário-hora
salarioHora nome do funcionário
Identificadores de dados estão associados algumas características:
nome do identificador (sempre utilize nomes sugestivos)
tipo (tipo de informação armazenada: texto, número, etc)
valor armazenado (conteúdo)
OBS: na linguagem C, identificadores com letras minúsculas são diferentes de identificadores c
letras maiúsculas. Ex: Total é diferente de total.
7
Operadores Aritméticos / exemplos:
Expressão MatemáticaExpressão Computacional
2.a+b 2*a + b
2
a.x a * pow(x,2)
a/2 + b a/2 + b
a+b (a + b) / 2
2
Obs1: Quando houver empate entre 2 ou mais parcelas, a prioridade passa a ser a p
esquerda. Exemplo: A + B - C
Exercícios
1) Escrever as seguintes expressões algébricas como computacionais
r2 a + b/c
1 = a + b__ 2 .
1/r + 1/s + 1/t c+d 2 – 5y
3
(x + y) X + y3 1/3 . b. h
i+j
x B2 – 4ac (x/y)y-1
3 0.5
(a-b) . x -b + raiz(delta) (a+b)
2
2ª c – 2a
8
Operadores Relacionais (>, <, >=, <= , ==, !=)
São utilizados para a comparação entre 2 objetos do mesmo tipo. O resultado será sempre um
tipo booleano (verdadeiro ou falso)
Exercício: Calcule cada expressão a seguir (se verdadeiro ou falso)
2*4 == 24/3
15 % 4 < 19 % 6
2 + 8 % 7 >= 3 * 6 – 15
9
Entrada de Dados
Para que o algoritmo possa receber os dados que necessita adotaremos um
comando de entrada denominado “SCANF”, o qual tem a finalidade de atribuir o
dado a ser fornecido à variável identificada.
3.5 EXERCÍCIOS
1:-) Construir um algoritmo para calcular as raízes de uma equação do 2º grau, sendo que
os valores dos coeficientes A, B, e C, devem ser conhecidos inicialmente.
=0 Raízes iguais
<0 Não há raízes reais
>0 Raízes diferentes. Sugestão de coeficientes na execução: a=2 , b=3 e c=-2
10
2) Faça um algoritmo que calcule o diâmetro, a área e a circunferência de um
círculo, sabendo que o único dado disponível é o seu raio.
2
Diâmetro = 2 * raioÁrea = PI * raio Circunferência = 2 * PI * raio
4) Construa um algoritmo que calcule a média aritmética entre 4 notas fornecidas pelo
usuário.
11
void main() {
char nome[20];
float salatual,abono,comissao,aumento,salbruto;
printf( "\nFolha de Pagamento - 1 funcionario";
printf( "\n Entre com o nome do funcionario = ";
scanf(“%s”,&nome);
printf( "\n Entre com o salario atual = ";
scanf(“%f”,&salatual);
abono = salatual * 0.20;
comissao = 1000.00;
aumento = (salatual + abono + comissao) * 0.35;
salbruto = salatual + aumento;
printf( "\nAbono = %f", abono);
printf("\nComissao = %f" ,comissão);
printf( "\nAumento = %f", aumento);
printf( "\nSalario Bruto = %f", salbruto);
getchar();
}
10) Um comerciante deseja saber qual é o lucro percentual que ele está tendo com a venda
de mercadorias. Calcule o lucro percentual de uma mercadoria ao serem fornecidos o preço
de compra e o preço de venda da mesma.
12
4 ESTRUTURAS DE PROGRAMAÇÃO
4.1 ESTRUTURAS DE SELEÇÃO
Em alguns programas existem comandos mutuamente exclusivos, isto é, se
um comando for executado, os demais não serão. Quando este for o caso, um
comando seletivo é o mais indicado, e este comando seletivo tem a seguinte forma:
Seleção simples: permite determinar se um certo conjunto de instruções
deve ou não ser executado.
SE (condição) If (condição)
{
(comandos); (comandos);
}
Seleção composta
SE (condição) If (condição)
{
(comandos); (comandos);
}
senão else {
(comandos); (comandos);
}
2) Dado um número inteiro, calcule o triplo do mesmo caso ele seja positivo ou nulo,
ou o dobro caso ele seja negativo.
4) faça um programa que leia a idade (inteiro) e informe sua classe eleitoral
Não eleitor (abaixo de 16 anos)
Eleitor obrigatório (>=18 anos ou <= 65 anos)
Eleitor facultativo (entre 16 e 18 anos e > 65 anos)
13
Operador Ternário
Este comando nos dá uma maneira compacta de expressar uma simples instrução
IF ELSE.
14
6) Após o conhecimento de um numerador e um denominador, construa um algoritmo para
fornecer o resto desta divisão (sem utilizar a função %).
7) Dados dois números inteiros, construa um algoritmo que seja capaz de definir se estes
são iguais, e caso isso não ocorrer, qual é o menor elemento.
8) Construa um algoritmo que seja capaz de definir qual o maior elemento entre três
números fornecidos pelo usuário (A, B e C)
9) Dados 3 valores A,B.,C verificar se eles podem ser os comprimentos dos lados de um
trianguloe, se forem, verificar se compõem um triangulo eqüilátero,
isósceles, ou
escaleno. Informar se não compuserem nenhum triangulo.
Para verificar se é triangulo: cada lado é menor do que a soma dos outros dois lados
(A < B+C) e (B < A+C) e (C < A+B) se isto for verdade, então é triangulo
se três lados iguais = triangulo eqüilátero
se dois lados iguais = triangulo isósceles
se três lados diferentes = escaleno
11) Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer d
plano P(x1,y1) e Q(x2,y2), imprima a distância entre eles.
Distância = raiz quadrada ( (x2 –2 +(y2-y1)
x1) 2
)
12) Elabore um algoritmo que, dada a idade de um nadador, classifique-o em uma das
segintes categorias:
infantil A = 5-7 anos
infantil B=8 – 10 anos
juvenil A = 11 – 13 anos
juvenil B = 14 – 17 anos
senior = maiores de 18 anos
PROJETO
O DETRAN resolveu instalar um radar no caminho da sua casa e a sua faculdade
com o objetivo de limitar a velocidade dos carros, mas resolveram inovar e a
velocidade pode ser alterada diariamente. Por ex, nos feriados, a velocidade máxima
é de 80 km/h. Já durante a semana, é comum a velocidade máxima seja de 60 km/h.
15
Para isto, placas digitais informam os motoristas qual é a velocidade máxima
naquele momento.
A Tabela de penalizações para quem ultrapassar é:
Velocidade de até 20% superior ao permitido: multa de $85,13 e 4 pontos na
carteira de habilitação;
Velocidade maior que 20% e até 50% acima do permitido: multa de $127,69 e
5 pontos na carteira de habilitação;
Velocidade acima de 50% acima do permitido: multa de $574,62 e 7 pontos
na carteira, apreensão da carteira e suspensão do direito de dirigir.
Ler: velocidade máxima da via, a velocidade do carro, e deve ser calculado o valor
da multa e quantos pontos na CNH o motorista perdeu, caso ele tenha ultrapassado
o limite.
ITERAÇÕES
Comando Descrição do comando Exemplo
repetição com imprime o nome 10 vezes: outro exemplo (limpa tela):
variável de for (int linha=1;linha<=24;linha++)
controle for (int i=0; i<10; i++) {
FOR print(“\n Liliane“); for(int coluna=1;coluna<=40;coluna++)
print( “-“);
print(“\n”);
}
Repetição com while (condição) comandos; int i = 0; Executa enquanto esta
while (i < 10)
teste no início - ele é executado desde que a condição for verdade
WHILE condição seja verdadeira {
- testa a condição antes de printf( “numero i = %d“ , i);
entrar no laço i++;
}
repetição com do do
teste no final { {
DO...WHILE comandos; // menu de opções de 1 a 3
} print(“ 1 - opção cadastro”);
while (condição); print(“ 2 - opção altera”);
print(“ 3 - opção sair”);
scanf(“%d”,&opção);
} while (opcao != 3);
16
#include <stdio.h>#include <stdlib.h>
#include <iostream.h>#include <math.h>
main( )
{
float soma =0.,r;
int i, j; j=1;
print( "\n Calcula a serie item A ");
for (i=1;i<51;i++)
{
r = j / i;
soma = soma + r;
j=j+2;
}
printf("\n resultado serie = %f", soma);
print("\n\n");
system("PAUSE");
return 0;
}
1 2 3 10
d) S = --- + ---- + ---- + .... + ----- = 2,93
1 4 9 100
EXERCÌCIOS DE FOR
1º) Escreva um programa que imprima um triangulo isósceles de altura e largura n.
Por ex, se n for igual a 3, você deve exibir
*
**
***
17
2º) Escreva um programa que exiba um triangulo de altura 2n-1 e largura n
Por ex, se n=4, você exibe largura=4 e altura 2n-1=7
*
**
***
****
***
**
*
3º) Escreva um programa que exiba um triangulo com altura n e largura 2n-1
Por ex, se n=6, então largura=6 e altura 2n-1 = 12-1 = 11
*
***
*****
*******
*********
***********
Exercícios propostos
a) Exibir seu nome 3 vezes na tela
b) Exibir seu nome 50 vezes na tela
c) Exibir a tabuada do número 7 na tela
d) Ler um número inteiro (entre 1 e 9) e exibir a tabuada.
e) Ler 10 número inteiros. Exibir:
a. Quantos são positivos
b. Quantos são negativos
c. Quantos são nulos (igual a zero)
d. Quantos são ímpares
e. Quantos são pares
f) Refazer o exercício anterior,mas a quantidadede números a serem lidos é
desconhecida. Finalize o programa quando ler o número 9999.
g) Suponha a existência de 10 alunos. Faça um algoritmo para ler a nota do aluno exibir
“Aprovado” (nota >=6) ou “REPROVADO” (nota < 6)
18
#include <stdio.h> #include <conio.h> #include <string.h>
#include <stdlib.h> #include <iostream.h> #include <iomanip.h>
void main()
{ clrscr();
cout << "\nUsando while - Verificando se o numero eh par ou nao";
int a,b;
printf("\n Entre com valor A = ");
scanf("%d",&a);
while (a >=0)
{
if (a % 2 == 0)
printf("\n O numero %d eh par",a);
else
printf("\n O numero %d eh impar ",a);
printf("\n Entre com valor A = ");
scanf("%d",&a);
}
}
19
20) Escrever um programa completo com o seguinte MENU:
1 – Ler um número e verificar se ele é perfeito ou não
2 – Gerar e informar os 5 primeiros números perfeitos
3 – Informar todos os números perfeitos entre 999 e 3820.
4 - Sair
Um número perfeito é aquele que é igual a soma dos seus divisores.
Ex: 28 = 1+2+4+7+14
21) Faça um programa para que um usuário adivinhe um número informado por outro. Inicialmente,
um usuário fornece um número para o programa, e depois o outro usuário deve informar
números até acertar (é claro que o segundo usuário não vê o número registrado pelo primeiro).
Para ajudar, a cada tentativa o computador deve exibir a mensagem “Seu número é maior do
que o meu” ou “Seu número ´´e menor do que o meu”. Ao acertar, imprima também quan
tentativas foram necessárias.
24) Faça um programa para ler diversos caracteres informados pelo dispositivo de entrada
(utilize a diretiva #include <ctype.h>). Depois informe:
a) a quantidade total de letras A e Z informados #include <ctype.h>
b) a quantidade de caracteres informados letra = getchar();
c) a quantidade de consoantes if (isalpha(letra))
d) a maior letra informada (de acordo com a ordem alfabética) // encontrou letra;
e) a quantidade de pontos de exclamação informados
A condiçãode parada deve ser quando for lido o caractere # (considere apenas letras
maiúsculas no seu programa).
25) A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados
sobre o salário e número de filhos de cada chefe de família. A prefeitura deseja saber:
a) média do salário
b) média do número de filhos
c) maior salário
d) percentual de pessoas com salário de até $800,00
27) Faça um algoritmo para imprimir a quantidade de números primos entre 1 e 1000.
28) Foi realizada uma pesquisa dos carros usados que estão à venda na cidade de Porto Velho. O
programa deve ler as seguintes informações para cada carro:
- placa do carro
- tempo de uso (idade)
- cor (A-azul, P-preto, B-branco e O-outros)
- marca G–gm F-ford V-volks e A-fiat
20
Não se sabe quantos carros estão a venda. Finalizar quando placa do carro for igual a ZERO.
Faça um programa para calcular e exibir:
a) o total de carros à venda
b) a média do tempo de uso dos carros (a média da idade dos carros)
c) contar quantos carros tem menos de 5 anos de uso, que sejam da cor azul e da marca Gm.
d) a porcentagem de carroscom mais de 10 anos de uso
#include<conio.h> #include<stdio.h>
#include <iostream.h> #include <stdlib.h>
int main()
{
system("CLS");
int placa,tempo=0, carroGm=0, carro=0;
int carroDez=0;
float porcarros, media, somaTempo=0;
char cor, marca;
cor=' '; marca=' ';
printf("\nInforme um numero para a placa do carro:");
scanf("%d",&placa);
while(placa!=0)
{
printf("\nInforme o tempo de uso do carro:");
scanf("%d",&tempo);
printf("\nInformea cor do carro:A-azul\n P-preto\n B-branco\nO-outros\n");
cor=getche();
printf("\nInformea marca do carro:G-gm\n F-ford\n V-volks\n e A-fiat\n");
marca=getche();
carro=carro+1;
if ((tempo<5)&&(cor=='A')&&(marca=='G'))
carroGm=carroGm+1;
if (tempo>10)
carroDez=carroDez+1;
somaTempo=somaTempo+tempo;
printf("\nInforme um numero para a placa do carro:");
scanf("%d",&placa);
}
printf("\n\nO total de carros foram:%d",carro);
media=somaTempo/carro;
printf("\nA media é de:%8.2f",media);
printf("\nA quantidade de carros marca Gm, cor azul e < 5 anos são: %d", carroGm);
porcarros=(carroDez/carro)*100.;
printf("\nA porcentagem de carros com mais de 10 anos foram:%8.2f",porcarros);
getch(); cout<<"\n\n";
system("PAUSE"); return 0;
}
29) Foi realizada uma pesquisa de algumas características físicas da população de uma
certa região, a qual coletou os seguintes dados referentes a cada habitante para serem
analisados:
sexo (masculino ou feminino)
cor dos olhos (verdes, azuis, castanhos, pretos)
idade
Faça um algoritmo que determine e escreva:
21
A maior idade dos habitantes
A percentagem de indivíduos do sexo feminino cuja idade está entre 18 e 35 anos
inclusive e que tenham olhos verdes.
O final do conjunto de habitantes é reconhecido pelo valor –1 na entrada da idade.
30) Calcule o imposto de renda de um grupo de contribuintes considerando que os dados de
cada contribuinte, número do CPF, número de dependentes e renda mensal são valores
fornecidos pelo usuário. Para cada contribuinte será feito um desconto de 5% de salário
mínimo por dependente. Os valores da alíquota para calculo do imposto são:
Renda Líquida Alíquota
Até 2 salários mínimos Isento
2..3 salários mínimos 5%
3..5 salários mínimos 10%
5..7 salários mínimos 15%
acima de 7 salários mínimos 20%
O último valor que não será considerado, terá o CPF igual a zero. Deve ser fornecido o
valor atual do salário mínimo.
31) Construa um algoritmoque leia um conjunto de dados contendo altura e sexo
(masculino ou feminino) de 50 pessoas e depois calcule e escreva:
a maior e a menor altura do grupo
a média da altura das mulheres
o número de homens e a diferença percentual entre estes e as mulheres
32) Em uma empresa de calçados, as vendas são anotadas de acordo com o código do calçado, de seu n
de seu preço unitário, como no exemplo:
Código 101
Código: 203 Num Quant PreçoUnit PreçoParcial
Num Quant PreçoUnit PreçoParcial 38 10 10,00 100,00
35 2 36,00 72,00 34 2 14,00 28,00
34 3 15,00 45,00 37 5 15,00 75,00
... ...
0
0
Totais 5 117,00 Totais 17 203,00
Faça um algoritmo que ao conhecer o código do calçado, seu número e seu preço unitário, calcule:
a) o total de vendas de cada código em quantidade e preço
b) o total de todas as vendas em quantidade e preço
c) fornecido um número, calcule a quantidade de calçados deste número entre todos os códigos
d) o código do calçado com menor preço unitário
e) o código do calçado que obteve a maior venda (em valor)
f) do calçado que obteve a maior venda (em valor)
5. FUNÇÕES NA LINGUAGEM C
22
O comando return
Quando se chega numa declaração return, a função é imediatamente encerrada, e
se o valor de retorno é informado, a função retorna esse valor. Uma função pode ter
mais de uma declaração return.
#include <stdbool.h> float quadrado(int n){ float media(int n1, int n2){
bool Epar (int a) { return (n * n); float m;
if (a%2==0) }
return true; m = (n1+n2)/2.;
else return m;
return false; }
}
Protótipo de funções
Caso você queira colocar a função APÓS o main, você deve declarar o protótipo da função
ANTES do main para o compilador.
#include <stdio.h>
float quadrado (float n);
int main()
{
..........
}
float quadrado(float n) {
return (n*n);
}
O tipo void
Em inglês, void significa vazio. Ele permite fazer funções que não retornam nada
e/ou também funções que não tem parâmetros. Se queremos que a função retorne
algo, devemos usar a declaração return. Se não queremos, basta declarar como
sendo do tipo void.
void mensagem (){
printf(“\n Alo mundo!!!!”);
}
int main(){
mensagem();
}
23
printf(“\n Entre com o 2º. Valor: “); scanf(“%d”,&y);
printf(“\n Entre com o 3º. Valor: “); scanf(“%d”,&z);
float resultado = calculamedia(x,y,z);
printf(“\n resultado da media calculado = %f”,resultado); getchar();
}
---------------------------------------------------------------------------------------------------
Refazer o mesmo exercício acima, utilizando uma função void (sem return)
void calculamedia (int a, int b, int c) {
float media;
media = (a+b+c)/3;
printf(“\n media calculada dentro da função= %f”, media);
}
main(){
int x,y,z;
printf(“\n Entre com o 1º. Valor: “); scanf(“%d”,&x);
printf(“\n Entre com o 2º. Valor: “); scanf(“%d”,&y);
printf(“\n Entre com o 3º. Valor: “); scanf(“%d”,&z);
calculamedia(x,y,z); //Repare que a média é desconhecida no programa principal
getchar();
}
24
Programa para calcular o fatorial de um Número inteiro:
#include <stdlib.h>
#include <stdio.h>
main()
{
int n;
print("\nCalculo de Fatorial\n");
print("\nEntre com um numero: ");
scanf(“%d”,&n);
int resul=1;
for (int i=2; i<=n; i++)
resul=resul*i;
printf ("\nFatorial de %d = %d",n,resul);
print("\n\n");
system("PAUSE");
}
int main() {
int fatorial(int n) {
int n,p;
int resul=1;
print("\nCombinação - Uso da função para calcular Fatorial\n";
for (int i=2; i<=n; i++)
print("\nEntre com um numero N: ";scanf(“%d”,&n);
resul=resul*i;
print("\nEntre com um numero P: "; scanf(“%d”,&p);
return resul;
float resul = fatorial(n) / (fatorial(p)*fatorial(n-p));
}
printf ("\nCombinação de N e P = %5.2f ",resul);
print("\n\n";
system("PAUSE");
return 0;
}
25
EXERCICIO
Faça o teste de mesa com o programa abaixo, e informe qual
será o resultado exibido.
X=5
int calculos( int x, int y, int z) { Y=8
z = x+y+z; Z=16
printf (“\n x = %f”, x);
printf( "\n y = %f”, y); A=5
printf("\n z = %f”,z); B=8
return z; C=16
}
X=7
int main() { Y=29
Z=41
system("cls");
printf( "\nExibe os valores de A B e C"); A=41
int a = 5; B=8
int b = 8; C=16
int c = 3;
c = calculos(a,b,c); X=328
printf("\n A = %f", a); Y=-25
printf("\n B = %f", b); Z=319
printf("\n C = %f",c);
a = calculos(7,a+b+c,a); A=41
printf("\n A = %f", a); B=8
printf("\n B = %f", b); C=319
printf("\n C = %f",c);
Exemplo:
float sqr (float num) {
num = num * num;
return num;
}
main() {
float num, resul;
print(“\nEntre com um numero: “); scanf(“%f”,&num);
resul = sqr (num);
printf (“\n Numero original: %d “, num);
printf (“ “\n Quadrado de num: %f“ ,resul);
}
26
Outro tipo de passagem de parâmetros é conhecido como “chamada por
referência”.Neste tipo de chamada, os parâmetros formais alterados dentro da função
voltam alterando os parâmetros reais (utilizados na ativação da função).
Exemplo:
#include <stdio.h> #include <stdlib.h> #include <iostream.h>
Exercícios
1) Faça um programa que possua uma função para calcular a área de um círculo.
área =* raio
OBS: utilize a diretiva #define (repare que não existe o sinal de igual ao usar o define)
#define PI 3.141592
2) Faça um programa que possua uma função para calcular o quadrado de um valor inteiro.
Quadrado = sqr (numero)
3) Faça um programa que possua uma função para calcular exponenciação entre dois
valores inteiros n e mm)(n
4) Escreva um programa que utilize uma função que retorne 1 se o argumento é um número
ímpar e 0 se o argumento for um número par.
5) Um número primo é qualquer inteiro positivo que é divisível apenas por si próprio e por 1.
Escreva uma função que recebe um inteiro positivo e, se este número for primo, retorna
1, caso contrário, retorna 0.
6) A famosa conjetura de Goldbach diz que todo inteiro par maior que 2 é a soma de dois
números primos. Testes extensivos foram feitos sem contudo ser encontrado um contra-
exemplo. Escreva um programa mostrando que a afirmação é verdadeira para todo
número par entre 700 e 1100. O programa deve imprimir cada número e os seus
correspondentes primos. Use a função do exercício anterior.
7) Faça um programa contendo uma função para verificar se o dia é válido (está no intervalo
entre 1 e 31) e se o mês está entre 1 e 12. Caso esteja incorreto, ler nova data.
8) Faça um programa que utilize uma função para retornar um valor calculado do seguinte
modo:
27
Dentre 4 argumentos, escolhe-se o maior dos dois primeiros argumentos e o maior
dos dois últimos e, em seguida, calcula-se a raiz quadrada da soma dos dois
maiores, subtraída do produto dos outros dois.
11- Sejam P(x1,y1) e Q(x2,y2) dois pontos quaisquer do plano. A sua distância é dada p
Distancia =(𝑥2 − 𝑥)12 +(𝑦2 − 𝑦)12
Faça um programa que contenha uma função para calcular a distância entre os pontos
28
L = raiz quadrada2(a
+ b2)
2 2
D = raiz quadrada (L+c )
6. CADEIA DE CARACTERES
Em C, string (cadeia de caracteres) não é um tipo de dado formal, como Java ou C#.
String é um vetor do tipo CHAR terminada pelo caractere null (‘\0’).
O último elemento da string é um ‘\0’ (inteiro nulo). Exemplo:
char frase[10]; 0 1 2 3 4 5 6
strcpy(frase, “Liliane”); L i l i a n e \0
OBS: para utilizar as funções apresentadas é preciso incluir: #include <string.h>
Para ler e exibir uma string: Exemplo:
char nome[30];
printf(“\nDigite um nome:”);
scanf(“%s”,&nome);
printf (“\n \n Ola sr(a) %s “,nome);
Função strcat (copia uma string origem para uma string destino). Exemplo:
char frase1[10]; Frase1 Frase2
char frase2[10]; Mari ana
strcpy(frase1, “Mari”);
strcpy(frase2,”ana”);
strcat(frase1,frase2);
Frase1
printf("\n frase1= %s",frase1);
printf("\n frase2= %s",frase2); Mariana
29
printf("\n tamanho do nome %s = %d ",nome,tam);
printf("\nEntre com uma frase: "); scanf(“%s”,&frase);
printf("\n tamanho da frase %s = %d ",frase,strlen(frase));
Função strcmp: Compara a string1 com a string2. Se as duas forem idênticas, retorna zero,
caso contrário (strings são diferentes) retorna não-zero. Exemplo:
char cad1[20], cad2[20];
printf(“\nEntre com a cadeia 1: “); scanf(“%s”,&cad1);
printf(“\nEntre com a cadeia 2: “); scanf(“%s”,&cad2);
if (strcmp(cad1,cad2)==0)
printf(“\nDuas cadeias são iguais”);
else printf(“\nDuas cadeias são diferentes”);
OBS: Não se pode igualar duas strings, por ex: string1 = string2; //errado!!!
nome1 nome2 nome3
Inicializando Strings
static char nome1[15]=""; Ana Maria
char nome2[10], nome3[15];
strcpy( nome2, "Ana ");
strcpy( nome3, "Maria");
strcat(nome1,nome2); nome1
strcat(nome1," ");
strcat(nome1,nome3);
Ana Maria
printf("\n %s tamanho %d",nome1,strlen(nome1));
char frase[20];
printf("\nDigite uma frase grande:"); scanf(“%s”,&frase);
strcat(nome1,frase);
printf("\n %s tamanho %d",nome1,strlen(nome1));
30
strcpy(resul,frase);
intj=strlen(frase)-1;
for (int i=0; i<strlen(frase); i++) {
j]=frase[
resul[ i];
//printf("\nresul= %s i= %d j= %d\n",resul,i,j);
j--;
}
printf("\nFrase resultante = %s\n\n",resul);
3.Faça um programa para contar quantas palavras tem numa frase. Considere que existe
um único espaço entre uma palavra e outra.
Frase= as meninas super poderosas estão de volta Contagem= 7
char frase[50];
printf("\nDigite uma frase:"); scanf(“%s”,&frase);
int cont;
if (frase[0]!=' ') cont=1;
else cont=0;
for (int i=0;i<strlen(frase);i++)
if (frase[i]==' ')
cont=cont+1;
printf("\n\nTotal de palavras da frase = %d\n\n",cont);
5. Passar para maiúsculo todas as palavras que começam por vogais (A,E,I,O,U)
Frase= ratao comeu ameixa ontem
Resultado = ratao comeu AMEIXA ONTEM
char frase[50];
printf("\nDigite uma frase:"); scanf(“%s”,&frase);
int cont;
for (int i=1;i<strlen(frase);i++) {
if ((frase[i-1]==' ') && ((frase[i]=='a') ||(frase[i]=='e') ||(frase[i]=='i') ||(frase[i]=='o') || (frase[
int k=i;
while ( (frase[k]!=' ') && (k<strlen(frase))) {
int x = frase[k] - 32; // 65=A 97=a
char letra=x;
frase[k]= letra;
k++; }
}
}
printf("\nFrase refeita = %s\n\n",frase);
6. Faça um programa que tenha como entrada uma cadeia de caracteres e dois valores
inteiros (o o1. indicando uma posição inicial eo.oindicando
2 uma posição final da mesma).
O programa deverá exibir como resultado a cadeia compreendida o.entre o
e o o2. 1
valor,inclusive.
Frase= PADARIA
Num1 = 2 num2 = 4
Resultado = DAR
31
7. Faça um programa que tenha como entrada uma cadeia de caracteres, e dois valore
inteiros ( o o1. indicando uma posição inicial da cadeia oe
. indicando
o2 uma posição final da
mesma). Que substitua na própria cadeia, o que havia nela inicialmente com exceção dos
caracteres compreendidos entreo.oe1o 2o. valor, inclusive. Exemplo:
8. Faça um programa que tenha como entrada duas cadeias de caracteres e um valor inteiro
a
(especificando uma posição na cadeia). O algoritmo deve substituir ana
.1 . cadeia
1 o que
a
continha nela inicialmente, acrescida com . cadeia
a 2 a partir da posição especificada.
Exemplo:
9) Dado uma cadeia de caracteres com uma frase de 50 letras (incluindo brancos) escr
algoritmo para :
a) contar quantos brancos tem na frase
b) contar quantas vezes aparece uma determinada letra
c) contar quantas vezes aparece a letra “p” precedida pela letra m (ex: sempre)
d) contar quantas vezes aparece uma letra com duas ocorrências consecutivas (exe
assim, passagem, ferreira)
11) É dado um texto que consiste de uma ou mais palavras, separadas cada uma da ou
um ou mais espaços e que termina por zero ou mais espaços seguido de ponto(.)
Faça um algoritmo que:
a) as palavras consecutivas devem ser separadas por um único espaço
b) a última palavra deve ser seguida por ponto
c) se numerarmos as palavras do texto na ordem da esquerda para a direita (0,1,2..
as palavras de número par devem ser copiadas enquanto as palavras de número
devem ser invertidas.
Ex: aqui__ esta_ um___exemplo.
Resultado: aqui atse um olpmexe.
7. ARRANJOS / VETORES
Vetores são arranjos homogêneos unidimensionais (de 1 dimensão).
Formato Geral
tipo nome[tamanho];
Quando o C vê uma declaração dessa, ele reserva um espaço na memória para
armazenar os elementos dentro do vetor. Ex: int vetor[5];
No C, a numeração começa sempre em zero. Isso significa que no comando int
vetor[5], os dados serão indexados de 0 a 4.
tf = tamanho físico = espaço total reservado na memória
0 1 2 3 4
tl = tamanho lógico = espaço ocupado/preenchido
32
Operações Básicas
float vetor[5]; int arranjo[8];
vetor[0]=8.3; arranjo[ ]={ 17, 4, 9, 13, 5, 8, 13, 21};
vetor[1]=10.5;
vetor[2]=vetor[0] * vetor[1]; arranjo[3]=arranjo[1]+arranjo[2];
O C não verifica se você está respeitando os limites do vetor. Cuidado com a lógica!!
Supor que declarou um vetor de 8 posições, ou seja, com posições de 0 até 7.
Ex: vetor[9] = 25;
// o programa irá compilar, mas ocorrerá um erro ao executar o programa.
main(){
int vetor[tf], opcao=0;
while (opcao != 4) {
printf(“\n 1 – leitura”);
printf(“\n 2 - exibe vetor”);
printf(“\n3 – calcula soma e media”);
printf(“\n 4 – sair”);
printf(”\n Opcao?”);
scanf(“%d”,&opcao);
switch(opcao) {
case 1: leitura(vetor);
break;
case 2: exibe(vetor);
break;
33
case 3: calculamedia(vetor);
break;
}//switch
}//while
}//main
3) Faça um programa para ler 2 vetores inteiros de tamanhos idênticos. Calcule e exiba a
soma dos vetores num terceiro vetor resultante.
Vetor1 Vetor2
0 1 2 3 4 0 1 2 3 4
10 20 30 40 50 5 8 11 90 -6
34
4) (função busca) Faça um programa para ler um vetor com tamanho TL (máximo de 1
posições) e um dado elemento (numeroProcurado). Verifique se o elemento está contido no
vetor. Caso afirmativo,informe a posição do elemento.Caso negativo, informe que
numeroProcurado não se encontra no vetor. Sugestão: retorne posição = -1 caso não
encontre o numeroProcurado dentro do vetor.
int posição = BUSCA (vetor, tl, numeroProcurado);
5) Faça um programa para ler 2 vetores e seus respectivos TL´s. Calcule num terceiro vetor
a união dos 2 vetores lidos. Exiba o vetor união. OBS: não há elementos repetidos no vetor
UNIÃO.
Vetor Resultado 0 1 2 3 4
TL final=4 10 30 40 50
35
9) Ler 10 elementos do tipo inteiro e armazene-os num vetor de tal capacidade.
a) contar quantos elementos são positivos
b) contar quantos elementos são negativos
c) contar quantos elementos são nulos
d) contar quantos elementos são pares
e) contar quantos elementos são ímpares
10) Ler 10 elementos do tipo inteiro e armazene-os num vetor de tal capacidade.
a) somar todos os elementos armazenados em posições pares
b) somar todos os elementos armazenados em posições ímpares
c) exibir as duas somas calculadas
0 1 2 3 4 5 6 7 8 9
10 20 30 40 50 50 40 30 20 10
------------------------------------------------------------------------------------------------------------
Projeto
Crie os seguintes vetores abaixo:
UNIDADE EXCEÇÃO DEZENA CENTENA
Um Onze Dez Cem /cento
Dois Doze Vinte Duzentos
Três Treze Trinta Trezentos
Quatro Catorze Quarenta Quatrocentos
Cinco Quinze Cinqüenta Quinhentos
Seis Dezesseis Sessenta Seiscentos
Sete Dezesete Setenta Setecentos
Oito Dezoito Oitenta Oitocentos
Nove Dezenove Noventa novecentos
36
"setenta","oitenta","noventa"};
static char centena[10][14]={"zero","cem","duzentos","trezentos","quatrocentos","qu
"seiscentos","setecentos","oitocentos","novecentos"};
static char excecao[10][10]={"zero","onze","doze","treze","catorze","quinze",
"dezesseis","dezesete","dezoito","dezenove"};
char valorT[15];
printf("\nEntre com um valor monetario <999.999,99>: $");
scanf("%s",&valorT);
printf("\n valor lido=%s",valorT);
8. MATRIZES
Veja abaixo uma matriz bidimensionalrepresentadana memória. Repare nas
posições dos elementos. Exemplo de uma matriz 3 x 3 de inteiros.
int mat[3][3];
mat[0][0]mat[0][1]mat[0][2]
mat[1][0]mat[1][1]mat[1][2]
mat[2][0]mat[2][1]mat[2][2]
Ex: Ler uma matriz quadrada 3 x 3. Calcular e exibir a soma da diagonal principal e
da diagonal secundária.
#include <stdio.h>#include <string.h>
#define tf 3
void leitura(int mat[tf][tf])
{
int i,j;
printf("\nLeitura Matriz[3,3] \n");
for (i=0;i<tf;i++) // linhas I
for (j=0;j<tf;j++) // colunas J
{
printf("\n mat[%d,%d]: ",i,j);
scanf("%d",&mat[i][j]);
}
}
37
main() {
int matriz[tf][tf];
int i,j;
leitura(matriz);
printf("\n Exibe a matriz lida\n");
for (i=0;i<tf;i++) {
for (j=0;j<tf;j++)
printf("%d ",matriz[i][j]);
printf("\n");
}
printf("\nResultado Soma Diagonal Principal= %d\n\n",diagPrincipal(matriz));
printf("\nResultado Soma Diagonal Secundária= %d\n",diagSecundaria(matriz));
printf("\n\n\n");
system("PAUSE");
}
4) Faça um programa para leia uma matriz, calcule e exiba outra matriz que seja a
transposta da matriz lida.
Obs: é preciso ter o TLL (tamanho lógico das linhas) e o TLC (tamanho lógico das colunas).
38
Matriz 2x3 Transposta 3x2
A00 A01 A02 A00 A10
A10 A11 A12 A01 A11
A02 A12
5) Faça um programa que efetue a leitura, a soma e a impressão do resultado entre duas
matrizes inteiras com 5 linhas e 5 colunas.
6) Escreva um programa que: Leia uma matriz quadrada 10x10 de elementos inteiros, exiba
essa matriz e calcule e exiba a soma dos elementos situados abaixo da diagonal principal
da matriz, incluindo os elementos da própria diagonal principal.
7) Faça um algoritmo que efetue a troca dos elementos entre as linhas 2 e 4 de uma matriz
bidimensional de inteiros (5 x 5) Exemplo:
0 2 3 8 9
7 4 5 6 1
2 3 4 5 6
1 2 1 2 3
5 7 8 9 0
0 2 3 8 9
1 2 1 2 3
2 3 4 5 6
7 4 5 6 1
5 7 8 9 0
8) Faça uma função que seja capaz de conhecer os elementos inteiros de uma matriz,
juntamente com os seus tamanhos lógicos e de informar qual linha da matriz tem a maior
soma de seus elementos.
Faça um programa completo para ler e exibir as informações acima e, além disso,
calcular e exibir a conta de cada cliente da lanchonete.
39
- Colocar o Nº 1 na coluna 3, linha 1;
- Fazer COLUNA –1 e LINHA –1 para inserir o Nº 2, e assim sucessivamente:
- Se COLUNA=0 e LINHA >0 então COLUNA=TL
- Se COLUNA>0 e LINHA=0 então LINHA=TL
- Se LINHA=0 e COLUNA=0 ou Matriz[COLUNA,LINHA] <> 0 então LINHA+2 e
COLUNA +1
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
11) Considere um vetor de clientes (20 clientes) e outro vetor contendo o preço dos pro
(são apenas 10 produtos).
Vetor de Clientes Preço dos Produtos
0 Carla 0 1,50
1 Cesar 1 3,00
2 Deise 2 4,20
3 Felipe 3 2,00
4 Gustavo 4 2,50
.. Maria 5 3,50
.. ... 6 5,00
... ... 7 2,10
... ... 8 1,80
19 Zuleika 9 2,20
Produtos
0 1 2 3 4 5 6 7 8 9
Cod.Cliente
0 0 6 0 0 1 0 0 2 0 0
1 1 3 2 1 0 3 0 0 0
2 4 1 0 0 0 2 4 1 0 0
3 5 0 0 2 0 0 0 0 2 0
4 4 0 1 0 0 0 0 0 0 2
5 9 0 3 1 0 0 2 1 0 1
6 0 2 4 0 0 0 2 1 0 3
7 0 1 0 0 0 0 0 0 2 0
8 2 0 1 0 0 0 3 0 1 1
9 1 0 0 4 0 0 0 2 0 0
10
....
19
40
Faça um programa completo (utilizando FUNçÃO com passagem de parâmetros para:
a) Faça uma função para calcular a conta de um determinado cliente (de 0 a
programa principal você deve ler o numero do cliente (de 0 a 9) e passar este nu
como parâmetro para a função.
totaldocliente = calculaconta (matriz, vetnome, vetpreço, numerolido);
b) Calcule a conta de cada cliente
Cliente 3 Deise
Produto QuantidadePreço Unitário Valor a Pagar
Consumida
2 6 $ 3,00 $ 18,00
5 1 $ 2,50 $ 2,50
8 2 $ 2,10 $ 4,20
Total a Pagar$ 24,70
c) Calcule e exiba o faturamento do botequim no final do dia (somatório de todas as
contas)
--------------------------------------------PROJETO -----------------------------------------
Dada uma matriz bidimensional (25x25) contendo as distâncias entre as cidades:
01 02 03 04 05 06 07 08 09 .... 25
01 0 2680 1300 3000 ....
02 2680 0 800 500 ....
03 1300 800 0 1800 ...
04 3000 500 1800 0 ...
05 ... ... ... 0
...
25
CIDADES
1 Belo Horizonte
2 Manaus
3 Belém
4 Porto Velho
...
25
41
número da cidade destino. Descubra e retorne como resultado da função a distâ
entre as duas cidades (localize na matriz). Também imprima (dentro da fu
nomes das cidades origem e destino e a distância entre elas.
d) Fazer uma função que exiba todas as distâncias inferiores a 500 km. O fo
saída deve ser: Cidade Origem – Cidade Destino – Distância.
e) Dado o percurso entre as cidades A,B,C, D,E,F,G exiba o total percorrido e o nome
das cidades visitadas.
f) Exiba a matriz de distâncias sem repetições, isto é, se a distância entre as cidade
B já foi exibida, não é necessário exibir a distância entre B e A.
Endereço
Rua Bairro Cidade Estado cep
42
main() {
int i;
struct conta cliente[3];
cliente[0].num_conta=110;
cliente [0].tipo_conta='C'; // conta comum
strcpy(cliente [0].nome,"Joao Henrique") ;
cliente [0].limite = 0;
cliente [0].saldo = 1500.43;
cliente[1].num_conta=201;
cliente [1].tipo_conta='E'; // conta especial
strcpy(cliente [1].nome, "Carlota Joaquina") ;
cliente [1].limite = 1000.00;
cliente [1].saldo = 8500.75;
cliente[2].num_conta=310;
cliente [2].tipo_conta='C'; // conta comum
strcpy(cliente [2].nome, "Marcelo Pereira") ;
cliente [2].limite = 0;
cliente [2].saldo = 780.90;
43
5) Refaça o exercício 3 (clientes de banco) com os seguintes acréscimos:
a) crie um vetor de 10 posições para armazenar os registros dos clientes
b) faça um menu no programa principal (main) contendo as seguintes opções (cada opção d
chamar uma função correspondente no programa, utilizando passagem de parâmetros):
printf ("\n\n\n1- Inserir uma conta de cliente");
printf ("\n2- exibir todas as contas");
printf ("\n3- Procurar uma conta e exibi-la");
printf ("\n4- Deposito de uma determinada conta");
printf ("\n5- Retirada/saque em uma determinada conta");
printf ("\n6- Remove uma conta");
printf ("\n7- Sair");
-------------------RESOLUÇÃO --------------------------------------------------------------------------
struct conta{
int num_conta;
char tipo_conta;
char nome[30];
float limite;
float saldo;
};
int busca (conta clientes[10],int tam,int num)
{
int i=0;
while ((i<tam)&&(num!= clientes[i].num_conta))
i++;
if ((i<tam)&&(num == clientes[i].num_conta))
return i;
else
return -1;
}
cliente[1].num_conta=201;
cliente [1].tipo_conta='E'; // conta especial
strcpy(cliente [1].nome, "Carlota Joaquina") ;
cliente [1].limite = 1000.00;
cliente [1].saldo = 8500.75;
cliente[2].num_conta=310;
cliente [2].tipo_conta='C'; // conta comum
strcpy(cliente [2].nome, "Marcelo Pereira") ;
cliente [2].limite = 0;
cliente [2].saldo = 780.90;
}
44
void insere(conta cliente[10], int tl){
printf ("entre com o numero da conta");
scanf("%d",&cliente[tl].num_conta);
printf ("entre com o tipo da conta (C/E)");
cliente[tl].tipo_conta = getchar();
printf ("entre com o nome do cliente");
scanf("%s",&cliente[tl].nome);
if (cliente[tl].tipo_conta=='E'){
printf ("entre com o limite");
scanf("%f",&cliente[tl].limite);
} else
cliente[tl].limite =0;
printf ("entre com o saldo");
scanf("%f",&cliente[tl].saldo);
}
45
printf ("entre com o numero da conta");scanf("%d",&num);
posicao = busca(cliente,tl,num);
if (posicao==-1)
printf("Conta NAO existe");
else printf ("%d\t %c\t\t%s\t%7.2f\t %7.2f\n",cliente[posicao].num_conta,
cliente[posicao].tipo_conta,
cliente[posicao].nome,cliente[posicao].limite,
cliente[posicao].saldo); break;
case 4://deposito
printf ("entre com o numero da conta");scanf("%d",&num);
posicao = busca(cliente,tl,num);
if (posicao==-1)
printf("Conta NAO existe");
else
{
printf("Conta do sr(a).%s\n",cliente[posicao].nome);
printf("entre com o valor do deposito");scanf("%f",&valor);
cliente[posicao].saldo += valor;
}
break;
case 5://saque
printf ("entre com o numero da conta");scanf("%d",&num);
posicao = busca(cliente,tl,num);
if (posicao==-1)
printf("Conta NAO existe");
else
{
printf("Conta do sr(a).%s\n",cliente[posicao].nome);
printf("entre com o valor do saque:");scanf("%f",&saque);
float saldototal=0;
if (cliente[posicao].tipo_conta=='E')
saldototal = cliente[posicao].saldo + cliente[posicao].limite;
else saldototal = cliente[posicao].saldo;
if (saldototal >= saque) {
cliente[posicao].saldo -= saque;
printf("\n Saque realizado!Novo saldo: $%5.2f",cliente[posicao].saldo);
} else printf("\nSaldo insuficente. $%5.2f",cliente[posicao].saldo);
}//else
break;
case 6://remove uma conta
printf ("entre com o numero da conta a ser removida");
scanf("%d",&num);
posicao = busca(cliente,tl,num);
if (posicao==-1)
printf("Conta NAO existe");
else {
for (i=posicao+1;i<tl;i++)
cliente[i-1]=cliente[i];
tl--;
printf("\nRemovido com sucesso");
}
46
break;
}//switch
} //while
system ("PAUSE");
}//main
47
11) Criar 3 estruturas de dados para atender o seguinte:
a) A primeira estrutura deve conter o nome de uma pessoa com a respectiva
nascimento (ver struct´s data e pessoa abaixo e também a Matriz 20x2)
b) A segunda estrutura contêm o nome do signo com as datas (dia e mês) de inicio
e descrição das características correspondentes ao signo (ver matriz do Ho
Ocidental abaixo).
c) A terceira estrutura que contem o nome do signo no horóscopo chinês, um
contendo 6 anos e a descrição das características correspondente ao signo (Apes
horóscopo chinês considerar também dia e mês de nascimento, para este
somente nos preocuparemos com o ano).
OBS: para esse exercício será necessário criar struct e também, vetores contendo str
1 João
... .....
19 Vilma
struct data{
int dia;
int mes;
int ano;
};
struct pessoa{
char nome[10];
struct data nascimento;
};
48
struct horoscopo {
char signo[10];
int diaInicio;
int diaFinal;
int mesInicio;
int mesFinal;
char caracteristica[50];
};
... ....
11
struct chines {
char signo[10];
int anos[6];
char descricao[50];
};
PROJETO
vetPRODUTOS
Descrição Codigo do Qtdade Qtdade Qtdade
Fornecedor Estoque Minima Maxima
0 Arroz 777 100 150 200
1 Feijão 777 190 60 100
2 Leite condensado 444 45 50 90
3 Macarrão 555 68 60 100
4 Molho tomate 222 24 20 70
5 Açúcar 333 67 70 100
6 Bolacha salgada 555 135 45 90
7 Água mineral 1 litro987 60 40 80
8 Farinha de trigo 111 230 40 90
9 Leite CX– 12 666 20 30 50
unidades
49
a) Faça uma função para exibir todos os produtos que estão abaixo do estoque. Par
cada produto exibido (cuja quantidade no estoque está abaixo do mínimo) você d
calcular qual a quantidade a ser solicitada para o Fornecedor.
IF (QtdadeEstoque < QtdadeMinima) fazer pedido ao fornecedor
qtdadeSolicitada = QtdadeMaxima – QtdadeEstoque
b) Faça uma função para exibir todos os produtos que estão EXCEDENTES no
estoque (a quantidade no estoque está acima do máximo permitido). Exemplo:
feijão fornecedor: 777 estoque atual: 190 estoque máximo permitido: 100 exce
bolacha salgada fornecedor: 555 estoque atual: 135 estoque máximo permitido: 90 exce
Farinha de trigo fornecedor: 111 estoque atual: 230 estoque máximo permitido: 90 exce
140
c) Faça uma função para REMOVER um produto do vetPRODUTOS. Deve ser lido
o código do produto no programa principal (MAIN) e passado como parâmetro pa
função REMOVER.
50
Tipo Significado
“r” Abre um arquivo (texto) para leitura. O arquivo deve existir antes de ser abert
“w” Abre um novo arquivo texto para gravação. Se o arquivo já existir, ele será
destruído e o novo arquivo será criado no seu lugar.
“a” Abre um arquivo texto para gravação. Os dados serão adicionados no fim do
arquivo (append = acréscimo de novos registros no final). Um novo arquivo se
criado, caso o arquivo não exista
“r+” Abre um arquivo texto para leitura e gravação. O arquivo deve existir e pode s
modificado.
“w+” Cria um arquivo texto para leitura e para gravação. Se o arquivo já existir, ele
destruído e um novo arquivo será criado no seu lugar.
“a+” Abre um arquivo texto para leitura e gravação. Os dados serão adicionados no
do arquivo se ele já existir ou um novo arquivo será criado, no caso dele não e
Exemplo 1:
FILE *fp; /* declaração de um arquivo
fp= fopen(“listatelefones.txt”,”r”); /* o arquivo se chama listatelefones.txt para leit
arquivo deve existir antes de ser aberto */
if (!fp) {
printf(“\n\nErro na abertura do arquivo”);
exit(0); getchar();
}
As funções fprintf e fscanf são utilizadas para escrever e para ler no arquivo.
A função fclose() é utilizada para fechar o arquivo.
Função feof() (função EOF End Of File) indica o fim do arquivo. As vezes é ne
verificar se um arquivo chegou ao fim. Para isso, podemos usar a função feof(arq). Ela r
não-zero se arquivo chegou ao EOF, caso contrário retorna zero.
Exemplo 2: Gravar os números de 1 até 10 no arquivo teste.txt
#include <stdio.h>
main() {
OBSERVAÇÃO: o arquivo texto “teste.txt”
FILE *f = fopen("teste.txt", "w");
fica na mesma pasta aonde se encontram
int i;
programa fonte e o programa compilado.
for (i=1; i<=10; i++)
fprintf(f, "%d\n", i);
fclose(f);
}
51
Exemplo 4:Em um arquivo chamado "notas.txt" estão os dados nomes e notas de alunos.
Em cada linha há o nome do aluno, seguido de três notas:
Maria 8 8 10
Jose 6 6 8
Camila 7 9.5 7.5
Programador 10 10 10
Crie um programa que exiba o nome de cada aluno e sua média.Observe que em toda
um padrão:
string, espaço, número, espaço, número, espaço, número, enter
52
Trabalhar com arranjos complementares (pares).
Primeiramente
ler as informações de um arquivotexto e armazená-lasem arranjos
complementares.
Fazer um procedimento para ler o nome de um passageiro X. Informar se ele está ent
passageiros do vôo, onde ele irá embarcar e qual o seu destino.
Menu:
1- Le arquivo texto e armazena em arranjos
1- Exibe os arranjos
2- Consulta de embarque - método LOCALIZA
3- Sair
11. PONTEIROS
54
strcpy(atual->info,"Maria");
strcpy(novo->info,"Joao");
atual->prox=novo;
no *pont = (no*)malloc(sizeof(no));
strcpy(pont->info,"Pedro");
novo->prox = pont;
pont->prox = atual;
printf("\n Dando a volta circular...Prox do pont:%s",pont->prox->info);
getchar();
}
55