Você está na página 1de 54

Introduo Linguagem C

Profa. Patrcia Augustin Jaques pjaques@inf.ufrgs.br

Aulas 5 a 8 - Linguagem C

Histrico da Linguagem C
Criada por Denis Ritchie, na dcada de 1970, para uso em um computador DEC PDP-11 em Unix BCPL B C C++ C++ uma extenso da linguagem C O sistema Unix escrito em C e C++

Estrutura bsica de um programa C


diretivas para o pr-processador declarao de variveis globais main () { declarao de variveis locais da funo main comandos da funo main }

Diretivas para o processador - Bibliotecas


Diretiva #include permite incluir uma biblioteca Bibliotecas contm funes pr-definidas, utilizadas nos programas Exemplos
#include <stdio.h> Funes de entrada e sada

#include <stdlib.h> Funes padro #include <math.h> Funes matemticas

#include <system.h> Funes do sistema #include <string.h> Funes de texto

O ambiente Dev-C++
O Dev-C++ um ambiente de desenvolvimento de programas em C e C++ com editor, compilador, bibliotecas e debugger Pode ser baixado de http://www.bloodshed.net/devcpp.html Vamos criar apenas programas para console, na linguagem C

Usando o Dev-C++
Inicie o Dev-C++ pelo cone ou pelo menu Crie um novo arquivo, com o comando File, New Source File Edite o programa da pgina seguinte

Usando o Dev-C++ (3)


#include <stdio.h> main() { printf ("Alo mundo!"); system("PAUSE"); }

Usando o Dev-C++ (4)


Salve o programa com o nome exemplo.c. Para tanto, selecione o menu File, Save unit as Compile o programa com o comando Executar, Compilar ou com a tecla Ctrl-F9 Se houver algum erro de sintaxe, aparece uma ou mais mensagens no rodap da janela. Neste caso, corrija o programa e repita. Se no houver erros, execute o programa com o comando Executar, Executar ou com a tecla Ctrl-F10
8

Dicas
Termine todas as linhas com ; Sempre salve o programa antes de compilar Sempre compile o programa antes de executar Quando ocorrer um erro de compilao, d um duplo clique sobre a mensagem de erro para destacar o comando errado no programa Verifique tambm a linha anterior, que pode ser a responsvel pelo erro, especialmente se faltar o ; Use comentrios, iniciados por //
9

Template

#include <stdio.h> main() { printf ("Alo mundo!"); system("PAUSE"); }

10

Declaraes
Declaram as variveis e seus tipos Os nomes das variveis devem conter apenas letras, dgitos e o smbolo _ At 32 caracteres Os principais tipos so: int, float, double e char Exemplos
int n; int quantidade_valores; float x, y, somaValores; char sexo; char nome[40];

Java diferencia letras maisculas de minsculas!


int n, N; n diferente de N!
11

Real: n1, n2, n3, media

#include <stdio.h> main() { double n1, n2, n3, media;

system("PAUSE"); }
12

Comando de atribuio
Atribui o valor da direita varivel da esquerda O valor pode ser uma constante, uma varivel ou uma expresso Exemplos
x = 4; --> lemos x recebe 4 y = x + 2; y = y + 4; valor = 2.5; sexo = 'F'

13

Entrada e Sada
Funo scanf
scanf ("formatos", &var1, &var2,...) Exemplos: int i, j; float x; char c; char* nome; scanf("%d", &i); scanf("%d %f", &j, &x); scanf("%c", &c); scanf("%s", nome);

%d %f %lf %c %s

inteiro float double char palavra

14

Real: n1, n2, n3, media

#include <stdio.h> main() { double n1, n2, n3, media; scanf scanf("%lf ("%lf",&n1); %lf %lf",&n1, &n2, &n3); scanf ("%lf",&n2); scanf ("%lf",&n3);

ler n1, n1 n2, n3 ler n2 ler n3

system("PAUSE"); }
15

Operadores Matemticos
Operador Exemplo Comentrio
+ * / % ++ -x + y x y x * y x / y x % y x++ x-Soma x e y Subtrai y de x Multiplica x e y Divide x por y Resto da diviso de x por y Incrementa em 1 o valor de x Decrementa em 1 o valor de x

16

Real: n1, n2, n3, media

#include <stdio.h> main() { double n1, n2, n3, media; scanf scanf("%lf ("%lf",&n1); %lf %lf",&n1, &n2, &n3); scanf ("%lf",&n2); media=(n1+n2+n3)/3; scanf ("%lf",&n3);

ler n1, n1 n2, n3 ler n2 media=(n1+n2+n3)/3 ler n3

system("PAUSE"); }
17

Entrada e Sada
Funo printf
printf ("formatos", var1, var2,...) Exemplos: int i, j; float x; char c; char* nome; printf("%d", i); printf("%d, %f", j, x); printf("%c", c); printf("%s", nome);

%d %f %lf %c %s

inteiro float double char palavra

18

Real: n1, n2, n3, media

#include <stdio.h> main() { double n1, n2, n3, media; scanf scanf("%lf ("%lf",&n1); %lf %lf",&n1, &n2, &n3); scanf ("%lf",&n2); media=(n1+n2+n3)/3; scanf ("%lf",&n3); printf (%lf,media); system("PAUSE"); }

ler n1, n1 n2, n3 ler n2 media=(n1+n2+n3)/3 ler n3 exibir media

Mos Obra!
19

#include <stdio.h> main() { double n1, n2, n3, scanf ("%lf %lf %lf", media; &n1, &n2, &n3);

#include <stdio.h> main() { double n1, n2, n3, media; printf(Digite 3 notas: ); scanf ("%lf %lf %lf",&n1, &n2, &n3); media=(n1+n2+n3)/3; printf (A mdia %0.2lf,media); system("PAUSE");

media=(n1+n2+n3)/3; printf (%lf,media);


system("PAUSE"); } }

20

Exercicio
1) Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um programa que calcule seu peso ideal, utilizando a seguinte frmula:
peso ideal = (72.7*h) - 58

21

Operadores de Atribuio
Operador Exemplo Comentrio
= += -= *= /= %= x = y x += y x -= y x *= y x /= y x %= y Atribui o valor de y a x Equivale a x = x + y Equivale a x = x y Equivale a x = x * y Equivale a x = x / y Equivale a x = x % y

22

Operadores Relacionais
Operador
== != <= >= < >

Exemplo
x == y x != y x <= y x >= y x < y x > y

Comentrio
O contedo de x igual ao de y O contedo de x diferente do de y
O contedo de x menor ou igual ao de y

O contedo de x maior ou igual ao de y O contedo de x menor que o de y O contedo de x maior que o de y

As expresses relacionais em C retornam um nmero negativo: 1 se verdadeiro e; 0 se falso.


23

Funes Matemticas
Funo ceil cos exp fabs floor log log10 pow sin Exemplo ceil(x) cos(x) exp(x) fabs(x) floor(x) log(x) log10(x) pow(x, y) sin(x) Comentrio Arredonda o nmero real para cima; ceil(3.2) 4 Cosseno de x (x em radianos) e elevado potencia x Valor absoluto de x Arredonda o nmero deal para baixo; floor(3.2) 3 Logaritmo natural de x Logaritmo decimal de x Calcula x elevado potncia y Seno de x

sqrt
tan

sqrt(x)
tan(x)

Raiz quadrada de x
Tangente de x

#include <math.h>
24

Exerccio
2) Construa um algoritmo que tendo como entrada dois pontos quaisquer do plano P(x1,y1) e Q(x2,y2), imprima a distncia entre eles. A frmula da distncia : 3) Construa um algoritmo que calcule a quantidade de latas de tinta necessrias e o custo para pintar tanques cilndricos de combustvel, onde so fornecidos a altura e o raio desse cilindro. Sabendo que: - a lata de tinta custa R$20,00 - cada lata contm 5 litros - cada litro de tinta pinta 3 metros quadrados. Sabendo que: rea do cilindro=3,14*raio2 + 2*3,14*raio*altura e que raio e altura so dados de entrada.
25

Operadores Lgicos
&& (E lgico): retorna verdadeiro se ambos os operandos so verdadeiros e falso nos demais casos. Exemplo: if( a>2 && b<3). || (OU lgico): retorna verdadeiro se um ou ambos os operandos so verdadeiros e falso se ambos so falsos. Exemplo: if( a>1 || b<2). ! (NO lgico): usada com apenas um operando. Retorna verdadeiro se o operando falso e vice-versa. Exemplo: if( !var ).

26

Operadores Lgicos
Tabela E VeVV VeFF FeVF FeFF Tabela OU V ou V V V ou F V F ou V V F ou F F
27

Tabela NO No V F No V F

Estrutura condicional simples Comando if


if (condio) comando; if (condio) { comando1; comando2; comando3; }

if (a<menor) menor=a;

if (a<menor) { menor=a; printf (menor); }

em pseudo-cdigo: se (a<menor) entao menor=a;


28

Estrutura condicional composta Comando if...else


if (condio) comando; else comando;
Executa o comando se a condio for qualquer coisa diferente de zero!

if (condio) { comando1; comando2; } else { comando3; em pseudo-cdigo: comando4; se (peso= =peso_ideal) }

if (peso= =peso_ideal) printf (Vc est em forma!); else printf (Necessrio fazer dieta!);

entao exibir Vc est em forma! senao exibir Necessrio fazer dieta!

29

Exerccio
4) Dados os 3 valores A, B, C, verificar se eles podem ser os comprimentos dos lados de um tringulo e, se forem, verificar se compem um tringulo equiltero, issceles ou escaleno. Informar se no compuseram nenhum tringulo. Tringulo: figura geomtrica de 3 lados, onde cada um menor do que a soma dos outros dois. Tringulo eqiltero: Tringulo com 3 lados iguais. Tringulo issceles: Tringulo com 2 lados iguais. Tringulo escaleno: Tringulo com todos os lados diferentes.

30

Exerccio
5) Faa um programa que leia um nmero inteiro e mostre uma mensagem indicando se este nmero par ou mpar, e se positivo ou negativo. 6) Explique porque est errado fazer if (num=10) ... O que ir acontecer?

31

Estrutura de repetio Comando for


for (var=valor inicial; condio; incremento) comando; for (var=valor inicial; condio; incremento) { comando1; Exemplo: comando2 for (cont=3; cont<=11; cont++) printf (%d;cont) comando3; }
Pseudo-cdigo: Para CONT = 3 at 11 repetir Mostrar (CONT)
32

Exerccios
7)Sendo h= 1 + + 1/3 + + ... + 1/N, prepare um algoritmo para calcular o nmero h, sendo o nmero N fornecido pelo usurio.
8) Elabore um algoritmo que calcule N! (fatorial de N), sendo que o valor inteiro de N fornecido pelo usurio. Sabendo que: N! = 1 x 2 x 3 x ... x (N-1) x N; 0! = 1, por definio. 9)Faca um programa que apresente na tela a tabela de converso de graus Celsius para Fahrenheit, de -100 C a 100 C. Use um incremento de 10 C. OBS: Farenheit = (9/5)*(Celsius) + 32
33

Exerccios 10)Escreva um programa que coloque os nmeros de 1 a 100 na tela na ordem inversa (comeando em 100 e terminando em 1). 11) Calcular e listar todos os mltiplos positivos do nmero 7 menores ou iguais a 100.

34

Estrutura de repetio Comando while


while (condio) comando; while (condio) { comando1; comando2 comando3; }
Exemplo:

while (N != 0) { scanf ("%d",&N); if (N > MAIOR) MAIOR = N; }


Pseudo-cdigo: MAIOR = 0 N=1 Enquanto (N <> 0) repetir Ler N Se (N > MAIOR) ento MAIOR = N Mostrar MAIOR

35

Exerccio
12 )Fulano tem 1,50 metro e cresce 2 centmetros por ano, enquanto Ciclano tem 1,10 e cresce tem 3 centmetros por ano. Construa um programa que calcule e imprima quantos anos sero necessrios para que Ciclano seja maior que Fulano.

36

Estrutura de repetio Comando do...while


do { comando } while (condio); do { comando1; comando2 comando3; } while (condio);
Exemplo:

cont=0; do { cont = cont + 1; printf("%d\n",cont); } while (cont < 10);

Em pseudo-cdigo: CONTADOR = 0 Repetir CONTADOR = CONTADOR + 1 exibir CONTADOR enquanto CONTADOR < 10

37

Exerccio
13) Escreva um programa que pea ao usurio que digite trs nmeros inteiros, correspondentes a dia , ms e ano. Teste os nmeros recebidos, e em caso de haver algum invlido, repita a leitura at conseguir valores que estejam na faixa correta (dias entre 1 e 31, ms entre 1 e 12 e ano entre 1900 e 2100). Verifique se o ms e o nmero de dias batem. Se estiver tudo certo imprima o nmero que aquele dia corresponde no ano. Comente seu programa.

38

Exerccio
14) Faa um programa que leia nmeros digitados pelo usurio at ele digitar -1 (utilizando um lao while). No final, calcule a mdia dos nmeros fornecidos. 15) Perguntar ao usurio quantos nmeros deseja somar. Em seguida, ler estes N nmeros e apresentar o valor da soma. (Fazer 3 verses deste programa: usando FOR, usando WHILE e usando DO...WHILE).

39

Vetores (array)
Trata-se de automatizar a declarao de um grande nmero de dados de um mesmo tipo simples. As variveis assim declaradas se acessam atravs de um ndice de tipo int.

Declarao:
int v[100]; primeira posio =0; ltima posio=99;

Atribuio:
v [9] = 87;

Acessar um valor:
a = v[9];

40

int v[10];

1 2 3 4 5 6 7 8 9 10

V[5]=10; printf (%d,V[5]);


10

41

Quando usar? Calcular a mdia da nota de 5 alunos e verificar quantos conseguiram nota acima #include <stdio.h> da mdia: main()
inteiro: cont, soma; real: media, num para cont=1 at 5 repetir receber num soma = soma + num media = soma/cont
Como verificar se a nota de cada aluno maior que a mdia??
{ int contA=0; double media, n1, n2, n3, n4, n5; scanf ("%lf %lf %lf %lf %lf", &n1, &n2, &n3, &n4, &n5); media = (n1+ n2 + n3 + n4 + n5)/5; if (n1>media) contA=contA+1; if (n2>media) contA=contA+1; if (n3>media) contA=contA+1; if (n4>media) contA=contA+1; if (n5>media) contA=contA+1; printf ("%lf %d", media, contA); system("pause"); }
42

#include <stdio.h> main() { int contA=0; double media, n1, n2, n3, n4, n5; scanf ("%lf %lf %lf %lf %lf", &n1, &n2, &n3, &n4, &n5); media = (n1+ n2 + n3 + n4 + n5)/5; if (n1>media) contA=contA+1; if (n2>media) contA=contA+1; if (n3>media) contA=contA+1; if (n4>media) contA=contA+1; if (n5>media) contA=contA+1; printf ("%lf %d", media, contA); system("pause"); }

#include <stdio.h> main() { int i, contA=0; double soma=0, media; double v[5]; for (i=0;i<5;i++) { scanf ("%lf", &v[i]); soma = soma + v[i]; } media = soma/i; for (i=0;i<5;i++) { if (v[i]>media) contA=contA+1; } printf ("%lf %d\n", media, contA); system("PAUSE"); }
43

Exerccios
16) Dada duas seqncias de 5 nmeros, calcule a soma de cada nmero com o seu correspondente. 17) Ler 5 nmeros, armazenando-os no vetor X[5]. Calcular a soma destes 5 nmeros e mostr-la na tela. 18) Ler 5 nmeros, armazenando-os no vetor X[5]. Copiar este vetor, de trs para frente (na ordem inversa de leitura), em um segundo vetor Y[5]. Mostrar o vetor Y. 19) Gerar um vetor com 10 nmeros da seguinte forma: cada nmero guardado no vetor ser o valor da sua prpria posio no vetor (seu ndice) menos 2 (ou seja, Xi = i-2). Mostrar na tela este vetor.
44

Strings
No existe um tipo String em C. Strings em C so uma array do tipo char que termina com \0.

Para literais String, o prprio compilador coloca \0.

#include <stdio.h> int main(){ char re[] = "lagarto"; printf ("%s", re); system("pause"); return (0); }
45

Para ler uma String Comando gets


#include <stdio.h> int main(){ char re [80]; printf ("Digite o seu nome: "); gets(re); printf ("Oi %s\n", re); system("pause"); return (0); }
46

Para comparar duas strings


strcmp (s1, s2); strcmp retorna 0 se as duas strings so iguais. Precisa do #include <string.h> #include <stdio.h> #include <string.h> int main( ){ char re[80]; printf ("Digite a senha: "); scanf ("%s", &re); if (strcmp(re,"laranja")==0) { printf ("Senha correta\n"); } else { printf ("Senha invalida\n"); } system("pause"); }
47

Para saber o tamanho de uma string


int size = strlen(str);
Retorna um valor inteiro com o nmero de caracteres da String.
Precisa do #include <string.h>

#include <stdio.h> int main(){ char re[80]; printf ("Digite a palavra: "); scanf ("%s", &re); int size=strlen(re); printf ("Esta palavra tem %d caracteres.\n", size); system("pause"); return (0); }
48

Exerccios
20) Escreva um programa que leia duas strings e as coloque na tela. Imprima tambm a segunda letra de cada string.

21) Escreva um programa que leia uma string, conte quantos caracteres desta string so iguais a 'a' e substitua os que forem iguais a 'a' por 'b'. O programa deve imprimir o nmero de caracteres modificados e a string modificada. 22) Faa um programa que verifique se uma palavra simtrica. Por exemplo: arara uma palavra simtrica. Podemos l-la normalmente ou de trs para a frente e sempre obteremos a mesma palavra.

49

Funes
So estruturas que permitem ao programador separar o cdigo do seu programa em blocos. Uma funo tem a seguinte forma :
tipo_de_retorno Nome_da_funcao (parmetros){ /*corpo da funo */ }

50

Funes que no retornam valor :


#include <stdio.h> void ehPar (int x){ if (x % 2) { printf ("O numero nao eh par!\n"); } else { printf ("O numero eh par!\n"); } } int main(){ char re[80]; ehPar (3); system("pause"); return (0); }
51

Funes que retornam valor


#include <stdio.h> int ehPar (int x){ int z = 0; /* o operador % retorna o resultado da diviso por 2 */ if (x % 2) return 1; } int main(){ char re[80]; int i = ehPar (3); if (i!=0){ printf ("O numero eh par!"); } system("pause"); return (0); }
52

Exerccios
23) Construa um programa que tenha uma funo que verifica se um nmero inteiro, passado como parmetro, e exiba na tela se o nmero negativo ou positivo. 24) Elabore um programa que tenha uma funo que retorne o reverso de um nmero inteiro. Por exemplo, 932-> 239.

53

Exerccio
25) Construa um programa que possua uma funo que dado um nmero de conta corrente com cinco dgitos, retorne o seu dgito verificador, o qual calculado da seguinte maneira: Exemplo: nmero da conta: 25678 a) somar nmero da conta com seu inverso: 25678+87652=113330 b) multiplicar cada dgito pela sua ordem posicional e somar este resultado: 1 1 3 3 3 0 1 1 3 3 3 0 0 1 2 3 4 5 1 1 6 9 12 0 = 29

54