Professional Documents
Culture Documents
Aula 1
Luiz Rafael de Souza / Michel Fornaciali
Avaliao
N = (T + PF + P) / 3
A nota final (N) ser composta pela mdia simples dos
trabalhos prticos executados em classe (T), nota de um
projeto final extraclasse (PF), e uma nota de participao
nas aulas (P).
Aula 1
Introduo
Criao e execuo de cdigos
Sintaxe
Funo main()
Tipos de dados e variveis
Operadores Aritmticos, Lgicos e Relacionais
Tipos de dados criados pelo usurio
Entrada de dados
Geral
String
Sada de dados
Geral
String
Compilador:
gcc
Uso do gcc:
>> gcc c nomePrograma.c
>> gcc o nomeExecutvel nomePrograma.o
>> ./nomeExecutvel
Execute o programa:
>>./exemplo
Introduo
Dennis Ritchie criou a linguagem C em 1972 para que o
sistema Unix fosse reescrito.
1970 Unix saiu do AT&T Bell Laboratorie para outras
universidades.
1980 j existiam vrios compiladores
A linguagem C de propsito geral, mas aplicada
principalmente no desenvolvimento de compiladores,
analisadores lxicos, bancos de dados e editores de textos.
Dennis Ritchie
http://www.corbisimages.com/stock-photo/royalty-free/42-17734059/gardening-tools
Sintaxe
Regras que devem ser seguidas para o
desenvolvimento de um cdigo valido.
Estas regras relacionam-se com os tipos,
declaraes, funes e expresses.
Case sensitive (diferencia maiscula de
minscula)
Funo main()
Esta a nica funo obrigatria em C.
Parmetros argc e argv referem-se aos valores
da linha de execuo do programa
Retorno de valor
Funo main()
void main()
void main(){
int main()
int main(){
/*Cdigo fonte*/
return (0);
}
/*Cdigo fonte*/
Tipos de dados
float
int
Imagem cedida em http://www.corbisimages.com/stock-photo/royalty-free/CRB002418/box-of-matches e
http://www.sxc.hu/browse.phtml?f=download&id=758517. Em 24/05/2012.
Tipos de dados
signed
unsigned
long
short
Variveis
Funo main()
#include <stdio.h>
void main(){
int i = 0;
float f = 1.0;
char c = a;
Operadores
Operaes aritmticas
Expresses
Comparaes
Operadores
Precedncia
(Significado de Precedncia:
Antecedncia no tempo, na ordem
ou no lugar.
Direito de preceder; preferncia.)
Operadores
Precedncia
2+5*7; /* Resultado, tipo inteiro, da expresso 37*/
(2+5)*7; /* Resultado, tipo inteiro, da expresso 49*/
2+2+2+2/4; /* Resultado, tipo inteiro, da expresso 6,5, se o tipo for
float, e 6 se o tipo for int*/
(2+2+2+2)/4; /* Resultado, tipo inteiro, da expresso 2*/
Operadores Aritmticos
+ ADIO
(inteiro e ponto flutuante)
- SUBTRAO
(inteiro e ponto flutuante)
* MULTIPLICAO (inteiro e ponto flutuante)
/ DIVISO
(inteiro e ponto flutuante)
% RESTO DA DIVISO (inteiros)
++ INCREMENTO
(inteiro e ponto flutuante)
-- DECREMETNO
(inteiro e ponto flutuante)
Operadores Aritmticos
#include <stdio.h>
void main(){
int i = 10;
float f = 1.0;
float result ;
result = i+f;
/*Resultado ser 11.0*/
printf(i + f = %f, result);
result = i-f;
/*Resultado ser 9.0*/
printf(i - f = %f, result);
}
Operadores Aritmticos
#include <stdio.h>
void main(){
int i;
float f = 1.0;
float result ;
Operadores Relacionais
idade_irmo_mais_velho > idade_irmo_mais_novo = Verdade
Valor_ferrari > valor_fusca = Verdade
idade_irmo_mais_velho < idade_irmo_mais_novo = Falso
Valor_ferrari < valor_fusca = Falso
idade_irmo_mais_velho == idade_irmo_mais_novo = Falso
Valor_ferrari == valor_fusca = falso
idade_irmo_mais_velho != idade_irmo_mais_novo = Verdade
Valor_ferrari != valor_fusca = Verdade
Operadores Relacionais
menor
maior
igual
diferente
menor igual
maior igual
Operadores Relacionais
#include <stdio.h>
void main(){
int idade_mais_velho = 15;
int idade_mais_novo = 7;
int comp = 0; /*Inicializa com 0 (falso)*/
comp = idade_mais_velho > idade_mais_novo;
printf(idade_mais_velho > idade_mais_novo : %d, comp);
comp = idade_mais_velho < idade_mais_novo;
printf(idade_mais_velho < idade_mais_novo : %d, comp);
comp = idade_mais_velho == idade_mais_novo;
printf(idade_mais_velho == idade_mais_novo : %d, comp);
comp = idade_mais_velho != idade_mais_novo;
printf(idade_mais_velho != idade_mais_novo : %d, comp);
}
Operadores Lgicos
Office-boy
Administrador
Secretria
Operadores Lgicos
Administrador
Office-boy
Secretria
Benefcios:
Lgica:
Cdigo C:
Operadores Lgicos
Administrador
Office-boy
Secretria
Benefcios:
Lgica:
Cdigo C:
Operadores Lgicos
Administrador
Office-boy
Secretria
Benefcios:
Lgica:
Cdigo C:
&& and
|| or
Operadores Lgicos
#include<stdio.h>
void main(){
const int VR, VA, VT; /*variveis constantes no podem ser alterados*/
VR = VA = VT = 1;
float salario = 500,00;
int beneficio_vr = 1;
int beneficio_va = 0;
int beneficio_vt = 1;
if(salario >= 300.00 && salario <= 900.00) &&
((beneficio_vr == VR || beneficio_va == VA) && beneficio_vt == VT) {
printf(Funcionrio um office-boy!!!);
}
}
Pergunta
possvel agrupar vrios tipos de dados num
s elemento?
Sim!
Como?
Tipos de dados definidos pelo usurio!
Pergunta
possvel agrupar vrios tipos de dados num
s elemento?
Sim!
Como?
Tipos de dados definidos pelo usurio!
Enumeraes
typedef enum {
Dom, Seg, Ter,
Qua, Qui, Sex,
Sab
} DiaSemana;
Maneira de definir
constantes inteiras que
podem ser utilizadas ao
longo do cdigo.
Valores padres:
Dom
Seg
Ter
Qua
Qui
Sex
Sab
Podemos alterar os
valores padres?
Estruturas
typedef struct {
int cargo;
double salario;
char nome[100];
} Funcionario;
Ocupar o espao
interno referente a
soma de seus tipos.
Poder armazenar um
inteiro, um double e um
vetor de caracteres.
Unies
typedef union {
int ivalor;
double dvalor;
char cvalor;
} Valor;
Posio de memria
A memria trabalha com endereos (index).
Cada endereo usado para indexar uma posio
de memria.
Em cada posio de memria ser armazenado um
valor.
O endereo pode ser indicado usando o & .
Entrada de dados
scanf(formatao_do_tipo, &variavel)
%d: inteiro
%f: float ou double
%c: caractere
int inteiro;
float real;
char caractere;
scanf(%d %f %c, &inteiro, &real, &caractere);
scanf(formatao_do_tipo, &variavel)
#include <stdio.h>
void main(){
int y,z;
printf("Digite 2 valores inteiros:\n");
fflush(stdout);
scanf("%d %d", &y, &z);
printf("Os valores so %d e %d",y,z);
}
getchar()
#include <stdio.h>
void main(){
char ch;
printf(Digite um caractere:\n);
ch = getchar();
printf(Valor de ch %c, ch);
#include <stdio.h>
int main()
{
char c[11],c1;
int i;
printf("Digite 10 caracteres:");
fflush(stdout);
for(i=0; i<10 ; i++){
c[i] = getchar();
fflush(stdin);
}
c[i] = \0;
/*Comando de repetio*/
#include <stdio.h>
void main(){
char str[100];
printf(Digite uma string:\n);
gets(str);
printf(String: %s\n, str);
}
Sada de dados
printf(formatao_do_tipo, variavel)
%d: inteiro
%f: float ou double
%c: caractere
%s: string
int inteiro;
float real;
char caractere;
printf(%d %f %c, inteiro, real, caractere);
#include <stdio.h>
void main(){
char ch;
puts(Digite um caractere:\n);
ch = getchar();
printf(Valor de ch %c, ch);
}
string.h
Prottipos de funo para manipular strings.
Algumas funes: strcmp(), strlen(), strcpy(),
strrchr() e strcat().
Cuidado: Estes comandos no validam quantidade
de posies de memria.
Existem funes que validam o tamanho da string
antes da ao strnXX().
Capacidade: 20
palitos
Capacidade: 5
palitos
#include <stdio.h>
#include <string.h>
void main(){
char ch[5];
char ch_1[100];
puts("Digite uma string:");
fflush(stdout);
gets(ch_1);
/*Caso ch_1 copie uma quantidade de caracteres maior que o
tamanho de ch ocorrer um BufferOverFlow*/
strcpy(ch,ch_1);
}
Capacidade: 20
palitos
Pode parar!!!!
J foram 5 palitos.
Capacidade: 5
palitos
#include <stdio.h>
#include <string.h>
#define TAM_MAX 5
void main(){
char ch[5];
char ch_1[100];
puts("Digite uma string:");
fflush(stdout);
gets(ch_1);
/*Sero copiados apenas 5 caracteres*/
strncpy(ch, ch_1, TAM_MAX);
printf("%s",ch);