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



20 comentários:

  1. 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.

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

    ResponderExcluir
  3. 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;
    }

    ResponderExcluir
  4. 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);
    }

    ResponderExcluir
  5. 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.

    ResponderExcluir
  6. realmente ,faltaram as respostas dos desafios...

    ResponderExcluir
  7. Aqui o meu codigo pros numeros primos. Eu primeiramente fiz de 1 a 1000 mas depois eu variei ele pra listar todos os numeros primos entre 'a' e 'b' inseridos pelo o usuario. A funçao ficou assim:

    void primo(int cont1,int cont2, int verificador,int a, int b, int contlinha)
    {
    contlinha = 0;
    printf("\t");

    for(cont1 = a; cont1 < b; cont1++)
    {
    verificador = 1;
    cont2 = 2;
    while(verificador == 1 && cont2<cont1)
    {
    if(cont1%cont2 == 0)
    verificador = 0;
    else
    cont2++;
    }
    if(verificador == 1)
    {
    printf("%d ",cont1);
    contlinha++;
    }
    if(contlinha == 10)
    {
    printf("\n\t");
    contlinha = 0;
    }
    }
    }

    Me desculpem pela falta de comentario nos codigos por que as linhas tão quebrando quando eu tento comentar aqui e fica estranho, então eu removi. Então tentem entender esse codigo, e se alguem tiver uma solução melhor posta aqui... eu achei que essa ficou um pouco confusa.
    O cont1 é o contador que varre todos os numeros entre A e B e o cont2 varre todos os numeros maiores que 1 e menores que cont1, sendo feito o teste de cont1%cont2. Caso cont2 divida cont1 o verificador passa a ser zero e o cont1 não é printado na tela. Caso o cont2 não divida o cont1 atual nenhuma vez, o verificador permanece 1 e o numero primo (atual cont 1) é impresso na tela.

    ResponderExcluir
  8. minha resposta do desafio 2 se alguem estiver travado (nao se esqueçam do include):


    int menor(int a, int b);
    int maior(int a, int b);
    int MDC(int a,int b,int cont,int temp);

    int main(void)
    {

    int num1, num2, cont, mdc, temp;

    printf("\tPrograma em C que determina o M.D.C entre dois numeros.\n\n");
    printf("Insira dois numeros inteiros: ");
    scanf("%d",&num1);
    scanf(" %d",&num2);

    mdc = MDC(num1,num2,cont,temp);

    printf("\n");

    printf("O maximo divisor comum entre %d e %d e igual a %d\n\n",num1,num2,mdc);
    }

    int menor(int a, int b)
    {
    if(a<=b)
    return a;
    else
    return b;
    }

    int maior(int a, int b)
    {
    if(a>=b)
    return a;
    else
    return b;
    }

    int MDC(int a,int b,int cont,int temp)
    {
    temp = a;
    a = menor(a,b);
    b = maior(temp,b);

    cont = a;

    while(b%cont != 0 || a%cont != 0)
    {
    cont--;
    }
    return cont;
    }

    ResponderExcluir
  9. Salve galera aqui esta resposta da questão 10 nao consegui fazer usando o SWITCH.
    Se alguém tiver posta ai

    #include
    #include
    int main ()
    {
    int m,f,c;
    printf("PROGRAMA QUE TRANSFORMA TEMPERATURAS\n\nDigite o tipo de transformacao:\n\n");
    printf("1- Celsius para Fahrenheit\n");
    printf("2- Fahrenheit para Celsius\nOpcao: ");
    scanf("%d",&m);
    if(m==1)
    {
    printf("Digite o valor em graus Celsius: ");
    scanf("%d",&c);
    f=c*2+32;
    printf("%d graus celsius sao aproximadamente %d graus Fahrenheit\n\n",c,f);
    }
    if(m==2)
    {
    printf("Digite o valor em graus Fahrenheit: ");
    scanf("%d",&f);
    c=f-32/2;
    printf("%d graus Fahrenheit sao aproximadamente %d graus Celsius\n\n",f,c);
    }
    if((m!=1)&&(m!=2))
    {
    printf("Esta opcao nao existe, digite outra.\n\n");
    }

    system ("PAUSE");
    return 0;
    }

    ResponderExcluir
  10. 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

    ResponderExcluir
  11. 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;

    }}

    }

    ResponderExcluir
  12. /* Tentativa p/ ex 11 */

    #include
    #include


    int n1,n2,n3;
    int maior1,maior2,newMedia;
    newMedia = 0;
    int mediaInicial();
    int mediaAltas();
    int maiorValor();
    int menorValor();


    int main() {


    printf("Digite a nota 1: \n");
    scanf("%d",&n1);
    printf("Digite a nota 2: \n");
    scanf("%d",&n2);
    printf("Digite a nota 3: \n");
    scanf("%d",&n3);
    printf("A media geral e de: %d\n",mediaInicial());
    printf("A media das maiores notas e de: %d\n",mediaAltas(n1,n2,n3));
    printf("O maior valor e de : %d\n",maiorValor());
    printf("O menor valor e de : %d\n",menorValor());

    system("pause");
    return 0;
    }
    int mediaInicial() {
    int media;
    media = (n1+n2+n3)/3;
    return media;
    }
    int mediaAltas(nota1,nota2,nota3) {

    maior1 = 0;
    maior2 = 0;

    if (nota1 > nota2 && nota1 > nota3) {
    maior1 = nota1;
    } else if ( nota2 > nota1 && nota2 > nota3) {
    maior1 = nota2;
    } else if ( nota3 > nota1 && nota3 > nota2) {
    maior1 = nota3;
    }

    if (nota1 != maior1) {
    if (nota1 > nota2 || nota1 > nota3) {
    maior2 = nota1;
    }
    } else if (nota2 != maior1) {
    if ( nota2 > nota3 || nota2 > nota1) {
    maior2 = nota2;
    }
    } else if (nota3 != maior1) {
    if ( nota3 > nota2 || nota3 > nota1) {
    maior2 = nota3;
    }
    }
    newMedia = (maior1+maior2)/2;
    return newMedia;
    }

    int maiorValor() {
    return maior1;
    }

    int menorValor() {
    if (n1 < n2 && n1 < n3) {
    return n1;
    } else if ( n2 < n1 && n2 < n3) {
    return n2;
    } else if ( n3 < n1 && n3 < n2) {
    return n3;
    }
    }


    ResponderExcluir
  13. Resposta desafio 3:

    #include
    #include

    int main()
    {
    int i,j,k;
    printf("Numero: \n");
    i=0;
    for(i=0;i<1000;i++)
    {
    k=0;
    for (j = 1; j<i; j++)
    {
    if((i % j) == 0 )
    {
    k=j+k;
    if(k == i)
    {
    printf("%d\n",i);
    }
    }
    }

    }
    return 0;
    }

    ResponderExcluir
  14. Segue a resposta do desafio 1:
    #include
    #include
    int primos(){
    int i,j,k;
    for(i=0;i<1000;i++)
    {

    k=0;
    for (j = 1; j<=i; j++)
    {
    if((i % j) == 0 )
    {
    k=j+k;
    if(k == i+1)
    {
    printf("%d\n",i);
    }
    }
    }
    }
    }
    int main()
    {
    int i,j,k;
    i=0;

    primos();

    return 0;
    }

    ResponderExcluir

  15. Segue o código do desafio 2:

    #include
    #include
    int primos(int n1, int n2){
    int k,j;
    k=0;
    for (j = 1; j<=n1; j++)
    {
    if((n1 % j) == 0 &((n2 % j) == 0) )
    {
    k=j;
    }

    }
    printf("%d",k);
    }


    int main()
    {
    int a1,a2;
    printf("digite o primeiro numero\n");
    scanf("%d",&a1);
    printf("digite o segundo numero\n");
    scanf("%d",&a2);
    printf("O 'MDC' dos dois numeros:\n");
    primos(a1,a2);
    return 0;
    }

    ResponderExcluir
  16. A minha resolução ao desafio 4. Não está optimizado mas funciona!
    #include


    void main(){

    int i,numero,resto=0,soma=0,aux,dez=1;

    printf("Introduza um valor\n");
    scanf("%d",&numero);

    aux=numero;

    for(i=0;aux>0;i++){
    aux/=10;
    dez*=10;
    }
    dez/=10;
    do{ numero=123 dez=100

    resto=numero%10; resto=3----2--- 1
    soma+=resto*dez; 321+=1*1-
    numero/=10; numero=12--
    dez/=10; dez=10-----

    }while(numero>0);

    printf("%d",soma);

    }

    ResponderExcluir
  17. #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);
    }

    ResponderExcluir
  18. //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);
    }

    ResponderExcluir
  19. //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");
    }

    ResponderExcluir
  20. //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' );

    }

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.