Baixe o app para aproveitar ainda mais
Prévia do material em texto
MAC2166 Introdução à Computação para a Engenharia Prova 1 QUESTÃO 1 Simule a execução do programa abaixo, destacando a saída do programa. A saída do programa é tudo que resulta dos comandos printf. Para efeito de correção só será considerada a saída do programa. # include <stdio.h> int main(){ int nusp, m, n, i, j, soma, cont; printf ("Entre com seu no. USP: "); /* na linha abaixo use o numero USP */ scanf ("%d", &nusp); printf ("nusp = %d\n", nusp); m = nusp % 3 + 2; n = 6 - m; printf("m = %d, n = %d\n", m, n); soma = 0; cont = 1; i = 1; j = 1; while (i <= m){ if (j <= n && cont < 4){ cont = cont + 1; soma = soma + i*n; printf("i = %d, j = %d, soma = %d\n", i, j, soma); j = j + 1; } else { j = 1; i = i + 1; } } /* O ultimo valor a ser impresso e' o da variavel cont */ printf("i = %d, j = %d, cont = %d\n", i, j, cont); return 0; } SOLUÇÃO A resposta depende do resto da divisão do seu número USP por 3. Teste com o seu no. USP e compare a resposta. (0) nusp % 3 == 0. Veja os exemplos abaixo. Entre com seu no. USP: 1234560 nusp = 1234560 m = 2, n = 4 i = 1, j = 1, soma = 4 i = 1, j = 2, soma = 8 i = 1, j = 3, soma = 12 i = 3, j = 1, cont = 4 Entre com seu no. USP: 12 nusp = 12 m = 2, n = 4 i = 1, j = 1, soma = 4 i = 1, j = 2, soma = 8 i = 1, j = 3, soma = 12 i = 3, j = 1, cont = 4 Entre com seu no. USP: 0 nusp = 0 m = 2, n = 4 i = 1, j = 1, soma = 4 i = 1, j = 2, soma = 8 i = 1, j = 3, soma = 12 i = 3, j = 1, cont = 4 (1) nusp % 3 == 1. Entre com seu no. USP: 1234561 nusp = 1234561 m = 3, n = 3 i = 1, j = 1, soma = 3 i = 1, j = 2, soma = 6 i = 1, j = 3, soma = 9 i = 4, j = 1, cont = 4 Entre com seu no. USP: 13 nusp = 13 m = 3, n = 3 i = 1, j = 1, soma = 3 i = 1, j = 2, soma = 6 i = 1, j = 3, soma = 9 i = 4, j = 1, cont = 4 Entre com seu no. USP: 1 nusp = 1 m = 3, n = 3 i = 1, j = 1, soma = 3 i = 1, j = 2, soma = 6 i = 1, j = 3, soma = 9 i = 4, j = 1, cont = 4 (2) nusp % 3 == 2. Entre com seu no. USP: 1234562 nusp = 1234562 m = 4, n = 2 i = 1, j = 1, soma = 2 i = 1, j = 2, soma = 4 i = 2, j = 1, soma = 8 i = 5, j = 1, cont = 4 Entre com seu no. USP: 14 nusp = 14 m = 4, n = 2 i = 1, j = 1, soma = 2 i = 1, j = 2, soma = 4 i = 2, j = 1, soma = 8 i = 5, j = 1, cont = 4 Entre com seu no. USP: 2 nusp = 2 m = 4, n = 2 i = 1, j = 1, soma = 2 i = 1, j = 2, soma = 4 i = 2, j = 1, soma = 8 i = 5, j = 1, cont = 4 QUESTÃO 2 Escreva um programa que recebe um inteiro positivo \texttt{n} e imprime todos os inteiros entre 1 e n que são quadrados pares. Exemplo: Entre com um inteiro: 100 Quadrados pares: 4 16 36 64 100 SOLUÇÃO /* * Solucao 1: Eta solucao bonita, curta e simples. */ #include <stdio.h> int main() { int n, k; printf("Digite valor de n: "); scanf("%d", &n); printf("Quadrados pares:\n"); for (k = 2; k*k <= n; k=k+2) printf("%d\n", k*k); return 0; } /* * Solucao 2: solucao 1 com while no lugar do for */ #include <stdio.h> int main() { int n, k; printf("Digite valor de n: "); scanf("%d", &n); printf("Quadrados pares:\n"); k = 2; while (k*k <= n) { printf("%d\n", k*k); k = k + 2; } return 0; } /* * Solucao 3: solucao arroz com feijao * */ #include <stdio.h> int main() { int n, k; printf("Digite valor de n: "); scanf("%d", &n); printf("Quadrados pares:\n"); k = 1; while (k*k <= n) { if ((k*k)%2 == 0) { printf("%d\n", k*k); } k = k + 1; } return 0; } /* * Solucao 4: identica a solucao 4, com uma variavel * para guardar o candidato a quadrado par. */ #include <stdio.h> int main(){ int n, k; int quadrado; /* guarda k*k */ printf("Digite valor de n: "); scanf("%d", &n); printf("Quadrados pares:\n"); k = 1; quadrado = 1; while (quadrado <= n) { if (quadrado%2 == 0) { printf("%d\n", quadrado); } k = k + 1; quadrado = k*k; } return 0; } /* * Solucao 5: solucao com mais arroz e com mais feijao * */ #include <stdio.h> int main(){ int n, k; int quadrado; printf("Digite valor de n: "); scanf("%d", &n); printf("Quadrados pares:\n"); k = 1; while (k <= n) { quadrado = k*k; if (quadrado%2 == 0 && quadrado <= n) { printf("%d\n", quadrado); } k = k + 1; } return 0; } /* * Solucao 6: identica a solucao 5, imprime uma * mensagem apropriada se n<4. * */ #include <stdio.h> int main(){ int n, k; int quadrado; printf("Digite valor de n: "); scanf("%d", &n); if (n >= 4) { printf("Quadrados pares:\n"); k = 1; while (k <= n) { quadrado = k*k; if (quadrado%2 == 0 && quadrado <= n) { printf("%d\n", quadrado); } k = k + 1; } } else { printf("Nao ha quadrados pares entre 1 e %d.\n",n); } return 0; } QUESTÃO 3 Escreva um programa que recebe dois inteiros positivos representando uma fração e imprime a fração irredutível correspondente. Exemplos: Entre com dois inteiros: 8 12 Fracao irredutivel: 2/3 Entre com dois inteiros: 21 7 Fracao irredutivel: 3/1 Entre com dois inteiros: 2 9 Fracao irredutivel: 2/9 Entre com dois inteiros: 3 3 Fracao irredutivel: 1/1 SOLUÇÃO /* * Solucao 1: Solucao curta e simples. * */ #include <stdio.h> int main(){ int m, n, k, mdc; printf("Entre com dois inteiros: "); scanf("%d %d", &m, &n); /* calcule mdc(m,n) */ mdc = 1; for (k = 2; k <= m; k++) if (m % k == 0 && n % k == 0) mdc = k; printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc); return 0; } /* * Solucao 2: identica a solucao 1, com while no lugar de * for. */ #include <stdio.h> int main() { int m, n, k, mdc; printf("Entre com dois inteiros: "); scanf("%d %d", &m, &n); /* calcule mdc(m,n) */ mdc = 1; k = 2; while (k <= m) { if (m % k == 0 && n % k == 0) mdc = k; k++; } printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc); return 0; } /* * Solucao 3: nesta solucao o calculo do mdc esta implicito. * */ #include <stdio.h> int main() { int m, n, k; printf("Entre com dois inteiros: "); scanf("%d %d", &m, &n); k = 2; while (k <= m && k <= n) { if (m % k == 0 && n % k == 0) { m = m / k; n = n / k; } else { k++; } } printf("Fracao irredutivel: %d/%d\n", m, n); return 0; } /* * Solucao 4: identica a solucao 3, um pouco mais eficiente. * */ #include <stdio.h> int main() { int m, n, k; int min; printf("Entre com dois inteiros: "); scanf("%d %d", &m, &n); if (m < n) { min = m; } else { min = n; } /* nao ha divisor de m e n maior que min */ k = 2; while (k <= min) { if (m % k == 0 && n % k == 0) { m = m / k; n = n / k; } else { k++; } } printf("Fracao irredutivel: %d/%d\n", m, n); return 0; } /* * Solucao 5: identica a solucao 2. Usa o algoritmo de * Euclides. */ #include <stdio.h> int main() { int m, n,mdc; int numerador, denominador, resto; printf("Entre com dois inteiros: "); scanf("%d %d", &m, &n); /* calcule mdc(m,n) usando o algoritmo de Euclides */ numerador = m; denominador = n; resto = numerador % denominador; while (resto != 0) { numerador = denominador; denominador = resto; resto = numerador % denominador; } mdc = denominador; printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc); return 0; } /* * Solucao 6: identica a solucao 5. Usa o do-while no * lugar de while. * OBS: muitas turmas nao viram o do-while: * * do * { * [...lista de comandos...]; * } * while (condicao); * * e' equivalente a * * [...lista de comandos...]; * while (condicao) * { * [...lista de comandos...]; * } */ #include <stdio.h> int main() { int m, n, mdc; int numerador, denominador, resto; printf("Entre com dois inteiros: "); scanf("%d %d", &m, &n); /* calcule mdc(m,n) usando o algoritmo de Euclides */ numerador = m; denominador = n; do { resto = numerador % denominador; numerador = denominador; denominador = resto; } while (resto != 0); mdc = numerador; printf("Fracao irredutivel: %d/%d\n", m/mdc, n/mdc); return 0; } Last modified: Fri May 7 09:37:09 BRT 2004 Prova 1 QUESTÃO 1 QUESTÃO 2 QUESTÃO 3
Compartilhar