O documento apresenta um mini-curso sobre a linguagem C, com informações sobre o professor, objetivos do curso, sugestões de material de apoio e agenda.
2. • Semana da Tecnologia
• Grupo Unis
• APRESENTAÇÃO
– Professor Wariston Pereira
• MBA em Gestão Estratégica e Inteligência em Negócios
• Bacharel em Ciência da Computação
• Analista de Sistemas: TI – Unis
• Professor Atualmente nos Cursos: Ciência da Computação,
Engenharia Civil e Automação Industrial. Já atuei também nos cursos
de Engenharia de Produção e Administração.
• Consultor e Proprietário da W4Solutions – Soluções em Tecnologia
da Informação e Comunicação Empresarial.
• Atuação nas Áreas de Análise, Desenvolvimento, Consultoria, Redes
de Computadores e Simulação Computacional.
2
3. • Semana da Tecnologia
• Grupo Unis
• OBJETIVOS
– Caracterizar Linguagens de Programação;
– Caracterizar a linguagem C;
– Dev-Cpp – Compilador C/C++
– Estruturas Básicas em C;
– Identificadores;
– Operadores Relacionais, Lógicos e Aritméticos;
– Comandos de Entrada e Saída;
– Estruturas Condicionais;
– Estruturas de Controle/Repetição;
– Funções.
3
4. • Semana da Tecnologia
• Grupo Unis
• Algumas Sugestões....
•Apostilas
• Curso de Linguagem C – UFMG
• Introdução à Linguagem C – UNICAMP
4
5. • Semana da Tecnologia
• Grupo Unis
• AGENDA
– Laboratório 3
• 26/04 – 21:00 às 22:30 hrs
• 27/04 – 19:30 às 21:00 hrs
• 29/04 – 19:30 às 21:00 hrs
5
6. • Semana da Tecnologia
• Grupo Unis
Agora é com vocês....
• Nome
• Expectativa
• Atuação
6
8. Introdução
Por que programar ?
Quando o homem necessita do auxilio do computador para
executar algumas tarefas.
O Que é um programa ?
Conjunto de instruções de uma determinada linguagem
através das quais, um computador executa algumas
tarefas.
8
9. Introdução
O Que é uma linguagem ?
Uma linguagem consiste de um conjunto de palavras
reservadas e regras de sintaxe que possibilita criar
programas de computadores.
Este conjunto de palavras possui regras de estruturação
lógica e sintática própria.
9
10. Exemplos de Códigos: BASIC
Pseudo-código BASIC
leia(num) 10 input num
para n de 1 20 for n=1 to 10
até 10 passo 1 step 1
faça
30 let tab=num*n
tab←num*n
40 print chr$(tab)
imprima(tab)
50 next n
fim-para;
10
11. Exemplos de Códigos:
FORTRAN
Pseudo-código FORTRAN
leia(num) read (num)
para n de 1 do 10 n=1:10
até 10 passo 1 tab=num*n
faça
write(tab)
tab←num*n
10 continue
imprima(tab)
fim-para;
11
12. Exemplos de Códigos:
Assembly
Pseudo-código Assembly (Intel 8088)
leia(num) MOV CX,0
para n de 1 IN AX,PORTA
até 10 passo 1 MOV DX,AX
faça
LABEL:
tab←num*n
INC CX
imprima(tab)
MOV AX,DX
fim-para;
MUL CX
OUT AX, PORTA
CMP CX,10
12
JNE LABEL
13. Exemplos de Códigos: C
Pseudo-código C
leia(num) scanf(&num);
para n de 1 for(n=1;n<=10;n++){
até 10 passo 1 tab=num*n;
faça
printf(”n %d”,
tab←num*n tab);
imprima(tab) };
fim-para;
13
14. Tipos de Linguagens: Baixo
Nível
São linguagens com foco na maquina, ou
seja, utiliza instruções detalhadas que
controla os circuitos internos do computador.
Usualmente são genericamente chamadas
de linguagens de maquina, Assembly ou de
linguagem de montagem.
14
15. Tipos de Linguagens: Baixo
Nível
Vantagens: Maior velocidade de
processamento e ocupam menor espaço na
memória.
Desvantagens: Pouca portabilidade, ou
seja, o código é gerado para um tipo de
processador não serve para outro.
15
16. Tipos de Linguagens: Alto
Nível
São linguagens voltadas para que haja uma
maior interação entre o homem e a máquina.
Necessitam de compiladores ou
interpretadores para gerar as instruções do
microprocessador.
16
17. Tipos de Linguagens: Alto
Nível
Vantagens: São compiladas ou
interpretadas, têm maior portabilidade
podendo ser executados em várias
plataformas com pouquíssimas
modificações.
Desvantagens: São mais lentas e ocupam
mais memória.
17
18. Compiladores x
Interpretadores
A única linguagem que o computador entende é a linguagem
de máquina. Programas escritos em um linguagem de alto
nível, devem ser traduzidos para a linguagem de máquina.
Os Programas que fazem esta tradução, classificam em:
- INTERPRETADORES
- COMPILADORES
18
19. Compiladores x
Interpretadores
Os INTERPRETADORES, traduzem o código fonte em
linguagem de máquina através da interpretação de cada
instrução feita a medida que o software é executado.
Necessitam de um componente interpretador presente na
máquina.
Os COMPILADORES, por sua vez, traduzem o código
fonte em linguagem de máquina através da geração de
um programa .OBJ, que após ser linkeditado, torna-se um
arquivo executável. Em C os programas são compilados.
19
21. Histórico
C foi originalmente desenvolvida por Dennis Ritchie e
K. Thompson nos Laboratórios Bell nos anos 70.
Derivadas de duas linguagens anteriores chamadas BCPL
e B.
Inicialmente para máquinas com o sistema operacional
UNIX.
Tornou-se uma das mais importantes e populares nos
últimos dias.
Foi projetada para o desenvolvimento de programas
estruturados e modulares.
21
22. Histórico
Nos anos seguintes, a popularidade da linguagem C
aumentou consideravelmente, aumentando também o
surgimento de ferramentas de desenvolvimento.
Inicialmente, muitas implementações do C não
traduziam fielmente a definição original, o que gerou
alguns problemas de incompatibilidade
A portabilidade proposta pela definição original ficou
bastante comprometida.
22
23. ANSI
O Padrão ANSI
Buscando uma padronização na definição da linguagem C,
a American National Standard Institute (ANSI),
desenvolveu um padrão hoje bastante utilizado no mundo
da linguagem C, chamado de C padrão ANSI ou C ANSI.
Quase todas as ferramentas de desenvolvimento da
linguagem C atuais, seguem este padrão.
23
24. Características
Linguagem de propósito genérico;
Usada para escrever processadores de texto,
planilhas, sistemas operacionais, programas de
comunicação, programas para automação
industrial, SGBDs, navegadores e servidores
Web, etc.
Possui características de alto e de baixo nível;
Excelente performance;
Muito popular;
Sintaxe de C serve de base para muitas
outras linguagens.
24
25. Características
Deu origem a outras linguagens de
programação, entre elas C++, Java, C#, PHP,
Ruby, Python, etc.
Muito usada no desenvolvimento de:
Compiladores, interpretadores, editores de texto,
banco de dados, computação gráfica,
manipulação e processamento de imagens,
controle de processos, …
25
26. Características
Portabilidade
Geração de códigos executáveis
compactos e rápidos
Interação com o sistema operacional
Facilidade de uso
Linguagem estruturada
Confiabilidade
Simplicidade
Case sensitive
Maiúsculas e minúsculas fazem diferença.
26
27. Estrutura básica de um
programa C
Um programa em C consiste de uma ou várias funções,
onde uma delas precisa ser denominada “main” e deve
existir em algum lugar de seu programa. Esta função
marca o início da execução do programa.
Outras funções podem ser definidas pelo programador ou
preencher a função main, porém em um programa
executável em C, a função main deve sempre existir.
27
28. Estrutura básica de um
programa
main(Argumentos)
{ /* início do corpo da função */
} /* término do corpo da função */
Uma função deve conter :
- Um header que consiste do nome da função
- Uma lista de argumentos entre parênteses.
- Um bloco de instruções delimitado por chaves.
28
29. Estrutura básica de um
programa
O nome da função, os parênteses e as chaves, são os
únicos elementos obrigatórios de uma função
Os comentários podem aparecer em qualquer lugar de
um programa, devendo ser colocados entre os
delimitadores /* e */
Letras minúsculas e maiúsculas não são equivalentes
em C.
Note que cada expressão dentro do bloco deve
terminar com um ponto-e-vírgula.
29
30. Geração de Executável
Editor (módulo fonte em C)
Pré‐processador (novo fonte expandido)
Compilador (arquivo objeto)
Lincador (executável)
30
31. Linguagem C
Dev C
Ambiente de
Desenvolvimento
Linguagem C
31
36. Painel Principal
• Clicando em Arquivo
- Salvar o conteúdo da aba
aberta.
- Salvar o conteúdo da aba
aberta em outro arquivo.
- Salvar o projeto em outro
arquivo.
- Salvar todos(as)
arquivos(abas) alterados.
36
37. Painel Principal
• Clicando em Arquivo
- Fechar o conteúdo da aba aberta.
- Fechar todas as abas abertas.
- Fechar o projeto.
37
39. Painel Principal
• Clicando em Arquivo
- Importa um projeto de outro
ambiente de programação.
- Exporta o projeto para HTML,
muito útil para documentação do
projeto.
39
45. Painel Principal
• Clicando em Editar
- Inserir cabeçalho e data e hora no
código fonte.
- Bookmarks é uma marca que você
faz no código fonte. Essa marca é
um atalho para um determinado
trecho do código.
45
60. Meu primeiro programa em C
- Inclui sa bibliotecas que contêm as funções de
entrada, saída e comando “System”. 60
61. Meu primeiro programa em C
-Toda função em C retorna algo e recebe algo
como parâmetro.
-Void significa vazio.
-Por padrão a função “main” é executada no 61
início do programa;
66. Regra de identificação
Todas as letras maiúsculas de A a Z e as minúsculas de a
a z , os dígitos de 0 a 9 e alguns caracteres especiais,
podem ser utilizados na criação de códigos em C.
Os nomes de variáveis, funções e matrizes em C,
obedecem a regra de que voce pode usar letras e
números, porem o primeiro digito deve ser apenas uma
LETRA ou o caracter especial undescore (_).
Um nome não pode ser uma das palavras reservadas da
66
linguagem C.
67. Regra de identificação
Exemplo de nomes válidos :
a y12 soma1 _estoque
Exemplos de nomes não válidos :
2th (o primeiro caracter deve ser letra ou _ )
“a” (inicia com um caracter ilegal (“) )
numero-ordem (caracter ilegal (-))
nome completo (espaço em branco)
67
68. Regra de identificação
Um identificador de nome pode ter mais de 32 caracteres,
porem somente os 32 primeiros serão reconhecidos.
Algumas implementações do C, reconhece apenas os 8
(oitos) primeiros, assim os nomes : taxa_dia e taxa_diaria,
nestes sistemas não tem diferenca, pois o compilador
reconhece apenas os oitos primeiros caracteres.
68
69. Palavras reservadas
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
São apenas 32 palavras reservadas que não podem ser
69
utilizadas para outro propósito
70. Tipos de Dados
Em C existem 5 tipos válidos:
tipo Palavra Quant. Bytes Faixa
Reservada Bit
Caracter Char 8 1 -128 a 127
Inteiro Int 16 2 -32768 a 32768
Ponto flutuante Float 32 4 3.4E-38 a
3.4E+38
Pont. Flutuante Double 64 8 1.7E-308 a
duplo 1.7E+308
Sem valor void 0 0 Sem valor
70
71. Tipos de Dados
Modificadores de Tipos
Com exceção do tipo void, os demais tipos podem ter
alguns modificadores. Um modificador é usado para alterar
o significado do tipo para adequá-los melhor às
necessidades do programador.
71
72. Tipos de Dados
Os modificadores são :
signed, unsigned, long e short
Exemplo de utilização:
Se uma variável é declarada como char ela ocupa 8 bit e
tem a faixa de valores de -128 a 127, mais se o
modificador unsigned é colocado antes da palavra char,
ela continua ocupando 8 bits, mais sua faixa de valores vai
de 0 a 255.
72
73. Tipo de Dados Inteiro
Os dados inteiros são caracterizados pelos números
positivos ou negativos que não seja fracionário. Em C
referenciamos este tipo de dados com os seguintes
identificadores :
Tipo do Inteiro Qt.Bit Faixa
int 16 -32768 a 32767
long int 32 -2.147.483.648 a 2.147.483.648
unsigned int 16 De 0 até 65535
signed long int 32 De 0 até 4.292.967.295
73
74. Tipo de Dados Reais
Os dados reais são caracterizados pelos números
positivos, negativos, inteiros e os fracionários. Em C
referenciamos este tipo de dados com os seguintes
identificadores :
Tipo do Inteiro Qt.Bit Faixa
float 32 de 3.4e-38 até 3.4e+38
double 64 de 1.7e-308 até 1.7e+308
Long double 128 de -3.4e-4932 até 1.1e+4932
74
75. Tipo de Dados Caracteres
Os dados caracteres são caracterizados pelas sequencias
de letras, números e simbolos especiais delimitados por
( “ ” ) . Em C referenciamos este tipo de dados pelo
identificadores : char podendo armazenar de 0 até 255
caracteres
75
76. Tipo de Dados Lógicos
Na linguagem C não existe o tipo de dados booleano , ou
seja, não existe o valor lógico “false” ou “true” de forma
predefinida.
Em C qualquer valor igual a 0 (zero), é considerado como
valor lógico falso e qualquer valor diferente de 0 (zero),
é considerado como valor lógico verdadeiro.
76
77. Constantes
Constantes são valores que permanecem fixos e na
linguagem C temos 4 tipos básicos de constantes:
- Inteiras
- ponto-flutuante
- caracteres
- string (cadeia de caracteres)
77
78. Constantes numéricas
As constantes do tipo Inteiras e de ponto-flutuante,
representam números.
As constantes do tipo Inteiras podem ser escritas em três
sistemas de numeração, sendo :
• decimal (base 10)
• octal (base 8)
• hexadecimal (base 16)
Uma constante inteira decimal pode ser formada por
qualquer combinação dos dígitos de 0 a 9. Se tem mais
de dois dígitos, o primeiro não pode ser zero. Ex.:
5 13 230 540
78
79. Constantes numéricas
Uma constante inteira octal pode ser formada por qualquer
combinação dos dígitos de 0 a 7 e o primeiro deve ser
zero. Ex.:
0 013 0656 0540
Uma constante inteira hexadecimal pode ser formada por
qualquer combinação dos dígitos de 0 a 9 e de A a F
(maiúsculas ou minúsculas). Deve sempre iniciar com
0x ou 0X. Ex.:
0x 0x1 0xABC 0xabc
Normalmente a magnitude de uma constante inteira é:
Decimal = 32767
Octal = 07777
Hexa = 0x7FFF 79
80. Constantes numéricas
As constantes do tipo ponto-flutuante é um número na base 10 que
contem casas decimais e/ou um expoente. Ex.:
0. 0.5 1.3 230.323 .540e2
Observe que o caracter que separa a casa decimal é um ponto e não
uma virgula
Para representar um número com expoente, trocamos a base 10 pela
letra ´e´. Assim para representar 2 x 10², teremos:
200. ou 2e2 ou 2e+2 ou 2E2 ou 2.0e+2
80
81. Constantes caracteres
As constantes do tipo caracter consiste em um simples caracter
colocado entre apóstrofos. Ex.:
´A´ ´x´ ´5´ ´$´
Uma constante de caracter tem valores inteiros correspondentes a um
conjunto de caracteres especificos.
Normalmente os computadores utilizam o conjunto de caracteres ASCII,
onde cada caracter é representado por uma combinação de 7 bits,
Representando assim 2e+7 = 128 diferentes caracteres.
Desta forma, cada constante de caracter, tem um valor inteiro
correspondente.
81
82. Constantes caracteres
Caracter Valor Caracter Valor Caracter Valor Caracter Valor
A 65 M 77 a 97 0 48
B 66 N 78 b 98 1 49
C 67 O 79 c 99 2 50
D 68 P 80 d 100 3 51
E 69 Q 81 e 101 4 52
F 70 R 82 f 102 5 53
G 71 S 83 g 103 6 54
H 72 T 84 h 104 7 55
I 73 U 85 i 105 8 56
J 74 V 86 j 106 9 57
K 75 W 87 k 107 DEL 127
L 76 X 88 l 108 ESC 27
82
83. Constantes string
As constantes do tipo string consiste em um conjunto de caracteres
colocado entre aspas. Ex.:
“hugo”
“vasco”
“São Luis”
“Boa Noite !!!”
“235-2234”
“2*(I+3)/J”
Algumas seqüências de caracteres podem ser incluídas dentro da
string para possibilitar a formatação. Ex.:
“Esta é a primeira linhan e esta a segunda linha” 83
84. Exemplos - Atribuições
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int numero;
unsigned int numero2;
signed long numero3;
numero = 10; // Não gera erro
numero = 10.555; // Gera Erro, número fracionário
numero2 = -10; //Gera erro, numero negativo
numero3 = -10; // Não gera erro
numero = 999999999999; // Gera erro, inteiro muito grande
numero = 'A'; // Retorna o Valor ASCII de A = 65
printf("A = %in",numero);
numero = "A"; // Gera erro, atribuição de string para inteiro
system("PAUSE");
return 0;
}
84
86. Exemplos - Atribuições
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char letra;
char texto[11] = “TESTE”; // 10 Caracteres + 0
letra='A‘;
letra="A"; // Gera erro, string
letra="ALO MUNDO!";// Gera erro, string
texto='ALO';// Gera erro, caracter
texto="A";// Gera erro, string menor de 10 caracteres
texto="ALO MUNDO!"; // Não se pode atribuir string diretamente
printf("%sn",texto); // Mostra o valor de texto
strcpy(texto,"ALO MUNDO!"); deve-se usar strcpy da biblioteca string.h
printf("%sn",texto);
system("PAUSE");
return 0;
}
86
87. Seqüência de escape
Algums caracteres especiais e os não-
imprimíveis, são expressos como uma
seqüência de escape.
Uma sequencia de escape sempres
começa co uma barra invertida (“”)
seguida por um caracter. Alguns
comandos em C, são representados
desta forma. Ex.:
87
88. Seqüência de escape
Caracter Seqüência de escape Valor ASCII
Nova linha (line feed) FD n 10
Campainha (bell) a 07
Tabulação horizontal t 09
Aspas (“) ” 34
Apóstrofo (´) ´ 39
Interrogação (?) ? 63
Barra invertida () 92
88
90. Variáveis
As variáveis são o aspecto fundamental em qualquer
linguagem de computador.
Uma variável nada mais é que um espaço de memória
reservado para armazenar um certo tipo de dado. Uma
variável deve receber um nome para servir de referência e a
cada instante ela pode conter valores diferente.
90
91. Declaração de Variáveis
Declarar uma variável significa reservar um espaço em
memória para um determinado tipo de dados e indicar que
o conteúdo daquele espaço, será referenciado pelo o nome
da variável.
Uma declaração de variável consiste em um tipo seguido
do nome da variável. Exemplo:
int num; // uma variável do tipo int
char a; // uma variável do tipo char
91
92. Declaração de variáveis:
Para serem usadas, as variáveis precisam ser declaradas
de modo que o compilador possa reservar espaço na
memória para o valor a ser armazenado.
A forma geral de uma declaração é:
tipo lista_de_variaveis;
Exemplos:
int i;
unsigned int a, b, c;
double salario;
92
93. Atribuição de valores às
variáveis
Após ser declarada, a variável pode receber valores.
O operador de atribuição "=" indica que o valor à direita será
atribuído à variável.
O valor inicial pode ser atribuído de duas formas:
- Durante a declaração da variável
Ex.: int i=0, j=10;
- Durante execução de uma a função
93
94. Tipos de Variáveis
O tipo de uma variável informa a quantidade de memória,
em bytes, que ela irá ocupar e a forma como o seu
conteúdo será armazenado.
Os tipos de dados básicos do C visto anteriormente
devem ser utilizados para prototipar uma variável
conforme a necessidade do programa.
94
95. Atribuição de valores às
variáveis
… possível atribuir a uma variável o valor resultante de uma
expressão. Ex.:
int a;
a = (8+2)/2;
A atribuição de uma variável do tipo char, pode ser feita de
duas formas:
- Atribuindo uma constante de caracter:
char b = ‘A’;
- Atribuindo o código ASCII correspondente antecedido pela
barra invertida:
95
char b = ‘65’
96. Analisando um Programa
Exemplo
01 #include <stdio.h>
02 #include <stdlib.h>
03 int a=5; // declaração de um inteiro
04 int b=5; // declaração de um inteiro
05 int soma; // declaração de um inteiro
06 int main(void)
07 {
08 soma=a+b;
09 printf("%d",soma);
10 system(“pause”);
11 }
96
97. Analisando um Programa
Exemplo
01 #include <stdio.h>
02 #include <stdlib.h>
03 int a=5, b=5, soma;
04 int main(void)
05 {
06 soma=a+b;
07 printf("%d",soma);
08 system(“pause”);
09 }
97
98. Atribuição de valores às
variáveis
Na linguagem C, não temos o tipo ´string´
pre-definido, o que nos leva a utilizar os
vetores de caracter. Desta forma um string
em C será atribuída a um vetor do tipo char
na sua inicialização.
char nome[20] = “Hugo Sampaio”; 98
99. Analisando um Programa
Exemplo
#include <stdio.h>
#include <conio.h>
char nome[20];
int main()
{
printf("Digite o seu nome : ");
scanf("%s", nome);
printf("Ola! %s ",nome);
getch();
} 99
100. String
Uma string em C é um vetor de caracteres
terminado com um caractere nulo.
O caracter nulo é um caractere com valor inteiro
igual a zero
O terminador nulo também pode ser representato em
C por '0'.
O comprimento da string deve ser pelo menos 1
caractere maior que o que pretendemos armazenar,
pois um caractere é reservado ao terminador nulo.
A função gets() lê uma string e insere o terminador
nulo na string quando a tecla Enter for pressionada.
100
101. String
Usamos um índice para acessar o caractere
desejado dentro da string.
str[1] = 'a';
Em C, o índice inicia em zero.
char str[10] = "Joao";
A declaração acima inicializa a string str com os
caracteres 'J' 'o' 'a' 'o' e '0'.
O código de controle %s na função printf()
é usado para exibir uma string.
101
102. String
Podemos ler uma string usando scanf().
Não usamos o e comercial (&) para strings, pois o
nome de um vetor já é um endereço de memória
do começo do vetor.
scanf("%s", texto);
Infelizmente scanf() lê somente até o primeiro
espaço, ou seja, lê somente uma palavra.
Para contornar isso, usamos a função gets que lê
até encontrar o caracter de fim de linha (enter).
gets(texto);
102
104. String
O problema de gets é que ele pode
provocar sérios problemas de segurança,
pois permite o armazenamento de
caracteres além da capacidade da string.
Uma solução mais segura é usar a função
fgets que limita o tamanho máximo a ser
lido.
fgets(texto, 50, stdin);
104
108. String – funções
strlen(texto) — Retorna o tamanho da string
texto em número de caracteres.
strcpy(destino, fonte) — Copia a string fonte
para a string destino.
strcat(destino, fonte) — Concatena a string
fonte no fim da string destino.
strcmp(str1, str2) — Compara duas cadeias e
caracteres e retorna um valor
= 0 - se str1 e str2 forem iguais
< 0 - se str1 for menor que str2
> 0 - se str1 for maior que str2
108
110. Conversão de tipos
Algumas vezes o compilador faz uma conversão automática quando vai atribuir
um valor de uma expressão a uma variável. Ex.: sendo:
main()
{
float f1,f = 21.45;
char c1,c = 'A';
int i1,i = 10;
i1 = f; // i1 receberá o valor 21
printf("%dn",i1);
f1 = i; // f1 receberá o valor 10.00
printf("%fn",f1);
c1 = i; // c1 receberá o valor 10
printf("%dn",c1);
i1 = c; // i1 receberá o valor 65
printf("%dn",i1);
getch(); 110
}
111. Conversão de tipos
O Programador pode “forçar” a conversão. Ex.: sendo:
main()
{
int a = 65; float x = 2.1, y = 8.95, z; char c;
c = (char)a;
printf("Valor de c ( %c ) --> %dn", c,c);
c = (char)(a + (int)x);
printf("Valor de c ( %c ) --> %dn", c,c);
z = (float)((int)x * (int)y);
printf("Valor de z ( %f ) --> %dn", z,z);
z = (float)((x * y));
printf("Valor de z ( %f ) --> %dn", z,z);
getch();
111
}
112. Exemplo 2
#include <stdio.h>
main() {
int Dias;
/*
* Declaracao de
* Variaveis
*/
float Anos;
printf("Entre com o numero de dias: ");
/* Entrada de Dados */
scanf("%d", &Dias);
Anos=Dias/365.25; // Conversao Dias->Anos
printf("nn%d dias equivalem a %f anos.n", Dias, Anos);
system("pause");
}
112
114. Exemplo 4
#include <stdio.h>
main() {
int x;
printf("Digite um numero");
scanf("%d",&x);
printf("O dobro e %dn", 2 * x);
system("pause");
}
114
115. Entrada e Saída
Para que exemplos possam ser construídos, necessitamos
conhecer um pouco sobre entrada e saída de dados.
Um programa que não fornece resultados nem pede valores
para operar não deve ter grande utilidade.
A entrada de dados será feita pelo teclado e a saída poderá
ser vista na tela do computador.
Com isto, é possível resolver problemas bastante
interessantes.
115
117. Entradas e Saídas
Para obter o caractere pressionado:
getche()
Imprime o caractere na tela antes de retorná-lo.
getch()
Apenas retorna o caratere pressionado sem imprimi-lo
na tela.
Essas funçoes são encontradas no arquivo
conio.h que somente está disponível para
Windows. Não é padrão ANSI.
117
119. Equivalente ANSI
Diferenças:
Requer o pressionamento da tecla <ENTER>
após a entrada de teclado.
#include <stdio.h>
main() {
char ch;
printf("Tecle algo...");
scanf("%c", &ch);
printf("Voce pressionou a tecla %cn", ch);
system("pause");
}
119
120. p
printf() e scanf()
Forma geral da função printf():
printf (string_de_controle,lista_de_argumentos);
Forma geral da função scanf():
scanf (string_de_controle,lista-de-argumentos);
120
121. Biblioteca Padrão
Para termos acesso à biblioteca que contém as
funções, macros e variáveis que facilitam a entrada
e saída de dados, o programa deve conter a
declaração
#include <stdio.h>
no início do programa.
Normalmente os programadores usam os símbolos
menor (<) e maior (>), mas é possível a alternativa
#include "stdio.h" 121
122. Saída - A Função printf
A função printf permite que dados sejam escritos na tela do
computador.
O formato é de uso simples e bastante flexível, permitindo
que os dados possam ser apresentados de diversas
maneiras.
Syntax: printf(controle, arg1, arg2, ...);
Onde os argumentos são impressos de acordo com a
maneira indicada pelo controle. Um exemplo simples pode
tornar a explicação mais clara. 122
123. Saída - A Função printf
O programa abaixo imprime o valor da variável ano.
#include <stdio.h>
#include <conio.h>
// Biblioteca de entrada e saída
ARGUMENTO
main()
{
int ano = 2011; // Declarei ano como inteiro e ja defini
seu valor.
printf(“ Estamos no ano %d ", ano );
getch();
}
Na tela do computador será impresso: CONTROLE
123
Estamos no ano 2011;
124. Saída - A Função printf
O controle, que deve aparecer sempre entre " ", define como
serão impressos os argumentos.
Neste controle podem existir dois tipos de informações:
caracteres comuns e códigos de formatação.
Os caracteres comuns, como no exemplo (Estamos no
ano) são escritos na tela sem nenhuma modificação.
Os códigos de formatação, aparecem precedidos por um %
e são aplicados aos argumentos na ordem em que
aparecem. 124
125. Códigos de Formatação
Deve haver um código de formatação para cada argumento. O código
%d indica que o valor armazenado em ano deve ser impresso na
notação inteiro decimal.
Código Comentário
%c Caractere simples
%d Inteiro decimal com sinal
%i Inteiro decimal com sinal
%e Real em notação científica com e
%f Real em ponto flutuante
%o Inteiro em base octal
%s Cadeia Caracteres
%u Inteiro decimal sem sinal
%x Inteiro em base hexadecimal (letras minúsculas)
%% Imprime o caracter %
125
126. Formatação Numérica
%<numero>d
Escreve um inteiro na tela, preenchendo com espaços à
esquerda para que ele ocupe pelo menos <numero>
casas na tela.
printf("%4d", 10);
Exibe:
<espaco><espaco>10
126
127. Formatação Numérica
%0<numero>d
Escreve um inteiro na tela, preenchendo com zeros à
esquerda para que ele ocupe pelo menos <numero>
casas na tela.
printf("%04d", 10);
Exibe:
0010
127
128. Formatação Numérica
%<numero1>.0<numero2>d
Escreve um inteiro na tela, preenchendo com espaços à
esquerda para que ele ocupe pelo menos <numero1>
casas na tela e com zeros para que ele possua pelo
menos comprimento <numero2>.
printf("%6.04d", 10);
Exibe:
<espaço><espaço>0010
128
129. Formatação Numérica
%f
Escreve um ponto flutuante na tela, sem formatação.
printf("%f", 10.0);
Exibe:
10.000000
129
130. Formatação Numérica
%e
Escreve um ponto flutuante na tela em notação
científica.
printf("%e", 10.02545);
Exibe:
1.002545e+01
130
131. Formatação Numérica
%<tamanho>.<decimais>f
Escreve um ponto flutuante na tela, com tamanho
<tamanho> e <decimais> casas decimais.
O ponto também conta no tamanho.
printf("%6.2f", 10.0);
Exibe:
<espaço>10.00
131
132. Saída justificada
Um sinal de menos para especificar que o argumento deve ser
tabulado a esquerda no seu campo de impressão pode ser
acrescentado.
Exemplo a seguir ilustra os dois tipos de justificação.
Observe
main()
{
int ano = 2007;
printf("Justificado a esquerda Ano = %-8dn", ano);
printf("Justificado a direita Ano = %8dn", ano);
getch();
}
132
133. Especificador de Precisão
O especificador de precisão consiste de um ponto que separa o
número que define o tamanho do campo do número que especifica o
máximo número de dígitos a serem impressos a direita do ponto em um
número do tipo float ou double
#include <stdio.h>
#include <conio.h>
Observe
main()
{
float r = 1.0/3.0;
printf("O resultado e = %9.5fn", r);
getch();
133
}
134. Entrada - A Função scanf
A função scanf pode ser utilizada para entrada de
dados a partir do teclado. Esta função é
equivalente à função printf e seu formato é:
Syntax: scanf(controle, arg1,
arg2, ...);
Uma diferença fundamental existe entre as duas
funções é que os argumentos da função scanf são
os endereços das variáveis que irão receber os
valores lidos e não, como em printf, as próprias
variáveis.
134
135. Entrada - A Função scanf
A indicação que estamos referenciando um
endereço e não a variável se faz pelo
operador &. Por exemplo, o comando
scanf("%d %d", &a, &b)
espera que dois valores inteiros sejam
digitados no teclado. O primeiro é
armazenado na variável a e o segundo em
b.
135
136. Entrada - A Função scanf
Cada variável a ser lida, deverá ser precedida pelo
caracter &
Para seqüência de caracteres (%s), o caracter &
não deverá ser usado.
136
137. Entrada - A Função scanf
int main()
{
int numero;
char string[30];
printf("Digite uma string: ");
scanf("%s",string);
printf("Digite um numero: ");
scanf("%d",&numero);
printf("A string digitada foi: t%sn“,string);
printf("O numero digitado foi: t%dn“, numero);
system("system");
}
137
138. Lendo e Imprimindo
Caracteres
Para ler e escrever caracteres do teclado as funções de entrada e saída mais simples
são getchar e putchar que estão na biblioteca stdio.h
#include <stdio.h>
#include <conio.h>
main()
{
char c;
int i;
printf("Entre com um caracter entre 0 e 9.n");
c = getchar();
printf("O caracter lido foi o ");
putchar(c);
getch();
138
}
139. Exercícios
Escreva um programa que declare variáveis
do tipo inteiro, char e float, inicializando-as,
e imprima os seus valores.
139
140. Solução
#include <stdio.h>
main() {
int i;
char c;
float f;
i = 10;
c = ‘A’;
f = 10.5589;
printf(“n Inteiro: %i“, i);
printf(“n Char: %c“, c);
printf(“n Real: %f“, f);
system("pause");
}
140
143. Lendo e Imprimindo
Caracteres
Na definição original da função getchar a entrada
é armazenada até que a tecla ENTER seja
apertada. Com isto caracteres ficam em um buffer
esperando para serem tratados.
Em ambientes onde é necessário tratar o caracter
imediatamente esta função pode não ser útil.
Muitos compiladores incluem funções para permitir
entrada interativa de dados. As duas funções mais
comuns são getch e getche e seus protótipos
podem ser encontrados na biblioteca <conio.h>.
143
147. Operador Ternário
Operador que usa três argumentos:
expr ? valor1 : valor2
Se expr avaliar for verdadeira, valor1 será o resultado
da expressão.
Se expr for falsa, valor2 será o resultado da expressão.
int x, y, maior;
...
maior = x > y ? x : y;
...
147
148. Operador Ternário
#include <stdio.h>
main() {
int n1, n2;
printf("Digite um numero: ");
scanf("%d", &n1);
printf("Digite outro numero: ");
scanf("%d", &n2);
printf("O maior e: %dn", n1 > n2 ? n1 : n2);
system("pause");
}
148
149. Expressões
O resultado de uma expressão lógica ou
relacional é:
0 (falso)
1 ou qualquer outro número diferente de zero
(verdadeiro)
Para facilitar:
NÃ0
S1M
149
150. Operadores de incremento e
decremento
Incremento (++)
Decremento (--)
a++;
Incrementa o valor da variável a em uma
unidade.
A posição do operador de incremento e
decremento determina a ordem de
execução do que está em seu derredor.
150
151. Operadores de incremento e
decremento
#include <stdio.h>
main() {
int a = 10;
printf("%d", ++a);
system("pause");
}
#include <stdio.h>
main() {
int a = 10;
printf("%d", a++);
system("pause");
}
151
152. Atribuições Simplificadas
Comando Exemplo Corresponde a:
+= a += 2 a = a + 2;
-= a -= 2 a = a - 2;
∗= a *= 2; a = a * 2;
/= a /= 2; a = a / 2;
%= a %= 2; a = a % 2;
152
154. if ... else ...
if (expressão) {
if (expressão) {
comandos;
comandos;
} else {
}
comandos;
}
#include <stdio.h>
#include <stdio.h>
main() {
main() {
int idade = 21;
int idade = 15;
if (idade < 18) {
if (idade < 18) {
printf("Invalidan");
printf("Invalidan");
} else {
}
printf("OKn");
system("pause");
}
}
system("pause");
} 154
155. Par ou ímpar
#include <stdio.h>
main() {
int a;
printf("Digite um numero inteiro: ");
scanf("%d", &a);
if (a % 2 == 0) {
printf("O valor eh par.n");
} else {
printf("O valor eh impar.n");
}
system("pause");
}
155
156. Exercício
Escreva um programa em linguagem C
para receber um número e dizer se ele é
positivo, negativo ou zero.
156
157. Positivo, Negativo ou Zero
#include <stdio.h>
main() {
int n;
printf("Digite um numero: ");
scanf("%d", &n);
if (n > 0) {
printf("positivo");
} else if (n < 0) {
printf("negativo");
} else {
printf("zero");
}
printf("n");
system("pause");
} 157
158. Decisão Múltipla
O comando switch simplifica uma expressão onde
uma variável inteira ou caracter deve fazer
diferentes operações, dependendo do seu valor.
switch (variavel) {
case valor:
comandos;
break;
case valor:
comandos;
break;
default:
comandos;
} 158
159. Decisão Múltipla
#include <stdio.h>
main() {
int num;
printf("Digite um numero inteiro: ");
scanf("%d", &num);
switch (num) {
case 1: printf("um"); break;
case 2: printf("dois"); break;
case 3: printf("tres"); break;
case 4: printf("quatro"); break;
case 5: printf("cinco"); break;
default: printf("nao conheco");
}
printf("n");
system("pause");
159
}
160. Exercício
Dada uma letra, escreva na tela se essa
letra é ou não é uma vogal.
Dica: a função toupper(c) converte um char
para caixa alta e a função tolower(c)
converte um char para caixa baixa.
160
161. Exercício
#include <stdio.h>
main() {
char letra;
printf("Digite uma letra: ");
scanf("%c", &letra);
switch (tolower(letra)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': printf("A letra %c e uma vogal", letra); break;
default: printf("A letra %c nao e uma vogal", letra);
}
printf("n");
system("pause");
}
161
163. Laços condicionais
Laço condicional com teste
while (expressão) { no início
comandos;
}
Laço condicional com teste
do { no final
comandos;
} while (expressão);
163
164. Laço condicional
...
int i = 0;
while (i < 10) {
printf("olá!");
i = i + 1;
}
...
164
165. Laços usando for
Em C, a declaração da variável deve ser
realizada antes do for.
for (inicializacao; condicao; incremento) {
codigo;
}
int i;
for (i = 0; i < 10; i++) {
printf("olá!");
}
165
167. I’ll not throw paper airplanes in class
#include <stdio.h>
int main(void) {
int count;
for(count=1;count<=500; count++)
printf("I’ll not throw paper
airplanes in class!");
system(”pause”);
return(0);
}
167
168. Exemplo – Linha de *
#include <stdio.h>
int main() {
int i, n;
printf("Digite um numero: ");
scanf("%d", &n);
for (i=0; i < n; i++) {
printf("*");
}
printf("n");
system(”pause”) ;
return(0);
} 168
169. Exemplo – Quadrado de *
#include <stdio.h>
int main() {
int coluna, linha, n;
printf("Digite um numero: ");
scanf("%d", &n);
for (linha=1; linha <= n; linha++) {
for (coluna=1; coluna <= n; coluna++) {
printf("* ");
}
printf("n");
}
system(”pause”) ;
return(0);
169
}
170. Controlando loops
break e continue
main()
{
int i;
for (i = 0; i < 100; i++) {
if(i > 50 && i < 60) {
continue;
}
printf("%dn", i);
}
system(”pause”)~;
}
170
172. Introdução às funções
Uma função é um bloco de código de
programa que pode ser usado diversas vezes
em sua execução.
O uso de funções permite que o programa
fique mais legível, mais bem estruturado.
Um programa em C consiste, no fundo, de
várias funções colocadas juntas.
172
173. Introdução às funções
Argumentos
Argumentos são as entradas que a função
recebe. … através dos argumentos que
passamos parâmetros para a função.
As funções printf() e scanf() são funções que
recebem argumentos.
173
175. Exemplo – media de 2
números
#include<stdio.h>
float media2(float a, float b) {
return ((a + b) / 2.0);
}
int main() {
float num_1, num_2, media;
puts("Digite dois numeros:");
scanf("%f %f", &num_1, &num_2);
media = media2(num_1, num_2);
printf("nA media destes numeros eh %f", media);
system(”pause”);
}
175
176. Exemplo - soma
#include <stdio.h>
float soma(float a, float b) {
return a + b;
}
int main() {
float n1, n2;
printf("Digite um numero: ");
scanf("%f", &n1);
printf("Digite outro numero: ");
scanf("%f", &n2);
printf("Soma: %fn", soma(n1, n2));
system(”pause”);
return 0; 176
}
177. Procedimentos
Em C não há procedimentos. O mais
próximo de procedimentos em C são as
funções que nada retornam, ou seja, cujo
retorno é void.
177
178. Exemplo - repeticao
#include <stdio.h>
void repete(char texto[], int n) {
int i;
for (i=0; i < n; i++) {
printf("%s", texto);
}
}
int main() {
char palavra[20];
printf("Digite uma palavra: ");
fgets(palavra, 20, stdin);
repete(palavra, 10);
system(”pause”);
return 0; 178
}
180. Exemplo de função
#include <stdio.h>
/* Calcula o quadrado de x */
int square(int x) {
return x * x;
}
main() {
int num;
printf("Entre com um numero: ");
scanf("%d", &num);
printf("nnO quadrado e %dn", square(num));
system("pause");
}
180
181. Exemplo de função
#include <stdio.h>
int prod(int x, int y) {
return (x*y);
}
main() {
int saida;
saida=prod(12, 7);
printf("A saida e: %dn", saida);
system("pause");
}
181
185. Exercícios
Sabendo que os argumentos da função
"printf" podem ser expressões (a+b, a/b,
a*b...), e não somente argumentos, faça um
programa capaz de ler um valor inteiro X e
imprimir na tela o cubo, o quadrado e a
metade de X.
Ex.: para X= 6, imprimir
Cubo = 18; Quadrado = 36; Metade = 3.
185