Issuu on Google+

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 6 5 4 3 2 1

: : : : : : :

1234560 1234500 1234000 1230000 1200000 1000000 0

Supondo NUSP = 7160014, será impresso: Digite o seu numero usp:7160014 4 1 0 0 6 1 7

: : : : : : :

7160010 7160000 7160000 7160000 7100000 7000000 0


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


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 2 2 2 xy – x - y – xy 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; }


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


/MAC0110_Manoel%20Marcílio%20Sanches_ProvaP1_2012