Escreve um programa que atribuí números aleatórios a um array de duas dimensões de 5 por 4 elementos e que apresente esses números no ecrã por colunas.
Resolução:
#include <stdio.h>
#include <stdlib.h>
void randomize()
{
time_t agora;
agora = time(0);
srandom(agora);
}
void main()
{
/* Declara o array */
int matriz[5][4];
int a, b;
/* Preenche o array */
randomize();
for( a = 0; a < 5; a++ )
for ( b = 0; b < 4; b++ )
matriz[a][b] = random();
/* Imprime os elementos do array */
for ( a = 0; a < 5; a++ )
{
for ( b = 0; b < 4; b++ )
printf("%d\t", matriz[a][b]);
printf("\n"); /* muda de linha */
}
}
Também se pode mostrar os elementos do array à medida que vão sendo gerados. Assim:
#include <stdio.h>
#include <stdlib.h>
void randomize()
{
time_t agora;
agora = time(0);
srandom(agora);
}
main()
{
int a[5][4];
int i,j;
randomize();
for (i=0; i<5; i++)
{
for (j=0; j<4; j++)
{
a[i][j] = random();
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
Altera o programa anterior de forma a que apresente também o maior e o menor dos números aleatórios.
Resolução:
#include <stdio.h>
#include <stdlib.h>
void randomize()
{
time_t agora;
agora = time(0);
srandom(agora);
}
main()
{
int a[5][4];
int i,j,max=0,min=RAND_MAX;
randomize();
for (i=0; i<5; i++)
{
for (j=0; j<4; j++)
{
a[i][j] = random();
printf("%d\t",a[i][j]);
if (max < a[i][j])
max = a[i][j];
if (min > a[i][j])
min = a[i][j];
}
printf("\n");
}
printf("Maximo: %d\n",max);
printf("Minimo: %d\n",min);
}
Escreve um programa que ordena uma lista de N números. N pode ir no máximo até 100.
Resolução:
#include <stdio.h>
#define N 100
main()
{
int a[N];
int i, k, m, min, temp, tam;
/* Receber os valores a ordenar */
printf("Indique o tamanho do array (maximo 100)\n");
scanf("%d",&tam);
for (i=0; i<tam; i++)
{
printf("%d.º numero -> ",i+1);
scanf("%d",&a[i]);
}
/* Ordenar o array */
for( k=0; k<=tam-1; k++ )
{
/* descobre o indice do minimo em a[k], a[k+1], ..., a[N-1] */
min = a[k];
m = k;
for( i=k; i<=tam-1; i++ )
if( a[i] < min )
{
min = a[i];
m = i;
}
/* troca a[k] com a[m] */
temp = a[k];
a[k] = a[m];
a[m] = temp;
}
/* Escrever os elementos do array ordenados */
for( i=0; i<tam; i++ )
printf("%d ", a[i]);
printf("\n");
}
Também se poderia obter os valores a ordenar de outras formas. Por exemplo, através da geração de números aleatórios, ou por atribuição directa.
Escreve um programa que registe o sexo e a idade de um grupo de dez pessoas. Em seguida o programa deve apresentar a média das idades de cada sexo.
Resolução:
#include <stdio.h>
#define N 10
main()
{
int dados[N][2];
int i, ms=0, fs=0, idade_m=0, idade_f=0;
/* Registo dos valores */
for (i=0; i<N; i++)
{
printf("Indique os dados da %d.ª pessoa\n",i+1);
printf("Sexo (0 - M, 1 - F): ");
do
{
scanf("%d",&dados[i][0]);
} while (dados[i][0] > 1 || dados[i][0] < 0);
printf("Idade: ");scanf("%d",&dados[i][1]);
}
/* Calculo da media das idades por sexo */
for (i=0; i<N; i++)
{
if (dados[i][0] == 0)
{
idade_m = idade_m + dados[i][1];
ms++;
}
else
{
idade_f = idade_f + dados[i][1];
fs++;
}
}
/* Mostra dos resultados */
printf("Media das idades\n");
printf("Homens: %.2f\n", (float)idade_m/ms);
printf("Mulheres: %.2f\n", (float)idade_f/fs);
}
Na aula prática 3, o exercicío 8 consistia no seguinte: Faz um programa que receba 10 valores inteiros e que indique: Quantos são pares, quantos são ímpares, quantos são positivos e quantos são negativos. Volta a escrever o programa, utilizando arrays.
Resolução:
#include <stdio.h>
#define N 10
main()
{
int n[N];
int i, pares=0, impares=0, positivos=0, negativos=0;
printf("Introduza %d numeros inteiros:\n",N);
for (i=0; i<N; i++)
scanf("%d",&n[i]);
for (i=0; i<N; i++)
{
if (n[i] % 2 == 0)
pares++;
else
impares++;
if (n[i] >= 0)
positivos++;
else
negativos++;
}
printf("Resultado final\n");
printf("Pares -> %d\n",pares);
printf("Impares -> %d\n",impares);
printf("Positivos -> %d\n",positivos);
printf("Negativos -> %d\n",negativos);
}
Volta a fazer o exercício de contar 0s e 1s de um byte binário, com arrays.
Resolução:
#include <stdio.h>
#define N 8
main()
{
int byte[N];
int i, zeros=0, uns=0;
printf("Introduza um BYTE binario\n");
for (i=0; i<N; i++)
scanf("%d",&byte[i]);
for (i=0; i<N; i++)
{
if (byte[i]==0)
zeros++;
else if (byte[i]==1)
uns++;
else
{
printf("O numero nao e binario\n");
exit();
}
}
printf("Resultado:\n");
printf("Zeros -> %d\n",zeros);
printf("Uns -> %d\n",uns);
}
Volta a fazer o exercício de converter um número decimal para binário, com arrays.
Resolução:
#include <stdio.h>
#define N 16
main()
{
int decimal,i,j;
int bin[N];
printf("Programa para converter de decimal para binario\n");
printf("Indique o valor decimal: ");
do
scanf("%d",&decimal);
while (decimal < 0);
i = 0;
do
{
bin[i] = decimal % 2;
decimal = decimal / 2;
i++;
}
while (decimal != 0);
for (j=i-1; j>=0; j--) /* Para mostrar o array invertido */
printf("%d",bin[j]);
printf("\n");
}
Faz um programa que apresente uma tabela de conversão de decimal para binário:
Resolução:
#include <stdio.h>
#define N 16
main()
{
int decimal,i,j,k,tam;
int bin[N];
printf("Tabela de conversao de decimal/binario\n");
printf("Indique ate que numero deseja a tabela: ");
do
scanf("%d",&tam);
while (tam < 0);
for (k=0; k<=tam; k++)
{
i = 0;
decimal = k;
do
{
bin[i] = decimal % 2;
decimal = decimal / 2;
i++;
}
while (decimal != 0);
printf("%d\t",k);
for (j=i-1; j>=0; j--) /* Para mostrar o array invertido */
printf("%d",bin[j]);
printf("\n");
}
}
Nota: também podiam ter feito uma função para converter um número para binário. Depois essa função seria chamada dentro de um ciclo.