SlideShare uma empresa Scribd logo
1 de 120
1
FATEC de Santo André
Tecnologia em Eletrônica Automotiva
Linguagens e Técnicas de Programação
Notas de Aula
Prof.: Rogério
Email: fatec.sa.informatica@gmail.com
Página da disciplina: http://sites.google.com/site/fatecprogramacao
2
Objetivo da disciplina
Fornecer noções básicas de lógica, algoritmos e técnicas de programação, utilizando a linguagem de
programação C.
Conteúdo Programático
1. Introdução à lógica de programação;
2. Algoritmos: pseudocódigo e fluxograma;
3. Estruturas de controle sequencial, de seleção e de repetição;
4. Técnicas básicas de programação, conceitos e tipos de linguagens de programação;
5. Conceitos de programação estruturada e compilação;
6. Visão geral da linguagem C: variáveis, operadores, expressões e principais funções;
7. Compilador e ambiente de desenvolvimento para a linguagem C;
8. Vetores;
9. Strings;
10. Funções;
11. Ponteiros;
12. Manipulação de arquivos.
Bibliografia utilizada na disciplina
- Linguagem C. Luis Damas; LTC Editora, 10a
edição, 2007.
- C Completo e Total. Herbert Schildt. Makron Books, 3a
edição, 1996.
- Primeiro Curso de Programação em C. Edson L. F. Senne; Visual Books. 2a
edição, 2006.
3
Linguagem e Técnicas de Programação
Capítulo 1
Noções básicas deNoções básicas de
algoritmos e programaçãoalgoritmos e programação
4
AlgoritmoAlgoritmo
• Algoritmo é a descrição de um padrão de comportamento, expresso pela
execução de instruções, até que se alcance uma determinada condição.
• Um programa de computador é composto por um ou mais algoritmos.
• Exemplos de algoritmos:
a. Preparar um prato de comida;
b. Controle de injeção de combustível;
c. Compra e venda automática de ações na bolsa de valores.
• Exercício:
- Criar um algoritmo para cadastrar o login e a senha de acesso a um site. A
seguir, crie outro algoritmo que libera o acesso ao site, ao ser fornecido o login
e a senha corretos – o acesso é bloqueado após três tentativas com erro.
5
VariVariááveisveis
• Variável: nome de um local de memória onde se pode colocar
qualquer valor, do tipo básico associado à variável.
• Tipos básicos de variável:
– char: guarda um caractere.
– int: guarda um número inteiro.
– float e double: guardam um número real.
• Exemplos:
char primeiraLetra;
int anoFabricacao;
float velocidadeCarro;
double velocidadeLuz;
6
Comandos bComandos báásicossicos
3) Operadores aritméticos:
mais +
menos -
vezes *
dividir /
resto %
decrementa --
incrementa ++
opera e atribui += -= *= /=
2) Operadores lógicos:
e &&
ou ||
não !
4) Operadores relacionais:
é igual? ==
é diferente? !=
é maior? >
é menor? <
é maior ou igual? >=
é menor ou igual? <=
1) Atribuição:
quilometroRodado = 23458;
a = b;
temperaturaAlta = 23.56;
7
Linguagem e Técnicas de Programação
Capítulo 2
Lógica de ProgramaçãoLógica de Programação
8
Lógica de programação:Lógica de programação:
Bloco de comandos – execução sequencialBloco de comandos – execução sequencial
Pseudocógido Fluxograma
9
Estrutura de decisãoEstrutura de decisão
Alternativa simples Alternativa composta
10
Estruturas de decisãoEstruturas de decisão aninhadasaninhadas
Se a estrutura de decisão tem apenas um
comando, o uso de chaves é dispensável; para
dois ou mais comandos associados, o uso de
chaves é obrigatório
se (a > b)
a = a + 5;
senão apenas um comando
{
se (a > c)
{
b = b + 5;
a = a + 10;
} dois comandos
}
11
Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo
12
Estrutura de repetição com teste no finalEstrutura de repetição com teste no final
13
Comando break (abandone)Comando break (abandone)
14
Comando continueComando continue
15
Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle
16
Pseudocódigo / FluxogramaPseudocódigo / Fluxograma
Algoritmo que encontra o maior e o menor número digitado no
teclado. Quando é digitado o número 0, o processamento é
interrompido e são escritos na tela os números encontrados.
encontraMaiorMenor()
{
int maior, menor, valor;
valor = leTeclado();
maior = valor;
menor = valor;
enquanto (valor != 0)
{
se (valor > maior)
maior = valor;
senão
{
se (valor < menor)
menor = valor;
}
valor = leTeclado();
}
imprima(maior, menor);
}
17
ExercíciosExercícios
1) Descrever em pseudocódigo e em fluxograma um algoritmo
que imprime na tela a tabuada de um número digitado no
teclado.
2) Descrever em pseudocódigo e em fluxograma um algoritmo
que imprime o fatorial de um número digitado no teclado.
3) Descrever em pseudocódigo e em fluxograma um algoritmo
que lê um número inteiro de um teclado, calcula a
somatória de todos os números entre 1 e o número digitado
e escreve na tela o valor obtido.
18
Linguagem e Técnicas de Programação
Capítulo 3
Introdução à LinguagemIntrodução à Linguagem
de Programação Cde Programação C
19
Linguagens de programaçãoLinguagens de programação
• Linguagem de programação: conjunto finito de símbolos com os
quais se escrevem programas de computador.
• Exemplos de linguagem de programação: C, C++, Java, Pascal,
Cobol, Basic, PHP, Assembly.
• Dependendo da linguagem de programação, os programas podem
ser compilados, interpretados ou montados.
• Linguagens com compilação: C, C++, Pascal, Cobol etc.
• Linguagens com interpretação: Basic, PHP, Perl etc.
• Linguagens com compilação e interpretação: Java.
• Linguagem de montagem ou Assembly é uma notação razoavelmente
legível por humanos, correspondente ao código de máquina.
20
Linguagem de programação com compilaçãoLinguagem de programação com compilação
• Programa descrito em uma linguagem de programação:
sequência de comandos compreendida por um ser humano.
• Programa descrito em código de máquina: sequência de 0s e 1s
compreendida por uma CPU - Unidade Central de Processamento.
• Compilador: conversor de programas escritos em linguagem de
programação para códigos de máquina de uma CPU.
while(i < 10)
{
printf("%d", i);
i++;
}
compilador
10011101
00110001
01100111
11110101
11110001
21
Comparação entre linguagens de programaçãoComparação entre linguagens de programação
código nível vantagens desvantagens
código de
máquina
baixo
acesso a
todos os
recursos do
hardware
dificuldade de
programação
C médio
acesso a
todos os
recursos do
hardware
erros de
programação podem
comprometer o
funcionamento do
hardware
Java alto
facilidade de
programação
baixo aceso aos
recursos do
hardware
22
Código-fonte e código-executávelCódigo-fonte e código-executável
• Código-fonte: contém todos os comandos de um programa,
expressos em uma linguagem de programação.
• Código-executável: comandos de um programa convertidos para o
código de máquina de uma CPU.
• O compilador gera o código-executável, caso não encontre erros no
código-fonte.
• No sistema operacional Windows, arquivos com código-executável
possuem geralmente (mas não necessariamente), as extensões .exe
e .dll.
• No sistema operacional Linux (ou Unix), arquivos com código-
executável possuem geralmente (mas não necessariamente), a
extensão .sh, entre outras.
23
Linguagem de programação CLinguagem de programação C
• O C é uma linguagem de propósito geral, pertencendo a uma
família de linguagens cujas características são:
- acesso a recursos de baixo nível;
- geração de código eficiente;
- confiabilidade;
- simplicidade;
- muito utilizada para microprocessadores.
24
Regras geraisRegras gerais
• Os programas, em linguagem C, são compostos por uma ou mais
funções.
• As funções podem possuir argumentos e um tipo de retorno.
• Todo programa inicia-se com uma chamada à função main:
main()
{
comando1;
• comando2;
• ...
}
25
Regras geraisRegras gerais
• A linguagem C faz distinção entre maiúsculas e minúsculas. Exemplo: a
variável nomealuno é diferente de nomeAluno.
• Os comandos devem ser finalizados por ponto-e-vírgula.
• O comando inicial das estruturas de decisão e de repetição não são
finalizados por ponto-e-vírgula.
Exemplos:
if (a > b && d < e) while( a > 0 )
{ {
printf(“mensagem 1”); a = a – 1;
printf(“mensagem 2”); printf(“%d”, a);
} }
Sem ponto-e-vírgula! Sem ponto-e-vírgula!
Com ponto-e-vírgula! Com ponto-e-vírgula!
26
Tipos de VariáveisTipos de Variáveis
• A linguagem C dispõe de quatro tipos básicos de dados. As declarações
de variáveis, portanto, podem usar os seguintes tipos:
Número real (ponto flutuante com precisão dupla:
15 dígitos, limitados a: +/-1.7*10+/-308
)
8double
Número real (ponto flutuante com precisão simples:
7 dígitos, limitados a: +/-3.4*10+/-38
)
4float
Número inteiro (ANSI: de -32768 a 32767
(atualmente: de -2147483648 a 2147483647)
2 (padrão ANSI)
4 (atualmente)
int
Um caractere (ou, reciprocamente, um inteiro de
-128 a 127)
1char
ValorTamanho (bytes)Tipo
27
Especificadores de VariáveisEspecificadores de Variáveis
• Além do tipo da variável, podem ser utilizados alguns “especificadores”:
- unsigned: permite apenas números positivos;
- long: amplia o tamanho de um tipo de variável;
- short: restringe o tamanho de um tipo de variável.
• Exemplos
- long int: variável int com 64 ou 32 bits, dependendo do compilador;
- short int: variável int com 16 ou 8 bits, dependendo do compilador;
- unsigned int: variável int com valores entre 0 e 4 bilhões.
28
Palavras reservadas da linguagem CPalavras reservadas da linguagem C
Palavras reservadas pelo padrão ANSI Algumas outras palavras reservadas
asm
cdecl
interrupt
near
far
huge
Observação importante: palavras reservadas não podem ser
usadas como nomes de variáveis.
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
29
Bloco de comandosBloco de comandos
30
Estrutura de decisãoEstrutura de decisão
31
Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo
32
Estrutura de repetição com teste no finalEstrutura de repetição com teste no final
33
Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle
34
Comando break (abandone)Comando break (abandone)
35
Comando continueComando continue
36
Linguagem e Técnicas de Programação
Capítulo 4
Primeiros programasPrimeiros programas
em Linguagem Cem Linguagem C
37
Função printfFunção printf
Sintaxe: printf ( "expressão de controle", argumentos )
• A função printf permite escrever mensagens no dispositivo padrão de
saída (tela).
• A expressão de controle contém caracteres que serão exibidos na tela e
pode conter códigos de formatação que indicam o formato em que os
argumentos devem ser impressos.
• Cada argumento deve ser separado por vírgula.
• Exemplos:
printf(“nnEste eh o numero dois: %d", 2);
printf("Aluno: %s t Nota: %f", "Pedro", 7.5);
Expressão de controle argumento
38
Função printfFunção printf
- Formatadores:
%f número em ponto flutuante (float ou double)
%d número em formato decimal
%o número em formato octal
%x número em formato hexadecimal
%c caractere simples
%s cadeia de caracteres
n nova linha (pula uma linha)
t tab (insere espaços de uma tabulação)
" aspas (usado quando se quer imprimir aspas)
 barra (usado quando se quer imprimir uma barra)
39
Função scanfFunção scanf
Sintaxe: scanf("expressão de controle", argumentos)
• A função scanf permite ler dados formatados da entrada padrão (teclado)
e gravar no(s) endereço(s) de variável(eis).
• A lista de argumentos contém o(s) endereço(s) de variável(eis).
• O operador de endereço em C é referenciado pelo símbolo &, que
retorna o endereço de uma variável ou dispositivo físico.
• Exemplo:
int num;
printf("Digite um numero: ");
scanf("%d", &num);
printf(“Numero digitado: %d", num);
%d é substituído pelo valor da
variável num
A variável num recebe o número digitado,
utilizando o operador &
40
Comentários no CódigoComentários no Código
• É sempre aconselhável inserir comentários no código para explicar o
funcionamento do programa, tornando-o mais legível.
• Na linguagem C, os comentários são colocados dentro dos marcadores
/* e */ em uma ou mais linhas.
• As últimas padronizações da linguagem C permitem também os
comentários de uma linha, utilizando o marcador // .
Exemplos:
int a;
// Esta linha é um comentário e não tem influência no código
a = 0;
/* Estas duas linhas também são comentários
e serão descartadas no momento da compilação */
41
Ambientes de desenvolvimento paraAmbientes de desenvolvimento para
programação em Linguagem Cprogramação em Linguagem C
●
Ambiente de desenvolvimento ou IDE (Integrated Development
Environment):
- edição e depuração (debug) do código-fonte;
- compilador C - geração do arquivo-executável.
●
Utilizado para desenvolvimento de programas C e C++;
●
Nesta disciplina: Projetos C – Aplicações de Console.
●
Algumas IDEs para desenvolvimento de programas em C:
CodeBlocks, DevC++, Eclipse.
42
Ambiente de desenvolvimentoAmbiente de desenvolvimento
Procedimentos para criar um arquivo-executável:
1) Crie um projeto na aba File > New Project (Console Application – C);
2) Dê um nome ao projeto (que será o nome do arquivo-executável);
3) Salve o projeto em uma pasta específica;
4) Crie um arquivo com a extensão .c que contenha a função main;
5) Escreva o código da função main;
6) Compile o código-fonte;
7) Caso o compilador não encontre erros, será gerado o arquivo-
executável, com a extensão .exe.
43
Programa-exemploPrograma-exemplo
- Primeiro programa: números na tela
#include <stdio.h>
#include <stdlib.h>
/* Primeiro programa de exemplo */
int main()
{
int i;
for(i = 1; i < 10; i++)
{
printf ("Numero: %dt", i);
printf ("elevado ao quadrado: %dn", i*i);
}
return 0;
}
44
Programa-exemploPrograma-exemplo
- Segundo programa: cálculo de fatorial
#include <stdio.h>
#include <stdlib.h>
int main()
{
int fat = 1;
int i, x;
printf("Entre com um numero:");
scanf("%d", &x);
for(i = x; i > 1; i--)
fat = fat * i;
printf("Fatorial de %d: %dnnn", x, fat);
return 0;
}
45
Programa-exemploPrograma-exemplo
- Terceiro programa: conversão de anos em dias
// Programa-exemplo
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* declaracao das variaveis */
int dias;
float anos;
printf ("Entre com o numero de dias: "); // imprime mensagem na tela
scanf ("%d", &dias); // entrada de dados
/* Conversao de dias em anos */
anos = dias/365.0;
/* Imprime mensagem
na tela
*/
printf ("nn%d dias equivalem a %f anos.n", dias, anos);
return 0;
}
46
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, n;
float valor, media, soma = 0;
printf("Quantos numeros serao digitados?n");
scanf("%d", &n);
for(i = 1; i <= n; i++) {
printf("Digite o %do. numeron", i);
scanf("%f", &valor);
soma = soma + valor;
}
printf("nSomatoria dos %d valores lidos: %fn", n, soma);
system("pause");
media = soma / n;
printf("nValor medio dos %d valores lidos: %fn", n, media);
return 0;
}
Somatória e média
47
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char finaliza = 'n';
float num;
while(finaliza != 's')
{
printf("Digite um numeron");
scanf("%f", &num);
printf("Raiz de %f = %.3fn", num, sqrt(num));
printf("nPara encerrar digite sn");
fflush(stdin); // Limpa buffer do teclado
finaliza = getchar(); // Obtém um caracter
}
printf("Fimn");
return 0;
}
Estrutura de repetição com finalização
48
ExercíciosExercícios
1) Crie um fluxograma e um programa em linguagem C, que pergunta ao
usuário qual a sua idade e indica de ele pode ou não votar, ou se seu voto é
opcional.
2) Crie um programa em linguagem C que, ao se digitar um dia de um ano
(entre 1 e 365), indica qual o dia e o mês correspondentes.
3) Pesquise sobre a Tabela ASCII e crie um programa que escreva na tela os
valores desta tabela.
49
Linguagem e Técnicas de Programação
Capítulo 5
VetoresVetores
50
VetoresVetores
Vetor é um conjunto de elementos consecutivos, todos do mesmo tipo, que
podem ser acessados individualmente a partir de um único nome.
Vetor unidimensional: tipo nome[tamanho].
Vetor multidimensional: tipo nome[tamanho1][tamanho2].
char cidade[60];
int precoData[31][12];
float temperaturaPosicao[50][50][50];
Nos vetores acima, cidade tem uma dimensão, precoData tem duas
dimensões e temperaturaPosicao tem três dimensões.
Vetores de duas dimensões são também conhecidos como matrizes.
51
Indexação de vetoresIndexação de vetores
O índice de um vetor começa sempre em 0 e termina em n-1, sendo n o
tamanho do vetor:
float notasAlunos[50];
notasAlunos[0] = 7.8;
notasAlunos[1] = 2.5;
notasAlunos[0] = 10.0;
...
notasAlunos[49] = 7.0;
52
Indexação de vetores multidimensionaisIndexação de vetores multidimensionais
Os índices das dimensões de um vetor começam sempre em 0 e terminam em
n-1, m-1 etc, sendo n, m etc o tamanho das dimensões:
int posicao[3][3];
posicao[0][0] = 1;
posicao[0][1] = 2;
posicao[0][2] = 3;
posicao[1][0] = 4;
posicao[1][1] = 5;
posicao[1][2] = 6;
posicao[2][0] = 7;
posicao[2][1] = 8;
posicao[2][2] = 9;
1 2 3
4 5 6
7 8 9
53
Verificação de limites de tamanhoVerificação de limites de tamanho
A linguagem C não faz verificação de limites de vetores: nada impede que seja
ultrapassado o fim de uma dimensão de um vetor. Porém, escrever em área de
memória não reservada pode “travar” o computador.
Uma atribuição de valores além do limite de um vetor pode “sujar” uma área de
memória reservada para outro programa. Deve-se verificar a atribuição de valores
para um índice maior que o tamanho de uma dimensão do vetor.
Um vetor pode ser inicializado na sua declaração:
int i[5] = {13, -2, 0, -34, 43};
Ex.: o código abaixo será compilado, mas está ERRADO pois invade memória
não reservada. A posição máxima permitida seria precos[4].
float precos[5];
precos[8] = 15.50;
54
Escrever e ler valores em um vetorEscrever e ler valores em um vetor
#include <stdio.h>
#include <stdlib.h>
int main()
{
float alunos[40][2]; // 40 alunos e 2 provas de cada aluno
int i, j;
float soma1 = 0, soma2 = 0;
// Zerar a matriz antes de utilizá-la
for(i = 0; i < 40; i++)
for(j = 0; j < 2; j++)
alunos[i][j] = 0;
alunos[5][0] = 2.2;
alunos[5][1] = 6.8;
alunos[12][0] = 7.9;
alunos[12][1] = 8.2;
for(i = 0; i < 2; i++)
soma1 = soma1 + alunos[5][i];
for(i = 0; i < 2; i++)
soma2 = soma2 + alunos[12][i];
printf("Media do aluno 5: %f n", soma1/2);
printf("Media do aluno 12: %f n", soma2/2);
return 0;
}
55
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
/* Programa que declara um vetor com n=10 números e coloca
na i-ésima posição o resultado do fatorial de i
*/
const int n = 10;
int main()
{
int v[n];
int i;
v[0] = 1;
for(i = 1; i < n; i++)
{
v[i] = v[i-1] * i;
printf("Fatorial de %d: %dn", i, v[i]);
}
return 0;
}
56
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
// Imprime o rendimento de uma aplicação mensal, com a taxa de juros digitada
int main()
{
int i;
float deposito[12]; // 12 meses
float juros, total = 0;
printf("Digite a taxa de juros mensal: ");
scanf("%f", &juros);
for(i = 0; i < 12; i++)
{
printf("Digite o deposito %d: ", i+1);
scanf("%f", &deposito[i]); // Recebe os depositos mensais
}
// Calcula os rendimentos
for(i = 0; i < 12; i++)
{
printf("Deposito do mes %d: %.2fn", i+1, deposito[i]);
total = total + deposito[i] + (total * juros/100.0);
printf("Total acumulado: %.2fn", total);
}
return 0;
}
57
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
// Cálculo de determinante de matriz 2x2
int main()
{
int i, j;
float det;
float m[2][2];
printf("Digite os quatro elementos de uma matriz 2x2n");
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
printf("Digite um numeron");
scanf("%f", &m[i][j]);
}
}
det = m[0][0]*m[1][1] - m[0][1]*m[1][0];
printf("nDeterminante dessa matriz: %fn", det);
return 0;
}
58
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
int main() // Médias de provas de alunos
{
int i, j, alunos, provas;
float soma[40], notas[40][5];
printf("Qual a quantidade de alunos?n");
scanf("%d", &alunos);
printf("Qual a quantidade de provas?n");
scanf("%d", &provas);
for(i = 0; i < alunos; i++) {
soma[i] = 0;
for(j = 0; j < provas; j++) {
printf("Digite a nota da prova %d do aluno %dn", j+1, i+1);
scanf("%f", &notas[i][j]);
soma[i] += notas[i][j];
}
}
for(i = 0; i < alunos; i++)
printf("Media do aluno %d: %.1fn", i, soma[i] / provas);
return 0;
}
59
ExercíciosExercícios
1) Crie um programa que calcula a média das notas de 10 alunos digitadas
no teclado, utilizando um vetor que armazena, em cada uma de suas
posições, as notas individuais.
2) Crie um programa que coloque números digitados no teclado em uma
matriz de 4 linhas e 4 colunas, e apresente a somatória dos valores
armazenados em cada linha e em cada coluna.
3) Crie um programa que calcule o determinante de uma matriz 3x3, cujos
elementos são inseridos via teclado.
60
Linguagem e Técnicas de Programação
Capítulo 6
StringsStrings
61
String – vetor de caracteresString – vetor de caracteres
Strings são vetores constituídos por caracteres:
char nomeEscola[18];
strcpy(nomeEscola, "FATEC SANTO ANDRE");
- A função strcpy atribui um conteúdo a string nomeEscola, que pode
armazenar até 17 caracteres.
- Strings são SEMPRE terminadas com o caracter nulo: 0. Portanto, devem ter
uma posição a mais que a quantidade de caracteres armazenados:
- Uma string pode ser inicializada em sua declaração:
char produto[15] = "Computador";
62
Funções de manipulação de stringsFunções de manipulação de strings
gets(str): lê uma sequência de caracteres do teclado e grava na string str.
puts(str): escreve na tela a sequência de caracteres armazenados em str.
scanf(“%s”, &str): lê uma sequência de caracteres do teclado e grava na string str.
printf(“%s”, str): escreve na tela a sequência de caracteres armazenados em str.
strcpy(strDest,strOrig): copia a string strOrig para a string strDest.
strcat(str1, str2): anexa a string str2 no final da string str1.
int atoi(str): converte uma string em um número inteiro.
float atof(str): converte uma string em um número real.
int strlen(str): retorna o tamanho (núm. de caracteres) da string str.
int strcmp(str1, str2): compara a string str1 com a string str2. Se forem iguais, retorna
0, se str1 for “posterior” que str2, retorna um número positivo;
caso contrário, retorna um número negativo.
63
Lendo uma string de um tecladoLendo uma string de um teclado
A melhor maneira de ler uma string de um teclado é com a função gets. Outra
maneira é com a função scanf, se não houver espaços em branco:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s1[80], s2[80];
printf("Informe duas strings:n");
// Pode-se obter uma String com gets ou com scanf (sem utilizar &)
gets( s1 );
scanf("%s", s2);
printf("nStrings digitadas: %s, %sn", s1, s2);
printf("Quantidade de caracteres: %d, %dn", strlen(s1), strlen(s2));
return 0;
}
64
Exemplos de manipulação de stringsExemplos de manipulação de strings
char teste1[100], teste2[40];
strcpy(teste1, "Informatica"); // copia/atribuicao de valor
strcpy(teste2, teste1); // copia/atribuicao de valor
// tamanho de string
printf("Tamanho da string: %d", strlen(teste1));
int numInteiro;
char numString[4] = "1580";
numInteiro = atoi(numString); // conversao de string em inteiro
strcpy(senha1, "fatec");
strcpy(senha2, "etec");
if( strcmp(senha1, senha2) == 0 ) // 2 strings iguais
printf("Senha valida");
65
Vetor de StringsVetor de Strings
- Vetores de strings são comuns em C. Eles são declarados e inicializados
como qualquer vetor bidimensional, mas a maneira de utilizá-los difere um
pouco. Por exemplo, o que faz a declaração abaixo?
char lista_nomes[10][40];
Este comando especifica um vetor chamado lista_nomes, que contém até 10
strings, com até 39 caracteres cada (descartando o 0 final). Para acessar uma
das strings deste vetor, especifique apenas o primeiro índice. Por exemplo,
para escrever na tela o quinto nome armazenado, utilize o seguinte comando:
printf (“%s”, lista_nomes[4]);
66
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() // Substitui espaços por mudança de linha
{
int pos = 0;
char caracter;
char texto[500];
puts("Digite um texto granden");
gets(texto);
do
{
caracter = texto[pos];
if (caracter == ' ')
texto[pos] = 'n';
pos++;
} while(caracter != '0');
puts(texto);
return 0;
}
67
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Este programa inverte a ordem de todos os caracteres de um texto
*/
int main()
{
int i, tamanho;
char texto[500];
puts("Digite um texto granden");
gets(texto);
tamanho = strlen(texto);
for(i = tamanho - 1; i >= 0; i--)
putchar(texto[i]); // Escreve o caracter de índice i da string texto
return 0;
}
68
Programa-exemploPrograma-exemplo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Este programa inverte a ordem de todas as palavras de um texto
*/
int main()
{
int i, j, word = 0, pos = 0, ini = 0;
char caracter;
char texto[500];
char palavras[100][20];
puts("Digite um texto granden");
gets(texto);
// Continua na página seguinte
69
Programa-exemploPrograma-exemplo
// Continuação da página anterior
do
{
caracter = texto[pos];
if (caracter == ' ' || caracter == '0')
{
j = 0;
for(i = ini; i < pos; i++)
{
palavras[word][j] = texto[i];
j++;
}
palavras[word][j] = '0';
ini = pos + 1;
word++;
}
pos++;
} while(caracter != '0');
for(i = word - 1; i >= 0; i--)
printf("%s ", palavras[i]);
return 0;
}
70
ExercíciosExercícios
1) Faça um programa que lê do teclado duas strings, concatena essas strings
e informa o tamanho da string final.
2) Faça um programa que lê do teclado duas strings, compara essas strings e
informa qual a ordem alfabética entre elas.
3) Faça um programa que lê três nomes digitados do teclado, ordena
alfabeticamente esses nomes e apresenta a lista de nomes ordenada.
4) Qual o valor da variável x abaixo?
strcpy(s1, “1000”); strcpy(s2, “99”); x = strcmp(s1, s2);
5) Implementar o algoritmo de cadastro/acesso a um site, descrito na página 4.
71
Linguagem e Técnicas de Programação
Capítulo 7
Estrutura em C: structEstrutura em C: struct
Conversão de variáveis: castConversão de variáveis: cast
Funções matemáticasFunções matemáticas
Comando de decião múltipla: switch-caseComando de decião múltipla: switch-case
72
Struct – agrupamento de variáveisStruct – agrupamento de variáveis
Uma struct é um agrupamento de variáveis relacionadas, formando um novo tipo de dado.
#include <stdio.h>
struct dadosEscola
{
int num;
char nom[20];
char rua[50];
char cid[80];
char uf[3];
};
int main()
{
struct dadosEscola esc;
esc.num = 152;
strcpy(esc.nom, "Colegio Brasilia");
strcpy(esc.rua, "Rua Atibaia");
strcpy(esc.cid, "Recife");
strcpy(esc.uf, "PE");
printf("%s: %s n. %d, %s - %s n", esc.nom, esc.rua, esc.num, esc.cid, esc.uf);
return 0;
}
73
Conversão de variáveis: castConversão de variáveis: cast
A linguagem C permite converter um tipo de variável em outro (cast), utilizando
parênteses a frente da variável a ter seu valor convertido. Exemplo:
int main()
{
int a;
float b;
double c;
b = 25.76;
// Conversão de float para int
a = (int)b; // Neste cast, a variavel a recebe o valor 25
printf("a: %d, b: %f n", a, b);
a = 40;
// Conversão de int para double
c = (double)a; // Neste cast, a variavel c recebe o valor 40.000000
printf("a: %d, c: %f n", a, c);
return 0;
}
74
Conversão de variáveis com stringsConversão de variáveis com strings
Cabe observar que o cast não é possível com variáveis string. Neste caso, é
necessário utilizar as funções sprintf, atoi e atof. Exemplo:
int main()
{
int a;
float b;
char d[20] = "30.2";
// Conversão de string para float
b = atof(d); // Neste caso, a variavel b recebe o valor 30.200000
printf("b: %f, d: %s n", b, d);
a = 49;
// Conversão de int para string
sprintf(d, "%d.55", a); // Neste caso, d recebe o valor "49.55"
printf("a: %d, d: %s n", a, d);
return 0;
}
75
Funções matemáticasFunções matemáticas
A Linguagem C oferece várias funções matemáticas. Para utilizá-las, deve-se
declarar a biblioteca math.h.
- Exemplos de funções:
#include <math.h>
x = sin(y); // x recebe o seno de y
x = cos(y); // x recebe o cosseno de y
x = sqrt (y); // x recebe a raiz quadrada de y
w = pow(x, y); // w recebe x elevado a y
y = exp(x); // y recebe e elevado a x
y = log(x); // y recebe o logaritmo de x na base e. Não use com x negativo.
y = log10(x); // y recebe o logaritmo de x na base 10. Não use com x negativo.
76
Comando switch-caseComando switch-case
O comando de decisão switch-case é utilizado quando há um grande número
de condições a serem testadas, com respectivas decisões a serem tomadas.
int dia;
printf("Digite o numero de um dia da semana");
scanf("%d", &dia);
switch(dia)
{
case 1:
printf("domingon");
break;
case 2:
printf("segundan");
break;
// outros cases
case 7:
printf("sabadon");
break;
default:
printf("dia invalidon");
}
77
Linguagem e Técnicas de Programação
Capítulo 8
Manipulação de arquivosManipulação de arquivos
78
Manipulação de arquivosManipulação de arquivos
A manipulação de arquivos em C é feita a partir da declaração de um
ponteiro FILE, que aponta para um arquivo. Exemplo:
FILE *arq;
arq = fopen("dados.txt", "w");
Caso o arquivo não esteja na mesma pasta que o programa executável, é
preciso informar a pasta que o contém:
arq = fopen("c:empresadados.txt", "r");
Se o arquivo não for encontrado, o ponteiro assume o valor NULL:
if( arq == NULL )
{
printf("Arquivo nao encontrado");
return 1;
}
79
Modos de abertura de arquivosModos de abertura de arquivos
Arquivos podem ser abertos de vários modos, sendo os mais comuns:
"r" – arquivo-texto para leitura de dados;
"w" – arquivo-texto para gravação de dados – se o arquivo já existir,
sobrescreve os dados existentes;
"r+" ou “w+" – arquivo-texto para leitura e escrita de dados;
"a" – arquivo-texto para anexação de dados – se o arquivo já existir,
escreve após os dados existentes;
"rb" – arquivo-binário para leitura de dados;
"wb" – arquivo-binário para gravação de dados – se o arquivo já existir,
sobrescreve os dados existentes;
"ab" – arquivo-binário para anexação de dados – se o arquivo já existir,
escreve após os dados existentes;
80
Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo
arq = fopen(“arquivo.txt”, “w”);
Abre um arquivo para leitura e/ou escrita, retornando um ponteiro para este
arquivo, ou NULL em caso de falha.
fclose(arq);
Fecha um arquivo, retornando 0 (sucesso) ou a constante EOF (erro).
x = fgetc(arq);
Lê um caractere de um arquivo, retornando-o.
c = fputc(‘A’, FILE *arq)
Escreve o caractere ‘A’ no arquivo apontado pelo ponteiro arq. Em caso de
sucesso, retorna o caracter; em caso de erro, retorna a constante EOF.
81
Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo
fgets(s, n, arq)
Lê uma linha, com até n-1 caracteres, de um arquivo, colocando-a em s. A
string lida também é retornada pela função.
fputs(s, arq)
Escreve a string s em uma linha de um arquivo. A função retorna um valor
não-negativo, em caso de sucesso, ou EOF, em caso de falha.
fscanf(arq, “%d”, &x)
Lê uma linha formatada de um arquivo.
fprintf(arq, “escreve %d”, x)
Escreve uma linha formatada em um arquivo.
82
Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo
x = feof(arq)
Retorna verdadeiro (1) quando a leitura de um arquivo chegou ao fim, ou
falso (0), quando ainda há linhas a serem lidas.
fread(ptr, size, n, arq)
Lê um conjunto de elementos de um arquivo, colocando-os em uma variável
apontada por ptr. Cada elemento deve possuir um número de bytes
indicados por size, sendo lidos n elementos do arquivo.
fwrite(ptr, size, n, arq)
Escreve um conjunto de elementos (apontados por ptr) em um arquivo. Cada
elemento deve possuir um número de bytes indicados por size, sendo
escritos n elementos no arquivo.
83
Exemplo de leitura em arquivoExemplo de leitura em arquivo
#include <stdio.h>
#include <stdlib.h>
int main()
{
float valor, total = 0;
int cont = 0;
FILE *arq;
arq = fopen("precos.txt", "r");
if(arq == NULL)
{
printf("Arquivo não encontradon");
return 1;
}
while(!feof(arq)) // Le as linhas do arquivo até o final
{
fscanf(arq, "%f", &valor);
total = total + valor;
cont++;
}
printf("O valor medio do produto e': %f n", total / cont);
fclose(arq);
return 0;
}
84
Exemplo de escrita em arquivoExemplo de escrita em arquivo
#include <stdio.h>
int main()
{
FILE *arquivo;
arquivo = fopen("c:temparquivo.txt", “w");
if( arquivo == NULL )
{
printf("Nao foi possivel escrever no arquivo");
return 1;
}
fputs("Escrevendo em um arquivo!!!n", arquivo);
fprintf(arquivo, "%fn", 34.6);
printf("Verificar o arquivo c:temparquivo.txt n");
fclose(arquivo);
return 0;
}
85
#include <stdio.h>
int main()
{
float nota, total = 0;
int cont = 0;
FILE *arq = fopen("notas.txt", "r");
if(arq == NULL) {
printf("Arquivo não encontradon");
return 1;
}
fscanf(arq, "%f", &nota);
while(nota > 0) {
total = total + nota;
fscanf(arq, "%f", &nota);
cont++;
}
if(cont > 0)
printf("Media = %.1f", total/cont);
fclose(arq);
return 0;
}
Programa-exemploPrograma-exemplo
Cálculo de média de notas
O programa abre (fopen) o arquivo notas.txt para
leitura ("r"). Lê linha a linha (fscanf), salvando o
valor de cada linha na variável nota. Quando o
último valor lido for igual ou menor que 0, a
estrutura de repetição while é interrompida. A
seguir, é impresso na tela, pela função printf, o
valor da média das notas (total/cont). A média
só é impressa na tela caso o arquivo tenha ao
menos uma linha.
86
Linguagem e Técnicas de Programação
Capítulo 9
Funções e Escopo de VariáveisFunções e Escopo de Variáveis
87
Funções na linguagem CFunções na linguagem C
• Um programa em C é composto por uma ou mais funções.
• A função main() é obrigatória em todos os programas.
• Funções são utilizadas por dois motivos principais:
➢
reaproveitamento de código, que pode ser utilizado em vários pontos do
programa;
➢
divisão em blocos funcionais, facilitando seu entendimento.
Exemplo:
tipoRetorno nomeFunção (tipo arg1, tipo arg2,...,tipo argN)
{
comandos da função;
}
88
Funções e variáveis só podem ser utilizadas em um programa em C depois de
serem declaradas
void atraso()
{
int i, j;
for(i = 0; i < 10000; i++)
for(j = 0; j < 10000; j++);
}
int potencia(int a, int b)
{
int i, ret = 1;
for(i = 0; i < b; i++)
ret = ret * a;
return ret;
}
int main()
{
int resultado, x, y;
resultado = potencia(5, 6);
printf("5 elevado a 6 vale: %dn", resultado);
atraso();
printf("Digite dois numerosn");
scanf("%d", &x);
scanf("%d", &y);
printf("%d elevado a %d vale: %dn", x, y, potencia(x, y));
atraso();
printf("%d elevado a %d vale: %dn", y, x, potencia(y, x));
89
Protótipos de funçõesProtótipos de funções
O código da função deve ser declarado no arquivo onde a função é utilizada,
e posicionada acima do trecho de código que faz referência à função, ou
então, é preciso declarar seu protótipo. Exemplo:
float reajustaPreco(float taxa, float preco); // prototipo
//Esta função não retorna nunhum valor, por isso é declarada com void
void calcula()
{
float novoPreco;
novoPreco = reajustaPreco(1.5, 200.0);
}
float reajustaPreco(float taxa, float preco) // codigo da funcao
{
preco = preco * taxa;
return preco;
}
90
Arquivos de cabeçalho - BibliotecasArquivos de cabeçalho - Bibliotecas
Protótipos de funções, variáveis e constantes podem ser declarados em
arquivos de cabeçalho, com extensão .h.
Os arquivos de cabeçalho são declarados no início de um arquivo-fonte,
indicando para o linkeditor procurar, em algum arquivo-objeto, o código das
funções utilizadas.
Exemplo: o protótipo da função reajusta() está declarado no arquivo de
cabeçalho economia.h e seu código está em algum outro arquivo-fonte, por
exemplo, no arquivo economia.c:
#include "economia.h"
void reajusta()
{
float novoPreco;
novoPreco = reajustaPreco(1.5, 200.0);
...
}
91
Variáveis locais e globaisVariáveis locais e globais
• Variáveis locais: são definidas dentro de uma função, sendo válidas somente
dentro da função.
• Variáveis globais: definidas fora das funções, com validade para todas as
funções abaixo do local de definição dessa variável.
• O escopo de uma variável refere-se ao local onde esta variável é definida e
tem validade.
int a; // variável global
void funcaoExemplo(char c)
{
double b; // variável local
int a; // variável local
}
92
Variáveis locais e globaisVariáveis locais e globais
• Alterações em variáveis locais não são visualizadas fora da função onde a
variável está declarada. Exemplo:
int a, b; // variáveis globais
void funcao1()
{
int a; // variável local
a = 2;
b = 4;
}
int main()
{
a = 3;
b = 3;
funcao1();
printf("a = %d e b = %d", a, b); // saída: a = 3 e b = 4
return 0;
}
93
ExercíciosExercícios
1) Faça um programa com várias funções, cada uma escrevendo uma palavra da
seguinte frase:
“Fatec Santo André – Eletrônica Automotiva”
1) Faça um programa que leia valores digitados, interrompa quando for digitado a letra
F, e forneça a somatória dos números digitados. Utilize uma função para a leitura do
teclado e outra função para o cálculo da somatória.
2) Crie uma função que calcule o volume de um paralelepípedo, de acordo com suas
dimensões, conforme utilização na função main:
void main()
{
doble valor;
valor = volume(4.567, 3.5645, 5.666);
printf(“Volume: %fn”, valor);
}
94
Linguagem e Técnicas de Programação
Capítulo 10
Ponteiros na linguagem CPonteiros na linguagem C
95
PonteirosPonteiros
Um ponteiro é uma variável que guarda um endereço de um outro objeto, por
exemplo, o endereço de uma variável ou de um dispositivo físico, como um
display, teclado ou arquivo.
Ponteiro de variáveis: o tipo de um ponteiro deve ser igual ao tipo da variável
que ele armazena o endereço. Exemplos:
char *nome; // ponteiro para variavel do tipo
char
int *temp; // ponteiro para variavel do tipo int
float *ponteiroCalc; // ponteiro para variavel do tipo
float
FILE * arq // ponteiro para um arquivo
Para obter o endereço de uma variável é utilizado o operador &.
96
Exemplos de utilização de ponteirosExemplos de utilização de ponteiros
int cont;
int val;
int *end1;
int *end2;
// atribui o valor 100 à variável
cont
cont = 100;
// end1 guarda o endereço de
cont
end1 = &cont;
// o valor da variável cont é
indiretamente atribuído a val
val = *end1;
// end2 guarda o endereço de
100
100
0A00
0A00
cont
val
end1
end2
endereços memória variáveis
0A00
0A04
0A08
0A0C
97
Ponteiro como parâmetro de funçõesPonteiro como parâmetro de funções
Ponteiro de variável passado como argumento de função permite modificar o valor da variável
dentro da função:
#include <stdio.h>
void semPonteiros(int num)
{
num = num + 5;
}
void comPonteiros(int *num)
{
*num = *num + 5;
}
int main()
{
int a = 1;
printf("Valor original de a: %d n", a);
semPonteiros(a);
printf("Apos chamar a funcao semPonteiros: a = %d n", a);
comPonteiros(&a);
printf("Apos chamar a funcao comPonteiros: a = %d n", a);
return 0;
}
Saída do programa:
Valor original da variável a: 1
Valor de a após chamar a função semPonteiros: 1
Valor de a após chamar a função comPonteiros: 6
98
Ponteiro como parâmetro de funçõesPonteiro como parâmetro de funções
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
void raizes(int a1, float *r1, int a2, float *r2)
{
*r1 = sqrt(a1);
*r2 = sqrt(a2);
}
int main()
{
float v1, v2;
int b1, b2;
printf("Digite dois numeros inteirosn");
scanf("%d", &b1);
scanf("%d", &b2);
raizes(b1, &v1, b2, &v2);
printf("Raiz quadrada de: %d = %fn", b1, v1);
printf("Raiz quadrada de: %d = %fn", b2, v2);
return 0;
}
99
// Programa-exemplo com ponteiros
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letra = 'q';
int dia = 12;
int *end;
float nota = 87.8;
end = &dia;
char assunto[10] = "medicina";
char *pont1;
int *pont2;
double *pont3;
char *pont4[10];
printf("Valor da variavel letra: %c e seu endereco: %xn", letra, &letra);
printf("Valor da variavel dia: %d e seu endereco: %xn", dia ,&dia);
printf("Valor da variavel nota: %2.1f e seu endereco: %xn", nota, &nota);
printf("Valor apontado por end: %d e o endereco que ele contem: %xn", *end,
end);
printf("Valor da variavel assunto: %s e seu endereco: %xn", assunto, assunto);
printf("Endereco que o ponteiro pont1 contém: %xn", pont1);
printf("Endereco que o ponteiro pont2 contém: %xn", pont2);
printf("Endereco que o ponteiro pont3 contém: %xn", pont3);
printf("Endereco que o ponteiro pont4 contém: %xn", pont4);
return 0;
100
Exibindo uma string utilizando ponteiroExibindo uma string utilizando ponteiro
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
char texto[40] = "Exibindo uma string usando um ponteiro.";
char *ptr_str;
ptr_str = texto; // Apontando para o inicio da string
printf("Inicio da string = %cnn", *ptr_str);
// Exibindo toda a string usando o ponteiro
while(*ptr_str != '0')
{
putchar(*ptr_str);
usleep(100000);
ptr_str++;
}
printf("n");
return 0;
}
101
ExercíciosExercícios
1) Faça programa com uma função que recebe 2 números e devolve a soma, multiplicação,
divisão e subtração desses números, e retorna o valor de um número elevado pelo outro.
2) a) Sendo p um ponteiro, explique a diferença entre:
p++; (*p)++; *(p++);
b) O que quer dizer *(p+10) ?
c) Qual o valor de y no final do programa abaixo? A seguir, escreva um /* comentário */
em cada comando de atribuição explicando o que ele faz e o valor da variável à esquerda do
'=' após sua execução.
int main()
{
int y, *p, x;
y = 0;
p = &y;
x = *p;
x = 4;
(*p)++;
x--;
(*p) += x;
printf ("y = %dn", y);
return(0);
}
(fonte: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c620.html)
102
Linguagem e Técnicas de Programação
Capítulo 11
Parâmetros da função mainParâmetros da função main
Biblioteca padrão da linguagem CBiblioteca padrão da linguagem C
103
Parâmetros e retorno da função mainParâmetros e retorno da função main
Declaração da função main, de acordo com o padrão ANSI C:
int main(int argc, char *argv[])
int main(void)
Formas aceitáveis (diferentes do padrão ANSI C):
void main(int argc, char *argv[])
void main(void)
void main()
int main()
main()
Os parâmetros argc e argv dão ao programador acesso à linha de comando
com a qual o programa foi chamado.
104
Parâmetros da função mainParâmetros da função main
O argc (argument count) é um inteiro e possui o número de argumentos com
os quais a função main() foi chamada na linha de comando. Ele vale no mínimo
1, pois o nome do programa é contado como sendo o primeiro argumento.
O argv (argument values) é um ponteiro para uma matriz de strings. Cada
string desta matriz é um dos parâmetros da linha de comando. O argv[0]
sempre aponta para o nome do programa (que, como já foi dito, é considerado
o primeiro argumento).
Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html
105
Parâmetros da função mainParâmetros da função main
Exemplo 1: Recebe da linha de comando um conjunto de palavras e as imprime linha a linha.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
{
printf("%sn", argv[i]);
}
return 0;
}
Exercício: Faça um programa de uma calculadora de quatro operações que, passando argumentos na linha de
comando, executa a operação indicada. Exemplo: calcular soma 15 43
ou
calcular divisao 113 29
106
Parâmetros da função mainParâmetros da função main
Exemplo 2: Recebe da linha de comando o dia, mês e ano, e imprimir a data em formato apropriado.
Chamada do programa (data.exe): data 19 04 08
O programa deverá imprimir: 19 de abr de 2008
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
int mes;
char *nomemes[] = {"jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"};
// Verifica o numero de parametros fornecidos: parametro 1: nome do programa,
// parametro2: dia, parametro 3: mes, parametro 4: dois ultimos digitos do ano
if(argc == 4)
{
mes = atoi(argv[2]); // argv contem strings de entrada
if (mes < 1 || mes > 12) // Testa se o mes e' valido
printf("Erro!nUso: data dia mes ano, argumentos com 2 digitos");
else
printf("n%s de %s de 20%s", argv[1], nomemes[mes-1], argv[3]);
}
else
printf("Erro!nUso: data dia mes ano, argumentos com 2 digitos");
}
Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html
107
Biblioteca padrão da linguagem CBiblioteca padrão da linguagem C
A biblioteca padrão da linguagem C contém um conjunto de funções de uso comum, como
tratamento de entrada/saída, operações matemáticas e manipulação de cadeia de
caracteres. O nome e as características de cada função estão em arquivos “cabeçalho”. Já
a implementação das funções encontra-se em arquivos pré-compilados, que são “linkados”
pelo link-editor.
Principais arquivos de cabeçalho:
• stdio.h – Manipulação de entrada/saída de dados (printf, scanf, fprintf etc).
• stdlib.h – Operações diversas (system, atof, atoi etc).
• string.h – Tratamento de cadeia de caracteres (strcpy, strlen, strcmp etc).
• math.h – Funções matemáticas comuns em computação (sqrt, cos, sin, log etc).
• time.h – Conversão de tipos de dado de data e horário (asctime, clock, localtime etc).
108
Linguagem e Técnicas de Programação
Capítulo 12
Pré-processador e MacrosPré-processador e Macros
Operadores bináriosOperadores binários
Programação para MicrocontroladoresProgramação para Microcontroladores
109
Pré-processador e MacrosPré-processador e Macros
O pré-processador é uma aplicação executada antes de se executar o
compilador, para resolver as instuções e diretivas de pré-processamento que o
código-fonte possa ter.
Todas as instuções e diretivas de pré-processamento são precedidas do
caractere #.
Macros são porções de código que são substutuídas, pelo pré-processador,
antes do compilador converter o código.
Um exemplo de macro é a definição de uma constante numérica:
#define MAX 100
110
Macros de funçõesMacros de funções
É possível transformar funções simples em macros.
Quando se deseja que os parâmetros de uma função simples sejam genéricos
quanto ao tipo, pode-se transformar a função em uma macro.
Exemplo:
#include <stdio.h>
// A macro Mult pode receber parâmetros int, char, float ou double
// e devolve como resultado a multiplicação dos parâmetros
#define Mult(x,y) x*y
main()
{
printf("%d n", Mult(3,4));
printf("%f n", Mult(3.5,5.2));
}
111
Outras diretivas de pré-processamentoOutras diretivas de pré-processamento
A diretiva #include é utilizada para indicar ao pré-processador para substituir a
linha em que se encontra pelo conteúdo do arquivo que é colocado logo após.
Exemplo:
#include <stdio.h> // inclui o conteúdo da biblioteca-padrão
stdio
#include “c:userstrabalhomotor.h” // inclui o conteúdo da biblioteca motor
A diretiva #pragma indica ao compilador para tomar determinadas atitudes, de
acordo com o valor passado. Exemplo:
// indica que a compilação deve ser otimizada para o PIC16C54
#pragma device PIC16C54
Para o compilador CCS C o pragma é opcional:
#device pic16c54
112
Operadores BináriosOperadores Binários
A linguagem C, considerada de baixo nível, permite a manipulação de bits,
utilizando operadores binários, conforme mostrado abaixo:
Operador Descrição
& AND
| OR
^ XOR (OR exclusivo)
<< Deslocamento para esquerda
>> Deslocamento para direita
Os operadores binários não devem ser confundidos com os operadores lógicos
(&& || !). Os operadores binários operam bit a bit, sendo muito utilizados em
circuitos com microcontroladores.
113
Tipos de Variáveis - MicrocontroladoresTipos de Variáveis - Microcontroladores
• Os compiladores de linguagem para microcontroladores apresentam,
geralmente, tamanhos menores para os tipos de variáveis. O exemplo
abaixo refere-se a compiladores voltados a microcontroladores PIC:
114
Exemplos com Operadores BináriosExemplos com Operadores Binários
unsigned char c;
c = 7; // codigo binario 0000 0111
c = c<<1; // codigo binario 0000 1110 = 14
c = c<<2; // codigo binario 0011 1000 = 56
c = c<<3; // codigo binario 1100 0000 = 192
c = c>>1; // codigo binario 0110 0000 = 96
// 12 equivale a 00001100 e 6 equivale a 00000110
c = 12 & 6; // c passa a valer 4 (00000100)
c = 12 | 6; // c passa a valer 14 (000001110)
c = 12 ^ 6; // c passa a valer 10 (000001010)
115
Exemplo de programa para microcontroladorExemplo de programa para microcontrolador
As definições de PIN_B0 e PIN_B1 estão no arquivo 16c71.h. A função toupper,
que transforma letras em maiúsculas, está definida em ctype.h. O uso de #fuses
indica “high speed oscillator” e “no watch dog timer”. As funções printf e putc são
referenciadas utilizando o #use rs232, que indica parâmetros de comunicação
para o microcontrolador.
#include <16c71.h>
#include <ctype.h>
#fuses hs,nowdt
#use rs232(baud=9600,xmit=PIN_B0,rcv=PIN_B1)
#define TRUE 1
main()
{
printf(“Enter characters:”);
while(TRUE)
putc(toupper(getc()));
}
116
Linguagem e Técnicas de Programação
Capítulo 13
Exercícios selecionadosExercícios selecionados
117
1) Um usuário digita um número no teclado. Imprima a tabuada deste número.
2) Faça um programa que armazena números em uma matriz 2x2 ou 3x3 e mostra o
determinante da matriz armazenada.
3) Monte o fluxograma e crie um programa que aponta se uma pessoa é obrigada ou
não a votar ou se é o voto é opcional, de acordo com a sua idade, digitada no
teclado.
4) Um arquivo contém um número indeterminado de linhas, contendo um número em
cada linha. Crie um segundo arquivo no qual cada linha contém um número
corresponde a duas vezes o valor do número do primeiro arquivo, linha-a-linha.
5) Criar um fluxograma para o cálculo das raízes de uma equação de segundo grau,
dados os coeficientes a, b e c. A seguir, implemente o algoritmo em linguagem C.
118
6) Criar um fluxograma para dividir em 4 listas cidadãos brasileiros, ingleses,
japoneses e outros. Para cada cidadão, o programa pede a nacionalidade e o
nome. Ao final, imprima as quatro listas.
7) Faça um programa em linguagem C que receba, via teclado, as notas de três
provas de 40 alunos e, no final, exiba na tela a nota média de cada aluno.
Dica: utilize o seguinte vetor bidimensional: float notas[40][3].
8) Faça um programa em linguagem C que lê duas palavras do teclado e, caso elas
sejam iguais, escreve na tela o número de caracteres dessas palavras; caso as
palavras sejam diferentes, escreve na tela a diferença entre os números de
caracteres das duas palavras.
9) Faça um programa que armazene um login e senha de acesso restrito. Passados
como argumentos do programa. A seguir, o programa deve permitir acesso apenas
aos usuários que acertarem o login e senha.
10) Faça um programa que calcula qual o montante acumulado em um ano por uma
aplicação que rende 2% ao mês, com depósitos mensais de R$ 1000,00.
119
11) Qual o resultado do programa abaixo, para cada sequência de dados de entrada.
#include <stdio.h>
main()
{
int a, b, c;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
if((a == 7 || b != 2) && c < 4)
printf("X");
else
{
if (a%b == 0)
printf("Y");
else
printf("Z");
}
}
Sequência digitada Letra escrita na
tela
7 3 4
8 4 1
2 2 2
120
12) O que será impresso na tela após a execução do programa abaixo:
#include <stdio.h>
int f1(int a, int b, int *c, int *d)
{
a = 15;
b = *c;
*c = *d;
return b + a;
}
int main(void)
{
int var1 = 1;
int var2 = 2;
int var3 = 3;
int var4 = 4;
float var5, var6;
var4 = f1(var1, var2, &var3, &var4);
var5 = 2.5;
var6 = 5.7;
printf("%d - %d - %d - %dn", var1, var2, var3, var4);
printf("%.1fn", var6 - var5);
puts("var4 – var2");
return 0;
}

Mais conteúdo relacionado

Mais procurados

A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
Clausia Antoneli
 

Mais procurados (20)

Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
 
Linguagem Assembly
Linguagem AssemblyLinguagem Assembly
Linguagem Assembly
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
02 algoritmo
02   algoritmo02   algoritmo
02 algoritmo
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Aula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoAula 3 - Lógica de Programação
Aula 3 - Lógica de Programação
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
 
Aula01 - Logica de Programação
Aula01 - Logica de ProgramaçãoAula01 - Logica de Programação
Aula01 - Logica de Programação
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
mod2-mecanismos
mod2-mecanismosmod2-mecanismos
mod2-mecanismos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o Visualg
 

Destaque

Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-
Mauro Pereira
 
1008 ProgramaçãO C Completo
1008 ProgramaçãO C Completo1008 ProgramaçãO C Completo
1008 ProgramaçãO C Completo
Fxx
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Condicional 02 Pascal Exercicio
Condicional 02 Pascal ExercicioCondicional 02 Pascal Exercicio
Condicional 02 Pascal Exercicio
Marcus Vinicius
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
Armando Daniel
 
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
AgroTalento
 

Destaque (20)

Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-
 
1008 ProgramaçãO C Completo
1008 ProgramaçãO C Completo1008 ProgramaçãO C Completo
1008 ProgramaçãO C Completo
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UML
 
Introdução a estrutura de dados josé lucas rangel - raulzinho.cb@hotmail.com
Introdução a estrutura de dados   josé lucas rangel - raulzinho.cb@hotmail.comIntrodução a estrutura de dados   josé lucas rangel - raulzinho.cb@hotmail.com
Introdução a estrutura de dados josé lucas rangel - raulzinho.cb@hotmail.com
 
C completo-total
C completo-totalC completo-total
C completo-total
 
Condicional 02 Pascal Exercicio
Condicional 02 Pascal ExercicioCondicional 02 Pascal Exercicio
Condicional 02 Pascal Exercicio
 
Programar pic em c motor passo
Programar pic em c motor passoProgramar pic em c motor passo
Programar pic em c motor passo
 
C++ lab -4
C++ lab -4C++ lab -4
C++ lab -4
 
Autron
AutronAutron
Autron
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
 
Programação aula002
Programação aula002Programação aula002
Programação aula002
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Sugestões de 71 jogos
Sugestões de 71 jogosSugestões de 71 jogos
Sugestões de 71 jogos
 
POO Plano de Curso
POO Plano de CursoPOO Plano de Curso
POO Plano de Curso
 
Autron 2012
Autron 2012Autron 2012
Autron 2012
 
Memoria Virtual
Memoria VirtualMemoria Virtual
Memoria Virtual
 
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
 

Semelhante a Curso de Linguagem C

Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
Robson Ferreira
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
Rafael Martins
 
Linguagem C e Dev-C++ Algumas Explicações
Linguagem C e Dev-C++  Algumas ExplicaçõesLinguagem C e Dev-C++  Algumas Explicações
Linguagem C e Dev-C++ Algumas Explicações
nataferraz
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
Wagner Zaparoli
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
Jocelma Rios
 

Semelhante a Curso de Linguagem C (20)

Notas deaulas
Notas deaulasNotas deaulas
Notas deaulas
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+c
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
 
Ud2
Ud2Ud2
Ud2
 
Aula 02 - Introdução a ALGORITMOS.pptx
Aula 02 - Introdução a ALGORITMOS.pptxAula 02 - Introdução a ALGORITMOS.pptx
Aula 02 - Introdução a ALGORITMOS.pptx
 
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
Infos algoritmo
Infos algoritmoInfos algoritmo
Infos algoritmo
 
Linguagem C e Dev-C++ Algumas Explicações
Linguagem C e Dev-C++  Algumas ExplicaçõesLinguagem C e Dev-C++  Algumas Explicações
Linguagem C e Dev-C++ Algumas Explicações
 
Aula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.pptAula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.ppt
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Linguagem_C.pdf
Linguagem_C.pdfLinguagem_C.pdf
Linguagem_C.pdf
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 

Mais de Rogerio R. Lima Cisi (8)

O que é o espiritismo
O que é o espiritismoO que é o espiritismo
O que é o espiritismo
 
Campo de Energia Humana
Campo de Energia HumanaCampo de Energia Humana
Campo de Energia Humana
 
Sexualidade sob a ótica espírita
Sexualidade sob a ótica espírita Sexualidade sob a ótica espírita
Sexualidade sob a ótica espírita
 
Meu Reino ainda não é deste mundo
Meu Reino ainda não é deste mundoMeu Reino ainda não é deste mundo
Meu Reino ainda não é deste mundo
 
Espiritismo e Ciência
Espiritismo e CiênciaEspiritismo e Ciência
Espiritismo e Ciência
 
Parábola da Festa de Núpcias
Parábola da Festa de NúpciasParábola da Festa de Núpcias
Parábola da Festa de Núpcias
 
Espiritismo: uma proposta educacional
Espiritismo: uma proposta educacionalEspiritismo: uma proposta educacional
Espiritismo: uma proposta educacional
 
Minicurso Java
Minicurso JavaMinicurso Java
Minicurso Java
 

Último

GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
RavenaSales1
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
rosenilrucks
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 

Último (20)

PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 

Curso de Linguagem C

  • 1. 1 FATEC de Santo André Tecnologia em Eletrônica Automotiva Linguagens e Técnicas de Programação Notas de Aula Prof.: Rogério Email: fatec.sa.informatica@gmail.com Página da disciplina: http://sites.google.com/site/fatecprogramacao
  • 2. 2 Objetivo da disciplina Fornecer noções básicas de lógica, algoritmos e técnicas de programação, utilizando a linguagem de programação C. Conteúdo Programático 1. Introdução à lógica de programação; 2. Algoritmos: pseudocódigo e fluxograma; 3. Estruturas de controle sequencial, de seleção e de repetição; 4. Técnicas básicas de programação, conceitos e tipos de linguagens de programação; 5. Conceitos de programação estruturada e compilação; 6. Visão geral da linguagem C: variáveis, operadores, expressões e principais funções; 7. Compilador e ambiente de desenvolvimento para a linguagem C; 8. Vetores; 9. Strings; 10. Funções; 11. Ponteiros; 12. Manipulação de arquivos. Bibliografia utilizada na disciplina - Linguagem C. Luis Damas; LTC Editora, 10a edição, 2007. - C Completo e Total. Herbert Schildt. Makron Books, 3a edição, 1996. - Primeiro Curso de Programação em C. Edson L. F. Senne; Visual Books. 2a edição, 2006.
  • 3. 3 Linguagem e Técnicas de Programação Capítulo 1 Noções básicas deNoções básicas de algoritmos e programaçãoalgoritmos e programação
  • 4. 4 AlgoritmoAlgoritmo • Algoritmo é a descrição de um padrão de comportamento, expresso pela execução de instruções, até que se alcance uma determinada condição. • Um programa de computador é composto por um ou mais algoritmos. • Exemplos de algoritmos: a. Preparar um prato de comida; b. Controle de injeção de combustível; c. Compra e venda automática de ações na bolsa de valores. • Exercício: - Criar um algoritmo para cadastrar o login e a senha de acesso a um site. A seguir, crie outro algoritmo que libera o acesso ao site, ao ser fornecido o login e a senha corretos – o acesso é bloqueado após três tentativas com erro.
  • 5. 5 VariVariááveisveis • Variável: nome de um local de memória onde se pode colocar qualquer valor, do tipo básico associado à variável. • Tipos básicos de variável: – char: guarda um caractere. – int: guarda um número inteiro. – float e double: guardam um número real. • Exemplos: char primeiraLetra; int anoFabricacao; float velocidadeCarro; double velocidadeLuz;
  • 6. 6 Comandos bComandos báásicossicos 3) Operadores aritméticos: mais + menos - vezes * dividir / resto % decrementa -- incrementa ++ opera e atribui += -= *= /= 2) Operadores lógicos: e && ou || não ! 4) Operadores relacionais: é igual? == é diferente? != é maior? > é menor? < é maior ou igual? >= é menor ou igual? <= 1) Atribuição: quilometroRodado = 23458; a = b; temperaturaAlta = 23.56;
  • 7. 7 Linguagem e Técnicas de Programação Capítulo 2 Lógica de ProgramaçãoLógica de Programação
  • 8. 8 Lógica de programação:Lógica de programação: Bloco de comandos – execução sequencialBloco de comandos – execução sequencial Pseudocógido Fluxograma
  • 9. 9 Estrutura de decisãoEstrutura de decisão Alternativa simples Alternativa composta
  • 10. 10 Estruturas de decisãoEstruturas de decisão aninhadasaninhadas Se a estrutura de decisão tem apenas um comando, o uso de chaves é dispensável; para dois ou mais comandos associados, o uso de chaves é obrigatório se (a > b) a = a + 5; senão apenas um comando { se (a > c) { b = b + 5; a = a + 10; } dois comandos }
  • 11. 11 Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo
  • 12. 12 Estrutura de repetição com teste no finalEstrutura de repetição com teste no final
  • 15. 15 Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle
  • 16. 16 Pseudocódigo / FluxogramaPseudocódigo / Fluxograma Algoritmo que encontra o maior e o menor número digitado no teclado. Quando é digitado o número 0, o processamento é interrompido e são escritos na tela os números encontrados. encontraMaiorMenor() { int maior, menor, valor; valor = leTeclado(); maior = valor; menor = valor; enquanto (valor != 0) { se (valor > maior) maior = valor; senão { se (valor < menor) menor = valor; } valor = leTeclado(); } imprima(maior, menor); }
  • 17. 17 ExercíciosExercícios 1) Descrever em pseudocódigo e em fluxograma um algoritmo que imprime na tela a tabuada de um número digitado no teclado. 2) Descrever em pseudocódigo e em fluxograma um algoritmo que imprime o fatorial de um número digitado no teclado. 3) Descrever em pseudocódigo e em fluxograma um algoritmo que lê um número inteiro de um teclado, calcula a somatória de todos os números entre 1 e o número digitado e escreve na tela o valor obtido.
  • 18. 18 Linguagem e Técnicas de Programação Capítulo 3 Introdução à LinguagemIntrodução à Linguagem de Programação Cde Programação C
  • 19. 19 Linguagens de programaçãoLinguagens de programação • Linguagem de programação: conjunto finito de símbolos com os quais se escrevem programas de computador. • Exemplos de linguagem de programação: C, C++, Java, Pascal, Cobol, Basic, PHP, Assembly. • Dependendo da linguagem de programação, os programas podem ser compilados, interpretados ou montados. • Linguagens com compilação: C, C++, Pascal, Cobol etc. • Linguagens com interpretação: Basic, PHP, Perl etc. • Linguagens com compilação e interpretação: Java. • Linguagem de montagem ou Assembly é uma notação razoavelmente legível por humanos, correspondente ao código de máquina.
  • 20. 20 Linguagem de programação com compilaçãoLinguagem de programação com compilação • Programa descrito em uma linguagem de programação: sequência de comandos compreendida por um ser humano. • Programa descrito em código de máquina: sequência de 0s e 1s compreendida por uma CPU - Unidade Central de Processamento. • Compilador: conversor de programas escritos em linguagem de programação para códigos de máquina de uma CPU. while(i < 10) { printf("%d", i); i++; } compilador 10011101 00110001 01100111 11110101 11110001
  • 21. 21 Comparação entre linguagens de programaçãoComparação entre linguagens de programação código nível vantagens desvantagens código de máquina baixo acesso a todos os recursos do hardware dificuldade de programação C médio acesso a todos os recursos do hardware erros de programação podem comprometer o funcionamento do hardware Java alto facilidade de programação baixo aceso aos recursos do hardware
  • 22. 22 Código-fonte e código-executávelCódigo-fonte e código-executável • Código-fonte: contém todos os comandos de um programa, expressos em uma linguagem de programação. • Código-executável: comandos de um programa convertidos para o código de máquina de uma CPU. • O compilador gera o código-executável, caso não encontre erros no código-fonte. • No sistema operacional Windows, arquivos com código-executável possuem geralmente (mas não necessariamente), as extensões .exe e .dll. • No sistema operacional Linux (ou Unix), arquivos com código- executável possuem geralmente (mas não necessariamente), a extensão .sh, entre outras.
  • 23. 23 Linguagem de programação CLinguagem de programação C • O C é uma linguagem de propósito geral, pertencendo a uma família de linguagens cujas características são: - acesso a recursos de baixo nível; - geração de código eficiente; - confiabilidade; - simplicidade; - muito utilizada para microprocessadores.
  • 24. 24 Regras geraisRegras gerais • Os programas, em linguagem C, são compostos por uma ou mais funções. • As funções podem possuir argumentos e um tipo de retorno. • Todo programa inicia-se com uma chamada à função main: main() { comando1; • comando2; • ... }
  • 25. 25 Regras geraisRegras gerais • A linguagem C faz distinção entre maiúsculas e minúsculas. Exemplo: a variável nomealuno é diferente de nomeAluno. • Os comandos devem ser finalizados por ponto-e-vírgula. • O comando inicial das estruturas de decisão e de repetição não são finalizados por ponto-e-vírgula. Exemplos: if (a > b && d < e) while( a > 0 ) { { printf(“mensagem 1”); a = a – 1; printf(“mensagem 2”); printf(“%d”, a); } } Sem ponto-e-vírgula! Sem ponto-e-vírgula! Com ponto-e-vírgula! Com ponto-e-vírgula!
  • 26. 26 Tipos de VariáveisTipos de Variáveis • A linguagem C dispõe de quatro tipos básicos de dados. As declarações de variáveis, portanto, podem usar os seguintes tipos: Número real (ponto flutuante com precisão dupla: 15 dígitos, limitados a: +/-1.7*10+/-308 ) 8double Número real (ponto flutuante com precisão simples: 7 dígitos, limitados a: +/-3.4*10+/-38 ) 4float Número inteiro (ANSI: de -32768 a 32767 (atualmente: de -2147483648 a 2147483647) 2 (padrão ANSI) 4 (atualmente) int Um caractere (ou, reciprocamente, um inteiro de -128 a 127) 1char ValorTamanho (bytes)Tipo
  • 27. 27 Especificadores de VariáveisEspecificadores de Variáveis • Além do tipo da variável, podem ser utilizados alguns “especificadores”: - unsigned: permite apenas números positivos; - long: amplia o tamanho de um tipo de variável; - short: restringe o tamanho de um tipo de variável. • Exemplos - long int: variável int com 64 ou 32 bits, dependendo do compilador; - short int: variável int com 16 ou 8 bits, dependendo do compilador; - unsigned int: variável int com valores entre 0 e 4 bilhões.
  • 28. 28 Palavras reservadas da linguagem CPalavras reservadas da linguagem C Palavras reservadas pelo padrão ANSI Algumas outras palavras reservadas asm cdecl interrupt near far huge Observação importante: palavras reservadas não podem ser usadas como nomes de variáveis. auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while
  • 31. 31 Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo
  • 32. 32 Estrutura de repetição com teste no finalEstrutura de repetição com teste no final
  • 33. 33 Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle
  • 36. 36 Linguagem e Técnicas de Programação Capítulo 4 Primeiros programasPrimeiros programas em Linguagem Cem Linguagem C
  • 37. 37 Função printfFunção printf Sintaxe: printf ( "expressão de controle", argumentos ) • A função printf permite escrever mensagens no dispositivo padrão de saída (tela). • A expressão de controle contém caracteres que serão exibidos na tela e pode conter códigos de formatação que indicam o formato em que os argumentos devem ser impressos. • Cada argumento deve ser separado por vírgula. • Exemplos: printf(“nnEste eh o numero dois: %d", 2); printf("Aluno: %s t Nota: %f", "Pedro", 7.5); Expressão de controle argumento
  • 38. 38 Função printfFunção printf - Formatadores: %f número em ponto flutuante (float ou double) %d número em formato decimal %o número em formato octal %x número em formato hexadecimal %c caractere simples %s cadeia de caracteres n nova linha (pula uma linha) t tab (insere espaços de uma tabulação) " aspas (usado quando se quer imprimir aspas) barra (usado quando se quer imprimir uma barra)
  • 39. 39 Função scanfFunção scanf Sintaxe: scanf("expressão de controle", argumentos) • A função scanf permite ler dados formatados da entrada padrão (teclado) e gravar no(s) endereço(s) de variável(eis). • A lista de argumentos contém o(s) endereço(s) de variável(eis). • O operador de endereço em C é referenciado pelo símbolo &, que retorna o endereço de uma variável ou dispositivo físico. • Exemplo: int num; printf("Digite um numero: "); scanf("%d", &num); printf(“Numero digitado: %d", num); %d é substituído pelo valor da variável num A variável num recebe o número digitado, utilizando o operador &
  • 40. 40 Comentários no CódigoComentários no Código • É sempre aconselhável inserir comentários no código para explicar o funcionamento do programa, tornando-o mais legível. • Na linguagem C, os comentários são colocados dentro dos marcadores /* e */ em uma ou mais linhas. • As últimas padronizações da linguagem C permitem também os comentários de uma linha, utilizando o marcador // . Exemplos: int a; // Esta linha é um comentário e não tem influência no código a = 0; /* Estas duas linhas também são comentários e serão descartadas no momento da compilação */
  • 41. 41 Ambientes de desenvolvimento paraAmbientes de desenvolvimento para programação em Linguagem Cprogramação em Linguagem C ● Ambiente de desenvolvimento ou IDE (Integrated Development Environment): - edição e depuração (debug) do código-fonte; - compilador C - geração do arquivo-executável. ● Utilizado para desenvolvimento de programas C e C++; ● Nesta disciplina: Projetos C – Aplicações de Console. ● Algumas IDEs para desenvolvimento de programas em C: CodeBlocks, DevC++, Eclipse.
  • 42. 42 Ambiente de desenvolvimentoAmbiente de desenvolvimento Procedimentos para criar um arquivo-executável: 1) Crie um projeto na aba File > New Project (Console Application – C); 2) Dê um nome ao projeto (que será o nome do arquivo-executável); 3) Salve o projeto em uma pasta específica; 4) Crie um arquivo com a extensão .c que contenha a função main; 5) Escreva o código da função main; 6) Compile o código-fonte; 7) Caso o compilador não encontre erros, será gerado o arquivo- executável, com a extensão .exe.
  • 43. 43 Programa-exemploPrograma-exemplo - Primeiro programa: números na tela #include <stdio.h> #include <stdlib.h> /* Primeiro programa de exemplo */ int main() { int i; for(i = 1; i < 10; i++) { printf ("Numero: %dt", i); printf ("elevado ao quadrado: %dn", i*i); } return 0; }
  • 44. 44 Programa-exemploPrograma-exemplo - Segundo programa: cálculo de fatorial #include <stdio.h> #include <stdlib.h> int main() { int fat = 1; int i, x; printf("Entre com um numero:"); scanf("%d", &x); for(i = x; i > 1; i--) fat = fat * i; printf("Fatorial de %d: %dnnn", x, fat); return 0; }
  • 45. 45 Programa-exemploPrograma-exemplo - Terceiro programa: conversão de anos em dias // Programa-exemplo #include <stdio.h> #include <stdlib.h> int main() { /* declaracao das variaveis */ int dias; float anos; printf ("Entre com o numero de dias: "); // imprime mensagem na tela scanf ("%d", &dias); // entrada de dados /* Conversao de dias em anos */ anos = dias/365.0; /* Imprime mensagem na tela */ printf ("nn%d dias equivalem a %f anos.n", dias, anos); return 0; }
  • 46. 46 #include <stdio.h> #include <stdlib.h> int main() { int i, n; float valor, media, soma = 0; printf("Quantos numeros serao digitados?n"); scanf("%d", &n); for(i = 1; i <= n; i++) { printf("Digite o %do. numeron", i); scanf("%f", &valor); soma = soma + valor; } printf("nSomatoria dos %d valores lidos: %fn", n, soma); system("pause"); media = soma / n; printf("nValor medio dos %d valores lidos: %fn", n, media); return 0; } Somatória e média
  • 47. 47 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { char finaliza = 'n'; float num; while(finaliza != 's') { printf("Digite um numeron"); scanf("%f", &num); printf("Raiz de %f = %.3fn", num, sqrt(num)); printf("nPara encerrar digite sn"); fflush(stdin); // Limpa buffer do teclado finaliza = getchar(); // Obtém um caracter } printf("Fimn"); return 0; } Estrutura de repetição com finalização
  • 48. 48 ExercíciosExercícios 1) Crie um fluxograma e um programa em linguagem C, que pergunta ao usuário qual a sua idade e indica de ele pode ou não votar, ou se seu voto é opcional. 2) Crie um programa em linguagem C que, ao se digitar um dia de um ano (entre 1 e 365), indica qual o dia e o mês correspondentes. 3) Pesquise sobre a Tabela ASCII e crie um programa que escreva na tela os valores desta tabela.
  • 49. 49 Linguagem e Técnicas de Programação Capítulo 5 VetoresVetores
  • 50. 50 VetoresVetores Vetor é um conjunto de elementos consecutivos, todos do mesmo tipo, que podem ser acessados individualmente a partir de um único nome. Vetor unidimensional: tipo nome[tamanho]. Vetor multidimensional: tipo nome[tamanho1][tamanho2]. char cidade[60]; int precoData[31][12]; float temperaturaPosicao[50][50][50]; Nos vetores acima, cidade tem uma dimensão, precoData tem duas dimensões e temperaturaPosicao tem três dimensões. Vetores de duas dimensões são também conhecidos como matrizes.
  • 51. 51 Indexação de vetoresIndexação de vetores O índice de um vetor começa sempre em 0 e termina em n-1, sendo n o tamanho do vetor: float notasAlunos[50]; notasAlunos[0] = 7.8; notasAlunos[1] = 2.5; notasAlunos[0] = 10.0; ... notasAlunos[49] = 7.0;
  • 52. 52 Indexação de vetores multidimensionaisIndexação de vetores multidimensionais Os índices das dimensões de um vetor começam sempre em 0 e terminam em n-1, m-1 etc, sendo n, m etc o tamanho das dimensões: int posicao[3][3]; posicao[0][0] = 1; posicao[0][1] = 2; posicao[0][2] = 3; posicao[1][0] = 4; posicao[1][1] = 5; posicao[1][2] = 6; posicao[2][0] = 7; posicao[2][1] = 8; posicao[2][2] = 9; 1 2 3 4 5 6 7 8 9
  • 53. 53 Verificação de limites de tamanhoVerificação de limites de tamanho A linguagem C não faz verificação de limites de vetores: nada impede que seja ultrapassado o fim de uma dimensão de um vetor. Porém, escrever em área de memória não reservada pode “travar” o computador. Uma atribuição de valores além do limite de um vetor pode “sujar” uma área de memória reservada para outro programa. Deve-se verificar a atribuição de valores para um índice maior que o tamanho de uma dimensão do vetor. Um vetor pode ser inicializado na sua declaração: int i[5] = {13, -2, 0, -34, 43}; Ex.: o código abaixo será compilado, mas está ERRADO pois invade memória não reservada. A posição máxima permitida seria precos[4]. float precos[5]; precos[8] = 15.50;
  • 54. 54 Escrever e ler valores em um vetorEscrever e ler valores em um vetor #include <stdio.h> #include <stdlib.h> int main() { float alunos[40][2]; // 40 alunos e 2 provas de cada aluno int i, j; float soma1 = 0, soma2 = 0; // Zerar a matriz antes de utilizá-la for(i = 0; i < 40; i++) for(j = 0; j < 2; j++) alunos[i][j] = 0; alunos[5][0] = 2.2; alunos[5][1] = 6.8; alunos[12][0] = 7.9; alunos[12][1] = 8.2; for(i = 0; i < 2; i++) soma1 = soma1 + alunos[5][i]; for(i = 0; i < 2; i++) soma2 = soma2 + alunos[12][i]; printf("Media do aluno 5: %f n", soma1/2); printf("Media do aluno 12: %f n", soma2/2); return 0; }
  • 55. 55 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> /* Programa que declara um vetor com n=10 números e coloca na i-ésima posição o resultado do fatorial de i */ const int n = 10; int main() { int v[n]; int i; v[0] = 1; for(i = 1; i < n; i++) { v[i] = v[i-1] * i; printf("Fatorial de %d: %dn", i, v[i]); } return 0; }
  • 56. 56 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> // Imprime o rendimento de uma aplicação mensal, com a taxa de juros digitada int main() { int i; float deposito[12]; // 12 meses float juros, total = 0; printf("Digite a taxa de juros mensal: "); scanf("%f", &juros); for(i = 0; i < 12; i++) { printf("Digite o deposito %d: ", i+1); scanf("%f", &deposito[i]); // Recebe os depositos mensais } // Calcula os rendimentos for(i = 0; i < 12; i++) { printf("Deposito do mes %d: %.2fn", i+1, deposito[i]); total = total + deposito[i] + (total * juros/100.0); printf("Total acumulado: %.2fn", total); } return 0; }
  • 57. 57 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> // Cálculo de determinante de matriz 2x2 int main() { int i, j; float det; float m[2][2]; printf("Digite os quatro elementos de uma matriz 2x2n"); for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { printf("Digite um numeron"); scanf("%f", &m[i][j]); } } det = m[0][0]*m[1][1] - m[0][1]*m[1][0]; printf("nDeterminante dessa matriz: %fn", det); return 0; }
  • 58. 58 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> int main() // Médias de provas de alunos { int i, j, alunos, provas; float soma[40], notas[40][5]; printf("Qual a quantidade de alunos?n"); scanf("%d", &alunos); printf("Qual a quantidade de provas?n"); scanf("%d", &provas); for(i = 0; i < alunos; i++) { soma[i] = 0; for(j = 0; j < provas; j++) { printf("Digite a nota da prova %d do aluno %dn", j+1, i+1); scanf("%f", &notas[i][j]); soma[i] += notas[i][j]; } } for(i = 0; i < alunos; i++) printf("Media do aluno %d: %.1fn", i, soma[i] / provas); return 0; }
  • 59. 59 ExercíciosExercícios 1) Crie um programa que calcula a média das notas de 10 alunos digitadas no teclado, utilizando um vetor que armazena, em cada uma de suas posições, as notas individuais. 2) Crie um programa que coloque números digitados no teclado em uma matriz de 4 linhas e 4 colunas, e apresente a somatória dos valores armazenados em cada linha e em cada coluna. 3) Crie um programa que calcule o determinante de uma matriz 3x3, cujos elementos são inseridos via teclado.
  • 60. 60 Linguagem e Técnicas de Programação Capítulo 6 StringsStrings
  • 61. 61 String – vetor de caracteresString – vetor de caracteres Strings são vetores constituídos por caracteres: char nomeEscola[18]; strcpy(nomeEscola, "FATEC SANTO ANDRE"); - A função strcpy atribui um conteúdo a string nomeEscola, que pode armazenar até 17 caracteres. - Strings são SEMPRE terminadas com o caracter nulo: 0. Portanto, devem ter uma posição a mais que a quantidade de caracteres armazenados: - Uma string pode ser inicializada em sua declaração: char produto[15] = "Computador";
  • 62. 62 Funções de manipulação de stringsFunções de manipulação de strings gets(str): lê uma sequência de caracteres do teclado e grava na string str. puts(str): escreve na tela a sequência de caracteres armazenados em str. scanf(“%s”, &str): lê uma sequência de caracteres do teclado e grava na string str. printf(“%s”, str): escreve na tela a sequência de caracteres armazenados em str. strcpy(strDest,strOrig): copia a string strOrig para a string strDest. strcat(str1, str2): anexa a string str2 no final da string str1. int atoi(str): converte uma string em um número inteiro. float atof(str): converte uma string em um número real. int strlen(str): retorna o tamanho (núm. de caracteres) da string str. int strcmp(str1, str2): compara a string str1 com a string str2. Se forem iguais, retorna 0, se str1 for “posterior” que str2, retorna um número positivo; caso contrário, retorna um número negativo.
  • 63. 63 Lendo uma string de um tecladoLendo uma string de um teclado A melhor maneira de ler uma string de um teclado é com a função gets. Outra maneira é com a função scanf, se não houver espaços em branco: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s1[80], s2[80]; printf("Informe duas strings:n"); // Pode-se obter uma String com gets ou com scanf (sem utilizar &) gets( s1 ); scanf("%s", s2); printf("nStrings digitadas: %s, %sn", s1, s2); printf("Quantidade de caracteres: %d, %dn", strlen(s1), strlen(s2)); return 0; }
  • 64. 64 Exemplos de manipulação de stringsExemplos de manipulação de strings char teste1[100], teste2[40]; strcpy(teste1, "Informatica"); // copia/atribuicao de valor strcpy(teste2, teste1); // copia/atribuicao de valor // tamanho de string printf("Tamanho da string: %d", strlen(teste1)); int numInteiro; char numString[4] = "1580"; numInteiro = atoi(numString); // conversao de string em inteiro strcpy(senha1, "fatec"); strcpy(senha2, "etec"); if( strcmp(senha1, senha2) == 0 ) // 2 strings iguais printf("Senha valida");
  • 65. 65 Vetor de StringsVetor de Strings - Vetores de strings são comuns em C. Eles são declarados e inicializados como qualquer vetor bidimensional, mas a maneira de utilizá-los difere um pouco. Por exemplo, o que faz a declaração abaixo? char lista_nomes[10][40]; Este comando especifica um vetor chamado lista_nomes, que contém até 10 strings, com até 39 caracteres cada (descartando o 0 final). Para acessar uma das strings deste vetor, especifique apenas o primeiro índice. Por exemplo, para escrever na tela o quinto nome armazenado, utilize o seguinte comando: printf (“%s”, lista_nomes[4]);
  • 66. 66 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> #include <string.h> int main() // Substitui espaços por mudança de linha { int pos = 0; char caracter; char texto[500]; puts("Digite um texto granden"); gets(texto); do { caracter = texto[pos]; if (caracter == ' ') texto[pos] = 'n'; pos++; } while(caracter != '0'); puts(texto); return 0; }
  • 67. 67 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> #include <string.h> /* Este programa inverte a ordem de todos os caracteres de um texto */ int main() { int i, tamanho; char texto[500]; puts("Digite um texto granden"); gets(texto); tamanho = strlen(texto); for(i = tamanho - 1; i >= 0; i--) putchar(texto[i]); // Escreve o caracter de índice i da string texto return 0; }
  • 68. 68 Programa-exemploPrograma-exemplo #include <stdio.h> #include <stdlib.h> #include <string.h> /* Este programa inverte a ordem de todas as palavras de um texto */ int main() { int i, j, word = 0, pos = 0, ini = 0; char caracter; char texto[500]; char palavras[100][20]; puts("Digite um texto granden"); gets(texto); // Continua na página seguinte
  • 69. 69 Programa-exemploPrograma-exemplo // Continuação da página anterior do { caracter = texto[pos]; if (caracter == ' ' || caracter == '0') { j = 0; for(i = ini; i < pos; i++) { palavras[word][j] = texto[i]; j++; } palavras[word][j] = '0'; ini = pos + 1; word++; } pos++; } while(caracter != '0'); for(i = word - 1; i >= 0; i--) printf("%s ", palavras[i]); return 0; }
  • 70. 70 ExercíciosExercícios 1) Faça um programa que lê do teclado duas strings, concatena essas strings e informa o tamanho da string final. 2) Faça um programa que lê do teclado duas strings, compara essas strings e informa qual a ordem alfabética entre elas. 3) Faça um programa que lê três nomes digitados do teclado, ordena alfabeticamente esses nomes e apresenta a lista de nomes ordenada. 4) Qual o valor da variável x abaixo? strcpy(s1, “1000”); strcpy(s2, “99”); x = strcmp(s1, s2); 5) Implementar o algoritmo de cadastro/acesso a um site, descrito na página 4.
  • 71. 71 Linguagem e Técnicas de Programação Capítulo 7 Estrutura em C: structEstrutura em C: struct Conversão de variáveis: castConversão de variáveis: cast Funções matemáticasFunções matemáticas Comando de decião múltipla: switch-caseComando de decião múltipla: switch-case
  • 72. 72 Struct – agrupamento de variáveisStruct – agrupamento de variáveis Uma struct é um agrupamento de variáveis relacionadas, formando um novo tipo de dado. #include <stdio.h> struct dadosEscola { int num; char nom[20]; char rua[50]; char cid[80]; char uf[3]; }; int main() { struct dadosEscola esc; esc.num = 152; strcpy(esc.nom, "Colegio Brasilia"); strcpy(esc.rua, "Rua Atibaia"); strcpy(esc.cid, "Recife"); strcpy(esc.uf, "PE"); printf("%s: %s n. %d, %s - %s n", esc.nom, esc.rua, esc.num, esc.cid, esc.uf); return 0; }
  • 73. 73 Conversão de variáveis: castConversão de variáveis: cast A linguagem C permite converter um tipo de variável em outro (cast), utilizando parênteses a frente da variável a ter seu valor convertido. Exemplo: int main() { int a; float b; double c; b = 25.76; // Conversão de float para int a = (int)b; // Neste cast, a variavel a recebe o valor 25 printf("a: %d, b: %f n", a, b); a = 40; // Conversão de int para double c = (double)a; // Neste cast, a variavel c recebe o valor 40.000000 printf("a: %d, c: %f n", a, c); return 0; }
  • 74. 74 Conversão de variáveis com stringsConversão de variáveis com strings Cabe observar que o cast não é possível com variáveis string. Neste caso, é necessário utilizar as funções sprintf, atoi e atof. Exemplo: int main() { int a; float b; char d[20] = "30.2"; // Conversão de string para float b = atof(d); // Neste caso, a variavel b recebe o valor 30.200000 printf("b: %f, d: %s n", b, d); a = 49; // Conversão de int para string sprintf(d, "%d.55", a); // Neste caso, d recebe o valor "49.55" printf("a: %d, d: %s n", a, d); return 0; }
  • 75. 75 Funções matemáticasFunções matemáticas A Linguagem C oferece várias funções matemáticas. Para utilizá-las, deve-se declarar a biblioteca math.h. - Exemplos de funções: #include <math.h> x = sin(y); // x recebe o seno de y x = cos(y); // x recebe o cosseno de y x = sqrt (y); // x recebe a raiz quadrada de y w = pow(x, y); // w recebe x elevado a y y = exp(x); // y recebe e elevado a x y = log(x); // y recebe o logaritmo de x na base e. Não use com x negativo. y = log10(x); // y recebe o logaritmo de x na base 10. Não use com x negativo.
  • 76. 76 Comando switch-caseComando switch-case O comando de decisão switch-case é utilizado quando há um grande número de condições a serem testadas, com respectivas decisões a serem tomadas. int dia; printf("Digite o numero de um dia da semana"); scanf("%d", &dia); switch(dia) { case 1: printf("domingon"); break; case 2: printf("segundan"); break; // outros cases case 7: printf("sabadon"); break; default: printf("dia invalidon"); }
  • 77. 77 Linguagem e Técnicas de Programação Capítulo 8 Manipulação de arquivosManipulação de arquivos
  • 78. 78 Manipulação de arquivosManipulação de arquivos A manipulação de arquivos em C é feita a partir da declaração de um ponteiro FILE, que aponta para um arquivo. Exemplo: FILE *arq; arq = fopen("dados.txt", "w"); Caso o arquivo não esteja na mesma pasta que o programa executável, é preciso informar a pasta que o contém: arq = fopen("c:empresadados.txt", "r"); Se o arquivo não for encontrado, o ponteiro assume o valor NULL: if( arq == NULL ) { printf("Arquivo nao encontrado"); return 1; }
  • 79. 79 Modos de abertura de arquivosModos de abertura de arquivos Arquivos podem ser abertos de vários modos, sendo os mais comuns: "r" – arquivo-texto para leitura de dados; "w" – arquivo-texto para gravação de dados – se o arquivo já existir, sobrescreve os dados existentes; "r+" ou “w+" – arquivo-texto para leitura e escrita de dados; "a" – arquivo-texto para anexação de dados – se o arquivo já existir, escreve após os dados existentes; "rb" – arquivo-binário para leitura de dados; "wb" – arquivo-binário para gravação de dados – se o arquivo já existir, sobrescreve os dados existentes; "ab" – arquivo-binário para anexação de dados – se o arquivo já existir, escreve após os dados existentes;
  • 80. 80 Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo arq = fopen(“arquivo.txt”, “w”); Abre um arquivo para leitura e/ou escrita, retornando um ponteiro para este arquivo, ou NULL em caso de falha. fclose(arq); Fecha um arquivo, retornando 0 (sucesso) ou a constante EOF (erro). x = fgetc(arq); Lê um caractere de um arquivo, retornando-o. c = fputc(‘A’, FILE *arq) Escreve o caractere ‘A’ no arquivo apontado pelo ponteiro arq. Em caso de sucesso, retorna o caracter; em caso de erro, retorna a constante EOF.
  • 81. 81 Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo fgets(s, n, arq) Lê uma linha, com até n-1 caracteres, de um arquivo, colocando-a em s. A string lida também é retornada pela função. fputs(s, arq) Escreve a string s em uma linha de um arquivo. A função retorna um valor não-negativo, em caso de sucesso, ou EOF, em caso de falha. fscanf(arq, “%d”, &x) Lê uma linha formatada de um arquivo. fprintf(arq, “escreve %d”, x) Escreve uma linha formatada em um arquivo.
  • 82. 82 Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo x = feof(arq) Retorna verdadeiro (1) quando a leitura de um arquivo chegou ao fim, ou falso (0), quando ainda há linhas a serem lidas. fread(ptr, size, n, arq) Lê um conjunto de elementos de um arquivo, colocando-os em uma variável apontada por ptr. Cada elemento deve possuir um número de bytes indicados por size, sendo lidos n elementos do arquivo. fwrite(ptr, size, n, arq) Escreve um conjunto de elementos (apontados por ptr) em um arquivo. Cada elemento deve possuir um número de bytes indicados por size, sendo escritos n elementos no arquivo.
  • 83. 83 Exemplo de leitura em arquivoExemplo de leitura em arquivo #include <stdio.h> #include <stdlib.h> int main() { float valor, total = 0; int cont = 0; FILE *arq; arq = fopen("precos.txt", "r"); if(arq == NULL) { printf("Arquivo não encontradon"); return 1; } while(!feof(arq)) // Le as linhas do arquivo até o final { fscanf(arq, "%f", &valor); total = total + valor; cont++; } printf("O valor medio do produto e': %f n", total / cont); fclose(arq); return 0; }
  • 84. 84 Exemplo de escrita em arquivoExemplo de escrita em arquivo #include <stdio.h> int main() { FILE *arquivo; arquivo = fopen("c:temparquivo.txt", “w"); if( arquivo == NULL ) { printf("Nao foi possivel escrever no arquivo"); return 1; } fputs("Escrevendo em um arquivo!!!n", arquivo); fprintf(arquivo, "%fn", 34.6); printf("Verificar o arquivo c:temparquivo.txt n"); fclose(arquivo); return 0; }
  • 85. 85 #include <stdio.h> int main() { float nota, total = 0; int cont = 0; FILE *arq = fopen("notas.txt", "r"); if(arq == NULL) { printf("Arquivo não encontradon"); return 1; } fscanf(arq, "%f", &nota); while(nota > 0) { total = total + nota; fscanf(arq, "%f", &nota); cont++; } if(cont > 0) printf("Media = %.1f", total/cont); fclose(arq); return 0; } Programa-exemploPrograma-exemplo Cálculo de média de notas O programa abre (fopen) o arquivo notas.txt para leitura ("r"). Lê linha a linha (fscanf), salvando o valor de cada linha na variável nota. Quando o último valor lido for igual ou menor que 0, a estrutura de repetição while é interrompida. A seguir, é impresso na tela, pela função printf, o valor da média das notas (total/cont). A média só é impressa na tela caso o arquivo tenha ao menos uma linha.
  • 86. 86 Linguagem e Técnicas de Programação Capítulo 9 Funções e Escopo de VariáveisFunções e Escopo de Variáveis
  • 87. 87 Funções na linguagem CFunções na linguagem C • Um programa em C é composto por uma ou mais funções. • A função main() é obrigatória em todos os programas. • Funções são utilizadas por dois motivos principais: ➢ reaproveitamento de código, que pode ser utilizado em vários pontos do programa; ➢ divisão em blocos funcionais, facilitando seu entendimento. Exemplo: tipoRetorno nomeFunção (tipo arg1, tipo arg2,...,tipo argN) { comandos da função; }
  • 88. 88 Funções e variáveis só podem ser utilizadas em um programa em C depois de serem declaradas void atraso() { int i, j; for(i = 0; i < 10000; i++) for(j = 0; j < 10000; j++); } int potencia(int a, int b) { int i, ret = 1; for(i = 0; i < b; i++) ret = ret * a; return ret; } int main() { int resultado, x, y; resultado = potencia(5, 6); printf("5 elevado a 6 vale: %dn", resultado); atraso(); printf("Digite dois numerosn"); scanf("%d", &x); scanf("%d", &y); printf("%d elevado a %d vale: %dn", x, y, potencia(x, y)); atraso(); printf("%d elevado a %d vale: %dn", y, x, potencia(y, x));
  • 89. 89 Protótipos de funçõesProtótipos de funções O código da função deve ser declarado no arquivo onde a função é utilizada, e posicionada acima do trecho de código que faz referência à função, ou então, é preciso declarar seu protótipo. Exemplo: float reajustaPreco(float taxa, float preco); // prototipo //Esta função não retorna nunhum valor, por isso é declarada com void void calcula() { float novoPreco; novoPreco = reajustaPreco(1.5, 200.0); } float reajustaPreco(float taxa, float preco) // codigo da funcao { preco = preco * taxa; return preco; }
  • 90. 90 Arquivos de cabeçalho - BibliotecasArquivos de cabeçalho - Bibliotecas Protótipos de funções, variáveis e constantes podem ser declarados em arquivos de cabeçalho, com extensão .h. Os arquivos de cabeçalho são declarados no início de um arquivo-fonte, indicando para o linkeditor procurar, em algum arquivo-objeto, o código das funções utilizadas. Exemplo: o protótipo da função reajusta() está declarado no arquivo de cabeçalho economia.h e seu código está em algum outro arquivo-fonte, por exemplo, no arquivo economia.c: #include "economia.h" void reajusta() { float novoPreco; novoPreco = reajustaPreco(1.5, 200.0); ... }
  • 91. 91 Variáveis locais e globaisVariáveis locais e globais • Variáveis locais: são definidas dentro de uma função, sendo válidas somente dentro da função. • Variáveis globais: definidas fora das funções, com validade para todas as funções abaixo do local de definição dessa variável. • O escopo de uma variável refere-se ao local onde esta variável é definida e tem validade. int a; // variável global void funcaoExemplo(char c) { double b; // variável local int a; // variável local }
  • 92. 92 Variáveis locais e globaisVariáveis locais e globais • Alterações em variáveis locais não são visualizadas fora da função onde a variável está declarada. Exemplo: int a, b; // variáveis globais void funcao1() { int a; // variável local a = 2; b = 4; } int main() { a = 3; b = 3; funcao1(); printf("a = %d e b = %d", a, b); // saída: a = 3 e b = 4 return 0; }
  • 93. 93 ExercíciosExercícios 1) Faça um programa com várias funções, cada uma escrevendo uma palavra da seguinte frase: “Fatec Santo André – Eletrônica Automotiva” 1) Faça um programa que leia valores digitados, interrompa quando for digitado a letra F, e forneça a somatória dos números digitados. Utilize uma função para a leitura do teclado e outra função para o cálculo da somatória. 2) Crie uma função que calcule o volume de um paralelepípedo, de acordo com suas dimensões, conforme utilização na função main: void main() { doble valor; valor = volume(4.567, 3.5645, 5.666); printf(“Volume: %fn”, valor); }
  • 94. 94 Linguagem e Técnicas de Programação Capítulo 10 Ponteiros na linguagem CPonteiros na linguagem C
  • 95. 95 PonteirosPonteiros Um ponteiro é uma variável que guarda um endereço de um outro objeto, por exemplo, o endereço de uma variável ou de um dispositivo físico, como um display, teclado ou arquivo. Ponteiro de variáveis: o tipo de um ponteiro deve ser igual ao tipo da variável que ele armazena o endereço. Exemplos: char *nome; // ponteiro para variavel do tipo char int *temp; // ponteiro para variavel do tipo int float *ponteiroCalc; // ponteiro para variavel do tipo float FILE * arq // ponteiro para um arquivo Para obter o endereço de uma variável é utilizado o operador &.
  • 96. 96 Exemplos de utilização de ponteirosExemplos de utilização de ponteiros int cont; int val; int *end1; int *end2; // atribui o valor 100 à variável cont cont = 100; // end1 guarda o endereço de cont end1 = &cont; // o valor da variável cont é indiretamente atribuído a val val = *end1; // end2 guarda o endereço de 100 100 0A00 0A00 cont val end1 end2 endereços memória variáveis 0A00 0A04 0A08 0A0C
  • 97. 97 Ponteiro como parâmetro de funçõesPonteiro como parâmetro de funções Ponteiro de variável passado como argumento de função permite modificar o valor da variável dentro da função: #include <stdio.h> void semPonteiros(int num) { num = num + 5; } void comPonteiros(int *num) { *num = *num + 5; } int main() { int a = 1; printf("Valor original de a: %d n", a); semPonteiros(a); printf("Apos chamar a funcao semPonteiros: a = %d n", a); comPonteiros(&a); printf("Apos chamar a funcao comPonteiros: a = %d n", a); return 0; } Saída do programa: Valor original da variável a: 1 Valor de a após chamar a função semPonteiros: 1 Valor de a após chamar a função comPonteiros: 6
  • 98. 98 Ponteiro como parâmetro de funçõesPonteiro como parâmetro de funções #include <stdlib.h> #include <stdio.h> #include <math.h> void raizes(int a1, float *r1, int a2, float *r2) { *r1 = sqrt(a1); *r2 = sqrt(a2); } int main() { float v1, v2; int b1, b2; printf("Digite dois numeros inteirosn"); scanf("%d", &b1); scanf("%d", &b2); raizes(b1, &v1, b2, &v2); printf("Raiz quadrada de: %d = %fn", b1, v1); printf("Raiz quadrada de: %d = %fn", b2, v2); return 0; }
  • 99. 99 // Programa-exemplo com ponteiros #include <stdio.h> #include <stdlib.h> int main() { char letra = 'q'; int dia = 12; int *end; float nota = 87.8; end = &dia; char assunto[10] = "medicina"; char *pont1; int *pont2; double *pont3; char *pont4[10]; printf("Valor da variavel letra: %c e seu endereco: %xn", letra, &letra); printf("Valor da variavel dia: %d e seu endereco: %xn", dia ,&dia); printf("Valor da variavel nota: %2.1f e seu endereco: %xn", nota, &nota); printf("Valor apontado por end: %d e o endereco que ele contem: %xn", *end, end); printf("Valor da variavel assunto: %s e seu endereco: %xn", assunto, assunto); printf("Endereco que o ponteiro pont1 contém: %xn", pont1); printf("Endereco que o ponteiro pont2 contém: %xn", pont2); printf("Endereco que o ponteiro pont3 contém: %xn", pont3); printf("Endereco que o ponteiro pont4 contém: %xn", pont4); return 0;
  • 100. 100 Exibindo uma string utilizando ponteiroExibindo uma string utilizando ponteiro #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { char texto[40] = "Exibindo uma string usando um ponteiro."; char *ptr_str; ptr_str = texto; // Apontando para o inicio da string printf("Inicio da string = %cnn", *ptr_str); // Exibindo toda a string usando o ponteiro while(*ptr_str != '0') { putchar(*ptr_str); usleep(100000); ptr_str++; } printf("n"); return 0; }
  • 101. 101 ExercíciosExercícios 1) Faça programa com uma função que recebe 2 números e devolve a soma, multiplicação, divisão e subtração desses números, e retorna o valor de um número elevado pelo outro. 2) a) Sendo p um ponteiro, explique a diferença entre: p++; (*p)++; *(p++); b) O que quer dizer *(p+10) ? c) Qual o valor de y no final do programa abaixo? A seguir, escreva um /* comentário */ em cada comando de atribuição explicando o que ele faz e o valor da variável à esquerda do '=' após sua execução. int main() { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x--; (*p) += x; printf ("y = %dn", y); return(0); } (fonte: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c620.html)
  • 102. 102 Linguagem e Técnicas de Programação Capítulo 11 Parâmetros da função mainParâmetros da função main Biblioteca padrão da linguagem CBiblioteca padrão da linguagem C
  • 103. 103 Parâmetros e retorno da função mainParâmetros e retorno da função main Declaração da função main, de acordo com o padrão ANSI C: int main(int argc, char *argv[]) int main(void) Formas aceitáveis (diferentes do padrão ANSI C): void main(int argc, char *argv[]) void main(void) void main() int main() main() Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado.
  • 104. 104 Parâmetros da função mainParâmetros da função main O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele vale no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento. O argv (argument values) é um ponteiro para uma matriz de strings. Cada string desta matriz é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como já foi dito, é considerado o primeiro argumento). Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html
  • 105. 105 Parâmetros da função mainParâmetros da função main Exemplo 1: Recebe da linha de comando um conjunto de palavras e as imprime linha a linha. #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; for(i = 0; i < argc; i++) { printf("%sn", argv[i]); } return 0; } Exercício: Faça um programa de uma calculadora de quatro operações que, passando argumentos na linha de comando, executa a operação indicada. Exemplo: calcular soma 15 43 ou calcular divisao 113 29
  • 106. 106 Parâmetros da função mainParâmetros da função main Exemplo 2: Recebe da linha de comando o dia, mês e ano, e imprimir a data em formato apropriado. Chamada do programa (data.exe): data 19 04 08 O programa deverá imprimir: 19 de abr de 2008 #include <stdio.h> #include <stdlib.h> void main(int argc, char *argv[]) { int mes; char *nomemes[] = {"jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"}; // Verifica o numero de parametros fornecidos: parametro 1: nome do programa, // parametro2: dia, parametro 3: mes, parametro 4: dois ultimos digitos do ano if(argc == 4) { mes = atoi(argv[2]); // argv contem strings de entrada if (mes < 1 || mes > 12) // Testa se o mes e' valido printf("Erro!nUso: data dia mes ano, argumentos com 2 digitos"); else printf("n%s de %s de 20%s", argv[1], nomemes[mes-1], argv[3]); } else printf("Erro!nUso: data dia mes ano, argumentos com 2 digitos"); } Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html
  • 107. 107 Biblioteca padrão da linguagem CBiblioteca padrão da linguagem C A biblioteca padrão da linguagem C contém um conjunto de funções de uso comum, como tratamento de entrada/saída, operações matemáticas e manipulação de cadeia de caracteres. O nome e as características de cada função estão em arquivos “cabeçalho”. Já a implementação das funções encontra-se em arquivos pré-compilados, que são “linkados” pelo link-editor. Principais arquivos de cabeçalho: • stdio.h – Manipulação de entrada/saída de dados (printf, scanf, fprintf etc). • stdlib.h – Operações diversas (system, atof, atoi etc). • string.h – Tratamento de cadeia de caracteres (strcpy, strlen, strcmp etc). • math.h – Funções matemáticas comuns em computação (sqrt, cos, sin, log etc). • time.h – Conversão de tipos de dado de data e horário (asctime, clock, localtime etc).
  • 108. 108 Linguagem e Técnicas de Programação Capítulo 12 Pré-processador e MacrosPré-processador e Macros Operadores bináriosOperadores binários Programação para MicrocontroladoresProgramação para Microcontroladores
  • 109. 109 Pré-processador e MacrosPré-processador e Macros O pré-processador é uma aplicação executada antes de se executar o compilador, para resolver as instuções e diretivas de pré-processamento que o código-fonte possa ter. Todas as instuções e diretivas de pré-processamento são precedidas do caractere #. Macros são porções de código que são substutuídas, pelo pré-processador, antes do compilador converter o código. Um exemplo de macro é a definição de uma constante numérica: #define MAX 100
  • 110. 110 Macros de funçõesMacros de funções É possível transformar funções simples em macros. Quando se deseja que os parâmetros de uma função simples sejam genéricos quanto ao tipo, pode-se transformar a função em uma macro. Exemplo: #include <stdio.h> // A macro Mult pode receber parâmetros int, char, float ou double // e devolve como resultado a multiplicação dos parâmetros #define Mult(x,y) x*y main() { printf("%d n", Mult(3,4)); printf("%f n", Mult(3.5,5.2)); }
  • 111. 111 Outras diretivas de pré-processamentoOutras diretivas de pré-processamento A diretiva #include é utilizada para indicar ao pré-processador para substituir a linha em que se encontra pelo conteúdo do arquivo que é colocado logo após. Exemplo: #include <stdio.h> // inclui o conteúdo da biblioteca-padrão stdio #include “c:userstrabalhomotor.h” // inclui o conteúdo da biblioteca motor A diretiva #pragma indica ao compilador para tomar determinadas atitudes, de acordo com o valor passado. Exemplo: // indica que a compilação deve ser otimizada para o PIC16C54 #pragma device PIC16C54 Para o compilador CCS C o pragma é opcional: #device pic16c54
  • 112. 112 Operadores BináriosOperadores Binários A linguagem C, considerada de baixo nível, permite a manipulação de bits, utilizando operadores binários, conforme mostrado abaixo: Operador Descrição & AND | OR ^ XOR (OR exclusivo) << Deslocamento para esquerda >> Deslocamento para direita Os operadores binários não devem ser confundidos com os operadores lógicos (&& || !). Os operadores binários operam bit a bit, sendo muito utilizados em circuitos com microcontroladores.
  • 113. 113 Tipos de Variáveis - MicrocontroladoresTipos de Variáveis - Microcontroladores • Os compiladores de linguagem para microcontroladores apresentam, geralmente, tamanhos menores para os tipos de variáveis. O exemplo abaixo refere-se a compiladores voltados a microcontroladores PIC:
  • 114. 114 Exemplos com Operadores BináriosExemplos com Operadores Binários unsigned char c; c = 7; // codigo binario 0000 0111 c = c<<1; // codigo binario 0000 1110 = 14 c = c<<2; // codigo binario 0011 1000 = 56 c = c<<3; // codigo binario 1100 0000 = 192 c = c>>1; // codigo binario 0110 0000 = 96 // 12 equivale a 00001100 e 6 equivale a 00000110 c = 12 & 6; // c passa a valer 4 (00000100) c = 12 | 6; // c passa a valer 14 (000001110) c = 12 ^ 6; // c passa a valer 10 (000001010)
  • 115. 115 Exemplo de programa para microcontroladorExemplo de programa para microcontrolador As definições de PIN_B0 e PIN_B1 estão no arquivo 16c71.h. A função toupper, que transforma letras em maiúsculas, está definida em ctype.h. O uso de #fuses indica “high speed oscillator” e “no watch dog timer”. As funções printf e putc são referenciadas utilizando o #use rs232, que indica parâmetros de comunicação para o microcontrolador. #include <16c71.h> #include <ctype.h> #fuses hs,nowdt #use rs232(baud=9600,xmit=PIN_B0,rcv=PIN_B1) #define TRUE 1 main() { printf(“Enter characters:”); while(TRUE) putc(toupper(getc())); }
  • 116. 116 Linguagem e Técnicas de Programação Capítulo 13 Exercícios selecionadosExercícios selecionados
  • 117. 117 1) Um usuário digita um número no teclado. Imprima a tabuada deste número. 2) Faça um programa que armazena números em uma matriz 2x2 ou 3x3 e mostra o determinante da matriz armazenada. 3) Monte o fluxograma e crie um programa que aponta se uma pessoa é obrigada ou não a votar ou se é o voto é opcional, de acordo com a sua idade, digitada no teclado. 4) Um arquivo contém um número indeterminado de linhas, contendo um número em cada linha. Crie um segundo arquivo no qual cada linha contém um número corresponde a duas vezes o valor do número do primeiro arquivo, linha-a-linha. 5) Criar um fluxograma para o cálculo das raízes de uma equação de segundo grau, dados os coeficientes a, b e c. A seguir, implemente o algoritmo em linguagem C.
  • 118. 118 6) Criar um fluxograma para dividir em 4 listas cidadãos brasileiros, ingleses, japoneses e outros. Para cada cidadão, o programa pede a nacionalidade e o nome. Ao final, imprima as quatro listas. 7) Faça um programa em linguagem C que receba, via teclado, as notas de três provas de 40 alunos e, no final, exiba na tela a nota média de cada aluno. Dica: utilize o seguinte vetor bidimensional: float notas[40][3]. 8) Faça um programa em linguagem C que lê duas palavras do teclado e, caso elas sejam iguais, escreve na tela o número de caracteres dessas palavras; caso as palavras sejam diferentes, escreve na tela a diferença entre os números de caracteres das duas palavras. 9) Faça um programa que armazene um login e senha de acesso restrito. Passados como argumentos do programa. A seguir, o programa deve permitir acesso apenas aos usuários que acertarem o login e senha. 10) Faça um programa que calcula qual o montante acumulado em um ano por uma aplicação que rende 2% ao mês, com depósitos mensais de R$ 1000,00.
  • 119. 119 11) Qual o resultado do programa abaixo, para cada sequência de dados de entrada. #include <stdio.h> main() { int a, b, c; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); if((a == 7 || b != 2) && c < 4) printf("X"); else { if (a%b == 0) printf("Y"); else printf("Z"); } } Sequência digitada Letra escrita na tela 7 3 4 8 4 1 2 2 2
  • 120. 120 12) O que será impresso na tela após a execução do programa abaixo: #include <stdio.h> int f1(int a, int b, int *c, int *d) { a = 15; b = *c; *c = *d; return b + a; } int main(void) { int var1 = 1; int var2 = 2; int var3 = 3; int var4 = 4; float var5, var6; var4 = f1(var1, var2, &var3, &var4); var5 = 2.5; var6 = 5.7; printf("%d - %d - %d - %dn", var1, var2, var3, var4); printf("%.1fn", var6 - var5); puts("var4 – var2"); return 0; }