Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Ambiente de desenvolvimento
Aqui darei uma breve explicao de como criar um ambiente de desenvolvimento de
programas em C tanto para usurio do Linux como Windows.
Como primeiro passo crie um diretrio (pasta), como por exemplo TutoriaC, para salvar os
exemplos aqui mostrados uma vez que iremos reusar muitos deles conforme formos
evoluindo.
C uma linguagem compilada, isto quer dizer que aps voc escrever seu programa em
C voc necessita de um programa denominado compilador que ir transformar seu
programa escrito em uma linguagem de alto nvel para uma linguagem de maquina que
a linguagem que o computador entende.
Existem diversos compiladores para C, nesse tutorial iremos usar o GCC que faz parte do
GNU Compiler Collection uma coleo de compiladores criados pelo projeto GNU
(General Public License).
Alm de um compilador voc precisar de um editor de textos para escrever seus
programas e para isso iremos usar o Geany que mais do que um editor de textos sendo
considerada uma IDE (Integrated Development Environment ou Ambiente Integrado de
Desenvolvimento), no vou entrar no assunto sobre o que uma IDE basta voc saber
que o Geany permite alm da edio de seus programas compil-los e execut-los sem a
necessidade de sair da ferramenta o que facilita a criao e depurao dos programas.
2- A estrutura de um programa em C
2.1 O primeiro programa
Abaixo o cdigo do seu primeiro programa em C:
/*
Meu primeiro Programa em C
o famoso Ola Mundo
*/
#include <stdio.h>
// Inicio do programa
int main() {
printf("\n Ola Mundo \n\n");
return 0;
}
Quem j aprendeu outra linguagem de computador provavelmente j viu algo parecido,
esse o famoso programa Ola Mundo ou Hello World com o qual a maioria dos autores
comeam a ensinar uma linguagem de computador, ele simplesmente escreve no terminal
Ola Mundo.
Uma coisa importante em ressaltar e a identao do cdigo ou tabulao no cdigo acima
voc deve ter reparado, se no for cego, que o
Feitas as devidas apresentaes vamos dissecar a estrutura do programa linha por linha:
Linha 1 /*
Inicia um espao para comentrios de mltiplas linhas, lembrando que um bom
programador sempre comenta seus cdigos para que no futuro outros
programadores e mesmo voc possam entender o que foi feito.
Linha 2 e 3 Meu primeiro Programa em C
o famoso Ola Mundo
Este o nosso cometrio de duas linhas.
Linha 4 */
Fecha o espao de cometrios
Linha 5 #include <stdio.h>
A instruo include precedida de cerquilha (#) solicita ao compilador para incluir o
arquivo de cabealho stdio.h no programa. Os arquivos com extenso .h sendo o
h de header so conhecidos como arquivos de cabealho sua prerrogativa
Ao final da funo printf() temos um ponto e virgula, ele serve para encerrar
uma instruo, ele s no usado depois de instrues precedidas de cerquilha (#)
como include. Ento lembre-se Toda e qualquer instruo em C deve terminar
com um ponto e virgula.
Linha 12 return 0;
a ltima instruo da funo main() indicando que ela esta retornando um
valor zero ou seja que nossa funo main() terminou sem maiores problemas.
Linha 14 }
Indica o fim do nosso bloco de instrues.
Como exerccio voc pode:
Criar um programa que escreve na primeira linha Meu Primeiro e na segunda linha
Programa em C;
Figura 1
Figura 2
Clique em salvar (terceiro boto na barra de ferramentas, circulado com verde nas figuras
1, 2 e 3) e salve o programa com o nome de alomundo.c no diretrio (pasta) que voc
criou no inicio do tutorial, ateno no esquea de colocar o sufixo .c depois do nome do
arquivo se no o Geany no saber com que tipo de arquivo esta lidando.
Agora o texto do seu programa deve aparecer coloridinho e alguns cones que estavam
esmaecidos na barra de ferramenta tambm devem ter passado a coloridos, como na
figura 3 abaixo, esses cones servem para construir o seu programa execut-lo .
Figura 3
Na figura 3 acima o boto circulado por vermelho e o construtor de seu programa clique
nele e repare que a janela debaixo do Geany (figura 4) mostra uma mensagem indicando
o status da compilao se tudo correu bem voc vera uma mensagem similar com a
abaixo:
gcc -Wall -o "alomundo" "alomundo.c" (no diretrio: /home/francisco/TutorialC)
Compilao terminada com sucesso.
Figura 4
#include <locale.h>
// Inicio do programa
int main() {
setlocale(LC_ALL, Portuguese);
codigos aqui
}
Aqui eu inclui um novo arquivo de cabealho locale.h e depois dentro do bloco de
instruo de main() inclumos a seguinte linha:
setlocale(LC_ALL, Portuguese);
Agora quando for salvar seus programas certifique-se de estar usando a codificao de
caracteres ANSI ou ISO-8859-1 no Geany v em Documento Definir Codificao
Europeu Ocidental e selecione Ocidental (ISO-8859-1) pronto seu acentos iro aparecer
de forma correta.
De agora em diante deixarei nas suas mos corrigir o problema de caracteres no
Windows.
3 - Tipos de dados em C
A linguagem C apresenta cinco tipos de dados bsicos:
inteiro, caractere, ponto flutuante e ponto flutuante de dupla preciso
representados nos programas como:
int, char, float e double.
Alm dos tipos bsicos C possui os qualificadores:
signed, unsigned, short e long
Os qualificadores signed e unsigned, servem para definir se a faixa dos nmeros ira
incluir nmeros com sinal ou no. Eles s podem ser empregados com os tipos int e char
visto que o C trata os tipo caracteres como um nmero inteiro. Como signed define os
nmeros com sinal ele e redundante e seu uso e desaconselhado uma vez que a
declarao int por padro assume os nmeros com sinal. A grande diferena em usar
unsigned que como computadores usam o bit mais significativo (bit de valor mais alto)
como marcador de sinal os valores da faixa de unsigned podem atingir nmeros inteiros
sem sinal em uma faixa maior do que signed.
Os qualificadores short e long servem para prover tamanhos diferentes nos tipos bsicos
nas maquinas onde isso possvel.
Todos esses qualificadores podem ser usados com os tipos int e char, fora esses tipos o
qualificador long pode ser usado com o tipo double.
Como estes tipos esto intimamente ligados a maquina em que se est trabalhando aqui
irei mostrar uma tabela para estes valores em um PC 64/32 bits.
Tipo
Bytes
Faixa de Valores
char
-128 a 127
unsigned char
0 a 255
int
2.147.483.648 a 2.147.483.647
unsigned int
0 a 4294967295
short int
-32.768 a 32.767
0 a 65.535
long int
2.147.483.648 a 2.147.483.647
0 a 4.294.967.295
float
double
16 (64) ou 8 (32)
long double
Tabela 1
break
case
char
continue
do
double
define
else
enum
float
for
goto
if
int
long
return
short
sizeof
static
struct
union
unsigned
void
while
Tabela 2
Bytes
++
Incremento
--
Decremento
Tabela 3
Alm dos operadores acima temos o operador de atribuio (=) sua funo atribuir o
valor da expresso que se encontra do seu lado direito a uma varivel ou ponteiro (don't
worry be happy) que deve estar no seu lado esquerdo.
E de praxe em C escrever certas atribuies de maneira simplificada como nos exemplos
da tabela 4 abaixo:
Atribuio
Operao equivalente
x += y
x=x+y
x -= y
x= x - y
x *= y
x=x*y
x /= y
x=x/y
Tabela 4
imprimi-los no terminal.
Aps a execuo do programa a seguinte sada deve aparecer no terminal:
Figura 5
* /%
soma e subtrao
Atribuies (menor precedncia)
Tabela 5
x = 3 + (4 - 20) / 4 + 2 * 3;
printf("\nO valor de x : %d\n", x);
return 0;
}
converso
%c
caractere
%d
%i
%f
ponto flutuante
%lf
%s
%p
ponteiro
%e
%E
%o
octal
%x
%X
%g
%G
%%
Escreve o simbolo %
Tabela 6
Representao
Significado
\b
\f
\n
\r
\t
Aspa dupla
\'
Aspa simples
\0
\\
Barra invertida
\a
return 0;
}
Figura 6
converso
%nd
%0nd
%nf
%n.kf
%n.f
%.nf
ponto decimal
%.f
5 Estruturas de Controle
5.1 Operadores relacionais e lgicos
Como qualquer linguagem de programao C possui estruturas capazes de tomarem
decises durante a execuo do programa travs de expresses condicionais que
retornam verdadeiro ou falso com base nos operadores relacionais (tabela 8) e
operadores lgicos (tabela 9).
Operador relacional
Descrio
>
Maior que
>=
Maior ou igual
<
Menor que
<=
Menor ou igual
==
Igual
!=
Diferente
Tabela 8
Operador logico
Descrio
Ao
&&
AND (E)
||
OR (OU)
NOT (NO)
P && Q
P || Q
!P
Tabela 10
* /%
soma e subtrao
operadores relacionais
NOT (NO)
&&
AND (E)
||
OR (OU)
} else {
outros cdigos aqui
}
outros cdigos aqui
Nessa estrutura se a expresso condicional for verdadeira executado o cdigo dentro
bloco de instrues depois do if se no executado o cdigo que se encontra dentro do
bloco de instrues depois de else.
O uso de if-else permite uma melhoria significativa em muitos programas uma vez que
precisamos analisar uma nica expresso condicional para resolver um problema.
Com o uso do if-else vamos alterar nosso programa media.c para torn-lo mais eficaz e
simples:
/**
* Programa Media
*/
#include <stdio.h>
int main() {
float nota1, nota2, media;
printf("\nEntre com a primeira nota: ");
scanf("%f", ¬a1);
printf("\nEntre com a segunda nota: ");
scanf("%f", ¬a2);
media= (nota1 + nota2) / 2;
if (media >= 7)
printf("\nAluno aprovado\n");
else
printf("\nAluno em prova final");
return 0;
}
Em muitos programas teremos que avaliar mais de uma estrutura de deciso para
obtermos a resposta ao problema. Por exemplo no caso do programa media.c acima
poderamos ter uma outra condio a de que alunos com media menor 3 estariam
automaticamente reprovados, nesse caso a nossa estrutura de decises anterior usando
o else se tornaria ineficaz.
Uma das maneiras para solucionar o problema do nosso programa media.c para a nova
condio imposta ficaria da maneira abaixo:
/**
* Programa Media
*/
#include <stdio.h>
int main() {
float nota1, nota2, media;
scanf("%f", ¬a2);
media= (nota1 + nota2) / 2;
if (media >= 7)
printf("\nAluno aprovado\n");
else if (media < 3)
printf("\nAluno reprovado\n");
else
printf("\nAluno em prova final");
return 0;
}
Para encerrarmos o assunto sobre if-else vale dizer que muitas linguagens de
programao apresentam um tipo de dado especifico para os resultados das expresses
condicionais chamado de boolenao normalmente definidos como TRUE (true) e FALSE
(false), mas, como vimos C no possui esse tipo de dados, para C o resultado das
expresses condicionais so 0 (zero) para falso e 1 (um) para verdadeiro. Vamos mais
alm qualquer coisa que tenha um valor diferente de zero em C considerado verdadeiro
isso pode simplificar muitos testes condicionais
Note ento que podemos substituir nossa expresso condicional por qualquer expresso
em C ento por exemplo se x uma varivel com um valor definido ento o teste abaixo
perfeitamente valido:
if (x)
printf(x diferente de zero);
else
printf(x igual zero);
case 'a':
case 'A':
printf("\nO voc digitou a vogal A");
break;
case 'b':
case 'B':
printf("\nO voc digitou a vogal B\n");
break;
case 'e':
case 'E':
printf("\nO voc digitou a vogal E\n");
break;
case 'i':
case 'I':
printf("\nO voc digitou a vogal I\n");
break;
case 'o':
case 'O':
printf("\nO voc digitou a vogal O\n");
break;
case 'u':
case 'U':
printf("\nO voc digitou a vogal U\n");
break;
default:
printf("\n\nVoc digitou uma consoante\n");
}
return 0;
}
/**
* Programa Calculadora C
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
char c;
double x, y;
while (c != 's' && c != 'S') {
printf("\n\tCalculadora C\n");
printf("\n\tEscolha uma das operaes abaixo\n");
printf("\n\t(+) Soma");
printf("\n\t(-) Subtrao");
printf("\n\t(*) Multiplicao");
printf("\n\t(/) Diviso\n");
printf("\n\tEntre com a operao desejada: ");
//fflush(stdin);
__fpurge(stdin);
scanf("%c", &c);
if (c != 's' && c != 'S') {
printf("\tEntre com o primeiro nmero: ");
scanf("%lf", &x);
printf("\tEntre com o segundo nmero: ");
scanf("%lf",&y);
switch (c) {
case '+':
printf("\n\tO resultado : %.4lf\n", x + y);
break;
case '-':
printf("\n\tO resultado : %.4lf\n", x - y);
break;
case '*':
printf("\n\tO resultado : %.4lf\n", x * y);
break;
case '/':
if(y)
printf("\n\tO resultado : %.4lf\n", x / y);
else
printf("\n\terro diviso por zero\n");
break;
default:
printf("\n\nVoc no escolheu nenhuma operao
valida\n");
}
//fflush(stdin);
__fpurge(stdin);
getchar();
system("clear");
}
}
return 0;
}