Aprenda C

  • Página Inicial
  • Contato!
  • Tudo sobre C Parte 1!
  • Tudo sobre C Parte 2!
  • Tudo sobre C Parte 3!
  • Tudo sobre C Parte 4!
  • Tudo sobre C Parte 5!
  • Tudo sobre C Parte 6!
  • Tudo sobre C Parte 7!
  • Tudo sobre C Parte 8!
  • Tudo sobre C Parte 9!
  • Tudo sobre C Parte 3

    Condicionais If, Else e Else If

    A instrução if tem por finalidade tomar uma decisão de acordo com o resultado de uma condição (teste lógico).

    Se o teste retorna verdadeiro, as instruções contidas entre as chaves serão executadas, caso contrário, nada ocorre.

    Veja um exemplo simples:

    
    float n1, n2;
    float med;
    
    printf("Digite a primeira nota: ");
    scanf("%f", &n1);
    printf("Digite a segunda nota: ");
    scanf("%f", &n2);
    med = (n1 + n2) / 2;
    
    if(med >= 7) {
        printf("\nAluno Aprovado!");
    }
    
    

    Nesse caso abaixo, além do if, temos o else. Essa instrução tem por finalidade tomar uma decisão de acordo com o resultado de uma condição (teste lógico).

    Se o teste retorna verdadeiro, as instruções codificadas entre as chaves do if serão executadas. Se o teste retorna falso, as instruções contidas entre as chaves do else serão executadas.

    Veja o código anterior com o else incluído:

    
    float n1, n2;
    float med;
    
    printf("Digite a primeira nota: ");
    scanf("%f", &n1);
    printf("Digite a segunda nota: ");
    scanf("%f", &n2);
    med = (n1 + n2) / 2;
    
    if(med >= 7) {
        printf("\nAluno Aprovado!");
    }
    else {
        printf("\nAluno Reprovado!");
    }
    
    

    Já o else if é usado quando é necessário verificar condições sucessivas onde uma ação é executada se um conjunto anterior de ações for satisfatório.

    Veja o código anterior com o else if incluído:

    
    float n1, n2;
    float med;
    
    printf("Digite a primeira nota: ");
    scanf("%f", &n1);
    printf("Digite a segunda nota: ");
    scanf("%f", &n2);
    med = (n1 + n2) / 2;
    
    if(med >= 7) {
        printf("\nAluno Aprovado!");
    }
    else {
        if(med >= 5 && med < 7) {
            printf("\nAluno em Recuperação!");
        }
        else {
            printf("\nAluno Reprovado!");
        }
    }
    
    

    Podemos simplificar o código com o else if, dessa forma:

    
    float n1, n2;
    float med;
    
    printf("Digite a primeira nota: ");
    scanf("%f", &n1);
    printf("Digite a segunda nota: ");
    scanf("%f", &n2);
    med = (n1 + n2) / 2;
    
    if(med >= 7) {
        printf("\nAluno Aprovado!");
    }
    else if(med >= 5 && med < 7) {
        printf("\nAluno em Recuperação!");
    }
    else {
        printf("\nAluno Reprovado!");
    }
    
    

    Comando Goto

    O comando goto (vai para) que direciona o ponteiro de execução do nosso programa, quando ele encontra o goto, ele vai até o label indicado em qualquer ponto do programa (criado apenas com o nome e dois pontos), e o goto apenas usará o nome do label que indicará.

    Veja um exemplo do uso do goto:

    
    float n1, n2, med;
    char opc; // Variável usada no label.
    
    inicio: // Label, indicado com dois pontos.
    
    printf("Digite a primeira nota: ");
    scanf("%f", &n1);
    
    printf("Digite a segunda nota: ");
    scanf("%f", &n2);
    
    med = (n1 + n2) / 2;
    
    if(med >= 7) {
        printf("\nAprovado!\n)";
    }
    else if(med >= 5 && med < 7) {
        printf("\nRecuperação\n");
    }
    else {
        printf("\nReprovado\n");
    }
    
    printf("\nDeseja Digitar Outras Notas? [S/N]: ");
    fflush(stdin);
    scanf("\n%c", &opc);
    
    if((char)toupper(opc) == 'S') { // Inclua ctype.h pro toupper
        system("cls"); // Adicione stdlib.h, são os comandos do terminal do sistema operacional à ser compilado.
    
        goto inicio; // Indicação do Label.
    }
    
    

    PS: Note que usamos o método toupper() para transformar a letra em maiúscula, e fazemos o mesmo com tolower() para transformar em minúscula (lembrando que em ambos os caso usamos o typecast de char e incluímos a biblioteca ctype.h).

    Condicional de Chaveamento - Switch e Case

    A declaração condicional switch (chaveamento) é usada quando é preciso realizar diferentes ações baseadas em distintas condições. Pra simplificar o código, geralmente se usa no lugar de um condicional aninhado.

    O case é o valor comparado com a expressão, se corresponder, o código associado será executado. O break garante que a estrutura seja finalizada ao encontrar uma correspondência. E o default é o bloco de códigos que será executado se nenhum caso corresponder à expressão.

    Veja um exemplo abaixo:

    
    int num;
    
    printf("Insira um número de 1 à 6: ");
    scanf("%d", &num);
    
    switch(num) {
        case 1:
            printf("Pito!\n");
            break;
        case 2:
            printf("Duque!\n");
            break;
        case 3:
            printf("Terno!\n");
            break;
        case 4:
            printf("Quadra!\n");
            break;
        case 5:
            printf("Quina!\n");
            break;
        case 6:
            printf("Sena!\n");
            break;
        default:
            printf("Opção Inválida!\n");
            break;
    }
    
    

    Estrutura de Repetição - While

    Em muitos casos é necessário repetir um trecho de programa diversas vezes. Nesse caso podemos usar um loop que efetue essa repetição de código quantas vezes forem necessários. Os loops também são chamados de laços de repetição.

    A estrutura while realiza um teste lógico no início do loop, e cada vez que o teste retorna verdadeiro, os comandos associados à ele são executados. Quando o teste retornar falso, o laço é encerrado e o processamento volta para o fluxo principal do programa.

    Veja um exemplo de uso do while:

    
    int cont = 1;
        
    while(cont <= 10) {
        printf("%d\n", cont);
        cont++;
    }
    
    

    Veja outro exemplo mais complexo:

    
    int cont;
    float not, med, tot;
    tot = 0;
    cont = 1;
    
    while(cont <= 4) {
        printf("Digite a %dª nota: ", cont);
        scanf("%f", &not);
        tot = tot + not;
        cont++;
    }
    
    med = tot / 4;
    printf("Nota média: %.2f\n", med);
    
    

    Imagine um caso do qual precisamos escrever um algoritmo que processe um conjunto de dados repetidas vezes, mas não sabemos de antemão quantas vezes o loop deve ser executado. Nesse caso, precisamos usar uma técnica para controlar o número de repetições realizadas. Para isso, usaremos uma flag, que é uma variável utilizada como "sentinela", a qual determinará quando o laço while deve ser encerrado.

    Veja um exemplo disso:

    
    int cont;
    float val, med, tot;
    tot = 0;
    cont = 0;
    
    printf("Digite um valor (-1 para encerrar): ");
    scanf("%f", &val);
    
    while(val != -1) {
        tot = tot + val;
        cont++;
        printf("Digite um valor (-1 para encerrar): ");
        scanf("%f", &val);
    }
    
    med = tot / cont;
    
    printf("\nValor médio: %.2f.\n", med);
    
    

    PS: Essa estrutura funciona também em outras linguagens que se originaram do C, como o Java, PHP e Javascript.

    Podemos utilizar também, nos laços, o break, que interrompe um laço, e o continue, que interrompe uma execução sem interromper o laço, assim:

    
    int v = 0;
    
    while(true) { // inclua stdbool.h
        v++;
        if(v == 11) {
            continue;
        }
        else if(v == 15) {
            break;
        }
        printf("Nº %d\n", v);
    }
    
    

    Estrutura de Repetição - Do While

    Outra forma de criar repetição é a do while, significando repita. Diferente do while, a do while é colocada no final, praticamente o contrário dela.

    Veja um exemplo do uso dela:

    
    int cont;
    float not, med, tot;
    tot = 0;
    cont = 1;
    
    do {
        printf("Digite a %dª nota: ", cont);
        scanf("%f", &not);
        tot = tot + not;
        cont++;
    }
    while(cont <= 4);
    
    med = tot / 4;
    printf("Nota média: %.2f\n", med);
    
    

    PS: Pode ver que, por esse fator, o comando do será executado, e só depois ele testará, independente do valor recebido. O que garante que pelo menos uma vez, o bloco de comandos é executado.

    Estrutura de Repetição - For

    O for permite construir estruturas de loop para casos que se conhece de antemão o número de repetições que devem ser realizadas (por exemplo, se soubermos de antemão que o laço deve se repetir 10 vezes, podemos usar essa estrutura).

    Veja um exemplo abaixo:

    
    int cont;
    
    for(cont = 1; cont <= 10; cont++) {
        printf("%d\n", cont);
    }
    
    

    Veja outro exemplo:

    
    int cont;
    float not, med, tot;
    tot = 0;
    
    for(cont = 1; cont <= 4; cont++) {
        printf("Digite a %dª nota: ", cont);
        scanf("%f", &not);
        tot = tot + not;
    }
    
    med = tot / 4;
    printf("Nota média: %.2f\n", med);
    
    

    Veja outro exemplo, no qual o usuário deverá finalizar o programa após teclar uma letra:

    
    int cont;
    char cod;
    float not, med, tot;
    tot = 0;
    cod = 'S';
    
    while((char)toupper(cod) == 'S') { // importe ctype.h
        system("cls");
    
        for(cont = 1; cont <= 4; cont++) {
            printf("Digite a %dª nota: ", cont);
            scanf("%f", &not);
            tot = tot + not;
        }
        med = tot / 4;
        printf("Nota média: %.2f\n", med);
        tot = 0;
        not = 0;
        printf("Deseja calcular outra média? [S/N]");
        fflush(stdin);
        scanf("\n%c", &cod);
    }
    
    

    PS: Como estamos usando máscaras para char, precisamos usar aspas simples nos valores.