#01
Tipos de Variáveis e Formatação de Saídavariaveis.c
Primeiro contato com os tipos primitivos de C: int, double, float e char. Demonstra o uso de printf com especificadores de formato (%d, %5.2f, %5.4lf, %c) para controlar casas decimais e largura de campo.
Iterativo
#include <stdio.h>
void main(){
int quantidade=10;
double pi=3.14159265;
float valor=1.25;
char letra = 'A';
printf("Foram compradas %d maçãs a R$ %5.2f cada", quantidade,valor);
printf("%c constante pi = %5.4lf",letra,pi);
}
#02
Leitura de Strings e Caracteresstring.c
Introdução ao uso de strings em C: declara char nome[30] e char endereco[50], leitura com scanf("%s") e exibição com printf. Exercício básico de manipulação de cadeias de caracteres.
Iterativo
#include <stdio.h>
void main(){
char nome[30], endereco[50];
int idade;
printf("Informe o seu nome: ");
scanf("%s",nome);
printf("Informe a sua idade: ");
scanf("%d",&idade);
printf("Informe o seu endereço: ");
scanf("%s",endereco);
printf("%s tem %d anos e mora em %s",nome,idade,endereço);
}
#03
Cálculo do Total — Pêras da Merceariaperas.c
Primeiro algoritmo de entrada-cálculo-saída: lê quantidade e valor unitário de pêras, multiplica e exibe o total. Demonstra o uso de \e[H\e[2J para limpar a tela antes de exibir o resultado.
Iterativo
/***Faça um algoritmo que leia a quantidade de pêras compradas em
uma mercearia e o valor da unidade. O algoritmo deve informar o total
a ser pago pelo cliente.***/
#include <stdio.h>
void main(){
int qtde;
float valor, total;
printf("Digite a quantidade de pêras compradas: ");
scanf("%d",&qtde);
printf("Digite o valor da unidade da pêra (R$): ");
scanf("%f",&valor);
printf("\e[H\e[2J"); //esse comando limpa a tela
total = valor*qtde;
printf("Você deve pagar R$ %2.2f pelas %d unidades de pêra.",total,qtde);
}
#04
Cálculo de Consumo e Lucro de Táxitaxi.c
Lê os dados de um dia de trabalho de taxista (odômetro inicial/final, litros gastos, valor recebido) e calcula o consumo médio em Km/L e o lucro líquido descontando o custo do combustível. Exercício de expressões aritméticas com floats.
Iterativo
/***Um motorista de táxi deseja calcular o rendimento de seu carro na
praça. Sabendo-se que o preço do combustível é de R$ 1,90, escreva
um programa para ler: a marcação do odômetro (Km) no início do dia,
a marcação (Km) no final do dia, o número de litros de combustível gasto
e o valor total (R$) recebido dos passageiros. Faça um algoritmo que
calcule e mostre a média do consumo em Km/L e o lucro líquido do dia.***/
#include <stdio.h>
#define preco 1.9
void main(){
float inicio,fim,litrosGasto,total;
printf("Digite a marcação do odômetro (Km) no início do dia: ");
scanf("%f",&inicio);
printf("Digite a marcação do odômetro (Km) no fim do dia: ");
scanf("%f",&fim);
printf("Digite a qtde de combustível gasta (lts): ");
scanf("%f",&litrosGasto);
printf("Digite o valor total recebido pelo taxista (R$): ");
scanf("%f",&total);
printf("O consumo do carro foi = %2.2f Km/l \n",((fim-inicio)/litrosGasto));
printf("O lucro do dia foi = R$ %2.2f\n",(total-litrosGasto*preco));
}
#05
Percentual de Votos por CategoriapercentualEleitores.c
Lê total de eleitores, votos brancos e válidos; calcula os nulos por diferença e exibe o percentual de cada categoria. Exercício de expressões aritméticas com inteiros e formatação de porcentagem com %%.
Iterativo
/*********************
Escreva um algoritmo para ler o número total de eleitores de um município,
o número de votos brancos, nulos e válidos. Calcular e escrever o percentual
que cada um representa em relação ao total de eleitores.
**********************/
#include <stdio.h>
void main(){
int total;
printf("Informe a quantidade total de eleitores: ");
scanf("%d",&total);
int brancos;
printf("Informe a quantidade de votos brancos: ");
scanf("%d",&brancos);
int validos;
printf("Informe a quantidade de votos válidos: ");
scanf("%d",&validos);
int nulos = total - brancos - validos;
float p_brancos = brancos*100/total;
float p_nulos = nulos*100/total;
float p_validos = validos*100/total;
printf("Percentual de votos Válidos = %.1f%%, Percentual de votos Brancos = %.1f%%, Percentual de votos Nulos = %.1f%%", p_validos,p_brancos,p_nulos);
}
#06
Quantidade de Azulejos para uma SalasalaAzulejos.c
Lê dimensões de uma sala retangular e do azulejo quadrado e calcula o número de azulejos necessários (área da sala ÷ área do azulejo, arredondando para cima com +1). Exercício de divisão de floats aplicada.
Iterativo
/******************************************************************************
Faça um algoritmo que leia as dimensões de uma sala retangular, largura e comprimento.
Leia as dimensões do azulejo quadrado que será utilizado na reforma desta sala.
Por fim, informe quantos azulejos serão necessários para cobrir todo o chão da sala.
*******************************************************************************/
#include <stdio.h>
int main()
{
float largura, comprimento;
printf("Digite a largura e o comprimento da sala (em metros): ");
scanf("%f %f",&largura, &comprimento);
float ladoAzulejo;
printf("Digite a medida do lado do azulejo (em metros): ");
scanf("%f",&ladoAzulejo);
float qtde = (largura*comprimento)/(ladoAzulejo*ladoAzulejo);
printf("Qtde de azulejos = %.0f", qtde+1);
return 0;
}
#07
Soma dos Dois Maiores — Operador Ternáriosoma2MaioresTernario.txt
Lê 3 inteiros e calcula a soma dos dois maiores usando operador ternário aninhado. Demonstra como substituir estruturas if-else por expressões condicionais compactas em C.
Iterativo
//Faça um algoritmo que leia 3 valores inteiros e informe a soma dos dois maiores
#include <stdio.h>
void main() {
int a,b,c,soma;
printf("Informe 3 números inteiros quaisquer:");
scanf("%d %d %d",&a,&b,&c);
soma = ((a>c)&&(b>c))?(a+b):(((a>b)&&(c>b))?(a+c):(b+c));
printf("Soma = %d",soma);
}
#08
Par ou ÍmparparImpar.c
Lê um inteiro e usa x % 2 == 0 para determinar se é par ou ímpar. Exercício introdutório de if-else com operador módulo.
Iterativo
/******************************************************************************
Faça um algoritmo que leia um número inteiro e informe se ele é par ou ímpar
*******************************************************************************/
#include <stdio.h>
void main(){
int x;
printf("Informe um número inteiro qualquer: \n");
scanf("%d",&x);
if ((x % 2)==0) printf("Número par");
else printf("Número ímpar");
}
#09
Positivo, Negativo ou NulopositivoNegativoNulo.c
Classifica um número como positivo, negativo ou nulo com if-else if-else. Exercício fundamental de condicionais encadeadas com três ramos.
Iterativo
/******************************************************************************
Faça um algoritmo que leia um número e informe se ele é positivo, negativo ou nulo
*******************************************************************************/
#include <stdio.h>
#include <math.h>
void main(){
float x;
printf("Informe um número qualquer: \n");
scanf("%f",&x);
if (x > 0){
printf("Positivo");
}else if (x < 0){
printf("Negativo");
}else{
printf("Nulo");
}
}
#10
Quadrante do Ponto Cartesianoquadrantes.c
Lê coordenadas (x, y) e determina o quadrante (1º ao 4º), ou se o ponto está na origem, no eixo X ou no eixo Y. Sete casos cobertos por condicionais compostos com &&.
Iterativo
/******************************************************************************
Faça um algoritmo que leia as coordenadas de um ponto cartesiano
(x, y) e informe em qual quadrante o ponto está, ou se ele está na
origem (0, 0), ou em um dos eixos (eixo x ou eixo y).
*******************************************************************************/
#include <stdio.h>
void main(){
float x,y;
printf("Digite as coordenadas do ponto (x,y): \n");
scanf("%f %f",&x,&y);
if((x>0) && (y>0)) printf("1º Quadrante");
else if((x<0) && (y>0)) printf("2º Quadrante");
else if((x<0) && (y<0)) printf("3º Quadrante");
else if((x>0) && (y<0)) printf("4º Quadrante");
else if((x==0) && (y!=0)) printf("Eixo Y");
else if((x!=0) && (y==0)) printf("Eixo X");
else printf("Origem");
}
#11
Cálculo do Peso Ideal por SexopesoIdeal.c
Calcula o peso ideal com fórmulas diferentes para homens e mulheres. O código contém um bug intencional didático: uso de = (atribuição) em vez de == (comparação) no if — excelente para discussão em aula.
Iterativo
// 3. Faça um algoritmo que calcule o peso ideal de uma pessoa a partir de seus dados de altura e sexo (f - feminino e m - masculino)
// peso ideal dos homens = (72,7*altura) - 58
// peso ideal das mulheres = (62,1*altura) - 44,7
#include <stdio.h>
void main(){
float altura,pesoIdeal;
char sexo;
printf("Informe o sexo: 'f'=feminino e 'm'=masculino:\n");
scanf("%c",&sexo);
printf("Informe a altura:\n");
scanf("%f",&altura);
if (sexo = 'f') pesoIdeal = (62.1*altura)-44.7;
else pesoIdeal = (72.7*altura)-58;
printf("Peso ideal = %.1f",pesoIdeal);
}
#12
Situação do Aluno pela MédianotasMedia.c
Lê 3 notas, calcula a média e exibe APROVADO (≥7,0), REPROVADO (≤2,5) ou PROVA FINAL (entre 2,5 e 7,0). Exercício clássico de condicionais com faixas numéricas.
Iterativo
/******************************************************************************
Faça um algoritmo que leia três números, calcule a média e informe:
• "APROVADO", caso a média seja maior ou igual a 7,0
• "REPROVADO", caso a média seja menor ou igual a 2,5
• "PROVA FINAL", caso a média esteja entre 2,5 e 7,0
*******************************************************************************/
#include <stdio.h>
int main(){
float n1,n2,n3,media;
printf("Digite as três notas do aluno:\n");
scanf("%f %f %f",&n1,&n2,&n3);
media = (n1+n2+n3)/3;
if (media>=7) printf("APROVADO");
else if (media <= 2.5) printf("REPROVADO");
else printf("PROVA FINAL");
return 0;
}
#13
Média das Duas Maiores Notas (com optativa)notasOptativa.c
Lê 2 notas regulares e 1 optativa (ou -1 se não houver) e calcula a média das duas maiores. Demonstra condicionais aninhados para identificar qual par de notas compõe a maior média possível.
Iterativo
/******************************************************************************
Faça um algoritmo que leia duas notas regulares e uma nota optativa
(caso o aluno não tenha nota optativa, digitar -1) e informe a média
das duas maiores notas, de acordo com as notas fornecidas.
*******************************************************************************/
#include <stdio.h>
void main(){
float n1,n2,op,media;
printf("Digite as duas notas do aluno: \n");
scanf("%f %f",&n1,&n2);
printf("Digite a notas optativa (-1 caso não tenha): \n");
scanf("%f",&op);
if(op!=-1){
if((n1>n2) && (op>n2)) media = (n1+op)/2;
else if ((n2>n1) && (op>n1)) media = (n2+op)/2;
else if ((n2>op) && (n1>op)) media = (n2+n1)/2;
}else media = (n2+n1)/2;
printf("A média das duas maiores notas = %.2f",media);
}
#14
Polígonos — Tipo e Perímetro (switch)poligonos.c
Lê a quantidade de lados e a medida de um polígono regular e usa switch para identificar o tipo (triângulo a heptágono) e calcular o perímetro. Caso contrário, informa polígono inválido.
Iterativo
/******************************************************************************
Questão 1 - Faça um algoritmo que leia a quantidade de lados de
um polígono regular, e a medida desses lados e informe
(usar switch):
a) caso seja um triângulo, quadrado, pentágono, hexágono,
heptágono ou octógono, informar o tipo do polígono e seu perímetro.
b) Caso contrário, informar polígono inválido. (valor: 1,0pt)
*******************************************************************************/
#include <stdio.h>
int main(){
int lados;
float medida;
printf("Informe a quantidade de lados do polígono: ");
scanf("%d",&lados);
printf("Informe a medida do lado: ");
scanf("%f",&medida);
switch (lados){
case 3:
printf("Polígono é um triângulo com perímetro = %.1f",medida*3.0);
break;
case 4:
printf("Polígono é um quadrado com perímetro = %.1f",medida*4.0);
break;
case 5:
printf("Polígono é um pentágono com perímetro = %.1f",medida*5.0);
break;
case 6:
printf("Polígono é um hexágono com perímetro = %.1f",medida*6.0);
break;
case 7:
printf("Polígono é um heptágono com perímetro = %.1f",medida*7.0);
break;
default:
printf("Polígono Inválido");
break;
}
}
#15
Polígonos — Perímetro EstendidoPoligonosPerimetro.c
Versão complementar do exercício de polígonos com switch, focada no cálculo do perímetro. Apresenta a mesma lógica com formatação de saída ligeiramente diferente — útil para comparar estilos de resolução.
Iterativo
/******************************************************************************
Questão 1 - Faça um algoritmo que leia a quantidade de lados de
um polígono regular, e a medida desses lados e informe
(usar switch):
a) caso seja um triângulo, quadrado, pentágono, hexágono,
heptágono ou octógono, informar o tipo do polígono e seu perímetro.
b) Caso contrário, informar polígono inválido. (valor: 1,0pt)
*******************************************************************************/
#include <stdio.h>
int main(){
int lados;
float medida;
printf("Informe a quantidade de lados do polígono: ");
scanf("%d",&lados);
printf("Informe a medida do lado: ");
scanf("%f",&medida);
switch (lados){
case 3:
printf("Polígono é um triângulo com perímetro = %.1f",medida*3.0);
break;
case 4:
printf("Polígono é um quadrado com perímetro = %.1f",medida*4.0);
break;
case 5:
printf("Polígono é um pentágono com perímetro = %.1f",medida*5.0);
break;
case 6:
printf("Polígono é um hexágono com perímetro = %.1f",medida*6.0);
break;
case 7:
printf("Polígono é um heptágono com perímetro = %.1f",medida*7.0);
break;
default:
printf("Polígono Inválido");
break;
}
}
#16
Validação de Usuário e Senha (if-else)UsuarioSenha.c
Lê usuário e senha, compara com strcmp contra valores fixos e exibe Acesso Permitido ou Acesso Negado usando if-else. Introdução ao uso de string.h.
Iterativo
// 4. Faça um algoritmo que leia o usuário e a senha e compare com usuário = "IFBA" e senha = "fsa1234", informe:
// - "Acesso Permitido", caso usuários e senha sejam válidos
// - "Acesso Negado", caso contrário
#include <stdio.h>
#include <string.h>
void main(){
char senha[10],usuario[10];
printf("Informe o usuário:\n");
scanf("%s",usuario);
printf("Informe a senha:\n");
scanf("%s",senha);
if ((!strcmp(usuario,"IFBA"))&&(!strcmp(senha,"fsa1234")))
printf("Acesso Permitido!");
else
printf("Acesso Negado!");
}
#17
Validação de Usuário e Senha (Ternário)UsuarioSenhaTernario.c
Versão equivalente da validação de login usando operador ternário diretamente no printf. Demonstra a forma mais compacta de escrever condicionais simples em C — comparar com a versão if-else.
Iterativo
// 4. Faça um algoritmo que leia o usuário e a senha e compare com usuário = "IFBA" e senha = "fsa1234", informe:
// - "Acesso Permitido", caso usuários e senha sejam válidos
// - "Acesso Negado", caso contrário
#include <stdio.h>
#include <string.h>
void main(){
char senha[10],usuario[10];
printf("Informe o usuário:\n");
scanf("%s",usuario);
printf("Informe a senha:\n");
scanf("%s",senha);
printf(((!strcmp(usuario,"IFBA"))&&(!strcmp(senha,"fsa1234")))?"Acesso Permitido!":"Acesso Negado!");
}
#18
Tabuada Completa com FORtabuadaFOR.c
Gera a tabuada de multiplicação, soma, subtração e divisão usando for. A divisão começa em i=1 para evitar divisão por zero. Exercício clássico de laços com quatro operações.
Iterativo
//Faça um algoritmo que leia um número inteiro qualquer e informe sua tabuada da multiplicação, soma, divisão e subtração
#include <stdio.h>
void main(){
int i,num;
printf("Informe um número qualquer: ");
scanf("%d",&num);
printf("TABUADA DA MULTIPLICAÇÃO\n");
for(i=0;i<10;i++) printf("%d X %d = %d\n", i,num, i*num);
printf("TABUADA DA SOMA\n");
for(i=0;i<10;i++) printf("%d + %d = %d\n", i,num, i+num);
printf("TABUADA DA SUBTRAÇÃO\n");
for(i=0;i<10;i++) printf("%d - %d = %d\n", i,num, i-num);
printf("TABUADA DA DIVISÃO\n");
for(i=1;i<10;i++) printf("%d / %d = %.3f\n", num, i, (float)num/i);
}
#19
Tabuada Completa com WHILEtabuadaWHILE.c
Mesma tabuada das quatro operações reescrita com while. Compara diretamente com a versão FOR — reforça a equivalência entre os dois laços.
Iterativo
//Faça um algoritmo que leia um número inteiro qualquer e informe sua tabuada da multiplicação, soma, divisão e subtração USANDO WHILE
#include <stdio.h>
void main(){
int i,num;
printf("Informe um número qualquer: ");
scanf("%d",&num);
printf("TABUADA DA MULTIPLICAÇÃO\n");
i=0;
while(i<10){
printf("%d X %d = %d\n", i,num, i*num);
i++;
}
printf("TABUADA DA SOMA\n");
i=0;
while(i<10){
printf("%d + %d = %d\n", i,num, i+num);
i++;
}
printf("TABUADA DA SUBTRAÇÃO\n");
i=0;
while(i<10){
printf("%d - %d = %d\n", i,num, i-num);
i++;
}
printf("TABUADA DA DIVISÃO\n");
i=0;
while(i<10){
printf("%d / %d = %.3f\n", num, i, (float)num/i);
i++;
}
}
#20
Altura JP e Joaquim — Simulação FixaalturaJPJoaquim.c
Valores fixos: João Pedro (1,60m, +2cm/ano) e Joaquim (1,00m, +3cm/ano). Usa while para contar quantos anos Joaquim leva para ultrapassar JP. Variante didática do exercício de alturas parametrizáveis.
Iterativo
/*João Pedro tem 1,60m e cresce 2cms por ano. Joaquim tem 1,00m e
cresce 3cms por ano. Faça um algoritmo em C que informe quantos anos
Joaquim levará para ultrapassar a altura de João Pedro*/
#include <stdio.h>
void main(){
float JP=1.6, Joaquim = 1.0;
int anos=0;
while(JP>=Joaquim){
JP+=0.02;
Joaquim+=0.03;
anos++;
}
printf("Após %d anos, Joaquim terá %.2fm de altura\n",anos,Joaquim);
printf("e João Pedro terá %.2fm de altura\n",JP);
}
#21
Ultrapassa Altura — Simulação ParametrizávelultrapassaAltura.c
Versão parametrizável da simulação de crescimento: lê alturas e fatores de crescimento do usuário, troca automaticamente os papéis se necessário e conta quantos anos X leva para ultrapassar Y.
Iterativo
/*Faça um algoritmo em C que informe quantos anos X levará
para ultrapassar a altura de Y. Leia as alturas iniciais e o
fator de crescimento*/
#include <stdio.h>
void main(){
float X, Y, fatorX, fatorY,aux;
int anos=0;
printf("Informe a altura inicial de X: "); scanf("%f",&X);
printf("Informe a altura inicial de Y: "); scanf("%f",&Y);
printf("Informe o fator de crescimento de X: "); scanf("%f",&fatorX);
printf("Informe o fator de crescimento de Y: "); scanf("%f",&fatorY);
if(fatorX < fatorY){
aux = fatorY;
fatorY = fatorX;
fatorX = aux;
aux = Y;
Y = X;
X = aux;
}
while(Y>=X){
Y+=fatorY;
X+=fatorX;
anos++;
}
printf("Após %d anos, X terá %.2fm de altura\n",anos,X);
printf("e Y terá %.2fm de altura\n",Y);
}
#22
Verificação de Número Primoprimo.c
Conta os divisores de um número percorrendo do próprio número até 1 (decrescente) e declara primo se houver exatamente 2. Permite repetição via flag S/N com do-while.
Iterativo
// Faça um algoritmo que leia um número inteiro e informe se ele é primo. OBS.: Todo número primo é divisível apenas por 1 e ele mesmo.
#include <stdio.h>
void main(){
int x, divisor, qtde;
char resp;
do{
printf("Informe um número inteiro: ");
scanf("%d%*c",&x);
qtde=0;
for(divisor = x; divisor > 0; divisor--){
if(x%divisor == 0){
printf("Divisor = %d\n",divisor);
qtde++;
}
}
if(qtde==2) printf("Número primo!\n");
else printf("Número não é primo!\n");
printf("Deseja repetir operação? S-Sim e N-Não\n ");
scanf("%c",&resp);
}while(resp=='S');
}
#23
Primos em um Intervalo [x,y]PrimosNoIntervalo.c
Lê os limites de um intervalo e lista todos os números primos contidos nele com laços aninhados. Versão sem modularização — base para comparar com a versão que usa funções.
Iterativo
/**1.Escreva um algoritmo, em Linguagem C, que leia X e Y, que são os limites de um intervalo
fechado [x,y], e mostre todos os números primos contidos neste intervalo. Após a execução,
permita que o usuário repita o algoritmo quantas vezes ele quiser. (valor: 1,0pt)**/
#include <stdio.h>
void main() {
int x,y,i,j,divisores,resp;
do{
printf("Informe os limites do intervalo [x,y]: ");
scanf("%d %d", &x,&y);
for(i=x;i<=y;i++){
divisores = 0;
for(j=1;j<=i;j++)
if(i%j==0) divisores++;
if(divisores == 2) printf("Primo = %d\n", i);
}
printf("Deseja informar novo intervalo? Digite: 1-Sim e 2-Não");
scanf("%d",&resp);
}while(resp == 1);
}
#24
Múltiplos de 3 em um Intervalomultiplos3.c
Lê dois limites [x,y], garante a ordenação correta com troca de valores e lista todos os múltiplos de 3 no intervalo com for. Inclui loop de repetição via S/N.
Iterativo
// Faça um algoritmo que leia os limites de um intervalo de números inteiros [x,y] e informe todos os múltiplos de 3 contidos no intervalo
#include <stdio.h>
void main(){
int x,y,aux;
char resp;
do{
printf("Informe dois números inteiros: ");
scanf("%d %d%*c",&x,&y);
if(y<x){
aux = x;
x = y;
y = aux;
}
for(aux=x; aux<=y; aux++)
if(aux%3 == 0)
printf("Múltiplo de 3 = %d\n",aux);
printf("Deseja repetir operação? S-Sim e N-Não\n ");
scanf("%c",&resp);
}while(resp=='S');
}
#25
Primeiros X Múltiplos Simultâneosmultiplos.c
Encontra os X primeiros múltiplos simultâneos de dois números usando laço for com parada via break. Demonstra o uso de laço controlado por quantidade atingida.
Iterativo
// Fazer um algoritmo em C para exibir os X primeiros múltiplos simultâneos de dois números dados.
#include <stdio.h>
void main(){
int num1, num2, qtde=0, X, i;
printf("Informe os dois números inteiros desejados: ");
scanf("%d %d",&num1,&num2);
printf("Informe quantos múltiplos você deseja mostrar: ");
scanf("%d",&X);
for(i=1;;i++){
if((i%num1==0)&&(i%num2==0)){
qtde++;
printf("Múltiplo de %d e %d = %d\n",num1,num2,i);
}
if(qtde == X) break;
}
}
#26
N Múltiplos Simultâneos de X e YMultiploSimultaneos.c
Variante dos múltiplos simultâneos com dois contadores separados (i para candidatos e qtde para contagem). Versão com repetição interativa do programa inteiro.
Iterativo
/**3. Fazer um algoritmo, em Linguagem C, que mostre os N primeiros múltiplos simultâneos
de dois números dados (X e Y). Os valores de N, X e Y serão fornecidos pelo usuário.
Permita que o usuário repita o algoritmo quantas vezes ele quiser. (valor: 1,0pt).
**/
#include <stdio.h>
void main() {
int n,x,y,i,resp,qtde;
do{
printf("Digite dois números inteiros: ");
scanf("%d %d",&x,&y);
printf("Informe quantos múltiplos você deseja mostrar: ");
scanf("%d",&n);
for(i=1,qtde=0;qtde<n;i++){
if((i%x==0)&&(i%y==0)){
printf("Múltiplo de %d e %d = %d\n",x,y,i);
qtde++;
}
}
printf("Deseja repetir o programa? 1-Sim 2-Não: ");
scanf("%d",&resp);
}while(resp == 1);
}
#27
Login com Limite de Tentativas (FOR)senhaUsuarioFOR.c
Sistema de login que permite no máximo 5 tentativas via laço for com decremento. Informa quantas tentativas restam a cada erro; ao esgotar, bloqueia o acesso. Demonstra uso de break.
Iterativo
// Faça uma algoritmo que implemente um sistema de LOGIN e SENHA. LOGIN = ”ifbaBSI” e SENHA = ”alunoIFBA”. O sistema deverá informar ”Acesso Negado”, caso o usuário erre login e/ou senha. E deverá informar ”Acesso Permitido”, caso contrário. O algoritmo deverá permitir que o usuário erre apenas 5 vezes. Após 5 erros, o usuário terá a senha bloqueada e não poderá tentar logar novamente. Informe, a cada erro, quantas tentativas o usuário ainda tem.
// 4. Faça um algoritmo que leia o usuário e a senha e compare com usuário = "IFBA" e senha = "fsa1234", informe:
// - "Acesso Permitido", caso usuários e senha sejam válidos
// - "Acesso Negado", caso contrário
#include <stdio.h>
#include <string.h>
void main(){
char senha[10],usuario[10];
int tentativas;
for(tentativas = 5; tentativas > 0; --tentativas){
printf("Informe o usuário:\n");
scanf("%s",usuario);
printf("Informe a senha:\n");
scanf("%s",senha);
if((!strcmp(usuario,"ifbaBSI"))&&(!strcmp(senha,"alunoIFBA"))){
printf("Acesso Permitido!\n");
break;
}else{
printf("Acesso Negado!\n");
if(tentativas > 2)
printf("Você tem apenas %d tentativas\n", tentativas-1);
else if (tentativas == 2)
printf("Você tem apenas 1 tentativa\n");
else
printf("Seu acesso foi bloqueado!\n");
}
}
}
#28
Login com 5 Tentativas — VariantesenhaUsuario.c
Variante do sistema de login com 5 tentativas — lógica de contagem e mensagens ligeiramente diferente. Ótimo para comparar diferentes implementações do mesmo problema.
Iterativo
// Faça uma algoritmo que implemente um sistema de LOGIN e SENHA. LOGIN = ”ifbaBSI” e SENHA = ”alunoIFBA”. O sistema deverá informar ”Acesso Negado”, caso o usuário erre login e/ou senha. E deverá informar ”Acesso Permitido”, caso contrário. O algoritmo deverá permitir que o usuário erre apenas 5 vezes. Após 5 erros, o usuário terá a senha bloqueada e não poderá tentar logar novamente. Informe, a cada erro, quantas tentativas o usuário ainda tem.
// 4. Faça um algoritmo que leia o usuário e a senha e compare com usuário = "IFBA" e senha = "fsa1234", informe:
// - "Acesso Permitido", caso usuários e senha sejam válidos
// - "Acesso Negado", caso contrário
#include <stdio.h>
#include <string.h>
void main(){
char senha[10],usuario[10];
int tentativas;
for(tentativas = 5; tentativas > 0; --tentativas){
printf("Informe o usuário:\n");
scanf("%s",usuario);
printf("Informe a senha:\n");
scanf("%s",senha);
if((!strcmp(usuario,"ifbaBSI"))&&(!strcmp(senha,"alunoIFBA"))){
printf("Acesso Permitido!\n");
break;
}else{
printf("Acesso Negado!\n");
if(tentativas > 2)
printf("Você tem apenas %d tentativas\n", tentativas-1);
else if (tentativas == 2)
printf("Você tem apenas 1 tentativa\n");
else
printf("Seu acesso foi bloqueado!\n");
}
}
}
#29
Número Perfeito — Soma DecrementadasePerfeito.c
Verifica se um número é perfeito (soma dos divisores excluindo ele mesmo). O laço percorre candidatos de forma decrementada — variante didática para mostrar que a ordem da iteração não altera o resultado.
Iterativo
/******************************************************************************
Faça um algoritmo que leia um número inteiro e informe se ele é
perfeito. Um número perfeito é um número inteiro que é igual à soma
de todos os seus divisores excluindo o próprio número.
Ex: 6 é perfeito, pois 6 = 1 + 2 + 3. obs.: fazer com decrementação
*******************************************************************************/
#include <stdio.h>
void main(){
int num, soma;
char resp;
do{
printf("Informe um número inteiro: ");
scanf("%d%*c",&num);
soma = 0;
for(int i=(num-1); i>=1; i--)
if(num%i == 0) soma+=i;
if(soma == num) printf("%d é perfeito!\n",num);
else printf("%d NÃO é perfeito!\n",num);
printf("Deseja informar novo número? S-Sim, N-Não: ");
scanf("%c",&resp);
}while(resp!='N');
}
#30
Número Perfeito — Soma Crescenteperfeito.c
Verificação de número perfeito pela soma dos divisores em ordem crescente. Contrasta com a versão decrementada para mostrar que diferentes ordens de iteração produzem o mesmo resultado.
Iterativo
/**Sabendo-se que um número perfeito é aquele cuja soma de seus divisores,
excluindo ele mesmo, é igual ao próprio número (ex: 6 = 3+2+1), faça um algoritmo que
leia um inteiro e informe se ele é perfeito. **/
#include <stdio.h>
void main(){
int n, divisor, resp, x=0;
do{
printf("Informe um número inteiro: ");
scanf("%d",&n);
for(divisor=1;divisor<n;divisor++)
if(n%divisor==0) x=x+divisor;
if(x == n) printf("%d é perfeito!\n",n);
else printf("%d não é perfeito!\n",n);
printf("Deseja informar novo número? 1-Sim 2-Não\n");
scanf("%d",&resp);
}while(resp==1);
}
#31
Número Perfeito — Produto de DivisoresNumeroPerfeito.c
Variante que usa o produto dos divisores (ex: 6 = 3×2×1) em vez da soma. Demonstra como a definição do enunciado impacta diretamente a implementação.
Iterativo
/** 4. Sabendo-se que um número perfeito é aquele cuja multiplicação de seus divisores,
exceto ele mesmo, é igual ao próprio número (ex: 6 = 3*2*1), faça um algoritmo que
leia um número inteiro qualquer e informe se ele é perfeito. (valor: 2,0pts)
**/
#include <stdio.h>
void main(){
int n, divisor, resp, x;
do{
printf("Informe um número inteiro: ");
scanf("%d",&n);
x=1;
for(divisor=1;divisor<n;divisor++)
if(n%divisor==0) x=x*divisor;
if(x == n) printf("%d é perfeito!\n",n);
else printf("%d não é perfeito!\n",n);
printf("Deseja informar novo número? 1-Sim 2-Não\n");
scanf("%d",&resp);
}while(resp==1);
}
#32
Perfeitos em um IntervaloIntervaloPerfeito.c
Lista todos os números perfeitos dentro de um intervalo fechado [x, y] com laços aninhados: o externo percorre o intervalo e o interno soma os divisores de cada candidato.
Iterativo
/******************************************************************************
Questão 2 - Faça um algoritmo que leia os limites de um intervalo fechado [x,y]
de números inteiros e mostre todos os números perfeitos contidos no intervalo.
Um número perfeito é um número inteiro que é igual à soma de todos os seus
divisores excluindo o próprio número. Ex: 6 é perfeito, pois 6 = 1 + 2 + 3.
(valor: 1,5pt)
*******************************************************************************/
#include <stdio.h>
int main(){
int perfeito, x, y;
printf("Informe as medidas do intervalo [x,y]: ");
scanf("%d %d",&x, &y);
for(int i = x; i<=y; i++){
perfeito = 0;
for(int j = 1; j < i; j++)
if(i%j == 0)
perfeito += j;
if (perfeito == i) printf("%d é perfeito!\n",i);
}
}
#33
Primos e Divisores em um IntervaloprimosEDivisores.c
Lê um intervalo [x, y] e, para cada número, lista todos os seus divisores. Se tiver exatamente 2 divisores é primo. Itera de forma decrescente sobre os candidatos.
Iterativo
/*Faça um algoritmo em C que leia um intervalo [x,y] e informe
todos os primos contidos no intervalo. Caso o número não seja primo,
informar os seus divisores.*/
#include <stdio.h>
void main(){
int x,y,aux,cont=0,divisor;
char resp;
do{
printf("Informe os limites do intervalo [x,y]: ");
scanf("%d %d%*c",&x,&y);
if(x>y){
aux=x;
x=y;
y=aux;
}
for(int i=x; i<=y; i++){
cont = 0;
printf("Divisores do número %d:\n",i);
for(divisor = i; divisor>=1; divisor--)
if(i%divisor == 0){
printf("%d\n",divisor);
cont++;
}
if(cont==2) printf("número primo!\n");
}
printf("Deseja repetir o programa? S-Sim e N-Não\n");
scanf("%c%*c",&resp);
}while(resp!='N');
}
#34
Raiz Quadrada por Subtração de ÍmparesRaizQuadradaComImpares.c
Calcula a raiz quadrada subtraindo ímpares consecutivos (1, 3, 5, …) até o resultado ser ≤ 0. O número de subtrações é a raiz exata (resultado 0) ou aproximada (resultado negativo). Algoritmo sem funções matemáticas.
Iterativo
/******************************************************************************
Questão 3 - Uma das maneiras de se conseguir a raiz quadrada de um número é
subtrair do número os ímpares consecutivos a partir de 1, até que o resultado
da subtração seja menor ou igual a zero. O número de vezes que se consegue
fazer a subtração é a raiz quadrada exata (resultado 0) ou aproximada
(resultado negativo). Faça um algoritmo que calcula a raiz quadrada de um
número por esse método. (valor: 1,5pts)
*******************************************************************************/
#include <stdio.h>
int main(){
int raiz, x, resultado;
printf("Informe um número inteiro: ");
scanf("%d",&x);
resultado = x;
raiz = 0;
for(int i = 1; i <= x; i+=2){
resultado -= i;
raiz++;
if (resultado <= 0) break;
}
if(resultado == 0)
printf("A raiz quadrada exata de %d é %d",x,raiz);
else
printf("A raiz quadrada aproximada de %d é %d",x,raiz);
}
#35
Censo de Santo Estêvão — Estatísticascenso.c
Coleta dados de residências (sexo do chefe, filhos, salário, moradores) e calcula: média salarial por sexo, percentuais, média de filhos e moradores. Exercício completo de acumuladores com do-while e switch.
Iterativo
/*Faça um algoritmo em C que colete os dados da realização do censo na cidade de
Santo Estêvão, onde os dados coletados de cada residência corresponde a:
• Sexo biológico do chefe da família (F - Feminino e M - Masculino)
• Quantidade de filhos que moram na residência junto com o chefe de família
• Salário do chefe da família
• Quantidade de pessoas que moram na casa
Após a coleta dos dados, que não se sabe quantos serão, o algoritmo deverá informar:
(a) A média dos salários dos chefes de família homens
(b) A média dos salários dos chefes de família mulheres
(c) Percentual de chefes mulher
(d) Percentual de chefes homem
(e) Média da qtde de filhos
(f) Média da qtde de pessoas residentes na casa*/
#include <stdio.h>
void main(){
char sexo, resp;
int qtdeFilhos, qtdeResidentes, totalMulheres=0, totalHomens=0, totalResidencias=0, percMulheres=0, percHomens=0;
float salario, mediaSalHomens=0.0, mediaSalMulheres=0.0, mediaFilhos=0.0, mediaResidentes=0.0;
do{
printf("Informe o sexo biológico do chefe da família:\nF = feminino\nM = masculino\n");
scanf("%c%*c",&sexo);
printf("Informe a qtde de filhos que moram com o chefe da família:\n");
scanf("%d%*c",&qtdeFilhos);
printf("Informe a qtde total de residentes da casa:\n");
scanf("%d%*c",&qtdeResidentes);
printf("Informe o salário do chefe da família:\n");
scanf("%f%*c",&salario);
switch(sexo){
case 'M':
totalHomens++;
mediaSalHomens+=salario;
totalResidencias++;
mediaFilhos+=qtdeFilhos;
mediaResidentes+=qtdeResidentes;
break;
case 'F':
totalMulheres++;
mediaSalMulheres+=salario;
totalResidencias++;
mediaFilhos+=qtdeFilhos;
mediaResidentes+=qtdeResidentes;
break;
default:
printf("Sexo informado inválido!\n");
break;
}
printf("Deseja fazer nova transação? S-Sim e N-Não\n");
scanf("%c%*c",&resp);
}while(resp!='N');
mediaSalHomens/=totalHomens;
mediaSalMulheres/=totalMulheres;
mediaFilhos/=totalResidencias;
mediaResidentes/=totalResidencias;
printf("A média dos salários dos chefes de família homens = R$%.2f\n",mediaSalHomens);
printf("A média dos salários dos chefes de família mulheres = R$%.2f\n",mediaSalMulheres);
printf("Percentual de chefes homem = %.1f%%\n",((float)totalHomens/(float)totalResidencias)*100);
printf("Percentual de chefes mulher = %.1f%%\n",((float)totalMulheres/(float)totalResidencias)*100);
printf("Média da qtde de filhos = %.1f\n",mediaFilhos);
printf("Média da qtde de pessoas residentes na casa = %.1f\n",mediaResidentes);
}
#36
Vetor: Ler e MostrarvetorLerMstrar.c
Exercício introdutório de vetores: lê 10 inteiros posição a posição e os exibe. Base para todos os demais exercícios — demonstra o ciclo entrada → armazenamento → saída.
VetorIterativo
// Ler um vetor de inteiros e depois mostrá-lo
#include <stdio.h>
void main() {
// Write C code here
int v[10];
for(int i=0; i<=9; i++){
printf("Digite o elemento %d do vetor: ",i);
scanf("%d", &v[i]);
}
for(int i=0; i<=9; i++){
printf("%d, ",v[i]);
}
}
#37
Atribuição e Soma em VetorvetorAtribuicao.c
Cria um vetor com 10 inteiros pré-definidos, exibe seu conteúdo e calcula a soma de posições específicas (A[0]+A[1]+A[5]+A[8]). Exercício introdutório de acesso por índice e atribuição estática.
VetorIterativo
/**Faça um algoritmo em C que crie um vetor A que armazene 10 números inteiros.
* O programa deve executar os seguintes passos:
* (a) Atribua os seguintes valores a esse vetor: 1, 0, 5, -2, -5, 7, 8, 9, 3, 4.
* (b) Armazene em uma variável inteira a soma dos valores das posições A[0],
A[1], A[5] e A[8] do vetor e mostre na tela o resultado.**/
#include <stdio.h>
#define tam1 13
#define tam2 10
void main(){
int vetor1[] = {1, 0, 5, -2, -5, 7, 8, 9, 3, 4, 11, 12, 25};
int vetor2[tam2] = {1, 0, 5, -2, -5, 7, 8, 9, 3, 4}, soma=0;
printf("Vetor 1 = ");
for(int i=0; i<tam1;i++)
printf("%d ", vetor1[i]);
printf("\nVetor 2 = ");
for(int i=0; i<tam1;i++)
printf("%d ", vetor2[i]);
soma = vetor1[0]+vetor1[1]+vetor1[5]+vetor1[8];
printf("\nSoma = %d",soma);
}
#38
Contagem de Pares em VetorvetorPares.c
Lê um vetor de 10 posições e conta quantos elementos são pares usando %2 == 0. Reforça a separação de responsabilidades entre os laços de leitura, processamento e saída.
VetorIterativo
/*Faça um algoritmo em C que leia um vetor de 10 posições, Conte e
escreva quantos valores pares ele possui.*/
#include <stdio.h>
#define tam 10
void main(){
int v[10], qtde=0;
for(int i=0; i<tam; i++){
printf("Informe o %dº elemento do vetor: ",i+1);
scanf("%d",&v[i]);
if(v[i]%2 == 0) qtde++;
}
printf("O vetor possui %d elementos pares",qtde);
}
#39
Vetor: Conta Elementos Pares (variante)VetorContaPares.c
Variante de contagem de pares: conta durante leitura e exibe o vetor completo ao final. Compara com a versão de laços separados para discutir qual abordagem é mais clara.
VetorIterativo
/** Faça um algoritmo em C que leia um vetor de 10 posições, Conte e escreva quantos valores pares ele possui.
**/
#include <stdio.h>
void main() {
int vetor[10];
int pares = 0;
printf("Informe os valores do vetor:");
for(int i=0;i<=9;i++){
printf("\nVetor[%d] = ",i);
scanf("%d",&vetor[i]);
}
for(int i=0;i<=9;i++)
if(vetor[i]%2 == 0) pares++;
printf("\nElementos do vetor = ");
for(int i=0;i<=9;i++)
printf("%d, ",vetor[i]);
printf("\n Quantidade de elementos pares = %d",pares);
}
#40
Vetor: Impressão em Ordem InversavetorOrdemInversa.c
Lê 10 inteiros e os exibe do último para o primeiro com laço for com decremento (i=9 até 0). Exercício para fixar a indexação inversa de vetores.
VetorIterativo
/** Faça um algoritmo em C que receba do usuário um vetor com 10 posições. Em seguida, o
algoritmo deve imprimir o vetor na ordem inversa.
**/
#include <stdio.h>
void main() {
int vetor[10];
printf("Informe os valores do vetor:\n");
for(int i=0;i<=9;i++){
printf("Vetor[%d] = ",i);
scanf("%d",&vetor[i]);
}
printf("\nElementos do vetor na ordem inversa= ");
for(int i=9;i>=0;i--)
printf("%d, ",vetor[i]);
}
#41
Vetor: Maior Índice (variante)vetormaiorIndice.c
Variante do exercício de maior/menor: lê 10 inteiros e os exibe em ordem inversa. Código similar ao de ordem inversa — incentiva a prática de identificar código duplicado e refatoração.
VetorIterativo
/** Faça um algoritmo em C que receba do usuário um vetor com 10 posições. Em seguida, o algoritmo deve imprimir o maior e o menor elemento do vetor, informando a posição (índice) em que se encontram cada um deles.
**/
#include <stdio.h>
void main() {
int vetor[10];
printf("Informe os valores do vetor:\n");
for(int i=0;i<=9;i++){
printf("Vetor[%d] = ",i);
scanf("%d",&vetor[i]);
}
printf("\nElementos do vetor na ordem inversa= ");
for(int i=9;i>=0;i--)
printf("%d, ",vetor[i]);
}
#42
Vetor: Maior e Menor com Índice (inline)vetorMaiorMenor.c
Determina maior e menor já durante a leitura do vetor, atualizando valores e índices a cada iteração. Demonstra quando é possível combinar leitura e processamento no mesmo laço.
VetorIterativo
/** Faça um algoritmo em C que receba do usuário um vetor com 10 posições. Em seguida, o algoritmo deve imprimir o maior e o menor elemento do vetor, informando a posição (índice) em que se encontram cada um deles.
**/
#include <stdio.h>
void main() {
int vetor[10];
int maior, menor, indMaior, indMenor;
printf("Informe os valores do vetor:\n");
for(int i=0;i<=9;i++){
printf("Vetor[%d] = ",i);
scanf("%d",&vetor[i]);
if(i==0){
menor = vetor[0];
maior = vetor[0];
indMaior = 0;
indMenor = 0;
}
if(maior < vetor[i]){
maior = vetor[i];
indMaior = i;
}
if(menor > vetor[i]){
menor = vetor[i];
indMenor = i;
}
}
printf("\nElementos do vetor = ");
for(int i=0;i<=9;i++)
printf("%d, ",vetor[i]);
printf("\nMaior = %d\nÍndice do maior = %d",maior, indMaior);
printf("\nMenor = %d\nÍndice do menor = %d",menor, indMenor);
}
#43
Maior e Menor Elemento do VetorvetorMaiorMenorInicial.c
Recebe 10 inteiros e determina o maior e o menor elemento exibindo também seus índices. Usa dois ponteiros de posição inicializados em 0 e atualizados conforme a comparação.
VetorIterativo
/******************************************************************************
Faça um algoritmo em C que receba do usuário um vetor de inteiro
com 10 posições. Em seguida, o algoritmo deve imprimir o maior e
o menor elemento do vetor, informando a posição (índice) em que se
encontram cada um deles.
*******************************************************************************/
#include <stdio.h>
void main(){
int vetor[10], menor, maior;
for(int i=0; i<=9; i++){
printf("Informe um número inteiro: ");
scanf("%d",&vetor[i]);
}
menor=maior=0;
for(int i=1;i<=9;i++)
if(vetor[i] < vetor[menor]) menor = i;
else if(vetor[i] > vetor[maior]) maior = i;
printf("O maior elemento é %d que está no índice %d\n",vetor[maior],maior);
printf("O menor elemento é %d que está no índice %d\n",vetor[menor],menor);
}
#44
Vetor com Funções: maior, menor e médiavetorFuncoes.c
Demonstra modularização: funções separadas para preencher o vetor, encontrar maior(), menor() e calcular a media(). Bom exemplo de passagem de vetor como parâmetro em C.
VetorIterativo
// Faça um algoritmo que leia um vetor de até 100 posições e implemente as
//funções:
//int maior(int vetor[], int qtde);
//int menor(int vetor[], int qtde);
//float media(int vetor[], int qtde);
#include <stdio.h>
#define TAM 10
int preencheVetor(int vetor[], int qtde){
int i;
char resp;
for(i = qtde; i<TAM; i++){
printf("Informe o %dº elemento do vetor:",i+1);
scanf("%d%*c",&vetor[i]);
//printf("Deseja digitar novo elemento? S-Sim, N-Não: ");
//scanf("%c%*c",&resp);
//if(resp=='N') return i+1;
}
return i;
}
int maior(int vetor[], int qtde){
int maior=vetor[0];
for(int i=0; i<qtde;i++)
if(maior<vetor[i]) maior = vetor[i];
return maior;
}
int menor(int vetor[], int qtde){
int menor=vetor[0];
for(int i=0; i<qtde;i++)
if(menor>vetor[i]) menor = vetor[i];
return menor;
}
float media(int vetor[], int qtde){
float media=0;
for(int i=0; i<qtde; i++)
media = (float)(media+(float)vetor[i]);
media = (float)(media/(float)qtde);
return media;
}
void main(){
int qtde=0;
int vetor[100];
printf("Informe os elementos do vetor:\n");
qtde = preencheVetor(vetor,qtde);
printf("O maior elemento = %d\n",maior(vetor,qtde));
printf("O menor elemento = %d\n",menor(vetor,qtde));
printf("A média dos elementos = %.1f\n",media(vetor,qtde));
}
#45
Maior e Menor — Sem PonteirosmaiorMenorSemPonteiro.c
Funções maiorVetor() e menorVetor() retornam o valor diretamente sem ponteiros. Útil para comparar com a versão que usa ponteiros como parâmetros de saída.
VetorIterativo
/**Faça um algoritmo que leia 20 números inteiros e informe o maior e o menor.
O algoritmo deve ser modularizado. **/
#include <stdio.h>
#define TAM 20
int preencherVetor(int v[], int qtde){
char resp;
do{
printf("Informe o valor do elemento %d do vetor: ",qtde);
scanf("%d%*c",&v[qtde]);
qtde++;
printf("Deseja continuar? S-sim, N-Não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
return qtde;
}
void imprimirVetor(int v[], int qtde){
printf("Vetor = ");
for(int i=0; i<qtde; i++)
printf("%d, ",v[i]);
printf("\n");
}
int maiorVetor(int v[], int qtde){
int maior = v[0];
for(int i=0; i<qtde; i++)
if(maior < v[i]) maior = v[i];
return maior;
}
int menorVetor(int v[], int qtde){
int menor = v[0];
for(int i=0; i<qtde; i++)
if(menor > v[i]) menor = v[i];
return menor;
}
int main(){
int vetor[TAM], qtde=0, maior, menor;
qtde = preencherVetor(vetor,qtde);
imprimirVetor(vetor,qtde);
maior = maiorVetor(vetor,qtde);
menor = menorVetor(vetor,qtde);
printf("Maior = %d\nMenor = %d\n",maior,menor);
}
#46
Maior e Menor — Com PonteirosmaiorMenorVetorPonteiro.c
Versão modularizada que retorna dois resultados simultaneamente via ponteiros (*maior e *menor). Demonstra o idioma C de modificar variáveis do chamador passando seus endereços.
VetorIterativoPonteiro
/**Faça um algoritmo que leia 20 números inteiros e informe o maior e o menor.
O algoritmo deve ser modularizado. **/
#include <stdio.h>
#define TAM 20
void preencherVetor(int v[], int *qtde){
char resp;
do{
printf("Informe o valor do elemento %d do vetor: ",*qtde);
scanf("%d%*c",&v[*qtde]);
(*qtde)++;
printf("Deseja continuar? S-sim, N-Não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
void imprimirVetor(int v[], int qtde){
printf("Vetor = ");
for(int i=0; i<qtde; i++)
printf("%d, ",v[i]);
printf("\n");
}
void maiorMenor(int v[], int qtde, int *maior, int *menor){
*maior = v[0];
*menor = v[0];
for(int i=0; i<qtde; i++)
if(*maior < v[i]) *maior = v[i];
else if(*menor > v[i]) *menor = v[i];
}
int main(){
int vetor[TAM], qtde=0, maior, menor;
preencherVetor(vetor,&qtde);
imprimirVetor(vetor,qtde);
maiorMenor(vetor,qtde, &maior, &menor);
printf("Maior = %d\nMenor = %d\n",maior,menor);
}
#47
Maior e Menor — Com Alocação Dinâmica e ExceçõesmaiorMenorVetorComExcecao.c
Variante com alocação dinâmica via malloc e validação rigorosa de entrada. A função procurar() usa recursão percorrendo o vetor+1 a cada passo.
VetorRecursivoPonteiro
#include <stdio.h>
#include <stdlib.h>
void procurar(int vetor[], int tamanho, int * maior, int * menor) {
if (tamanho == 1) { /* caso base */
* maior = * menor = vetor[0];
} else { /* passo indutivo */
procurar(vetor + 1, tamanho - 1, maior, menor);
if (vetor[0] > * maior) * maior = vetor[0];
if (vetor[0] < * menor) * menor = vetor[0];
}
}
int main() {
int tamanho, i, maior, menor;
int * vetor;
printf("Informe o tamanho do vetor: ");
if (scanf("%d", &tamanho) < 1 || tamanho < 1) {
fputs("Não consegui ler o tamanho do vetor\n", stderr);
return EXIT_FAILURE;
}
vetor = malloc(tamanho * sizeof (int));
if (vetor == NULL) {
fputs("Não consegui alocar o vetor\n", stderr);
return EXIT_FAILURE;
}
printf("Informe os valores do vetor: ");
for (i = 0; i < tamanho; i ++) {
if (scanf("%d", &vetor[i]) < 1) {
printf("Não consegui ler o %dº valor do vetor\n", i + 1);
return EXIT_FAILURE;
}
}
procurar(vetor, tamanho, &maior, &menor);
printf("O maior número é %d e o menor, %d\n", maior, menor);
return EXIT_SUCCESS;
}
#48
Cadastro de Idades — Inserção e RemoçãoidadesModularizado.c
Gerencia um vetor de até 100 idades com funções separadas: inserir(), buscarRemover() e mostrar(). Duas fases: insere interativamente e depois remove por valor.
VetorIterativo
/**Crie um programa que leia até 100 idades (inteiras), armazene-as e
depois mostre-as. Crie funções e procedimentos para realizar as
tarefas. **/
#include <stdio.h>
#define tam 100
void inserir(int id, int qtde, int idades[]){
idades[qtde] = id;
}
int buscarRemover(int id, int qtde, int idades[]){
for(int i=0; i<qtde; i++){
if(idades[i]==id){
for(int j=i; j<(qtde-1);j++)
idades[j]=idades[j+1];
printf("Elemento removido!\n");
return 1;
}
}
printf("Elemento não encontrado!\n");
return 0;
}
void mostrar(int qtde, int idades[]){
for(int i=0; i< qtde; i++)
printf("%d, ",idades[i]);
printf("\n");
}
void main(void){
int idades[tam], id, qtde=0;
int removeu;
do{
printf("Informe uma idade a ser inserida ou -1 para sair: ");
scanf("%d",&id);
if(id>=0){
inserir(id,qtde,idades);
qtde++;
mostrar(qtde,idades);
}
}while(id>=0);
do{
printf("Informe uma idade a ser removida ou -1 para sair: ");
scanf("%d",&id);
if(id>=0)
if(buscarRemover(id,qtde,idades))
qtde--;
mostrar(qtde,idades);
}while(id>=0);
}
#49
Vetor Arrumado — Elemento Pivôarrumado.c
Verifica se um vetor é arrumado: existe algum índice j tal que todos os elementos à esquerda são menores que v[j] e todos à direita são maiores. Retorna o valor de j se encontrado.
VetorIterativo
/***
1. Um vetor ARRUMADO é um vetor v[p .. r] onde existe ao menos um j ∈ [p, r] tal
que v[p..j − 1] ≤ v[j] ≤ v[j + 1..r] (ou seja, existe ao menos um j pertencente ao
vetor v, cujos elementos da esquerda são menores que j e os elementos da direita são
maiores que j). Escreva uma função que receba um vetor v[p..r] e informe se o vetor
está ARRUMADO. Em caso afirmativo, o seu algoritmo deve devolver o valor de j, que é
o índice da posição em que está o elemento do MEIO que caracteriza o vetor como ARRUMADO.
OBS.: Os vetores arrumados NÃO se resumem aos vetores ORDENADOS, ou vetores com todos
os números iguais!! (valor: 4,0 pts)
***/
#include <stdio.h>
#include <stdbool.h>
int encontrarJ(int v[], int tamanho) {
for (int j = 1; j < tamanho - 1; j++) {
bool esquerdaMenor = true;
bool direitaMaior = true;
// Verifica se todos os números à esquerda de 'J' são menores do que ele
for (int i = 0; i < j; i++) {
if (v[i] >= v[j]) {
esquerdaMenor = false;
break;
}
}
// Verifica se todos os números à direita de 'J' são maiores do que ele
for (int i = j + 1; i < tamanho; i++) {
if (v[i] <= v[j]) {
direitaMaior = false;
break;
}
}
if (esquerdaMenor && direitaMaior) {
return v[j];
}
}
return -1; // Retorna -1 se não existir um número J com as propriedades desejadas
}
int main() {
int tamanho;
printf("Digite o tamanho do vetor: ");
scanf("%d", &tamanho);
int v[tamanho];
printf("Digite os elementos do vetor:\n");
for (int i = 0; i < tamanho; i++) {
scanf("%d", &v[i]);
}
int j = encontrarJ(v, tamanho);
if (j != -1) {
printf("Existe um numero J no vetor onde todos os numeros a esquerda dele sao menores e todos os numeros a direita dele sao maiores.\n");
printf("Valor de J: %d\n", j);
} else {
printf("Nao existe um numero J no vetor com essa propriedade.\n");
}
return 0;
}
#50
Elimina Repetidos de Vetor (Recursivo)eliminaRepetidosVetor.c
Gera um vetor de 100 elementos aleatórios e elimina os duplicados usando busca recursiva e deslocamento in-place. Também implementa inserção no início e no fim como funções auxiliares.
VetorRecursivo
//---------------------------------------------------------------------
//
// Algoritmo desenvolvido pela professora Ana Carolina Sokolonski Anton
// na disciplina de Estruturas de Dados no IFBA Campus Feira de Santana
//
//--------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#define tam 100
int busca(int x, int v[], int qtde){
if(qtde == 0) return -1;
if(v[qtde-1] == x) return (qtde-1);
else return(busca(x,v,(qtde-1)));
}
int buscaRemocao(int x, int v[], int qtde){
int i;
for(i=0; (i<qtde) && (v[i]!=x); i++);
if(i<qtde){
for(int j=i; j<(qtde-1);j++)
v[j]=v[j+1];
return 1;
}else return 0;
}
int insereFim(int x, int v[], int qtde){
if (qtde == tam) return 0;
v[qtde] = x;
return 1;
}
int insereInicio(int x, int v[], int qtde){
if (qtde == tam) return 0;
for(int i=qtde; i>0; i--)
v[i] = v[i-1];
v[0]=x;
return 1;
}
int eliminaRepetidos(int qtde,int v[]){
int found;
for(int i=1; i<qtde; i++){
found = busca(v[i],v,i-1);
if(found!=-1){
printf("%d repetido e eliminado\n",v[i]);
for(int j=i; j<(qtde-1); j++)
v[j] = v[j+1];
qtde--;
i--;
}
}
return qtde;
}
void main(){
int v[tam], num, indice, qtde;
printf("Vetor original:\n");
for(int i=0; i<tam; i++){
v[i] = (int)rand()%100;
printf("v[%d] = %d\n",i,v[i]);
}
qtde = eliminaRepetidos(tam, v);
printf("Vetor resultante:\n");
for(int i=0; i<qtde; i++)
printf("v[%d] = %d\n",i,v[i]);
}
#51
Matriz 3×3 — Multiplicação por 5matrizPor5.c
Lê uma matriz 3×3, imprime o conteúdo original e multiplica cada elemento por 5 in-place, exibindo a matriz resultante. Demonstra laços aninhados e indexação bidimensional.
VetorIterativo
/*Faça um programa que leia uma matriz de 3 x 3, usando o comando
FOR, multiplica cada elemento por 5 e imprime o resultado.*/
#include <stdio.h>
#define tam 3
void main(){
int m[tam][tam];
for(int i=0; i<tam; i++)
for(int j=0; j<tam;j++){
printf("Informe elemento da matriz[%d,%d]: ",j+1,i+1);
scanf("%d",&m[j][i]);
}
printf("Matriz original = \n");
for(int i=0; i<tam; i++){
for(int j=0; j<tam;j++){
printf("%d ",m[j][i]);
m[j][i] *= 5;
}
printf("\n");
}
printf("Matriz resultante = \n");
for(int i=0; i<tam; i++){
for(int j=0; j<tam;j++)
printf("%d ",m[j][i]);
printf("\n");
}
}
#52
Multiplicação de Vetor por Colunas de MatrizmultiplicaVetorMatriz.c
Lê um vetor de 3 elementos e uma matriz 3×3 e multiplica cada elemento da matriz pelo elemento correspondente do vetor (matriz[i][j] *= vetor[j]). Introdução à álgebra matricial.
VetorIterativo
/** Faça um programa que lê um vetor de 3 elementos e uma matriz de 3 x 3 elementos. Em seguida, o programa deve fazer a multiplicação do vetor pelas colunas da matriz.**/
#include <stdio.h>
void main() {
int vetor[3];
int matriz[3][3];
printf("Informe os valores do vetor:\n");
for(int i=0;i<=2;i++){
printf("Vetor[%d] = ",i);
scanf("%d",&vetor[i]);
}
printf("Informe os valores da matriz:\n");
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++){
printf("Matriz[%d][%d] = ",i,j);
scanf("%d",&matriz[i][j]);
}
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
matriz[i][j] = matriz[i][j]*vetor[j];
printf("\nElementos da matriz resultante = \n");
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
printf("%d ",matriz[i][j]);
}
printf("\n");
}
}
#53
Soma de Vetor Aleatório (Recursivo)somaVetorRecursivo.c
Preenche um vetor de 100 elementos com valores aleatórios e calcula a soma total recursivamente: somar(qtde, v) = v[qtde-1] + somar(qtde-1, v). Caso base: qtde==0 → 0.
VetorRecursivo
// Faça um algoritmo recursivo que soma todos os valores de um vetor
#include <stdio.h>
#include <stdlib.h>
#define TAM 100
int somar(int qtde, int v[]){
if(qtde == 0) return 0;
return v[qtde-1] + somar(qtde-1,v);
}
void main(){
int vetor[TAM];
int soma;
printf("Elementos do vetor: \n");
for(int i=0; i<TAM;i++){
vetor[i] = rand()%100;
printf("%d, ",vetor[i]);
}
printf("Soma dos elementos = %d\n",somar(TAM,vetor));
}
#54
Maior Elemento do Vetor (Recursivo)maiorRecursivo.c
Encontra o maior elemento de um vetor por recursão: caso base qtde == 1 retorna v[0]; caso recursivo compara o último com o maior dos anteriores.
VetorRecursivo
/**Faca um algoritmo recursivo que encontre qual o maior valor
de um vetor.**/
#include <stdio.h>
#define TAM 10
void preencherVetor(int v[], int *qtde){
char resp;
do{
printf("Informe o valor do elemento %d do vetor: ",*qtde);
scanf("%d%*c",&v[*qtde]);
(*qtde)++;
printf("Deseja continuar? S-sim, N-Não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
void imprimirVetor(int v[], int qtde){
printf("Vetor = ");
for(int i=0; i<qtde; i++)
printf("%d, ",v[i]);
printf("\n");
}
int maiorVetor(int v[], int qtde){
if(qtde == 1) return v[qtde-1]; //valor base
if (v[qtde-1] > maiorVetor(v,qtde-1))
return v[qtde-1];
else return maiorVetor(v,qtde-1);
}
int main(){
int vetor[TAM], qtde=0, maior;
preencherVetor(vetor,&qtde);
imprimirVetor(vetor,qtde);
maior = maiorVetor(vetor,qtde);
printf("Maior elemento do vetor = %d\n",maior);
}
#55
CRUD de Vetor com Maior RecursivomaiorValorVetor.c
Menu interativo com inserção, busca recursiva, exclusão e maior recursivo. A função encontrarMaior() percorre o vetor de trás para frente recursivamente.
VetorRecursivo
/******************************************************************************
Faça um algoritmo recursivo que encontre qual o maior valor de um vetor
*******************************************************************************/
#include <stdio.h>
#define tam 100
void insercaoVetor(int x, int qtde, int vetor[]) {
vetor[qtde - 1] = x;
}
int buscaVetor(int x, int qtde, int vetor[]) {
if(qtde==0) return -1;
if(vetor[qtde-1]==x) return (qtde-1);
return buscaVetor(x,qtde-1,vetor);
/**for(int i = qtde-1; i>=0; i--)
if(vetor[i] == x)
return i;
return -1;**/
}
void imprimirVetor(int qtde, int vetor[]) {
printf("Vetor: ");
for(int i=0; i<qtde; i++)
printf("%d, ",vetor[i]);
printf("\n");
}
int excluirElemento(int x, int qtde, int vetor[]){
int i=0;
while(i<qtde){
if(vetor[i]==x){
for(int j=i; j<(qtde-1); j++)
vetor[j]=vetor[j+1];
printf("Exclusão realizada com sucesso!\n");
return qtde-1;
}
i++;
}
printf("Elemento não encontrado!\n");
return qtde;
}
int encontrarMaior(int qtde, int maior, int vetor[]){
if(qtde==0) return maior;
if(vetor[qtde-1]>vetor[maior]) return encontrarMaior(qtde-1, qtde-1,vetor);
else return encontrarMaior(qtde-1, maior,vetor);
}
int main() {
int vetor[tam];
int cont = 0, resp, x, achou;
do {
printf("Digite a opção desejada:\n");
printf("1 - Inserir elemento no vetor\n");
printf("2 - Buscar elemento no vetor\n");
printf("3 - Excluir elemento no vetor\n");
printf("4 - Mostrar o vetor\n");
printf("5 - Encontrar Maior\n");
printf("6 - Sair\n");
scanf("%d",&resp);
switch(resp) {
case 1:
printf("Informe o elemento a ser inserido: ");
scanf("%d",&x);
cont++;
insercaoVetor(x,cont,vetor);
imprimirVetor(cont,vetor);
break;
case 2:
printf("Informe o elemento a ser buscado: ");
scanf("%d",&x);
achou = buscaVetor(x,cont,vetor);
if(achou >= 0) printf("A posição do elemento %d é %d.\n",x,achou);
else printf("Elemento não encontrado!\n");
break;
case 3:
printf("Informe o elemento a ser excluído: ");
scanf("%d",&x);
cont = excluirElemento(x,cont,vetor);
imprimirVetor(cont,vetor);
break;
case 4:
imprimirVetor(cont,vetor);
break;
case 5:
achou = encontrarMaior(cont, cont-1, vetor);
printf("A posição do maior elemento %d é %d.\n",vetor[achou],achou);
break;
case 6:
printf("Saindo do programa...");
break;
default:
printf("Opção inválida!");
break;
}
} while(resp != 6);
}
#56
Ordenações — Bubble, Selection e Insertion Sortonrdenacoes.c
Menu interativo com quatro algoritmos de ordenação: BubbleSort simples, BubbleSort otimizado (com flag), SelectionSort e InsertionSort. Permite inserir elementos e comparar o comportamento de cada método.
VetorIterativo
/******************************************************************************
Faça um algoritmo que leia um vetor com n elementos desordenado
e implemente o BubbleSort para ordenar os seus elementos
*******************************************************************************/
#include <stdio.h>
#define tam 10
void InsertionSort(int qtde, int vetor[]){
int aux;
for(int i=1; i<qtde;i++)
for(int j=i; j>0;j--)
if(vetor[j]<vetor[j-1]){
aux = vetor[j];
vetor[j] = vetor[j-1];
vetor[j-1] = aux;
}else break;
}
void SelectionSort(int qtde, int vetor[]){
int aux, menor;
for(int i=0; i<qtde; i++){
menor=i;
for(int j=i;j<qtde;j++)
if(vetor[j]<vetor[menor]) menor = j;
aux = vetor[menor];
vetor[menor] = vetor[i];
vetor[i] = aux;
}
}
void BubbleSort(int qtde, int vetor[]){
int aux;
for(int i=0;i<qtde;i++)
for(int j=0;j<(qtde-1);j++)
if(vetor[j]>vetor[j+1]){
aux = vetor[j];
vetor[j] = vetor[j+1];
vetor[j+1] = aux;
}
}
void BubbleSortOtimo(int qtde, int vetor[]){
int aux, flag = 0;
while(!flag){
flag = 1;
for(int j=0;j<(qtde-1);j++)
if(vetor[j]>vetor[j+1]){
flag = 0;
aux = vetor[j];
vetor[j] = vetor[j+1];
vetor[j+1] = aux;
}
}
}
void insereVetor(int qtde, int vetor[]){
int x;
printf("Informe o elemento a ser inserido: ");
scanf("%d",&x);
vetor[qtde] = x;
}
void imprimeVetor(int qtde, int vetor[]){
printf("Elementos do vetor:\n");
for(int i=0;i<qtde;i++)
if(i==(qtde-1)) printf("%d",vetor[i]);
else printf("%d, ",vetor[i]);
printf("\n");
}
void main(){
int qtde = 0, resp, vetor[tam];
do{
printf("---------------------------------\n");
printf("Informe a ação desejada:\n");
printf("1 - Inserir elemento no vetor\n");
printf("2 - Imprimir vetor\n");
printf("3 - Ordenar vetor pelo BubbleSort Simples\n");
printf("4 - Ordenar vetor pelo BubbleSort Otimizado\n");
printf("5 - Ordenar vetor pelo SelectionSort\n");
printf("6 - Ordenar vetor pelo InsertionSort\n");
printf("7 - Sair\n");
printf("---------------------------------\n");
scanf("%d",&resp);
switch(resp){
case 1:
insereVetor(qtde,vetor);
qtde++;
break;
case 2:
imprimeVetor(qtde,vetor);
break;
case 3:
BubbleSort(qtde,vetor);
break;
case 4:
BubbleSortOtimo(qtde,vetor);
break;
case 5:
SelectionSort(qtde,vetor);
break;
case 6:
InsertionSort(qtde,vetor);
break;
case 7:
printf("Saindo...");
break;
default:
printf("Opção Inválida!");
break;
}
}while(resp!=7);
}
#57
Struct de Academia — Leitura e IMCstructeitura.c
Lê dados de 10 alunos de academia (nome, endereço, altura, peso, idade) em vetor de structs e calcula o IMC (peso/(altura²)) automaticamente.
StructIterativo
//Faça um algoritmo em C que leia os dados de nome, endereço, altura, peso e idade de 10 alunos de uma academia, calcule o IMC = peso/(altura*altura) e salve tudo num vetor de structs, por fim, mostre todo o cadastramento em tela.
#include <stdio.h>
typedef struct alunoAcademia{
char nome[30];
char ende[60];
float altura;
float peso;
float imc;
int idade;
}aluno;
void main() {
aluno turma[10];
for(int i=0; i<=9; i++){
printf("Digite o nome do %dº aluno: ",i+1);
scanf("%s",&turma[i].nome); getchar();
printf("Digite o endereço do %dº aluno: ",i+1);
scanf("%s",&turma[i].ende); getchar();
printf("Digite a altura do %dº aluno: ",i+1);
scanf("%f",&turma[i].altura);
printf("Digite o peso do %dº aluno: ",i+1);
scanf("%f",&turma[i].peso);
turma[i].imc = turma[i].peso/(turma[i].altura * turma[i].altura);
printf("Digite a idade do %dº aluno: ",i+1);
scanf("%d",&turma[i].idade);
}
printf("DADOS CADASTRADOS\n");
for(int i=0;i<=9;i++){
printf("Aluno %d:\n",i+1);
printf("Nome = %s\n",turma[i].nome);
printf("Endereço = %s\n",turma[i].ende);
printf("Idade = %d\n",turma[i].idade);
printf("Peso = %.1f\n",turma[i].peso);
printf("Altura = %.1f\n",turma[i].altura);
printf("IMC = %.1f\n",turma[i].imc);
printf("\n");
}
}
#58
Struct de Academia — Vetor com CharvetorCharAcademia.c
Define typedef struct alunoAcademia com campos mistos (int, float, char[]) e preenche um vetor de 100 alunos. Introdução ao uso de strings dentro de structs e ao getchar().
StructIterativo
#include <stdio.h>
#define tamanho 100
typedef struct alunoAcademia{
int idade;
float altura;
float peso;
char nome[30];
char endereco[50];
char telefone[11];
} aluno;
void main(){
aluno classe[tamanho];
for (int i = 0; i <= (tamanho-1); i++){
printf ("Informe o nome da %dª pessoa: ",i+1);
scanf ("%s", classe[0].nome); getchar();
printf ("Informe a idade da %dª pessoa: ",i+1);
scanf ("%d", &classe[0].idade);
printf ("Informe a altura da %dª pessoa: ",i+1);
scanf ("%f", &classe[0].altura);
printf ("Informe o peso da %dª pessoa: ",i+1);
scanf ("%f", &classe[0].peso);
printf ("Informe o endereço da %dª pessoa: ",i+1);
scanf ("%s", classe[0].endereco); getchar();
printf ("Informe o telefone da %dª pessoa: ",i+1);
scanf ("%s", classe[0].telefone);getchar();
}}
#59
Struct por Referência — Ponteiros e SetasstructPorReferencia.c
Demonstra duas formas de acessar campos via ponteiro: (*P).campo e a notação seta P->campo. A função SetPessoa(Pessoa *P, ...) modifica por referência — contraste didático entre as formas de passagem.
StructPonteiro
#include <stdio.h>
typedef struct pessoa{
float Peso;
int Idade;
float Altura;
} Pessoa;
void ImprimePessoa(Pessoa P){
printf("Idade: %d Peso: %5.2f Altura: %5.2f\n", P.Idade, P.Peso, P.Altura);
}
void SetPessoa(Pessoa *P, int idade, float peso, float altura){
(*P).Idade = idade; // o campo pode ser acessado desta forma
P->Peso = peso; // ou desta
P->Altura = altura;
}
int main(){
Pessoa Joao;
SetPessoa(&Joao, 15, 70.5, 1.75);
ImprimePessoa(Joao);
return 0;
}
#60
Sistema de Notas e Estatísticas da TurmaSistemaNotasEsttistica.c
Sistema com typedef struct Aluno (nome, matrícula, 3 notas, média). Funções para ler dados, calcular médias e gerar estatísticas: maior e menor média, média geral e aprovados (≥ 7,0).
StructIterativo
/*** 2. Sistema de Notas e Estatísticas da Turma (Valor: 6,0pts): Faça um algoritmo
que gerencie os dados de alunos de uma disciplina. Para isso, você deve:
a) Definir uma struct chamada Aluno, com os seguintes campos: (nome (até 50
caracteres), matricula (inteiro), notas (vetor com 3 notas reais), media (real)).
b) Faça funcões que:
1. Leia os dados de até 100 alunos (permitir que o usuário informe quantos
alunos ele deseja cadastrar, entre 1 e 100).
2. Calcule a média de cada aluno (com base nas 3 notas) e armazene no campo
media.
3. Encontre e exiba: O aluno com maior média, O aluno com menor média, A média
geral da turma, Quantos alunos foram aprovados, considerando média maior ou
igual a 7.0 como critério de aprovação.
***/
#include <stdio.h>
#define TAM 100
typedef struct Aluno{
char nome[50];
int matricula;
float nota[3];
float media;
}aluno;
void lerDados(aluno lista[], int qtde){
for(int i=0; i<qtde; i++){
printf("Informe o nome do %dº aluno: ",i+1);
scanf("%s",lista[i].nome);
printf("Informe a matrícula do %dº aluno: ",i+1);
scanf("%d",&lista[i].matricula);
printf("Informe a primeira nota do %dº aluno: ",i+1);
scanf("%f",&lista[i].nota[1]);
printf("Informe a segunda nota do %dº aluno: ",i+1);
scanf("%f",&lista[i].nota[2]);
printf("Informe a terceira nota do %dº aluno: ",i+1);
scanf("%f",&lista[i].nota[3]);
}
}
void calculaMedia(aluno lista[], int qtde){
for(int i=0; i<qtde; i++)
lista[i].media = (lista[i].nota[1]+lista[i].nota[2]+lista[i].nota[3])/3;
}
void encontrar(aluno lista[], int qtde){
float maior=lista[0].media;
float menor=lista[0].media;
float media=0;
int aprovados=0;
for(int i=0; i<qtde; i++){
media += lista[i].media;
if(lista[i].media>=7) aprovados++;
if(lista[i].media>maior) maior = lista[i].media;
if(lista[i].media<menor) menor = lista[i].media;
}
media = media/(float)qtde;
printf("Menor = %.1f\nMaior = %.1f\nMédia da turma = %.1f\nQtde de aprovados = %d\n",menor,maior,media,aprovados);
}
void main(){
aluno lista[TAM];
int qtde, sair;
do{
printf("Cadastro de alunos\n");
printf("Informe quantos alunos deseja cadastrar:\n");
scanf("%d%*c",&qtde);
lerDados(lista,qtde);
calculaMedia(lista,qtde);
encontrar(lista,qtde);
printf("Deseja repetir? 1-Sim 2-Não");
scanf("%d",&sair);
}while(sair==1);
}
#61
Controle de Estoque — CRUD com Struct ProdutocontroleEstoque.c
Sistema de estoque com typedef struct Produto (nome, quantidade, valor unitário). Menu com inserção, exclusão, modificação, listagem e busca por nome.
StructIterativo
/******************************************************************************
Criar um vetor de Structs para armazenar até 100 produtos de um estoque. Os produtos
devem possuir as seguintes informações: nome(string), quantidade(int) e valor unitário
(float). Por fim, implemente o seguinte menu de forma modularizada:
+----------Controle de Estoque------------+
1. Inserir novo produto
2. Excluir produto pelo nome
3. Modificar dados do produto
4. Listar produtos cadastrados
5. Buscar produto pelo nome
6. Sair
+-----------------------------------------+
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#define TAM 100
typedef struct Produto{
char nome[30];
int qtde;
float valor;
}produto;
int inserirProduto(int tam, produto lista[]){
printf("Informe o nome do produto: ");
scanf("%[a-z A-Z]%*c", lista[tam].nome);
printf("Informe a quantidade do produto: ");
scanf("%d%*c", &lista[tam].qtde);
printf("Informe o valor unitário do produto: R$");
scanf("%f%*c", &lista[tam].valor);
return (tam+1);
}
int excluirProduto(int tam, produto lista[], char nome[]){
if (tam==0) return 0;
for(int i=0; i<tam; i++)
if(strcmp(lista[i].nome,nome)==0){
for(int j=i; j<(tam-1); j++)
lista[j] = lista[j+1];
printf("Elemento excluído da posição %d\n",i);
return tam-1;
}
return tam;
}
void modificarProduto(int tam, produto lista[], char nome[]){
if (tam!=0){
for(int i=0; i<tam; i++)
if(strcmp(lista[i].nome,nome)==0){
printf("Informe a nova quantidade do produto: ");
scanf("%d%*c",&lista[i].qtde);
printf("Informe o novo valor do produto: ");
scanf("%f%*c",&lista[i].valor);
printf("Produto modificado com sucesso!\n");
}
}else printf("Lista vazia!\n");
}
void listarProdutos(int tam, produto lista[]){
if (tam!=0){
for(int i=0; i<tam; i++){
printf("Produto %d: \n",i+1);
printf("Nome = %s\n",lista[i].nome);
printf("Quantidade = %d\n",lista[i].qtde);
printf("Valor = R$%.2f\n",lista[i].valor);
printf("\n");
}
}else printf("Lista vazia!\n");
}
void buscarProduto(int tam, produto lista[], char nome[]){
if (tam!=0){
for(int i=0; i<tam; i++)
if(strcmp(lista[i].nome,nome)==0){
printf("Produto encontado na posição: %d\n",i);
printf("Nome = %s\n",lista[i].nome);
printf("Quantidade = %d\n",lista[i].qtde);
printf("Valor = R$%.2f\n",lista[i].valor);
printf("\n");
}
}else printf("Lista vazia!\n");
}
void main(){
produto lista[TAM];
int resp, qtde=0;
char nomeProduto[30];
do{
printf("+----------Controle de Estoque------------+\n");
printf("1. Inserir novo produto\n");
printf("2. Excluir produto pelo nome\n");
printf("3. Modificar dados do produto\n");
printf("4. Listar produtos cadastrados\n");
printf("5. Buscar produto pelo nome\n");
printf("6. Sair\n");
printf("+-----------------------------------------+\n");
printf("\n");
scanf("%d%*c",&resp);
switch (resp){
case 1:
qtde = inserirProduto(qtde, lista);
break;
case 2:
printf("Digite o nome do produto a ser excluído: ");
scanf("%[a-z A-Z]%*c", nomeProduto);
qtde = excluirProduto(qtde, lista, nomeProduto);
break;
case 3:
printf("Digite o nome do produto a ser modificado: ");
scanf("%[a-z A-Z]%*c", nomeProduto);
modificarProduto(qtde, lista, nomeProduto);
break;
case 4:
listarProdutos(qtde, lista);
break;
case 5:
printf("Digite o nome do produto a ser buscado: ");
scanf("%[a-z A-Z]%*c", nomeProduto);
buscarProduto(qtde, lista, nomeProduto);
break;
case 6:
printf("Saindo ...\n");
break;
default: printf("Opção Inválida! Digite novamente!\n");break;
}
}while(resp!=6);
}
#62
Livro de Receitas — Struct com Menureceita.c
Struct livroReceitas com vetor de ingrediente embutido. Menu: preencher, buscar por nome, listar e sair. Valida quantidade máxima de ingredientes (≤10) com laço de reentrada.
StructIterativo
/** Faça um programa para armazenar um livro de receitas e:
(a) Crie um vetor de 5 receitas, que deve ter nome (máximo 25 letras), quantidade de ingredientes e os ingredientes, que podem ser no máximo 10.
(b) Para cada receita, leia seu nome e a quantidade de ingredientes. Então crie e leia o vetor de ingredientes, sendo que cada ingrediente contém nome e quantidade (em gramas).
(c) Permita que o usuário procure a receita por nome, mostrando seus ingredientes e quantidade, caso a encontre. Se não encontrar, informe ao usuário que não encontrou **/
#include <stdio.h>
#include <string.h>
typedef struct tipoIngrediente{
char nome[25];
float qtde;
} ingrediente;
typedef struct livroReceitas{
char nome[25];
int qtdeIngredientes;
ingrediente lista[10];
} receita;
void main(){
receita Vreceitas[5];
int resp, i, j;
char nome[25];
do{
printf("------------------------------------\n");
printf("---------LIVRO DE RECEITAS----------\n");
printf("------------------------------------\n");
printf("Escolha uma das opções abaixo:\n");
printf("1 - Preencher o livro de receitas\n");
printf("2 - Buscar uma receita pelo nome\n");
printf("3 - Mostrar conteúdo do livro\n");
printf("4 - Sair\n");
scanf("%d",&resp);
getchar();
switch (resp){
case 1:
for(i=0; i<5; i++){
printf("Informe o nome da %dª receita: ",i+1);
scanf("%s",Vreceitas[i].nome);
getchar();
printf("Informe a quantidade de ingredientes da %dª receita: ",i+1);
scanf("%d",&Vreceitas[i].qtdeIngredientes);
while(Vreceitas[i].qtdeIngredientes > 10){
printf("Informe uma quantidade menor que 10!:\n");
scanf("%d",&Vreceitas[i].qtdeIngredientes);
}
getchar();
for(j = 0; j<Vreceitas[i].qtdeIngredientes;j++){
printf("Informe o nome do %dº ingrediente da %dª receita: ",j+1,i+1);
scanf("%s",Vreceitas[i].lista[j].nome);
getchar();
printf("Informe a quantidade do %dº ingrediente da %dª receita: ",j+1,i+1);
scanf("%f",&Vreceitas[i].lista[j].qtde);
}
}
break;
case 2:
printf("Informe o nome da receita: que você deseja buscar: ");
scanf("%s",nome);
getchar();
for(i=0; i<5; i++)
if(strcmp(Vreceitas[i].nome,nome)==0){
printf("Quantidade de ingredientes = %d\n Lista:\n",Vreceitas[i].qtdeIngredientes);
for(j=0;j<Vreceitas[i].qtdeIngredientes; j++){
printf("%s, %.1fg\n",Vreceitas[i].lista[j].nome,Vreceitas[i].lista[j].qtde);
}
}
break;
case 3:
for(i=0; i<5; i++){
printf("Nome da receita = %s\n",Vreceitas[i].nome);
printf("Quantidade de ingredientes = %d\n Lista:\n",Vreceitas[i].qtdeIngredientes);
for(j=0;j<Vreceitas[i].qtdeIngredientes; j++){
printf("%s, %.1fg\n",Vreceitas[i].lista[j].nome,Vreceitas[i].lista[j].qtde);
}
}
break;
case 4:
printf("Saindo do programa...");
break;
default:
printf("Opção inválida! Tente de novo!");
break;
}
}while(resp!=4);
}
#63
Livro de Receitas — CRUD CompletoreceitaQ1P2.c
Versão estendida do livro de receitas com inserção, exclusão por nome, listagem e busca — CRUD completo em C puro com modularização de funções.
StructIterativo
/******************************************************************************
1. Faça um algoritmo modularizado para armazenar um livro de receitas:
a) O algoritmo deverá armazenar até 100 receitas, cada receita deverá ter:
nome, quantidade de ingredientes, lista de ingredientes e procedimento
(string de até 300 caracteres).
b) Para cada receita, leia seu nome, a quantidade de ingredientes e o
procedimento. Então crie e leia o vetor de ingredientes, sendo que cada
ingrediente contém nome e quantidade (em gramas).
c) Faça um Menu que permita que o usuário:
• procure a receita por nome, mostrando seus ingredientes, quantidade
e procedimento, caso a encontre. Se não encontrar, informe ao usuário que
não encontrou.
• Insira uma nova receita (inserir todos os dados da receita, inclusive
os ingredientes)
• Exclua uma receita pelo nome
• Liste todas as receitas cadastradas
• Sair do programa
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#define TAM 100
#define iTAM 10
typedef struct ingrediente{
char nome[30];
float qtde;
}ing;
typedef struct receita{
char nome[30];
int qtdeIng;
ing listaIng[iTAM];
char procedimento[300];
}rec;
int inserirReceita(int qtde, rec lista[]){
if(qtde<TAM){
printf("Informe o nome da receita: ");
scanf("%[a-z A-Z]%*c",lista[qtde].nome);
printf("Informe a qtde de ingredientes da receita: ");
scanf("%d%*c",&lista[qtde].qtdeIng);
printf("Informe o procedimento da receita: ");
scanf("%[a-z A-Z]%*c",lista[qtde].procedimento);
for(int i=0; i<lista[qtde].qtdeIng; i++){
printf("Informe o nome do ingrediente %d: ",i+1);
scanf("%[a-z A-Z]%*c",lista[qtde].listaIng[i].nome);
printf("Informe a qtde do ingrediente %d: ",i+1);
scanf("%f%*c",&lista[qtde].listaIng[i].qtde);
}
return qtde+1;
}else{
printf("Lista cheia! Não pode inserir mais receitas!\n");
return qtde;
}
}
int excluirReceita(int qtde, rec lista[]){
char nome[30];
printf("Informe o nome da receita a ser excluída: ");
scanf("%[a-z A-Z]%*c",nome);
for(int i=0; i<qtde; i++)
if(strcmp(nome,lista[i].nome)==0){
for(int j=i; j<(qtde-1); j++)
lista[j] = lista[j+1];
printf("Receita %s que estava na posição %d foi excluída!\n",nome,i);
return qtde-1;
}
printf("Receita %s não encontrada",nome);
return qtde;
}
void listarReceitas(int qtde, rec lista[]){
printf("Listagem de Receitas:\n");
for(int i=0; i<qtde; i++){
printf("Receita %d\n",i+1);
printf("Nome: %s\n",lista[i].nome);
printf("Qtde de ingredientes: %d\n",lista[i].qtdeIng);
printf("Procedimento: %s\n",lista[i].procedimento);
for(int j=0; j<lista[i].qtdeIng; j++){
printf("Nome do ingrediente %d: %s\n",j+1,lista[i].listaIng[j].nome);
printf("Qtde do ingrediente %d: %f\n",j+1,lista[i].listaIng[j].qtde);
}
}
}
void buscarPorNome(int qtde, rec lista[]){
char nome[30];
printf("Informe o nome da receita a ser excluída: ");
scanf("%[a-z A-Z]%*c",nome);
for(int i=0; i<qtde; i++)
if(strcmp(nome,lista[i].nome)==0){
printf("Receita %d\n",i+1);
printf("Nome: %s\n",lista[i].nome);
printf("Qtde de ingredientes: %d\n",lista[i].qtdeIng);
printf("Procedimento: %s\n",lista[i].procedimento);
for(int j=0; j<lista[i].qtdeIng; j++){
printf("Nome do ingrediente %d: %s\n",j+1,lista[i].listaIng[j].nome);
printf("Qtde do ingrediente %d: %f\n",j+1,lista[i].listaIng[j].qtde);
}
return;
}
}
void main(){
rec lista[TAM];
int resp, qtde = 0;
do{
printf("+--------------Menu--------------+\n");
printf("1. Inserir Receita\n");
printf("2. Excluir Receita\n");
printf("3. Listar Receitas\n");
printf("4. Buscar Receita pelo nome\n");
printf("5. Sair\n");
printf("+--------------------------------+\n");
scanf("%d%*c",&resp);
switch (resp){
case 1: qtde = inserirReceita(qtde,lista);
break;
case 2: qtde = excluirReceita(qtde,lista);
break;
case 3: listarReceitas(qtde,lista);
break;
case 4: buscarPorNome(qtde,lista);
break;
case 5: printf("Saindo... \n");
break;
default: printf("Opção Inválida!\n");
break;
}
}while(resp!=5);
}
#64
Agenda de Contatos — Inserção AlfabéticaagendaModularizada.c
Agenda com typedef struct pessoa (nome, e-mail, endereço, telefone, data de nascimento). Inserção em ordem alfabética por deslocamento. Suporta busca por nome, busca por data, listagem e exclusão.
StructIterativo
/*Fazer um programa para simular uma agenda de telefones. Para cada
pessoa devem-se ter os seguintes dados: Nome, E-mail, Endereço, Telefone
(Com DDD e Número), Data de Nascimento DDMMAAAA
Observações (String com 100 caracteres)
Defina a Struct, declare a variável AGENDA com capacidade para 100
elementos, e desenvolva um MENU com as seguintes ações:
(a) Buscar pelo primeiro nome: Imprime os dados da pessoa com esse
nome (se tiver mais de uma pessoa, imprime para todas).
(b) Buscar pela data de nascimento: Imprime os dados de todas as
pessoas que nasceram naquele dia, mês e ano.
(c) Inserir dados de uma pessoa: Insere dados da pessoa em ordem
alfabética
(d) Deletar dados de uma pessoa: Apaga dados da pessoa mantendo
a ordem alfabética*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100
typedef struct pessoa{
char nome[30];
char email[30];
char endereco[50];
char telefone[11];
int data_nascimento; // formato DDMMAAAA como inteiro
}AGENDA;
void buscaPeloNome(AGENDA lista[], int qtde){
char nome[30];
printf("Digite o nome a buscar: ");
scanf("%[a-z A-Z]%*c",nome);
int encontrado = 0;
for (int i = 0; i < qtde; i++) {
if (nome && strcmp(nome, lista[i].nome) == 0) {
printf("\n--- Contato %d ---\n", i + 1);
printf("Nome: %s\n", lista[i].nome);
printf("Email: %s\n", lista[i].email);
printf("Endereco: %s\n", lista[i].endereco);
printf("Telefone: %s\n", lista[i].telefone);
printf("Data de nascimento: %d\n", lista[i].data_nascimento);
encontrado = 1;
}
}
if (!encontrado)
printf("Nenhum contato encontrado com esse nome.\n");
}
void buscaPelaData(AGENDA lista[], int qtde){
int data;
printf("Digite a data de nascimento (DDMMAAAA): ");
scanf("%d%*c", &data);
int encontrado = 0;
for (int i = 0; i < qtde; i++) {
if (lista[i].data_nascimento == data) {
printf("\n--- Contato %d ---\n", i + 1);
printf("Nome: %s\n", lista[i].nome);
printf("Email: %s\n", lista[i].email);
printf("Endereco: %s\n", lista[i].endereco);
printf("Telefone: %s\n", lista[i].telefone);
printf("Data de nascimento: %d\n", lista[i].data_nascimento);
encontrado = 1;
}
}
if (!encontrado)
printf("Nenhum contato encontrado com essa data de nascimento.\n");
}
int inserirDados(AGENDA lista[], int qtde){
if (qtde >= TAM) {
printf("Agenda cheia!\n");
}
AGENDA nova;
printf("Nome: ");
scanf("%[a-z A-Z]%*c",nova.nome);
printf("Email: ");
scanf("%[a-z A-Z]%*c",nova.email);
printf("Endereco: ");
scanf("%[a-z A-Z]%*c",nova.endereco);
printf("Telefone: ");
scanf("%[a-z A-Z]%*c",nova.telefone);
printf("Data de nascimento (DDMMAAAA): ");
scanf("%d%*c", &nova.data_nascimento);
// Inserir em ordem alfabética
if(qtde==0) lista[0] = nova;
else{
int i = qtde - 1;
while ((i >= 0) && (strcmp(nova.nome, lista[i].nome) < 0)) {
lista[i + 1] = lista[i];
i--;
}
lista[i + 1] = nova;
}
qtde++;
printf("Contato adicionado com sucesso!\n");
return qtde;
}
int deletarDados(AGENDA lista[], int qtde){
char nome[30];
int i;
printf("Digite o nome completo da pessoa a ser deletada: ");
scanf("%[a-z A-Z]%*c",nome);
for (i = 0; i < qtde; i++)
if (strcmp(lista[i].nome, nome) == 0) break;
if (i == qtde) {
printf("Pessoa não encontrada.\n");
return qtde;
}
for (int j = i; j < qtde - 1; j++)
lista[j] = lista[j + 1];
qtde--;
printf("Contato removido com sucesso!\n");
return qtde;
}
void imprimir(AGENDA lista[], int qtde){
for (int i = 0; i < qtde; i++) {
printf("\n--- Contato %d ---\n", i + 1);
printf("Nome: %s\n", lista[i].nome);
printf("Email: %s\n", lista[i].email);
printf("Endereco: %s\n", lista[i].endereco);
printf("Telefone: %s\n", lista[i].telefone);
printf("Data de nascimento: %d\n", lista[i].data_nascimento);
}
}
void main(){
AGENDA agenda[TAM];
int total_contatos = 0;
int opcao, data, encontrado = 0, i;
char nome[30];
do {
printf("\n--- MENU AGENDA ---\n");
printf("1. Buscar pelo primeiro nome\n");
printf("2. Buscar pela data de nascimento\n");
printf("3. Inserir dados de uma pessoa\n");
printf("4. Deletar dados de uma pessoa\n");
printf("5. Listar todos os dados cadastrados\n");
printf("6. Sair\n");
printf("Escolha uma opcao: ");
scanf("%d%*c", &opcao);
switch (opcao) {
case 1:
buscaPeloNome(agenda, total_contatos);
break;
case 2:
buscaPelaData(agenda, total_contatos);
break;
case 3:
total_contatos = inserirDados(agenda, total_contatos);
break;
case 4:
total_contatos = deletarDados(agenda,total_contatos);
break;
case 5:
imprimir(agenda,total_contatos);
break;
case 6:
printf("Saindo...\n");
break;
default:
printf("Opção invalida!\n");
}
}while(opcao != 6);
}
#65
Procedimento de Cabeçalho de RelatóriofuncaoCabecalho.c
Procedimento cabecalho(char nome[]) que imprime um cabeçalho padronizado do IFBA. Introdução ao conceito de procedimentos sem retorno com passagem de string.
Iterativo
/******************************************************************************
Escreva um procedimento que gere um cabeçalho para um relatório. Esse
procedimento deve receber um nome como parâmetro. O cabeçalho tem a seguinte forma:
============================================
IFBA - Instituto Federal de Educação, Ciência e Tecnologia da Bahia
COINF - Coordenação de Informática
Disciplina de Linguagem de Programação I
Nome: ****substituir pelo nome digitado***
============================================
*******************************************************************************/
#include <stdio.h>
void cabecalho(char nome[]){
printf("============================================\n");
printf("IFBA - Instituto Federal de Educação, Ciência e Tecnologia da Bahia\n");
printf("COINF - Coordenação de Informática\n");
printf("Disciplina de Linguagem de Programação I\n");
printf("Aluno: %s\n", nome);
printf("============================================\n");
}
void main(){
char resp;
char nome[30];
do{
printf("Informe o nome para gerar o cabeçalho: ");
scanf("%[a-z A-Z]%*c",nome);
cabecalho(nome);
printf("Deseja continuar? S-sim e N-não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
#66
Função: Número para Nome do MêsfuncaoMes.c
Função qualMes(int x) que usa switch para converter um número (1–12) no nome do mês. Exibe mensagem de erro para valores inválidos. Exercício clássico de funções com switch.
Iterativo
/******************************************************************************
Escreva uma função que receba um número inteiro e imprima o mês
correspondente ao número. Por exemplo, 2 corresponde à “fevereiro”. A função
deve mostrar uma mensagem de erro caso o número recebido não faça sentido. Gere
também um algoritmo que leia um valor e chame a função criada.
*******************************************************************************/
#include <stdio.h>
void qualMes(int x){
switch (x){
case 1: printf("Janeiro\n"); break;
case 2: printf("Fevereiro\n"); break;
case 3: printf("Março\n"); break;
case 4: printf("Abril\n"); break;
case 5: printf("Maio\n"); break;
case 6: printf("Junho\n"); break;
case 7: printf("Julho\n"); break;
case 8: printf("Agosto\n"); break;
case 9: printf("Setembro\n"); break;
case 10: printf("Outubro\n"); break;
case 11: printf("Novembro\n"); break;
case 12: printf("Dezembro\n"); break;
default: printf("Número não corresponde a um mês válido!\n"); break;
}
}
void main(){
char resp;
int mes;
do{
printf("Informe um número inteiro: ");
scanf("%d%*c",&mes);
qualMes(mes);
printf("Deseja continuar? S-sim e N-não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
#67
Função: Três Números em Ordem CrescentefuncaoOrdemCrescenteXYZ.c
Função ordemCrescente(int x, int y, int z) que exibe três inteiros em ordem crescente com seis condicionais encadeados. Demonstra cobertura exaustiva de todas as permutações possíveis.
Iterativo
/******************************************************************************
Faça uma função que leia 3 números inteiros e mostre-os em ordem crescente
*******************************************************************************/
#include <stdio.h>
void ordemCrescente(int x, int y, int z){
if((x<=y) && (y<=z)) printf("%d <= %d <= %d\n",x,y,z);
else if((x<=z) && (z<=y)) printf("%d <= %d <= %d\n",x,z,y);
else if((y<=x) && (x<=z)) printf("%d <= %d <= %d\n",y,x,z);
else if((y<=z) && (z<=x)) printf("%d <= %d <= %d\n",y,z,x);
else if((z<=x) && (x<=y)) printf("%d <= %d <= %d\n",z,x,y);
else printf("%d <= %d <= %d\n",z,y,x);
}
void main(){
char resp;
int a,b,c;
do{
printf("Informe três números inteiros: ");
scanf("%d %d %d%*c",&a,&b,&c);
ordemCrescente(a,b,c);
printf("Deseja continuar? S-sim e N-não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
#68
Função: Verificação de Número PerfeitofuncaoPerfeito.c
Função perfeito(int x) que soma os divisores e verifica a perfeição. Encapsulamento da lógica de número perfeito em um procedimento reutilizável.
Iterativo
/******************************************************************************
Sabendo-se que um número perfeito é aquele cuja multiplicação de seus divisores,
excluindo ele mesmo, é igual ao próprio número (ex: 6 = 3 + 2 + 1), faça uma função que
receba como parâmetro um inteiro e informe se ele é perfeito.
*******************************************************************************/
#include <stdio.h>
void perfeito(int x){
int resultado = 0;
for(int i = (x-1); i>=1; i--)
if(x%i == 0) resultado+=i;
if(resultado == x) printf("Número Perfeito!\n");
else printf("Número NÃO Perfeito!\n");
}
void main(){
char resp;
int x;
do{
printf("Informe um número inteiro: ");
scanf("%d%*c",&x);
perfeito(x);
printf("Deseja continuar? S-sim e N-não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
#69
Função: Primos em um IntervalofuncaoPrimos.c
Função primo(int x, int y) com auxiliar troca(int *x, int *y) via ponteiros. Modularização com separação de responsabilidades.
IterativoPonteiro
/******************************************************************************
Escreva uma função que leia 2 números inteiros, x e y, que são os limites de
um intervalo e informe todos os números primos contidos no intervalo.
*******************************************************************************/
#include <stdio.h>
void troca(int *x, int *y){
int aux;
if(*x > *y){
aux = *x;
*x = *y;
*y = aux;
}
}
void primo(int x, int y){
int aux, cont;
troca(&x,&y);
for(int i = x; i <= y; i++){
cont = 0;
for(int j = 1; j <= i; j++)
if(i%j == 0) cont++;
if(cont==2) printf("Primo = %d\n",i);
}
}
void main(){
char resp;
int x, y;
do{
printf("Informe o intervalo [x,y]: ");
scanf("%d%*c %d%*c",&x,&y);
primo(x,y);
printf("Deseja continuar? S-sim e N-não: ");
scanf("%c%*c",&resp);
}while(resp!='N');
}
#70
Calculadora ModularizadacaqlculadoraModulrizada.c
Quatro operações (soma, subtracao, divisao, multiplicacao) em funções separadas. Lê a expressão no formato número operador número e despacha via switch. Inclui validação de divisão por zero.
Iterativo
/**Faça um algoritmo que implemente um calculadora modularizada **/
#include <stdio.h>
void soma(float a, float b){
printf("%.1f + %.1f = %.1f\n", a, b, a+b);
}
void subtracao(float a, float b){
printf("%.1f - %.1f = %.1f\n", a, b, a-b);
}
void divisao(float a, float b){
if(b==0){
printf("Não é permitido realizar divisão por zero!\n");
}else printf("%.1f/%.1f = %.1f\n", a, b, a/b);
}
void multiplicacao(float a, float b){
printf("%.1f x %.1f = %.1f\n", a, b, a*b);
}
void main(){
int x,y,resp;
char op;
do{
printf("-----------Calculadora------------\n");
printf("Digite a operação desejada:\n");
printf("Número operador Número\n");
scanf("%d%*c", &x);
scanf("%c", &op);
scanf("%d%*c", &y);
switch (op){
case '+': soma(x,y); break;
case '-': subtracao(x,y); break;
case '/': divisao(x,y); break;
case '*': multiplicacao(x,y); break;
default: printf("Operação Inválida!\n"); break;
}
printf("Deseja repetir a operação? 1-Sim 2-Não\n");
scanf("%d%*c", &resp);
}while(resp==1);
}
#71
Média Aritmética ou PonderadamediaPonderada.c
Função calcularMedia() que recebe 3 notas e uma letra: 'A' para aritmética ou 'P' para ponderada (pesos 5, 3 e 2). Demonstra parâmetro de controle que altera o comportamento.
Iterativo
/**Elabore uma função que receba três notas de um aluno como parâmetro e uma
letra. Se a letra for ‘A’, a função deve calcular a média aritmética das notas
do aluno; se a letra for ‘P’, deverá calcular a média ponderada, com pesos
5, 3 e 2. Retorne a média calculada para o programa principal.**/
#include <stdio.h>
float calcularMedia(float n1, float n2, float n3, char tipo){
if(tipo == 'A') return ((n1+n2+n3)/3);
if(tipo == 'P') return ((n1*5+n2*3+n3*2)/10);
return 0;
}
void main(){
float n1,n2,n3;
char tipo;
printf("Informe as 3 notas do aluno:\n");
scanf("%f%*c %f%*c %f%*c",&n1,&n2,&n3);
do{
printf("Digite 'A' para média aritmética e 'P' para média ponderada:\n");
scanf("%c%*c", &tipo);
if((tipo!='A') && (tipo!='P')) printf("Opção inválida! Digite novamente:\n");
}while((tipo!='A') && (tipo!='P'));
printf("Média = %.1f\n", calcularMedia(n1,n2,n3,tipo));
}
#72
MDC — Iterativo ModularizadomdcModularizado.c
Calcula o Máximo Divisor Comum pela busca decrescente: percorre de x até 1 e retorna o primeiro divisor comum. Versão iterativa modularizada — contrasta com o método de Euclides recursivo.
Iterativo
// Faça um algoritmo que leia dois números inteiros e informe o MDC desses
//números. OBS.: O Máximo Divisor Comum (MDC) corresponde ao maior número
//inteiro capaz de dividir dois ou mais números inteiros simultaneamente.
#include <stdio.h>
int MDC(int x, int y){
for(int MDC=x; MDC>=1; MDC--)
if((x%MDC==0) && (y%MDC==0))
return MDC;
}
void main(){
int x,y,mdc;
printf("Informe dois números inteiros: ");
scanf("%d %d", &x, &y);
mdc = MDC(x,y);
printf("MDC(%d,%d) = %d",x,y,mdc);
}
#73
Cadastro de Idades — Funções de CRUDidadesModularizado.c
Gerencia um vetor de até 100 idades com funções separadas: inserir(), buscarRemover() e mostrar(). Exercício completo de CRUD modularizado com vetores.
VetorIterativo
/**Crie um programa que leia até 100 idades (inteiras), armazene-as e
depois mostre-as. Crie funções e procedimentos para realizar as
tarefas. **/
#include <stdio.h>
#define tam 100
void inserir(int id, int qtde, int idades[]){
idades[qtde] = id;
}
int buscarRemover(int id, int qtde, int idades[]){
for(int i=0; i<qtde; i++){
if(idades[i]==id){
for(int j=i; j<(qtde-1);j++)
idades[j]=idades[j+1];
printf("Elemento removido!\n");
return 1;
}
}
printf("Elemento não encontrado!\n");
return 0;
}
void mostrar(int qtde, int idades[]){
for(int i=0; i< qtde; i++)
printf("%d, ",idades[i]);
printf("\n");
}
void main(void){
int idades[tam], id, qtde=0;
int removeu;
do{
printf("Informe uma idade a ser inserida ou -1 para sair: ");
scanf("%d",&id);
if(id>=0){
inserir(id,qtde,idades);
qtde++;
mostrar(qtde,idades);
}
}while(id>=0);
do{
printf("Informe uma idade a ser removida ou -1 para sair: ");
scanf("%d",&id);
if(id>=0)
if(buscarRemover(id,qtde,idades))
qtde--;
mostrar(qtde,idades);
}while(id>=0);
}
#74
Somatório de 1 a N (Recursivo)soma1NRecursivo.c
Função recursiva clássica: soma(N) = N + soma(N-1) com caso base soma(1) = 1. Ponto de partida ideal para entender a estrutura de funções recursivas em C.
Recursivo
/******************************************************************************
Crie uma função recursiva que receba um número inteiro positivo N e
calcule o somatório de todos os inteiros contidos no intervalo [1,N].
*******************************************************************************/
#include <stdio.h>
int soma(int N){
if (N==1) return 1;
else return N+soma(N-1);
}
void main(){
int N;
char resp;
do{
printf("Informe um número inteiro: ");
scanf("%d",&N);
printf("Somatório dos números de 1 a %d: %d\n", N, soma(N));
printf("Deseja executar novamente? (s-sim e n-não): ");
scanf("%c%*c",&resp);
} while(resp!='n');
}
#75
Multiplicação por Somas Sucessivas (Recursivo)multiplicacaoRecursiva.c
Multiplicação via somas recursivas: Mult(x,y) = x + Mult(x, y-1). Casos base: y=0→0 e y=1→x. Ilustra como reduzir operações aritméticas a operações mais simples.
Recursivo
/******************************************************************************
A multiplicação de dois números inteiros pode ser feita através de somas
sucessivas. Proponha um algoritmo recursivo Mult(n1,n2) que calcule
a multiplicação de dois inteiros.
*******************************************************************************/
#include <stdio.h>
int Mult(int x, int y) {
if (y==0) return 0;
if (y==1) return x;
else return x+Mult(x, (y-1));
}
int main() {
int x,y;
char resp;
do{
printf("Digite dois números para calculo da multiplicação:\n");
scanf("%d %d%*c",&x,&y);
printf("Mult(%d,%d) = %d\n",x,y,Mult(x,y));
printf("Deseja executar novamente? (s-sim e n-não): ");
scanf("%c%*c",&resp);
} while(resp!='n');
}
#76
Potenciação k^n (Recursivo)XelevadoYrecursivo.c
Calcula kn usando apenas multiplicações recursivas: elevado(k,n) = k × elevado(k, n-1). Casos base: n=0→1 e n=1→k.
Recursivo
/******************************************************************************
Crie um programa em C, que contenha uma função recursiva que receba
dois inteiros positivos k e n e calcule kˆn. Utilize apenas multiplicações.
O programa principal deve solicitar ao usuário os valores de k e n e
imprimir o resultado da chamada da função.
*******************************************************************************/
#include <stdio.h>
int elevado(int k, int n){
if (n==0) return 1;
if (n==1) return k;
else return k*elevado(k, n-1);
}
void main(){
int k,n;
char resp;
do{
printf("Informe um número inteiro e seu expoente: ");
scanf("%d %d%*c",&k,&n);
printf("%d elevado a %d = %d\n", k, n, elevado(k,n));
printf("Deseja executar novamente? (s-sim e n-não): ");
scanf("%c%*c",&resp);
} while(resp!='n');
}
#77
MDC por Subtração Sucessiva (Recursivo)RecursividadeMDC.c
MDC pelo método de subtração sucessiva: MDC(x,y) = x se iguais; MDC(y,x) se x<y; senão MDC(x-y, y). Contrasta com o método do resto (Euclides).
Recursivo
// Online C compiler to run C program online
#include <stdio.h>
int MDC(int x, int y){
if (x == y) return x;
if (x < y) return MDC(y, x);
return MDC(x-y, y);
}
int main() {
int x,y;
printf("Digite um dois números para o cálculo do MDC: ");
scanf("%d %d",&x,&y);
printf("MDC(%d,%d) = %d",x,y,MDC(x,y));
return 0;
}
#78
MDC pelo Algoritmo de Euclides (Recursivo)MDCRecursivo.c
Implementação recursiva do algoritmo de Euclides: MDC(x,y) = x se y==0; caso contrário MDC(y, x%y). Contrasta elegantemente com a versão iterativa.
Recursivo
/******************************************************************************
O máximo divisor comum dos inteiros x e y é o maior inteiro que é
divisível por x e y. Escreva uma função recursiva mdc em C, que retorna
o máximo divisor comum de x e y. O mdc de x e y é definido como
segue: se y é igual a 0, então mdc(x,y) é x; caso contrário, mdc(x,y) é
mdc (y, x%y), onde % é o operador resto.
*******************************************************************************/
#include <stdio.h>
int MDC(int x, int y) {
if (y==0) return x;
else return MDC(y, x%y);
}
int main() {
int x,y;
char resp;
do{
printf("Digite dois números para calculo do MDC:\n");
scanf("%d %d%*c",&x,&y);
printf("MDC(%d,%d) = %d\n",x,y,MDC(x,y));
printf("Deseja executar novamente? (s-sim e n-não): ");
scanf("%c%*c",&resp);
} while(resp!='n');
}
#79
Resto da Divisão por Subtração (Recursivo)RecursividadeRestoDivisao.c
Calcula o resto da divisão recursivamente via subtração: MOD(x,y) = 0 se x==y; x se x<y; senão MOD(x-y, y). Demonstra como simular o operador %.
Recursivo
// Faça um algoritmo que calcula o reto da divisão de forma recursiva
#include <stdio.h>
int MOD(int x, int y){
if (x == y) return 0;
if (x < y) return x;
return MOD(x-y, y);
}
int main() {
int x,y;
printf("Digite um dois números para o cálculo do resto da divisão: ");
scanf("%d %d",x,y);
printf("MOD(%d,%d) = %d",x,y,MOD(x,y));
return 0;
}
#80
P1 2025.1 — Q1: Pares Divisíveis por 3 e seus DivisoresQ1P12025_1LP1.c
Questão de prova: lê um intervalo [x,y] e exibe todos os números pares e divisíveis por 3 simultaneamente. Para cada um, lista seus divisores em ordem decrescente. Combina filtragem com dois laços aninhados.
Iterativo
/******************************************************************************
Faça um algoritmo que leia um intervalo [x,y] e informe todos os números contidos
no intervalo que são pares e divisíveis por 3 ao mesmo tempo. Para estes números,
e somente para estes números, mostre a lista dos seus divisores
*******************************************************************************/
#include <stdio.h>
void main(){
int x,y;
printf("Informe o intervalo [x,y]: ");
scanf("%d %d",&x,&y);
if(x>y){
int aux;
aux = x;
x = y;
y = aux;
}
for(int i=x; i<=y; i++)
if((i%2==0)&&(i%3==0)){
printf("Divisores de %d:\n",i);
for(int divisor=i;divisor>=1;divisor--)
if(i%divisor==0) printf("%d\n",divisor);
}
}
#81
P1 2025.1 — Q2: N-ésimo Termo de FibonacciQ2P12025_1LP1.c
Questão de prova: calcula o N-ésimo termo da série de Fibonacci iterativamente com dois acumuladores (fib1, fib2). Trata os casos especiais N=1, N=2 e N negativo antes do laço principal.
Iterativo
/******************************************************************************
Dada a série de Fibonacci: Fib = 1, 1, 2, 3, 5, 8, 13, 21, 34 …, na qual podemos
descobrir o valor do elemento seguinte, pois o elemento sempre é a soma dos dois
elementos anteriores da série, logo: Fib(n) = Fib(n-1) + Fib(n-2). Faça um
algoritmo que mostre o N-ésimo termo da série de Fibonacci. N deverá ser informado
pelo usuário.
*******************************************************************************/
#include <stdio.h>
void main(){
int fib,fib1,fib2,n;
printf("Informe o elemento de Fibonacci desejado: ");
scanf("%d",&n);
printf("%dº elemento da série de Fibonacci = ",n);
fib1=fib2=1;
if((n==1)||(n==2)) printf("1");
else if(n>2){
for(int i=3; i<=n; i++){
fib = fib1+fib2;
fib1 = fib2;
fib2 = fib;
}
printf("%d\n",fib);
}else printf("O elemento não pode ser negativo!\n");
}
#82
P1 2025.1 — Q3: Cadastro de Academia com EstatísticasQ3P12025_1LP1.c
Questão de prova: lê dados de clientes de academia (sexo, idade, altura, peso) e gera estatísticas: total, percentual por sexo, maior peso feminino, menor peso masculino, médias de altura e idades extremas.
Iterativo
/******************************************************************************
Faça um algoritmo que lei uma quantidade indeterminada de informações sobre
clientes de uma academia. Deve-se ler: idade, sexo biológico (F-feminino e M-masculino),
peso e altura. No final, informar:
a) Quantidade total de clientes cadastrados
b) Percentual de mulheres e de homens
c) Maior peso entre as mulheres, menor peso entre os homens
d) média das alturas das mulheres e média das alturas dos homens
e) Idade do homem mais velho e idade da mulher mais nova
*******************************************************************************/
#include <stdio.h>
void main(){
int idade, total=0, mulher=0, homem=0,nova,velho;
float pesada, leve, altMulher=0.0, altHomem=0.0, altura, peso;
char sexo, resp;
do{
printf("Cadastro de Academia\n");
printf("Informe o sexo (F-feminino, M-masculino):\n");
scanf("%c%*c",&sexo);
printf("Informe a idade:\n");
scanf("%d%*c",&idade);
printf("Informe a altura:\n");
scanf("%f%*c",&altura);
printf("Informe o peso:\n");
scanf("%f%*c",&peso);
if((sexo == 'F')||(sexo=='f')){
total++;
mulher++;
altMulher+=altura;
if(mulher == 1){
pesada = peso;
nova = idade;
}else{
if(pesada < peso) pesada = peso;
if(nova > idade) nova = idade;
}
}else if((sexo == 'M')||(sexo=='m')){
total++;
homem++;
altHomem+=altura;
if(homem == 1){
leve = peso;
velho = idade;
}else{
if(leve > peso) leve = peso;
if(velho < idade) velho = idade;
}
}else printf("Sexo digitado é inválido! Informar F ou M\n");
printf("Deseja repetir o cadastramento? (S-Sim, N-Não)\n");
scanf("%c%*c",&resp);
}while(resp!='N');
printf("Total de pessoas cadastradas = %d\n",total);
printf("Percentual de Mulheres = %.1f%%\n",(float)(mulher*100)/(float)total);
printf("Percentual de Homens = %.1f%%\n",(float)(homem*100)/(float)total);
printf("Maior peso entre as mulheres = %.1fKgs\n",pesada);
printf("Menor peso entre os homens= %.1fKgs\n",leve);
printf("Média das alturas das mulheres = %.2fm\n",((float)altMulher/(float)mulher));
printf("Média das alturas das homens= %.2fm\n",((float)altHomem/(float)homem));
printf("Idade do homem mais velho = %d\n", velho);
printf("Idade da mulher mais nova = %d\n", nova);
}