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



8 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;

}}

}

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.