Simule a execução do programa abaixo, destacando a sua saída. A saída do programa consiste de tudo que resulta dos comandos printf.
#include <stdio.h> int main() { int a, b, c, d, nusp; printf("Entre com o seu no. USP: "); scanf("%d", &nusp); /* Use aqui o seu numero USP */ printf("nusp = %d\n", nusp); d = nusp % 10; a = 15; b = 10 * (4 + 3 * (d % 2)); c = (5 / 2) * (9 - nusp % 5); printf("a=%d b=%d c=%d \n", a, b, c); if (c > a && c <= b) printf("Perfeito.\n"); else printf("Otimo.\n"); while (a % b > 0) { c = a; a = b; b = c % b; printf("a=%d b=%d c=%d \n", a, b, c); } return 0; }
SOLUÇÃO.
A resposta depende, essencialmente, do último dígito do número USP. Teste com o seu no. USP e compare a resposta.
(0) último dígito do número USP == 0 Entre com o seu no. USP: 1230 nusp = 1230 a=15 b=40 c=18 Perfeito. a=40 b=15 c=15 a=15 b=10 c=40 a=10 b=5 c=15 (1) último dígito do número USP == 1 Entre com o seu no. USP: 1231 nusp = 1231 a=15 b=70 c=16 Perfeito. a=70 b=15 c=15 a=15 b=10 c=70 a=10 b=5 c=15 (2) último dígito do número USP == 2 Entre com o seu no. USP: 1232 nusp = 1232 a=15 b=40 c=14 Otimo. a=40 b=15 c=15 a=15 b=10 c=40 a=10 b=5 c=15 (3) último dígito do número USP == 3 Entre com o seu no. USP: 1233 nusp = 1233 a=15 b=70 c=12 Otimo. a=70 b=15 c=15 a=15 b=10 c=70 a=10 b=5 c=15 (4) último dígito do número USP == 4 Entre com o seu no. USP: 1234 nusp = 1234 a=15 b=40 c=10 Otimo. a=40 b=15 c=15 a=15 b=10 c=40 a=10 b=5 c=15 (5) último dígito do número USP == 5 Entre com o seu no. USP: 1235 nusp = 1235 a=15 b=70 c=18 Perfeito. a=70 b=15 c=15 a=15 b=10 c=70 a=10 b=5 c=15 (6) último dígito do número USP == 6 Entre com o seu no. USP: 1236 nusp = 1236 a=15 b=40 c=16 Perfeito. a=40 b=15 c=15 a=15 b=10 c=40 a=10 b=5 c=15 (7) último dígito do número USP == 7 Entre com o seu no. USP: 1237 nusp = 1237 a=15 b=70 c=14 Otimo. a=70 b=15 c=15 a=15 b=10 c=70 a=10 b=5 c=15 (8) último dígito do número USP == 8 Entre com o seu no. USP: 1238 nusp = 1238 a=15 b=40 c=12 Otimo. a=40 b=15 c=15 a=15 b=10 c=40 a=10 b=5 c=15 (9) último dígito do número USP == 9 Entre com o seu no. USP: 1239 nusp = 1239 a=15 b=70 c=10 Otimo. a=70 b=15 c=15 a=15 b=10 c=70 a=10 b=5 c=15
Os trechos de programa abaixo pretendem determinar a raiz quadrada inteira de um inteiro n > 0, que é definido como o maior inteiro r tal que r2 <= n. Exemplo: raiz quadrada inteira de 10 é 3, de 21 é 4 e de 25 é 5.
Considere que todas as variáveis que aparecem no programa estão declaradas como int. Indique se o trecho está correto (C) ou incorreto (I). Para os trechos incorretos, apresente um valor de n para o qual a saída do programa (o printf) é incorreta. Nesta questão, para cada resposta errada será descontado 0.25 pontos de uma resposta correta. Respostas em branco não serão consideradas erradas.
scanf("%d", &n); r = 0; while (r*r < n) r++; printf("A raiz inteira de %d e': %d\n", n, r); C [___] I [_X_] -> Saída: A raiz inteira de _10_ e': _4_Comentário: para n==10 o resultado é r==4, deveria ser r==3. Funciona para quadrados perfeitos (números da forma k2 para algum k), por exemplo, para n==9 o trecho determina que r==3.
scanf("%d", &n); menor = 1; for (r = 0; menor == 1; r++) if (r*r > n) menor = 0; printf("A raiz inteira de %d e': %d\n", n, r-2); C [_X_] I [___] -> Saída: A raiz inteira de ___ e': ___Comentário: note que quando o comando for pára logo após incrementar r (através do comando r++) e que nesse momento vale que (r-1)*(r-1) > n e (r-2)*(r-2) <= n. Note ainda que o trecho imprime, corretamente, r-2.
scanf("%d", &n); r = 0; menor = 1; while (menor == 1) { if (r*r >= n) menor = 0; r++; } printf("A raiz inteira de %d e': %d\n", n, r-1); C [___] I [_X_] -> Saída: A raiz inteira de _10_ e': _4_Comentário: para n==10 o trecho acima imprime 4, deveria ser 3. Funciona para quadrados perfeitos (números da forma k2 para algum k), por exemplo, para n==9 o trecho determina que r==3.
scanf("%d", &n); r = n; while (r*r > n) r++; printf("A raiz inteira de %d e': %d\n", n, r); C [___] I [_X_] -> Saída: A raiz inteira de ___ e': ___Comentário: incorreto, looping infinito.
scanf("%d", &n); for (r = n; r*r > n; r--); printf("A raiz inteira de %d e': %d\n", n, r); C [_X_] I [___] -> Saída: A raiz inteira de ___ e': ___Comentário: note que quando o comando for pára vale que r*r <= n e (r+1)*(r+1) > n. Logo, r é a raiz quadrada inteira de n.
Escreva um programa em C que, dado um inteiro n > 0 e uma seqüência de n números inteiros, imprime o maior e o menor elemento da seqüência.
Exemplos:Para n == 4 e a seqüência
12 3 7 49o seu programa de imprimr
Maior = 49 e Menor = 3Para n == 4 e a seqüência
-12 -3 -7 -49o seu programa deve imprimirMaior = -3 e Menor = -49Para n = 1 e a seqüência
5o seu programa deve imprimirMaior = 5 e Menor = 5
SOLUÇÃO.
/* * VERSÃO 1: usa o comando while. */ #include <stdio.h> int main() { int n; /* numero de elementos a serem lidos */ int numero; /* usado para ler os elementos da sequencia */ int maior; /* maior elemento lido */ int menor; /* menor elemento lido */ printf("Digite o tamanho da sequencia: "); scanf("%d", &n); printf("Digite um elemento da sequencia: "); scanf("%d", &menor); n--; maior = menor; while (n > 0) { printf("Digite um elemento da sequencia: "); scanf("%d", &numero); n--; if (numero < menor) { menor = numero; } if (numero > maior) { maior = numero; } } printf("Maior = %d e Menor = %d\n.", maior, menor); return 0; } /* * VERSÃO 2: identica a versão 1, usa o comando while e if-else. */ #include <stdio.h> int main() { int n; /* numero de elementos a serem lidos */ int numero; /* usado para ler os elementos da sequencia */ int maior; /* maior elemento lido */ int menor; /* menor elemento lido */ printf("Digite o tamanho da sequencia: "); scanf("%d", &n); printf("Digite um elemento da sequencia: "); scanf("%d", &menor); n--; maior = menor; while (n > 0) { printf("Digite um elemento da sequencia: "); scanf("%d", &numero); n--; if (numero < menor) { menor = numero; } else if (numero > maior) { maior = numero; } } printf("Maior = %d e Menor = %d\n.", maior, menor); return 0; } /* * VERSÃO 3: Usa o comando for e um contador de numeros lidos. */ #include <stdio.h> int main() { int n; /* numero de elementos na sequencia */ int i; /* numero de elementos lidos */ int numero; /* usado para ler os elementos da sequencia */ int maior; /* maior elemento lido */ int menor; /* menor elemento lido */ printf("Digite o tamanho da sequencia: "); scanf("%d", &n); printf("Digite o 1o. elemento da sequencia: "); scanf("%d", &menor); maior = menor; for (i = 1; i < n; i++) { printf("Digite o %do. elemento da sequencia: ", i+1); scanf("%d", &numero); if (numero < menor) menor = numero; if (numero > maior) maior = numero; } printf("Maior = %d e Menor = %d\n.", maior, menor); return 0; } /* * VERSÃO 4: identica a versao 3, usa o comando for e if-else */ #include <stdio.h> int main() { int n; /* numero de elementos na sequencia */ int i; /* numero de elementos lidos */ int numero; /* usado para ler os elementos da sequencia */ int maior; /* maior elemento lido */ int menor; /* menor elemento lido */ printf("Digite o tamanho da sequencia: "); scanf("%d", &n); printf("Digite o 1o. elemento da sequencia: "); scanf("%d", &menor); maior = menor; for (i = 1; i < n; i++) { printf("Digite o %do. elemento da sequencia: ", i+1); scanf("%d", &numero); if (numero < menor) menor = numero; else if (numero > maior) maior = numero; } printf("Maior = %d e Menor = %d\n.", maior, menor); return 0; }
Um caixa de banco tem somente notas de a e b reais para fornecer aos seus clientes. Quando um cliente chega com um cheque no valor de c reais, o caixa precisa fazer umas contas para decidir se é ou não possível descontar o cheque.
Escreva um programa em C que resolva o problema do caixa de banco: dados inteiros positivos a, b, c, o seu programa imprime um número de notas de a reais e um número de notas de b reais, totalizando c reais, ou imprime um mensagem dizendo que não é possível descontar o cheque.
Observação: Para certos valores de a, b e c, o problema pode ter mais de uma resposta.
Exemplos:
Para a==5, b==3 e c==11 seu programa deve imprimir
1 nota(s) de 5 e 2 nota(s) de 3Para a==3, b==5 e c==30 seu programa deve imprimir uma das respostas abaixo:
10 nota(s) de 3 e 0 nota(s) de 5 5 nota(s) de 3 e 3 nota(s) de 5 0 nota(s) de 3 e 6 nota(s) de 5Para a==5, b==3 e c==7 seu programa deve imprimir
Nao e' possivel descontar o chequePara a==4, b==6 e c=121 seu programa deve imprimir
Nao e' possivel descontar o cheque
SOLUÇÃO
/* * VERSÃO 1. */ #include <stdio.h> #define VERD 1 #define FALSO 0 int main() { int a, b, c, achou, /* achou o numero de notas de a e b */ na, /* quantidade de notas de a usadas para descontar o cheque */ nb; /* quantidade de notas de b usadas para descontar o cheque */ printf("Digite os valores de a, b e c: "); scanf("%d %d %d", &a, &b, &c); achou = FALSO; for (na = 0; na*a <= c && achou == FALSO; na++) { /* tentar todos os possiveis valores de na */ for (nb = 0; na*a + nb*b < c; nb++); /* com na fixo, vamos tentar todos os valores de nb */ if (na*a + nb*b == c) achou = VERD; else nb = 0; } if (achou == VERD) printf("%d notas de %d e %d notas de %d\n", na-1, a, nb, b); else printf("Nao e' possivel descontar o cheque.\n"); return 0; } /* * VERSÃO 2. Neste versao o programa para (return 0) logo apos imprimir * uma possivel solucao. * */ #include <stdio.h> int main() { int a, b, c, na, /* quantidade de notas de a para descontar o cheque */ nb; /* quantidade de notas de b para descontar o cheque */ printf("Digite os valores de a, b e c: "); scanf("%d %d %d", &a, &b, &c); for (na = 0; na*a <= c; na++) { /* tentar todos os possiveis valores de na */ if ((c - na*a)%b == 0) { /* o que falta da' para ser dado em notas de b? */ nb = (c - na*a)/b; printf("%d notas de %d e %d notas de %d\n", na, a, nb, b); return 0; } } printf("Nao e' possivel descontar o cheque.\n"); return 0; } /* * VERSÃO 3. */ #include <stdio.h> int main() { int a, b, c, na, /* quantidade de notas de a para descontar o cheque */ nb; /* quantidade de notas de b para descontar o cheque */ printf("Digite os valores de a, b e c: "); scanf("%d %d %d", &a, &b, &c); na = 0; nb = 0; while (na*a + nb*b < c) { /* vamos tentar tentar todos os valores de na */ /* com na fixo, vamos tentar todos os valores de nb */s for (nb = 0; na*a + nb*b < c; nb++); if (na*a + nb*b > c) { na++; nb = 0; } /* else achamos os valores de na e nb e o while vai terminar */ } if (na*a + nb*b == c) printf("%d notas de %d e %d notas de %d\n", na, a, nb, b); else printf("Nao e' possivel descontar o cheque.\n"); return 0; } /* * VERSÃO 4. Identica a versao 2. Da' para perceber isto? */ #include <stdio.h> int main() { int a, b, c; int nb; /* quantidade de notas de b usadas para descontar o cheque */ printf("Digite os valores de a, b e c: "); scanf("%d %d %d", &a, &b, &c); nb = 0; while (c > 0 && c % a != 0) { c = c - b; nb = nb + 1; } if (c >= 0) printf("%d notas de %d e %d notas de %d\n", c/a, a, nb, b); else printf("Nao e' possivel descontar o cheque.\n"); return 0; } /* * VERSÃO 5. Identica as versoes 2 e 4. Usa o comando for e o * programa para (return 0) logo apos imprimir uma * possivel solucao. */ #include <stdio.h> int main() { int a, b, c; int nb; /* quantidade de notas de b usadas para descontar o cheque */ printf("Digite os valores de a, b e c: "); scanf("%d %d %d", &a, &b, &c); nb = 0; while (c >= 0) { if (c % a == 0) { printf("%d notas de %d e %d notas de %d\n", c/a, a, nb, b); return 0; } c = c - b; nb = nb + 1; } printf("Nao e' possivel descontar o cheque.\n"); return 0; }