No Title

4
MAC 110 - Introdução à Computação IMEUSP BMAC Primeiro Semestre de 2.012 Primeira Prova 27 de Abril de 2.012 Nome:__________________________________________ NUSP:_______ Questão 1 (3 pontos): Diga o que será impresso pelo programa abaixo. O número a ser digitado, isto é, o valor de N, é o seu número USP com 7 dígitos: #include <stdio.h> #include <stdlib.h> int main() { int N, k, p = 10, s; printf("Digite o seu numero usp:"); scanf("%d", &N); k=N; while (N > 0) { k = k / p * p; s = N % 10; printf("\n%1d : %10d", s,k); p = p * 10; N = N / 10; } system("PAUSE"); return 0; } Supondo NUSP = 1234567, será impresso: Digite o seu numero usp:1234567 7 : 1234560 6 : 1234500 5 : 1234000 4 : 1230000 3 : 1200000 2 : 1000000 1 : 0 Supondo NUSP = 7160014, será impresso: Digite o seu numero usp:7160014 4 : 7160010 1 : 7160000 0 : 7160000 0 : 7160000 6 : 7100000 1 : 7000000 7 : 0

description

http://camatimeusp.org/data/banco-de-provas/MAC0110_Manoel%20Marc%C3%ADlio%20Sanches_ProvaP1_2012.pdf

Transcript of No Title

Page 1: No Title

MAC 110 - Introdução à Computação

IMEUSP – BMAC – Primeiro Semestre de 2.012

Primeira Prova – 27 de Abril de 2.012

Nome:__________________________________________ NUSP:_______

Questão 1 (3 pontos):

Diga o que será impresso pelo programa abaixo. O número a ser digitado, isto é, o valor de

N, é o seu número USP com 7 dígitos:

#include <stdio.h>

#include <stdlib.h>

int main() {

int N, k, p = 10, s;

printf("Digite o seu numero usp:");

scanf("%d", &N);

k=N;

while (N > 0) {

k = k / p * p;

s = N % 10;

printf("\n%1d : %10d", s,k);

p = p * 10;

N = N / 10;

}

system("PAUSE");

return 0;

}

Supondo NUSP = 1234567, será impresso:

Digite o seu numero usp:1234567

7 : 1234560

6 : 1234500

5 : 1234000

4 : 1230000

3 : 1200000

2 : 1000000

1 : 0

Supondo NUSP = 7160014, será impresso:

Digite o seu numero usp:7160014

4 : 7160010

1 : 7160000

0 : 7160000

0 : 7160000

6 : 7100000

1 : 7000000

7 : 0

Page 2: No Title

Questão 2: (3 pontos)

Os trechos de programa abaixo devem imprimir todos os divisores comuns de N e M

maiores que 1 e menores que N e M. Pode supor N>1 e M>1. Exemplos:

Se N=12 e M=18, imprimir 2,3,6

Se N=15 e M=20, imprimir 5.

Quais dos trechos abaixo estão certos ou estãot errados ? Escreva CERTO ou ERRADO.

As variáveis usadas tem os seguintes tipos: int i,N,M,aux;

a) Certo i=2;

while (i<=N/2 && i<=M/2) {

if(N%i==0 && M%i==0) printf("\n%d",i);

i++;

}

b) Errado i=2;

while (i<=N/2 && i<=M/2)

if(N%i==0 && M%i==0) printf("\n%d",i);

else i++;

c) Errado for(i=2; i<N || i<M ; i++)

if(N%i==0 || M%i==0) printf("\n%d",i);

d) Certo if(N<=M) aux=N/2; else aux=M/2;

for(i=2;i<=aux;i++)

if(N%i==0 && M%i==0) printf("\n%d",i);

e) Certo i=2;

do {

if(N%i==0 && M%i==0) printf("\n%d",i);

i++;

} while (i<=N/2 && i<=M/2);

f) Errado i=2;

while (N%i==0 && M%i==0) {

printf("\n%d",i);

i++;

}

Page 3: No Title

Questão 3: (2 Pontos)

Faça um programa que dados A e B inteiros (supor A<B), calcule o valor máximo da função

xy – x2 - y

2 – xy

2 e também quais valores de x e y o máximo ocorre, para todos

os valores inteiros de x e y entre A e B.

#include <stdio.h>

#include <stdlib.h>

int main() {

int x,y,max,xm,ym,A,B;

/* entre com A e B */

printf("Entre com A e B:");

scanf("%d%d",&A,&B);

/* valor inicial de max */

x = y = xm = ym = A;

max=x*y-x*x-y*y-x*y*y;

/* Para cada x de A até B, variar y de A até B */

for(x=A; x<=B; x++)

for(y=A; y<=B; y++)

if(max<x*y-x*x-y*y-x*y*y) {

/* troca os valores do máximo se encontrou maior */

max=x*y-x*x-y*y-x*y*y;

xm=x; ym=y;

}

/* imprime o resultado */

printf("\nmax=%10d x=%5d y=%5d",max,xm,ym);

system("PAUSE");

return 0;

}

Page 4: No Title

Questão 4: (2 Pontos)

Faça um programa que dados N (supor N>0) calcule o valor da soma abaixo:

1! + 2! + 3! + 4! + ... + N! (! Significa fatorial)

#include <stdio.h>

#include <stdlib.h>

int main() {

int N,i,Soma,fat;

/* Ler N */

printf("Entre com N:");

scanf("%d",&N);

/* inicia variáveis */

Soma=0; fat=1;

/* Soma dos N termos */

for (i=1;i<=N;i++) {

fat=fat*i;

Soma=Soma+fat;

}

printf("\n\nSoma=%d",Soma);

system("PAUSE");

return 0;

}

Outra solução, menos eficiente, usando for encaixado:

#include <stdio.h>

#include <stdlib.h>

int main() {

int N,i,j,Soma,fat;

/* Ler N */

printf("Entre com N:");

scanf("%d",&N);

/* inicia variáveis */

Soma=0;

/* Calcula cada um dos fatoriais de 1 a N e soma */

for (i=1;i<=N;i++) {

fat=1;

/* calcula o fatorial de i */

for (j=1;j<=i;j++) fat=fat*j;

Soma=Soma+fat;

}

printf("\n\nSoma=%d",Soma);

system("PAUSE");

return 0;

}