introdução ao c (partes 1 e 2)
DESCRIPTION
PROGRAMAÇÃO EM CTRANSCRIPT
-
Introduo ao C
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
Cdigo-fonte: O programa que voc est
escrevendo.
Compilar: A partir o cdigo fonte, gerar
um programa que o computador possa
entender.
Executvel: O programa compilado, que
o computador pode executar.
-
Linguagem: (sentido especial) A parte
principal do C.
Biblioteca: Funes adicionais para
programao C, que so ligadas para
fazer determinadas tarefas.
Arquivo de cabealho: os arquivos que
terminam em h, que so includos no
incio do cdigo-fonte.
-
Hello World
-
Espaos no C #include /* My first C program which prints Hello World */ int main(){printf("Hello World!\n");return 0;}
#include /* My first C program which prints Hello World */ int main ( ) { printf ( "Hello World!\n" ) ; return 0 ; }
Todos estes programas so iguais,do ponto de vista do compilador.Palavras e sentenas entre aspasso mantidas juntas.Qual o mais fcil de ler?
-
Exemplo de programa C
#include int main (){
long int i,j,k,lim=10000;float x=0.0,y;
for (i=0; i
-
Compilao de um programa em C
-
Exerccio - Compilao do programa C
1. Para compilar, digite:
gcc loop.c o loop
2. Para executar o programa:
./loop
-
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 auma posio de memria que armazenaum valor de tipo determinado Devemos declarar o tipo de todas asvariveis que usamos em C. Todas as variveis tem um tipo (e.g. int)e um nome. Exemplos de tipos: int, double efloat.
-
Exemplo de programa C
#include int main (){
long int i,j,k,lim=10000;float x=0.0,y;for (i=0; i
-
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 quecada varivelrepresenta*/
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;
}
-
tipos: Signed/unsigned, long,short, const
unsigned significa que um valor int ou chardeve ser maior que zero. signed permite valores positivos e negativos.
const indica uma varivel que no varia til para constantes fsicas e matemticas, como ou e.
-
tipos: Signed/unsigned, long,short, const
long significa que int ou double tem um limite maior (e so mais precisos).
short significa menor faixa e preciso
short int small_no; /* 16 bits */
unsigned char uchar; /* 8 bits */
long double precise_number; /* 80 bits
*/
float not_so_precise; /* 32 bits */
const float pi= 3.14; /* 32 bits*/
const double e= 2.718281828; /* 64 bits
*/
-
Incrementadores ++ e --
++i significa incremente i e depois use
i++ significa use i e depois incremente
int i= 6;
printf ("%d\n",i++); /* Imprime 6 e faz i = 7 */ int i= 6;
printf ("%d\n",++i); /* imprime 7 e faz i = 7 */
O que foi definido acima tambm se aplica a --.
Note a diferena!
-
Operaes simples em variveis -- (subtrair um)
e.g. regressiva--;
+= (somar a uma varivel) e.g.a += 5;
-= (subtrair de uma varivel)e.g. num_vivos -= num_mortos;
*= (multiplicar uma varivel)e.g. n_b*=2 /* n_b = n_b*2 */;
/= (dividir uma varivel)fracao/=divisor /* fracao = fracao/divisor */;
(x % y) resto quando x dividido por yresto = x%y; (apenas inteiros)
-
Converso de tipos (cast)
Um cast (converso) uma maneira de converter uma varivel de um tipo em outro tipo
int a= 3;
int b= 4;
double c;
c= (double)a/(double)b;
Converte ints a e b em doubles
-
escopo de uma varivel
O escopo uma varivel onde ela pode ser
usada em um programa
Normalmente variveis tem escopo local
isto significa que elas podem apenas ser
usadas nas funes em que so declaradas
(lembre-se que main() uma funo)
-
escopo de uma varivel
Podemos tambm declarar variveis globais.
Se declaramos uma varivel fora de uma funo ela pode ser usada em qualquer funo abaixo de onde ela declarada
Variveis globais devem ser evitadas
-
Variveis locais - exemplo
#include void print_stars(int);
int main(){
int i;for (i= 0; i < 5; i++)
print_stars(5);return 0;
}
void print_stars (int n){
int i;for (i= 0; i < n; i++)
printf ("*");printf ("\n");
}
Este programa imprime 5 linhasDe 5 estrelas
Chama print_stars 5 vezes
Imprime 'n' estrelas eum caractere new line
*************************
Variveis LOCAIS
-
Varivel Global - exemplo
#include void print_stars(int);int i; /* Varivel global i */
int main(){for (i= 0; i < 5; i++)
print_stars(5);return 0;}
void print_stars (int n){for (i= 0; i < n; i++)
printf ("*");printf ("\n");}
Este programa imprimeapenas 1 linha de 5 estrelas
-
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 int maximum (int, int); /* Prototipo */int main(int argc, char*argv[]){
int i= 4;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;
}
int maximum (int a, int b)/* Return the largest integer */{
if (a > b)return a; /* Return significa "Eu sou o resultado da funcao"*/
return b; /* Retorna o valor de b */}
Prottipo de funo
Prottipo de funo
Cabealho da funo
Cdigo da funo
-
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
-
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.
-
Funo que chama outra funo Uma vez escrita, uma funo pode ser chamada por outras
funes. Isto permite a criao de funes complexas atravs da composio de funes simples.
int max_of_three (int, int, int); /* Prototipo*/.. /* Main e o resto do codigo vao aqui */.int max_of_three (int i1, int i2, int i3)/* retorna o maximo de tres inteiros */{
return (maximum (maximum(i1, i2), i3));}
-
void
Uma funo no tem obrigatoriamente que receber ou retornar parmetros. Uma funo que no devolve parmetros prototipadausando void.
-
voidvoid print_hello (void); /* prototipo */void print_hello (void)/* esta funcao imprime hello */{
printf ("Hello\n");}
void odd_or_even (int); /* prototipo */
void odd_or_even (int num)/* esta funcao verifica se um numero e par ou impar */{
if ((num % 2) == 0) {printf ("Par\n");return;
}printf ("Impar\n");
}
Funo recebe e retornavoid (sem argumentos)
Funo que recebeum parmetro inte retorna nenhum parmetro
-
Observaes sobre funes
Uma funo pode receber qualquer nmero de parmetros, declarados em qualquer ordem.
A funo pode retornar apenas um parmetro. Quando retornamos de uma funo, os valores
do parmetros de entrada no mudaram. Passagem de parmetros por valor
Podemos declarar variveis dentro de uma funo como podemos faz-lo dentro de main () -estas variveis sero apagadas quando retornar da funo
-
Posicionamento das funes no cdigo
Em termos gerais, o posicionamento relativo de funes no importa.
main() uma funo como qualquer outra (que pode inclusive ser chamada por outras funes).
Normalmente main() a primeira funo do cdigo.
-
Posicionamento das funes no cdigo
As funes devem estar inteiramente separadas uma das outras.
Os prottipos devem vir antes das respectivas funes.
A ordem mais comum : Prottipos => main=> outras funes.
-
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
-
Valores lgicos Verdadeiro e falso
C define verdadeiro e falso da seguinte forma:
Falso - 0 (zero)
Verdadeiro nmero diferente de zero
-
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
-
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 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 switchdecimal ---> hexadecimalhexadecimal ---> decimal*/#include 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
void main(void)
{int contador;
for (contador = 1; contador
-
whilewhile (condio){
/*comandos*/}#include void main(void)
{int contador = 1; /* Inicializa a varivel de controle */while (contador
-
Break#include void main(void){
int contador;for (contador = 1; contador = 1; contador--){
if (contador == 50)break;printf("%d ", contador);
}
}
-
Continue#include void main(void){
int contador;printf("\nValores pares\n");for (contador = 1; contador
-
goto
#include
void main(void)
{int conta = 1;
rotulo:
printf("%d ", conta++);
if (conta
-
Laos encadeados/* Exibe uma tabela das 4 primeiras potencias de 1 a 9 */#include 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
O primeiro ndice do vetor sempre zero
-
Exemplo
#include 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';
}
-
Passagem de vetores para funes
#include void exibe_matriz(int valores[], int num_de_elementos){
int i;for (i = 0; i < num_de_elementos; i++)
printf("%d\n", valores[i]);
}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#define GRAV_CONST 9.807#define HELLO_WORLD "Hello World!\n
Em qualquer lugar do programa onde PI ou GRAV_CONSTaparecem, sero substitudos pela cadeia de caracteresantes da compilao real (pr-processamento)
c= 2.0 * PI * r;a= GRAV_CONST * (m1*m2)/ (r * r);printf (HELLO_WORLD);
Sem ponto evrgula!!!
-
Matrizes e vetores multidimensionais
#include main(){
int array[3][6]; /* vetor de 2 dimenses */int i,j;array[0][0]= 7; /* definio de elemento */printf ("elemento 1,1 %d\n",array[1][1]);for (i= 0; i < 3; i++) {
for (j= 0; j < 6; j++) {array[i][j]= 0; /* zera o vetor*/}
}}
-
Passagem para funes
Na passagem, pelo menos o nmero de colunas tem ser definido:
void process_array (int [3][6]);main(){
int thearray[3][6];process_array(thearray);
}void process_array (int array[3][6]){/* processamento do vetor */}
-
Passagem para funes
#include void exibe_2d_matriz(int matriz[][10], int linhas){
int i, j;for (i = 0; i < linhas; i++)
for (j = 0; j < 10; j++)printf("matriz[%d][%d] = %d\n", i, j, matriz[i][j]);
}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);
}
-
Passagem para funes
#include long soma_matriz(int matriz[], int elementos){
long soma = 0;int i;for (i = 0; i < elementos; i++)
soma += matriz[i];return(soma);
}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