Correção dos Exercícios - Aula 9
(664 total de palavras neste texto) (2366 vizualização(ões)) 
Exercícios
1) Refaça o programa da calculadora que fizemos em outra aula utilizando ponteiros.
#include <stdio.h>
#include <stdlib.h>
main()
{
int *n1, *n2;
char *op;
/* alocando... */
n1= (int *) malloc(sizeof(int));
n2= (int *) malloc(sizeof(int));
op= (char *) malloc(sizeof(char));
printf("Calculadora: + - * / %\n");
do
{
printf("Digite o operador: ");
scanf("%c%*c", op);
} while ((*op != '+') && (*op != '-') && (*op != '*') && (*op != '/') && (*op != '%'));
printf("Digite o primeiro operando: ");
scanf("%d%*c", n1);
printf("Digite o segundo operando: ");
scanf("%d%*c", n2);
switch(*op)
{
case '+':
printf("%d + %d = %d\n", *n1, *n2, *n1 + *n2);
break;
case '-':
printf("%d - %d = %d\n", *n1, *n2, *n1 - *n2);
break;
case '*':
printf("%d * %d = %d\n", *n1, *n2, *n1 * *n2);
break;
case '/':
if (*n2 == 0)
{
printf("Impossível dividir por zero\n");
break;
}
else
{
printf("%d / %d = %d\n", *n1, *n2, *n1 / *n2);
break;
}
case '%':
printf("%d %% %d = %d\n", *n1, *n2, *n1 % *n2);
break;
}
/* desalocar (NUNCA SE ESQUEÇA!) */
free(op);
free(n1);
free(n2);
return 0;
}
2) Faça um programa que leia 10 números inteiros e armazene em uma matriz. Depois, utilize a aritmética de ponteiros para imprimir todos os
elementos da matriz.
#include <stdio.h>
main()
{
int mat[10];
int *ptr;
int i;
for (i=0; i<10; i++)
{
printf("Digite um número inteiro: ");
scanf("%d%*c", &mat[i]); /* lê e limpa o buffer */
}
ptr= mat; /* ponteiro recebe endereço da matriz */
/* Agora, imprime */
for (i=0; i<10; i++)
printf("%d ", *(ptr+i));
return 0;
}
3) Faça um programa que aloque uma string de 30 caracteres, armazene uma palavra digitada pelo usuário nesta string, imprima na tela e,
depois de imprimido, desaloque esta string.
#include <stdio.h>
#include <stdlib.h>
main()
{
char *string;
/* alocar a string de 30 caracteres */
string= (char *) malloc(sizeof(char) * 30);
if (!string) /* se alocação falhou (se string for igual a NULL) */
{
printf("Erro ao alocar memória!\n");
return 1; /* sai do programa */
}
printf("Digite uma palavra: ");
fgets(string, 30, stdin);
printf("A palavra digitada é %s\n", string);
free(string); /* desaloca a string */
return 0;
}
4) Faça um programa que leia 5 strings e armazene em uma matriz de strings. Cada string deve ter seu espaço alocado dinamicamente (considere
strings de no máximo 20 caracteres).
#include <stdio.h>
#include <stdlib.h>
main()
{
char *mat[5];
int i;
for (i=0; i<5; i++)
{
/* aloca espaço para as strings */
mat[i]= (char *) malloc(sizeof(char) * 20);
if (!mat[i])
{
printf("Falha na alocação de memória!\n");
return 1;
}
printf("Digite uma palavra: ");
fgets(mat[i], 20, stdin);
}
/* imprime as strings */
for (i=0; i<5; i++)
{
puts(mat[i]);
free(mat[i]); /* desaloca a string */
}
return 0;
/* OBS: Quando um dado é alocado dinamicamente, é importante desalocá-lo antes de
encerrar o programa. Se isso não for feito, a variável continuará ocupando espaço
desnecessariamente após o término da execução do programa. Também é importante
testar se ocorreu algum erro na alocação, para tratá-lo, se houver. */
}
|