Exercícios com função em C

Disponibilizo 3 exercícios com resolução em linguagem C e em vídeo. As soluções envolvem a utilização de função, onde são explorados os conceitos de passagem por valor e referência, bem como a utilização de vetores e matrizes.

Escreva um programa em C que gere uma matriz B a partir de manipulações em uma matriz A de dimensão 6×6. Escreva uma função que receba por parâmetro a matriz A e retorne a matriz B, onde cada linha j de B é a linha j de A multiplicada pelo elemento da diagonal principal da linha j.

Exemplo:
A=1    5
4    8

B=1    5
32 64

Solução em C/C++

#include <stdio.h>
#include <stdlib.h>

void imprimeMat(int tam, int m[tam][tam]) {
    int i, j;
    for (i = 0; i < tam; i++) {
        for (j = 0; j < tam; j++) {
            printf("%i ", m[i][j]);
        }
        printf("\n");
    }
}

void calc(int tam, int ma[tam][tam], int mb[tam][tam]) {
    int i, j;
    for (i = 0; i < tam; i++) {
        for (j = 0; j < tam; j++) {
            mb[i][j] = ma[i][j] * ma[i][i];
        }
    }
}

int main()
{
    int A[3][3] = {2, 5, 4, 8, 5, 4, 0, 2, 5}, B[3][3];

    imprimeMat(3, A);
    calc(3, A, B);
    printf("\n");
    imprimeMat(3, B);

    return 0;
}

Vídeo da solução: https://youtu.be/-sCpva0PS8g


Escreva uma função que, dado um número real passado como parâmetro, retorne a parte inteira e a parte fracionária desse número por referência.

Solução em C/C++

#include <stdio.h>
#include <stdlib.h>

void separa(float num, int *x, float *y) {
    *x = (int)num;
    *y = num - *x;
}

int main()
{
    float num, frac;
    int inteira;

    scanf("%f", &num);

    separa(num, &inteira, &frac);

    printf("%f: %i e %f", num, inteira, frac);

    return 0;
}

Vídeo da solução: https://youtu.be/Qd3W7r18sPQ


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.

Solução em C/C++

#include <stdio.h>
#include <stdlib.h>

float media(float n1, float n2, float n3, char op) {
    if (op == 'A') {
        return (n1 + n2 + n3) / 3;
    } else if (op == 'P') {
        return (n1*5 + n2*3 + n3*2) / 10;
    }
}

int main()
{
    float nota1, nota2, nota3, calc;
    char op;

    printf("Digite a opção [A ou P]: ");
    scanf("%c", &op);
    printf("Digite as notas: \n");
    scanf("%f %f %f", &nota1, &nota2, &nota3);

    calc = media(nota1, nota2, nota3, op);

    printf("Media= %f", calc);

    return 0;
}

Vídeo da solução: https://youtu.be/AhkoXOPRh5c


Elabore uma função que receba um vetor contendo N valores e retorne por referência o maior elemento do vetor e o número de vezes que esse elemento ocorreu no vetor.

Solução em C/C++

#include <stdio.h>
#include <stdlib.h>

int maiorVet(int tam, int vet[tam]) {
    int maior = vet[0], i;
    for (i = 1; i < tam; i++) {
        if (vet[i] > maior) {
            maior = vet[i];
        }
    }
    return maior;
}

int contaValorVet(int vet[], int teste, int tam) {
    int cont=0, i;
    for (i = 0; i < tam; i++) {
        if (vet[i] == teste) {
            cont++;
        }
    }
    return cont;
}

void maiorQtdVet(int vet[], int tam, int *maior, int *cont) {
    *maior = maiorVet(tam, vet);
    *cont  = contaValorVet(vet, *maior, tam);
}

void maiorContVet(int tam, int vet[tam], int *x, int *y) {
    int i, cont;
    *x = vet[0];
    for (i = 1; i < tam; i++) {
        if (vet[i] > *x) {
            *x = vet[i];
        }
    }
    *y = contaValorVet(vet, *x, tam);
}

int main()
{
    int vet[5] = {1, 2, 8, 0, 8}, maior, i, cont;

    maiorQtdVet(vet, 5, &maior, &cont);
    printf("Maior valor %i e aparece %i vezes\n", maior, cont);

    maiorContVet(5, vet, &maior, &cont);
    printf("Maior valor %i e aparece %i vezes", maior, cont);

    return 0;
}

Vídeo da solução: https://youtu.be/pkJXwPvselI

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.