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.