ASPER
UNIBRATEC

Gabarito

Lista de Exercícios 1: Aula 1 e Aula 2


Exercício 1:
Enunciado:

O que faz o seguinte programa?

#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
printf("%d",x);
return (0);
}


Solução
A primeira linha do programa inclui o arquivo de cabecalho stdio.h. Este arquivo contem a declaracao
das funcoes 'scanf' e 'printf'. No início do programa e' declarada a variavel 'x', inteira. 'scanf'
lê x pelo teclado e printf imprime o valor lido. Na execucao o programa ira esperar ate que o
usuario entre com um numero, e exibira em seguida este numero.

Exercício 2:
Enunciado:

Escreva uma função que some dois inteiros e retorne o valor da soma.
O objetivo neste exercício é apenas escrever a função. Porem, para testa-la, teremos tambem que
escrever um programa principal que use a funcao.


Solução
A função soma2 fica:
int soma2(int a, int b) /* Retorna a soma dos inteiros a e b */
{
int resultado;
resultado = a+b;
return resultado;
}
ou de uma forma mais pratica..
int soma2(int a, int b) /* Retorna a soma dos inteiros a e b */
{ /* Versao 2 */
return (a+b);
}

Para testar a funcao usamos:
int main( )
{
int i, j, k;
i = 3;
j = 7;
k = soma2(i , j);
printf(" O valor da soma e' : %d ", k);
return 0;
}

Exercício 3:
Enunciado

a) Escreva um programa que leia um caracter digitado pelo usuario, imprima o caracter digitado e o
codigo ASCII correspondente a este caracter.


Solucao:
#include <stdio.h>
int main()
{
char ch;
printf("\nDigite um caracter: ");
scanf("%c",&ch);
printf("\nCaracter digitado: %c, Codigo ASCII: %d", ch, ch);
return 0;
}

Note o uso de %c para imprimir o caracter como caracter e de %d para imprimir o codigo ASCII (isto
e, o caracter como um numero inteiro) do caracter.

b) Escreva um programa que leia duas strings e as coloque na tela. Imprima tambem a segunda letra de
cada string.

Solução
#include <stdio.h>
int main()
{
char s1[25], s2[25];
printf(" Digite a primeira string: ");
gets(s1); /* Le string 1*/
printf("\n Digite a segunda string: ");
gets(s2); /* Lê string 2*/
printf("\n\n As strings lidas sao:\n %s \n %s", s1, s2); /* Imprime as strings*/
printf("\n\n A segunda letra da primeira string e': %c", s1[1]);
printf("\n A segunda letra da segunda string e': %c ", s2[1]);
return 0;
}

Exercicio 4:
Enunciado

i) Explique porque está errado fazer
if (num=10) ...
O que irá acontecer?
ii) Escreva um programa que coloque os números de 1 a 100 na tela na ordem inversa (começando em 100
e terminando em 1).

iii) Escreva um programa que leia uma string, conte quantos caracteres desta string são iguais a
'a' e substitua os que forem iguais a 'a' por 'b'. O programa deve imprimir o número de caracteres
modificados e a string modificada.


Solução
i) Não está errado, mas o resultado não será o desejado. A expressão entre parênteses, ao invés de
funcionar como condicional (desejado) irá funcionará como uma atribuição, e retornará o valor
atribuído (10). Este número é diferente de zero e, assim, a condição será sempre verdadeira. A forma
correta seria fazer
if (num==10) ...
Esta é a forma correta para se realizar este teste.
ii)
#include <stdio.h>
main()
{
int i;
for (i=100; i>0; i=i-1)
printf("%d ", i);
}
iii)
#include <stdio.h>
int main ()
{
char string[100]; /* String, ate' 99 caracteres */
int i, cont;
printf("\n\nDigite uma frase: ");
gets(string); /* Le a string */
printf("\n\nFrase digitada: %s", string);
cont = 0;
for (i=0; string[i] != '\0'; i=i+1)
{
if ( string[i] == 'a' ) /* Se for a letra 'a' */
{
cont = cont +1; /* Incrementa o contador de caracteres */
string[i] = 'b'; /* e substitui 'a' por 'b' */
}
}
printf("\nNumero de caracteres trocados = %d\nNova string = %s", cont, string);
return 0;
}