Exercícios sobre funções em C

Resolva as seguintes questões usando conceitos funções, de return, de números aleatórios e paramêtros/argumentos:


0. Crie uma função que receba um valor e informe se ele é positivo ou não.

1. Crie uma função que receba um valor e diga se é nulo ou não.

2. Crie uma função que receba três valores, 'a', 'b' e 'c', que são os coeficientes de uma equação do segundo grau e retorne o valor do delta, que é dado por 'b² - 4ac'

3. Usando as 3 funções acima, crie um aplicativo que calcula as raízes de uma equação do 2o grau:
ax² + bx + c=0
Para ela existir, o coeficiente 'a' deve ser diferente de zero.
Caso o delta seja maior ou igual a zero, as raízes serão reais. Caso o delta seja negativo, as reais serão complexas e da forma: x + iy

4. Crie uma função em linguagem C que receba 2 números e retorne o maior valor.

5. Crie uma função em linguagem C que receba 2 números e retorne o menor valor.

6. Crie uma função em linguagem C que receba 3 números e retorne o maior valor, use a função da questão 4.

7. Crie uma função em linguagem C que receba 3 números e retorne o menor valor, use a função da questão 5.

8. Crie uma função em linguagem C chamado Dado() que retorna, através de sorteio, um número de 1 até 6.

9. Use a função da questão passado e lance o dado 1 milhão de vezes. Conte quantas vezes cada número saiu.
A probabilidade deu certo? Ou seja, a porcentagem dos números foi parecida?

10. Crie um aplicativo de conversão entre as temperaturas Celsius e Farenheit.
Primeiro o usuário deve escolher se vai entrar com a temperatura em Célsius ou Farenheit, depois a conversão escolhida é realizada através de um comando SWITCH.
Se C é a temperatura em Célsius e F em farenheit, as fórmulas de conversão são:
C= 5.(F-32)/9
F= (9.C/5) + 32

11. Um professor, muito legal, fez 3 provas durante um semestre mas só vai levar em conta as duas notas mais altas para calcular a média.
Faça uma aplicação em C que peça o valor das 3 notas, mostre como seria a média com essas 3 provas, a média com as 2 notas mais altas, bem como sua nota mais alta e sua nota mais baixa.

Desafio 1: Programe um aplicativo em C que acha todos os números primos até 1000
Número primo é aquele que é divisível somente por 1 e por ele mesmo.

Desafio 2: Programe um aplicativo em C que recebe dois inteiros e retorna o MDC, máximo divisor comum.

Desafio 3: Programe um aplicativo em C que ache todos os números perfeitos até 1000.
Número perfeito é aquele que é a soma de seus fatores. Por exemplo, 6 é divisível por 1, 2 e 3 ao passo que 6 = 1 + 2 + 3.

Desafio 4: Crie um programa em C que receba um número e imprima ele na ordem inversa.
Ou seja, se recebeu o inteiro 123, deve imprimir o inteiro 321.


Soluções com código comentado



12 comentários:

Joao Carlos Agostini disse...

Olá
Onde estão as respostas dos desafios?
Passei dois dias tentando fazer o desafio dos números primos, sem êxito, e gostaria da saber a resposta.
Obrigado.

Samuel Silva disse...

Não entendi o final da questão 9
A probabilidade deu certo? Ou seja, a porcentagem dos números foi parecida?

Anônimo disse...

Número com três algarismos inversos:

#include
#include
#include
/* Desafio respondido por Jeffersson.
JefferssonSa@outlook.com, para trocar ideias :) */
int invertido(int x);
int main()
{
int num,result;
setlocale(LC_ALL, "portuguese");
system("color F0");
printf("Digite um número com três algarismos, ex.: 256\n");
scanf("%d",&num);
system("cls");
invertido(num);
result=invertido(num);
printf("Invertido:\n");
printf("%d\n",result);

}
int invertido(int x){
int unidade,dezena,centena,aux,invertido;
centena = x/100;
aux = x%100;
dezena= aux/10;
unidade = aux%10;
invertido= unidade*100+dezena*10+centena;
return invertido;
}

André de Souza disse...

A probabilidade do meu não está dando certo. sempre uma variavel sai com valor 0. alguem poderia me ajudar? pode ser a minha maquina? o meu codigo? ou os dois?

#include
#include
#include

int dado(){
srand( (unsigned)time(NULL) );
return 1+(rand()%6);
}

int main(void){


double count,count1=0,count2=0,count3=0,count4=0,count5=0,count6=0;

printf("intervalo da rand: [0,%d]\n", RAND_MAX);
//printf("Número sorteado: %d\n",dado());

for(count=1;count<=1000000;count++){

switch (dado())
{
case 1:count1++;
break;
case 2:count2++;
break;
case 3:count3++;
break;
case 4:count4++;
break;
case 5:count5++;
break;
case 6:count6++;
break;

}

}
printf("\t\t TABELA DE RESULTADOS \t\t\n\n");
printf("\tNúmero 1\tNúmero 2\tNúmero 3\n");
printf("\t%.2f \t%.2f \t%.2f \n\n",count1,count2,count3);
printf("\tNúmero 4\tNúmero 5\tNúmero 6\n");
printf("\t%.2f \t%.2f \t%.2f \n",count4,count5,count6);
}

André de Souza disse...

olhando a resposta, eu percebi o porquê da probabilidade não bater.

eu estava gerando uma semente diferente toda vez que rodava o dado, ou seja, eu não estava jogando o dado sob a mesma condição.

André de Souza disse...

realmente ,faltaram as respostas dos desafios...

Andreza disse...

Boa tarde, por que no meu 9º o número 6 não sai nenhuma vez?

Não posto o código porque fiz em c# :D

Filip3 disse...

Segue minha resposta da 11.

#include

float Media2Maiores(float num1,float num2,float num3);
float MaiorNota(float num1,float num2,float num3);
float MenorNota(float num1,float num2,float num3);


int main (){

float nota1,nota2,nota3,media,maior,menor;

printf("Digite a nota 1:");
scanf("%f", &nota1);
printf("Digite a nota 2:");
scanf("%f", &nota2);
printf("Digite a nota 3:");
scanf("%f", &nota3);

media = Media2Maiores(nota1,nota2,nota3);
maior = MaiorNota(nota1,nota2,nota3);
menor = MenorNota(nota1,nota2,nota3);


printf("A media das 2 maiores notas eh: %.2f \n", media);
printf("A maior nota eh: %.2f \n", maior);
printf("A menor nota eh: %.2f \n", menor);

return 0;

}



float Media2Maiores (float nota1,float nota2,float nota3){
float result=0;

if (nota1 >= nota2){
if (nota2 >= nota3){
result = (nota1 + nota2)/2;
return result;
}else {
result = (nota1 + nota3)/2;
return result;
}
}else {

if (nota3 >= nota1){
result = (nota2 + nota3) /2;
return result;
}

}

}

float MaiorNota (float num1,float num2,float num3){

float maior;

if(num1 >= num2 && num3){
maior = num1;
return maior;

}else{

if(num2 >= num3){
maior = num2;
return maior;

}else{
maior = num3;
return maior;

}}

}

float MenorNota (float num1,float num2,float num3){

float menor;

if(num1 <= num2 && num3){
menor = num1;
return menor;

}else{

if(num2 >= num3){
menor = num2;
return menor;

}else{
menor = num3;
return menor;

}}

}

Anônimo disse...

#include
#include
#include
#include
//Questão 9
void Dado();
int main()
{
setlocale(LC_ALL,"portuguese");
Dado();
return 0;
}
void Dado()
{
int iCont,iNum,i1=0,i2=0,i3=0,i4=0,i5=0,i6=0;
// time_t t;
srand(time(NULL));

for(iCont=1;iCont<=1000;iCont++)
{
iNum=1+(rand()%6);
printf("%d\n",iNum);
if(iNum==1)
{
i1++;
}
if(iNum==2)
{
i2++;
}
if(iNum==3)
{
i3++;
}
if(iNum==4)
{
i4++;
}
if(iNum==5)
{
i5++;
}
if(iNum==6)
{
i6++;
}
}
getch();
system("cls||clear");
printf("Quantidade de vezes do número 1: %d\n",i1);
printf("Quantidade de vezes do número 2: %d\n",i2);
printf("Quantidade de vezes do número 3: %d\n",i3);
printf("Quantidade de vezes do número 4: %d\n",i4);
printf("Quantidade de vezes do número 5: %d\n",i5);
printf("Quantidade de vezes do número 6: %d\n",i6);
}

Let's Learn disse...

//2. Crie uma função que receba três valores, 'a', 'b' e 'c', que são os coeficientes de uma equação
// do segundo grau e retorne o valor do delta, que é dado por 'b² - 4ac'

#include
#include

int delta (int aIn, int bIn, int cIn);

int main()
{
int a, b, c, deltaOutput;
setlocale(LC_ALL,"portuguese");
printf("\t Entre com os coeficientes da equação do segundo grau ");
scanf("%d %d %d", &a, &b, &c);
deltaOutput = delta(a, b, c);
printf("\t O valor de delta é: %d ", deltaOutput );
}

int delta (int aIn, int bIn, int cIn)
{
return (( bIn * bIn ) - 4 * aIn * cIn);
}

Let's Learn disse...

//3. Usando as 3 funções acima, crie um aplicativo que calcula as raízes de uma equação do 2o grau:
//ax² + bx + c=0
//Para ela existir, o coeficiente 'a' deve ser diferente de zero.
//Caso o delta seja maior ou igual a zero, as raízes serão reais.
//Caso o delta seja negativo, as reais serão complexas e da forma: x + iy


#include
#include
#include

int nulo (int nuloInput);
int delta (int aIn, int bIn, int cIn);
int positivo (int positivoInput);


int main()
{
int calcular;
float a, b, c, deltaOutput;
setlocale(LC_ALL,"portuguese");

do
{
printf("Programa que acha as raizes de uma equacao do 2o grau: ax^2 + bx + c = 0\n\n");
printf("\t Entre com os coeficientes da equação do segundo grau ");
scanf("%f %f %f", &a, &b, &c);
if ( nulo(a) == 0){}
else
{
deltaOutput = delta(a, b, c);
printf("\t O valor de delta é: %.2f \n", deltaOutput );
if ( deltaOutput >= 0 )
{
printf("\t Raiz 1: %.2f \n", ((-b + sqrt(deltaOutput)) / (2 * a) ) );
printf("\t Raiz 2: %.2f \n", ((-b - sqrt(deltaOutput)) / (2 * a) ) );
}
else
{
printf("\t Raiz 1: %.2f + %.2f i \n", (-b / (2 * a) ), ((sqrt(-deltaOutput)) / (2 * a) ) );
printf("\t Raiz 2: %.2f - %.2f i \n", (-b / (2 * a) ), ((sqrt(-deltaOutput)) / (2 * a) ) );
}
}
printf("\n\n Calcular mais raizes?\n 1. Continuar\n 0. Sair \n");
scanf("%d", &calcular);
if ( calcular == 1 )
system("cls || clear all");
} while ( calcular == 1 );
}


int nulo (int nuloInput)
{
if ( nuloInput == 0 )
{
printf("\t o Valor informado do coeficiente a é nulo \n");
return 0;
}
}

int delta (int aIn, int bIn, int cIn)
{
return (( bIn * bIn ) - 4 * aIn * cIn);
}

int positivo (int positivoInput)
{
if ( positivoInput > 0 )
printf("\t o Valor informado é positivo \n");
else
printf("\t o Valor informado não é positivo \n");
}

Let's Learn disse...

//10. Crie um aplicativo de conversão entre as temperaturas Celsius e Farenheit.
//Primeiro o usuário deve escolher se vai entrar com a temperatura em Célsius ou Farenheit,
//depois a conversão escolhida é realizada através de um comando SWITCH.
//Se C é a temperatura em Célsius e F em farenheit, as fórmulas de conversão são:
//C= 5.(F-32)/9
//F= (9.C/5) + 32


#include
#include

int main (void)
{
int converter;
float Celsius, Farenheit;
setlocale(LC_ALL,"portuguese");

do
{
printf("\t Conversão entre as temperaturas Celsius e Farenheit \n\n");
printf("\t Tecle 'F' para converter Celsius em Farenheit ");
printf("\n\t ou tecle 'C' para converter Farenheit em Celsius ");
printf("\n\n \t Tecle 'q' para sair ");
scanf(" %c", &converter);
switch ( converter )
{
case 'F' :
printf("\t Entre com a temperatura em Celsius: ");
scanf("%f", &Celsius);
printf("\t A temperatura correspondente em Farenheit são: %.2f \n\n", ((1.8*Celsius)+32) );
system("pause");
system("cls || clear");
break;

case 'C' :
printf("\t Entre com a temperatura em Farenheit: ");
scanf("%f", &Farenheit);
printf("\t A temperatura correspondente em Celsius são: %.2f \n\n", ((Farenheit - 32)/1.8));
system("pause");
system("cls || clear");
break;

case 'q' :
printf("\t Encerrando !!! \n");
break;

default :
//system("cls || clear");
printf("\n\t\t Tecle o caracter 'F' ou 'C' \n\n" );
system("pause");
system("cls || clear");
break;
}
} while ( converter != 'q' );

}

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.