Professional Documents
Culture Documents
2017
-2-
INTRODUO
A linguagem C foi criada por Dennis Ritchie, em 1972, no centro de Pesquisas da Bell
Laboratories. Sua primeira utilizao importante foi a reescrita do Sistema Operacional UNIX,
que at ento era escrito em assembly.
Em meados de 1970 o UNIX saiu do laboratrio para ser liberado para as universidades.
Foi o suficiente para que o sucesso da linguagem atingisse propores tais que, por volta de 1980, j
existiam vrias verses de compiladores C oferecidas por vrias empresas, no sendo mais
restritas apenas ao ambiente UNIX, porm compatveis com vrios outros sistemas operacionais.
O C uma linguagem de propsito geral, sendo adequada programao estruturada. No
entanto mais utilizada para escrever compiladores, analisadores lxicos, bancos de dados, editores
de texto, etc.
A linguagem C pertence a uma famlia de linguagens cujas caractersticas so: portabilidade,
modularidade, compilao separada, recursos de baixo nvel, gerao de cdigo eficiente,
confiabilidade, regularidade, simplicidade e facilidade de uso.
Lincador (executvel )
SINTAXE
A sintaxe composta por regras detalhadas para cada construo vlida na linguagem C.
Estas regras esto relacionadas com os tipos, as declaraes, as funes e as expresses.
Os tipos definem as propriedades dos dados manipulados em um programa.
As declaraes expressam as partes do programa, podendo dar significado a um
identificador, alocar memria, definir contedo inicial, definir funes.
As funes especificam as aes que um programa executa quando roda. A determinao
e alterao de valores, e a chamada de funes de I/O so definidas nas expresses .
As funes so as entidades operacionais bsicas dos programas em C, que por sua vez so
a unio de uma ou mais funes executando cada qual o seu trabalho. H funes bsicas que esto
definidas na biblioteca C. As funes printf() e scanf() por exemplo, permitem respectivamente
escrever na tela e ler os dados a partir do teclado. O programador tambm pode definir novas
funes em seus programas, como rotinas para clculos, impresso, etc.
-3-
Todo programa C inicia sua execuo chamando a funo main(), sendo obrigatria a
sua declarao no programa principal.
Comentrios no programa so colocados entre /* e */ no sendo considerados na
compilao.
Cada instruo encerra com ; (ponto e vrgula) que faz parte do comando.
Ex:
int main() /* funo obrigatria */
{
printf("oi");
}
Sintaxe:
printf("expresso de controle",argumentos);
A expresso de controle pode conter caracteres que sero exibidos na tela e os cdigos de
formatao que indicam o formato em que os argumentos devem ser impressos. Cada
argumento deve ser separado por vrgula.
int main()
{
printf("Este o numero dois: %d",2);
printf("%s est a %d milhes de milhas\ndo
sol","Vnus",67);
}
Para alinhamento:
Ex:
int main()
{
printf("\n%10.2f %10.2f %10.2f",8.0,15.3,584.13);
printf("\n%10.2f %10.2f %10.2f",834.0,1500.55,4890.21);
}
Exerccio:
a. Faa um programa que escreva na tela seu nome e a data de hoje, uma informao em cada
linha.
VARIVEIS E CONSTANTES
So entidades que armazenam valores. A diferena entre variveis e constantes est na
possibilidade de alterao do valor armazenado, durante todo o tempo de durao do programa.
Constantes Variveis
Entendemos que uma informao Entendemos que uma informao varivel
constante quando no sofre nenhuma variao quando sofre variaes durante o decorrer do
no decorrer do tempo. tempo.
A declarao de constantes deve ser feita A declarao de variveis feita da seguinte
da seguinte maneira: maneira:
#define nome_const valor_const Tipo nome_var;
Ex: Ex:
#define UM_CM 1 float dolar;
#define NOME Joo char endereco;
#define PI 3.14159 int idade;
Identificadores
So nomes usados para se fazer referncia a variveis, funes, rtulos e vrios outros
objetos definidos pelo usurio. O primeiro caracter deve ser uma letra ou um sublinhado. Os 32
primeiros caracteres de um identificador so significativos. case sensitive, ou seja, as letras
maisculas diferem das minsculas.
TIPOS DE DADOS
Quando voc declara um identificador d a ele um tipo. Os tipos principais podem ser
colocados dentro da classe do tipo de objeto de dado. Um tipo de objeto de dados determina como
valores de dados so representados, que valores pode expressar, e que tipo de operaes
voc pode executar com estes valores.
Tipos Inteiros
char (0,128) igual a signed char ou unsigned char
signed char (-128,128) inteiro de pelo menos 8 bits
unsigned char (0,256) mesmo que signed char sem negativos
short (2-15,215) inteiro de pelo menos 16 bits tamanho pelo menos igual a char
16
unsigned sort (0,2 ) mesmo tamanho que sort sem negativos
-15 15
int (2 ,2 ) inteiro de pelo menos 16 bits; tamanho pelo menos igual a short
16
unsigned int (0,2 ) mesmo tamanho que int sem negativos
inteiro com sinal de pelo menos 32 bits; tamanho pelo menos
long (2-31,231)
igual a int
unsigned log (0,232) mesmo tamanho que long sem valores negativos
-6-
Tipos Flutuantes
float [3.438, 3.4+38] pelo menos 6 dgitos de preciso decimal
308 +308
double (1.7 ,1.7 ) pelo menos 10 dgitos decimais e preciso maior que do float
308 +308
long double (1.7 ,1.7 ) pelo menos 10 dgitos decimais e preciso maior que do double
Exerccio:
1. Identifique para cada dado abaixo se ele do tipo Inteiro (int), Real (float), Lgico (boolean),
Caracter (char) ou Cadeia de caracteres (string):
a. Salrio do funcionrio de uma empresa.
b. Quantidade de vendedores de uma loja.
c. Nmero de latas de refrigerante em uma prateleira.
d. Nome de um assinante de linha telefnica.
e. Preo de um litro de leite.
f. Estado de iluminao de uma lmpada em perfeitas condies.
g. Quantidade de sacos de arroz vendidos a um mercado.
h. Preenchimento do sexo de uma pessoa em um formulrio (assuma M ou F).
i. Luz de um sinal de trnsito (assuma Vermelho, Amarelo ou vErde).
j. Quantidade de litros de combustvel no abastecimento em um posto.
k. Nmero de alunos de uma turma.
l. Resposta de uma questo de mltipla escolha (opes A at D).
m. CEP de uma carta.
n. Valor a pagar pela refeio num restaurante a quilo.
o. Placa de um automvel.
Ex:
int main()
{
int num;
printf("Digite um nmero: ");
scanf("%d",&num);
printf("\no nmero %d",num);
printf("\no endereo e %u",&num);
}
Exerccio:
a. Faa um programa que leia o nome e a qualidade de uma pessoa, e exiba a seguinte mensagem
na tela:
Funo getchar()
Funo putchar()
OPERADORES
Operador de atribuio
Ex:
soma = 3 + 2; /* leia: soma recebe 3 + 2 */
ano = 2007; /* leia: ano recebe 2007 */
soma = numero1 + numero2; /* leia: soma recebe numero1 + numero2 */
Operadores Aritmticos
Operadores Relacionais
Utilizamos os operadores relacionais para realizar comparaes entre dois valores de mesmo
tipo primitivo. Tais valores so representados por constantes, variveis ou expresses aritmticas.
Os operadores so:
Exemplos:
== igual a
1) 5 = 5 (V)
> maior que
< menor que 3) a = A (F)
!= diferente de 2) V = F (F)
>= maior ou igual a
<= menor ou igual a 4) Considere:
real = 1 e dolar = 1,8
O resultado SEMPRE um valor lgico.
real = dolar (F)
Operadores Lgicos
Utilizaremos trs conectivos bsicos para a formao de novas proposies a partir de outras
j conhecidas. Os operadores lgicos so:
&& and conjuno As expresses que usam
|| or disjuno operadores de relao e
! not negao lgicos retornaro 0 para falso
e 1 para verdadeiro.
Tabela-Verdade: uma combinao de possibilidades a serem feitas pelo operador, indicando cada
tipo de resultado gerado. Se considerarmos X como o elemento esquerda do operador e Y o da
direita, as tabelas para cada operador ficam com a seguinte forma:
4. op. lgicos
Exemplos:
a. (5 > 2) && (10 >= 7) b. (5 > 3) && (10 <= 7)
V && V V && F
V F
Incremento e Decremento
Precedncia
+- mais baixa
Operador cast
Sintaxe:
(tipo)expresso
Podemos forar uma expresso a ser de um determinado tipo usando o operador cast.
Ex:
int main()
{
int i=1;
printf("%d/3 : %f",i,(float) i/3);
}
Operador sizeof
O operador sizeof retorna o tamanho em bytes da varivel, ou seja, do tipo que est em seu
operando. utilizado para assegurar a portabilidade do programa.
- 12 -
Atravs de uma determinada condio, retorna um valor possvel somente se essa condio
for verdadeira (devidamente atendida).
Ex:
int main()
{
int a,b;
printf("digite dois nmeros:");
scanf("%d%d",&a,&b);
if (b!=0)
printf("%d\n",a/b);
else
printf("diviso por zero\n");
}
Exerccios:
a. Faa um programa que leia a idade de uma pessoa e imprima a mensagem Voc maior de idade se ela
tiver 18 anos ou mais.
Ex:
#include <stdlib.h>
#include <time.h>
int main()
{
int num,segredo;
srand(time(NULL));
segredo=rand()/100;
printf("Qual e o numero: ");
scanf("%d",&num);
if (segredo==num)
{
printf("Acertou!");
printf("\nO numero e %d\n",segredo);
}
else
printf("Errado, tente novamente!\n");
}
Exerccios:
a. Faa um programa que leia uma distncia em Km e o tempo de viagem de um automvel, e informe se a
velocidade mdia foi superior ao limite (110 Km/h) ou no.
b. Ler a temperatura de uma pessoa e exibir a mensagem "Est com febre" ou "Sem Febre". Considere o valor
base como 36.5.
c. Ler um nmero inteiro e exibir a mensagem "O nmero mltiplo de 7" ou "O nmero no mltiplo de 7".
d. Ler o preo de duas blusas e imprimir qual o maior. Desconsidere empates.
e. Ler o ano de nascimento de uma pessoa e escrever uma mensagem que diga se ela poder ou no votar
em uma eleio para prefeito (no necessrio considerar o ms em que ela nasceu). Lembre-se de ler o
ano atual para efetuar o clculo.
Ex:
#include <stdlib.h>
#include <time.h>
int main()
{
int num,segredo;
srand(time(NULL));
segredo=rand()/100;
printf("Qual e o numero: ");
scanf("%d",&num);
if (segredo==num)
{
printf("Acertou!");
printf("\nO numero e %d\n",segredo);
}
else
- 14 -
if (segredo<num)
printf("Errado, muito alto!\n");
else
printf("Errado, muito baixo!\n");
}
Exerccios:
a. Um quiosque de sorvetes vende casquinhas somente nos sabores Chocolate (letra 'C') e Morango (letra
'M'). Faa um programa em C para imprimir uma mensagem nas seguintes situaes:
a. Sorvete de chocolate com mais de trs bolas: "desconto de 10%"
b. Sorvete de morango com qualquer quantidade de bolas: "desconto de 5%"
Considere que os dados de entrada so sempre vlidos.
b. Fazer um programa em C para ler as trs notas de um aluno em uma disciplina, e depois imprimir a mdia
aritmtica das notas e a situao do aluno, a partir da seguinte tabela:
a. Mdia maior ou igual a 7 : Aprovado
b. Mdia entre 4 e 7 : Exame
c. Mdia menor do que 4 : Reprovado
c. Um casal possui trs filhos: Marquinhos, Zezinho e Luluzinha. Faa um programa em C para ler as idades
dos filhos e exibir quem o caula da famlia; suponha que no haja empates.
d. A partir de dois nmeros fornecidos pelo usurio, escrever uma das seguintes mensagens:
a. Os dois so pares
b. Os dois so mpares
c. O primeiro par e o segundo mpar
d. O primeiro mpar e o segundo par
e. Ler trs valores reais e escrev-los em ordem ascendente; suponha no haver empates.
f. Faa um programa para ler a cor de um sinal de trnsito ('V' verde, 'A' amarelo, 'E' vermelho), e exibir
respectivamente as mensagens "Siga", "Ateno" ou "Pare". Assuma entradas vlidas.
OPERADOR TERNRIO
Sintaxe:
condio?expresso1:expresso2
Exerccios:
a. Fazer um programa para entrar com um valor e dizer qual ms do ano o mesmo corresponde. Se o valor for
maior que doze ou menor que um, diga que o valor no corresponde a nenhum ms. Ex. 3 = Maro.
b. Dado o nmero de matrcula de um scio do clube Boa Social, fornecido pelo usurio, faa um programa
que imprima o ms de pagamento da anuidade, de acordo com a tabela:
Final 0 Pagamento em janeiro
Final 1 Pagamento em fevereiro O nmero de matrcula
composto por:
Final 2 Pagamento em maro
nmero + dgito
Final 3 Pagamento em abril
Outro final Pagamento em maio
- 16 -
Sintaxe:
for(inicializao;condio;incremento)
comando;
Ex:
int main()
{
int x;
for(x=1;x<100;x++)
printf("%d\n",x);
}
Ex:
int main()
{
int x,y;
for (x=0,y=0;x+y<100;++x,++y)
printf("%d ",x+y);
}
Um uso interessante para o for o loop infinito, como nenhuma das trs definies so
obrigatrias, podemos deixar a condio em aberto.
Ex:
int main()
{
for(;;)
printf("loop infinito\n");
}
Outra forma usual do for o for aninhado, ou seja, um for dentro de outro.
Ex:
int main()
{
int linha,coluna;
for(linha=1;linha<=24;linha++)
{
for(coluna=1;coluna<40;coluna++)
printf("-");
putchar('\n');
}
}
- 17 -
Exerccios:
a. Faa um programa para imprimir os nmeros de 1 a 10.
b. Faa um programa que leia um nmero informado pelo usurio e imprima a tabuada na seguinte forma:
0 x NUM = RESULTADO
1 x NUM = RESULTADO
10 x NUM = RESULTADO
c. Faa um programa que imprima os nmeros pares entre 2 e 50.
d. Tem-se um conjunto de dados contendo a altura e o sexo (M ou F) de 15 pessoas. Faa um programa que
calcule e escreva:
a. a maior e a menor altura do grupo;
b. a mdia de altura das mulheres;
c. o nmero de homens;
e. Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou no de um novo
produto lanado. Para isso forneceu o sexo do entrevistado e sua resposta (sim ou no). Sabendo que
foram entrevistadas 10 pessoas, faa um programa que calcule e imprima:
a. o nmero de pessoas que responderam sim;
b. o nmero de pessoas que responderam no;
c. o nmero de mulheres que responderam sim;
d. a porcentagem de homens que responderam no entre todos os homens analisados.
Sintaxe:
while(condio)
comando;
Uma maneira possvel de executar um lao utilizando o comando while. Ele permite que o cdigo
fique sendo executado numa mesma parte do programa de acordo com uma determinada
condio.
- o comando pode ser vazio, simples ou bloco
- ele executado desde que a condio seja verdadeira - testa a condio antes de executar o lao
Ex:
int main()
{
char ch;
while(ch!='a')
ch=getchar();
}
Exerccios:
a. Faa um programa que leia o ano de nascimento de uma pessoa, calcule sua idade e imprima na tela. O
programa deve ser executado at que o ano digitado seja 9999.
b. Faa um programa para ler diversos nmeros reais e exibir quantos foram digitados. O valor 1 cdigo de
- 18 -
fim da entrada.
c. Faa um programa para ler diversos nmeros reais e exibir a soma dos nmeros lidos. O valor 999
cdigo de fim de entrada.
d. A fbrica da Vlquis produz uma determinada quantidade de automveis por dia. Faa um programa para
ler a quantidade produzida diariamente ao longo de uma semana, e depois informe:
a. A quantidade produzida na semana;
b. A menor produo diria.
Considere que o valor 1 indica fim da digitao; observe que h dias em que no h produo.
Ex:
int main()
{
char ch;
printf("1. incluso\n");
printf("2. alterao\n");
printf("3. excluso\n");
printf(" Digite sua opo:");
do
{
ch=getchar();
switch(ch)
{
case '1':
printf("escolheu inclusao\n");
break;
case '2':
printf("escolheu alteracao\n");
break;
case '3':
printf("escolheu exclusao\n");
break;
case '4':
printf("sair\n");
}
} while(ch!='1' && ch!='2' && ch!='3' && ch!='4');
}
Exerccios:
a. Faa um programa que receba um conjunto de valores inteiros e positivos, calcule e imprima o maior e o
menor valor do conjunto.
Para encerrar a entrada de dados deve ser digitado o valor zero.
Para valores negativos, deve ser enviada uma mensagem.
Esses valores (zero e negativos) no entraro nos clculos.
- 19 -
b. Em uma eleio presidencial, existem quatro candidatos. Os votos so informados atravs de cdigo. Os
cdigos utilizados so:
1,2,3,4 votos para os respectivos candidatos;
5 voto nulo;
6 voto em branco;
Escreva um programa que calcule e imprima:
total de votos para cada candidato;
total de votos nulos;
total de votos em branco;
BREAK
Quando o comando break encontrado em qualquer lugar do corpo do for, ele causa seu
trmino imediato. O controle do programa passar ento imediatamente para o cdigo que segue o
loop.
Ex:
int main()
{
char ch;
for(;;)
{
ch=getchar();
if (ch=='a')
break;
}
}
CONTINUE
Algumas vezes torna-se necessrio "saltar" uma parte do programa, para isso utilizamos o
"continue".
FUNES
uma unidade autnoma de cdigo do programa desenhada para cumprir uma tarefa
particular. Geralmente os programas em C consistem em vrias pequenas funes. A declarao do
tipo da funo obrigatria no C do UNIX. Os parmetros de recepo de valores devem ser
separados por vrgulas.
Sintaxe:
tipo nome(parmetros)
comandos;
Quando uma funo no retorna um valor para a funo que a chamou ela declarada
como void.
Ex:
void inverso();
int main()
{
char *vet="abcde";
inverso(vet);
}
void inverso(s)
char *s;
{
int t=0;
for(;*s;s++,t++);
s--;
for(;t--;)
printf("%c",*s--);
putchar('\n');
}
Ex:
int elevado();
int main()
{
int b,e;
printf("Digite a base e expoente x,y : ");
scanf("%d,%d",&b,&e);
printf("valor=%d\n",elevado(b,e));
- 21 -
int elevado(base,expoente)
int base,expoente;
{
int i;
if (expoente<0)
return;
i=1;
for(;expoente;expoente--)
i=base*i;
return i;
}
Parmetros Formais
Quando uma funo utiliza argumentos, ento ela deve declarar as variveis que
aceitaram os valores dos argumentos, sendo essas variveis os parmetros formais.
Ex:
int pertence(string,caracter) /* pertence(char *string,char caracter) */
char *string,caracter;
{
while (*string)
if (*string==caracter)
return 1;
else
string++;
return 0;
}
Ex:
int sqr();
int main()
{
int t=10;
printf("%d %d",sqr(t),t);
}
int sqr(x)
int x;
{
x=x*x;
return(x)
}
- 22 -
Ex:
void troca();
int main()
{
int x=10,y=20;
troca(&x,&y);
printf("x=%d y=%d\n",x,y);
}
void troca(a,b)
int *a,*b;
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
Classe de Variveis
Uma funo pode chamar outras funes, mas o cdigo que compreende o corpo de uma
funo (bloco entre {}) est escondido do resto do programa, ele no pode afetar nem ser
afetado por outras partes do programa, a no ser que o cdigo use variveis globais. Existem trs
classes bsicas de variveis: locais, estticas e globais.
Variveis locais
Ex:
void linha;
int main()
{
int tamanho;
printf("Digite o tamanho: ");
scanf("%d",&tamanho);
linha(tamanho);
}
void linha(x)
int x;
{
int i;
for(i=0;i<=x;i++)
putchar(95);
/* A varivel i na funo linha no reconhecida pela funo main.*/
}
- 23 -
Variveis Globais
So conhecidas por todo programa e podem ser usadas em qualquer parte do cdigo.
Permanecem com seu valor durante toda execuo do programa. Deve ser declarada fora de
qualquer funo e at mesmo antes da declarao da funo main. Fica numa regio fixa da memria
prpria para esse fim.
Ex:
void func1(),func2();
int cont;
int main()
{
cont=100;
func1();
}
void func1()
{
int temp;
temp=cont;
func2();
printf("cont = %d",cont);
}
void func2()
{
int cont;
for(cont=1;cont<10;cont++)
printf(".");
}
Variveis Estticas
Ex:
void mostra();
int main()
{
int t[10],i;
for(i=0;i<10;i++)t[i]=i;
mostra(t);
}
- 24 -
void mostra(num)
int num[]; /* ou declarar int *num; */
{
int i;
for(i=0;i<10;i++)
printf("%d",num[i]);
}
Ex:
main(argc,argv)
int argc;
char *argv[];
{
if (argc!=2)
{
printf("falta digitar o nome\n");
exit(0);
}
printf("alo %s",argv[1]);
}
Ex:
main(argc,argv)
int argc;
char *argv[];
{
int disp,cont;
if (argc<2)
{
printf("falta digitar o valor para contagem\n");
exit(0);
}
if (argc==3&&!strcmp(argv[2],"display"))
disp=1;
else
disp=0;
for(cont=atoi(argv[1]);cont;--cont)
if(disp)printf("%d",cont);
printf("%c",7);
}