material de apoio c
Post on 08-Apr-2018
224 Views
Preview:
TRANSCRIPT
-
8/7/2019 material de apoio C
1/301
Linguagem CValter Schastai
-
8/7/2019 material de apoio C
2/301
Introduo
-
8/7/2019 material de apoio C
3/301
Programa x Algoritmo Um Programa a formalizao de um
algoritmo, utilizando alguma ferramenta,
capaz de permitir que o computador
possa entender a seqncia de aes.
-
8/7/2019 material de apoio C
4/301
Linguagem do Computador A nica linguagem que o computador
entende chama-se linguagem de mquina
Portanto, todos os programas que secomunicam com o computador devem estarem linguagem de mquina
-
8/7/2019 material de apoio C
5/301
Compiladores e Interpretadores A forma como os programas so traduzidos
para a linguagem de mquina classifica-seem duas categorias:Interpretados
Compilados
-
8/7/2019 material de apoio C
6/301
Interpretadores L uma instruo, faz consistncia da
sintaxe e se no houver erro converte-a paralinguagem de mquina para finalmenteexecut-la
Segue para a prxima instruo, repetindo o
processo at que a ltima instruo sejaexecutada, ou algum erro seja encontrado
-
8/7/2019 material de apoio C
7/301
Compiladores L uma instruo, faz consistncia da
sintaxe e se no houver erro converte-a paralinguagem de mquina e, em vez deexecut-la segue para a prxima instruorepetindo o processo at que a ltima
instruo seja atingida ou algum erro sejaencontrado
-
8/7/2019 material de apoio C
8/301
Compiladores No havendo erros na compilao gerado
um programa .OBJ
A partir desse momento, entre em cena olinkeditor, que far a associao entre oprograma .OBJ e a biblioteca padro docompilador
O produto final criado pelo linkeditor oexecutvel (arquivo com extenso .EXE)
-
8/7/2019 material de apoio C
9/301
Interpretadores x Compiladores
O interpretador precisa estar presente todas asvezes que um programa executado
Sendo assim, se uma parte do programanecessitar ser executada muitas vezes, oprocesso ser feito o mesmo nmero de vezes
Na execuo de um programa compilado, ocompilador no precisa estar presente
-
8/7/2019 material de apoio C
10/301
Interpretadores x Compiladores Programas compilados (arquivos .EXE),
no permitem alterao, o que protege o
cdigo fonte A linguagem que utilizaremos nesse curso,
linguagem C, gera programas compilados
-
8/7/2019 material de apoio C
11/301
A Linguagem C Criada por Dennis M. Ritchie e Ken
Thompson em 1972
C uma linguagem muito utilizada naprogramao de qualquer tipo de sistema(clculos matemticos, estruturas de dados,sistemas operacionais, etc)
Como por exemplo, o sistema operacionalUNIX desenvolvido em C
-
8/7/2019 material de apoio C
12/301
A Linguagem C C suficientemente estruturada para
encorajar bons hbitos de programao
Por exemplo, programas em C podem serdesenvolvidos em partes separadas porpessoas distintas e depois unidas em um
programa final
-
8/7/2019 material de apoio C
13/301
Como Criar um Programa
Executvel em C Escrever o programa em qualquer editor de texto e
salv-lo em um arquivo com o sufixo .c (o arquivo
deve ser salvo no modo texto) Compilar o fonte seguindo as instrues do seu
compilador (isso criar o arquivo .EXE)
Atualmente, a maioria dos compiladores possuemuma interface que disponibiliza entrada do cdigofonte (editor prprio) e funes para compilao(por exemplo, ctrl+F9, no Turbo C++ 4.0)
-
8/7/2019 material de apoio C
14/301
O Compilador que Utilizaremos No nosso curso utilizaremos o compilador
da borland Turbo C++ 4.0
-
8/7/2019 material de apoio C
15/301
-
8/7/2019 material de apoio C
16/301
Algumas Funes Bsicas da
Interface do Compilador Compilar: F9
Compilar e Executar: Ctrl + F9
Help Especfico: Cursor na palavra e Ctrl +F1
-
8/7/2019 material de apoio C
17/301
Primeiro Programa
#include #include
void main(){
printf("Primeiro Programa!");getch();
}
Escreve na Tela
Pegar um caractere do Teclado
arquivo que contm a sub-rotina printf() arquivo que contm a sub-rotina getch()
-
8/7/2019 material de apoio C
18/301
A Estrutura Bsica de um
Programa C Um programa C consiste em uma ou vriasfunes
Forma Geral: cabealho;void main(){
instrues;}
tipo outras_funes(){
instrues;}
-
8/7/2019 material de apoio C
19/301
A Estrutura Bsica de um
Programa C A funo main() a primeira funo a ser
executada no cdigo (tambm obrigatria)
O identificador void indica que a funono retorna qualquer valor
A seo cabealho usada para a definio
das bibliotecas que sero utilizadas noprograma (por exemplo, #include )
-
8/7/2019 material de apoio C
20/301
A Estrutura Bsica de um
Programa C Alm da funo main() outras funes podem
ser colocadas no programa, essas novas
funes devem possuir um tipo de retorno (ouvoid) e um nome identificando-as
Na seqncia do curso, falaremos mais sobre
definio de funes
-
8/7/2019 material de apoio C
21/301
Tipos de Dados e Variveis
-
8/7/2019 material de apoio C
22/301
Tipos de Dados
Um tipo de dado define a quantidade dememria necessria para alojar o dado, aabrangncia de valores possveis (escala) e
o tipo de operaes que podem serexecutadas com este dado Definir um tipo de dado, significa informar
ao compilador de que forma este dado deveser interpretado e de como ele deve sergerenciado na memria
-
8/7/2019 material de apoio C
23/301
Tipos BsicosTIPO DESCRIO BYTES FAIXA
int Inteiro com sinal 2 -32768 a 32767
float Real com sinal 4 3.4 x 10 -38 at 3.4 x 10 38 (+ e -)
char Um ou mais caracteres 1 1 caractere
Caso voc necessite de faixas maiores de valores,existem modificadores de tipos bsicos (unsigned,por exemplo) e tambm outros tipos de dados,como por exemplo, long e double
-
8/7/2019 material de apoio C
24/301
Variveis Uma varivel um espao da memria,
reservado quando da declarao da varivel
e que ser ocupado por um tipo de dadoonde o valor do dado ir variar ao longo davida til do bloco de instrues ao qual a
varivel pertence
-
8/7/2019 material de apoio C
25/301
Variveis
-
8/7/2019 material de apoio C
26/301
Declarando Variveis
A declarao de variveis consiste eminformar ao compilador o tipo de dado e onome da varivel que ir ocupar uma certaquantidade de memria
Por enquanto, iremos declarar nossasvariveis apenas no interior da funomain() (chamadas variveis locais)
tipo nome_da_varivel;
Sintaxe:
-
8/7/2019 material de apoio C
27/301
Nomes de Variveis O primeiro caractere deve ser uma letra ou um
sublinhado _
Os demais caracteres podem ser letras, nmerosou sublinhados
Apenas os primeiros 31 caracteres sosignificativos
O nome da varivel deve ser nico no programa
Vale ressaltar que a linguagem C Case Sentive
-
8/7/2019 material de apoio C
28/301
Atribuindo Valores s Variveis
Para atribuir um valor (dado) a uma variveldeve ser utilizado o operador de atribuio=
Podemos atribuir o valor a uma varivelquando da sua declarao, ou aps a suadeclarao
Exemplo:int quantidade_produto = 15;quantidade_produto = 15;
-
8/7/2019 material de apoio C
29/301
Exerccio Sabendo que duas variveis a e b, possuem
respectivamente os valores 5 e 10, construa
um programa em C para trocar os valoresdestas variveis, ou seja, no final doprograma a deve possuir o valor 10 e b o
valor 5.
-
8/7/2019 material de apoio C
30/301
Soluo
void main()
{ int a = 5, b = 10, c;c = a;a = b;b = c;
}
-
8/7/2019 material de apoio C
31/301
Sada de Dados
-
8/7/2019 material de apoio C
32/301
Introduo Toda sada de dados manipulada por
funes
Para incluir estas funes em nossosprogramas temos que dizer ao compiladorem que biblioteca de arquivos headerestas funes esto contidas
Para a funo de sada de dados queusaremos a biblioteca stdio.h ser suficiente
-
8/7/2019 material de apoio C
33/301
printf()
Sintaxe:printf(expresso de controle, lista de argumentos);
-
8/7/2019 material de apoio C
34/301
printf() Expresso de Controle
A expresso de controle pode conter caracteres
que sero exibidos na tela Tambm podem ser inseridos manipuladores de
controle e cdigos de formatao que indicam oformato em que os argumentos devem serimpressos
-
8/7/2019 material de apoio C
35/301
printf()Alguns Manipuladores de Controle
\n Nova linha
\xN Imprime caractere ASCII (N em hexa)
\ Imprime aspas
\\ Imprime barra
-
8/7/2019 material de apoio C
36/301
printf()Alguns Cdigos de Formatao
%c char
%d int
%f float
%s string
%ld long%lf double
-
8/7/2019 material de apoio C
37/301
printf() Lista de argumentos:
A lista de argumentos pode conter qualquer
quantidade de argumentos Cada argumento deve ser separado por vrgula
-
8/7/2019 material de apoio C
38/301
printf()
#include #include
void main(){char sexo = 'F';int idade = 15;float altura = 1.75;
printf("Escrevendo um caractere: %c \n",sexo);printf("Escrevendo um inteiro: %d \n",idade);printf("Escrevendo um real: %f ",altura);getch();
}
-
8/7/2019 material de apoio C
39/301
printf()#include #include
void main()
{char sexo = 'F';int idade = 15;float altura = 1.75;
printf("Escrevendo um caractere: %c \n",sexo);
printf("Escrevendo um inteiro: %d \n",idade);printf("Escrevendo um real: %5.2f ",altura); // _1.75getch();
}
Quantidade total de caracteres exibidos.
Caso o argumento tenha uma quantidademaior, no haver truncamento. Caso sejamenor sero colocados brancos a esquerda
Quantidade de casas decimais com arredondamento
-
8/7/2019 material de apoio C
40/301
printf()#include #include
void main()
{char sexo = 'F';int idade = 15;float altura = 1.75;
printf("Escrevendo um caractere: %c \n",sexo);
printf("Escrevendo um inteiro: %5.3d \n",idade); //__015printf("Escrevendo um real: %f ",altura);getch();
}
Quantidade total de caracteres exibidos.Caso seja menor ser complementado combrancos a esquerda
Nmero de caracteres do argumento, caso seja menor sercomplementado com 0s esquerda
-
8/7/2019 material de apoio C
41/301
putchar() A funo putchar() mais uma das funes
de sada existentes na biblioteca stdio.h
Esta funo permite escrever na tela apenasum caractere
Sintaxe:
putchar(caractere);
-
8/7/2019 material de apoio C
42/301
Entrada de Dados
-
8/7/2019 material de apoio C
43/301
Introduo
Assim como a sada de dados tratada comfunes da biblioteca stdio.h, tambm a
entrada de dados tratada dessa forma
-
8/7/2019 material de apoio C
44/301
scanf()
A funo scanf() para entrada de dados oque a funo printf() para sada de dados
A funo scanf() utiliza os mesmos cdigos
para formatar dados, porm agora, paraentrada de dados
Vale ressaltar que os argumentos de scanf()
devem ser endereos de variveis O endereo de uma varivel dado pelooperador & antes do nome da varivel
-
8/7/2019 material de apoio C
45/301
scanf()
Sintaxe:
scanf(expresso de controle,lista de argumentos);
-
8/7/2019 material de apoio C
46/301
scanf()#include #include
void main(){
float anos, dias;printf("Digite sua idade em anos: ");scanf("%f",&anos);
dias = anos * 365;printf("Sua idade em dias e' = %.0f ",dias);getch();
}
-
8/7/2019 material de apoio C
47/301
getche() e getch() Essas duas funes esto definidas na
biblioteca conio.h e so utilizadas para ler
um caractere no instante em que datilografado, sem esperar [enter] A funo getche() l o caractere do teclado
e permite que seja impresso na tela
Esta funo no aceita argumentos edevolve o caractere lido para a funo que achamou
-
8/7/2019 material de apoio C
48/301
getche() e getch()
A funo getch() l o caractere do teclado eno permite que seja impresso na tela
Como getche(), esta funo no aceitaargumentos e devolve o caractere lido paraa funo que a chamou
-
8/7/2019 material de apoio C
49/301
getche() e getch()#include #include
void main()
{char c;printf("Pressione uma tecla : ");c = getche();printf("\nLeitura feita com getche()");
printf("\nPressione novamente uma tecla: ");c = getch();printf("\nLeitura feita com getch()");getch();
}
-
8/7/2019 material de apoio C
50/301
Operadores
-
8/7/2019 material de apoio C
51/301
Operadores Matemticos
Para efetuar clculos envolvendo valoresnumricos podem ser utilizados os seguintes
operadores matemticos+ : Adio- : Subtrao* : Multiplicao
/ : Diviso% : Retorna o resto de uma diviso
-
8/7/2019 material de apoio C
52/301
Operadores de Incremento e
Decremento++ : Incrementa de 1 seu operando
-- : Decrementa de 1 seu operando
Os dois operadores trabalham de doismodos:Pr-fixado: O operador aparece antes do nome
da varivelPs-fixado: O operador aparece seguindo o
nome da varivel
-
8/7/2019 material de apoio C
53/301
Operadores de Incremento e
Decremento Em ambos os casos a varivel alterada, no
entanto, no modo pr-fixado a varivel
incrementada antes de seu valor seu usado eno modo ps-fixado a varivel incrementada depois de seu valor ser usado
-
8/7/2019 material de apoio C
54/301
Operadores de Incremento e
Decremento Exemplo:
n = 5;x = n++;
// x = 5
// n = 6
n = 5;x = ++n;
// x = 6
// n = 6
-
8/7/2019 material de apoio C
55/301
Operadores Aritmticos de
Atribuio Estes operadores simplificam a definio de
operaes aritmticas
Eles inicialmente realizam a operaomatemtica envolvida e em seguidaatribuem o resultado a uma varivel
Exemplo:x = x + 10;pode ser substitudo por:x += 10;
-
8/7/2019 material de apoio C
56/301
Operadores Aritmticos de
Atribuio+= : Soma os operandos e o resultado atribui
varivel esquerda
-= : Diminui os operandos e o resultadoatribui varivel esquerda
*= : Multiplica os operandos e o resultadoatribui varivel esquerda
/= : Divide os operandos e o resultadoatribui varivel esquerda
-
8/7/2019 material de apoio C
57/301
-
8/7/2019 material de apoio C
58/301
Operadores Relacionais
Os operadores relacionais so muitoutilizados nas tomadas de decises
== : igual!= : diferente> : maior que< : menor que>= : maior ou igual que
-
8/7/2019 material de apoio C
59/301
Operadores Lgicos
Utilizados normalmente junto com osoperadores relacionais
&& : lgico E|| : lgico OU
! : lgico de negao
-
8/7/2019 material de apoio C
60/301
Precedncia dos Operadores
Operadores Precedncia
! maior (1)
* / % 2+ - 3
> < >= =< 4
== != 5
&& 6
|| menor (7)
-
8/7/2019 material de apoio C
61/301
Exerccios
#include #include
void main(){
int a,b,c;printf("Digite 3 numeros: \n");scanf("%d %d %d",a,b,c);
printf("\n %d %d %d",a,b,c);getch();}
Qual o erro lgico do programa abaixo ?
-
8/7/2019 material de apoio C
62/301
Exerccios
Faa um programa para ler a base e a alturade um tringulo. Em seguida, escreva a rea
do mesmo.Lembre: rea = ( Base * Altura ) / 2
-
8/7/2019 material de apoio C
63/301
Soluo#include #include
void main()
{ float base, altura, area;printf("\nEntre com a base do triangulo: ");scanf("%f",&base);printf("\nEntre com a altura do triangulo: ");scanf("%f",&altura);area = (base * altura) / 2;printf("\nA area do triangulo e %f",area);getch();
}
-
8/7/2019 material de apoio C
64/301
Introduo a Manipulao de
Strings
-
8/7/2019 material de apoio C
65/301
Introduo
String uma das mais teis e importantesformas de dados em C e usada para
armazenar e manipular textos comopalavras, nomes e sentenas
Em C, string um vetor unidimensional do
tipo char, terminada pelo caractere null(\0)
-
8/7/2019 material de apoio C
66/301
Introduo
Cada caractere de uma string pode seracessado individualmente, o que
proporciona uma grande flexibilidade aosprogramas que processam texto
-
8/7/2019 material de apoio C
67/301
Declarando uma String
O tipo char deve ser usado antes do nomedado para a varivel string
Aps o nome da varivel string declara-se otamanho da string entre colchetes
Por exemplo:
char nome[50];
-
8/7/2019 material de apoio C
68/301
Lendo Strings com scanf()
Para ler uma string podemos fazer uso dafuno scanf(%s,&string)
Porm essa funo quando encontra ocaractere branco ou espao encerra aleitura
Portanto muitas vezes no a funo idealpara leitura de strings
-
8/7/2019 material de apoio C
69/301
-
8/7/2019 material de apoio C
70/301
Exemplo
#include #include
void main(){
char nome[50];printf("Entre com um nome: ");gets(nome);printf("O nome que voce digitou foi %s",nome);getch();
}
-
8/7/2019 material de apoio C
71/301
Inicializando Strings
Uma string pode ser inicializada nomomento em que declarada
Exemplo:
char nome[] = Marta;
-
8/7/2019 material de apoio C
72/301
Acessando Posies Individuais
de uma String Muitas vezes necessrio manipular
caracteres individuais em uma string
A linguagem C possui uma forma todaespecial de permitir tal operao, atravs douso de colchetes ( [ ] ) logo aps o nome da
varivel do tipo string, e o nmero docaractere que se deseja manipular entre oscolchetes.
-
8/7/2019 material de apoio C
73/301
Acessando Posies Individuais
de uma String A primeira posio de uma string em C
acessada pelo ndice 0, a segunda pelo
ndice 1, e assim por diante Exemplo:
char curso[] = LPI
L PIcurso[0]
curso[1]
curso[2]
-
8/7/2019 material de apoio C
74/301
Exerccio
Construa um programa para ler uma stringque represente uma data no seguinte
formato: dd/mm/aaaa. Aps lida a string,escreva o dia, ms e ano (em nmeros) dadata entrada pelo usurio.
-
8/7/2019 material de apoio C
75/301
Soluo
#include #include #include
void main(){char data[9];printf("Entre com uma data no formato dd/mm/aaaa: ");gets(data);printf("\nO dia e %c%c",data[0],data[1]);
printf("\nO mes e %c%c",data[3],data[4]);printf("\nO ano e %c%c%c%c",data[6],data[7],data[8],data[9]);
getch();}
-
8/7/2019 material de apoio C
76/301
Comandos de Seleo nica
-
8/7/2019 material de apoio C
77/301
Introduo
Na linguagem C temos comandos paraavaliar expresses e selecionar aquela ou
aquelas que forem verdadeiras Mais precisamente isto significa executar o
bloco de comandos que est subordinado
expresso que resultou em verdadeiro
-
8/7/2019 material de apoio C
78/301
if Sem Alternativa
Sintaxe:
if(condio){
instrues;}
-
8/7/2019 material de apoio C
79/301
if Sem Alternativa
Neste tipo de avaliao condicional h umaexpresso sendo avaliada e caso ela resulte
em verdadeiro o bloco de instrues que asegue executado Caso resulte em falso o bloco saltado Os delimitadores de bloco de instrues { e
} somente so obrigatrios caso o blocotenha mais que uma instrues
-
8/7/2019 material de apoio C
80/301
Exemplo#include #include
void main()
{int a,b;printf("Entre com dois numeros: \n");scanf("%d %d",&a,&b);if(a == b)
{ printf("Os Numeros sao Iguais");}getch();
}
-
8/7/2019 material de apoio C
81/301
if Com Alternativa
Sintaxe:
if(condio){instrues;
}else
{instrues
}
-
8/7/2019 material de apoio C
82/301
if Com Alternativa
Nesta seleo h uma expresso de teste,que se a expresso resultar em verdadeiro
executado o bloco de instrues que segue oif, caso contrrio, executado o bloco quesegue o else
E l
-
8/7/2019 material de apoio C
83/301
Exemplo#include
#include
void main(){
int a,b;printf("Entre com dois numeros: \n");
scanf("%d %d",&a,&b);if(a == b){
printf("Os Numeros sao Iguais");}
else{printf("Os Numeros sao Diferentes");
}getch();
}
if M i C di
-
8/7/2019 material de apoio C
84/301
if Mais que uma Condio
Sintaxe: if(condio){instrues;
}else if(condio){
instrues;}else if(condio){
instrues;}
....else{
instrues;}
E l
-
8/7/2019 material de apoio C
85/301
Exemplo#include
#include
void main(){
int a,b;printf("Entre com dois numeros: \n");scanf("%d %d",&a,&b);
if(a > b){printf("O primeiro e maior que o segundo");
}else if (a < b){
printf("O primeiro e menor que o segundo");
}else{
printf("Os numeros sao iguais");}getch();
}
-
8/7/2019 material de apoio C
86/301
Operador Ternrio ? :
Sintaxe:
Expresso_de_teste ?Expresso_executada_se_verdadeiro :Expresso_executada_se_falso;
-
8/7/2019 material de apoio C
87/301
Operador Ternrio ? :
Um comando idntico ao comando deseleo onde h uma expresso de teste com
uma alternativa (if-else) o operador ? : Este operador prefervel quando fornecessrio utilizar uma expresso de testemais sinttica
Este operador denominado de ternriopois requer trs operandos
-
8/7/2019 material de apoio C
88/301
Exemplo#include #include
void main(){
int a,b;
printf("Entre com dois numeros: \n");scanf("%d %d",&a,&b);
a == b ? printf("Iguais") : printf("Diferentes");
// tambem poderiamos fazer
// printf("%s", a == b ? "Iguais" : "Diferentes");
getch();}
-
8/7/2019 material de apoio C
89/301
Outro Exemplo
int a,b,maior;
printf("Entre com dois numeros: \n");scanf("%d %d",&a,&b);
maior = a > b ? a : b;printf("\n Maior = %d",maior);
maiorrecebe o valor de a ou de b
-
8/7/2019 material de apoio C
90/301
Exerccios
Construa um programa capaz de informar seum nmero inteiro par ou impar
-
8/7/2019 material de apoio C
91/301
Soluo
#include #include
void main(){
int numero;printf("Entre com um numero: ");scanf("%d",&numero);
if((numero % 2) == 0)printf("Numero par");
else printf("Numero impar");
// (numero % 2) == 0 ? printf("Par") : printf("Impar");getch();
}
-
8/7/2019 material de apoio C
92/301
Exerccio
Complemente o programa feito paracalcular a mdia de um aluno do curso de
programao de computadores, adicionandouma sada para o usurio da situao doaluno (aprovado, reprovado ou final)
-
8/7/2019 material de apoio C
93/301
Soluo
.
.
.
if(media >= 7)printf("Aprovado");
else if (media >= 4)printf("Final");
else printf("Reprovado");...
-
8/7/2019 material de apoio C
94/301
Comandos de Seleo Mltipla
-
8/7/2019 material de apoio C
95/301
switch ... case
Sintaxe:
switch(expresso) {case constante1: {bloco de instrues; break;}case constante2: {bloco de instrues; break;}...case constante3: {bloco de instrues; break;}[default {bloco de instrues;}]
}
-
8/7/2019 material de apoio C
96/301
switch ... case
O comando switch...case testasucessivamente o valor de uma expresso
em relao a uma srie de constantes Quando o teste resultar na igualdade de
valores, os comando subordinados
constante (int ou char) so ento executados
Exemplo
-
8/7/2019 material de apoio C
97/301
Exemplo#include #include
void main(){
float num1, num2;char operador;
printf("Digite: Primeiro Numero, Operador, Segundo Numero:\n");scanf("%f %c %f",&num1,&operador,&num2);
switch(operador){
case '+': {printf("\nResultado: %f",num1 + num2); break;}
case '-
': {printf("\nResultado: %f",num1-
num2); break;}case '*': {printf("\nResultado: %f",num1 * num2); break;}case '/': {printf("\nResultado: %f",num1 / num2); break;}
}getch();
}
-
8/7/2019 material de apoio C
98/301
Exerccio
Faa um programa que leia um nmero querepresente um determinado ms do ano.
Aps a leitura escreva por extenso qual oms lido. Caso o nmero digitado no estejana faixa de 1..12 escreva uma mensageminformando o usurio do erro da digitao.
Soluo
-
8/7/2019 material de apoio C
99/301
Soluo#include
#include
void main(){
int mes;printf("Digite um numero entre 1 e 12: ");scanf("%d",&mes);
switch(mes){
case 1: {printf("\nJaneiro"); break;}case 2: {printf("\nFevereiro"); break;}case 3: {printf("\nMarco"); break;}// ...case 12: {printf("\nDezembro"); break;}default: {printf("\nNumero Invalido");}
}getch();
}
-
8/7/2019 material de apoio C
100/301
Comandos de Repetio de
Blocos
-
8/7/2019 material de apoio C
101/301
Introduo
Os comandos de repetio de blocos emlinguagens de programao, tambm so
conhecidos como comandos de iterao, oucomandos de lao ou ainda loop deinstrues
Estes comandos executam os blocos de
instrues subordinados enquanto umadeterminada condio permanecer comoverdadeira
-
8/7/2019 material de apoio C
102/301
Comando - for
O comando for o mais utilizado quandodevemos repetir a execuo de um ou mais
blocos de instrues, um determinadonmero de vezes
-
8/7/2019 material de apoio C
103/301
Comando - for
Sintaxe:
for(inicializao; teste; incremento){instrues;
}
-
8/7/2019 material de apoio C
104/301
Comando - for
A primeira expresso utilizada para ainicializao, onde normalmente
inicializada uma varivel contadora A inicializao executada somente umavez, no momento em que o lao ativado
O teste, normalmente uma expresso
relacional, que testa a validade de novaexecuo do lao
-
8/7/2019 material de apoio C
105/301
Comando - for
O incremento, modifica o valor da varivelutilizada para controle do lao
Normalmente um incremento de 1 novalor da varivel
-
8/7/2019 material de apoio C
106/301
Exemplo#include #include
void main(){
int i;for(i=1;i
-
8/7/2019 material de apoio C
107/301
Exemplos Flexibilidade - for
#include #include
void main(){
int x,y;for(x=0,y=0; x+y
-
8/7/2019 material de apoio C
108/301
Exemplos Flexibilidade - for
#include #include
void main(){
char c;for( ; (c=getch()) != 's'; )
{ printf("\n%c",c);}
}
-
8/7/2019 material de apoio C
109/301
Exerccio
Faa um programa que leia uma string doteclado e aps isso escreva ela invertida na
tela do usurio
Soluo
-
8/7/2019 material de apoio C
110/301
Soluo#include
#include #include
void main(){
char str[50];int i;printf("Entre com uma palavra: ");gets(str);
for(i=(strlen(str)-1);i>=0;i--)
{printf("%c",str[i]);
}getch();
}
-
8/7/2019 material de apoio C
111/301
Exerccio
Fazer um programa, usandoobrigatoriamente a estrutura for, que
calcule escreva o valor de S onde:
S! 1
1
3
2
5
3
7
4
99
50...
Soluo
-
8/7/2019 material de apoio C
112/301
Soluo#include
#include
void main(){
int num, den;
float s=0;
for(num=1,den=1;num
-
8/7/2019 material de apoio C
113/301
Exerccio
Faa um programa que leia 20 valores reaise escreva seu somatrio (use a estrutura for)
S l
-
8/7/2019 material de apoio C
114/301
Soluo#include #include
void main(){
int num,i, s=0;
printf("Entre com 5 numeros\n");
for(i=1;i
-
8/7/2019 material de apoio C
115/301
Comando - while
Comando normalmente utilizado quando necessrio repetir um bloco de instrues
sem saber de antemo quantas vezes estebloco dever ser executado
-
8/7/2019 material de apoio C
116/301
Comando - while
Sintaxe:
while(condio){instrues;
}
-
8/7/2019 material de apoio C
117/301
Comando - while
Quando precisamos testar uma condioantes mesmo de iniciar a execuo de um
bloco de instrues devemos ento utilizar ocomando while com teste no incio
E l
-
8/7/2019 material de apoio C
118/301
Exemplo
#include #include
void main()
{int i=1;while(i
-
8/7/2019 material de apoio C
119/301
Exerccio
Faa um programa para calcular um valor Aelevado a um expoente B. Os valores A e B
devero ser lidos, onde a > 0, b >= 0
Sol o
-
8/7/2019 material de apoio C
120/301
Soluo
#include #include
void main(){
int a, b, resultado = 1;printf("Entre com a base e o expoente: \n");scanf("%d %d",&a,&b);while(b > 0){
resultado = resultado * a;
b--;}printf("Resultado: %d",resultado);getch();
}
-
8/7/2019 material de apoio C
121/301
Exerccio
Faa um programa para calcular N!, ondeN >= 0.
Soluo
-
8/7/2019 material de apoio C
122/301
#include
#include
void main(){
long int n, resultado=1;printf("Entre com um numero: \n");scanf("%ld",&n);
while(n > 0){
resultado = resultado * n;
n--;}printf("O fatorial eh igual a %ld",resultado);getch();
}
-
8/7/2019 material de apoio C
123/301
Comando do ... while
Para executar um bloco de instrues,subordinado a um lao de repetio, pelo
menos uma vez, temos o comandodo...while
-
8/7/2019 material de apoio C
124/301
Comando do ... while
Sintaxe:
do{
instrues;}while (condio);
Exemplo
-
8/7/2019 material de apoio C
125/301
Exemplo
#include #include
void main(){
int i=1;
do{
printf("\n %d",i);i++;
}while(i
-
8/7/2019 material de apoio C
126/301
Exerccios
Faa um programa para calcular a srieFibonacci at o vigsimo termo. A srie tem
a seguinte forma: 1,1,2,3,5,8,13,21,34,(use obrigatoriamente a estrutura do...while)
Soluo
-
8/7/2019 material de apoio C
127/301
#include
#include
void main(){
int ant=1, prox=1, novo, cont=2;printf("%d, %d",ant,prox);
do{
novo = ant + prox;printf(, %d",novo);ant = prox;
prox = novo;cont++;}while(cont
-
8/7/2019 material de apoio C
128/301
Exerccios
Faa um programa para ler um valor X ecalcular Y = X+2X+3X+4X+5X++20X
(use a estrutura do...while)
Soluo
-
8/7/2019 material de apoio C
129/301
#include
#include
void main(){
int x, y=0, i=1;
printf("Entre com um valor para x: ");scanf("%d",&x);
do{
y = y + (i * x);
i++;}while(i
-
8/7/2019 material de apoio C
130/301
Comandos de Desvio de
Execuo Muitas vezes necessrio interromper o
fluxo normal de processamento de um lao
de repetio, independente deste lao tersido implementado com for ou while
Para fazer isso, temos dois comandos dedesvio: o break e o continue
-
8/7/2019 material de apoio C
131/301
O Comando break;
O comando break desvia o fluxo deprocessamento para fora do comando de
repetio Mais precisamente, para a primeira linha
aps o trmino do comando de repetio
-
8/7/2019 material de apoio C
132/301
O Comando continue;
O comando continue transfere o fluxo deprocessamento para o teste do comando de
repetio Usando o continue com o for, antes do teste
de associado ao for ser verificado ocorre oincremento das variveis na seo deincremento do for
void main(){
float idade, total_idade=0, total_pessoa=0;h
-
8/7/2019 material de apoio C
133/301
char resp;while(1){
printf("\nIDADE: ");scanf("%f",&idade);if(idade
-
8/7/2019 material de apoio C
134/301
Exerccio
Altere o programa que calcula o fatorial deum nmero, de maneira que seja perguntado
ao usurio se ele deseja calcular ou no ofatorial de um prximo nmero.
void main(){
double n resultado;
-
8/7/2019 material de apoio C
135/301
double n, resultado;char c;
while(1){
resultado = 1;printf("Entre com um numero: \n");scanf("%lf",&n);
while(n > 0)
{resultado = resultado * n;n--;
}printf("O fatorial eh igual a %lf \n",resultado);printf("\nDeseja Continuar(s/n)? ");c = getch();
if(c == 's')continue;
else break;clrscr();
}}
-
8/7/2019 material de apoio C
136/301
Funes Definidas pelo Usurio
-
8/7/2019 material de apoio C
137/301
Introduo
Funes dividem grandes tarefas de computaoem tarefas menores
Em C, uma funo uma unidade de cdigo deprograma autnoma desenhada para cumprir umatarefa particular
Provavelmente a principal razo da existncia de
funes impedir que o programador tenha deescrever o mesmo cdigo repetidas vezes
-
8/7/2019 material de apoio C
138/301
Sintaxe
tipo nome_funo(parmetros com tipos)
{instrues;
}
i d
-
8/7/2019 material de apoio C
139/301
Tipo de uma Funo
O tipo de uma funo determinado pelo tipo devalor que ela retorna e no pelo tipo de seusargumentos
Os tipos possveis de retorno de uma funo sotodos os tipos que o C suporta
Para que um valor seja retornado pela funodeve-se utilizar o comando return(valor), onde
valor o dado que se deseja retornar Quando uma funo no retorna um valor deve-se
declarar a palavra reservada void no lugar do tipo
d
-
8/7/2019 material de apoio C
140/301
Parmetros de uma Funo
Em C, a maioria dos argumentos de funesso passados por valor
Isto significa que funo chamada dadauma cpia dos valores dos argumentos, eela cria outras variveis temporrias paraarmazenar estes valores
Para todos os parmetros da funo necessrio definir seu tipo de dado
P i d F
-
8/7/2019 material de apoio C
141/301
Prottipos de Funo
Prottipo de funo significa declarar aocompilador o formato das funes que serocriadas por voc programador
Isto feito, normalmente aps a definiodo cabealho do programa (includes)
Apenas a primeira linha da funo deve ser
declarada e adicionalmente deve sercolocado o smbolo de ponto e vrgula (;)
Exemplo 1
-
8/7/2019 material de apoio C
142/301
void linha(); // prottipo da funo
void main(){
linha();printf("\xDB PROGRAMA EM C \xDB\n");linha();getch();
}
void linha() // funo propriamente dita{
int j;for(j=1;j
-
8/7/2019 material de apoio C
143/301
float potencia(float b, float e);
void main(){
float base, expoente;printf("Entre com a base e o expoente: \n");scanf("%f %f",&base,&expoente);printf("Resultado = %f",potencia(base,expoente));getch();
}
float potencia(float b, float e){
int resultado = 1;while(e > 0)
{resultado = resultado * b;e--;
}return(resultado);
}
V i i L i Gl b i
-
8/7/2019 material de apoio C
144/301
Variveis Locais e Globais
Locais: Variveis que so declaradas dentro de funes
Seu escopo de visibilidade somente para afuno a qual ela pertence
Globais: Variveis declaradas fora de qualquer funo
Este tipo de varivel pode ser acessada portodas as funes que fazem parte do cdigofonte
Exemplo
-
8/7/2019 material de apoio C
145/301
float valor_dolar, real; // variveis globais
void converte(float qtd_dolar);
void main(){
float montante;printf("Digite o valor do Dolar em Reais: ");
scanf("%f",&valor_dolar);printf("Digite um montante em Dolar: ");scanf("%f",&montante);converte(montante);printf("\nMontante em Reais = %f",real);getch();
}
void converte(float qtd_dolar){
real = qtd_dolar * valor_dolar;}
E i
-
8/7/2019 material de apoio C
146/301
Exerccios
Um nmero primo qualquer inteiropositivo que divisvel apenas por si
prprio e por 1. Escreva uma funo querecebe um inteiro positivo e, se este nmerofor primo, retorna 1, caso contrrio, retorna0.
-
8/7/2019 material de apoio C
147/301
E i
-
8/7/2019 material de apoio C
148/301
Exerccios
Construa um programa para calcular:
!17
1 nn!
Obs.: Use funes
int fat(int numero);
void main(){
-
8/7/2019 material de apoio C
149/301
{float somatorio=0;
int i;for(i=1;i=1;i--
){resultado_fat = resultado_fat * i;
}return(resultado_fat);
}
-
8/7/2019 material de apoio C
150/301
O Pr-Processador C
-
8/7/2019 material de apoio C
151/301
I t d
-
8/7/2019 material de apoio C
152/301
Introduo
Ele atua antes da compilao de umprograma, fazendo pesquisa e substituiono cdigo fonte antes de iniciar acompilao
Como j dito, a substituio basea-se emdiretivas definidas no corpo do cdigo fonte
As diretivas em sempre iniciam com ocaracter #
Introd o
-
8/7/2019 material de apoio C
153/301
Introduo
Algumas das principais diretivas dalinguagem C so as seguintes: #include #define #error #ifdef
#undef entre outras
A diretiva #define
-
8/7/2019 material de apoio C
154/301
A diretiva #define
Com a diretiva #define definimos umidentificador (escrito em maisculo) quedever ser localizado
Em seguida, aps pelo menos um espaoem branco, definimos o texto resultante quesubstituir o identificador localizado
A operao toda (definio mais pesquisa esubstituio) denominada de macro
Exemplo
-
8/7/2019 material de apoio C
155/301
#include #include
#define PI 3.14159
float area(float r);
void main()
{float raio;printf("Digite o raio da esfera: ");scanf("%f",&raio);printf("A area da esfera eh %f",area(raio));getch();
}
float area(float r){
return(4 * PI * r * r);}
Por Que Usar #define ?
-
8/7/2019 material de apoio C
156/301
PorQue Usar #define ?
Talvez voc se pergunte o que ganhamossubstituindo, no programa anterior, PI por 3.14159
Suponhamos que voc tenha um programa em quea constante 3.14159 aparea muitas vezes
Suponha, ainda, que agora voc queira umapreciso maior e queira trocar 3.14159 por
3.141592
Por Que Usar #define ?
-
8/7/2019 material de apoio C
157/301
PorQue Usar #define ?
Voc dever ir passo a passo atravs doprograma e trocar cada ocorrncia que
encontrar da constante Entretanto, se voc tiver definido 3.14159como sendo PI na diretiva #define, vocdever somente fazer uma troca
Outro Exemplo
-
8/7/2019 material de apoio C
158/301
Outro Exemplo
#include #include
#define SOMA(x,y) (x+y)
void main(){
printf("Resultado: %d",SOMA(3,5));
getch();}
Outro Exemplo
-
8/7/2019 material de apoio C
159/301
Outro Exemplo#include #include
#define ERRO printf("\nERRO: NUMERO INVALIDO")
void main(){
int i;printf("Digite um numero de 0 a 100: ");scanf("%d",&i);
if( (i100))ERRO;
getch();}
Exerccios
-
8/7/2019 material de apoio C
160/301
Exerccios
Torne o cdigo abaixo interpretvel pelocompilador C
algoritmoinicio
escreva("teste");espere;
fim
-
8/7/2019 material de apoio C
161/301
-
8/7/2019 material de apoio C
162/301
Classes de Armazenamento
Introduo
-
8/7/2019 material de apoio C
163/301
Introduo
Todas as variveis em C tm dois atributos: umtipo e uma classe de armazenamento
Os tipos ns j conhecemos, e as classe dearmazenamento que veremos sero as seguintes: auto
extern
static register
Classe auto
-
8/7/2019 material de apoio C
164/301
C asse auto
A maioria das variveis que declaramos atagora esto confinadas nas funes que asusam
Isto , so visveis somente s funesonde esto declaradas Tais variveis so chamadas locais ou
automticas, so criadas quando a funo chamada e destrudas quando a funotermina a sua execuo
Classe auto
-
8/7/2019 material de apoio C
165/301
Classe auto
As variveis declaradas dentro de umafuno so automticas por default
Variveis automticas so as mais comunsdentre as quatro classes
A classe de variveis automticas pode ser
explicitada usando-se a palavra auto
Classe auto
-
8/7/2019 material de apoio C
166/301
Classe auto
void main(){
auto int n;}
EQUIVALENTE A
void main()
{ int n;}
Classe extern
-
8/7/2019 material de apoio C
167/301
Todas as variveis declaradas fora dequalquer funo tm a classe dearmazenamento extern
Variveis com este tipo de atributo seroconhecidas por todas as funes declaradasdepois dela
A declarao de variveis externas feita damesma maneira como declaramos variveisdentro do bloco de uma funo
Classe extern
-
8/7/2019 material de apoio C
168/301
Classe extern
#include #include
int n=10;
void main(){
extern n;
printf("%d",n);getch();
}
Classe extern
-
8/7/2019 material de apoio C
169/301
Classe extern
A palavra extern indica que a funo usaruma varivel externa
Este tipo de declarao, entretanto, no obrigatria se a definio original ocorre nomesmo arquivo fonte
Lembre-se que variveis externas retm
seus valores durante toda a execuo doprograma
Classe static
-
8/7/2019 material de apoio C
170/301
Classe static
Variveis static de um lado se assemelhams automticas, pois so conhecidas
somente as funes que as declaram e deoutro lado se assemelham s externas poismantm seus valores mesmo quando afuno termina
Classe static
-
8/7/2019 material de apoio C
171/301
Classe static
Usa-se variveis declaradas como staticnormalmente para permitir que variveis
locais guardem seus valores mesmo aps otrmino da execuo do bloco onde sodeclaradas
Classe static
-
8/7/2019 material de apoio C
172/301
void soma();
void main(){
soma();soma();soma();getch();
}
void soma(){
static int i=0;i++;printf("i = %d \n",i);
}
Classe register
-
8/7/2019 material de apoio C
173/301
Classe register
A classe de armazenamento register indicaque a varivel associada deve ser guardadafisicamente numa memria de acesso
chamada registrador Um registrador da mquina um espao
onde podemos armazenar um int ou um char
Cada mquina oferece um certo nmero deregistradores que podem ser manuseadospelos usurios
Classe register
-
8/7/2019 material de apoio C
174/301
Classe register
Basicamente variveis register so usadaspara aumentar a velocidade de
processamento Fortes candidatas a este tratamento so asvariveis de laos
Segue a seguir um exemplo:
#include
void main(){
-
8/7/2019 material de apoio C
175/301
{int i, j;register int m,n;long t;
t = time(0);for(j=0;j
-
8/7/2019 material de apoio C
176/301
Entrada e Sada com cin e cout
Introduo
-
8/7/2019 material de apoio C
177/301
Introduo
Os objetos cin e cout so usados somenteem compiladores orientados a objetos
Esses objetos no funcionam quando ocompilador no suporta orientao a objetos
Se o compilador suporta orientao aobjetos necessrio incluir a biblioteca
cout
-
8/7/2019 material de apoio C
178/301
cout
O objeto cout est associado sada devideo
um dispositivo de sada que distingue otipo de dado
Portanto no necessrio declarar o tipo aser enviado a sada, como necessariamenteo , quando trabalhamos com o C
cout
-
8/7/2019 material de apoio C
179/301
cout
Sintaxe:
cout
-
8/7/2019 material de apoio C
180/301
e p o
#include #include #include
void main(){
cout
-
8/7/2019 material de apoio C
181/301
O objeto de dados cin um dispositivo queenvia o valor recebido para uma varivel
O objeto cin est associado ao teclado um dispositivo de entrada de dados que
distingue o tipo de dado
cin
-
8/7/2019 material de apoio C
182/301
Sintaxe:
cin >> Varivel
Exemplo
-
8/7/2019 material de apoio C
183/301
#include #include #include
void main(){
int numero;cout > numero;cout
-
8/7/2019 material de apoio C
184/301
Altere o programa feito para dizer se umnmero primo, de maneira que ele utilize
apenas os comandos cin e cout para entradae sada de dados
#include int primo(int numero);void main(){
int entrada;//printf("Digite um numero: ");
-
8/7/2019 material de apoio C
185/301
cout > entrada;if(primo(entrada))
//printf("\nNumero Primo");cout
-
8/7/2019 material de apoio C
186/301
Variveis Compostas
Homogneas
Introduo
-
8/7/2019 material de apoio C
187/301
Uma varivel do tipo composta homognea usada para representar uma certaquantidade de valores homogneos
Imagine o seguinte problema: Guardar na memria do computador 50 notas
de prova. Calcular e mostrar a mdia dessas
notas.
Introduo
-
8/7/2019 material de apoio C
188/301
Pelo que conhecemos at o momento dalinguagem C, a nica forma para resolvereste problema declararmos 50 variveis e
atribuir as 50 notas a essas variveis evidente que precisamos de outra maneira
para referenciar tais colees de dados
similares
Introduo
-
8/7/2019 material de apoio C
189/301
Para tanto, foi criado um novo conceito paraalocao de memria sendo, desta forma,tambm criado uma nova maneira de definirvariveis, a qual foi denominada de varivelindexada.
Introduo
-
8/7/2019 material de apoio C
190/301
Uma varivel indexada corresponde a umaseqncia de posies de memria, a qualdaremos nico Nome, sendo que cada umadestas pode ser acessada atravs do queconhecemos por ndice.
O ndice corresponde normalmente a um
valor nmerico
Introduo
-
8/7/2019 material de apoio C
191/301
Cada uma das posies de memria de umavarivel indexada pode receber valores nodecorrer do programa como se fosse umavarivel comum, a nica diferena reside nasintaxe de utilizao desta varivel.
Variveis Indexadas
-
8/7/2019 material de apoio C
192/301
Unidimensionais Tambm conhecida por Vetor
Unidimensional
Um vetor unidimensional aquele em que oacesso a um de seus componentes feitoatravs de um nico ndice
Declarando um VetorUnidimensional
-
8/7/2019 material de apoio C
193/301
Sintaxe:Tipo Nome[tamanho];
Onde: Tipo: Declara o tipo de dado que cadaelmento ir conter
Nome: Identificador do Vetor
Tamanho: Define quantos elementosconter o vetor
Referenciando Elementos do
-
8/7/2019 material de apoio C
194/301
Vetor Uma vez declarado o vetor, precisamos deum modo de referenciar seus elementosindividualmente
Isto feito atravs de um ndice entrecolchetes seguindo o nome do vetor
Vetor[ndice]
Referenciando Elementos do
-
8/7/2019 material de apoio C
195/301
Vetor Atribuindo valores as posies do vetorNomeVetor[ndice] = Valor;
Lendo valores do vetor
printf(%d,NomeVetor[ndice]);Variavel = NomeVetor[ndice];
Exemplo#define NUM_NOTAS 50
-
8/7/2019 material de apoio C
196/301
void main(){float nota[NUM_NOTAS];float soma=0;int i;for(i=0;i
-
8/7/2019 material de apoio C
197/301
Em C a inicializao de um vetor pode serfeita em tempo de compilao
Exemplo:
float nota[3] = {0,0,0};
Exerccio
-
8/7/2019 material de apoio C
198/301
Faa um programa que leia, via teclado, 200valores do tipo inteiro e os guarde namemria. Aps isso: Emita um relatrio com todos os nmeros pares
que voc leu.
Determine qual o menor e o maior nmero do
vetor Determine a somatria dos elementos do vetor
Soluo
-
8/7/2019 material de apoio C
199/301
int vetor[TAM];int i,soma=0,maior,menor;for(i=0;i
-
8/7/2019 material de apoio C
200/301
[ ];
menor = vetor[0];for(i=1;i maior)maior = vetor[i];
if(vetor[i] < menor)menor = vetor[i];
}printf("\nMaior = %d, Menor = %d",maior,menor);
printf("\nSomatoria: ");for(i=0;i
-
8/7/2019 material de apoio C
201/301
Faa um programa para ler uma seqnciade 40 notas e mostrar quais as notas maioresque a mdia dessas notas
-
8/7/2019 material de apoio C
202/301
Variveis Indexadas
-
8/7/2019 material de apoio C
203/301
Bidimensionais Tambm conhecida por Matriz
Um vetor bidimensional aquele em que o
acesso a um de seus componentes feitopor meio de dois ndices (comumentechamados de linha e coluna)
Declarando uma Matriz
Sintaxe:
-
8/7/2019 material de apoio C
204/301
Sintaxe:
Tipo NomeMatriz[QtdLinhas][QtdColunas];
Onde:
Tipo: Declara o tipo de dado que cadaelemento ir conter
NomeMatriz: Identificador da Matriz
QtdLinha e QtdColunas: Define quantoselementos conter a matriz (linha x coluna)
Referenciando Elementos da
-
8/7/2019 material de apoio C
205/301
Matriz Uma vez declarada a matriz, precisamos deum modo de referenciar seus elementosindividualmente
Isto feito atravs de dois ndices entrecolchetes seguindo o nome do vetor
Matriz[linha][coluna]
-
8/7/2019 material de apoio C
206/301
Exemplo#define TAM 3void main(){
-
8/7/2019 material de apoio C
207/301
int matriz[TAM][TAM];int linha, coluna;for(coluna=0;coluna
-
8/7/2019 material de apoio C
208/301
Em C a inicializao de uma matriz tambmpode ser feita em tempo de compilao
Exemplo:int matriz[3][3] = {{0,0,0},
{0,0,0},
{0,0,0}};
-
8/7/2019 material de apoio C
209/301
#define TAM 4void main(){
int matriz[TAM][TAM] = {{0,1,2,3},{1,0,1,2},{2,1,0,5},{3,2,5,0}};
int linha, coluna, simetrica=1;
-
8/7/2019 material de apoio C
210/301
for(linha=0;linha
-
8/7/2019 material de apoio C
211/301
Dada uma matriz 3x4, faa um programaque determine sua transposta e a imprima
Soluo#define TAML 3
-
8/7/2019 material de apoio C
212/301
#define TAML 3
#define TAMC 4void main(){
int matriz[TAML][TAMC] = {{0,1,2,3},{1,0,1,2},{2,1,0,5}};
int linha, coluna;for(coluna=0;coluna
-
8/7/2019 material de apoio C
213/301
Dadas duas matrizes 4x4, faa um programaque some as duas e gera uma terceira matrizcom o resultado.
-
8/7/2019 material de apoio C
214/301
Exerccio
-
8/7/2019 material de apoio C
215/301
Dadas duas matrizes de ordem 3x2 e 2x3,faa um programa que calcule o produtodessas matrizes e o imprima para o usurio.
Exemplo:
3 12 0
4 6
2 0 3
7 5 8
(3 * 2) + (1 * 7) (3 * 0) + (1 * 5) ...
(2 * 2) + (0 * 7)
void main(){
int m1[3][2] = {{0,1},{1,0},{2,1}};int m2[2][3] = {{0,1,2},{1,0,1}};int lm1 cm2 i r;
-
8/7/2019 material de apoio C
216/301
int lm1, cm2, i, r;
for(lm1=0;lm1
-
8/7/2019 material de apoio C
217/301
Dada uma matriz (NxN) de inteiros,construa um programa para solicitar umnmero do usurio e verifique se estenmero pertence a matriz
Vetores como Argumentos deFunes
-
8/7/2019 material de apoio C
218/301
Temos visto exemplos de passagem de
vrios tipos de variveis como argumentos
C permite tambm passar uma matriz parauma funo
Vejamos o seguinte exemplo:
int max(int vet[]);void main(){
int vetor[TAM];int i = 0;do
-
8/7/2019 material de apoio C
219/301
{printf("Entre com um numero: ");scanf("%d",&vetor[i]);i++;
}while(i
-
8/7/2019 material de apoio C
220/301
A parte crtica a ser considerada aqui
como foi passada a matriz para a funo
Para tanto, usa-se unicamente o nome damatriz
O nome de uma matriz desacompanhado decolchetes equivalente ao endereo damatriz
-
8/7/2019 material de apoio C
221/301
Exerccio
-
8/7/2019 material de apoio C
222/301
Construa uma funo em C para copiar umasub-string de uma string. A funo devepossuir os seguintes parmetros: String de origem
Posio para inicio da cpia
Quantidade de caracteres a serem copiados
String que conter a sub-string copiada
void substr(char str_origem[], int i, int qtdade, char sub_str[]);
void main(){
char str[10] = "Faculdade";
-
8/7/2019 material de apoio C
223/301
char parte_str[10];substr(str,0,2,parte_str);printf("%s",parte_str);getch();
}
void substr(char str_origem[], int i, int qtdade, char sub_str[]){
int nc;for(nc=0;nc
-
8/7/2019 material de apoio C
224/301
A passagem de uma matriz para uma funo
similar passagem de um vetor
O mtodo de passagem do endereo damatriz para a funo idntico, noimportando quantas dimenses tem amatriz, visto que sempre passamos o
endereo da matriz
Matrizes como Argumentos deFunes
-
8/7/2019 material de apoio C
225/301
Entretanto, a declarao da matriz na funo
diferente
necessrio informar o nmero de colunasda matriz que funo receber
void qualquer_funcao(int matriz[][TAMC])
{}
Exerccio
-
8/7/2019 material de apoio C
226/301
Construa uma funo para mostra atransposta de uma matriz (passe a matrizcomo argumento da funo)
Soluo
-
8/7/2019 material de apoio C
227/301
void transposta(int m_origem[][TAMC]){
int linha, coluna;for(coluna=0;coluna
-
8/7/2019 material de apoio C
228/301
Manipulao de Strings :Funes para Manipulao
A Funo strcmp()
-
8/7/2019 material de apoio C
229/301
Analisemos o seguinte problema:
Void main()
{char str_a[10], str_b[10];
if(str_a == str_b)printf(Iguais);
}
A Funo strcmp()
-
8/7/2019 material de apoio C
230/301
Este programa no trabalhar corretamente,pois str_a e str_b so endereos
Sendo assim, a expresso str_a == str_b nopergunta se as strings so iguais, mas sim seseus endereos so iguais
Uma comparao de strings deve sempre
ser feita por meio da funo strcmp()
A Funo strcmp()
-
8/7/2019 material de apoio C
231/301
A funo retorna 0 se as strings so iguais eoutro nmero qualquer caso contrrio
void main(){
char str_a[10]="teste", str_b[10]="teste";
if(strcmp(str_a,str_b) == 0)printf("Iguais");
getch();}
A Funo strcat()
-
8/7/2019 material de apoio C
232/301
A funo strcat() concatena duas strings,isto , junta uma string ao final de outra
Ela toma dois endereos de string comoargumento e copia a segunda string no finalda primeira e esta combinao gera umanova primeira string
A segunda string no alterada
A Funo strcat()
-
8/7/2019 material de apoio C
233/301
void main(){
char str_a[10]="Teste", str_b[10]=" de LPI";strcat(str_a,str_b);printf("%s",str_a);getch();
}
A Funo strcpy()
-
8/7/2019 material de apoio C
234/301
A funo strcpy() copia uma string em outrastring
void main(){
char str_a[10]="LPI", str_b[10];strcpy(str_b,str_a);
printf("%s",str_b);getch();}
Exerccio
-
8/7/2019 material de apoio C
235/301
Encontre no help do seu compilador C asfunes para tornar um texto todo em letrasminsculas e para tornar um texto todo emmaisculas. Aplique essas funes emalgum programa em C.
-
8/7/2019 material de apoio C
236/301
Soluo
-
8/7/2019 material de apoio C
237/301
int num_vogal(char v, char str[]){
int cont = 0, i;
for(i=0;i
-
8/7/2019 material de apoio C
238/301
Dado um vetor com 50 elementos inteiros,faa um programa que verifique se um dadovalor existe neste vetor. Use uma funoonde o retorno deve ser a posio donmero procurado no vetor ou 1 caso onmero no exista.
Soluo
-
8/7/2019 material de apoio C
239/301
int procura(int num, int vet[]){
int i;
for(i=0;i
-
8/7/2019 material de apoio C
240/301
Os Argumentos da Funomain()
-
8/7/2019 material de apoio C
241/301
argc e argv
-
8/7/2019 material de apoio C
242/301
Voc usa dois argumentos intrnsecos argv e argc para receber os argumentos dalinha de comando
Estes so os nicos argumentos que main()pode ter
O parmetro argc contm o nmero de
argumentos na linha de comando e uminteiro
argc e argv
-
8/7/2019 material de apoio C
243/301
Ele ser pelo menos 1, porque o nome doprograma se qualifica como o primeiroargumento
O parmetro argv um ponteiro para umvetor de strings
Assim sendo, todos os argumentos entrados
por linha de comando so consideradosstrings
Exemplo entrada.cpp
-
8/7/2019 material de apoio C
244/301
#include #include
int main(int argc, char *argv[]){
if(argc != 2)printf("Voce esqueceu de digitar seu nome!");
else printf("Hello, %s", argv[1]);getch();
}
argc e argv
-
8/7/2019 material de apoio C
245/301
Os argumentos passados para o programadevem ser separados por espaos
A linguagem C, no considera a vrgula, oponto-e-vrgula e outros como separadores
Exemplo soma.cpp
-
8/7/2019 material de apoio C
246/301
#include #include #include
int main(int argc, char *argv[]){
printf("%d", atoi(argv[1]) + atoi(argv[2]));getch();
}
-
8/7/2019 material de apoio C
247/301
-
8/7/2019 material de apoio C
248/301
Exerccio
-
8/7/2019 material de apoio C
249/301
Construa um programa que receba a entradade um nmero passado como argumento ecalcule o fatorial deste nmero
Soluo#include
void main(int argc char *argv[])
-
8/7/2019 material de apoio C
250/301
void main(int argc, char *argv[]){
if(argc < 2)printf("Voce esqueceu o numero!");
else{
int resultado = 1, n;n = atoi(argv[1]);while(n > 0){
resultado = resultado * n;n--;
}printf("O fatorial eh igual a %d",resultado);}getch();
}
Exerccio
-
8/7/2019 material de apoio C
251/301
Construa um programa que receba a entradade uma string passada como argumento emostre o nmero de vogais existentes na
string
Soluovoid main(int argc, char *argv[]){
int i cont=0;
-
8/7/2019 material de apoio C
252/301
int i, cont=0;for(i=0;i
-
8/7/2019 material de apoio C
253/301
Operaes com Arquivos emDisco
Introduo
-
8/7/2019 material de apoio C
254/301
Operaes em discos so executadas ementidades chamadas arquivos
Um arquivo uma coleo de bytesreferenciados por um nome nico
O acesso ao arquivo (leitura ou gravao)pode ser feito tanto em modo texto como
binrio
Introduo C oferece um pacote de funes de biblioteca que
it i d t d
-
8/7/2019 material de apoio C
255/301
nos permite acessar arquivos de quatro modosdiferentes
CARACTERE (modo texto): getc() e putc()
STRING (modo texto): fgets() e fputs()
FORMATADA (modo texto): fscanf() e fprintf()
REGISTRO (modo binrio): fread() e fwrite()
-
8/7/2019 material de apoio C
256/301
-
8/7/2019 material de apoio C
257/301
-
8/7/2019 material de apoio C
258/301
A Funo fopen()
A funo fopen() utilizada para abrir umarq i o do disco (carregar a estr t ra FILE)
-
8/7/2019 material de apoio C
259/301
arquivo do disco (carregar a estrutura FILE) Ela retorna um ponteiro para a estrutura
FILE
A funo fopen() possui como primeiroparmetro uma string que indica o caminhoe nome do arquivo a ser aberto
O segundo parmetro da funo fopen() omodo que arquivo ser aberto (veja os tipospossveis no slide seguinte)
A Funo fopen()
M d b t d i
-
8/7/2019 material de apoio C
260/301
Modos para abertura de arquivo: r : Abrir um arquivo texto para leitura. O arquivo
deve estar presente no disco. w : Abrir um arquivo texto para gravao. Se o
arquivo estiver presente ele ser destrudo ereinicializado. Se no existir, ele ser criado.
a : Abrir um arquivo texto para gravao. Os dadossero adicionados ao fim do arquivo existente, ou umnovo arquivo ser criado.
r+, w+ e a+ : Como a descrio dos anteriores,porm ambas, leitura ou gravao podem ser utilizadas
A Funo fopen()
l
-
8/7/2019 material de apoio C
261/301
Exemplo:
FILE *fptr;fptr = fopen(arq.txt,w);
A Funo fclose()
Q d i
-
8/7/2019 material de apoio C
262/301
Quando terminamos as operaes em umarquivo precisamos fech-lo
Fechar um arquivo provoca dois efeitos:Qualquer coisa que permanece no buffer
gravada
Libera a estrutura FILE para que seja utilizada
para abertura de outro arquivo
A Funo fclose()
E l
-
8/7/2019 material de apoio C
263/301
Exemplo:
FILE *fptr;fptr = fopen(arq.txt,w);// Operaes com o arquivofclose(fptr);
-
8/7/2019 material de apoio C
264/301
Operaes com Arquivos emDisco
Gravando e Lendo um ArquivoCaractere a Caractere
Exemplo
#include
-
8/7/2019 material de apoio C
265/301
#include #include
void main()
{ FILE *fptr;char ch;fptr = fopen("arqtext.txt","w");while((ch=getche()) != '\r')
putc(ch,fptr);fclose(fptr);
}
A Funo putc()
A f t () t
-
8/7/2019 material de apoio C
266/301
A funo putc() grava um caractere em umarquivo
No exemplo, putc() toma um caractere(desde que este no seja o ) e ograva no arquivo cuja estrutura FILE apontada por fptr (ponteiro para o arquivo)
Exemplo
#include #include
-
8/7/2019 material de apoio C
267/301
#include conio.h#include
void main(){
FILE *fptr;int ch;fptr = fopen("arqtext.txt","r");while((ch=getc(fptr)) != EOF)
printf("%c",ch);fclose(fptr);getch();
}
-
8/7/2019 material de apoio C
268/301
Exerccio
C t t
-
8/7/2019 material de apoio C
269/301
Construa um programa que conte aquantidade de caracteres do interior de umaarquivo texto
Soluo#include
#include
-
8/7/2019 material de apoio C
270/301
#
void main(){
FILE *fptr;int cont=0;fptr = fopen("arqtext.txt","r");while(getc(fptr) != EOF)
cont++;
fclose(fptr);printf("%d",cont);getch();
}
Exerccio
Complemente o programa anterior para
-
8/7/2019 material de apoio C
271/301
Complemente o programa anterior paracontar apenas as vogais
Soluovoid main(){
FILE *fptr;int ch, cont=0;
-
8/7/2019 material de apoio C
272/301
int ch, cont 0;fptr = fopen("arqtext.txt","r");while((ch = getc(fptr)) != EOF)
switch (ch){
case 'a' : {cont++;break;}case 'e' : {cont++;break;}case 'i' : {cont++;break;}case 'o' : {cont++;break;}case 'u' : {cont++;break;}
}fclose(fptr);printf("%d",cont);getch();
}
-
8/7/2019 material de apoio C
273/301
Operaes com Arquivos emDisco
Gravando e Lendo um Arquivo Linhaa Linha
Exemplo#include
#include #include
-
8/7/2019 material de apoio C
274/301
#include
void main(){
FILE *fptr;char string[51];fptr = fopen("arqtext.txt","w");while(strlen(gets(string))>0){
fputs(string,fptr);
fputs("\n",fptr);}fclose(fptr);
}
A Funo fputs()
A funo fputs() grava uma string em um
-
8/7/2019 material de apoio C
275/301
A funo fputs() grava uma string em umarquivo
No exemplo, fputs() grava o contedo davarivel string no arquivo que apontadopor fptr (ponteiro para o arquivo)
Vale ressaltar que a funo fputs() no
coloca, automaticamente, o caractere denova-linha no fim de cada linha
Exemplo
#include
#include #include
-
8/7/2019 material de apoio C
276/301
#include
void main(){
FILE *fptr;char string[51];fptr = fopen("arqtext.txt","r");while(fgets(string,51,fptr) != NULL)
printf("%s",string);fclose(fptr);getch();
}
A Funo fgets()
A funo fgets() o complemento de
-
8/7/2019 material de apoio C
277/301
A funo fgets() o complemento defputs(), isto , fgets() l uma linha por vezde um arquivo texto
No exemplo, fgets() faz a leitura de umastring, do arquivo texto, de tamanho 51 eadiciona o contedo na varivel string
fgets() retorna NULL quando chega ao finaldo arquivo
A Funo fgets()
A funo fgets() inclui o caractere de nova
-
8/7/2019 material de apoio C
278/301
A funo fgets() inclui o caractere de novalinha e o caractere de fim de string ao finalda string
-
8/7/2019 material de apoio C
279/301
Operaes com Arquivos emDisco
Gravando um Arquivo de FormaFormatada
Exemplovoid main()
{ FILE *fptr;
-
8/7/2019 material de apoio C
280/301
char titulo[51];float preco;fptr = fopen("arqtext.txt","w");do
{printf("\nDigite o titulo e preco: ");scanf("%s %f",titulo,&preco);fprintf(fptr,"%s %f",titulo,preco);printf("Continua s/n");
} while (getche()!= 'n');fclose(fptr);}
A Funo fprintf()
Com a funo fprintf() torna-se possvel
formatar dados de vrias maneiras,i l i l d i l
-
8/7/2019 material de apoio C
281/301
formatar dados de vrias maneiras,inclusive escrever um valor de uma varivelnumrica em um arquivo
No exemplo, fprintf() foi utilizada paraescrever no arquivo o contedo de duasvariveis, uma do tipo string e outra do tipofloat
fprintf() assemelha-se muito a funoprintf()
A Funo fprintf()
Vale ressaltar que os dados escritos por
-
8/7/2019 material de apoio C
282/301
Vale ressaltar que os dados escritos porfprintf() so todos (independente do tipo)gravados como caracteres
Exemplo
void main()
-
8/7/2019 material de apoio C
283/301
void main(){
FILE *fptr;char titulo[51];
float preco;fptr = fopen("arqtext.txt","r");while(fscanf(fptr,"%s %f",titulo,&preco) != EOF)
printf("%s %f \n",titulo,preco);fclose(fptr);getch();
}
-
8/7/2019 material de apoio C
284/301
-
8/7/2019 material de apoio C
285/301
Soluo
void main(){
-
8/7/2019 material de apoio C
286/301
FILE *fptr;char string[61];int cont=0;fptr = fopen("arqtext.txt","r");
while(fgets(string,61,fptr) != NULL){
cont++;printf("%s",string);
}fclose(fptr);printf("\nNumero Linhas = %d",cont);getch();
}
O A i
-
8/7/2019 material de apoio C
287/301
Operaes com Arquivos emDisco
Gravando um Arquivo na FormaRegistro
Introduo
Ns j vimos como nmeros podem ser
-
8/7/2019 material de apoio C
288/301
Ns j vimos como nmeros podem sergravados usando as funes de leitura egravao formatada: fscanf() e fprintf()
Entretanto, guardar nmeros nos formatosoferecidos por estas funes pode tomar umgrande espao em disco, pois cada dgito
armazenado como um caractere
Introduo
Estas funes apresentam ainda um outro
-
8/7/2019 material de apoio C
289/301
Estas funes apresentam ainda um outroproblema: no a maneira direta de ler eescrever tipos de dados complexos como
vetores, matrizes e estruturas Matrizes e estruturas so manuseadas
ineficientemente escrevendo cada elemento
da matriz um por vez
Introduo
O modo registro grava nmeros em
-
8/7/2019 material de apoio C
290/301
g garquivos em disco no formato binrio
Dessa forma, inteiros so gravados em dois
bytes, nmeros em ponto flutuante emquatro bytes, etc Tambm: vetores, matrizes e estruturas
podem ser gravadas com uma simplesinstruo
void main(){
struct {char titulo[30];int codigo;float preco;
} livro;
char numstr[81];
-
8/7/2019 material de apoio C
291/301
char numstr[81];FILE *fptr;fptr = fopen("livros.dat","wb");do{
printf("\nDigite o titulo: ");
gets(livro.titulo);printf("\nDigite o codigo: ");gets(numstr);livro.codigo = atoi(numstr);printf("\nDigite o preco: ");gets(numstr);livro.preco = atof(numstr);fwrite(&livro,sizeof(livro),1,fptr);printf("\nOutro livro (s/n)?");
}while(getche() == 's');fclose(fptr);
}
A Funo fwrite() A funo fwrite() toma 4 argumentos
O primeiro o endereo do dado (estrutura)
-
8/7/2019 material de apoio C
292/301
p ( )a ser gravado
O segundo argumento um nmero inteiro
que indica o tamanho do tipo de dado a sergravado O terceiro argumento um nmero inteiro
que informa a fwrite() quantos itens do
mesmo tipo sero gravados O quarto o ponteiro para a estrutura FILE
void main(){
struct {char titulo[30];int codigo;
float preco;} livro;
-
8/7/2019 material de apoio C
293/301
char numstr[81];FILE *fptr;fptr = fopen("livros.dat","rb");
while(fread(&livro,sizeof(livro),1,fptr) == 1){
printf("\nTitulo: %s",livro.titulo);printf("\nCodigo: %d",livro.codigo);printf("\nPreco: %f \n",livro.preco);
}fclose(fptr);getch();
}
A Funo fread()
A funo fread() toma 4 argumentos
-
8/7/2019 material de apoio C
294/301
() g O primeiro o endereo para o qual os
dados lidos sero armazenados
O segundo indica a quantidade de bytes dotipo de dado a ser lido
O terceiro indica a quantidade de itens aserem lidos
O quarto o ponteiro para a estrutura FILE
Exerccio
Faa um programa para ler do teclado uma
-
8/7/2019 material de apoio C
295/301
p g pmatriz de dimenso (5x5) e gravar ela emum arquivo
void main(){
int matriz[5][5];int l,c;FILE *fptr;fptr fopen("matriz dat" "wb");
-
8/7/2019 material de apoio C
296/301
fptr = fopen("matriz.dat","wb");for(l=0;l
-
8/7/2019 material de apoio C
297/301
q gexerccio anterior
void main(){
int matriz[5][5];int l,c;FILE *fptr;fptr = fopen("matriz.dat","rb");fread(matriz sizeof(matriz) 1 fptr);
-
8/7/2019 material de apoio C
298/301
fread(matriz,sizeof(matriz),1,fptr);for(l=0;l
-
8/7/2019 material de apoio C
299/301
Cuidados ao Abrir Arquivos
PorQue um Arquivo Pode NoSer Aberto ?
Razes:
-
8/7/2019 material de apoio C
300/301
No exista mais espao em disco
Arquivo no exista (caso da leitura)
Para tratar isso deve-se verificar o retornoda funo fopen()
Se o arquivo no pode ser aberto, a funo
fopen() devolve o valor NULL
Exemplo
void main(){
-
8/7/2019 material de apoio C
301/301
{FILE *fptr;if( (fptr = fopen("matriz.dat","rb")) == NULL){
printf("ERRO ao abrir o arquivo! ");getch();exit(0);
top related