• Nenhum resultado encontrado

RevisaoII

N/A
N/A
Protected

Academic year: 2021

Share "RevisaoII"

Copied!
12
0
0

Texto

(1)

Revisão – Prova II

Obs.: Todos os exercícios devem ser resolvidos em linguagem C. Não é necessário

entregar a revisão, pois não valerá pontos.

1 – O que será impresso pelo programa abaixo:

void multiplicarMatriz(int [], int, int); int main() { int i; int lista[] = {2, 3, 4}; multiplicarMatriz(lista, 3, 2); for(i = 0; i < 3; ++i) { printf("elemento [%d] = %d\n", i, lista[i]); } return 0; }

void multiplicarMatriz(int v[], int tam, int f) {

int i;

for(i = 0; i < tam; ++i) {

v[i] *= f; }

}

2 – O que será impresso pelo programa abaixo:

void multiplicarElemento(int, int); int main() { int i; int lista[] = {2, 3, 4}; for(i = 0; i < 3; ++i) { multiplicarElemento(lista[i], 2); } for(i = 0; i < 3; ++i) { printf("elemento [%d] = %d\n", i, lista[i]);

(2)

} return 0; }

void multiplicarElemento(int elem, int f) {

elem *= f; }

3 – Descubra o que a função facaAlgo() no programa abaixo faz e mostre o que será

impresso:

#include <stdio.h> #include <string.h> void facaAlgo(char *);

int main(int argc, char *argv[]) { char str1 [] = "bomdia"; facaAlgo(str1); printf("Em main: str1 = %s\n\n", str1); return 0; } void facaAlgo(char *s) { int i; char ch;

int tam = strlen(s);

for(i = 0; i < tam/2; ++i) {

ch = s[i];

s[i] = s[tam - 1 - i]; s[tam - 1 - i] = ch; }

printf("Em faca algo: s = %s\n\n", s); }

4 – Crie uma função capaz de substituir todos os números negativos de uma matriz por seu

módulo.

5 – Construa um programa para ler um conjunto de valores inteiros representando notas de

alunos de uma determinada turma. As notas são valores entre 0 e 100 (inclusive). O

objetivo do programa é descobrir a(s) nota(s) mais freqüentes. Se o usuário digitar um

valor maior que 100 ou menor que 0, imprima uma mensagem de erro e desconsidere essa

nota. A seqüência de entrada deve ser finalizada com um valor negativo que também deve

ser desconsiderado no cálculo.

(3)

Exemplo de execução:

Digite nota (negativo finaliza): 70

Digite nota (negativo finaliza): 95

Digite nota (negativo finaliza): 82

Digite nota (negativo finaliza): 70

Digite nota (negativo finaliza): 82

Digite nota (negativo finaliza): 60

Digite nota (negativo finaliza): 110

Deve ser valor entre 0 e 100!

Digite nota (negativo finaliza): 95

Digite nota (negativo finaliza): 50

Digite nota (negativo finaliza): -1

Notas que mais ocorreram: 70 82 95

Numero de vezes (cada): 2

8 –

Faça uma função que retorne a posição de um dado caracter dentro de uma string.

9 – Escreva uma função que recebe uma string e um caractere como parâmetros e retorna

quantas vezes o caractere aparece na string. Por exemplo, ao chamar a função passando a

string “arvore” e o caractere ‘r’, a função deve retornar 2.

10 – Escreva uma função que recebe como parâmetros: um vetor de inteiros, o tamanho do

vetor e um valor inteiro x. A função deve verificar se há 2 valores diferentes no vetor cuja

soma seja igual ao parâmetro x. Modifique a função para que ela imprima na tela todos os

pares de valores cuja soma seja igual ao parâmetro x.

11 – No programa abaixo, comente a linha de código que apresenta um problema. Faça o

rastreio do programa e informe o que será impresso.

#include <stdio.h> #include <string.h> int main()

{

char str1 [] = "ola mundo"; char str2 [30] = "ola terra";

strcat(str2, str1);

printf("str1 = %s \n\n", str1 ); printf("str2 = %s \n\n", str2 );

strcpy(str1, "Bom dia");

printf("str1 = %s \n\n", str1 ); strcpy(str1, str2); printf("str1 = %s \n\n", str1 ); printf("str2 = %s \n\n", str2 );

(4)

strcpy(str2, str1); if(strcmp(str1, str2) == 0 ) { printf("Strings iguais \n\n"); } else { printf("Strings diferentes \n\n"); } printf("Comprimento str1 = %d\n\n", strlen(str1) ); return 0; }

12 – Um “jogo da velha” pode ser representado em C, usando-se um vetor de inteiros de 2

dimensões (3x3). Pode-se associar, por exemplo, valores 0, 1 e 2 para células vazias,

células marcadas com “X” e células marcadas com “O”, respectivamente.

a) Declare e inicialize duas variáveis (vetores) em C, representando as configurações de

jogo abaixo:

X O O X X X O X O X O O

b) Escreva uma função que recebe como parâmetro um jogo da velha (matriz) e descobre

se alguém venceu o jogo. Suponha que a matriz sempre representa uma configuração

válida para o jogo.

13 – Escreva um programa para somar, subtrair e multiplicar matrizes.

14 – Escreva um programa para obter a transposta de uma matriz.

15 – Escreva um programa para calcular o determinante de uma matriz.

16 – Construa uma função encontrarMaior, que recebe três parâmetros: uma

matriz de inteiros, o número de linhas e o número de colunas da matriz. A função deve

retornar o maior valor armazenado na matriz.

Por exemplo, a função main no trecho de código a seguir declara uma matriz tabela de

tamanho 4x5 e chama a função encontrarMaior (que será criada por você) para

obter o maior valor da matriz tabela. A saída produzida pelo programa está

representada ao lado.

(5)

Atenção: A sua função deve funcionar com matrizes de qualquer tamanho, exigindo que

o usuário altere apenas a dimensão da matriz na lista de parâmetros da função

encontrarMaior.

17 – Verifique o que será impresso pelo programa abaixo

#include <stdio.h> int main() { int a, b, c; int *ptr1, *ptr2; a = 9; ptr1 = &a; ptr2 = &b; c = 7; *ptr2 = *ptr1 + c; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); ptr1 = ptr2; *ptr1 = 2; ptr2 = &c; b = a + *ptr1; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); return 0; int main() { int maior; int tabela[4][5] = { {10, 4 , 5, 7 , 6}, {6 , 7 , 3, 9 , 4}, {15, 2 , 4, 16, 4}, {2 , 5 , 9, 4 , 8} }; SAÍDA NA TELA:

(6)

}

18 – O programa abaixo contém um erro. Faça a correção e mostre o que será impresso.

#include <stdio.h> int main() { int a, b, c; int *ptr1, *ptr2; a = 12; ptr1 = &c; ptr2 = b; c = 5; *ptr2 = (*ptr1 + c) % a; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); return 0; }

19 – Mostre o que será impresso pelos programas abaixo:

a) b)

6 #include <stdio.h> int main() { int x, y, z; int *ptr1, *ptr2; x = 8; ptr1 = &y; ptr2 = &z; y = 3; *ptr2 = *ptr1 + x; #include <stdio.h> int main() { int x = 2, y = 4, z; int *ptr1, *ptr2; z = 8; ptr1 = &y; ptr2 = &z; ptr1 = ptr2; y = 3;

(7)

20 – O programa abaixo usa aritmética de ponteiros para acessar os elementos de um

vetor. Mostre o que será impresso.

#include <stdio.h> int main() { int i; int* ptr; int lista[] = {1, 3, 5, 8, 10, 16}; ptr = lista; for(i = 0; i < 6; ++i) { printf("%d\n", *ptr); ptr++; } printf("\n\n"); ptr--; for(i = 0; i < 6; ++i) { printf("%d\n", *ptr); ptr--; } return 0; }

(8)

#include <stdio.h> #include <string.h> int main()

{

char* pont;

char str1 [] = "ola mundo"; char str2 [30] = "ola terra";

strcat(str2, str1);

printf("str1 = %s \n\n", str1 ); printf("str2 = %s \n\n", str2 );

strcpy(str1, "Bom dia");

printf("str1 = %s \n\n", str1 );

strcpy(str1, "bola azul"); strcpy(str2, str1); if(strcmp(str1, str2) == 0 ) { printf("Strings iguais \n\n"); } else { printf("Strings diferentes \n\n"); } printf("Comprimento str1 = %d\n\n", strlen(str1) ); // recupera um ponteiro: pont = strstr(str1, "az"); printf("pont = %s\n\n", pont); return 0; }

22 – Sabendo que o código do caractere ‘a’ é 97, mostre o rastreio das chamadas da

função recursiva abaixo, e o que será impresso:

#include <stdio.h>

int compara(const char *, const char *); int main()

{

printf("%d\n", compara("abc", "abbb")); printf("%d\n", compara("abc", "abc")); printf("%d\n", compara("abc", "abca")); return 0;

}

(9)

int compara(const char *s1, const char *s2) {

int aux = *s1 - *s2; if(*s1 && !aux)

return compara(++s1, ++s2); return aux;

}

23 – O que faz esse programa?

#include <stdio.h>

void misterio(char *, const char *); int main()

{

char str1[80], str2[80];

printf("Forneca uma string:"); scanf("%s", str1);

printf("Forneca outra string:"); scanf("%s", str2);

misterio(str1, str2); printf("%s\n", str1); return 0;

}

void misterio(char *s1, const char *s2) { while(*s1 != '\0') ++s1; for(; *s1 = *s2; s1++, s2++); }

24 – O programa abaixo compila normalmente, mas apresenta um erro durante a execução.

a) Explique porque o erro ocorre.

b) Forneça uma solução para corrigir o erro.

c) Após realizar a correção, mostre o que será impresso.

#include <stdio.h> #include <stdlib.h> int main() { int i; int *ptr1; int *ptr2; ptr1 = malloc( 5 * sizeof(int) ); for(i = 0; i < 5; ++i)

(10)

{ ptr1[i] = i * 2; } ptr2 = ptr1; ptr2[0] = 100; for(i = 0; i < 5; ++i) { printf("ptr1[%d] = %d\n", i, ptr1[i]); } free(ptr1); for(i = 0; i < 5; ++i) { printf("ptr2[%d] = %d\n", i, ptr2[i]); } return 0; }

25 – O programa abaixo compila normalmente, mas apresenta um erro durante a execução.

a) Explique porque o erro ocorre.

b) Forneça uma solução para corrigir o erro.

c) Após realizar a correção, mostre o que será impresso.

#include <stdio.h> #include <stdlib.h> int main() { int i; int *ptr1; int *ptr2; ptr1 = malloc( 5 * sizeof(int) ); for(i = 0; i < 5; ++i) { ptr1[i] = i * 2; } ptr2 = malloc( 6 * sizeof(int) ); for(i = 0; i < 6; ++i) { ptr2[i] = i * 3; } ptr1 = ptr2; 10

(11)

ptr2[0] = 100; for(i = 0; i < 6; ++i) { printf("ptr1[%d] = %d\n", i, ptr1[i]); } for(i = 0; i < 6; ++i) { printf("ptr2[%d] = %d\n", i, ptr2[i]); } free(ptr1); return 0; }

26 – Escreva um programa que aloca uma área de memória do tamanho suficiente para

armazenar uma quantidade, solicitada pelo usuário, de valores inteiros. Depois o seu

programa deve solicitar que o usuário informe os valores que serão armazenados nessa

área de memória.

27 – Mostre o que será impresso pelo programa abaixo. Suponha que o usuário digite 5

quando solicitado:

#include <stdio.h> #include <stdlib.h>

void minhaFuncao(int *, int, int *); int main() { int i; int tamanho, x; int *lista;

printf("Digite quantos elementos serão armazenados:"); scanf("%d", &tamanho);

lista = malloc(tamanho * sizeof(int)); for(i = 0; i < tamanho; ++i)

{ lista[i] = i + 2 * i; } x = tamanho;

minhaFuncao(lista, tamanho, &x);

(12)

{ printf("%d\n", lista[i]); } printf("tamanho = %d\n", tamanho); printf("x = %d\n", x); return 0; }

void minhaFuncao(int *ptr, int t, int *y) { int i; *y = 0; for(i = 0; i < t; ++i) { ptr[i] = ptr[i] * 2; *y = *y + ptr[i]; } t = *y; } 12

Referências

Documentos relacionados

Alves (2001) ressalta que a variável custos da qualidade ambiental decorrente de gastos para manter o padrão de emissão dos resíduos, em conformidade com as leis que regulamentam

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

Jayme Leão, 63 anos, nasceu em Recife, mudou-se para o Rio de Janeiro ainda criança e, passados vinte e cinco anos, chegou a São Paulo, onde permanece até hoje.. Não

Núbia Ivete Monteiro de Oliveira, constituída pela Portaria nº 290/2012, publicada no DOE de 20/06/2012,alterada pela Portaria SEGESP nº 023/2013, publicada no DOE de

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

mori foi realizada a análise da infecção causada por um isolado geográfico do BmNPV no Estado do Paraná, Brasil, sendo a espécie viral identificada como Bombyx mori

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação