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;
}