/* * a4_p1: Faz pequenas operacoes aritmeticas * * Input: Uma operacao e dois operandos * Output: Resultado da operacao */ #include<stdio.h> main() { char operacao; double op1, op2; printf("Qual a operacao (+ - * /)? "); scanf("%c", &operacao); printf("Quais os dois operandos? "); scanf("%lf%lf", &op1, &op2); switch (operacao) { case '+': /* adicao */ printf("%lf + %lf = %lf\n", op1, op2, op1+op2); break; case '-': /* subtraccao */ printf("%lf - %lf = %lf\n", op1, op2, op1-op2); break; case '*': /* multiplicacao */ printf("%lf * %lf = %lf\n", op1, op2, op1*op2); break; case '/': /* divisao */ printf("%lf / %lf = %lf\n", op1, op2, op1/op2); break; } }
/* * a4_p2: Faz pequenas operacoes aritmeticas * (com base em a4_p1, mas, evita divisao por zero) * Input: Uma operacao e dois operandos * Output: Resultado da operacao */ #include<stdio.h> main() { char operacao; double op1, op2; printf("Qual a operacao (+ - * /)? "); scanf("%c", &operacao); printf("Quais os dois operandos? "); scanf("%lf%lf", &op1, &op2); switch (operacao) { case '+': /* adicao */ printf("%lf + %lf = %lf\n", op1, op2, op1+op2); break; case '-': /* subtraccao */ printf("%lf - %lf = %lf\n", op1, op2, op1-op2); break; case '*': /* multiplicacao */ printf("%lf * %lf = %lf\n", op1, op2, op1*op2); break; case '/': /* divisao */ if (op2 == 0) printf("Operacao invalida\n"); else printf("%lf / %lf = %lf\n", op1, op2, op1/op2); break; } }
/* * a4_p3: Da um parecer qualitativo * a uma classificacao numerica * Input: Nota em valores (numero inteiro de 0 a 20) * Output: Parecer qualitativo * (Mau, Medíocre, Suficiente, Bom, Muito Bom) */ #include <stdio.h> main() { int nota; printf("Introduz a classificacao: "); scanf("%d", ¬a); switch(nota) { case 0: case 1: case 2: case 3: case 4: printf("Mau\n"); break; case 5: case 6: case 7: case 8: case 9: printf("Mediocre\n"); break; case 10: case 11: case 12: case 13: printf("Suficiente\n"); break; case 14: case 15: case 16: case 17: printf("Bom\n"); break; case 18: case 19: case 20: printf("Muito Bom\n"); break; } }
Obs: Claro que este programa poderia ter sido feito com instruções if-else. Mas foi feito com a instrução switch-case para perceberes melhor o seu modo de funcionamento. O que aconteceria se não tivesses usado os breaks e introduzisses uma classificação, p/ exemplo, de apenas 3 valores? Pensa no assunto.
/* * a4_p4: UAlg 10x * * Input: * Output: Escreve a mesma frase 10 vezes */ #include <stdio.h> main() { int n; /* contador para o numero de vezes */ n = 1; while (n <= 10) { printf("Universidade do Algarve\n"); n = n + 1; } }
/* * a4_p5: Grande contador * * Input: * Output: Escreve no ecra os numeros de 1 a 10000 */ #include <stdio.h> main() { int n; /* contador */ n = 1; while (n <= 10000) { printf("%05d\n", n); n = n + 1; } }
Obs: Repara no modo como foi formatado o output. Na instrução printf, em vez do habitual %d aparece %05d. Desta forma os números que mandamos escrever no ecrã surgem alinhados à direita num campo de 5 dígitos preenchido com zeros à esquerda. Se puséssemos apenas %5d acontecia o mesmo mas sem o preenchimento com zeros à esquerda.
Experimenta redireccionar o output para um ficheiro de texto para que possas ver bem as diferenças na forma de apresentar os primeiros números. Para isso, ao executares o programa, deverás fazer o que se chama redireccionamento de saída. Se o programa executável se chamar "a4_p5" e quiseres criar um ficheiro chamado "numeros.txt" faz assim:
a4_p5 > numeros.txt
Agora vê o conteúdo de numeros.txt
/* * a4_p6: Tabuada * * Input: Numero inteiro (o multiplicando) * Output: Tabuada desse numero */ #include <stdio.h> main() { int a; /* multiplicando */ int b; /* multiplicador */ printf("Introduza um numero: "); scanf("%d", &a); b = 1; while (b <= 10) { printf("%d x %d = %d\n", a, b, a*b); b = b + 1; } }
Obs: Como poderias formatar a apresentação dos números no ecrã de modo a surgirem todos alinhadinhos à direita? (Lê as observações do programa 5)
/* * a4_p7: Conta quantos digitos tem um numero inteiro * * Input: Um valor numerico inteiro * Output: Numero de digitos que o constitui */ <pre> #include <stdio.h> main() { int n_inicial; /* numero a avaliar */ int n_digitos; /* contador de digitos */ int n; /* variavel de manobra p/ nao perder n_inicial*/ printf("Introduza um numero inteiro: "); scanf("%d",&n_inicial); if( n_inicial == 0 ) n_digitos = 1; else { if( n_inicial < 0 ) n = - n_inicial; else n = n_inicial; n_digitos = 0; while (n != 0) { n = n / 10; n_digitos = n_digitos + 1; } } printf("%d tem %d digitos", n_inicial, n_digitos); }
/* * a4_p8: Conta zeros e uns de um valor binario * * Input: Um valor numerico binario * Output: Numero de zeros e de uns que ele possui */ #include <stdio.h> main() { unsigned long n_binario; /* valor a avaliar */ int uns; /* contador de 1s */ int zeros; /* contador de 0s */ int resto; /* resto da divisao */ int i; /* contador p/ o ciclo */ printf("Introduza um valor binario de oito digitos (so zeros e uns): "); scanf("%ld", &n_binario); zeros = 0; uns = 0; i = 8; while ( i > 0 ) { resto = n_binario % 10; if (resto == 0) zeros = zeros + 1; if (resto == 1) uns = uns + 1; n_binario = n_binario / 10; i = i - 1; } printf("Tem %d zeros e %d uns.\n", zeros, uns); }
Obs: Podes melhorar este programa para, no caso de o utilizador introduzir um valor não binário, apresentar uma mensagem a indicar "Numero inválido".