Gabarito da Lista 4
Enunciado:
Programa original :#include <stdio.h>
main ()
{
int num[100]; /* Declara um vetor de inteiros de 100 posicoes */
int count=0;
int totalnums;
do
{
printf ("\nEntre com um numero (-999 p/ terminar): ");
scanf ("%d",&num[count]);
count++;
} while (num[count-1]!=-999);
totalnums=count-1;
printf ("\n\n\n\t Os números que você digitou foram:\n\n");
for (count=0;count<totalnums;count++)
{
printf (" %d",num[count]);
}
}Reescreva o exemplo acima, realizando a cada leitura um teste para ver se a dimensão do vetor não foi ultrapassada. Caso o usuário entre com 100 números, o programa deverá abortar o loop de leitura automaticamente. O uso do Flag não deve ser retirado.
Solução:
Basta acrescentar ao teste no final do loop, uma verificação se contador <= 100.#include <stdio.h>
main ()
{
int num[100]; /* Declara um vetor de inteiros de 100 posicoes */
int count=0;
int totalnums;
do
{
printf ("\nEntre com um numero (-999 p/ terminar): ");
scanf ("%d",&num[count]);
count++;/************************ Aqui *************************/
} while ((num[count-1]!=-999)&& (count <= 100) );totalnums=count-1;
printf ("\n\n\n\t Os números que você digitou foram:\n\n");
for (count=0;count<totalnums;count++)
{
printf (" %d",num[count]);
}
}
Enunciado:
Faça um programa que leia quatro palavras pelo teclado, e armazene cada palavra em uma string. Depois, concatene todas as strings lidas numa única string. Por fim apresente esta como resultado ao final do programa.Solução:
Aí segue o programa segundo o enunciado requere. Uma string para cada palavra. Logo em seguida, é apresentada uma solução para o exercício com recursos mais avançados e código mais compacto./* Le 4 strings: Versao 1 ----------------------------*/
#include <stdio.h>
#include <string.h>
#define TAM 15
main()
{
char str1[TAM], str2[TAM], str3[TAM], str4[TAM];
char str[TAM*4];
int aux;/* Le todas as strings */
printf("\n\n Digite 4 strings, teclando <ENTER> ao final de cada uma:\n");
gets(str1);
gets(str2);
gets(str3);
gets(str4);/* Zera (inicializa) a string str, colocando um '\0' logo na
primeira posicao.. Se nao fizermos isto, poderiamos ter um lixo nela que atrapalharia o resultado */
str[0] = '\0';/* Concatena as strings */
strcat(str, str1);
strcat(str, str2);
strcat(str, str3);
strcat(str, str4);/* Apresenta o resultado */
printf("\n\n Resultado: %s\n",str);
}-------------------------------------------------------
/* Le 4 strings: Versao 2 ----------------------------*/
#include <stdio.h>
#include <string.h>
#define TAM 15
#define MAX 4
main()
{
char palavra[TAM], frase[TAM*MAX];
int i;
/* Inicializa a string frase */
frase[0] = '\0';printf("\n\n Digite 4 strings, teclando <ENTER> ao final de cada uma:\n");
/* Le todas as strings */
for (i=0; i<MAX; i++)
{
gets(palavra);
strcat(frase, palavra);
}/* Apresenta o resultado */
printf("\n\n Resultado: %s\n",frase);
}
O que imprime o programa a seguir? Tente entendê-lo e responder. A seguir, execute-o e comprove o resultado.
# include <stdio.h>
main()
{
int t, i, M[3][4];
for (t=0; t<3; ++t)
for (i=0; i<4; ++i)
M[t][i] = (t*4)+i+1;
for (t=0; t<3; ++t)
{
for (i=0; i<4; ++i)
printf ("%3d ", M[t][i]);
printf ("\n");
}
}
Solução:
Este programa carrega uma matriz bidimensional 3x4 com os números de 1 a 12, e escreve-os
linha por linha. M[0][0]=1, M[0][1]=2, M[0][2]=3, M[0][3]=4, M[1][0]=5 e assim por
diante. O valor de M[2][3], última posição, sera' 12.
Comentários:
Matrizes bidimensionais são armazenadas em uma matriz linha-coluna, onde o primeiro
índice indica a linha e o segundo, a coluna. O índice mais a direita varia mais
rapidamente que o índice mais a esquerda quando acessamos os elementos da matriz na ordem
em que eles estão realmente armazenados na memória.
Exercício 1:
#include <stdio.h>
#include <string.h>
#define TAM 20
main ()
{
char s[TAM];
int c, i, j;
for (i=0, j=strlen(s)-1; i<j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
Solução:
A função inverte a string fornecida. Assim, obtém-se:
a) "Ah! Eu to maluco!" => "!oculam ot uE
!hA"
b) "5*4+(3^3)+4*5" =>
"5*4+)3^3(+4*5"
Comentários:
- a função começa com i no início e j no final da string. A medida que i
incrementa e j decrementa, o conteúdo das posições i e j é
trocado, resultando na string invertida.
- repare que a função é válida para strings de comprimento par ou ímpar: Se for par,
existirão 2 elementos medianos, que serão trocados; se for ímpar, ao atingir o elemento
mediano, a string já estará toda invertida.
- toda string é terminada com \0 (caracter nulo), que não é contado pela função
strlen(). Se uma string s possui n caracteres (descontando o \0), strlen(s)
= n, e existirão elementos no string de s[0] ate s[n-1].
Curso de C do CPDEE/UFMG - 1996-1999