Elaborar um programa em C que leia uma frase e armazene-a em um vetor de caracteres (cuidado com a leitura!). Depois crie uma função para contar o número de espaços em branco na frase, outra para contar o número de vogais, e outra para contar o número de consoantes.

Passo 1

Beleza! O enunciado pede pra criar um programa em C que:
  1. Leia uma frase com espaços (por isso cuidado na leitura);
  2. Armazene essa frase num vetor de char;
  3. Tenha três funções separadas:
    • Uma para contar espaços em branco;
    • Uma para contar vogais;
    • Uma para contar consoantes.
Conteúdo que vamos usar:
  • Leitura de string com fgets (pra ler tudo, inclusive espaços).
  • Vetores de char e terminação com '\0'.
  • for para percorrer a string caractere a caractere.
  • Condicionais (if) para testar espaços, vogais e consoantes.
  • Biblioteca <ctype.h> (pra usar tolower e isalpha).
  • Criar e chamar funções em C.

Passo 2

Primeiro a leitura da frase. Em C, se você usar scanf("%s", ...) ele para no primeiro espaço, então a gente usa:
fgets(frase, MAX, stdin);
Isso lê até MAX-1 caracteres ou até apertar Enter.
Depois a gente remove o '\n' que o fgets coloca no final:
frase[strcspn(frase, "\n")] = '\0';
A função strcspn(frase, "\n") retorna o índice do '\n' na string, e a gente troca por '\0'.

Passo 3

Agora vamos contar os espaços. A ideia é bem simples:
  • Percorro a string do começo ao '\0'.
  • Se frase[i] == ' ', incremento meu contador.
    Em código numa função:
int contarEspacos(const char *s) {
    int cont = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        if (s[i] == ' ')
            cont++;
    }
    return cont;
}

Passo 4

Contar vogais. Vou usar tolower pra “normalizar” tudo pra minúsculo e só testar a, e, i, o, u.
int contarVogais(const char *s) {
    int cont = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        char c = tolower(s[i]);
        if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u')
            cont++;
    }
    return cont;
}

Passo 5

Contar consoantes. Aqui a ideia é:
  • Primeiro testar se é letra (isalpha).
  • Depois garantir que não é uma das vogais.
int contarConsoantes(const char *s) {
    int cont = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        char c = tolower(s[i]);
        if (isalpha(c) &&
           !(c=='a' || c=='e' || c=='i' || c=='o' || c=='u'))
            cont++;
    }
    return cont;
}

Passo 6

Finalmente, no main, a gente:
  1. Declara o vetor;
  2. Lê a frase com fgets e tira o \n;
  3. Chama cada função;
  4. Imprime o resultado.

Resposta

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAX 100

int contarEspacos(const char *s) {
    int cont = 0;
    for (int i = 0; s[i] != '\0'; i++)
        if (s[i] == ' ')
            cont++;
    return cont;
}

int contarVogais(const char *s) {
    int cont = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        char c = tolower(s[i]);
        if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u')
            cont++;
    }
    return cont;
}

int contarConsoantes(const char *s) {
    int cont = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        char c = tolower(s[i]);
        if (isalpha(c) &&
           !(c=='a' || c=='e' || c=='i' || c=='o' || c=='u'))
            cont++;
    }
    return cont;
}

int main() {
    char frase[MAX];
    printf("Digite uma frase: ");
    fgets(frase, MAX, stdin);
    frase[strcspn(frase, "\n")] = '\0';

    printf("Espaços em branco: %d\n", contarEspacos(frase));
    printf("Vogais: %d\n", contarVogais(frase));
    printf("Consoantes: %d\n", contarConsoantes(frase));

    return 0;
}

Exercícios relacionados