No Title
-
Upload
guilherme-prokisch -
Category
Documents
-
view
216 -
download
0
description
Transcript of 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
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
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;
}
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;
}