VOLPITI - Tecnologia da Informação
 
Busca
Tópicos
  Cadastre-se :: Hospedagem LinuxDicas :: Acessórios LinuxDicas :: Fórum LinuxDicas   

Usuários LinuxDicas
· AvantGO
· Backend XML (RSS)
· Contato/Publicidade
· Enviar Notícias/Artigos
· Fórum LinuxDicas
· Lista de Discussão
· Mensagens Privadas

Casa do Linux


Lista de Discussão
·[linuxdicas] quetão de linux
·Ferramenta de Backup
·redes
·Search Engine

Leia mais...

Artigos LinuxDicas
· Resistência ao Linux
· Guia para o Novato
· Licenciamento do SuSE
· Foca GNU/Linux - Iniciante
· Foca GNU/Linux - Intermediário
· Foca GNU/Linux - Avançadoe
· Curso C
· Outras Seções de Artigos

FAQ LinuxDicas
· Licença
· Servidores
· Ambiente X
· Hardware
· Instalação
· Internet
· Aplicativos
· Sistema
· StarOffice

Notícias Velhas
Segunda, abril 21
· MON - Monitorando a disponibilidade de serviços
Quinta, abril 17
· Últimos dias para Inscrições de Palestras no Flisol Campinas
· Acessando seus arquivos de sua máquina de qualquer computador do mundo
Terça, abril 15
· Artigo sobre o Moregroupware
Segunda, abril 14
· Análise do Mandriva Xtreme2 Pack
Terça, março 18
· Como migrar dados do msaccess para mysql
· A verdadeira razão para usarmos Linux
· usando o rsync 3.0.0 para fazer backup entre linux e xp
· Firefox3 : Como Instalar manualmente.
Sábado, fevereiro 09
· Configurando um DNS CHROOTED Primário e Reverso para o seu site.
Quinta, dezembro 27
· Censurando a internet com o OpenDNS
Domingo, outubro 14
· Bandwidth Monitoring Tools For Linux
Quinta, outubro 11
· Variáveis de ambiente
Quinta, agosto 02
· Rodando processos em múltiplos servidores, Cluster!!!
· Instalando XEN no seu Ubuntu/Debian
Domingo, junho 17
· Vovó, faz backup pra mim?
Quarta, junho 13
· Canetas: Idealismo Antártico
Quinta, junho 07
· CA confiável com certificados digitais
Domingo, junho 03
· Equações Matemáticas via Shell
Sábado, junho 02
· Permanent Link to Garimpar é preciso [2]: Confira seu e-mail

Notícias antigas

Versões Estáveis
· Kernel Linux
· *nix e *BSD ISOs da Unicamp
· Linux ISO
· FreeBSD Releases

Correção dos Exercícios - Aula 9

(664 total de palavras neste texto)
(2366 vizualização(ões))   Imprimir




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

[ Voltar Curso C | Índice de Seções ]


Copyright © 2002 - 2007 LinuxDicas - Todos Os Direitos Reservados.
LinuxDicas: lucas.martinez @linuxdicas.com.br
Web site engine's code is Copyright © 2003 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Tempo para gerar esta página: 0.059 segundos.