50 Questões - Resoluções em C

Arquivo original: questoes.c Links: Q1.pdf


1. Maior elemento de uma sequência

Lê uma sequência de números terminada em 0 e devolve o maior.

int calc_maior2(){
    int atual, maior;
    printf("lista os numeros (avisas que acabaste usando o número 0)\n");
    scanf("%d", &atual);
    maior = atual;
    while (atual != 0){
        if (atual > maior) maior = atual;
        scanf("%d", &atual);
    }
    return maior;
}

2. Média de uma sequência

Lê uma sequência terminada em 0 e calcula a média.

int average2 () {
    int numero; 
    int soma = 0; 
    int contador = 0; 
 
    printf("oh men lista os numeros (termina em 0)");
    scanf("%d", &numero);
    while (numero != 0){
        soma += numero;
        contador++;
        scanf("%d", &numero);
    }
    if (contador == 0) {
        return 0;
    }
    return soma / contador;
}

3. Segundo maior elemento

Encontra o segundo maior elemento de uma sequência terminada em 0.

int segundo_maior2() {
    int numero;
    int maior = 0; 
    int seg_maior = 0;
    printf("Escribe los números (termina con 0):\n");
    scanf("%d", &numero);
    while (numero != 0) {
        if (numero > maior) {
            seg_maior = maior; 
            maior = numero;   
        }
        else if (numero > seg_maior) {
            seg_maior = numero;
        }
        scanf("%d", &numero);
    }
    return seg_maior;
}

4. Bits com valor 1 (bitsUm)

Calcula o número de bits iguais a 1 na representação binária de n.

int bitsUm (unsigned int n){
    int contador = 0;
    while (n > 0){
        if (n % 2 == 1){
            contador++;
        }
        n = n / 2;
    }
    return contador;
}

5. Zeros no final (trailingZ)

Calcula o número de bits a 0 no final da representação binária de n.

int trailingZ (unsigned int n){
    if (n == 0) return 32; 
    int contador = 0; 
    while (n % 2 == 0){
        contador++;
        n = n / 2;
    }
    return contador;
}

6. Número de dígitos (qDig)

Calcula o número de dígitos necessários para escrever o número n em base decimal.

int qDig (unsigned int n){
    int digitos = 0; 
    if (n == 0) return 1;
    while (n > 0){
        digitos++;
        n = n / 10;
    }
    return digitos;
}

7. Concatenar strings (strcat)

Anexa a string s2 ao final da string s1.

char *strcat (char s1[], char s2[]){
    int i, j;
    for (i = 0; s1[i] != '\0'; i ++);
    for (j = 0; s2[j] != '\0'; j ++)
        s1[i++] = s2[j]; 
    s1[i] = '\0';
    return s1;
}

8. Copiar strings (strcpy)

Copia a string source para dest.

char *strcpy (char *dest, char source[]){
    int i;
    for (i = 0; source[i] != '\0'; i ++){
        dest[i] = source[i];
    }
    dest[i] = '\0';
    return dest;
}

9. Comparar strings (strcmp)

Compara duas strings lexicograficamente.

int strcmp (char s1[], char s2[]){
    int i = 0;
    while (s1[i] == s2[i] && s1[i] != '\0')
        i ++;
    return (s1[i] - s2[i]);
}

10. Procurar substring (strstr)

Procura a primeira ocorrência da string s2 na string s1.

char *strstr (char s1[], char s2[]){
    int i = 0, j = 0;
    for (i = 0; s1[i] != '\0'; i ++){
        j = 0;
        while (s1[i + j] == s2[j] && s2[j] != '\0')
            j ++;
        if (s2[j] == '\0')
            return s1 + i;
    }
    return NULL;
}

11. Inverter string (strrev)

Inverte a string s in-place.

void strrev (char s[]){
    int i = 0, inicio = 0, fim;
    while (s[i] != '\0')
        i ++;
    fim = i - 1;
    while (inicio < fim){
        char temp;
        temp = s[inicio];
        s[inicio] = s[fim];
        s[fim] = temp;
        inicio ++;
        fim --;
    }
}

12. Remover vogais (strnoV)

Remove todas as vogais da string s. Inclui função auxiliar eVogal.

int eVogal (char c){
    if (c >= 'a' && c <= 'z') 
        c = c + 'A' - 'a';
    return (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');
}
 
void strnoV (char s[]){
    int i, j = 0;
    for (i = 0; s[i] != '\0'; i ++)
        if (! eVogal(s[i])) s[j++] = s[i];
    s[j] = '\0';
}

13. Truncar palavras (truncW)

Trunca todas as palavras de t para terem no máximo n caracteres.

void truncW (char t[], int n){
    int i, j = 0, contador = 0;
    for (i = 0; t[i] != '\0'; i ++){
        if (t[i] == ' '){
            t[j++] = t[i];
            contador = 0;
        } else {
            if (contador < n) {
                t[j++] = t[i]; 
                contador ++;
            }
        }
    }
    t[j] = '\0';
}

14. Caractere mais frequente (charMaisFreq)

(A implementar…)

char charMaisFreq (char s[]){
 
}