Iniciação à programação em C
..:::.. Editor
Introdução à linguagem de programação C. Instalação e funcinamento do compilador.
CodeBloks F9 - Compilar e correr o programa
Em caso de erro após ou durante a instalação consultar a página
ou
DevC F11 - Compilar e correr o programa
ou
https://www.codechef.com/ide - Compilar online ou https://www.onlinegdb.com/
..:::.. Notas importantes
Notas importantes
C é case sensitive (FLOAT <> float)
\n muda de linha
; indica o fim da instrução
..:::.. Estrutura de um programa em C "Olá Mundo"
"Um IDE é um bloco de notas evoluído" O compilador (IDE) que vamos usar é o CodeBlocks
Main () // método principal
{
O compilador irá processar todas as instruções que estão dentro do método main ou método principal.
}
Exemplo
#include <stdio.h>
int main ()
{
printf ("Olá Mundo");
return 0;
}
#include <stdio.h> // include inclui a biblioteca stdio.h (standard Input Output). Neste caso a biblioteca é necessária para que seja possível utilizar o printf.
int
main ()// método principal
{
printf ("Olá Mundo"); // imprimir formatado
return 0;
}
..:::.. Ambiente de trabalho do CodeBlocks
..:::.. Instruções frequentes
Os 3 principais tipos de instruções:
Entrada : scanf("%d",&a);
Atribuição : area= base * altura / 2
Saída : printf("%d",sum);
printf ("%TipoDeSaída", ValorParaOutput);
..:::.. Variáveis em C - Variáveis C
Variáveis em C. Resolução de exercícios práticos
Na linguagem C as variáveis podem ser declaradas em qualquer momento, no entanto, por uma questão de boas práticas devemos declarar as variáveis no inicio do programa, logo a seguir ao meto main.
Tipos de dados: Inteiros e Reais
Números reais - Float -%f (16 bits)
Números inteiros - Int - %i ou %d (16 bits dependendo da
máquina)
Caracteres - Char - %c (8 bits)
Cadeia de caracteres - String - %s
Exemplo 1 com tipos de dados - TiposDeDados
As variáveis devem ser sempre inicializadas com um valor, de outro modo o compilador vai atribuir um valor aleatório à variável, o que pode resultar num erro.
int a; deve ser int a=0;
O nome de uma variável não pode começar com um número.
#include <stdio.h>
#include <stdib.h>
int main ()
{
int num1, num2, valor;
printf ("BASE:\n");
printf ("Introduza um número não negativo: ");
scanf ("\n%d", &num1);
printf
("EXPONENTE:\n");
printf ("Introduza um número não negativo: ");
scanf ("\n%d", &num2);
valor =pow(num1,num2); /*função POW da biblioteca math.h*/
printf("%d elevado a %d é %d\n", num1, num2, valor);
return valor;
}
Elevar a uma potência pow
Sintaxe: variável=pow(base, expoente);
C#Desafio2 (Tipos de dados Inteiros e operadores aritméticos simples)
Desenvolve um programa que solicite ao utilizador 2 números inteiros. O programa deve somar os números digitados mostrando o resultado.
O
output do resultado deve ser de fácil leitura para o utilizador e.g. (Soma de 3 + 2 = 5 ) Solução .
C#Desafio2.1 (Tipos de dados inteiros e reais e operadores aritméticos simples)
Desenvolve um programa que multiplique o número de PI (3.14) por um número digitado pelo utilizador. . Solução
.
Tipos de dados: Caracter e Cadeia de Caracteres
Números reais - Float -%f (16 bits)
Números inteiros - Int - %i ou %d (16 bits dependendo da máquina)
Caracteres - Char - %c (8 bits)
Cadeia de caracteres - String - %s
#include <stdio.h>
int main(){
char nome[100];
int ano;
char turma;
printf("Nome\t: ");
gets(nome);// uma alternativa ao scanf
printf("Turma\t");
scanf("%c", &turma);
printf("ano\t: ");
scanf("%d", &ano);
printf("O teu nome: %s e frequentas a turma %c no %d ano ",nome,turma,ano);
return 0;
}
gets desempenha a função de scanf, apenas nas variáveis char.
Sintaxe: gets(variável);
\t cria um espaço de tabulação da mesma forma que \n muda de linha
..:::.. Tipos de dados mais comuns em c
Exemplo 2 com tipos de dados - TiposDeDados
%ld permite representar valores inteiros longos
%u Número decimal natural (unsigned int), ou seja, sem sinal.
..:::.. Outros códigos Printf
..:::.. Palavras Reservadas em #C
Algumas Palavras Reservadas em C:
auto else long switch break enum register typedef
case extern return union char float short unsigned const for signed void continue goto sizeof volatile default if static while
do int struct _Packed double
..:::.. Operadores Aritméticos
Exemplo 4 Operadores - Operadores Aritméticos
C#Desafio3 (Operadores Aritméticos)
Desenvolve um programa que solicite ao utilizador 2 números inteiros. O programa deve realizar todas as operações (+, -, /, * e o resto da divisão). Solução.
..:::.. Operadores de Atribuição
Exemplo 4.1 Operadores - Operadores de Atribuição
Os operadores de atribuição aumentam a performance dos programas porque facilitam a interpretação das instruções por parte do processador.
..:::.. Operadores de Incremento e Decremento
Exemplo 4.2 Operadores - Operadores de Incremento e Decremento
Pós incremento vs pré incremento
Pós incremento (Atribuição e incremento)
posIncre=a++; é o mesmo que ter atribuição posIncre=a; incremento a++;
Pré incremento (Incremento e atribuição)
preIncre=++b; é o mesmo que ter incremento b++; atribuição preIncre=b;
..:::.. O operador sizeof
Exemplo 4.3 Operadores - Operadores de Incremento e Decremento
O sizeof é um operador unário que retorna o tamanho de uma, constante, variável, array, estrutura etc.
C#Desafio5 (Operadores de incremento e decremento e SizeOf)
Desenvolve um programa que solicite ao utilizador 2 números, um inteiro e um real. O programa deve incrementar mais 1 no número real e decrementar
1 no número inteiro, mostrando o valor da variável antes e após o incremento ou decremento. O programa deve, também, indicar o espaço que ocupam as variáveis utilizadas no programa. Utilize os operadores de incremento e decremento e SizeOf.
Solução .
C#Desafio6
Desenvolve um programa que faça a troca de dois números introduzidos pelo utilizador. E.g. (1º numero é 3 e o 2º é 4 - o Output será 1º número é 4 e o 2º número é 3 Solução
.
..:::.. Mais Bibliotecas
#include <stdlib.h> é uma biblioteca padrão do C# que deve estar presente em todos os programas, tal como a #include <stdio.h>
Lista de bibliotecas C# http://www.cplusplus.com/reference/clibrary/
..:::.. Exercício prático
Calculadora V1.0
Tendo em conta os conteúdos abordados, nete momento já é possível desenvolver uma calculadora que permita:
- Solicitar ao utilizador que insira 2 números, seguidamente o programa deve fazer
todas as operações matemáticas com os números digitados.
..:::.. Caracteres de fuga
Escape sequences - Sequências de escape ou caracteres de fuga.
As sequências de escape ou caracteres de fuga. Uma sequência de escape é uma sequência
de caracteres que não se representa a si mesma. Esta sequência é traduzida num outro caracter ou sequência de caracteres que podem ser difíceis ou impossíveis de representar diretamente no compilador.
Caracteres de fuga exemplos:
\n (muda de linha)
\t (tabulação)
\\ imprime a barra
\” imprime a aspa
\’ aspa simples
\0 finaliza o texto
..:::.. Caracteres especiais em C
Como resolver o problema dos caracteres especiais em C?
A linguagem C deparamo-nos com um problema de formatação sempre que inserimos um caracter especial, uma vez que, quando compilamos o programa os caracteres
ficam desformados. Para resolver este problema basta carregar a biblioteca #include <locale.h> e introduzir o código setlocale(LC_ALL, "Portuguese"); depois do metodo principal
int main () {
..:::.. Operadores relacionais
..:::.. Operadores Lógicos
Estrutura Condicional em ESCADA
Estruturas de decisão - Estrutura Condicional - Ciclo IF
..:::.. Ciclo IF Estrutura Condicional Simples
IF...
SE...
Estrutura Condicional simples
SE = IF
INÍCIO = {
FIM = }
..:::.. Ciclo IF Estrutura Condicional composta
IF...
SE...
Estrutura Condicional Composta
SE = IF
Condição verdadeira
ELSE = Senão
Condição falsa
..:::.. Ciclo IF Estrutura Condicional em escada
IF...
SE...
Estrutura Condicional em ESCADA
SE = IF
Condição verdadeira (Condição 1)
ELSE IF= Senão SE
Outra condição verdadeira (Condição 2)
ELSE = Senão
Nenhuma das condições anteriores é verdadeira (Condição 1 e Condição 2)
Exemplo 9 - Ciclo IF - Estrutura Condicional em escada Ladder if
..:::.. Ciclo IF Estrutura Condicional aninhada
IF...
SE...
Estrutura Condicional ANINHADA
SE = IF Condição verdadeira (Condição 1)
{
IF= SE Outra condição verdadeira (Condição 2)
ELSE = Senão Condição 2 falsa
}
ELSE = Senão Condição 1 falsa
Exemplo 10- Ciclo IF - Estrutura Condicional em aninhada - Nested if
C#Desafio8 Estrutura Condicional ANINHADA)
8- Elabora um algoritmo que verifique se um determinado número está dentro de um determinado intervalo de valores (10 a 15)
8.1- Restrutura
o algoritmo para que o intervalo de valores seja introduzido pelo utilizador.
8.2 - Caso o utilizador digite um intervalo e.g.(15...10), o programa deve ordenar os números em ordem crescente e verificar se o
numero digitado está dentro do intervalo. Solução .
C#Desafio9
9- Elabora um algoritmo que verifique se um determinado aluno é elegível para a bolsa de mérito, tendo em conta os critérios:
Média na formação técnica >=15
Média na formação
científica >=13
Média na formação sociocultural>=12
Total das 3 componentes >=41
ou
Total da formação técnica e científica >=30
9.1. (Facultativo) - Faz com que o programa mostre
a mensagem a vermelho, caso o aluno cumpra os critérios estabelecidos. "Podes pesquisar na Internet!!"
Nota: Ainda podemos melhorar mais o programa, e.g1 - Não permitir que o utilizador digite números
superiores a 20 nem menores que 0; e.g2 - Permitir que seja o utilizador a escolher os critérios de elegibilidade dos alunos de mérito Solução
.
Estruturas de decisão - CASE
..:::.. CASE
CASE...
CASO...
Estrutura Condicional ANINHADA
switch (n)
{
case 1:
// Código a ser executado no caso da escolha 1;
break;
case 2:
// Código a ser executado no caso da escolha 2;
break;
.
. .
default:
//
Código a ser executado no caso da escolha não coincidir com nenhuma das opções;
}
C#Desafio10 (Estrutura de decisão CASE)
10- Utilizando SWITCH CASE - Elabora um algoritmo que associe os números de 1 a 7 aos dias da semana de Segunda a Domingo, ou seja, se o utilizador digitar
1 o programa deve fazer o output "segunda-feira"...
10.1 - Altera o programa criado para que, no caso de o utilizador digitar um número fora do intervalo de 1 a 7, o programa deve indicar que
o número está fora do intervalo permitido. Solução .
..:::.. Instrução goto
rótulo:
..
.
goto:rótulo;
Instrução goto
#include <stdio.h>
int main()
{
int num1=0;
SALTOteste: // rótulo
printf("digite um número\n");
printf("Se digitar < 10 tem a oportunidade de
voltar a digitar\n");
scanf("%d\n2",&num1);
if (num1>10)
printf("O num é maior que 10\n");
else
goto SALTOteste; // goto:rótulo;
return
0;
}
C#Desafio10A (Estrutura de decisão CASE)
10A- Utilizando SWITCH CASE - Altera o programa solicitado no desafio 10 para que, caso o número digitado esteja fora do intervalo (1 a 7) o programa deve
permitir que o utilizador volte a tentar. Solução .
C#Quiz1
Para resolver o quiz podes consultar a informação que entenderes e podes fazer testes no CodeBlocks para ajudar na resolução. Com este quiz vais poder comprovar que a linguagem C é mais complexa
que o pascal e também mais potente. Aceder ao Quiz 1 .
Laços de repetição LOOP - For - While
While LOOP
Do While LOOP
For LOOP
..:::.. While Loop
While // condição verdadeira...
Faz // as instruções definidas pelo programador...
Estrutura de repetição while
Sintaxe
while loop (Enquanto condição verdadeira)
{
//Código (Enquanto condição verdadeira, executa o código entre as {} )
}
..:::.. Do While Loop
While // condição verdadeira...
Faz // as instruções definidas pelo programador...
Estrutura de repetição Do while
Sintaxe
Do (Faz)
{
//Código (Enquanto condição verdadeira, executa o código entre as {} )
}
while loop (Enquanto condição verdadeira)
C#Desafio11A (Estrutura de repetição Do while)
11A- Utilizando Do While LOOP - Elabora um algoritmo que calcule a tabuada de um número digitado pelo utilizador (a tabuada deve ser mostrada
na ordem inversa, ouseja, começa no 10xnúmero e acaba em 1xnúmero). Nota que um contador em C, aquando do decremento, pode ter a sintaxe contador--; ... Solução
.
..:::.. For Loop
For...To...Do
Estrutura de repetição For
for (Condição inicial ; Condição; Atualização do contador)
{
código:
}
C#Desafio12 (Estrutura de repetição For)
12- Utilizando o For LOOP - Elabora um algoritmo que mostre no ecrã os 10 primeiros números inteiros.
12.1. Altera o programa criado anteriormente
para que, além de mostrar os 10 números também mostre a soma e a média.
12.2. Altera o programa para que o intervalo de números seja introduzido pelo utilizador. O programa deve mostrar os números que estão dentro
do intervalo definido pelo utilizador, a soma dos números e a média.
Nota que, para um intervalo de 3 a 6 o resultado da soma deve ser 18 e a média 4,5. ... Solução
.
C#Desafio12A (Estrutura de repetição For)
12A- Utilizando o For LOOP - Elabora um algoritmo que solicite ao utilizador:
- Um intervalo de números e.g. (o utilizador digita 1 e 5).
-
De sguida o programa deve permitir que o utilizador digite os números indicados no intervalo e.g. (5 números).
- No final o programa deve mostrar o total de números digitados; A soma e a média dos números digitados. . ...
Solução .
..:::.. break and continue nos ciclos de repetição (While e For LOOP) Voltar
..:::.. break nos ciclos de repetição (While e For LOOP)
Para testar o BREAK - utilizamos um programa que permite inserir até 5 números pares, caso seja inserido um número impar o programa para break.
..:::.. continue nos ciclos de repetição (While e For LOOP)
Para testar o CONTINUE - utilizamos um programa que permite inserir até 5 números. O programa irá somar todos os números impares. No caso de o utilizador digitar um número par o programa ignora-o continue.
C#Desafio13 (Continue)
13- Utilizando o Continue - Elabora um algoritmo que solicite 10 notas de 0 a 20 ao utilizador. O programa deve calcular a soma e a média das notas positivas
(apenas das notas positivas) digitadas. O programa deve ainda indicar a quantidade de notas positivas e a quantidade de notas negativas.
Este desafio deve dar origem a 3 programas: Utilizando o ciclo For, While e Do While.
... Solução .
Sabendo que a Sequência de Fibonacci é 0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584
Vetores e Matrizes
Um Vetor ou Matriz é uma coleção de variáveis de mesmo tipo, acessíveis com um único nome e armazenados contiguamente (um após o outro) na memória.
..:::.. Vetores ou matrizes unidimensionais
Características dos vetores
- Um só tipo de dados (conjunto ordenado de informações de mesma natureza);
- Um só nome;
- Múltiplas posições de memória identificadas por índices;
-
Acesso randómico (aleatório)
Sintaxe
tipodevariavel NomeDoVetor [tamanho]
Exemplo: float notas[5]
// Vetor com o nome notas que suporta números do tipo real (float), com 5 posições [5].
C#Desafio15 (Vetores)
Elabora um programa que leia 5 números inteiros e os armazene num vetor.
O programa deve ainda apresentar:
15.1- A quantidade total de números introduzidos no vetor; - A soma de
todos os números do vetor;
15.2- A quantidade de números superiores a 100; - A soma dos números superiores a 100;
15.3- A lista de todos os números introduzidos;
15.4- A lista de todos os números superiores
a 100; ... Solução .
..:::.. Matrizes ou matrizes multidimensionais, no caso bidimensionais.
As matrizes são estruturas de dados que possuem mais do que uma dimensão. Vimos que, os vetores (matrizes unidimensionais) necessitam apenas de um índice para acesso aos elementos. As matrizes necessitam utilizar um índice para cada dimensão, ou seja, um para as linhas e outro para as colunas.
Características das Matrizes
- Um só tipo de dados (conjunto ordenado de informações de mesma natureza);
- Um só nome;
- Múltiplas posições de memória identificadas por índices;
-
Acesso randómico (aleatório)
Sintaxe
tipodevariavel NomeDaMatriz [nºDeLinhas] [nºDeColunas]
Exemplo: float notas[2][5]
// Matriz com o nome notas que suporta números do tipo real (float),
com 2 linhas e 5 colunas [2][5].
O programa que serviu de exemplo para esta explicação pode ser visto integralmente na imagem abaixo.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int notas[2][5], i,j;
for(i=0;i<2;++i) // 2 linhas da matriz
NOTA pré incremento
{
for(j=0;j<5;++j) // 5 colunas da matriz NOTA pré incremento
{
notas[i][j]=10*(i+1);// Multiplica o número da linha
por 10
printf("Linha %d --- coluna %d com o valor: %d \n",i+1,j+1,notas[i][j]);
}
}
return 0;
}
C#Desafio16 (Matrizes bidimensionais)
Elabora um programa que permita inserir 9 números numa matriz 3x3. Após a inserção dos números o programa deve mostrar todos os números digitados, bem como a respetiva linha
e coluna.
16.1. O programa deve apresentar o resultado da soma dos números inseridos. ... Solução .
C#Desafio16A (Matrizes bidimensionais)
Elabora um programa que solicite ao utilizador 9 números inteiros para preencher uma matriz 3x3(considere que não serão digitados valores duplicados).
16A.1 -
Depois da matriz preenchida o programa deve solicitar ao utilizador um número inteiro e escrever uma mensagem indicando se o valor digitado existe ou não na matriz.
16A.1.1 -O programa deve indicar a linha e coluna onde
se encontra o número encontrado em 16A.1.
16A.2 -Altere o algoritmo para que caso o numero digitado já exista solicite ao utilizador que digite outro. ... Solução
.
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx