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", ¬a1, ¬a2, ¬a3);
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