Correção dos Exercícios - Aula 9

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. */
  }




Esta notícia veio de LinuxDicas - Artigos, Dicas e Notícias Sobre o Mundo Linux
http://www.linuxdicas.com.br

O link desta notícia é:
http://www.linuxdicas.com.br/modules.php?name=Sections&op=viewarticle&artid=220