PA U L O S C H R E I N E R
INTRODUÇÃO À PROGRAMAÇÃO
I N S T I T U T O D E I N F O R M ÁT I C A - U F R G S
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
Aula 02 - Laboratório
13
Aula 03 - Introdução à algoritmos e Linguagem C
Aula 04 - Laboratório
Aula 05 - if
29
33
Aula 06 - Laboratório
39
Aula 07 - While, do while
Aula 08 - Laboratório
Aula 09 - For
41
45
47
Aula 10 - Laboratório
Vetores unidimensionais
9
49
51
21
4
Aula 12 - Laboratório - Arranjos
Aula 13 - Matrizes
53
57
Aula 14 - Laboratório - Matrizes
Aula 16: exercícios de funções
59
61
Aula 18: Laboratório de Funções e Ponteiros
Aula 20: Exercícios sobre Arquivos
71
Aula 22: Exercícios sobre estruturas
Aula 24: Exercícios sobre strings
Erros comuns
Respostas
79
81
75
77
67
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 realizar uma tarefa. A forma de fazer isto é através de passos, ou pequenas instruções que, quando realizadas em conjunto, levam ao
resultado adequado.
Algoritmo
Chamamos de algortimo1 uma série de passos que devem ser realizados 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.
Não existe uma definição formal de o
que é um algoritmo
1
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 algoritmo em português (inglês, no caso) e a codificação binária de um
programa de computador. Um algoritmo expresso em uma linguagem 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, implementouo pela primeira vez usando um DEC PDP-11 rodando o sistema op2
eracional UNIX2 . O C é derivado de uma outra linguagem: o B, criO sistema operacional Linux, muito
popular
em certos públicos, foi baseado
ado por Ken Thompson. O B, por sua vez, veio da linguagem BCPL,
no UNIX
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 comunicação, programas para a automação industrial, gerenciadores de bancos de dados, programas de projeto assistido por computador, programas para a solução de problemas da Engenharia, Física, Química
e outras Ciências, etc ...
3
Apesar disto, o foco principal será nas
Estudaremos a estrutura do ANSI C3 , o C padronizado pela ANSI.
técnicas genéricas de programação
Veremos ainda algumas funções comuns em compiladores para alguns 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
Exercícios
No papel
1. Escreva um algoritmo para a soma de dois números inteiros positivo, 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.
11
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á acontecendo. 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 organizado.
Project file name por padrão o codeblocks preencheu o nome do projeto como "seu título".cbp,a terminação .cbp significa(codeblocks
project) e é uma extensão que só o codeblocks conhece. É o arquivo 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
Figure 4: Escolha C.
Figure 5: Configurações manuais (no
texto).
15
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.
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
4
• Digite o texto do programa listado no arquivo main.c que o codeblocks gerou5 .
• Compile e rode o programa6
• Deverá aparecer uma tela de terminal escrito "Bem vindos ao
mundo C".
5
6
• O que faz o comando printf()?
Dentro de sources
O botão "Play" do Codeblocks faz isso
Listing 1: Programa 1
1
2
3
4
5
6
int main() {
printf("Bem vindos ao mundo C\n");
system("PAUSE");
return 0;
}
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
• O \n não aparece na tela. O que ele faz então?
Listing 2: Programa 2
1
2
3
4
5
6
7
8
int main() {
char nome[20] = "Paulo";
printf("Ola %s\n", nome);
system("PAUSE");
return 0;
}
Tarefa 3
• Crie um novo projeto
• Insira o código do programa 3 e execute-o.
8
Dica: mude a posição do %s dentro
das aspas
7
Dica: Coloque mais \n dentro de
lugares deferentes dentro das aspas e
rode o programa
8
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
2
3
4
5
6
7
8
int main() {
char nome[20];
printf("12 + 17 = %i\n", 12 + 17);
system("PAUSE");
return 0;
}
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
Alternativa:
Para quem já tem experiência com algum outro ambiente de desenvolvimento C, em Linux, Windows, ou Mac, pode usar sem problemas. 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
2
3
4
5
6
7
8
No caso do Windows, baixe a versão
com o mingw, caso contrário você não
conseguirá compilar programas
10
int main() {
char nome[20];
char idade[5];
printf("Digite seu nome: ");
gets(nome);
printf("Digite sua idade: ");
gets(idade);
aula 02 - laboratório
9
10
11
12
13
printf("%s tem %i anos\n", nome, atoi(idade));
system("PAUSE");
return 0;
}
19
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
2
3
4
5
6
7
diretivas para o pre-processador
declaracao de variaveis globais
int main()
{
declaracao de variaveis locais da funcao main
comandos da funcao main
}
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
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.
Todas as diretivas de pré-processador
começam com #
11
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á executado.
Veremos mais sobre funções no
capítulo XXX
12
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
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
13
22
introdução à programação
Listing 6: Estrutura básica - Exemplo
1
2
3
4
5
int main()
{
printf ("Alo mundo!"); //mostra
system("PAUSE"); //fica parado
}
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
2
int numero = 42;
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 referenciam à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 variá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 receber 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
2
3
4
5
int num1, num2, soma;
scanf("%i", &num1); /* le um numero */
scanf("%i", &num2); /* le outro numero */
soma = num1 + num2;
printf("Soma: %i\n", soma);
Principais tipos de dados em C
C é uma linguagem tipada, isso quer dizer que expressões em C possuem 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? Simplificadamente, quer dizer que o número
tem uma precisão finita, não é possível
representar um terço num float.
Na verdade, o texto é um tipo composto de dados, no caso, um arranjo de
caracteres. Mais sobre isso adiante
15
aula 03 - introdução à algoritmos e linguagem c
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
int
Um número inteiro, positivo ou negativo int x;
float
Um número real (quase)
float x;
char
Um caractere
char x;
string
Um texto
char x[20];
Literal
Subst
12
"%i"
12.0
"%f"
’c’
"%c"
"texto"
"%s"
23
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
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.
16
Por enquanto, a main()
Listing 9: Exemplos de declaração de variável
1
2
3
int num1, num2, soma;
float preco;
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,
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.
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 simplesmente deixa um “lixo” qualquer (os
dados que estavam naquela posição de
memória
17
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:
Listing 10: Exemplos de expressões
1
2
3
4
5
1
1 + 1
num /* se num eh uma variavel */
2 + 3
(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
Uma variável sozinha é uma expressão, um literal é uma expressão,
etc
18
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ênteses.
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á sempre um 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
2
3
4
5
1 + 1 /* 2, inteiro */
1.0 + 1 /* 2.0, float */
1/2 /* 0, int */
1.0/2 /* 0.5, float */
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
2
3
if(1 < 2) {
printf("verdadeiro");
}
< estritamente menor
<= menor ou igual
> estritamente maior
>= maior ou igual
== valores são iguais19
!= 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.
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
19
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
20
função20 .
se tivéssemos mais, seriam separados
por vírgula
O 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 argumento 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
2
3
4
5
6
7
8
9
10
int x;
float y;
x = 2;
float = 3.4;
printf("Teste") /* => Teste */
printf("Teste %s") /* ERRO! */
printf("Teste %s", "teste2"); /* => Teste teste2 */
printf("%i %s %f", x, "+", y) /* 2+3.4 */
26
11
introdução à programação
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 é similar ao do printf():
1
2
3
char nome[20];
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
2
3
4
5
float x;
int y;
scanf("%i", &y);
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
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
Respostas no capítulo de respostes,
seção 3
21
aula 03 - introdução à algoritmos e linguagem c
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 combustí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.
27
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
2
3
4
5
6
int main(int argc, char **argv) {
/* um comentario qualquer */
printf("Algum texto");
}
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
2
3
int numero; /* declara um inteiro */
float raiz; /* declara um numero em "ponto flutuante" (real) */
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, utilizamos 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, armazene 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
2
3
4
5
if(12 < 20) {
printf("12 eh maior que 20");
/* o que esta entre chaves so eh executado */
/* se a condicao do if for verdadeira */
}
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
não se esqueça de usar ponto no
lugar da vírgula.
22
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
g . Leia 4 números e mostre a média ponderada, sabendo-se que os
pesos são respectivamente: 1, 2, 3 e 4.
para calcular o resto de uma divisão,
utilize o operador MOD , em C: %
23
aula 04 - laboratório
h . Lê o saldo de uma aplicação e imprima o novo saldo, considerado o reajuste de 1%.
i . Entre com a base e a altura de um retângulo e mostre os resultados
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 transformeo 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 respectivamente, 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 escrever o salário deste funcionário, sendo que cada filho menor de
14 anos acrescenta 10% do salário.
31
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
2
3
4
5
if(x < y) {
scanf("%i", &z);
printf("x menor que y\n");
/* ... */
}
Comando IF
Vamos definir de uma maneira mais forma a sintaxe24 do comando
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ênteses do if, pode ser tão complexa quanto se queira, contendo mais
parêntes para agrupamentos, mas não podemos esquecer dos parênteses 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 podemos 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
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
3
4
int idade = 20;
int acompanhado_por_maior = 1;
24
= forma
25
= significado
34
5
6
7
8
9
10
11
12
introdução à programação
if(idade >= 16) {
if((idade >= 18) || (acompanhado_por_maior == 1) {
printf("libera entrada\n");
}
if(idade >= 18) {
printf("ganha pulseira para bebida\n");
}
}
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 comando else (senão). Exemplo:
1
2
3
4
5
6
if(x > y) {
printf("x maior que y\n");
}
else {
printf("x NAO eh maior do que y\n");
}
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 sempre 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 verdadeira, 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
Listing 13: Exemplo else if
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int a, b, comando;
printf("1. Soma\n");
printf("2. Subtracao\n");
printf("3. Multiplicacao\n");
printf("4. Divisao\n");
printf("Digite a operacao matematica que voce quer: ");
scanf("%i", &comando);
printf("Digite o primeiro operando: ");
scanf("%i", &a);
printf("Digite o segundo operando: ");
scanf("%i", &b);
if(comando == 1) {
printf("Resultado: %i\n", a + b);
}
else if (comando == 2) {
printf("Resultado: %i\n", a - b);
}
else if (commando == 3) {
printf("Resultado: %i\n", a * b);
}
else if (commando == 4) {
printf("Resultado: %i\n", a / b);
}
else {
printf("Comando invalido! Digite um numero entre 1 e 4\n");
}
35
36
introdução à programação
o bloco associado e pula todos os else if’s e else que porventura venham 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
Vamos ver um exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int a, b, comando;
23
}
printf("1. Soma\n");
printf("2. Subtracao\n");
printf("3. Multiplicacao\n");
printf("4. Divisao\n");
printf("Digite a operacao matematica que voce quer: ");
scanf("%i", &comando);
printf("Digite o primeiro operando: ");
scanf("%i", &a);
printf("Digite o segundo operando: ");
scanf("%i", &b);
switch(comando) {
case 1: printf("Resultado: %i\n", a + b);
case 2: printf("Resultado: %i\n", a - b);
case 3: printf("Resultado: %i\n", a * b);
case 4: printf("Resultado: %i\n", a / b);
default: printf("Comando invalido! Digite um numero entre 1 e 4\
n");
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?
Tudo que pode ser feito com o comando switch também pode ser feito
com Ifs encadeados. Considere esta
parte da apostila opcional, se quiser,
pule para os exercícios
26
aula 05 - if
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
2
3
4
5
6
7
8
9
10
switch(comando) {
11
}
case 1: printf("Resultado: %i\n", a + b);
break;
case 2: printf("Resultado: %i\n", a - b);
break;
case 3: printf("Resultado: %i\n", a * b);
break;
case 4: printf("Resultado: %i\n", a / b);
break;
default: printf("Comando invalido! Digite um numero entre 1 e 4\
n");
Quando utilizar o switch
A principal vantagem do switch é que ele é mais rápido, e no caso
do exemplo acima, também fica mais 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 apresentar 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 negativo.
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, acompanhando pela mensagem “é o maior número”.
37
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, classifiqueo 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 suspenderem 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 paralisarem suas atividades. Faça um programa que leia o índice de
poluição medido e emita a notificação adequada aos diferentes grupos 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, multiplicação uma grande quantidade de vezes. Para isso utilizamos
comandos de “laço”, ou no anglicismo, loops. Estes comandos permitem 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
2
3
4
5
int i = 1;
while(i <= 10) {
printf("%i\n", i);
i++;
}
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
2
3
while(i <= 10) {
printf("%i\n", i);
}
Listing 16: Fatorial de x
1
2
3
4
5
6
7
resultado = 1;
temp = 1;
while(temp <= x) {
resultado = resultado * temp;
temp = tempo + 1;
}
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. Lembrando 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 é desconsiderado. 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
Listing 17: Exemplo Do-While
1
2
3
4
5
6
7
8
9
10
int opcao;
do {
printf("Escolha um opcao:\n");
printf("1. Arquibancada\n");
printf("2. Cadeira Lateral\n");
printf("3. Cadeira Central\n");
printf("4. Sair\n");
scanf("%i", &opcao);
}
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.
43
Aula 08 - Laboratório
Essa aula trata dos comandos while, for e do while. Utilize a documentaçã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 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.
Dica: exemplo de leitura e impressão de números em ponto flutuante:
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 fatorial 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
Listing 18: Ponto flutuante
1
2
3
float meu_numero;
scanf("%f", &meu_numero);
printf("Meu numero eh: %f\n", meu_numero);
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.
27
46
introdução à programação
Exercício 4
Escreva um programa que mostre na tela a tabuada de 1 a 9. O programa deve imprimir algo do tipo: 28
Dica: utilize um while dentro de
outro
28
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
Exemplo
Questões deste tipo costumar cair em
avaliações. . .
29
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
de 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.
Sintaxe represnta a forma de um
comando
30
Listing 19: Sintaxe do for
1
2
3
for(inicialicacao; condicao; atualizacao) {
// bloco de codigo
}
Semântica31 : ao chegar no comando for pela primeira vez, o computador 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
2
3
4
int i;
for(i = 1; i <= 10; i++) {
printf("%i\n", i);
}
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
2
3
4
5
int i,x;
scanf("%i", &x);
for(i = 1; i <= x; i++) {
printf("%i\n", i);
}
31
Semântica representa o significado
de um comando, ou seja, como ele
funciona
48
introdução à programação
Listing 22: Fatorial de x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int temp,resultado,x;
x = 1;
while(x != 0) {
printf("Nr (0 para sair): ";
scanf("%i", &x);
if(x == 0) { break; }
else if (x < 0) {
printf("Digite nr positivo\n");
continue;
}
resultado = 1;
temp = 1;
while(temp <= x) {
resultado = resultado * temp;
temp = temp + 1;
}
printf("%i! = %i\n", resultado);
}
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 .
Cuidado ao utilizar estes comandos,
pois podem deixar o código mais
confuso!
32
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
2
3
4
char nome[20];
scanf("%s", &nome);
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ência 0.
Exercício 4
Escreva um programa que mostre na tela a tabuada de 1 a 9. O programa 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 trabalhadas 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 imposto 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
2
int vetor1[20];
float reais[45];
Cada elemento do vetor é acessado colocando seu índice entre
colchetes, onde o índice precisa ser um número inteiro ou uma expressão (por exemplo, uma variável de controle) inteira. Pode ser
usado exatamente da mesma forma que uma variável normal:
1
2
3
4
scanf("%i", &vetor1[0]);
printf("%i\n", vetor[0]);
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 armazene 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
2
3
if((num % 2) == 1) {
// num eh impar
}
54
introdução à programação
Exercício 2
Modifique o programa anterior para usar um #define. Primeiramente, defina a constante MAX como 533 :
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 temperaturas 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
3
4
5
6
7
8
9
10
void main(void) {
char nome[] = "Introducao a programacao";
int i = 0;
while(nome[i] != 0) {
printf("%c\n", nome[i]);
i++;
}
printf("\n");
Neste caso, MAX NÃO é uma variá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
33
aula 12 - laboratório - arranjos
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
2
3
if{nome[i] == ’a’) {
...
}
55
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
2
3
int arr[20][10];
float reais[10][5];
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 expressão (por exemplo, uma variável de controle) inteira. Pode ser
usado exatamente da mesma forma que uma variável normal:
1
2
scanf("%f", reais[3][1]);
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 decimais. 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
(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.
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.
34
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 variá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
2
3
4
5
6
7
8
9
10
11
12
13
void imprime_asteriscos() {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void imprime_asteriscos(int num) {
printf("********************\n");
}
int main(int argc, char **argv) {
char nome[] = "Porto Alegre";
imprime_asteriscos();
printf("%s\n", nome);
imprime_asteriscos();
return 0;
}
Listing 25: Exemplo 2
int i;
for(i = 0; i < num; i++) {
printf("*");
}
printf("\n");
}
int main(int argc, char **argv) {
char nome[] = "Porto Alegre";
imprime_asteriscos(15);
printf("%s\n", nome);
imprime_asteriscos(15);
return 0;
}
aula 16: exercícios de funções
Listing 26: Exemplo 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
float multiplica(int num, float num2) {
float resultado;
resultado = num * num2;
return resultado;
}
int main(int argc, char **argv) {
char nome[] = "Porto Alegre";
int x;
float y, res;
printf("Digite um inteiro: ");
scanf("%i", &x);
printf("Digite um float: ");
scanf("%f", &y);
res = multiplica(x, y);
printf("O resultado eh %f\n", res);
/* uma funcao que retorna um valor eh uma expressao */
printf("2 * 2.5 = %f\n", multiplica(2, 2.5));
if(multiplica(3, 3) == 9) {
printf("Sucesso!\n");
}
return 0;
}
63
64
introdução à programação
Exercício 1
É opcional, mas sugerido que vocês escrevam os exemplos no codeblocks 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 digite 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 inserido.
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 retorna 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
A função irá apenas receber os
números como parâmetro e retornar o
resultado.
35
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.
z
Ele deve calcular e mostrar na tela a x 36 .
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 é π ∗ r2 .
Lembre-se que você pode usar o
resultado de uma função como argumento de outra (ou da mesma. . . )
36
aula 16: exercícios de funções
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().
65
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 vetores, 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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main() {
char s1[100], s2[100]; /* string de 100 caracteres no maximo */
printf("Digite a primeira string: ");
scanf("%s", s1);
printf("Digite a segunda string: ");
scanf("%s", s2);
if(s1 == s2) {
printf("Iguais\n");
}
else {
printf("%s diferente de %s\n", s1, s2);
}
}
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 x y .
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
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.
69
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. Compile e execute o programa algumas vezes, e veja o que acontece.
Listing 28: exemploescrita.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main() {
FILE *arquivo;
arquivo = fopen("teste.txt", "w");
if(arquivo == 0) {
/* erro ao abrir, sair */
exit(0);
}
fprintf(arquivo, "Fulano\n");
fprintf(arquivo, "Beltrano\n");
fprintf(arquivo, "Facebookson\n");
fclose(arquivo);
}
2. Compile e execute o programa ler.c. Acontece o que você
esperava? Certifique-se que você entende o funcionamento do programa.
Listing 29: ler.c
1
2
3
4
int main() {
FILE *arquivo;
char nome[100];
72
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
introdução à programação
arquivo = fopen("teste.txt", "r");
if(arquivo == 0) {
printf("Arquivo nao existe!\n");
/* erro ao abrir, sair */
exit(0);
}
/* le uma string do arquivo */
/* fscanf retorn EOF quando chega ao final do arquivo */
while(fscanf(arquivo, "%s", nome) != EOF) {
/* imprime na tela */
printf("Nome: %s", nome);
}
fclose(arquivo);
}
Exercício 3
Altere o primeiro programa para ler nomes do teclado e gravar no
arquivo. 37
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 arquivo 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
2
3
4
5
6
7
int main() {
FILE *arquivo;
int i;
arquivo = fopen("teste2.txt", "r");
if(arquivo == 0) {
Dica: para simular um “final de
arquivo” no teclado, pressione CTRL-Z
seguido de ENTER depois de digitar os
nomes.
37
aula 20: exercícios sobre arquivos
/* erro ao abrir, sair */
exit(0);
8
9
10
11
12
13
14
15
16
17
18
19
}
/* enquanto nao chegou no final do arquivo... */
/* fscanf retorna o nr inteiros lidos, quando chegou no final,
nao consegue mais ler */
while(fscanf(arquivo, "%i", &i) > 0) {
printf("Nr: %i\n", i);
}
fclose(arquivo);
}
73
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 computador. A estrutura deverá conter apelido, email e pontuação máxima.
Faça um programa que preencha essa estrutura do teclado e depois 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
3
4
5
6
7
int main() {
struct player p;
p = ler_player_do_teclado();
imprime_player_na_tela(p);
}
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 imprima 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 bidimensional. Faça uma funções que receba 2 pontos e retorne a distância 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 .
Dica: Para armazenar um char em uma variável, a melhor maneira
é a seguinte (fugindo de um bug 39 do c):
1
2
3
4
5
6
7
int main() {
char letra;
char temp[5];
Dica: faça uma função, int
revela_letra(char *orig, char
*ast, char letra). Esta função pode
38
fazer a troca de asteriscos pela letra e
retornar um INTEIRO que representa a
QUANTIDADE de trocas feitas
39
Misturar scanf("%s", ...) e
scanf("%c", ...) gera resultados
estranhos...
scanf("%s", temp); // le e coloca na string
letra = temp[0]; // primeiro caracter lido sera armazenado em
letra
8
9
10
printf("%c", letra);
}
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
1
2
3
4
5
6
7
8
9
10
introdução à programação
include <stdio.h>include <time.h>
int main() {
int max;
int aleatorio;
max = 10;
srand(time(NULL)); // necessario para a sequencia nao
// 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
14
15
16
// pode ser executado quantas vezes precisarmos
printf("%i\n", aleatorio);
}
Adapte-o para ler de um arquivo40 várias palavras e armazená-las
em um vetor. Depois, imprima uma palavra aleatória na tela.
1
2
3
4
5
6
// vetor de strings:
char minhasStrings[100][50]; // 100 strings de ate 50 chars
// ler a primeira string:
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.
É necessário colocar algumas palavras
iniciais no arquivo para testar
40
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
2
3
4
5
6
7
8
9
int main()
{
/* declaracao de variaveis de entrada */
float altura, raio;
/* declaracao de variaveis de saida */
int qtdLatas;
float custo;
82
introdução à programação
10
/* constantes (nao mudam no programa, servem so pra ficar mais
claro */
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
float pi = 3.14;
float precoLata = 20.0;
/* variaveis intermediarias, auxiliares para o calculo */
float areaBase, circBase, areaCilindro, qtdLitros;
/* ler os dados do usuario */
printf ("\nDigite o valor da altura em metros: ");
scanf ("%f",&altura);
printf ("\nDigite o valor do raio em metros: ");
scanf ("%f",&raio);
/* realizar os calculos */
areaBase = pi*raio*raio;
circBase = 2*pi*raio;
areaCilindro = 2*areaBase + altura*circBase;
qtdLitros = areaCilindro/3;
qtdLatas = ceil(qtdLitros/5); // nao podemos comprar meia lata
custo = qtdLatas * precoLata;
/* mostrar o resultado */
printf ("\nA qtidade de latas necessaria eh de %i \n",
qtdLatas);
35
36
printf ("O valor total das tintas eh de RS %.2f \n", custo);
}
Aula 4 - Laboratório
Exercício 1
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
int x, y, soma;
printf("Digite um numero do seu teclado: ");
scanf("%i", &x);
printf("Digite outro numero do seu teclado: ");
scanf("%i", &y);
soma = (x+y);
printf("A soma dos numeros e: %i\n", soma);
system("PAUSE");
}
respostas
Aula 6 - Laboratório
Exercício 1
Repare como temos um if dentro de outro.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() {
float x,y,z;
printf("Digite o primeiro numero:\n");
scanf("%f",&x);
printf("Digite o segundo numero:\n");
scanf("%f",&y);
if (x+y>20){
printf("E maior que 20");
if (x<=15 && y<=15){
z=x*y;
printf("Multiplicacao: %f", z);
}
}
}
Exercício 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main() {
float n, nQuadrado;
printf("Digite um nr:\n");
scanf("%f",&n);
nQuadrado=n*n;
if(nQuadrado<4) {
printf("Menor que 4");
}
else if(nQuadrado<64) {
printf("Menor que 64");
}
else if(z<1024) {
printf("Menor que 1024");
}
else {
printf("Numero grande");
}
}
83
84
introdução à programação
Exercício 3
Essa solução usa o else if e else para chegar no resultado,41 outras
são possíveis.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Solução enviada por Yan T. Galvan
42
Enviada por Andressa Martins
int main()
{
float x,y,z;
printf("digite o valor de x\n");
scanf("%f", &x);
printf("digite o valor de y\n");
scanf("%f", &y);
printf("digite o valor de z\n");
scanf("%f", &z);
if(x<y && x<z){
printf("x eh o menor de todos");
}
else if(y<z){
printf("y eh o menor de todos");
}
else {
printf("z eh o menor de todos");
}
}
Outra solução possível é:42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
41
int main() {
float x;
float y;
float z;
printf("Digite o primeiro numero:\n");
scanf("%f",&x);
printf("Digite o segundo numero:\n");
scanf("%f",&y);
printf("Digite o terceiro numero:\n");
scanf("%f",&z);
if(z<y && z<x){
printf("Menor numero e:%f \n", z);
}
else if(y<z && y<x){
printf("Menor numero e:%f \n", y);
}
else if(x<z && x<y){
printf("Menor numero e:%f \n", x);
respostas
23
24
85
}
}
Exercício 5
Exercício adaptado do enviado por Mauricio Piovezan, Brunno
Frantz e Kazuo43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main()
Sim, o professor viu o printf engraçadinho no final. Não é necessário
para a solução correta do problema. . .
43
{
int A, B ,C;
printf("Digite os 3 lados do triangulo A, B e C: ");
scanf ("%i %i %i", &A, &B, &C);
/* Testamos se eh um triangulo */
if ( ((A + B) > C) && ((B + C) > A) && ((A + C) > B)){
if ( A==B && B==C ) {
printf("Triangulo Equilatero\n");
}
/* aqui, ja sabemos que o triangulo NAO eh equilatero */
else if ( (A==B) || (B==C) || (A==C)) {
printf("Triangulo Isosceles\n");
}
else {
printf("Triangulo escaleno\n");
}
}
else {
printf("Nao eh triangulo\n");
}
printf("\n\n dar uma nota a mais para os alunos Mauricio
Piovezan, Brunno Frantz e Kazuo :) \n\n");
25
26
27
system("PAUSE");
return 0;
}
Aula 10 - Laboratório FOR
Resposta referentes a Aula 10. 44
Exercício 01
1
2
3
4
5
int main() {
char nome[20];
int i, n;
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
44
86
6
7
8
9
10
11
12
13
14
15
introdução à programação
printf("Digite seu nome: ");
scanf("%s", &nome);
printf("De 0 a 10, quao narcisista voce eh? ");
scanf("%i", &n);
for(i=1; i <= n; i++) {
printf("%s\n", nome);
}
}
o
Exercício 02 - Fatorial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() {
int resultado, n, i;
printf("Digite um numero: ");
scanf("%i", &n);
resultado = 1;
for(i=1; i <=n; i++) {
resultado = resultado * i;
}
printf("Fatorial de %i eh %i\n", n, resultado);
}
Exercício 03 - Potência
Você chegou à mesma solução? Entendeu porque o programa funciona mesmo quando o usuário digita o expoente 0?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main() {
float base, resultado;
int exp, i;
printf("Digite a base: ");
scanf("%f", &base);
printf("Digite o expoente: ");
scanf("%i", &exp);
resultado = 1;
for(i = 0; i < exp; i++) {
resultado = resultado * base;
}
respostas
16
17
87
printf("%f elevado a %i: %f\n", base, exp, resultado);
}
Exercício 04 - Tabuada
1
2
3
4
5
6
7
8
int main() {
int i,j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= 9; j++) {
printf("%i x %i = % i\n", i, j, i*j);
}
}
}
Exercício 05 - MMC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main() {
int n1, n2, mmc;
printf("Digite o nr1: ");
scanf("%i", &n1);
printf("Digite o nr2: ");
scanf("%i", &n2);
mmc = 1;
while((mmc % n1 != 0) || (mmc % n2 != 0)) {
mmc++;
}
printf("O MMC de %i e %i eh %i\n", n1, n2, mmc);
}
Aula 12 - Vetores
Resposta referentes a Aula 12. 45
Problema 3
1
2
3
4
5
6
7
8
define QTD 3
int main() {
int i,contador;
float temperaturas[QTD];
for(i = 0; i<QTD; i++) {
// garantir que temp estah na faixa
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
45
88
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
introdução à programação
do {
printf("Digite uma temperatura entre -15 e 45: ");
scanf("%f", &temperaturas[i]);
}
while(temperaturas[i] < -15 || temperaturas[i] > 45);
}
// contar superiores a 28
contador = 0;
for(i = 0; i<QTD; i++) {
if(temperaturas[i] > 28) {
contador++;
}
}
// imprimir vetor
for(i = 0; i<QTD; i++) {
printf("Temp %i: = %f\n", i, temperaturas[i]);
}
// imprimir quantidade acima de 28
printf("%i dias quentes!\n", contador);
}
Aula 14 - Lab Matrizes
Resposta referentes a Aula 14. 46
Problema 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
define ALUNOS 2
define NOTAS 3
define PESO1 0.4
define PESO2 0.4
define PESOTRAB 0.2
int main() {
float notas[ALUNOS][NOTAS+1]; // 3 notas + a media
float total, media;
int i,j;
for(i = 0; i<ALUNOS;i++) {
// cada nota
printf("Digite a nota da prova 1 do aluno %i: ", i);
scanf("%f", &notas[i][0]);
printf("Digite a nota da prova 2 do aluno %i: ", i);
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
46
respostas
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
89
scanf("%f", &notas[i][1]);
printf("Digite a nota do trabalho do aluno %i: ", i);
scanf("%f", &notas[i][2]);
// calcular a media com os pesos e armazenar na ultima coluna
// para cada aluno
notas[i][3] = notas[i][0]*PESO1 + notas[i][1]*PESO2 +
notas[i][2]*PESOTRAB;
}
// aqui, temos as notas lidas e a media calculada
// fornecer medias e conceitos de cada aluno
for(i = 0; i<ALUNOS;i++) {
printf("Aluno %2i: %2.2f %2.2f %2.2f - %2.2f - ",
i, notas[i][0], notas[i][1], notas[i][2],
notas[i][3]);
// imprimir conceito
if(notas[i][3] >= 9) {
printf("A\n");
}
else if(notas[i][3] >= 7.5) {
printf("B\n")
}
else if(notas[i][3] >= 6.0) {
printf("C\n");
}
else if(notas[i][3] >= 3) {
printf("D\n");
}
else {
}
}
// agora, calcular as medias da turma
for(j = 0; j < NOTAS; j++) {
total = 0;
for(i = 0; i < ALUNOS; i++) {
total = total + notas[i][j];
}
media = total/ALUNOS;
printf("Media da nota %i = %2.2f\n", j, media);
}
}
Aula 16 - Funções
Resposta referentes a Aula 16. 47
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
47
90
introdução à programação
Exercício 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
float exp(float base, int e) {
float r = 1;
while(e > 0) {
r = r*base;
e--;
}
return r;
}
int main() {
float b;
int e;
printf("Digite a base: ");
scanf("%f", &b);
printf("Digite o expoente: ");
scanf("%i", &e);
printf("O resultado eh %f\n", exp(b, e));
}
Exercício 5
1
2
3
4
5
6
7
8
9
10
int main() {
float a;
int x, z;
scanf("%f", &a);
scanf("%i", &x);
scanf("%i", &z);
printf("Resultado = %f\n", pow(pow(a,x), z));
}
Aula 18 - Funções e Ponteiros
Resposta referentes a Aula 18. 48
Exercício 2
1
2
3
4
5
float soma(float *v, int n) {
int i;
float s = 0;
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
48
respostas
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
91
for(i=0;i<n;i++) {
s += v[i];
}
}
int main() {
float vetor[3];
int i;
for(i=0;i<3;i++) {
scanf("%f", &vetor[i]);
}
printf("A soma eh: %f\n", soma(vetor, 3));
}
Aula 20 - Arquivos
Resposta referentes a Aula 20. 49
Exercício 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() {
FILE *arquivo;
char temporario[30];
arquivo = fopen("teste.txt", "w");
if(arquivo == 0) {
/* erro ao abrir, sair */
exit(0);
}
// "simula" um arquivo no teclado, para parar
// de inserir, no Windows, Ctrl-Z + Enter
while(scanf("%s", temporario) != EOF) {
fprintf(arquivo, "%s\n", temporario);
}
fclose(arquivo);
}
Exercício 5
1
2
3
4
5
int le_nomeidade(FILE *arq, char *nome, int *idade) {
if(fscanf(arq, "%s", nome) < 1) {
return 0;
}
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
49
92
introdução à programação
if(fscanf(arq, "%i", idade) < 1) { // sem e-comercial, pois eh
6
um ponteiro
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// o e-comercial esta na chamada da funcao, na main
return 0;
}
// cheogu aqui, conseguiu ler
return 1;
}
int main() {
FILE *arquivo;
char nome[30];
int idade;
arquivo = fopen("teste.txt", "w");
if(arquivo == 0) {
/* erro ao abrir, sair */
exit(0);
}
while(le_nomeidade(arquivo, nome, &idade) != 0) {
printf("%s", nome);
printf("%i", idade);
}
fclose(arquivo);
}
Aula 22 - Estruturas
Resposta referentes a Aula 22. 50
Exercício 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct jogador {
char nome[50];
char email[60];
int pontuacao;
};
int main() {
struct jogador facebookson;
strcpy(facebookson.nome, "Facebookson Schreiner");
strcpy(facebookson.email, "[email protected]");
facebookson.pontuacao = 1050;
printf("Nome: %s\n", facebookson.nome);
printf("Email: %s\n", facebookson.email);
As soluções são exemplos de solução
correta, não quer dizer que outra
solução esteja necessariamente errada.
50
respostas
17
18
printf("Pontuacao: %i\n", facebookson.pontuacao);
}
93
Download

Apostila (atualizada constantemente)