DCC003: Algoritmos e Estruturas de Dados I
2013/1

Exercícios 4: Ponteiros e erros comuns em C

Exercício 1. Considere o trexo de código abaixo:

        char string1[128];
        printf("digite uma palavra:\n");
        fgets(string1, 128, stdin);
        *(strchr(string1, '\n')) = '\0';

Explique, passo a passo, o que faz a última linha *(strchr(string1, '\n')) = '\0'. Consute a documentação da função strchr aqui.

Exercício 2. Todos os programas abaixo têm um erro. Explique detalhadamente o erro e como consertá-lo. Você pode baixar o código fonte dos programas para testá-los aqui.

Programa 1

#include <stdio.h>
int main(int argc, char **argv)
{
	int i = 0;
	int j = 0;
	int contador = 0;
	for(i = 0; i < 10; i++)
		for(j = 0; j < 10; j++);
			contador++;
	printf("contador = %d\n", contador);
	printf("pressione qualquer tecla para terminar\n");
	getc(stdin);
        return 0;
}

Programa 2

#include <stdio.h>
int main(int argc, char **argv)
{
	int i;
	int soma;
	for(i = 0; i < 10; i++) {
		soma += 10;
	}
	printf("10 * 10 = %d\n", soma);
	printf("pressione qualquer tecla para terminar\n");
	getc(stdin);
        return 0;
}

Programa 3

#include <stdio.h>
int main(int argc, char **argv)
{
	char linha[128];
	int num;
	int resto;
	printf("digite um numero:\n");
	fgets(linha, 128, stdin);
	sscanf(linha, "%d\n", &num);
	resto = num % 2;
	if(resto = 0) {
		printf("num eh par\n");
	} else {
		printf("num eh impar\n");
	}
	printf("pressione qualquer tecla para terminar\n");
	getc(stdin);
        return 0;
}

Programa 4

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
	char string1[128];
	char string2[128];
	printf("digite uma palavra:\n");
	fgets(string1, 128, stdin);
	*(strchr(string1, '\n')) = '\0';
	printf("digite outra palavra:\n");
	fgets(string2, 128, stdin);
	*(strchr(string2, '\n')) = '\0';
	if(string1 == string2) {
		printf("strings %s e %s sao iguais\n", string1, string2);
	} else {
		printf("strings %s e %s sao diferentes\n", string1, string2);
	}
	printf("pressione qualquer tecla para terminar\n");
	getc(stdin);
        return 0;
}

Programa 5

#include <stdio.h>
int main(int argc, char **argv)
{
	int numbers[10];
	int i;
	for(i = 0; i <= 10; i++) {
		numbers[i] = 0;
	}
	printf("pressione qualquer tecla para terminar\n");
	getc(stdin);
        return 0;
}

Programa 6

#include <stdio.h>
int main(int argc, char **argv)
{
	char palavra[128];
	palavra[0] = 'b';
	palavra[1] = 'a';
	palavra[2] = 'n';
	palavra[3] = 'a';
	palavra[4] = 'n';
	palavra[5] = 'a';
	printf("{{{%s}}}\n", palavra);
	printf("pressione enter para terminar\n");
	getc(stdin);
        return 0;
}

Programa 7

#include <stdio.h>
int main(int argc, char **argv)
{
	char palavra[5] = "hello";
	int i = -1;
	printf("%d {{{%s}}}\n", i, palavra);
	printf("pressione enter para terminar\n");
	getc(stdin);
        return 0;
}