Prof. Santiago Valdés Ravelo santiago.ravelo@inf.ufrgs.br
Estrutura de um
programa em C .
INF01202Algoritmos e programação.
1 Criação de programas
2 Elementos da linguagem C
Criação de programas
Solução de um problema
Problema Análise
Algoritmo Programa
Criação de programas
Problemas
I Calcular a quantidade de azulejos (quadrados) necessários para cobrir uma parede retangular.
I Determinar o último dígito de um número inteiro.
Criação de programas
Definição dos problemas
I Calcular a quantidade de azulejos (quadrados) necessários para cobrir uma parede retangular.
Entrada três números positivos: a largura dos azulejos, a largura e a altura da parede.
Saída um número inteiro positivo: o menor número de azulejos cuja soma das áreas é maior ou igual que a área da parede.
I Determinar o último dígito de um número inteiro.
Entrada um número inteiro.
Saída um número inteiro entre 0 e 9 igual ao último dígito do número da entrada.
Criação de programas
Algoritmo para um problema. Exemplo
Algoritmo AzulejosParede
/*Calcula a quantidade de azulejos quadrados necessária para cobrir uma parede retangular.
Entrada: largura dos azulejos, largura e altura da parede Saída: quantidade de azulejos*/
1. INÍCIO 2. LerlarguraAz 3. LerlarguraPar 4. LeralturaPar 5. areaAz←larguraAz2
6. areaPar←larguraPar*alturaPar 7. divisao←areaPar/areaAz 8. quantidade← ddivisaoe 9. Imprimirquantidade 10. FIM
Criação de programas
Algoritmo para um problema. Exemplo
Algoritmo AzulejosParede
/*Calcula a quantidade de azulejos quadrados necessária para cobrir uma parede retangular.
Entrada: largura dos azulejos, largura e altura da parede Saída: quantidade de azulejos*/
1. INÍCIO 2. LerlarguraAz 3. LerlarguraPar 4. LeralturaPar
5. quantidade← d(larguraPar∗alturaPar)/(larguraAz2)e 6. Imprimir quantidade
7. FIM
Criação de programas
Algoritmo para um problema. Exemplo
Algoritmo UltimoDigito
/*Imprime o último dígito de um número inteiro.
Entrada: número inteiro
Saída: último dígito do número*/
1. INÍCIO 2. Ler numero
3. digito ← numero(mod 10) 4. Imprimir digito
5. FIM
Criação de programas
Processo de codificação INÍCIO
codificação
compilação
Erro de compilação:
léxico/sintático/semântico
Sucesso compilando
Erro de execução: semântico
Sucesso testando
FIM Teste
Elementos da linguagemC
Elementos léxicos (átomos ou tokens)
I Identificadores: sequências de caracteres conformadas por:
I letrasmaiúsculaseminúsculas(sem acentos!!!),
I dígitos de0 a9,
I o símbolo_(sublinhado).
Observação: identificadores não podem começar com dígitos!!
I Números: sequências de dígitos de 0a9, podendo conter um . (ponto) e podendo começar com um- (menos).
I Textos: sequências de caracteres entre“ ” (aspas duplas, pode ser vazia) ou um único caractere entre’ ’ (aspas simples).
I Símbolos: {}[]()&|#;, .:><! = +− ∗/%.
Elementos da linguagemC
Palavras reservadas
Identificadores associados a elementos que compõem uma linguagem de programação.
C tem 32 palavras reservadas:
auto break case char const continue default do double else enum extern float forgoto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Evitar o uso degoto, pois fere o paradigma estruturado!!!!
Elementos da linguagemC
Comentários
I Permitem incluir observações para auxiliar na compreensão do código.
I EmC podem adotar duas formas:
// qualquer sequência de caracteres em uma linha após//é um comentário.
/*...*/ qualquer sequência de caracteres após/*e antes de*/é um comentário (podendo ter várias linhas).
I DESEJÁVEL: Incluir comentário na primeira linha de código para descrever o objetivo do programa!!!
Elementos da linguagemC
Tipos de dados
Determinam o conteúdo e tamanho da área na memória reservada para um dado.
Tipos de dados básicos emC Nome Tamanho Valores válidos Inteiro int 2 ou 4 bytes [−216,216)ou[−232,232) Inteiros maiores long 4 ou 8 bytes [−232,232)ou[−264,264) Decimal, precisão 6 casas float 4 bytes [1.2e−38,3.4e+38] Decimal, precisão 15 casas double 8 bytes [2.3e−308,1.7e+308]
Caractere char 1 byte Caracteres do código ASCII
double: pode variar de acordo com a arquitetura da máquina ou o sistema operacional.
Modificadores de tamanho e sinal:short,long,signed,unsigned. Usados na frente do tipo, ex:unsigned char,long long,short int.
Elementos da linguagemC
Sintaxe
REGRASde combinar os átomos para conformar frases ou sentenças da linguagem.
Construções sintáticas:
I Bibliotecas.
I Declarações.
I Expressões.
I Estruturas de controle.
Elementos da linguagemC
Bibliotecas
ContêmFUNÇÕES PRÉ-DEFINIDAS, utilizadas para executar AÇÕES ESPECÍFICAS.
Para incluir uma biblioteca emC se deve usar a diretiva#include Exemplos de bibliotecas disponíveis emC:
Biblioteca Descrição
#include<stdio.h> Funções de entrada e saída
#include<stdlib.h> Funções padrão
#include<math.h> Funções matemáticas
#include<system.h> Funções do sistema
#include<string.h> Funções de texto
Elementos da linguagemC
#include<stdio.h>
Duas funções importantes sãoscanfpara ler dados e printf para imprimir mensagens.
Formas de uso:
I scanf(“formatos”, &var1, &var2, · · ·);
I printf(“formatos”, exp1, exp2,· · ·);
Osformatos para as duas funções dependem do tipo de dado:
Tipo de dado Formato
int
%d ou %i
float
%f
double
%lf
char
%c
%d: para inteiros com base 10. %i: para inteiros, detectando a base 10 ou 16.
Elementos da linguagemC
Ler. Exemplos de uso
Para ler sempre há que colocar o valor em uma variável, usando o
&na frente dela!!!!!
1. scanf(“%i”,&x);/*lê um inteiro, detectando a base e coloca o valor na variável x*/
2. scanf(“%d %f”,&a, &b); /*lê um inteiro em base 10 e um real separados por espaço, coloca o inteiro na variávela e o real na b*/
Elementos da linguagemC
Imprimir. Exemplos de uso
Para imprimir pode ser o valor de uma variável, de uma expressão ou o resultado de chamar uma função!!
1. printf(“Ela nasceu em %d e morou em %d paises\n”, ano, p);
/*substitui no texto o primeiro %d pelo valor da variábel ano e o segundo pelo da variável p*/
2. printf(“A soma dos valores dos preços foi: %f”, x+y+z);
/*substitui o %f pelo resultado da soma dos valores associados às variáveis x, y e z*/
3. printf(“A soma dos valores dos preços foi: %.2f”, x+y+z);
/*semelhante ao anterior mas imprime o resultado com somente duas casas decimais!*/
Para formatar números reais a serem impressos com no mínimoxdígitos antes da vírgula e atéycasas decimais, se usa: %x.yf
Elementos da linguagemC
Imprimir. Alguns caracteres especiais
Caractere Explicação
\\ O próprio caractere \
\n Troca de linha
\t Tabulação
\’ O caractere ’
\“ O caractere “
Elementos da linguagemC
#include<math.h>
Função Uso Descrição
ceil ceil(x) Arredonda x para acima: ceil(3.2)=4
cos cos(x) Cosseno de x em radianos
fabs fabs(x) Valor absoluto de x: fabs(-2)=fabs(2)=2 floor floor(x) Arredonda x para baixo: floor(3.2)=3
exp exp(x) Constante e elevada a x: ex
log log(x) Logaritmo natural de x: lnx= logex log10 log10(x) Logaritmo em base 10 de x:log10x
pow pow(x,y) Potência de x elevado a y:xy
Elementos da linguagemC
#include<math.h>
Função Uso Descrição
round round(x) Arredonda x para o inteiro mais próximo
sin sin(x) Seno de x em radianos
sqrt sqrt(x) Raíz quadrada de x: √
x
tan tan(x) Tangente de x em radianos
Elementos da linguagemC
Declaração de constantes
Sintaxe:
#define<IDENTIFICADOR> <VALOR>
I Ex: #define PI 3.1416
I Identificadores cujos valores nunca mudam.
I Geralmente declarados e usados após as linhas de inclusão de bibliotecas.
I Por padrão se escreve o identificador da contante sempre em maiúsculas.
I Entre o identificador e o valor só pode haver espaços.
I Durante a compilação estes identificadores são substituídos pelos valores.
Elementos da linguagemC
Declaração de variáveis
Sintaxe: (padrão, escrever identificadores de variáveis com minúsculas)
I . <tipo> <identificador>;
I charconceito;
I floatsalario;
I . <tipo> <identificador> =<expressão>;
I charconceito= ’A’;
I floatsalario= 5432.10+1234.5;
I . <tipo> <identificador_1>,· · · ,<identificador_n>;
I intdia,ano;
I charconceitoAP= ’A’,conceitoCalc = ’B’;
Elementos da linguagemC
Expressões aritméticas
Sintaxe: <operando> <operador> <operando>
Operando: valor de uma constante, variável, função ou expressão aritmética.
Operador Uso Descrição
+ x + y Soma os valores de x e y
- x - y Subtrai o valor de y do valor de x
* x * y Multiplica os valores de x e y
/ x / y Divide o valor de x pelo de y
% x % y Resto da divisão inteira do valor de x pelo de y Quando os valores de x e y são inteiros: x/y também é inteiro. Para usar o operador
% tanto x quanto y devem ser inteiros!!
O tipo da expressão é sempre o tipo mais geral entre os operandos!!!
Elementos da linguagemC
Precedência de operadores
Ordem Operadores
1o funções
2o * / %
3o + -
Para modificar a precedência se devem usar parêntesis:
v = a * 5 + b;// multiplica primeiro a vezes 5 e soma o resultado com b v = a * (5 + b);// soma primeiro 5 com b e multiplica o resultado com a
Elementos da linguagemC
Atribuição
Operador Uso Significado
= x = y Atribui a x o valor de y
+= x += y x = x + y
-= x -= y x = x - y
*= x *= y x = x * y
/= x /= y x = x / y
%= x %= y x = x % y
++ x ++ x += 1 ou x = x + 1
- - x - - x -= 1 ou x = x - 1
x precisa ser uma variável, y pode ser uma expressão!
Elementos da linguagemC
Expressões aritméticas. Funcionamento
float x = 2;//declara um real com precisão simples int y = 1, z = 2;//declara dois inteiros
double w;//declara um real com dupla precisão w=x * (y/2 +z /2);
int int int int
| {z } | {z }
0 1
int int
| {z }
1
float int
| {z }
2 float
| {z }
2 double
Elementos da linguagemC
Casting
Sintaxe:
(<TIPO>) <EXPRESSÃO>
Altera o tipo da expressão!!
Exemplo:
float x = 2;//declara um real com precisão simples int y = 1, z = 2;//declara dois inteiros
double w;//declara um real com dupla precisão w =x* ( (float)y/2 +z/ 2);
No exemplo o valor final de w é 3 ao invés de 2. Pois o valor y é levado parafloat antes da divisão!!
Elementos da linguagemC
Estrutura de um programa em C
/*Comentário inicial descrevendo objetivos do programa*/
#include<stdio.h>//para entrada e saída de dados //outras bibliotecas necessárias
//outras declarações
intmain (){//função principal (obrigatória)
//declarações antes das instruções //intruções
return 0;//para encerrar o programa normalmente }
Elementos da linguagemC
Exemplo
/*Calcular a quantidade de azulejos quadrados para cobrir uma parede retangular*/
#include<stdio.h>//biblioteca de entrada/saída
#include<math.h>//biblioteca de funções matemáticas intmain(){//função principal
floatlarguraAz, larguraPar, alturaPar;//declaração dos dados de entrada intquantidade;//declaração dos dados de saída
printf(“Informe a largura dos azulejos:\n”);//imprime mensagem scanf(“%f”,&larguraAz);//Lê largura dos azulejos
printf(“Informe a largura e a altura da parede:\n”);//imprime mensagem scanf(“%f %f”,&larguraPar,&alturaPar);//Lê largura e altura da parede quantidade= ceil( ( larguraPar*alturaPar )/ (larguraAz*larguraAz));
printf(“Precisa %d azulejos para cobrir a parede\n”, quantidade);
return 0;//encerra o programa }
Elementos da linguagemC
Exemplo
/*Imprimir o último dígito de um número inteiro*/
#include<stdio.h>//biblioteca de entrada/saída intmain(){//função principal
intnumero;//declaração dos dados de entrada intdigito;//declaração dos dados de saída
printf(“Informe o inteiro:\n”);//imprime mensagem scanf(“%d”,&numero);//Lê o número
digito = numero% 10;//obtém o último dígito
printf(“O ultimo digito de %d resulta: %d\n”, numero, digito);
return 0;//encerra o programa }
Elementos da linguagemC
Último dígito
O que acontece se o número inteiro for negativo?
Por exemplo, o resultado de −123 (mod 10) é 3?
Prof. Santiago Valdés Ravelo santiago.ravelo@inf.ufrgs.br
Estrutura de um
programa em C .
INF01202Algoritmos e programação.