Beruflich Dokumente
Kultur Dokumente
Parte 1
Porque aprender C?
C rpido.
C a base de vrias outras linguagens
(Java, C++, awk, Perl).
Pode no parecer , mas C uma das
linguagens de mais fcil aprendizado.
Conceitos bsicos
Hello World
Espaos no C
#include <stdio.h>
/* My first
C program
which prints
Hello World */
int
main
(
)
{
printf
(
"Hello World!\n"
)
;
return
0
;
}
Exemplo de programa C
#include <stdio.h>
int main ()
{
long int i,j,k,lim=10000;
float x=0.0,y;
for (i=0; i<lim; i++)
for (j=0; j< lim; j++)
for (k=0; k< lim; k++)
y = x + 0.000001;
printf("ok\n");
}
Compilao de um programa em C
Palavras-chave de C
Controle de fluxo if, else, return,
switch, case, default
Laos for, do, while, break,
continue
Tipos comuns int, float, double,
char, void
estruturas struct, typedef, union
Palavras-chave de C
Contagem e tamanho enum, sizeof
Tipos menos comuns extern, signed,
unsigned, long, short, static, const
Palavra-chave a ser evitada goto
Outras palavras-chave auto,
register, volatile
Variveis em C
Uma varivel um nome que damos a
uma posio de memria que armazena
um valor de tipo determinado
Devemos declarar o tipo de todas as
variveis que usamos em C.
Todas as variveis tem um tipo (e.g. int)
e um nome.
Exemplos de tipos: int, double e
float.
Exemplo de programa C
#include <stdio.h>
int main ()
{
long int i,j,k,lim=10000;
float x=0.0,y;
for (i=0; i<lim; i++)
for (j=0; j< lim; j++)
for (k=0; k< lim; k++)
y = x + 0.000001;
printf("ok\n");
}
Nomes de Variveis
Variveis em C podem ter qualquer nome
composto por letras, nmeros e subscritos
(underlines) que no sejam uma palavra
reservada e que no comecem com nmeros.
Escolher bem os nomes importante
int a,b;
double d;
/* no claro o que
cada varivel
representa*/
int start_time;
int no_students;
double course_mark;
/* Assim melhor */
Tipo char
char armazena um caractere (normalmente 8 bits)
Podemos imprimir char com %c
Um char definido por aspas simples
Exemplo:
int main()
{
char a, b;
a= 'x'; /* associa a letra x */
printf ("a is %c\n",a);
b= '\n'; /* Isto apenas um caracter! */
printf ("b is %c\n",b);
return 0;
}
Funes em C
funo um conceito fundamental da
programao em C.
Uma funo uma sub-unidade de um
programa que executa uma tarefa especfica.
Exemplo de funo de biblioteca printf.
Funes recebem parmetros (variveis) e
podem retornar um parmetro
Exemplo
#include <stdio.h>
int maximum (int, int); /* Prototipo */
Prottipo de funo
int main(int argc, char*argv[])
{
int i= 4;
Prottipo de funo
int j= 5;
int k;
k= maximum (i,j); /* Chama funcao maximum */
printf ("%d is the largest from %d and %d\n",k,i,j);
printf ("%d is the largest from %d and %d\n",maximum(3,5), 3, 5);
return 0;
}
Cabealho da funo
int maximum (int a, int b)
/* Return the largest integer */
Cdigo da funo
{
if (a > b)
return a; /* Return significa "Eu sou o resultado da funcao"*/
return b; /* Retorna o valor de b */
}
funo printf
A funo printf apresenta na tela uma
sequncia de caracteres (string)
Pode-se imprimir variveis atravs de
formatao adequada
uma funo de biblioteca
Para se usar printf o programa deve conter (no
incio):
#include <stdio.h>
funo printf
O primeiro argumento de printf um string
de controle, uma seqncia de caracteres
entre aspas
Para exibir o valor da varivel inteira x
printf("Valor de x = %d", x);
Inteiro (int) x e caractere (char) y
printf("x = %d e y = %c\n", x, y);
Prottipo
Um prottipo informa ao seu programa C o
que esperar de uma funo quais
parmetros recebe e quais retorna
Prottipos devem vir antes de main()
#include define os prottipos de funes de
biblioteca (e.g. printf)
Uma funo DEVE retornar o tipo de varivel
definido no prottipo.
void
Uma funo no tem obrigatoriamente que
receber ou retornar parmetros. Uma funo
que no devolve parmetros prototipada
usando void.
void
void print_hello (void); /* prototipo */
void print_hello (void)
/* esta funcao imprime hello */
{
printf ("Hello\n");
}
Exerccio
Escreva um programa em C que imprime o
fatorial de um nmero maior do que zero
Este programa deve conter pelo menos duas
funes: main() e a funo do clculo fatorial
Compile o programa usando gcc e execute o
programa
Introduo ao C
Parte 2
Testes e Condies
Operadores relacionais
Igualdade: ==
Exemplo: (2==3) (V ou F?)
No confunda = com ==
Maior: >
Exemplo: (2>3) (V ou F?)
Maior ou igual: >=
Exemplo: (2>=3) (V ou F?)
Menor: <
Exemplo: (2<3) (V ou F?)
Menor ou igual: <=
Exemplo: (2<=3) (V ou F?)
Diferente: !=
Exemplo: (2!=3) (V ou F?)
Operadores lgicos
&& - operao AND
(a == b) && (b == c) /* Se a != b no
avalia o resto da expresso */
|| - Operao OR
(a == b) || (b == c) /* Se a == b no
avalia o resto da expresso */
! - Operao NOT
if-else
void main()
{
int i;
printf (Informe um nmero: );
scanf (%d, &i);
if (i < 0) printf (O nmero negativo);
else printf (O nmero positivo ou nulo);
If-else encadeado
#include <stdio.h>
void main()
{
int opcao;
int valor;
printf (Converter: \n);
printf (1: decimal para hexadecimal\n);
printf (2: hexadecimal para decimal\n);
printf (\nInforme sua opo: );
scanf (%d, &opcao);
if (opcao == 1)
{
printf (\nInforme o valor em decimal: );
scanf (%d, &valor);
printf (%d em hexadecimal e: %x, valor, valor);
}
else if (opcao == 2)
{
printf (\nInforme o valor em hexadecimal: );
scanf (%x, &valor);
printf (%x em decimal e: %d, valor, valor);
}
else
{
printf (\nA opo escolhida invlida.)
Operador Condicional - ?
condio ? expresso1 : expresso2;
Equivalente a:
if (condio) { expresso1 } else { expresso2 }
O operador ? restrito, mas pode simplificar
expresses grandes
Exemplos Operador ?
/*Qual e o valor de b,c? */
int a = 9, b = -4, c;
b = (a > b) ? a : b;
c = (a > b) ? b : a;
Switch - exemplo
/* Programa de converso de base numrica switch
decimal ---> hexadecimal
hexadecimal ---> decimal*/
#include <stdio.h>
void main()
{
int opcao;
int valor;
printf (Converter: \n);
printf (1: decimal para hexadecimal\n);
printf (2: hexadecimal para decimal\n);
printf (\nInforme sua opo: );
scanf (%d, &opcao);
switch(opcao)
{
case 1:
printf (\nInforme o valor em decimal: );
scanf (%d, &valor);
printf (%d em hexadecimal e: %x, valor, valor);
break;
case 2:
printf (\nInforme o valor em hexadecimal: );
scanf (%x, &valor);
printf (%x em decimal e: %d, valor, valor);
break;
default:
printf (\nOpo invlida. Tente outra vez.)
}
}
Laos - for
for(valor_inicial; condio_final; valor_incremento)
Comando;
#include <stdio.h>
void main(void)
{
int contador;
for (contador = 1; contador <= 5; contador++)
printf("%d ", contador);
while
while (condio)
{
/*comandos*/
}
#include <stdio.h>
void main(void)
{
int contador = 1; /* Inicializa a varivel de controle */
while (contador <= 100) /* Testa a varivel de controle
*/
{
printf("%d ", contador); /* Executa os comandos */
contador++; /* Modifica a varivel de controle */
}
Break
#include <stdio.h>
void main(void)
{
int contador;
for (contador = 1; contador <= 100; contador++)
{
if (contador == 50)
break;
printf("%d ", contador);
}
printf("\nPrximo lao\n");
for (contador = 100; contador >= 1; contador--)
{
if (contador == 50)
break;
printf("%d ", contador);
Continue
#include <stdio.h>
void main(void)
{
int contador;
printf("\nValores pares\n");
for (contador = 1; contador <= 100; contador++)
{
if (contador % 2) /* mpar */
continue;
printf("%d ", contador);
}
printf("\nValores mpares\n");
contador = 0;
while (contador <= 100)
{
contador++;
if (! (contador % 2)) /* Par */
continue;
printf("%d ", contador);
goto
#include <stdio.h>
void main(void)
{
int conta = 1;
rotulo:
printf("%d ", conta++);
if (conta <= 100)
goto rotulo;
Laos encadeados
/* Exibe uma tabela das 4 primeiras potencias de 1 a 9 */
#include <stdio.h>
void main()
{
int i, j, k, temp;
printf( i i^2 i^3 i^4\n);
for (i = 1; i < 10; i++)
{ /* lao externo */
for (j = 1; j < 5; j++)
{ /* primeiro aninhamento */
temp = 1;
for (k = 0; k < j; k++) /* segundo aninhamento */
temp = temp * i;
printf (%9d, temp);
}
printf (\n);
Exerccio
Escreva um programa em C que exiba na tela
os 20 primeiros nmeros da sequncia de
fibonacci
Vetores - definio
Um vetor em C um agrupamento de
variveis do mesmo tipo
Vetores usam colchetes
Temos sempre que declarar o tamanho dos
vetores
Apesar de C no verificar limites em tempo de
execuo
Exemplo
#include <stdio.h>
int main()
{
int some_nums[200];
char bunch_o_chars[45];
char titulo[] = "IME - PGED";
some_nums[3]= 5;
printf ("Elemento 3 %d\n",some_nums[3]);
bunch_o_chars[0]= 'a';
}
void main(void)
{
int notas[5] = {70, 80, 90, 100, 90};
exibe_matriz(notas, 5);
#define
Este comando do preprocessador substitui uma coisa por
outra antes da compilao
#define PI 3.14
Sem ponto e
#define GRAV_CONST 9.807
vrgula!!!
#define HELLO_WORLD "Hello World!\n
Em qualquer lugar do programa onde PI ou GRAV_CONST
aparecem, sero substitudos pela cadeia de caracteres
antes da compilao real (pr-processamento)
c= 2.0 * PI * r;
a= GRAV_CONST * (m1*m2)/ (r * r);
printf (HELLO_WORLD);
}
void process_array (int array[3][6])
{
/* processamento do vetor */
}
}
void main(void)
{
int b[2][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19,20}};
exibe_2d_matriz(b, 2);
}
void main(void)
{
int b[2][10]={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19,20}};
printf("Soma dos elementos da matriz %d\n",
soma_matriz(b, 20));
Exerccio
Escreva um programa em C calcule a soma de
duas matrizes quadradas de tamanho varivel