Correção dos Exercícios - Aula 8
(1211 total de palavras neste texto) (4229 vizualização(ões)) 
Exercícios
1) Faça um programa que leia 10 números inteiros, armazene-os em uma matriz unidimensional e inverta a ordem dos números na matriz, ou seja,
o número que está na última posição troca de lugar com o que está na primeira; o que está na penúltima posição troca de lugar com o que está
na segunda, e assim por diante, até trocar a posição de todos os elementos da matriz.
#include <stdio.h>
main()
{
int mat[10];
int temp;
register int i; /* para controlar os laços */
for (i=0; i<10; i++) /* laço para leitura */
{
printf("Digite um número inteiro: ");
scanf("%d", &mat[i]);
}
for (i=0; i<5; i++) /* faça o teste de mesa e entenda o porquê de i ir até 5 */
{
temp= mat[i]; /* aquela... */
mat[i]= mat[9-i]; /* ... troca... */
mat[9-i]= temp; /* ... básica! */
}
for (i=0; i<10; i++)
printf("%d ", mat[i]); /* imprimindo... */
return 0;
}
2) Faça um programa que leia 5 números, armazene-os em uma matriz unidimensional e os coloque em ordem. Os menores números devem vir primeiro
na matriz e os maiores por último.
/* ************************************************************** *
Pessoal, este tipo de ordenação é conhecido como bubble sort,
ou ordenação bolha. Este é o tipo mais simples e ineficiente
de ordenação, mas é lógico que para pequenas proporções esta
ordenação é mais que adequada.
* ************************************************************* */
#include <stdio.h>
#define MAX 5
main()
{
int i, j, temp;
int mat[MAX];
for (i=0; i<MAX; i++)
{
printf("Digite um número: ");
scanf("%d", &mat[i]);
}
for (i=0; i < MAX-1; i++)
for (j=i+1; j<MAX; j++)
{
if (mat[i] > mat[j]) /* se mat[i] for maior que mat[j]... */
{
temp= mat[i]; /* faz... */
mat[i]= mat[j]; /* ...a... */
mat[j]= temp; /* ...troca. */
}
}
for (i=0; i<MAX; i++)
printf("%d ", mat[i]);
return 0;
}
3) Faça um programa que leia uma matriz 3 x 3 e a multiplique por um escalar (um número inteiro). O resultado é uma matriz, onde cada
elemento desta nova matriz é o produto do escalar com o elemento correspondente da matriz lida.
#include <stdio.h>
main()
{
int mat[3][3], resp[3][3];
int escalar, i, j;
printf("Leitura da Matriz:\n");
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
printf("[%d, %d]= ", i, j);
scanf("%d", &mat[i][j]);
}
printf("Digite o escalar: ");
scanf("%d", &escalar);
printf("Matriz Resultado:\n");
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
resp[i][j]= mat[i][j] * escalar;
printf("%d ", resp[i][j]);
}
printf("\n");
}
return 0;
}
4) Faça um programa que leia duas matrizes 2 x 2 e as multiplique, armazenando o resultado em uma terceira.
#include <stdio.h>
/* Sempre é bom usar defines para números constantes. Assim, se
quiser mudar a matriz para 3x3, basta mudar MAX para 3 */
#define MAX 2
main()
{
int m1[MAX][MAX], m2[MAX][MAX], resp[MAX][MAX];
int i, j, k;
printf("*** Multiplicação de Matrizes 2x2 ***
");
printf("Leitura da matriz m1:
");
for (i=0; i<MAX; i++)
for (j=0; j<MAX; j++)
{
printf("m1[%d,%d]= ", i, j);
scanf("%d", &m1[i][j]);
getchar();
}
printf("Leitura da matriz m2:
");
for (i=0; i<MAX; i++)
for (j=0; j<MAXC; j++)
{
printf("m2[%d,%d]= ", i, j);
scanf("%d", &m2[i][j]);
getchar();
}
/* agora, a multiplicação das matrizes */
for (i=0; i<MAX; i++)
for (j=0; j<MAX; j++)
{
resp[i][j]= 0;
for (k=0; k<MAX; k++)
resp[i][j]= m1[i][k] * m2[k][j] + resp[i][j];
}
printf("Resultado:
");
for (i=0; i<MAX; i++)
{
for (j=0; j<MAX; j++)
printf("%d ", resp[i][j]);
printf("
");
}
return 0;
}
5) Faça um programa que leia uma string e a inverta, imprimindo na tela a string invertida.
#include <stdio.h>
#include <string.h>
main()
{
char str[21], invert[21];
register int i;
printf("Digite uma palavra qualquer (máx. 20 caracteres): ");
fgets(str, 20, stdin);
for (i=strlen(str)-1; i>=0; i--) /* imprimindo de trás para frente */
putchar(str[i]);
printf("\n");
return 0;
}
6) Crie um jogo de forca rudimentar, onde um jogador digita a palavra secreta e o outro tenta adivinhar, através de "chutes" de caracteres.
/*
Pessoal, neste jogo de forca rudimentar, o que importa é a lógica. Não é para se preocupar, por enquanto,
em limpar a tela, desenhar a forca, etc. Basta ler a palavra secreta, ler os chutes do usuário (caractere
por caractere) e determinar se ele acertou. Quando ele acertar, imprima o caractere na posição em que ele
se encontra na palavra. O número de erros para enforcar você pode definir (geralmente são 6 erros).
Quando acertar todos os caracteres, imprima a palavra, dê os parabéns para o jogador e saia do programa.
*/
#include <stdio.h>
#include <string.h>
main()
{
char secreta[21], aux[21];
char msg[15]= "Boa sorte!";
register int i, erros=0, acertos=0, tam, flag=0;
char ch;
printf("Digite a palavra secreta: ");
fgets(secreta, 20, stdin);
tam= strlen(secreta)-1; /* esse -1 é culpa do fgets... */
/* esse laço serve para rolar a tela */
for (i=0; i<26; i++)
printf("\n");
for (i=0; i<tam; i++)
aux[i]= '_';
printf("Agora, tente adivinhar!\n");
/* laço principal do jogo */
while ((erros < 6) && (acertos < tam))
{
for (i=0; i<tam; i++)
printf("%c ", aux[i]);
printf("\n");
printf("%s erros: %d, acertos: %d\n", msg, erros, acertos);
printf("Digite um caractere: ");
ch= getchar();
getchar();
for (i=0; i<tam; i++)
{
if (aux[i] == ch)
{
strcpy(msg,"Já digitado!");
flag= 1;
continue;
}
if (secreta[i] == ch)
{
aux[i]= ch;
if (flag==0)
acertos++;
strcpy(msg,"Acertou!");
flag= 1;
}
}
if (flag==0)
{
strcpy(msg,"Errou!");
erros++;
}
else
flag= 0;
/* esse laço serve para rolar a tela */
for (i=0; i<26; i++)
printf("\n");
}
if (erros < 6)
printf("Parabéns!!! Palavra secreta: %s\n", secreta);
else
printf("Você foi enforcado! Palavra secreta: %s\n", secreta);
return 0;
}
É isso aí galera!
Falow!
bragil |