Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

PAU LO SCHRE I N ER
I N T RODUÇÃO À PROGRA -
MAÇÃO
I N S T I T U TO DE I N FORMÁT I C A - U F RGS
Copyright © 2012 Paulo Schreiner
published by instituto de informática - ufrgs
http://http://www.inf.ufrgs.br/ pschreiner/
Esta obra está livre de restrições de direitos autorais conhecidas.
0.3 July 2012
Contents
Aula 01 - Algoritmos, Programas e Linguage C 9
Aula 02 - Laboratório 13
Aula 03 - Introdução à algoritmos e Linguagem C 21
Aula 04 - Laboratório 29
Aula 05 - if 33
Aula 06 - Laboratório 39
Aula 07 - While, do while 41
Aula 08 - Laboratório 45
Aula 09 - For 47
Aula 10 - Laboratório 49
Vetores unidimensionais 51
4
Aula 12 - Laboratório - Arranjos 53
Aula 13 - Matrizes 57
Aula 14 - Laboratório - Matrizes 59
Aula 16: exercícios de funções 61
Aula 18: Laboratório de Funções e Ponteiros 67
Aula 20: Exercícios sobre Arquivos 71
Aula 22: Exercícios sobre estruturas 75
Aula 24: Exercícios sobre strings 77
Erros comuns 79
Respostas 81
5
Aos alunos que contribuiram com respostas
de exercícios e correções: Kazuo Wottrich,
Andressa Martins, Fábio Sangali, Brunno
Frantz, Mauricio Piovezan
Introdução
Está apostila está em desenvolvimento e tem como objetivo servir de
referência para a disciplina de introdução à programação.
Aula 01 - Algoritmos, Programas e Linguage C
Introdução
A tarefa de programação consistem instruir um computador a re-
alizar uma tarefa. A forma de fazer isto é através de passos, ou pe-
quenas instruções que, quando realizadas em conjunto, levam ao
resultado adequado.
Algoritmo
Chamamos de algortimo1 uma série de passos que devem ser real- 1 Não existe uma definição formal de o
que é um algoritmoizados para resolver um problema. Normalmente, um algoritmo tem
uma entrada e uma saída. Um exemplo de um algoritmo é a soma
de dois números no sistema decimal. Para somar dois números,
de qualquer magnitude, precisamos apenas saber as somas das
unidades e os passos do algoritmo. Soma-se unidade com unidade,
dezena com dezena, etc, sempre cuidando dos resultado que são
maiores do que 10. Neste exemplo, os números a serem somados são
a entrada do algoritmo, e a saída e o resultado da soma deles.
Outros exemplos de algoritmos poderiam ser uma receita de bolo,
instruções para chegar num restaurante, instruções para montar um
móvel. Uma característica importante de um algorítmo é que ele é
auto-suficiente, ele não exige nenhum conhecimento extra de quem
o executa, e os parâmetros devem ser objetivos. Por exemplo, uma
receita que contenha uma instrução como "Coloque água morna" não
é um bom algoritmo, pois depende de quem o está aplicando saber o
que é água morna. É 45 graus? 30? 70?
O ser humano é dotado de bom senso (alguns pelo menos), o que
permite que a gente comunique instruções em pseudo-algoritmos,
onde grande parte da informação fica sub-entendida. Se tem algo
que um computador não tem é bom senso, por isso os algoritmos
que vamos "ensinar" ao computador precisar ter passo muito bem
definidos e formais.
10 introdução à programação
Programa
Um programa é a implementação de um algoritmo no computador.
Um algoritmo representa a estratégia para resolver um problema, um
programa executa esta estratégia no computador.
Linguagens de programação
O computador é, na verdade, uma criatura bem primitiva. Ele possui
funcionalidades como somar dois número, subtrair, etc. Toda essa
informação porém está codificada. Para facilitar o desenvolvimento
de programas, foram criadas linguagens de programação.
Linguagens de programação são linguagens formais, nas quais
podemos escrever programas. São um meio termo entre um algo-
ritmo em português (inglês, no caso) e a codificação binária de um
programa de computador. Um algoritmo expresso em uma lin-
guagem de programação precisa ser compilado, ou seja, traduzido
para a linguagem interna do computador.
Linguagem C
O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-
o pela primeira vez usando um DEC PDP-11 rodando o sistema op-
eracional UNIX2. O C é derivado de uma outra linguagem: o B, cri- 2 O sistema operacional Linux, muito
popular em certos públicos, foi baseado
no UNIX
ado por Ken Thompson. O B, por sua vez, veio da linguagem BCPL,
inventada por Martin Richards.
O C é uma linguagem de programação genérica que é utilizada
para a criação de programas diversos como processadores de texto,
planilhas eletrônicas, sistemas operacionais, programas de comuni-
cação, programas para a automação industrial, gerenciadores de ban-
cos de dados, programas de projeto assistido por computador, pro-
gramas para a solução de problemas da Engenharia, Física, Química
e outras Ciências, etc ...
Estudaremos a estrutura do ANSI C3, o C padronizado pela ANSI. 3 Apesar disto, o foco principal será nas
técnicas genéricas de programaçãoVeremos ainda algumas funções comuns em compiladores para al-
guns sistemas operacionais. Quando não houver equivalentes para as
funções em outros sistemas, apresentaremos formas alternativas de
uso dos comandos.
aula 01 - algoritmos, programas e linguage c 11
Exercícios
No papel
1. Escreva um algoritmo para a soma de dois números inteiros pos-
itivo, representados no sistema decimal. Suponha que quem vai
executar o algoritmo sabe apenas somar 2 número de um dígito.
2. Idem para subtração.
Aula 02 - Laboratório
Introdução
O objetivo deste laboratório é se familiarizar com o ambiente de
desenvolvimento C. Não é necessário entender tudo o que está acon-
tecendo. A troca de experiência entre colegas é muito recomendada,
porém é sugerido que, caso seja feito em dupla, cada um “digite”
pelo menos alguns códigos, para ir pegando prática.
Criando um projeto no codeblocks
Figure 1: Tela inicial do CodeBlocks.
Project title é o nome do seu projeto(o que você desejar)
Folder to create project in é a pasta que você vai criar o projeto. É
aconselhado a vocês criarem uma pasta para ficar tudo bem orga-
nizado.
Project file name por padrão o codeblocks preencheu o nome do pro-
jeto como "seu título".cbp,a terminação .cbp significa(codeblocks
project) e é uma extensão que só o codeblocks conhece. É o ar-
quivo principal onde ficará armazenado tudo sobre o projeto.
14 introdução à programação
Figure 2: Vá em File/new/Project
Figure 3: Escolha a opção “Console”.
aula 02 - laboratório 15
Figure 4: Escolha C.
Figure 5: Configurações manuais (no
texto).
16 introdução à programação
Resulting filename Irá fornecer o resultado de onde seu arquivo ficará
armazenado,no exemplo está dentro do c: na pasta codeblocks e
ele mesmo criou a pasta do projeto onde ficará todos os arquivos
relacionados ao projeto(programa).
Figure 6: Deixa como está e prossiga.
Figure 7: Tela do projeto.
aula 02 - laboratório 17
Tarefas - em Aula
Tarefa 1
• Abra o Codeblocks4 e crie um novo projeto. 4 aqui e em no decorrer do documento,
será utilizado Codeblocks para se
referir ao editor e compilador C, pois
é o adotado no curso. No entanto, se
o usuário preferir utilizar outro editor
e compilador ANSI C da sua escolha e
no sistema operacional de sua escolha,
pode fazê-lo sem nenhum problema
• Digite o texto do programa listado no arquivo main.c que o code-
blocks gerou5.
5 Dentro de sources
• Compile e rode o programa6
6 O botão "Play" do Codeblocks faz isso
• Deverá aparecer uma tela de terminal escrito "Bem vindos ao
mundo C".
• O que faz o comando printf()?
Listing 1: Programa 1
1 int main() {
2 printf("Bem vindos ao mundo C\n");
3
4 system("PAUSE");
5 return 0;
6 }
Tarefa 2
• Crie um novo projeto
• Insira o código do programa 2 e execute-o.
• Qual a relação entre nome e os caracteres %s? 7 7 Dica: mude a posição do %s dentro
das aspas
• O \n não aparecena tela. O que ele faz então? 8 8 Dica: Coloque mais \n dentro de
lugares deferentes dentro das aspas e
rode o programa
Listing 2: Programa 2
1 int main() {
2
3 char nome[20] = "Paulo";
4 printf("Ola %s\n", nome);
5
6 system("PAUSE");
7 return 0;
8 }
Tarefa 3
• Crie um novo projeto
• Insira o código do programa 3 e execute-o.
18 introdução à programação
• O que faz o %i?
• Você consegue fazer o programa imprimir o resultado de outras
contas? 9 9 Operadores aritméticos: +, -, *, /
Listing 3: Programa 3
1 int main() {
2
3 char nome[20];
4 printf("12 + 17 = %i\n", 12 + 17);
5
6 system("PAUSE");
7 return 0;
8 }
Tarefa para casa
A tarefa consiste em compilar um programa C em casa ou em algum
laboratório de informática que você tenha acesso. Se for em casa, será
necessário instalar o CodeBlocks, disponível em http://www.codeblocks.org/downloads/26.
10 10 No caso do Windows, baixe a versão
com o mingw, caso contrário você não
conseguirá compilar programas
Alternativa:
Para quem já tem experiência com algum outro ambiente de de-
senvolvimento C, em Linux, Windows, ou Mac, pode usar sem prob-
lemas. Importante é conseguir compilar código C fora da sala de
aula.
Desafios
Desafio 1
• Crie um projeto com o programa Exemplo desafio 1
• Modifique esse programa para solicitar a idade mas imprimir o
ano de nascimento da pessoa. Considere que ela ainda não fez
aniversário.
Listing 4: Exemplo desafio 1
1 int main() {
2
3 char nome[20];
4 char idade[5];
5 printf("Digite seu nome: ");
6 gets(nome);
7 printf("Digite sua idade: ");
8 gets(idade);
aula 02 - laboratório 19
9 printf("%s tem %i anos\n", nome, atoi(idade));
10
11 system("PAUSE");
12 return 0;
13 }
Aula 03 - Introdução à algoritmos e Linguagem C
Estrutura básica de um programa em C
Um programa em C deve seguir uma estrutura básica para que o
compilador possa entender e transformar em código executável.
Listing 5: Estrutura básica
1 diretivas para o pre-processador
2 declaracao de variaveis globais
3 int main()
4 {
5 declaracao de variaveis locais da funcao main
6 comandos da funcao main
7 }
Os componentes da estrutura básica são:
diretivas para o pré-processador a principal diretiva de pré-processador
é a diretiva #include 11, que serve para “incluírmos” no programa 11 Todas as diretivas de pré-processador
começam com #funções especializadas, como funções matemáticas, de texto ou
mesmo funções criadas por outros programadores. Para as funções
que vamos utilizar, o CodeBlocks reconhece e não precisamos usar
a diretiva #include.
declaração de variáveis globais pode-se declarar variávais que são
visíveis no programa inteiro. Em 99,9% dos casos isto é uma má
ideia.
função main() C trabalha com o conceito de funções, e a função
main() é especial pois é ela que é executada quando o programa se
inicia12. O que está entre chaves é o corpo da função e será execu- 12 Veremos mais sobre funções no
capítulo XXXtado.
declaração de variáveis locais da função main aqui podemos declarar
variáveis que serão visíveis apenas na função main.
comandos da função main comandos da linguagem C.
13 13 Comentários em C: todo o texto
que segue // até o final da linha é
considerado comentário e é ignorado
pelo compilador, serve apenas para
auxiliar o programador
22 introdução à programação
Listing 6: Estrutura básica - Exemplo
1 int main()
2 {
3 printf ("Alo mundo!"); //mostra
4 system("PAUSE"); //fica parado
5 }
O que é uma variável? Uma variável é um nome pelo qual podemos
nos referir à uma determinada informação. Por exemplo, os trechos
de código 1 e 2 abaixo são equivalentes:
Listing 7: Trecho 1
1 printf("Um numero qualquer: %i\n", 42);
Listing 8: Trecho 2
1 int numero = 42;
2 printf("Um numero qualquer: %i\n", numero);
Uma vantagem de utilizar variáveis em vez do próprio valor é
quando queremos usar um mesmo valor várias vezes, podemos
definir a variável e utilizá-la em todos os lugares que se referen-
ciam àquele valor. Desta forma, temos um benefício indireto, que se
quisermos mudar o valor, precisamos mudá-lo em somente um lugar.
Outra vantagem é que podemos dar nomes descritivos para as var-
iáveis, de forma que o nosso código se torne mais fácil de entender.
Atribuições
No entanto, a principal utilidade de variáveis é que elas podem re-
ceber valores dinâmicos durante a execução, permitindo-nos realizar
atividades interessantes com elas. Um exemplo é no trecho de código
a seguir, que lê dois números inteiros do teclado e retorna coloca a
soma deles em outra variável.
1 int num1, num2, soma;
2 scanf("%i", &num1); /* le um numero */
3 scanf("%i", &num2); /* le outro numero */
4 soma = num1 + num2;
5 printf("Soma: %i\n", soma);
Principais tipos de dados em C
C é uma linguagem tipada, isso quer dizer que expressões em C pos-
suem um tipo de dados. Como variáveis são expressões, elas também
possuem um tipo associado. Os principais tipos de dados em C são
inteiros, reais 14 caracteres e texto15. 14 Na verdade, um número em ponto
flutuante. Que isso quer dizer? Simpli-
ficadamente, quer dizer que o número
tem uma precisão finita, não é possível
representar um terço num float.
15 Na verdade, o texto é um tipo com-
posto de dados, no caso, um arranjo de
caracteres. Mais sobre isso adiante
aula 03 - introdução à algoritmos e linguagem c 23
Os tipos de dados possuem uma forma literal de se representar um
dado deste tipo num programa em C.
Tipo no C Descrição Declaração Literal Subst
int Um número inteiro, positivo ou negativo int x; 12 "%i"
float Um número real (quase) float x; 12.0 "%f"
char Um caractere char x; ’c’ "%c"
string Um texto char x[20]; "texto" "%s"
Declaração de variáveis
Antes de podermos utilizar uma variável, precisamos declará-la.
Isto é normalmente feito no ínicio de um função16. As variáveis são 16 Por enquanto, a main()
declaradas em uma linha, começando com o tipo da variável seguido
de um ou mais nomes separados por vírgula, terminado por ponto e
vírgula.
Listing 9: Exemplos de declaração de variável
1 int num1, num2, soma;
2 float preco;
3 unsigned int idade;
Nomes de variáveis podem conter letras, números e o sinal de
“underscore” (_), mas não podem começar por números. As variáveis
quando declaradas não possuem nenhum valor associado17, por isso, 17 Na verdade, elas possuem um valor,
mas não há nenhuma garantia sobre
ele. Alguns compiladores de C colocam
0 em todas as variáveis, outros simples-
mente deixa um “lixo” qualquer (os
dados que estavam naquela posição de
memória
antes de utilizá-las, precisamos atribuir um valor. Isso pode ser feito
utilizando o comando de atribuição ou um comando de entrada de
dados.
Expressões
Operações combinam uma ou mais expressões para formar uma
nova expressão. Lembre-se que uma expressão é algo que possui um
“valor” 18. Então são exemplos de expressões: 18 Uma variável sozinha é uma ex-
pressão, um literal é uma expressão,
etcListing 10: Exemplos de expressões
1 1
2 1 + 1
3 num /* se num eh uma variavel */
4 2 + 3
5 (2 + 3) * 5
Operações numéricas
Expressões numéricas podem ser combinadas usando operadores
numéricos, com os quais vocês já devem estar familiarizados:
+ soma 2 números
24 introdução à programação
- (binário) subtrai o segundo número do primeiro
- (unário) inverte o sinal do número
* multiplica dois números
/ divide o segundo número pelo primeiro
% função modulo, somente para inteiros, o resultado é o resto da
divisão do primeiro número pelo segundo.
Os operadores numéricos seguem as regras de precedência com as
quais estamos acostumados, mas na duvida deve-se utilizar parênte-
ses.
As operações númericas podem utilizar tanto números inteiros,
como números reais, como misturá-los. Porém, o resultado de uma
operação entre inteiros será sempreum inteiro, o resultado de uma
expressão com um inteiro e um real será sempre um real.
Listing 11: Exemplos de operações aritméticas
1 1 + 1 /* 2, inteiro */
2 1.0 + 1 /* 2.0, float */
3 1/2 /* 0, int */
4 1.0/2 /* 0.5, float */
5 1/2*2.0 /* 0.0, float */
Operações lógicas (booleanas)
Operadores entre valores numéricos que geram um valor booleano
(verdadeiro ou falso).
Listing 12: Exemplo de uso de operação lógica
1 if(1 < 2) {
2 printf("verdadeiro");
3 }
< estritamente menor
<= menor ou igual
> estritamente maior
>= maior ou igual
== valores são iguais19 19 Importante! Cuidado para não
confudir = com ==. = é o comando de
atribuição, que faz uma variável receber
um determinado valor, == é um teste,
que compara duas variáveis
!= valores são diferentes
Os operadores lógicos numéricos geram um valor booleano a
partir de valores numéricos. No entanto, podemos também combinar
expressões booleanas através dos operadores booleanos.
aula 03 - introdução à algoritmos e linguagem c 25
&& verdadeiro se ambos valores forem verdadeiros
|| verdadeiro se um dos valores for verdadeiros
! verdadeiro se o valor for falso, e falso se o valor for verdadeiro
Funções
Além das operações primitivas, em C possuímos também funções.
Funções aceitam 0 ou mais operandos e executam uma operação ou
retornam um valor. Funções que retornam um valor são expressões
e podem ser usadas em qualquer lugar onde uma expressão daquele
tipo é necessária.
Vamos descrever funções da seguinte forma
1 int atoi(char[] texto);
Neste caso int é o tipo da expressão, ou seja, o resultado da função
é um inteiro, e ela pode ser usado em qualquer lugar que precise de
um inteiro. char[] é o tipo de dados to primeiro argumento desta
função20. 20 se tivéssemos mais, seriam separados
por vírgulaO uso da função poderia ser int x = atoi("18");.
Função Descrição
int ceil(float x) Arredonda o número real para cima; ceil(3.2) é 4
int floor(float x) Arredonda o número real para baixo; floor(3.2) é 3
float sqrt(float x) Raiz quadrada de x
float pow(float x, float y) Calcula x elevado à potência y
Entrada e saída
O C possui funções especiais de entrada e saída de dados a partir do
teclado.
A função de saída principal é printf(). O printf possui um argu-
mento obrigatório, um texto, que será exibido na tela. Além disso, o
printf aceita argumentos opcionais que, combinados com expressões de
controle dentro da string serão substituidos. Exemplos deverão deixar
mais claro:
1 int x;
2 float y;
3
4 x = 2;
5 float = 3.4;
6
7 printf("Teste") /* => Teste */
8 printf("Teste %s") /* ERRO! */
9 printf("Teste %s", "teste2"); /* => Teste teste2 */
10 printf("%i %s %f", x, "+", y) /* 2+3.4 */
26 introdução à programação
11 printf("%i %s %f", y, "+", x) /* ERRO! Tentando substituir int por
float e vice versa */
Os argumentos são substituídos em ordem, e devem ter o tipo
correto.
A principal função de entrada do C é o scanf(). O uso dele é simi-
lar ao do printf():
1 char nome[20];
2
3 scanf("%s", &nome);
Após a execução deste comando, a variável nome conterá o texto
que foi digitado. O scanf pode ser usado também para ler números e
já convertê-los no tipo certo:
1 float x;
2 int y;
3
4 scanf("%i", &y);
5 scanf("%f", &x);
Importante! Ao usar o scanf(), a variável deve ser precedido por
um e comercial.
Lembre também que números reais devem usar o ponto onde nós
utilizaríamos a vírgula.
Exercícios
1. Qual o valor das seguintes expressões?21 21 Respostas no capítulo de respostes,
seção 3
a. 1 + 1
b. 3*9
c. 2-1*9
d. (2-1)*9
e. (2*(4/(1+1)-3)*5
2. Qual o valor das seguintes expressões (verdadeiro ou falso)?
a. 1 == (2-1)
b. 1 < (2-1)
c. (1 == 1) && ((4/2) > 2)
d. (1 == 1) || ((4/2) > 2)
e. ((3>2) && (4 < 3)) || ((2 <= 2) && ((2>1) || (1==1)))
3. Qual o tipo e resultado das seguintes expressões?
a. 1 + 2*0.5
b. 1/2
aula 03 - introdução à algoritmos e linguagem c 27
c. 1.0/2
4. Construa um programa que calcule a quantidade de latas de
tinta necessárias e o custo para pintar tanques cilíndricos de com-
bustível, onde são fornecidos a altura e o raio desse cilindro.
Sabendo que: - a lata de tinta custa R$20,00 - cada lata contém 5
litros - cada litro de tinta pinta 3 metros quadrados.
e que: Área do cilindro = 2 vezes a área da base + circunferencia
da base vezes a altura
e que raio e altura são dados de entrada.
Aula 04 - Laboratório
Introdução
Esta aula trata sobre variáveis em C, como declará-las, como utilizá-
las, etc.
Vamos lembrar da estrutura básica de um programa em C.
1 int main(int argc, char **argv) {
2 /* um comentario qualquer */
3
4 printf("Algum texto");
5
6 }
Exercícios
Vamos relember um pouco a aula anterior. Para definirmos varíaveis,
devemos incluir o tipo da variável, seguido por um ou mais nomes
de variável:
1 int numero; /* declara um inteiro */
2 float raiz; /* declara um numero em "ponto flutuante" (real) */
3 unsigned int graus_kelvin; /* inteiro sem sinal (positivo) */
Para obter um número inteiro do teclado existem várias maneiras,
uma delas é utilizar a função scanf da seguinte forma:
1 scanf("%i", &num); /* variavel int num recebe valor digitado */
Lembre também que para atribuir um valor a uma variável, uti-
lizamos o operado de atribuição =.
1 num = 12; /* num recebe o valor 12 */
Exercício 1
Escreva um programa em C que leia dois números do teclado, ar-
mazene a soma deles em uma variável temporária e depois mostre o
resultado na tela.
30 introdução à programação
Exercício 2
Escreva um programa em C que leia dois números do teclado e
mostre na tela se os dois números são iguais, ou se o primeiro é
maior ou menor que o segundo.
Dica: utilize o comando if em conjunto com os operadores de
comparação vistos em aula, p.e:
1 if(12 < 20) {
2 printf("12 eh maior que 20");
3 /* o que esta entre chaves so eh executado */
4 /* se a condicao do if for verdadeira */
5 }
Exercício 3
Escreva um programa em C que calcule a área de um círculo. Para
isso, declare 3 variáveis do tipo float, pi, raio e resultado. Atribua a pi
um valor aproximado de pi (pode ser 3.14). Solicite do usuário o raio,
e armazene a área em resultado. Exiba a área na tela.
Para ler um número em ponto flutuante use scanf("%f", &raio); 22 22 não se esqueça de usar ponto no
lugar da vírgula.
Exercícios extra
Faça um programa para:
a . Mostrar na tela o produto entre 28 e 43.
b . Mostrar a média aritmética entre 3 números passados pelo
usuário.
c . Lê um número e mostra seu sucessor e seu antecessor na tela.
d . Lê dois números e mostra a soma. Antes do resultado, deverá
aparecer a mensagem: SOMA.
e . Lê um número e mostra a terça parte deste número.
f . Lê dois números e mostre os seguintes resultados:
I Dividendo
II Divisor
III Quociente
IV Resto 23 23 para calcular o resto de uma divisão,
utilize o operador MOD , em C: %
g . Leia 4 números e mostre a média ponderada, sabendo-se que os
pesos são respectivamente: 1, 2, 3 e 4.
aula 04 - laboratório 31
h . Lê o saldo de uma aplicação e imprima o novo saldo, consider-
ado o reajuste de 1%.
i . Entre com a base e a altura de um retângulo e mostre os resulta-
dos
I Perímetro (Perímetro é igual à soma dos 4 lados)
II Área (Área é igual à lado vezes lado)
j . Lê o raio de um círculo e mostre como saída o perímetro (2*pi*Raio)
e a área (pi*Raio**2).
k . Calcule e mostre a área de um triângulo (área é igual a (base x
altura) dividido por 2)
l . Calcule o valor de uma prestação em atraso, utilizando a fórmula:
PRESTAÇÃO = VALOR + (VALOR * (TAXA/100) * TEMPO).
m . Leia o numerador e o denominador de uma fração e transforme-
o em um número decimal.
n . Lê um valor de hora e informa quantos minutos se passaram
desde o início do dia.
o .Faça um programa que leia a idade de uma pessoa expressa em
anos, meses e dias e mostre-a expressa apenas em dias.
p . Faça um programa que leia dois valores nas variáveis A e B re-
spectivamente, troque o valor contido na variável A pelo valor
em B, e o valor em B pelo valor em A, isto é, imprimiremos A e B
com os valores trocados.
q . Faça um programa que leia cinco números inteiros, calcule e
escreva a soma, o produto e a média dos números lidos.
r . Faça um programa que leia dois valores inteiros (X e Y) e calcule
X na potência Y. Observação: utilizar a função matemática.
s . Faça um programa que leia A, B e C e calcule a seguinte fórmula:
(7*C+5*B) / (2*A*3), armazenando-a na variável Result.
t . Faça um programa que leia a idade de uma pessoa expressa em
dias e mostre-a expressa em anos, meses e dias.
u . Faça um programa que leia o número do funcionário, o número
de horas trabalhadas mensais, o valor que recebe por hora e o
número de filhos com idade menor de 14 anos. Calcular e escr-
ever o salário deste funcionário, sendo que cada filho menor de
14 anos acrescenta 10% do salário.
32 introdução à programação
v . O custo ao consumidor de um carro novo é a soma do custo
de fábrica com a percentagem do distribuidor e dos impostos
(aplicados ao custo de fábrica). Supondo que a percentagem
do distribuidor seja de 28% e os impostos de 45%, escrever um
programa em C que leia o custo de fábrica de um carro e escreva
o custo ao consumidor.
Aula 05 - if
Introdução
Uma das principais características de um programa de computador é
agir de formas diferentes dependendo de condições. Nós já vimos na
aula anterior o uso do comando if para executar um bloco de código
caso uma condição seja verdadeira. Vamos relembrar então o if:
1 if(x < y) {
2 scanf("%i", &z);
3 printf("x menor que y\n");
4 /* ... */
5 }
Comando IF
Vamos definir de uma maneira mais forma a sintaxe24 do comando 24 = forma
if. O comando if começa quando escrevemos a palavra-chave if. Após
o if, segue, entre parênteses, uma condição lógica ou booleana. Estes
parêntes não são opcionais! A condição lógica, dentre dos parên-
teses do if, pode ser tão complexa quanto se queira, contendo mais
parêntes para agrupamentos, mas não podemos esquecer dos parên-
teses do if que englobam a condição.
Após a condição, utilizamos um abre-chaves, para iniciar um
bloco de código. Dentro desse bloco de código associado ao if pode-
mos escrever qualquer código de C, inclusive outros if’s. Por fim,
encerramos o bloco do if com um fecha-chaves. Atenção: após o
fecha-chaves, não vai ponto e vírgula.
A semântica25 do comando if é muito simples: caso a condição 25 = significado
dentro dos parênteses seja verdadeira, o código no bloco associado ao
if será executado. Caso não seja verdadeira, ele não é executado.
Exemplo:
1
2 int idade = 20;
3 int acompanhado_por_maior = 1;
4
34 introdução à programação
5 if(idade >= 16) {
6 if((idade >= 18) || (acompanhado_por_maior == 1) {
7 printf("libera entrada\n");
8 }
9 if(idade >= 18) {
10 printf("ganha pulseira para bebida\n");
11 }
12 }
O que será imprimido caso idade = 17 e acompanhado = 0? Idade
= 16 e acompanhado = 1? Idade = 15 e acompanhado = 1?
Comando ELSE
O comando if pode ser acompanhado, opcionalmente, de um co-
mando else (senão). Exemplo:
1 if(x > y) {
2 printf("x maior que y\n");
3 }
4 else {
5 printf("x NAO eh maior do que y\n");
6 }
Sintaxe: o else aparece imediatamente após o fecha-chaves do if.
Ele é seguido por um bloco de código, ou seja, um abre-chaves, um
ou mais comandos C e um fecha chaves.
Semântica: O bloco de código associado ao else é executado sem-
pre que a condição do if for falsa. Ou seja, sempre ao menos um dos
blocos será executado.
Comando ELSE IF
O comando else if é uma espécie de “mistura” entre o if e o else.
Exemplo:
Sintaxe: um comando else if deve aparecer imediatamente após o
fecha chaves de um if ou de um outro else if. No mais, sua sintaxe é
igual à do if.
Semântica: o bloco de código associado ao else if será executado
somente se NENHUMA das condições (if, else if) anteriores foi ver-
dadeira, E a condição do else if é verdadeira.
Comando IF completo
Na verdade, os comandos if, else if e else fazem parte do mesmo
comando. O que acontece em C é que o programa vai testar se a
condição dentro do if (ou else if) é verdadeira. Caso seja, ele executa
aula 05 - if 35
Listing 13: Exemplo else if
1 int a, b, comando;
2
3 printf("1. Soma\n");
4 printf("2. Subtracao\n");
5 printf("3. Multiplicacao\n");
6 printf("4. Divisao\n");
7
8 printf("Digite a operacao matematica que voce quer: ");
9 scanf("%i", &comando);
10
11 printf("Digite o primeiro operando: ");
12 scanf("%i", &a);
13
14 printf("Digite o segundo operando: ");
15 scanf("%i", &b);
16
17 if(comando == 1) {
18 printf("Resultado: %i\n", a + b);
19 }
20 else if (comando == 2) {
21 printf("Resultado: %i\n", a - b);
22 }
23 else if (commando == 3) {
24 printf("Resultado: %i\n", a * b);
25 }
26 else if (commando == 4) {
27 printf("Resultado: %i\n", a / b);
28 }
29 else {
30 printf("Comando invalido! Digite um numero entre 1 e 4\n");
31 }
36 introdução à programação
o bloco associado e pula todos os else if’s e else que porventura ven-
ham a seguir. Caso a condição seja falsa, ele passa para o próximo
else if, ou se nenhum existir, para o else final.
Então o if completo é composto por um comando if, seguido de
zero ou mais else if’s, seguido de zero ou um else.
Comando Switch
O comando switch é uma forma mais avançada é complexa do if. 26 26 Tudo que pode ser feito com o co-
mando switch também pode ser feito
com Ifs encadeados. Considere esta
parte da apostila opcional, se quiser,
pule para os exercícios
Vamos ver um exemplo:
1 int a, b, comando;
2
3 printf("1. Soma\n");
4 printf("2. Subtracao\n");
5 printf("3. Multiplicacao\n");
6 printf("4. Divisao\n");
7
8 printf("Digite a operacao matematica que voce quer: ");
9 scanf("%i", &comando);
10
11 printf("Digite o primeiro operando: ");
12 scanf("%i", &a);
13
14 printf("Digite o segundo operando: ");
15 scanf("%i", &b);
16
17 switch(comando) {
18 case 1: printf("Resultado: %i\n", a + b);
19 case 2: printf("Resultado: %i\n", a - b);
20 case 3: printf("Resultado: %i\n", a * b);
21 case 4: printf("Resultado: %i\n", a / b);
22 default: printf("Comando invalido! Digite um numero entre 1 e 4\
n");
23 }
Sintaxe o comando switch aceita entre parênteses uma expressão
(normalmente uma variável) que seja um inteiro ou um caractere.
Após, dentro de um bloco de código, seguem uma série de comandos
case, seguidos de um literal (inteiro ou caractere e 2 pontos). Após
os 2 pontos, zero ou mais comandos C podem aparecer. Por fim,
podemos ter uma cláusula default, que será executada independente
de qualquer condição.
Semântica: o programa C vai comparar o valor de cada case,
em ordem, com o valor da expressão associada ao switch. Caso eles
sejam iguais, vai executar o código associado. O código associado ao
default é executado sempre.
Pergunta: qual o erro no programa acima?
aula 05 - if 37
break
O switch, ao contrário do else if, compara todos os valores, não para
após encontrar um que seja igual à expressão do switch. Desta forma,
o printf do default será sempre executado. A forma de resolver isso é
utilizando o comando break, que “pula” para fora do switch:
1 switch(comando) {
2 case 1: printf("Resultado: %i\n", a + b);
3 break;
4 case 2: printf("Resultado: %i\n", a - b);
5 break;
6 case 3: printf("Resultado: %i\n", a * b);
7 break;
8 case 4: printf("Resultado: %i\n", a / b);
9 break;
10 default: printf("Comando invalido! Digite um numero entre 1 e 4\
n");
11 }
Quando utilizar o switch
A principal vantagem do switch é que ele é mais rápido, e no caso
do exemplo acima, também ficamais clara intenção do programador.
No entanto, o swich é muito menos flexível que o comando if, e
nos computadores modernos a diferença de tempo de execução é
insignificante. Além disso, a necessidade de colocar os break’s depois
de cada caso do switch é um pouco confusa. Como o if faz tudo
que o switch faz e mais um pouco, a sugestão é dominar o uso do
comando if e utilizá-lo sempre. Quando a situação aparecer para usar
um switch, é bom saber que ele existe, mas não é necessário saber de
cor como usá-lo, pode-se consultar a documentação.
Exercícios
a. Escrever um algoritmo para ler dois valores numéricos e apresen-
tar a diferença do maior pelo menor.
b. Faça um algoritmo que leia um número e mostre uma mensagem
indicando se este número é par ou ímpar e se é positivo ou nega-
tivo.
c. Escrever um algoritmo para ler dois números. Se os números
forem iguais imprimir a mensagem: “Números iguais” e encerrar
a execução; caso contrário, imprimir o de maior valor, acompan-
hando pela mensagem “é o maior número”.
38 introdução à programação
d. Escrever um algoritmo para ler e imprimir três números. Se o
primeiro for positivo, imprimir sua raiz quadrada, caso contrário,
imprimir o seu quadrado; se o segundo número for maior que
10 e menor que 100, imprimir a mensagem: “Número está entre
10 e 100 – intervalo permitido”; se o terceiro número for menor
que o segundo, calcular e imprimir a diferença entre eles, caso
contrário, imprimir o terceiro número adicionado de 1.
e. Elabore um algoritmo que, dada a idade de um nadador, classifique-
o em uma das seguintes categorias:
I Infantil A: 5 a 7 anos;
II Infantil B: 8 a 10 anos;
III Juvenil A: 11 a 13 anos;
IV Juvenil B: 14 a 17 anos;
V Sênior: maiores de 18 anos.
f. Faça um algoritmo que leia duas notas obtidas por um aluno na
disciplina de Cálculo, o número de aulas ministradas e o número
de aulas assistidas por este aluno nesta disciplina. Calcule e
mostre a média final deste aluno e diga se ele foi aprovado ou
reprovado. Considere que para um aluno ser aprovado ele deve
obter média final igual ou maior a 6 e ter no mínimo 75% de
freqüência.
Aula 06 - Laboratório
Essa aula trata de comandos condicionais. Utilize a documentação da
aula anterior quando necessário.
Exercícios
Exercício 1
Escreva um programa em C que leia dois números e caso a soma
deles seja maior do que 20, imprima "Maior que 20". Se além da
soma maior que 20 os dois números forem menores ou iguais a 15
escreva na tela o resultado da multiplicação deles. IMPORTANTE:
Utilize um if externo para testar se a soma é maior que 20 e um if
interno para testar se ambos são menores ou iguais a 15.
Exercício 2
Que leia um número e calcule o quadrado deste número. Teste se o
quadrado calculado é menor do que 4, caso seja, imprima "Menor
que 4". Caso seja menor que 64, imprima "Menor que 64". Caso seja
menor que 1024, imprima "Menor que 1024". Caso seja maior ainda,
escreva "Número grande!" É obrigatório utilizar um único comando
if, seguido por zero ou mais else if’s e por um else.
Exercício 3
Leia 3 valores inteiros (X, Y, Z), determine e escreva o menor deles.
Exercício 4
Desenvolva um algoritmo que efetue a leitura de três valores para
os lados de um triângulo, considerando lados como: A, B e C. O
algoritmo deverá verificar se os lados fornecidos formam realmente
um triângulo (cada lado é menor que a soma dos outros dois lados).
Se for esta condição verdadeira, deverá ser indicado qual tipo de
triângulo foi formado: isósceles (dois lados iguais e um diferente),
40 introdução à programação
escaleno (todos os lados diferentes) ou eqüilátero (todos os lados são
iguais).
Exercício 5
A Secretaria de Meio Ambiente, que controla o índice de poluição,
mantém 3 grupos de indústrias que são altamente poluentes do meio
ambiente. O índice de poluição aceitável varia de 0,05 até 0,29. Se o
índice sobe para 0,3 as indústrias do 1º grupo são intimadas a sus-
penderem suas atividades, se o índice crescer para 0,4 as industrias
do 1º e 2º grupo são intimadas a suspenderem suas atividades, se
o índice atingir 0,5 todos os grupos devem ser notificados a par-
alisarem suas atividades. Faça um programa que leia o índice de
poluição medido e emita a notificação adequada aos diferentes gru-
pos de indústrias.
Exercício 6
Um vendedor necessita de um programa que calcule o preço total
devido por um cliente. O programa deve receber o código de um
produto e a quantidade comprada e calcular o preço total, usando a
tabela abaixo.
Código Preço Unitário
1001 R$ 5,32
1324 R$ 6,45
6548 R$ 2,37
987 R$ 5,32
7623 R$ 6,45
Exercício 7
Ler um número inteiro, e verificar se o número corresponde a um
mês válido no calendário e escrever o nome do mês, senão escrever
uma mensagem ‘Mês Inválido’.
Aula 07 - While, do while
Introdução
Um ponto em que o computador realmente é um excelente recurso
é em realizar operações relativamente simples, como somas, mul-
tiplicação uma grande quantidade de vezes. Para isso utilizamos
comandos de “laço”, ou no anglicismo, loops. Estes comandos per-
mitem a execução de um mesmo bloco de código repetidas vezes,
dependendo de uma condição.
Listing 14: While: imprimir de 1 a 10
1 int i = 1;
2 while(i <= 10) {
3 printf("%i\n", i);
4 i++;
5 }
Comando while
O comando while é o mais simples dos comandos de laço. A sintaxe
do while é igual à do if simples (sem else ou else if), com a diferença
que utilizamos a palavra chave while em vez de if. Vamos voltar ao
exemplo da listagem 1. Na linha 1, declaramos uma variável inteira
inicializada com o valor um. Na linha dois, especificamos o comando
while com uma condição, e associamos um bloco a ele (entre chaves,
linhas 3 e 4).
A semântica do while é bastante simples: ao chegar no início do
while, o computador ira testar a condição. Se esta for falsa, pula o
bloco associado ao while e continua a execução (a partir da linha
6). Se for verdeira, executa o bloco associado ao while e retorna ao
início do while, executando como da primeira vez (a partir da linha
2).
Note que dentro do bloco do while, estamos aumentando o valor
da variável i. O que aconteceria se não alterássemos esse valor?
42 introdução à programação
Listing 15: Loop infinito
1 while(i <= 10) {
2 printf("%i\n", i);
3 }
Listing 16: Fatorial de x
1 resultado = 1;
2 temp = 1;
3 while(temp <= x) {
4 resultado = resultado * temp;
5 temp = tempo + 1;
6 }
7 printf("%i! = %i\n", resultado);
Como o valor de i não muda, a condição vai continuar sendo
verdadeira: ou seja, o programa vai ficar “em loop”, imprimindo o
valor do i sem nunca sair do bloco do while. Devemos tomar cuidado
com essa situação.
Um exemplo do while
Um exemplo do while é calcular o fatorial de um número. Lem-
brando que o fatorial de 0 é 1, o fatorial de 1 é 1, o fatorial de 2 é 1*2,
o fatorial de 3 é 1*2*3, de 4 é 1*2*3*4 e assim por diante. De forma
genérica f at(x) = f at(x− 1) ∗ x. Como fazer isso utilizando um laço
while?
Do While
Algumas vezes queremos garantir que o código associado ao loop
while seja executado ao menos uma vez. Por exemplo, um programa
que espera entrada do usuário. Queremos que o usuário digite, por
exemplo, um número de 1 a 4, qualquer outro número é desconsid-
erado. Uma maneira elegante de fazer isto é utilizando o comando
do-while.
O do while é como se fosse um while “invertido”, com a condição
no final.
Sintaxe: a sintaxe do do-while é composta pela palavra-chave
do seguida de um bloco de código (abre chaves, comandos, fecha
chaves), seguido da palavra-chave while seguida de um condição
entre parênteses.
Semântica: o comando do while é executado da seguinte forma:
ao chegar no comando do while, o computador irá executar o bloco
aula 07 - while, do while 43
Listing 17: Exemplo Do-While
1 int opcao;
2 do {
3 printf("Escolhaum opcao:\n");
4 printf("1. Arquibancada\n");
5 printf("2. Cadeira Lateral\n");
6 printf("3. Cadeira Central\n");
7 printf("4. Sair\n");
8 scanf("%i", &opcao);
9 }
10 while((i > 4) || (i < 1));
associado ao do while. Ao final do bloco, a condição é testada, se
ela for verdadeira, o programa volta ao início do do while, se ela for
falsa, continua a execução na próxima linha.
Exercícios
Exercício 1
Faça um programa para mostrar os primeiros 30 números ímpares.
Exercício 2
Faça um programa para mostrar os primeiros n números ímpares,
onde n é fornecido pelo usuário.
Aula 08 - Laboratório
Essa aula trata dos comandos while, for e do while. Utilize a docu-
mentação da aula anterior quando necessário.
Exercícios
Exercício 1
Escreva um programa em C que calcule o fatorial de um número
qualquer lido do teclado.
Relembrando: fatorial de n é n ∗ (n− 1)(n− 2) . . . ∗ 2 ∗ 1.
Exemplo: fatorial de 6 6! = 6 ∗ 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1.
Exercício 2
Utilize o comando while para implementar a exponenciação. O pro-
grama deve solicitar ao usuário a BASE, que deve ser um número em
ponto flutuante, e o expoente, que deve ser um número inteiro.
Dica: exemplo de leitura e impressão de números em ponto flutu-
ante:
Exercício 3
Adpatação do exercício 1 e 2. Utilizando o do-while, solicite ao
usuário que digite um numero. Caso o número seja 1, calcule o fato-
rial de um nr qualquer (copiar e colar exercício 1) caso seja 2, calcule
uma exponenciação (exercício 2). Caso seja qualquer outro número,
solicita novamente um número.27 27 A solução deste problema ira requerer
um do-while para ler o número de
um a 2, e um if para ler e calcular a
exponenciação ou o fatorial, de acordo
com o que o usuário pediu.Listing 18: Ponto flutuante
1 float meu_numero;
2 scanf("%f", &meu_numero);
3 printf("Meu numero eh: %f\n", meu_numero);
46 introdução à programação
Exercício 4
Escreva um programa que mostre na tela a tabuada de 1 a 9. O pro-
grama deve imprimir algo do tipo: 28 28 Dica: utilize um while dentro de
outro
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
...
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
Exercício 5 - Para casa
Descreva em detalhes a execução do programa do exercício 1 para
uma entrada “3” ou seja, como o programa funciona se o usuário
digita a entrada 3.29 29 Questões deste tipo costumar cair em
avaliações. . .Exemplo
Na linha 1, o programa declara uma variável do tipo int com nome "num".
Na linha 2, o comando scanf lê um inteiro do teclado e armazena na variável num.
num = 3 (pois assumimos que o usuário digitará 3)
...
Na linha 10, ao entrar no for ...
Na linha 20 ao terminar a execução do for ... i = ?
e volta para a linha 10
Em especial a execução dentro do for deve ser explicada passo a
passo cada teste que e executado você deve dizer "testou se bla bla
bla" e deu verdadeiro, por isso ... Em cada lugar que uma variável
mudar de valor, você deve especificar isso.
Aula 09 - For
Comando for
O comando for é bastante útil e prático, mas ele pode causar alguma
confusão.
Sintaxe30: palavra-chave for seguida de abre parênteses, seguido 30 Sintaxe represnta a forma de um
comandode um comando de inicialização, uma condição e um comando
de atualização separados por ponto e vírgula, seguidos de fecha
parênteses, seguido de um bloco de código.
Listing 19: Sintaxe do for
1 for(inicialicacao; condicao; atualizacao) {
2 // bloco de codigo
3 }
Semântica31: ao chegar no comando for pela primeira vez, o com- 31 Semântica representa o significado
de um comando, ou seja, como ele
funciona
putador irá executar o comando de inicialização. Em seguida ele vai
testar a condição, se ela for falsa, pula o bloco de código associado.
Se ela for verdadeira, o bloco de código será executado e ao final
do bloco, o comando de atualização será executado e o programa
volta para linha inicial do for e continua como da primeira vez, com a
excessão de que o comando de inicialização não é mais executado.
Listing 20: For: imprimir de 1 a 10
1 int i;
2 for(i = 1; i <= 10; i++) {
3 printf("%i\n", i);
4 }
Perguntas para o exemplo “imprimir de 1 a x”. Qual o valor de i
ao final do for, e o que é impresso na tela se x for: 0, 1, 10, -1.
Listing 21: For: imprimir de 1 a x
1 int i,x;
2 scanf("%i", &x);
3 for(i = 1; i <= x; i++) {
4 printf("%i\n", i);
5 }
48 introdução à programação
Listing 22: Fatorial de x
1 int temp,resultado,x;
2
3 x = 1;
4 while(x != 0) {
5 printf("Nr (0 para sair): ";
6 scanf("%i", &x);
7 if(x == 0) { break; }
8 else if (x < 0) {
9 printf("Digite nr positivo\n");
10 continue;
11 }
12
13 resultado = 1;
14 temp = 1;
15 while(temp <= x) {
16 resultado = resultado * temp;
17 temp = temp + 1;
18 }
19 printf("%i! = %i\n", resultado);
20 }
Break e Continue
Podemos usar dois comandos especiais dentro de um while ou de
um for. O comando break encerra imediatamente o laço, pulando
para a primeira linha após o laço. Já o comando continue pula ao
ínicio do laço32. 32 Cuidado ao utilizar estes comandos,
pois podem deixar o código mais
confuso!
Aula 10 - Laboratório
Exercícios sobre o comando for: Respostas
Exercícios
Exercício 1
Escreva um programa que solicite um número ao usuário, o nome do
usuário e imprima na tela o nome do usuário n vezes.
Listing 23: Como ler um texto
1 char nome[20];
2
3 scanf("%s", &nome);
4 printf("O nome eh %s\n", nome);
Exercício 2
Escreva um programa em C que calcule o fatorial de um número
qualquer lido do teclado, utilizando o comando for.
Relembrando: fatorial de n é n ∗ (n− 1)(n− 2) . . . ∗ 2 ∗ 1.
Exemplo: fatorial de 6 6! = 6 ∗ 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1.
Exercício 3
Utilize o comando for para para implementar a exponenciação. O
programa deve solicitar ao usuário a BASE, que deve ser um número
em ponto flutuante, e o expoente, que deve ser um número inteiro. O
programa deve dar a resposta certa caso o usuário forneça a potên-
cia 0.
Exercício 4
Escreva um programa que mostre na tela a tabuada de 1 a 9. O pro-
grama deve imprimir algo do tipo. Utilize o comando for.
50 introdução à programação
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
...
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
Exercício 5: MMC
Escreva um programa que leia dois número e calcule o mínimo
múltiplo comum entre dois números. Você pode utilizar for ou while,
como preferir.
Lembre-se: o MMC é o menor natural tal que MMC%n1 == 0 e
MMC%n2 == 0.
Exemplo: MMC de 20 e 30 é.
Exercício 6 (extra)
Faça um programa que solicite ao usuário 10 números inteiros e,
ao final, informe a quantidade de números ímpares e pares lidos.
Calcule também a soma dos números pares e a média dos números
ímpares.
Exercício 7 (extra)
Uma determinada empresa armazena para cada funcionário (10 no
total) uma ficha contendo o código, o número de horas trabalhadas e
o seu nº de dependentes. Considerando que:
a. A empresa paga 12 reais por hora e 40 reais por dependentes.
b. Sobre o salário são feitos descontos de 8,5% para o INSS e 5%
para IR.
Faça um programa para ler o código, número de horas trabal-
hadas e número de dependentes de cada funcionário. Após a leitura,
escreva qual o código, os valores descontados para cada tipo de im-
posto e finalmente o salário líquido de cada um dos funcionários.
Vetores unidimensionais
TODO:
Aula 12 - Laboratório - Arranjos
Esta aula contém exercícios para vetores (arranjos) unidimensionais.
Relembrando: para declarar um vetor, coloca se o TIPO de dados
(int, float, etc), seguido do nome do vetor, seguido do número de
elementos máximo entre colchetes:
1 int vetor1[20];
2 float reais[45];
Cada elemento do vetor é acessado colocando seu índice entre
colchetes, onde o índice precisa ser um número inteiro ou uma ex-
pressão (por exemplo, uma variável de controle) inteira. Pode ser
usadoexatamente da mesma forma que uma variável normal:
1 scanf("%i", &vetor1[0]);
2 printf("%i\n", vetor[0]);
3
4 reais[44] = vetor[0] + 22.34;
IMPORTANTE: um vetor de 20 posições possui índices de 0 à
19, é sua responsabilidade garantir que nenhum acesso à posições
maiores que 19 seja feito!
Exercícios
Exercícios sobre vetores: Respostas
Exercício 1
Escreva um programa que leia 5 números inteiros no teclado e ar-
mazene eles num vetor. Imprima todos eles, e em seguida imprima
apenas os ímpares. Caso não haja nenhum ímpar, imprima uma frase
informando o fato.
Dica: para verificar se um número é ímpar, pode se usar o seguinte
if:
1 if((num % 2) == 1) {
2 // num eh impar
3 }
54 introdução à programação
Exercício 2
Modifique o programa anterior para usar um #define. Primeira-
mente, defina a constante MAX como 533: 33 Neste caso, MAX NÃO é uma var-
iável. Max é apenas outra forma de
escrever 5 neste programa, ou seja,
pode ser usado somente em locais onde
um literal inteiro poderia ser usado
1 define MAX 5
Após, substitua as ocorrências do valor "5" por MAX. Teste se o
programa continua funcionando. Se continuar funcionando, mudo o
valor de MAX para 10, e teste o programa de novo.
Exercício 3
Leia 7 temperaturas (valores válidos: –15.0º a 45.0º) (valores reais) e
armazene-as em um vetor. Conte a seguir quantos valores de temper-
aturas são superiores a 28.0 e escreva o vetor e essa informação. Não
aceite valores fora da faixa.
Exercício 4
Adapte o programa do exercício 3 da sequinta forma: primeiro,
leia as 7 temperaturas. Após, dentro de um do while, solicite qual
temperatura o usuário quer comparar. Depois, mostre quantos dias
foram mais quentes do que a temperatura que o usuário digitou. O
do while deve seguir perguntando temperaturas até o usuário inserir
como temperatura o valor 0.
Exercício 5
Faça um programa que leia as notas dos alunos de introdução a
programação e armazene as em 4 arrays: nota1, nota2, nota_trab,
media.
Após, informe quantos alunos tiraram C, B, A.
Mostre também a maior e menor nota das provas 1 e 2.
Exercício 6
Execute o seguinte programa:
1
2 void main(void) {
3 char nome[] = "Introducao a programacao";
4
5 int i = 0;
6 while(nome[i] != 0) {
7 printf("%c\n", nome[i]);
8 i++;
9 }
10 printf("\n");
aula 12 - laboratório - arranjos 55
11 }
O que ele faz? A partir desse programa, o que são strings (texto)
em C? O que faz o controle %c dentro do printf?
Desafio
Desafio 1
Adapte o exercício 4 para imprimir uma string de trás pra diante.
Desafio 2
Adapte o exercício 4 para imprimir somente as vogais.
Dica: para comparar um caractere individual, deve se usar ele
entre aspas simples, por exemplo:
1 if{nome[i] == ’a’) {
2 ...
3 }
Aula 13 - Matrizes
TODO:
Aula 14 - Laboratório - Matrizes
Esta aula contém exercícios para vetores (arranjos) multi-idimensionais.
Relembrando: para declarar arranjo multidimensional, coloca se o
TIPO de dados (int, float, etc), seguido do nome do arranjo, seguido
do número de elementos máximo para cada dimensão entre colchetes.
1 int arr[20][10];
2 float reais[10][5];
3 float cubo[10][10][10];
Cada elemento do vetor é acessado colocando seu índice entre
colchetes, onde o índice precisa ser um número inteiro ou uma ex-
pressão (por exemplo, uma variável de controle) inteira. Pode ser
usado exatamente da mesma forma que uma variável normal:
1 scanf("%f", reais[3][1]);
2 printf("%f\n", reais[3][1]);
Exercícios
Exercícios sobre matrizes: Respostas
Exercício 1
No final do semestre, um professor está preparando os conceitos
de uma turma com 20 alunos. Foram realizadas duas provas e um
trabalho extra-classe, com notas entre 0 e 10, podendo ter deci-
mais. Cada uma das provas vale 40% e o trabalho 20% da nota final.
Fornecer: as 3 notas, a nota final e o conceito de cada um dos alunos
da turma. Fornecer também a média de cada uma das provas e do
trabalho. Tabela para conversão da nota final em conceito:
Se NF >= 9,0 conceito A
Se NF < 9,0 e NF >= 7,5 conceito B
Se NF < 7,5 e NF >= 6,0 conceito C
Se NF < 6,0 e NF >= 3,0 conceito R (prova de recuperação)
Se NF < 3,0 conceito D
60 introdução à programação
Dica: você pode começar testando com as notas de UM aluno,
usando um define e gerando uma matriz com somente uma linha.
Isso facilitará os testes. Após, você poderá simplesmente trocar o
valor do define.
Exercício 2
Dada uma matriz M (5 x 7), preenchê-la por leitura e mostrar: 34 34 Dica: comece com uma matriz 2 x 3,
usando #define. Implemente o primeiro
item. Teste. Se tiver funcionando, mude
os defines para 5 e 7 e teste de novo. Se
tudo der certo, volte os defines para 2
x 3 e repita o processo com o segundo
item.
(a) o maior elemento de cada linha da matriz;
(b) o maior elemento de cada coluna da matriz;
(c) a média dos elementos de cada coluna;
(d) o produto de todos os elementos diferentes de zero;
(e) quantos elementos são negativos;
(f) posição ocupada (linha-coluna) por um elemento cujo valor será
lido pelo programa.
Exercício 3
Uma cooperativa de agricultores coletou a temperatura mínima
diária de 10 locais de uma região ao longo do mês de agosto de 2009.
Digitar esses valores (números reais). Valores válidos: entre –10 e 40.
Mostrar para cada um dos 10 locais: as temperaturas fornecidas, a
temperatura mínima, a máxima e a média das temperaturas do local.
Mostrar também a temperatura mínima geral, a máxima geral e a
média geral da região.
Aula 16: exercícios de funções
Introdução
Esta aula contém exercícios para o uso de funções. Uma função em
C permite que a gente encapsule um trecho de código, de forma que
ele possa ser usado em várias partes do código. Isso ficará mais claro
com alguns exemplos:
O Exemplo 1 começa declarando uma função que não tem valor
de retorno nenhum, ou seja, ela não calcula nada, apenas imprime
asteriscos na tela, por isso o tipo de retorno void. Ela tem o nome
imprime_asteriscos e não recebe nenhum argumento, por isso os
parênteses vazios. No ponto do programa onde está a chamada para
a função, o comportamento do programa é simples: ele vai “pular”
para o início do bloco da função e executar os comandos ali contidos.
Ao terminar o bloco, irá pular para a linha seguinte à chamada da
função.
Vamos agora mudar a função imprime_asteriscos para receber
como parâmetro um número inteiro. Para isto, basta “declarar” a
variável dentro dos parênteses, como no Exemplo 2.
Repare que mudamos a função imprime_astericos de forma a
conter um for(). Uma função possui suas próprias variáveis, por
isso i tem de ser declarado e inicializado dentro da função. As var-
iáveis declaradas dentro dos parênteses podem ser acessadas dentro
do bloco da função, e terão o valor que foi passado na chamada da
função, neste caso, NUM_AST ou 15.
Vamos agora declarar uma função que retorna um valor em ponto
flutuante (Exemplo 3):
Utilizamos o comando return seguido do valor que a função deve
retornar, para retornar um valor. No caso, a função retornará um
float. Cada função pode ter vários parâmetros, mas somente um
retorno.
Exercícios
Exercícios sobre o comando for: Respostas
62 introdução à programação
Listing 24: Exemplo 1
1 void imprime_asteriscos() {
2 printf("********************\n");
3 }
4
5 int main(int argc, char **argv) {
6 char nome[] = "Porto Alegre";
7
8 imprime_asteriscos();
9 printf("%s\n", nome);
10 imprime_asteriscos();
11
12 return 0;
13 }
Listing 25: Exemplo 2
1 void imprime_asteriscos(int num) {
2 int i;
3 for(i = 0; i < num; i++) {
4 printf("*");
5 }
6 printf("\n");
7 }
8
9 int main(int argc, char **argv) {
10 char nome[] = "Porto Alegre";
11
12 imprime_asteriscos(15);
13 printf("%s\n", nome);
14 imprime_asteriscos(15);
15
16 return 0;
17 }
aula 16: exercícios de funções63
Listing 26: Exemplo 3
1 float multiplica(int num, float num2) {
2 float resultado;
3 resultado = num * num2;
4 return resultado;
5 }
6
7 int main(int argc, char **argv) {
8 char nome[] = "Porto Alegre";
9
10 int x;
11 float y, res;
12
13 printf("Digite um inteiro: ");
14 scanf("%i", &x);
15 printf("Digite um float: ");
16 scanf("%f", &y);
17
18 res = multiplica(x, y);
19
20 printf("O resultado eh %f\n", res);
21
22 /* uma funcao que retorna um valor eh uma expressao */
23 printf("2 * 2.5 = %f\n", multiplica(2, 2.5));
24
25 if(multiplica(3, 3) == 9) {
26 printf("Sucesso!\n");
27 }
28
29 return 0;
30 }
64 introdução à programação
Exercício 1
É opcional, mas sugerido que vocês escrevam os exemplos no code-
blocks e os executem, para ficar mais claro o que está ocorrendo.
Exercício 2
Criar um programa. Esse programa teve possuir uma função, que
não receberá nenhum parâmetro e retornara um int. Dentro desta
função, você pode usar um do-while para solicitar que o usuário dig-
ite um número inteiro maior ou igual a 0. Repita até que o usuário
finalmente digite um número de acordo. Quando isto acontecer
(quando sair do do-while), use o return para retornar o valor in-
serido.
Usa função que você criou dentro da main() para ler DOIS inteiros
positivos do usuário e imprimí-los na tela.
Exercício 3
Crie uma função que recebe dois parâmetros base e expoente e re-
torna um float com o resultado de base elevada a expoente. A base
deve ser um float e o expoente um inteiro. Escreva um programa que
use essa função. Importante! Os números devem ser lidos na main, e
impressos na main.35 35 A função irá apenas receber os
números como parâmetro e retornar o
resultado.
Exercício 4
Juntando os exercícios 2 e 3 e os exemplos, faça um programa que
leia do usuário um float qualquer e um inteiro positivo e mostre
o resultado do float elevado ao inteiro. Utilize também a função
imprime_asc() para a saída ficar mais “bonita”.
Exercício 4
Faça um programa que leia um float a e dois inteiros positivos x e z.
Ele deve calcular e mostrar na tela ax
z 36. 36 Lembre-se que você pode usar o
resultado de uma função como argu-
mento de outra (ou da mesma. . . )
Exercício 5
Escreva um programa que calcula a área de um círculo, utilizando
um função. A área de um círculo de raio r é pi ∗ r2.
aula 16: exercícios de funções 65
Desafios
Desafio 1
Escreva uma função que leia do teclado um float e o retorne. Com
essa função e a função que retorna um int, modifique o programa do
exercício 3 para não utilizar NENHUMA variável no main().
Aula 18: Laboratório de Funções e Ponteiros
Exercícios sobre o comando for: Respostas
Exercícios
Exercício 1
Escreva uma função que inverta 2 número de ponto flutuante, ou
seja, ele deve receber como argumentos dois ponteiros para float, não
retornar nada, mas ao final de sua execução, os valores deverão estar
trocados. Faça um programa que utilize a função.
Exercício 2
Escreva uma função que recebe um vetor X(20) de reais (float), por
parâmetro, e retorna a soma dos elementos de X. Faça um programa
que use a função. IMPORTANTE! O vetor deve ser preenchido (via
scanf) na função main().
Exercício 3
Escreva uma função que recebe um vetor de inteiros e retorna o
maior elemento do vetor. Faca um programa que declare dois ve-
tores, um de tamanho 3, outro de tamanho 5, preencha eles lendo do
usuário e utilize a função para imprimir o maior elemento de cada
um dos vetores.
Exercício 4
Por que, no Programa A, não colocamos o e comercial na frente de s1 e
s2 no scanf? Por que o programa A não funciona como esperado?
Funções disponíveis em C
O ambiente de desenvolvimento do C possui uma série de funções
disponíveis para o uso. Já conhecemos as funções printf e scanf.
68 introdução à programação
Listing 27: Programa A
1
2 int main() {
3 char s1[100], s2[100]; /* string de 100 caracteres no maximo */
4
5 printf("Digite a primeira string: ");
6 scanf("%s", s1);
7
8 printf("Digite a segunda string: ");
9 scanf("%s", s2);
10
11 if(s1 == s2) {
12 printf("Iguais\n");
13 }
14 else {
15 printf("%s diferente de %s\n", s1, s2);
16 }
17
18 }
Vamos agora ver algumas outras.
Funções matemáticas: o C possui algumas funções matemáticas.
Algumas das principais funções:
1 double pow(double x, double y);
A função pow() recebe dois argumentos do tipo double (pode ser
float) e retorna xy.
1 double sqrt(double x);
retorna a raiz quadrada de x;
1 double log(double x);
retorna o logaritmo natural de x.
Funções de string: para utilizar as funções de tratamento de string
do C é preciso incluir o arquivo de cabeçalho string.h:
1 include <string.h>int main() ...
algumas das principais funções:
1 int strlen(char s[]);
retorna o comprimento da string s;
1 int strcmp(char s1[], char s2[]);
retorna 0 caso as duas strings sejam iguais.
aula 18: laboratório de funções e ponteiros 69
Exercício 5
Faça um programa que solicite 2 números reais do usuário. Imprima
na tela o resultado de elevar o primeiro ao segundo, de tirar a raiz
quadrada do primeiro, e do logaritmo natural do segundo.
Exercício 6
Para um triângulo retângulo, o teorema de Pitágoras diz “A soma
dos quadrados dos catetos é igual ao quadrado da hipotenusa.” Faça
uma função que receba os dois catetos como parâmetros e retorna a
hipotenusa. Faça um programa que utiliza essa função.
Aula 20: Exercícios sobre Arquivos
Exercícios sobre o comando for: Respostas
Exercícios
Exercício 1
Compile e execute o programa exemploescrita.c. Procure na pasta
do programa o arquivo teste.txt, e abra ele. O conteúdo é o que
você espera? Altere a chamada do fopen para o modo append. Com-
pile e execute o programa algumas vezes, e veja o que acontece.
Listing 28: exemploescrita.c
1 int main() {
2 FILE *arquivo;
3
4 arquivo = fopen("teste.txt", "w");
5
6 if(arquivo == 0) {
7 /* erro ao abrir, sair */
8 exit(0);
9 }
10
11 fprintf(arquivo, "Fulano\n");
12 fprintf(arquivo, "Beltrano\n");
13 fprintf(arquivo, "Facebookson\n");
14
15 fclose(arquivo);
16 }
2. Compile e execute o programa ler.c. Acontece o que você
esperava? Certifique-se que você entende o funcionamento do pro-
grama.
Listing 29: ler.c
1 int main() {
2 FILE *arquivo;
3 char nome[100];
4
72 introdução à programação
5 arquivo = fopen("teste.txt", "r");
6
7 if(arquivo == 0) {
8 printf("Arquivo nao existe!\n");
9 /* erro ao abrir, sair */
10 exit(0);
11 }
12
13 /* le uma string do arquivo */
14 /* fscanf retorn EOF quando chega ao final do arquivo */
15 while(fscanf(arquivo, "%s", nome) != EOF) {
16 /* imprime na tela */
17 printf("Nome: %s", nome);
18 }
19
20 fclose(arquivo);
21 }
Exercício 3
Altere o primeiro programa para ler nomes do teclado e gravar no
arquivo. 37 37 Dica: para simular um “final de
arquivo” no teclado, pressione CTRL-Z
seguido de ENTER depois de digitar os
nomes.Exercício 4
Altere o programa anterior para ler do teclado e escrever no arquivo
nomes seguidos de idades. Faça um função gravaarquivo(FILE
*arq, char *nome, int idade) que recebe como parametros o ar-
quivo aberto, o nome e a idade e grava eles no arquivo. O arquivo
deve ser aberto na main.
Exercício 5
Faça um programa que lê e imprime os nomes e idades do exercício
anterior. O arquivo ler_nr.c pode servir de inspiração para ler os
números. Faça uma função int le_um_nomeidade(FILE *arq, char
*nome, char *idade) que le o nome idade do arquivo, nome e idade
são ponteiros e serao preenchidos com o resultado. A função deverá
retornar 0 em caso de erro na leitura e 1 em caso de sucesso.
Listing 30: ler_nr.c
1 int main() {
2 FILE *arquivo;
3 int i;
4
5 arquivo = fopen("teste2.txt", "r");
6
7 if(arquivo == 0) {
aula 20: exercícios sobre arquivos 73
8 /* erro aoabrir, sair */
9 exit(0);
10 }
11
12 /* enquanto nao chegou no final do arquivo... */
13 /* fscanf retorna o nr inteiros lidos, quando chegou no final,
nao consegue mais ler */
14 while(fscanf(arquivo, "%i", &i) > 0) {
15 printf("Nr: %i\n", i);
16 }
17
18 fclose(arquivo);
19 }
Aula 22: Exercícios sobre estruturas
Exercícios sobre o comando for: Respostas
Exercícios
Exercício 1
Crie uma estrutura para representar um jogador de um jogo de com-
putador. A estrutura deverá conter apelido, email e pontuação máx-
ima.
Faça um programa que preencha essa estrutura do teclado e de-
pois mostre na tela.
Exercício 2
Modifique o programa do exercício um para que tanto a leitura do
teclado quanto a exibição na tela do jogador sejam realizadas por
funções. A main irá ficar com essa cara:
1
2 int main() {
3 struct player p;
4
5 p = ler_player_do_teclado();
6 imprime_player_na_tela(p);
7 }
Exercício 3
Adapte o programa do exerício 2 para ler e imprimir 5 jogadores,
armazenando-os num array.
Exercício 4
Leia 5 jogadores do teclado e os armazene em um array, depois im-
prima os 5 jogadores em um arquivo. Use funções!
76 introdução à programação
Exercício 5
Leia os 5 jogadores do arquivo do exercício 4, e imprima aquele que
tiver a maior pontuação máxima.
Exercício 6
Declare uma estrutura para representar um ponto no espaço bidi-
mensional. Faça uma funções que receba 2 pontos e retorne a distân-
cia entre eles. Escreva um programa que use esta função.
Aula 24: Exercícios sobre strings
Exercícios sobre o comando for: Respostas
Exercícios
Exercício 1
Faça um programa que leia uma palavra do teclado e mostre na tela
a mesma quantidade de asteriscos que a palavra possui de caracteres.
Depois disso, o programa deve solicitar UMA letra (char) ao usuário,
e caso essa letra exista na palavra, mostrar a palavra com a letra
“revelada”. Caso a letra não exista, informar ao usuário.38. 38 Dica: faça uma função, int
revela_letra(char *orig, char
*ast, char letra). Esta função pode
fazer a troca de asteriscos pela letra e
retornar um INTEIRO que representa a
QUANTIDADE de trocas feitas
Dica: Para armazenar um char em uma variável, a melhor maneira
é a seguinte (fugindo de um bug 39 do c):
39 Misturar scanf("%s", ...) e
scanf("%c", ...) gera resultados
estranhos...
1
2 int main() {
3 char letra;
4 char temp[5];
5
6 scanf("%s", temp); // le e coloca na string
7 letra = temp[0]; // primeiro caracter lido sera armazenado em
letra
8
9 printf("%c", letra);
10 }
Exercício 2
Adapte o programa anterior para que o usuário possa digitar vários
caracteres, até ter adivinhado a palavra. Crie uma função, int qtd_ast(char
*string) que conte a quantidade de asteriscos em uma string, isso
facilitará o teste para saber se o usuário já adivinhou toda palavra.
Exercício 3
O programa abaixo imprime um número aleatório (os include são
importantes):
78 introdução à programação
1 include <stdio.h>include <time.h>
2
3 int main() {
4 int max;
5 int aleatorio;
6
7 max = 10;
8
9 srand(time(NULL)); // necessario para a sequencia nao
10 // ser sempre a mesma, basta executar uma vez no inicio da
main
11
12 aleatorio = rand()%max; // efetivamente pega um numero entre 0 e
9,
13 // pode ser executado quantas vezes precisarmos
14
15 printf("%i\n", aleatorio);
16 }
Adapte-o para ler de um arquivo40 várias palavras e armazená-las 40 É necessário colocar algumas palavras
iniciais no arquivo para testarem um vetor. Depois, imprima uma palavra aleatória na tela.
1
2 // vetor de strings:
3 char minhasStrings[100][50]; // 100 strings de ate 50 chars
4
5 // ler a primeira string:
6 scanf("%s", minhasStrings[0]);
Exercício 4
Faça um menu. Ele deve exibir no mínimo 3 opções de ação mais
uma opção “sair” do programa. Ao selecionar uma opção do menu,
o programa deve exibir qual opção foi selecionada. Caso a opção
tenha sido sair, saia do programa, caso tenha sido outra opção,
mostre o menu de novo.
Erros comuns
Termine todos os comandos com ;
Quando ocorrer um erro de compilação, dê um duplo clique sobre
a mensagem de erro para destacar o comando errado no programa
Verifique também a linha anterior, que pode ser a responsável pelo
erro, especialmente se faltar o ;
Respostas
Aula 03
1. Qual o valor das seguintes expressões?
a. 1 + 1→ 2
b. 3*9→ 27
c. 2-1*9→ -7
d. (2-1)*9→ 9
e. (2*(4/(1+1)-3)*5→ 5
2. Qual o valor das seguintes expressões (verdadeiro ou falso)?
a. 1 == (2-1)→ V
b. 1 < (2-1)→ F
c. (1 == 1) && ((4/2) > 2)→ V && F→ F
d. (1 == 1) || ((4/2) > 2)→ V || F→ V
e. ((3>2) && (4 < 3)) || ((2 <= 2) && ((2>1) || (1==1)))→ (V &&
F) || (V && V) || (V || V)→ F || V || V→ V
3. Qual o tipo e resultado das seguintes expressões?
a. 1 + 2*0.5→ float, 2.0
b. 1/2→ int, 0
c. 1.0/2→ float, 0.5
4.
1 int main()
2 {
3 /* declaracao de variaveis de entrada */
4 float altura, raio;
5
6 /* declaracao de variaveis de saida */
7 int qtdLatas;
8 float custo;
9
82 introdução à programação
10 /* constantes (nao mudam no programa, servem so pra ficar mais
claro */
11 float pi = 3.14;
12 float precoLata = 20.0;
13
14 /* variaveis intermediarias, auxiliares para o calculo */
15 float areaBase, circBase, areaCilindro, qtdLitros;
16
17 /* ler os dados do usuario */
18 printf ("\nDigite o valor da altura em metros: ");
19 scanf ("%f",&altura);
20 printf ("\nDigite o valor do raio em metros: ");
21 scanf ("%f",&raio);
22
23 /* realizar os calculos */
24 areaBase = pi*raio*raio;
25 circBase = 2*pi*raio;
26 areaCilindro = 2*areaBase + altura*circBase;
27
28 qtdLitros = areaCilindro/3;
29 qtdLatas = ceil(qtdLitros/5); // nao podemos comprar meia lata
30
31 custo = qtdLatas * precoLata;
32
33 /* mostrar o resultado */
34 printf ("\nA qtidade de latas necessaria eh de %i \n",
qtdLatas);
35 printf ("O valor total das tintas eh de RS %.2f \n", custo);
36 }
Aula 4 - Laboratório
Exercício 1
1 int main()
2 {
3 int x, y, soma;
4 printf("Digite um numero do seu teclado: ");
5 scanf("%i", &x);
6 printf("Digite outro numero do seu teclado: ");
7 scanf("%i", &y);
8 soma = (x+y);
9 printf("A soma dos numeros e: %i\n", soma);
10 system("PAUSE");
11
12 }
respostas 83
Aula 6 - Laboratório
Exercício 1
Repare como temos um if dentro de outro.
1 int main() {
2 float x,y,z;
3
4 printf("Digite o primeiro numero:\n");
5 scanf("%f",&x);
6 printf("Digite o segundo numero:\n");
7 scanf("%f",&y);
8
9
10 if (x+y>20){
11 printf("E maior que 20");
12 if (x<=15 && y<=15){
13 z=x*y;
14 printf("Multiplicacao: %f", z);
15 }
16 }
17 }
Exercício 2
1 int main() {
2 float n, nQuadrado;
3
4 printf("Digite um nr:\n");
5 scanf("%f",&n);
6
7 nQuadrado=n*n;
8
9 if(nQuadrado<4) {
10 printf("Menor que 4");
11 }
12 else if(nQuadrado<64) {
13 printf("Menor que 64");
14 }
15 else if(z<1024) {
16 printf("Menor que 1024");
17 }
18 else {
19 printf("Numero grande");
20 }
21 }
84 introdução à programação
Exercício 3
Essa solução usa o else if e else para chegar no resultado,41 outras 41 Solução enviada por Yan T. Galvan
são possíveis.
1 int main()
2 {
3 float x,y,z;
4 printf("digite o valor de x\n");
5 scanf("%f", &x);
6
7 printf("digite o valor de y\n");
8 scanf("%f", &y);
9
10 printf("digite o valor de z\n");
11 scanf("%f", &z);
12
13 if(x<y && x<z){
14 printf("x eh o menor de todos");
15 }
16 else if(y<z){
17 printf("y eh o menor de todos");
18 }
19 else {
20 printf("z eh o menor de todos");
21 }
22 }
Outra solução possível é:42 42 Enviada por Andressa Martins
1 int main() {
2 float x;
3 float y;
4 float z;
5
6 printf("Digite o primeiro numero:\n");
7 scanf("%f",&x);
8
9 printf("Digite o segundo numero:\n");
10 scanf("%f",&y);
11
12 printf("Digite o terceiro numero:\n");
13scanf("%f",&z);
14
15 if(z<y && z<x){
16 printf("Menor numero e:%f \n", z);
17 }
18 else if(y<z && y<x){
19 printf("Menor numero e:%f \n", y);
20 }
21 else if(x<z && x<y){
22 printf("Menor numero e:%f \n", x);
respostas 85
23 }
24 }
Exercício 5
Exercício adaptado do enviado por Mauricio Piovezan, Brunno
Frantz e Kazuo43 43 Sim, o professor viu o printf en-
graçadinho no final. Não é necessário
para a solução correta do problema. . .1 int main()
2 {
3 int A, B ,C;
4 printf("Digite os 3 lados do triangulo A, B e C: ");
5 scanf ("%i %i %i", &A, &B, &C);
6
7 /* Testamos se eh um triangulo */
8 if ( ((A + B) > C) && ((B + C) > A) && ((A + C) > B)){
9 if ( A==B && B==C ) {
10 printf("Triangulo Equilatero\n");
11 }
12 /* aqui, ja sabemos que o triangulo NAO eh equilatero */
13 else if ( (A==B) || (B==C) || (A==C)) {
14 printf("Triangulo Isosceles\n");
15 }
16 else {
17 printf("Triangulo escaleno\n");
18 }
19 }
20 else {
21 printf("Nao eh triangulo\n");
22 }
23
24 printf("\n\n dar uma nota a mais para os alunos Mauricio
Piovezan, Brunno Frantz e Kazuo :) \n\n");
25 system("PAUSE");
26 return 0;
27 }
Aula 10 - Laboratório FOR
Resposta referentes a Aula 10. 44 44 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
Exercício 01
1
2 int main() {
3 char nome[20];
4 int i, n;
5
86 introdução à programação
6 printf("Digite seu nome: ");
7 scanf("%s", &nome);
8
9 printf("De 0 a 10, quao narcisista voce eh? ");
10 scanf("%i", &n);
11
12 for(i=1; i <= n; i++) {
13 printf("%s\n", nome);
14 }
15 }
o
Exercício 02 - Fatorial
1 int main() {
2 int resultado, n, i;
3
4 printf("Digite um numero: ");
5 scanf("%i", &n);
6
7 resultado = 1;
8 for(i=1; i <=n; i++) {
9 resultado = resultado * i;
10 }
11
12 printf("Fatorial de %i eh %i\n", n, resultado);
13
14 }
Exercício 03 - Potência
Você chegou à mesma solução? Entendeu porque o programa fun-
ciona mesmo quando o usuário digita o expoente 0?
1 int main() {
2 float base, resultado;
3 int exp, i;
4
5 printf("Digite a base: ");
6 scanf("%f", &base);
7
8 printf("Digite o expoente: ");
9 scanf("%i", &exp);
10
11 resultado = 1;
12 for(i = 0; i < exp; i++) {
13 resultado = resultado * base;
14 }
15
respostas 87
16 printf("%f elevado a %i: %f\n", base, exp, resultado);
17 }
Exercício 04 - Tabuada
1 int main() {
2 int i,j;
3 for(i = 1; i <= 9; i++) {
4 for(j = 1; j <= 9; j++) {
5 printf("%i x %i = % i\n", i, j, i*j);
6 }
7 }
8 }
Exercício 05 - MMC
1 int main() {
2 int n1, n2, mmc;
3
4 printf("Digite o nr1: ");
5 scanf("%i", &n1);
6
7 printf("Digite o nr2: ");
8 scanf("%i", &n2);
9
10 mmc = 1;
11 while((mmc % n1 != 0) || (mmc % n2 != 0)) {
12 mmc++;
13 }
14 printf("O MMC de %i e %i eh %i\n", n1, n2, mmc);
15 }
Aula 12 - Vetores
Resposta referentes a Aula 12. 45 45 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
Problema 3
1 define QTD 3
2
3 int main() {
4 int i,contador;
5 float temperaturas[QTD];
6
7 for(i = 0; i<QTD; i++) {
8 // garantir que temp estah na faixa
88 introdução à programação
9 do {
10 printf("Digite uma temperatura entre -15 e 45: ");
11 scanf("%f", &temperaturas[i]);
12 }
13 while(temperaturas[i] < -15 || temperaturas[i] > 45);
14
15 }
16
17 // contar superiores a 28
18 contador = 0;
19 for(i = 0; i<QTD; i++) {
20 if(temperaturas[i] > 28) {
21 contador++;
22 }
23 }
24
25 // imprimir vetor
26 for(i = 0; i<QTD; i++) {
27 printf("Temp %i: = %f\n", i, temperaturas[i]);
28 }
29
30 // imprimir quantidade acima de 28
31 printf("%i dias quentes!\n", contador);
32 }
Aula 14 - Lab Matrizes
Resposta referentes a Aula 14. 46 46 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
Problema 1
1 define ALUNOS 2
2 define NOTAS 3
3
4 define PESO1 0.4
5 define PESO2 0.4
6 define PESOTRAB 0.2
7
8 int main() {
9 float notas[ALUNOS][NOTAS+1]; // 3 notas + a media
10 float total, media;
11 int i,j;
12
13 for(i = 0; i<ALUNOS;i++) {
14 // cada nota
15 printf("Digite a nota da prova 1 do aluno %i: ", i);
16 scanf("%f", &notas[i][0]);
17
18 printf("Digite a nota da prova 2 do aluno %i: ", i);
respostas 89
19 scanf("%f", &notas[i][1]);
20
21 printf("Digite a nota do trabalho do aluno %i: ", i);
22 scanf("%f", &notas[i][2]);
23 // calcular a media com os pesos e armazenar na ultima coluna
24 // para cada aluno
25 notas[i][3] = notas[i][0]*PESO1 + notas[i][1]*PESO2 +
26 notas[i][2]*PESOTRAB;
27 }
28 // aqui, temos as notas lidas e a media calculada
29
30 // fornecer medias e conceitos de cada aluno
31 for(i = 0; i<ALUNOS;i++) {
32 printf("Aluno %2i: %2.2f %2.2f %2.2f - %2.2f - ",
33 i, notas[i][0], notas[i][1], notas[i][2],
34 notas[i][3]);
35 // imprimir conceito
36 if(notas[i][3] >= 9) {
37 printf("A\n");
38 }
39 else if(notas[i][3] >= 7.5) {
40 printf("B\n")
41 }
42 else if(notas[i][3] >= 6.0) {
43 printf("C\n");
44 }
45 else if(notas[i][3] >= 3) {
46 printf("D\n");
47 }
48 else {
49 }
50 }
51
52
53 // agora, calcular as medias da turma
54 for(j = 0; j < NOTAS; j++) {
55 total = 0;
56 for(i = 0; i < ALUNOS; i++) {
57 total = total + notas[i][j];
58 }
59 media = total/ALUNOS;
60 printf("Media da nota %i = %2.2f\n", j, media);
61 }
62 }
Aula 16 - Funções
Resposta referentes a Aula 16. 47 47 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
90 introdução à programação
Exercício 3
1 float exp(float base, int e) {
2 float r = 1;
3 while(e > 0) {
4 r = r*base;
5 e--;
6 }
7 return r;
8 }
9
10 int main() {
11 float b;
12 int e;
13
14 printf("Digite a base: ");
15 scanf("%f", &b);
16 printf("Digite o expoente: ");
17 scanf("%i", &e);
18
19 printf("O resultado eh %f\n", exp(b, e));
20 }
Exercício 5
1 int main() {
2 float a;
3 int x, z;
4
5 scanf("%f", &a);
6 scanf("%i", &x);
7 scanf("%i", &z);
8
9 printf("Resultado = %f\n", pow(pow(a,x), z));
10 }
Aula 18 - Funções e Ponteiros
Resposta referentes a Aula 18. 48 48 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
Exercício 2
1
2
3 float soma(float *v, int n) {
4 int i;
5 float s = 0;
respostas 91
6 for(i=0;i<n;i++) {
7 s += v[i];
8 }
9 }
10
11 int main() {
12 float vetor[3];
13 int i;
14
15 for(i=0;i<3;i++) {
16 scanf("%f", &vetor[i]);
17 }
18
19 printf("A soma eh: %f\n", soma(vetor, 3));
20
21 }
Aula 20 - Arquivos
Resposta referentes a Aula 20. 49 49 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
Exercício 3
1 int main() {
2 FILE *arquivo;
3 char temporario[30];
4 arquivo = fopen("teste.txt", "w");
5 if(arquivo == 0) {
6 /* erro ao abrir, sair */
7 exit(0);
8 }
9
10 // "simula" um arquivo no teclado, para parar
11 // de inserir, no Windows, Ctrl-Z + Enter
12 while(scanf("%s", temporario) != EOF) {
13 fprintf(arquivo, "%s\n", temporario);
14 }
15
16 fclose(arquivo);
17 }
Exercício 5
1
2 int le_nomeidade(FILE *arq, char *nome, int *idade) {
3 if(fscanf(arq, "%s", nome) < 1) {
4 return 0;
5 }
92 introdução à programação
6 if(fscanf(arq, "%i", idade) < 1) { // sem e-comercial, pois eh
um ponteiro
7 // o e-comercial esta na chamada da funcao, na main
8 return 0;
9 }
10 // cheogu aqui, conseguiu ler
11 return 1;
12 }
13
14 int main() {
15 FILE *arquivo;
16 char nome[30];
17 int idade;
18 arquivo = fopen("teste.txt", "w");
19 if(arquivo == 0) {
20 /* erro ao abrir, sair */
21 exit(0);
22 }
23
24 while(le_nomeidade(arquivo, nome, &idade) != 0) {
25 printf("%s", nome);
26 printf("%i", idade);
27 }
28
29 fclose(arquivo);30 }
Aula 22 - Estruturas
Resposta referentes a Aula 22. 50 50 As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
Exercício 1
1
2 struct jogador {
3 char nome[50];
4 char email[60];
5 int pontuacao;
6 };
7
8 int main() {
9 struct jogador facebookson;
10
11 strcpy(facebookson.nome, "Facebookson Schreiner");
12 strcpy(facebookson.email, "son@facebook.com");
13 facebookson.pontuacao = 1050;
14
15 printf("Nome: %s\n", facebookson.nome);
16 printf("Email: %s\n", facebookson.email);
respostas 93
17 printf("Pontuacao: %i\n", facebookson.pontuacao);
18 }
	Aula 01 - Algoritmos, Programas e Linguage C
	Introdução
	Algoritmo
	Programa
	Linguagens de programação
	Linguagem C
	Exercícios
	Aula 02 - Laboratório
	Introdução
	Criando um projeto no codeblocks
	Tarefas - em Aula
	Tarefa para casa
	Desafios
	Aula 03 - Introdução à algoritmos e Linguagem C
	Exercícios
	Aula 04 - Laboratório
	Introdução
	Exercícios
	Exercícios extra
	Aula 05 - if
	Introdução
	Comando IF
	Comando Switch
	Exercícios
	Aula 06 - Laboratório
	Exercícios
	Aula 07 - While, do while
	Introdução
	Comando while
	Do While
	Exercícios
	Aula 08 - Laboratório
	Exercícios
	Exercício 5 - Para casa
	Aula 09 - For
	Comando for
	Break e Continue
	Aula 10 - Laboratório
	Exercícios
	Exercício 5: MMC
	Exercício 6 (extra)
	Exercício 7 (extra)
	Vetores unidimensionais
	Aula 12 - Laboratório - Arranjos
	Exercícios
	Desafio
	Aula 13 - Matrizes
	Aula 14 - Laboratório - Matrizes
	Exercícios
	Aula 16: exercícios de funções
	Introdução
	Exercícios
	Desafios
	Aula 18: Laboratório de Funções e Ponteiros
	Exercícios
	Funções disponíveis em C
	Aula 20: Exercícios sobre Arquivos
	Exercícios
	Aula 22: Exercícios sobre estruturas
	Exercícios
	Aula 24: Exercícios sobre strings
	Exercícios
	Erros comuns
	Respostas
	Aula 03
	Aula 4 - Laboratório
	Aula 6 - Laboratório
	Aula 10 - Laboratório FOR
	Aula 12 - Vetores
	Aula 14 - Lab Matrizes
	Aula 16 - Funções
	Aula 18 - Funções e Ponteiros
	Aula 20 - Arquivos
	Aula 22 - Estruturas

Mais conteúdos dessa disciplina