Exercícios Avançados de Programação em C - Nível Expert

Questão 1

Crie um programa que use ponteiros para trocar o valor de duas variáveis inteiras dentro de uma função auxiliar.

#include <stdio.h> void trocar(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 10, y = 20; printf("Antes: x = %d, y = %d\n", x, y); trocar(&x, &y); printf("Depois: x = %d, y = %d\n", x, y); return 0; }

Questão 2

Escreva um programa que aloque dinamicamente memória para um vetor de inteiros de tamanho N (digitado pelo usuário) usando malloc, preencha-o e depois libere a memória com free.

#include <stdio.h> #include <stdlib.h> int main() { int n, *vetor; printf("Digite o tamanho do vetor: "); scanf("%d", &n); vetor = (int *) malloc(n * sizeof(int)); if (vetor == NULL) { printf("Erro de alocação de memória!\n"); return 1; } for (int i = 0; i < n; i++) { vetor[i] = (i + 1) * 5; printf("Posição [%d]: %d\n", i, vetor[i]); } free(vetor); return 0; }

Questão 3

Crie uma função recursiva que calcule e retorne o fatorial de um número inteiro fornecido pelo usuário.

#include <stdio.h> long long fatorial(int n) { if (n <= 1) return 1; return n * fatorial(n - 1); } int main() { int num; printf("Digite um número inteiro positivo: "); scanf("%d", &num); printf("O fatorial de %d é %lld\n", num, fatorial(num)); return 0; }

Questão 4

Desenvolva um programa que defina uma struct Cadastro contendo nome, idade e nota de um aluno. O programa deve ler os dados de 3 alunos e exibir quem obteve a maior nota.

#include <stdio.h> struct Cadastro { char nome[50]; int idade; float nota; }; int main() { struct Cadastro alunos[3]; int indiceMaior = 0; for (int i = 0; i < 3; i++) { printf("Nome do aluno %d: ", i + 1); scanf("%s", alunos[i].nome); printf("Idade: "); scanf("%d", &alunos[i].idade); printf("Nota: "); scanf("%f", &alunos[i].nota); if (alunos[i].nota > alunos[indiceMaior].nota) { indiceMaior = i; } } printf("\nAluno com maior nota: %s (Nota: %.2f)\n", alunos[indiceMaior].nome, alunos[indiceMaior].nota); return 0; }

Questão 5

Escreva um programa em C que crie e abra um arquivo de texto chamado dados.txt, escreva a frase "Desenvolvimento Web com C" dentro dele e feche o arquivo.

#include <stdio.h> int main() { FILE *arquivo = fopen("dados.txt", "w"); if (arquivo == NULL) { printf("Erro ao abrir ou criar o arquivo!\n"); return 1; } fprintf(arquivo, "Desenvolvimento Web com C\n"); fclose(arquivo); printf("Arquivo gravado com sucesso!\n"); return 0; }

Questão 6

Implemente o algoritmo de ordenação Bubble Sort para organizar um vetor de 6 elementos inteiros em ordem crescente.

#include <stdio.h> int main() { int v[6] = {45, 12, 89, 5, 23, 1}; int temp; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5 - i; j++) { if (v[j] > v[j+1]) { temp = v[j]; v[j] = v[j+1]; v[j+1] = temp; } } } printf("Vetor ordenado: "); for (int i = 0; i < 6; i++) { printf("%d ", v[i]); } printf("\n"); return 0; }

Questão 7

Crie um programa que faça a leitura de uma matriz 3x3 e calcule a soma de todos os elementos que estão localizados acima da diagonal principal.

#include <stdio.h> int main() { int m[3][3], soma = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("Elemento [%d][%d]: ", i, j); scanf("%d", &m[i][j]); if (j > i) { soma += m[i][j]; } } } printf("Soma acima da diagonal principal: %d\n", soma); return 0; }

Questão 8

Escreva uma função recursiva para calcular o N-ésimo termo da famosa Sequência de Fibonacci.

#include <stdio.h> int fibonacci(int n) { if (n == 0) return 0; if (n == 1) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } int main() { int termos; printf("Digite o número de termos de Fibonacci: "); scanf("%d", &termos); printf("O termo correspondente é: %d\n", fibonacci(termos)); return 0; }

Questão 9

Escreva um programa que utilize uma função para determinar se um número passado por referência através de ponteiro é Primo ou não.

#include <stdio.h> int verificarPrimo(int *n) { if (*n <= 1) return 0; for (int i = 2; i * i <= *n; i++) { if (*n % i == 0) return 0; } return 1; } int main() { int num; printf("Digite um número: "); scanf("%d", &num); if (verificarPrimo(&num)) printf("%d é primo.\n", num); else printf("%d não é primo.\n", num); return 0; }

Questão 10

Construa um programa que utilize os operadores de deslocamento de bits (bitwises << e >>) para multiplicar e dividir um número inteiro por 2 respectivamente.

#include <stdio.h> int main() { int num; printf("Digite um valor inteiro: "); scanf("%d", &num); printf("Multiplicado por 2 (<< 1): %d\n", num << 1); printf("Dividido por 2 (>> 1): %d\n", num >> 1); return 0; }
← Voltar à página inicial