EXERCÍCIOS – LISTA 5
[1]
Nos programas abaixo, qual será a saída mostrada na tela ao se executar o programa?
Não é necessário incluir a parte onde o system(“PAUSE”) solicita que se pressione
qualquer tecla para continuar:
(a)
#include <stdlib.h> #include <stdio.h> #include <string.h>int main(void)
{
char vet[9] = "TESTANDO"; int i; strcpy(vet, "FOI"); puts(vet); system("PAUSE"); return 0; }
(b)
#include <stdlib.h> #include <stdio.h> int main(void) {char vet[9] = "TESTANDO";
putchar(vet[3]); system("PAUSE"); return 0; }
(c)
#include <stdlib.h> #include <stdio.h> int main(void) {char vet[9] = "TESTANDO"; int i;
for(i = 0; vet[i] != 'N'; i++) putchar(vet[i]);
system("PAUSE");
return 0;
(d)
#include <stdlib.h> #include <stdio.h>int main(void)
{
char vet[9] = "TESTANDO"; int i;
for(i = 0; vet[i] != 'N'; i++) putchar(vet[7-i]);
system("PAUSE");
return 0;
}
(e)
#include <stdlib.h> #include <stdio.h> int main(void) { int vet[3][3] = { 1, -3, 7, 5, -3, 9, 4, 2, -8}; int i; printf("%d", vet[1][2]); system("PAUSE"); return 0; }(f)
#include <stdlib.h> #include <stdio.h> int main(void) { int vet[3][3] = { 1, -3, 7, 5, -3, 9, 4, 2, -8}; int i = 2; do { printf("%d ", vet[i][i]); i--; }while(i <= 0); system("PAUSE"); return 0; }(g) #include <stdlib.h> #include <stdio.h> int main(void) { int vet[3][3] = { 1, -3, 7, 5, -3, 9, 4, 2, -8}; int i = 2; while(i >= 0) { printf("%d ", vet[i][i]); i--; } system("PAUSE"); return 0; } (h) #include <stdlib.h> #include <stdio.h> int main(void) { int vet[3][3] = { 1, -3, 7, 5, -3, 9, 4, 2, -8}; int i, j; for(i = 0; i < 3; i++) {
for(j = 2; j >=0; j--) printf("%d ", vet[j][i]); putchar('\n');
}
system("PAUSE"); return 0;
}
(i) #include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) { char str01[100] = "100", str02[100] = "200"; int i, j; strcat(str01, str02); printf("%d\n", strlen(str01)); system("PAUSE"); return 0; }
(j)
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) { char str01[100] = "100", str02[100] = "200"; int i, j; strcat(str01, str02); printf("%s ", str02); printf("%s ", str01); system("PAUSE"); return 0; }(k)
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) { char str01[4][4] = { 2, 4, -5, 6, 6, 4, -4, 23, 5, 23, 45, 56, 34, -23, 5, -5}; int i = 0, j = 0; for(i = 0; i < 4; i++) { do { printf("%d ", str01[i][j]);if( (str01[i][j] % 2) != 1 ) break;
j++; }while(j < 2); } system("PAUSE"); return 0; }
[2]
Escreva uma função que, quando chamada, retorna
um número randômico ímpar (que
pode assumir valores de zero até 99).
#include <stdlib.h> #include <stdio.h> int gera(void) { int num; do { num = rand() % 100;
}while((num % 2) == 0); //enquanto o numero for par, gera um numero
return num; //quando for ímpar a condição retorna falso e a função retorna }
int main(void) {
int i;
srand(time(NULL));
for (i = 0; i < 20; i++) printf("%d ", gera());
puts("\nPerceba que somente numeros impares sao gerados..."); system("PAUSE");
return 0;
}
[3]
Escreva um programa que leia do teclado um vetor com dez números inteiros. Após, o
programa deve copiar apenas os valores ímpares para outro vetor. (quando os números
forem pares no vetor de origem, o programa deverá zerar o elemento do vetor de destino).
#include <stdlib.h>#include <stdio.h> int main(void) {
int original[10], copiado[10];
int i;
for (i = 0; i < 10; i++)
{
printf("Digite o indice [%d] do vetor: ", i); scanf("%d", &original[i]);
}
for (i = 0; i < 10; i++)
{
if( (original[i] % 2) == 1 ) copiado[i] = original[i];
else copiado[i] = 0; //se não é impar é zerado...
}
for (i = 0; i < 10; i++) printf("%6d", original[i]); //imprime original
putchar('\n');
for (i = 0; i < 10; i++) printf("%6d", copiado[i]); //imprime copiado
putchar('\n'); system("PAUSE");
return 0;
[4]
Escreva um programa que gere uma matriz 4x4 de elementos randômicos ímpares de 0 até
99. Utilize, a função desenvolvida no exercício 2 para realizar mais facilmente a tarefa.
#include <stdlib.h> #include <stdio.h> int gera(void) { int num; do { num = rand() % 100;
}while((num % 2) == 0); //enquanto o numero for par, gera um numero
return num; //quando for ímpar a condição retorna falso e a função retorna
} int main(void) { int i, j, mat[4][4]; srand(time(NULL)); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { mat[i][j] = gera();
printf("%3d", mat[i][j]); //imprimo enquanto gero a matriz...
} putchar('\n'); } system("PAUSE"); return 0; }
[5]
Escreva uma função que gere um número randômico inteiro positivo ou negativo (50% de
chance de ser positivo e 50% de chance de ser negativo) de 0 até o número passado como
parâmetro da função. Por exemplo, quando a função for chamada e o parâmetro passado
para a função for 10, a função deverá gerar um número randômico entre -10 e 10,
incluindo estes.
#include <stdlib.h> #include <stdio.h> int gera_pn(int i) { int num; num = rand() % 100;if( rand()%2 ) num = -num; //50% de ser negativo...
return num; } int main(void) { int i; srand(time(NULL));
for (i = 0; i < 30; i++) printf("%4d", gera_pn(10)); putchar('\n');
system("PAUSE"); return 0;
[6]
Faça um programa que gere um vetor randômico de 1000 números inteiros (utilize a
função do exercício anterior). Após, o programa deverá normalizar o vetor (dividir todos os
elementos do vetor pelo módulo do maior elemento).
#include <stdlib.h> #include <stdio.h> int gera_pn(int i) {
int num;
num = rand() % (i+1);
if( rand()%2 ) num = -num; //50% de ser negativo...
return num; }
int main(void) {
int vet[1000], max, i;
float vet_norm[1000];
srand(time(NULL));
for (i = 0; i < 1000; i++) vet[i] = gera_pn(10);
for (i = 0; i < 1000; i++) printf("%4d", vet[i]);
putchar('\n');
printf("\nNormalizando...");
max = abs(vet[0]);
for (i = 1; i < 1000; i++) if(abs(vet[i]) > max) max = abs(vet[i]);
printf("\nValor maximo: %d\n",max);
for (i = 0; i < 1000; i++) { vet_norm[i] = (float)vet[i]/max; printf("%8.2f", vet_norm[i]); } system("PAUSE"); return 0; }
[7]
Escreva um programa que leia uma matriz 4x4 e obtenha o maior elemento múltiplo de 3
da matriz, imprimindo, além do elemento, seus índices na tela.
#include <stdlib.h> #include <stdio.h> int main(void) {
int mat[4][4], i, j, im, jm, max, controle = 0;
for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { printf("Digite o indice [%d][%d]: ", i, j); scanf("%d", &mat[i][j]); } } for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) {
if( ((mat[i][j] % 3) == 0)) //se é multiplo de 3...
{
if (controle == 0)
{
max = mat[i][j]; //é o primeiro multiplo encontrado... im = i;
jm = j;
controle = 1; //variável indica que já encontrei algum multiplo
//só entrará uma vez nesse if o programa inteiro... }
else {
if( mat[i][j] > max ) { max = mat[i][j]; im = i; jm = j; } } } } }
if(controle == 0) printf("Nao existem multiplos de 3 na matriz\n");
else {
printf("O maior multiplo de tres encontrado e' o elemento "); printf("[%d][%d], valendo %d\n", im, jm, max);
}
system("PAUSE");
return 0;
[8]
Crie um vetor com dez strings. DICA: É uma matriz com duas dimensões.
#include <stdlib.h> #include <stdio.h> int main(void) { char str[10][100] = { "QUANTO", "MAIS", "AS COISAS", "MUDAM,", "MAIS", "E'", "A", "MESMA", "COISA", "!!!" }; int i; for(i = 0; i < 10; i++) { printf("%s ", str[i]); } putchar('\n'); system("PAUSE"); return 0; }[9]
Leia dez strings do teclado e ordene-as em ordem alfabética utilizando a função strcmp.
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) { char str[10][100], straux[100]; int i, trocas = 0;printf("Digite 10 strings... maximo 100 caracteres, somente maiusculas:\n");
for(i = 0; i < 10; i++) gets(str[i]);
do { trocas = 0; for(i = 1; i < 10; i++) { if(strcmp(str[i-1],str[i]) > 0) { trocas++; strcpy(straux, str[i]); strcpy(str[i], str[i-1]); strcpy(str[i-1], straux); } } }while(trocas != 0); for(i = 0; i < 10; i++) { puts(str[i]); } system("PAUSE"); return 0; }
[10]
Faça um programa que leia do teclado dois números complexos na forma a+jb. O programa
deverá somar os dois números e imprimir o resultado na tela. Utilize as funções da
biblioteca padrão para separar e obter a parte real e a parte imaginária do número.
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) {
char num[20], aux[10];
int Re1, Im1, Re2, Im2, somaRe, somaIm, i = 0;, j; printf("Digite um numero com o formato a+jb: "); gets(num);
//######## obtendo parte real do primeiro número
while(num[i] != 'j') //acha a posição do caractere j...
{
aux[i] = num[i]; i++;
}
i--; aux[i] = '\n'; //recua uma posição pois está em j...
Re1 = atoi(aux); //converte para número
//######## obtendo parte imaginaria do primeiro número
for(j = 0; num[i] != '\0'; i++) {
if(num[i] == 'j') continue; //"pula" o j...
aux[j] = num[i]; //observe que i não foi inicializado
j++; //somente j...
}
aux[j] = '\n'; //adiciona caractere nulo...
Im1 = atoi(aux); //converte para número
printf("Digite outro numero com o formato a+jb: "); gets(num);
//######## obtendo parte real do segundo número
i = 0;
while(num[i] != 'j') //acha a posição do caractere j...
{ aux[i] = num[i]; i++; } i--; aux[i] = '\n'; Re2 = atoi(aux);
//######## obtendo parte imaginaria do segundo número
for(j = 0; num[i] != '\0'; i++) { if(num[i] == 'j') continue; aux[j] = num[i]; j++; } aux[j] = '\n'; Im2 = atoi(aux); //######## Somando...
somaRe = Re1+Re2; somaIm = Im1+Im2; itoa(somaRe, num, 10);
if(somaIm > 0) strcat(num, "+j"); else strcat(num, "-j");
itoa(abs(somaIm), aux, 10); strcat(num, aux);
printf("SOMA = %s", num); system("PAUSE");
return 0; }