Você está na página 1de 18

1 Fonteparaconsultarpida:http://www.cplusplus.

com/reference/clibrary/

1. Funes de entrada/sada em C
Paraafunodeentradascanfedesadaprintfosseguintecdigossonecessrios paraformataraentradasada.

Cdigo Tipo d o x ld u lu c s f e lf le int int int long unsigned char char pointer float float double double

Descrio Decimal (base 10) Nmero octal (base 8) Nmero hexadecimal Nmero decimal longo Nmero decimal no sinalizado Caractere nico String de caracteres/frase Nmero real (o separador de casas decimais o ponto) Nmero real (o separador de casas decimais o ponto), notao cientfica Nmero real longo (o separador de casas decimais o ponto), preciso entendida Nmero rela longo (o separador de casas decimais o ponto), notao cientfica

unsigned long Nmero decimal longo no sinalizado

Obs:oscanf("%c",&letra),funcionademaneiraanlogaaocin.get(),istoslumcaractere apsoenter.Paralersomenteumcaracteredoteclauseogetch().

1.1 Exemplo: Leitura de caractere e impresso de ASCII


#include <stdio.h> #include <conio.h> void main() { char a, letra; do { printf("\nEntre com o caractere:"); scanf ("%c",&a); fflush(stdin); //limpa o enter que ficou no teclado printf("\nO codigo ASCII em hexadecimal da letra %c eh %x \t", a, a); printf("\nO codigo ASCII em decimal da letra %c eh %d \t", a, a ); printf("\n Digite s para sair"); letra = getch(); }while( letra != 's'); }

1.2 Leitura de Float e impresso em notao cintfica


#include <stdio.h> #include <conio.h> void main() { char letra; float a; do {

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

2
printf("\nEntre com o numero:"); scanf ("%f",&a); fflush(stdin); printf("\nO numero %.2f em notacao cientifica eh %.0e \t", a, a); printf("\n Digite s para sair"); letra = getch(); }while( letra != 's'); }

1.3 Leitura de inteiro e e impresso em hexadecimal e octal


#include <stdio.h> #include <conio.h> void main() { char letra; int a; do { printf("\nEntre com o numero:"); scanf ("%d",&a); fflush(stdin); printf("\nO numero em hexadecimal do valor %d eh %x \t", a, a); printf("\nO numero em em octal do valor %d eh %o \t", a, a ); printf("\n Digite s para sair"); letra = getch(); }while( letra != 's'); }

1.4 Exerccio: com base no programa feito em C++ para o fluxograma abaixo altereo para que execute em C apenas.
Get(n) Inteiro numero = 0, Caractere tecla = t

Print digite o caractere para compor o nmero, backspace ou s para sair:

get(tecla)

tecla = tecla 48 numero = numero * 10 + tecla

sim

(0 tecla 9) ? sim no

numero = numero / 10

sim

(tecla == 08)?

no

(tecla != s)?

no

Print o nmero eh:, numero

Fim get

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

2 Strings
Stringumvetordecaracteresqueterminacomcaracterenulo'\0',noumtiposuportado pelalinguagemC. 2.1

Exemplo de string

#include <stdio.h> #include <stdlib.h> #include <conio.h> void main() { char frase[7] = char frase1[] = char frase2[] = printf ("%s\n", printf ("%s\n", printf ("%s\n", getch(); }

"string"; //neste caso o compilador insere o '\0' "string com numero de elemento autodefinida"; {'s','t','r','i','n','g','\0'};//neste caso necessrio o '\0' frase); frase1); frase2);

2.2

Leitura/impresso de string

2.2.1 Com scanf/printf


#include <stdio.h> #include <stdlib.h> void main() { char i, frase[256]; printf ("Entre com a frase\n"); scanf ("%s", &frase[0]); //s l at o primeiro espao (ou enter) printf ("A frase lida eh: %s \n", frase); printf ("O valor de cada caractere em hexa eh: \n"); for (i = 0; ; i++) { printf("%x ",frase[i]); if(frase[i] == '\0') { printf("\n"); break; } } }

2.2.2 Com gets/puts


#include <stdio.h> #include <stdlib.h> void main() { char i, frase[256]; printf ("Entre com a frase\n"); gets(frase); //l a frase at o enter, independemente de espaos puts("A frase lida eh:");//imprime uma frase nica e pula linha puts(frase); puts ("O valor de cada caractere em hexa eh:"); for (i = 0; ; i++) { printf("%x ",frase[i]); if(frase[i] == '\0') { printf("\n"); break; } } }

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

4 2.3

Comparando de strings (strcmp)

#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char frase1[256], frase2[256]; printf ("Entre com a frase 1\n"); gets(frase1); printf ("Entre com a frase 2\n"); gets(frase2); //a comparao feita caractere a caractere, observando o cdigo ASCII na operao, //portanto, sendo o ASCII de uma posio maior que a outra, strcmp retornar valor > 0 if (strcmp(frase1,frase2) == 0) puts ("A frase 1 IGUAL a Frase 2"); else if (strcmp(frase1,frase2) > 0) puts ("A frase 1 eh MAIOR que a Frase 2"); else puts ("A frase 1 eh MENOR que a Frase 2"); }

2.4

Concatenado (strcat) e identificando o tamanho (strlen) de strings

#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char i, frase1[256], frase2[128]; printf ("Entre com a frase 1: "); gets(frase1); printf ("\nEntre com a frase 2: "); gets(frase2); puts ("\nO valor de cada caractere de frase1 em hexa eh:"); //strlen no conta o '\0' no tamanho da string for (i = 0; i < strlen(frase1)+1; i++) printf("%x ",frase1[i]); printf("\n"); puts ("\nO valor de cada caractere de frase2 em hexa eh:"); for (i = 0; i < strlen(frase2)+1 ; i++) //strlen no conta o '\0' printf("%x ",frase2[i]); printf("\n"); strcat(frase1,frase2); puts ("\nA frase concatenada eh:"); puts (frase1); puts ("\nO valor de cada caractere de frase concatenada em hexa eh:"); for (i = 0; i < strlen(frase1)+1 ; i++) //strlen no conta o '\0' printf("%x ",frase1[i]); printf("\n"); }

2.5

Copiando (strcpy) strings

#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char i, frase1[256], frase2[128]; printf ("Entre com a frase 1: "); gets(frase1); printf ("\nEntre com a frase 2: "); gets(frase2);

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

puts ("\nO valor de cada caractere de frase1 em hexa eh:"); for (i = 0; i < strlen(frase1)+1; i++)//strlen no conta o \0 printf("%x ",frase1[i]); printf("\n"); puts ("\nO endereco de cada caractere de frase1 em hexa eh:"); for (i = 0; i < strlen(frase1)+1; i++)//strlen no conta o \0 printf("%u ",&frase1[i]); printf("\n"); puts ("\nO valor de cada caractere de frase2 em hexa eh:"); for (i = 0; i < strlen(frase2)+1 ; i++) //strlen no conta o \0 printf("%x ",frase2[i]); printf("\n"); printf ("\no endereco da concatenacao eh: %u\n", &frase1[strlen(frase1)]); //strcpy substitui o primeiro string pelo segundo strcpy(&frase1[strlen(frase1)],frase2); //implementao do strcat, usando strcpy puts ("\nA frase concatenada eh:"); puts (frase1); puts ("\nO valor de cada caractere de frase concatenada em hexa eh:"); for (i = 0; i < strlen(frase1)+1 ; i++) //strlen no conta o \0 printf("%x ",frase1[i]); printf("\n"); }

2.6 Exerccio Escreva um programa em C que coloque em ordem crescente de tamanho uma matriz com 10 linhas e suas colunas de strings de no mximo 32 caracteres.
#include #include #include #include <stdio.h> <stdlib.h> <string.h> <conio.h>

#define linhas 10 void main() { char i,j, auxmatriz[32], matriz[linhas][32]; for (i=0;i<linhas;i++) { printf("\nEntre com a frase [%d]:",i+1); gets (&matriz[i][0]); } for(j=linhas -1;j>0;j--) { for (i=0;i<j;i++) { //o & representa o endereo da varivel if(strlen(&matriz[i][0]) > strlen(&matriz[i+1][0])) { strcpy(&auxmatriz[0],&matriz[i][0]); strcpy(&matriz[i][0],&matriz[i+1][0]); strcpy(&matriz[i+1][0],&auxmatriz[0]); } } } for (i=0;i<linhas;i++) { printf("\nA matriz ordenada eh:%s",&matriz[i][0]); } getch(); }

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

6 2.7

Convertendo string em valores numricos


<stdio.h> <stdlib.h> <string.h> <conio.h>

2.7.1 converso de string em inteiro (atoi)


#include #include #include #include

void main() { char stringNumero[] = "12345"; int numero; numero = atoi(stringNumero); numero*=10; printf("\nO numero multiplicado por 10 eh: %u",numero); getch(); }

2.7.2 converso de string em nmero real (atof)


#include #include #include #include <stdio.h> <stdlib.h> <string.h> <conio.h>

void main() { char stringNumero[] = "3.1415926535"; float numero; numero = atof(stringNumero); numero*=10; printf("\nO numero multiplicado por 10 eh: %f",numero); getch(); }

2.7.3 converso de inteiro em string (itoa)


#include #include #include #include <stdio.h> <stdlib.h> <string.h> <conio.h>

void main() { char stringNumero[10]; int numero; printf("digite o valor:"); scanf("%d",&numero); //converte o valor de nmero em string, neste caso, base 2 (binrio) itoa(numero,stringNumero,2); printf("\nO numero %d em binrio eh: %s",numero,stringNumero); getch(); }

2.7.4 Mudana para maiscula ou minscula


#include <stdio.h> #include <ctype.h> #include <conio.h> void main() { char i=0,frase[] = "CaracTeres MistuRADos"; do { //o incremento do i feito aps a atribuio frase[i++] = tolower (frase[i]); //tolower coloca todos os caracteres em minusculo }while(frase[i] != '\0'); printf("\nA frase em letras minusculas eh: %s",frase); getch();

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

7
i=0; do { //o incremento do i feito aps a atribuio frase[i++] = toupper (frase[i]); //toupper coloca todos os caracteres em maiuscula }while(frase[i]!= '\0'); printf("\nA frase em letras maiusculas eh: %s",frase); getch(); }

3 Ponteiros
At agora fazamos referncia as posies/clulas da memria atravs do nome da mesma. Assimnotivemosquenospreocuparcomalocalizaofsicadosdadosnamemria.Porm, osdadosnamemriadeumcomputadorsocomoumvetor(array)debytes,assimpossvel localizar facilmente uma posio do vetor ou celular de memria, pois cada byte tem um endereonico. 3.1 Exemplo com variveis e endereos charx=10,y; char*z; y=x;//yrecebeocontedodex=10 z=&x;//zrecebeoendereodex=3045 Nomedavarivel Contedodamemria 3043 Endereodememria 10 Contedodamemria y Nomedavarivel 3.2

x 10
3045


3047

3045 z

Exemplo com Strings

#include <stdio.h> #include <stdlib.h> void main() { char s[100]; char *ps; printf ("\nDigite uma frase\n"); gets(s); ps = s; while (*ps != '\0') ps++; ps--; printf ("\nImprimindo caractere a caractere de tras para frente\n"); while (ps >= s) { putchar(*ps); ps--; } printf ("\nPS aponta para:%s\n",ps); }

3.3

Exerccio
1. EscrevaumprogramaemCqueusandoponteiroimplementeafunoequivalenteao strlen.

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

8 2. EscrevaumprogramaemCqueusandoponteirosimplementeafunaoequivalente aostrcpy.

4 Funes
So blocos de programa destinadas a um mesmo fim que permitem subdividir as funcionalidades de cada segmento do programa em C. A esta tarefa de separao das funcionalidades de um programa chamamos modularizao separao do problema em subproblemas(mdulo). 4.1 Formato geral de uma funo tiporetornadopelafunonomedafuno(listadeparmetros) { //corpodafuno:comandos,funesdebiblioteca,estruturasdecontrole,... } 4.2

Exemplo, mostrando escopo de variveis (global e local)

4.2.1.1 funo com variveis locais descartveis


#include <stdio.h> #include <conio.h> int soma = 10; //varivel de escopo global - vista em todo o programa int add (int x, int y);//prottipo de funo void main() { soma = add (10,20); printf("A soma eh: %d",soma); getch(); } int add (int x, int y) { int soma; //est varivel de escopo local - s existe internamente a esta funo soma = x + y; //uma varivel com o mesmo nome de uma global, dentro de uma // funo, sobrepe a global dentro da funo return soma; }

4.2.1.2 funo com variveis locais preservadas (static) em chamadas consecutivas


#include <stdio.h> #include <conio.h> int soma = 10; int add (int x, int y); void main() { int i; for (i=0;i<3;i++) soma = add (10,20); printf("A soma eh: %d",soma); getch(); } int add (int x, int y) { int static soma; //com o uso de static a funo preserva o valor anterior //de uma varivel local soma = soma + (x + y); return soma; }

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

9 4.2.2 Argumentos de uma funo Osargumentossoosparmetrospassadosparaumafuno.Achamadadafunopode passarparmetrosporvaloroureferncia. 4.2.2.1 chamada de funo por valor
#include <stdio.h> #include <conio.h> int pow2 (int x); void main() { int numero, numeroQuad; printf("Entre com o valor a ser quadrado:"); scanf("%d", &numero); numeroQuad = pow2 (numero); // passada varivel como parmetro printf("\n o quadrado numero %d eh %d",numero, numeroQuad); getch(); } int pow2 (int x) { return (x*x); }

4.2.2.2 chamada de funo por referncia


#include <stdio.h> #include <conio.h> void trocaValores (int *x, int *y); void main() { int numero1, numero2; printf("\nEntre com o valor 1:"); scanf("%d", &numero1); printf("\nEntre com o valor 2:"); scanf("%d", &numero2); trocaValores(&numero1,&numero2); printf("\n o valor para numero1 eh %d e para numero2 eh %d",numero1, numero2); getch(); } void trocaValores (int *x, int *y) { int aux; aux = *x; *x = *y; //observe que a alterao no aocntece em //mas no endereo apontado por x, no caso *y = aux; //observe que a alterao no aocntece em //mas no endereo apontado por y, no caso }

x, &numero1 y, &numero2

4.2.3 Funes que retornam valor Seosparmetrosdafunosopassadosporvaloreprocessamentodafunoproduzvalores que precisam ser repassados ao chamador, isto feito retornando o resultado do processamentoatravsdacodificaodoreturn.Hnecessidadedeterocuidadoqueotipo retornadopelafunosejacompatvelcomodadoretornadoemreturn. H funes que no retornam nenhum valor, neste caso no deve ser codificado o returneotiporetornadopelafunodeveservoid. 4.2.4 Exerccio 1. EscrevaumprogramaemCqueleiadoisnmeroseusandofunodescubraqualo maior. 2. EscrevaumprogramaemCqueleiaumnmeroeusandofunodescubraqualeste epositivoounegativo.

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

10 3. Escreva um programa em C que leia um nmero do tipo byte e usando funo descubraseprimoouno. 4. Escreva um programa em C que usando funo descubra todos os nmeros primos entre0e300. 5. EscrevaumprogramaemCqueleiadoisnmeroscomostring,umnumerorealeum inteiro,convertaoparavaloresnumricoseosmultipliqueusandoumafuno. 6. Escreva um programa em C que leia a altura e a massa (peso) de um individuo e usandoumafunocalculeseindicedeMassaCorporal(IMC).OIMCcalculadoda seguintemaneira:IMC= massa/altura2.Depois,combasena tabelaabaixoeusando outrafunooprogramadedeveinformaraclassificaodosujeito.
IMC <18,5 Classificao Magreza

18,524,9 Saudvel 25,029,9 Sobrepeso 30,034,9 ObesidadeGrauI 35,039,9 ObesidadeGrauII(severa) 40,0 ObesidadeGrauIII(morbida)

7. EscrevaumprogramaemCqueusandoumafunocomumsparmetrocalculea mdiaaritmticadequantosvaloresousuriodesejar. 8. EscrevaumprogramaemCqueusandoumafunocomumsparmetroarmazeneo valormximoeomnimodequalquerquantidadedevaloresfornecidospelousurio. Afunodevedevolveromximoseonmerofornecidoestmaisprximodomaior ou o mnimo se o valor fornecido estiver mais prximo do menor. Ao fim do processamentodevemserimpressososvaloresmximoemnimo. 9. Escreva um programa em C que usando uma funo com dois parmetros passados por referncia armazene o valor mximo e o mnimo de qualquer quantidade de valores fornecidos pelo usurio. Ao fim do processamento devem ser impressos os valoresmximoemnimo. 4.3

Exemplo Ponteiro e funo com vetores


Inicializao usando funo (passagem de parmetros por referncia)

#include <stdio.h> void inicializaVet( int vet[5]); void main(void) { int x[5],i; inicializaVet(x); for ( i=0; i<5; i++) printf("\nvet[%d] = %d",i+1,x[i]); } void inicializaVet( int vet[5]) { int i; for ( i=0; i<5; i++) { printf("\nEntre com a posicao %d do vetor:",i+1); scanf("%d",&vet[i]); } }

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

11
operando com vetores atravs de funes (passagem de parmetros por referncia)

#include <stdio.h> int maximo( int vet[5] ); void main(void) { int x[] = {1,3,4,18,12}; printf("o Valor mximo %d", maximo(x)); } int maximo(int vet[5])//passagem de parmetro por referncia { int max=vet[0]; for (int i=1; i<5; i++) if (vet[i]>max) max = vet[i]; return max; }

1. Escreva um programa em C que usando uma funo com dois parmetro passados por referncia (explicita) e um por referncia (implcita), ordene a cada iterao 2 valores "retornados"porumafunoqueaplicaummtodoadaptadodoalgoritmobolha.Aofim doprocessamentodeveserimpressoovetorordenadoemordemcrescente.Observeque onmerodetrocasdecrescesignificativamentenestecaso.
#include<stdio.h> #include<conio.h> #define MaxElementos 10 void ordenaminvet(int vet1[MaxElementos],int ic,int jc,int *Rmin); void ordenamaxvet(int vet1[MaxElementos],int ic,int jc, int *Rmax); void main(void) { int j=MaxElementos-1,Rmax=0,Rmin=0,aux,vet[MaxElementos]={12,32,55,66,44,34,87,87,13,5}; for(int i=0;i<j;i++,j--) { ordenaminvet(vet,i,j,&Rmin); aux=vet[i]; vet[i]=vet[Rmin]; vet[Rmin]=aux; ordenamaxvet(vet,i,j,&Rmax); aux=vet[j]; vet[j]=vet[Rmax]; vet[Rmax]=aux; } printf("\n o vetor ordenado decrescentemente eh: "); for(int i=0;i<MaxElementos;i++) { printf("\n vet[%d]=%d",i+1,vet[i]); } getch(); } void ordenaminvet(int vet1[MaxElementos],int ic,int jc,int *Rmin) { int imin=ic; for(int i=ic;i<=jc;i++) { if(vet1[i]<vet1[imin]) imin=i; } *Rmin=imin; } void ordenamaxvet(int vet1[MaxElementos],int ic,int jc, int *Rmax) { int imax=ic; for(int i=ic;i<=jc;i++) {

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

12
if(vet1[i]>vet1[imax]) imax=i; } *Rmax=imax; }

4.4

Exemplo Ponteiro e funo com matrizes


Inicializao usando funo (passagem de parmetros por referncia)

#include <stdio.h> void inicializaMat( int mat[2][2]); void main(void) { int x[2][2],i,j; inicializaMat(x); for ( i=0; i<2; i++) for ( j=0; j<2;j++) printf("\nmat[%d][%d] = %d",i+1,j+1,x[i][j]); } void inicializaMat( int mat[2][2]) { int i,j; for ( i=0; i<2; i++) for ( j=0; j<2;j++) { printf("\nEntre com a posicao mat[%d][%d] = ",i+1,j+1); scanf("%d",&mat[i][j]); } }

multiplicando matrizes atravs de funes (passagem de parmetros por referncia)

#include <stdio.h> void multiplicamat( int mat1[2][2], int mat2[2][2], int mat3[2][2]); void main(void) { int x1[2][2] = {{1,2},{1,2}}, x2[2][2] = {{1,2},{1,2}}, x3[2][2] = {{0,0},{0,0}}; multiplicamat(x1,x2,x3); //passagem de parmetro por referncia printf("\nResultado da multiplicao:"); for (int i=0; i<2; i++) for (int j=0; j<2;j++) printf("\nmat[%d][%d] = %d",i+1,j+1,x3[i][j]); } void multiplicamat( int mat1[2][2],int mat2[2][2], int mat3[2][2]) { for (int i=0; i<2; i++) for (int j=0; j<2;j++) for (int k=0; k<2; k++) mat3[i][j] = mat3[i][j] + mat1[i][k] * mat2[k][j]; }

5 Estruturas
Uma estrutura um conjunto heterogeneo de dados agrupados sob o mesmo nome. Uma estrutura difere de um vetor, por exemplo, porque no vetor todos os dados agrupados so do mesmo tipo. Estruturas so declaradas em C da seguinte forma: struct nome_da_estrutura { tipo campo1; tipo campo2;

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

13

tipo campo3; };
Na prtica numa estrutura se usa tipos conhecidos (entre os colchetes) para definir num novo tipo, a estrutura. 5.1

Exemplo

5.1.1 multiplas variveis


#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; void main () { Filme meu, seu; //multiplas variveis do tipo Filme printf("\nEntre com titulo do meu filme: "); gets(meu.titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&meu.ano); fflush(stdin); printf("\nEntre com titulo do seu filme: "); gets(seu.titulo); printf("\nEntre com o ano do seu filme: "); scanf("%d",&seu.ano); fflush(stdin); printf("\nMEU filme favorito : %s do ano de %d", meu.titulo, meu.ano); }

5.1.2 com vetor


#include <stdio.h> #include <stdlib.h> #include <string.h> #define volumes 10 struct Filme { char titulo[64]; int ano; }; void main () { Filme videoteca[volumes]; //vetor de estruturas for (int i=0;i<volumes;i++) { printf("\Entre com titulo do filme %d:",i+1); gets(videoteca[i].titulo); printf("\Entre com o ano do filme %d:",i+1); scanf("%d",&videoteca[i].ano); fflush(stdin); } for (int i=0;i<volumes;i++) { if(videoteca[i].ano>= 2009) printf("\nFilme recente,titulo %s, ano%d:",videoteca[i].titulo, videoteca[i].ano); } }

5.2

Busca de substring numa sentena

#include <stdio.h> #include <string.h> void main ()

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

14
{ char str[] ="This is a simple string"; char * pch, busca[] = "simple"; pch = strstr (str,busca); if (pch != NULL) printf ("\nA substring %s foi encontrada na frase e comeca em:%s",busca, pch); else printf("\nA palavra %s nao encontrada",busca); }

5.3 Exerccios 1. EscrevaumprogramaemlinguagemCqueleiaonome,estadocivil,anodenascimento, msdenascimentode10indivduoseencontreomaisvelhoemaisnovodosmesmos. 2. EscrevaumprogramaemlinguagemCqueleiaonome,estadocivil,anodenascimento, msdenascimentodonmerodeindivduosqueousuriodesejareencontreomais velhoecasadoeomaisnovoesolteirodosmesmos. 3. EscrevaumprogramaemlinguagemCqueleiaasinfromaesdeumcadastrocomo nome,estadocivil,anodenascimento,msdenascimentodonmerodeindivduosqueo usuriodesejar.Oprogramadevepermitiraousuriofazerumabuscaporfaixaetriae pornome. 5.4

Ponteiros para estruturas

#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; void main () { Filme meu; Filme *pontFilme; //ponteiro para varivel do tipo Filme pontFilme = &meu; printf("\nEntre com titulo do meu filme: "); gets(pontFilme->titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&pontFilme->ano); fflush(stdin); printf("\nMEU filme favorito : %s do ano de %d", (*pontFilme).titulo, (*pontFilme).ano); }

5.5

Estruturas com parmetros de Funes

#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; void incializaEstruct(Filme * pont); void main () { Filme meu; Filme *pontFilme; //ponteiro para varivel do tipo Filme pontFilme = &meu; incializaEstruct(pontFilme); printf("\nMEU filme favorito : %s do ano de %d", (*pontFilme).titulo, (*pontFilme).ano);

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

15
} void incializaEstruct(Filme * pont) { printf("\nEntre com titulo do meu filme: "); gets(pont->titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&pont->ano); fflush(stdin); }

5.6

Aninhamento de estruturas

#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; struct Amigo { char nome[32]; int idade; Filme favorito; }; void main () { Amigo joao; Amigo *pontAmigo; //ponteiro para varivel do tipo Amigo pontAmigo = &joao; printf("\nEntre com o nome de seu amigo: "); gets(joao.nome); printf("\nEntre com a idade de seu amigo: "); scanf("%d",&joao.idade); fflush(stdin); printf("\nEntre com titulo do filme favorito de seu amigo: "); gets(joao.favorito.titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&pontAmigo->favorito.ano); fflush(stdin); printf("\nO filme favorito de %s eh: %s do ano de %d", joao.nome, pontAmigo->favorito.titulo, joao.favorito.ano); }

5.7 Exerccio 1. EscrevaumprogramaemlinguagemCqueleiaasinformaescadastraisde5individuos. Cada individuo tem como atributos nome e idade, e informaes sobre veiculos automotoreseimveis.Osveiculosautomotorestemcomoatributosoano,valoretipo (automovel,moto,utilitrio,...)eosimveistemcomoatributootipo(casa,apartamento, terreno) e o valor. O programa deve permitir a entrada de parmetros de busca que relacionem o individuo, veiculos e imoveis independemente ou integradamente. Obrigatoriamentedevemserutilizados:multiplasestruturas,funeseponteiros.

6 Arquivos
Os dispositivos de entrada/sada trabalham com fluxo (stream) de dados, operados em C como arquivos. Os arquivos podem ser de texto ou binrio. Os arquivos texto contem uma sequenciadecaracteres(ASCII,porexemplo),geralmenteorganizadosemlinhas(contendoou noocaracteresdefimdelinha`\n=linefeed+carriagereturn).Osarquivosbinrioscom umasequenciadebytesgeralmentenolegvel(texto)epodemrepresentarofluxodedados que corresponde a uma imagem, arquivo executvel, etc. As operaes mais comuns num

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

16 arquivossoabertura/fechamento,leitura/escritabyteabyteoublocoablocoereajusteda posioatualdeleituradoarquivo. 6.1 Abrindo arquivo Nopossvelexecutarnenhumaoperaoemumarquivosemantesabrilo.Umarquivo podeserabertodevriasmaneiras:

Modo Descrio
r w a rb wb ab r+ w+ a+ r+b r+b a+b Abre um arquivo texto para leitura Cria um arquivo texto para escrita Anexa texto ao fim de um arquivo texto Abre um arquivo binrio para leitura Cria um arquivo binrio para escrita Anexa a um arquivo binrio Abre um arquivo texto para leitura/escrita Cria um arquivo texto para leitura/escrita Cria ou anexa a um arquivo texto para leitura/escrita Abre um arquivo binrio para leitura/escrita Cria um arquivo binrio para leitura/escrita Anexa a um arquivo binrio para leitura/escrita

6.2

Exemplo

6.2.1 Caracteres a caracteres (texto), operao de leitura e de escrita.


#include<stdio.h> #include <conio.h> #include<stdlib.h> int main (void ) { char c,o; FILE *pontArq; //ponteiro especial para arquivos char nomeArq[64]; printf("\nEntre com o nome do arquivo para escrita/leitura:"); gets(nomeArq); printf("\nVoce deseja escrever (1) ou ler (2) o arquivo %s \n: ",nomeArq); if((o=getche())== '1') { if (( pontArq = fopen(nomeArq, "w")) == NULL) // Abre o arquivo para escrita { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nDigite o texto que ser inserido no arquivo\n"); printf("Digite \"CTRL\" + \'Z\' para FINALIZAR\n"); do { c = getchar(); fputc(c, pontArq); } while (!feof(stdin)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch(); exit (0); //cdigo de retorno indicando execuo bem sucedida } else if(o == '2') { if (( pontArq = fopen(nomeArq, "r")) == NULL) // Abre o arquivo para leitura { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nConteudo do arquivo: %s\n",nomeArq); rewind(pontArq); //garante que a posio de leitura atual o comeo do arquivo

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

17
do { c = fgetc(pontArq); putchar(c); } while (!feof(pontArq)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch (); exit (0); //cdigo de retorno indicando execuo bem sucedida } }

6.2.2 String a string (texto), operao de leitura e de escrita


#include<stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int main { char FILE char (void ) c[64],o; *pontArq; //ponteiro especial para arquivos nomeArq[64];

printf("\nEntre com o nome do arquivo para escrita/leitura:"); gets(nomeArq); printf("\nVoce deseja escrever (1) ou ler (2) o arquivo %s \n: ",nomeArq); if((o=getche())== '1') { if (( pontArq = fopen(nomeArq, "w")) == NULL) // Abre o arquivo para escrita { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nDigite o texto que ser inserido no arquivo\n"); printf("Digite \"CTRL\" + \'Z\' para FINALIZAR\n"); do { gets(c); strcat(c,"\n"); //insere fim de linha fputs(c, pontArq); } while (!feof(stdin)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch(); exit (0); //cdigo de retorno indicando execuo bem sucedida } else if(o == '2') { if (( pontArq = fopen(nomeArq, "r")) == NULL) // Abre o arquivo para leitura { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nConteudo do arquivo: %s\n",nomeArq); rewind(pontArq); //garante que a posio de leitura atual o comeo do arquivo do { fgets(c,64,pontArq); //l 64 caracteres de pontArq e armazena em c[64] puts(c); } while (!feof(pontArq)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch (); exit (0); //cdigo de retorno indicando execuo bem sucedida } }

6.2.3 Arquivos binrios


#include #include #include #include <stdio.h> <stdlib.h> <string.h> <conio.h>

struct Filme {

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

18
char titulo[64]; int ano; }; int main (void ) { Filme meu; char o; FILE *pontArq; //ponteiro especial para arquivos char nomeArq[64]; printf("\nEntre com o nome do arquivo para escrita/leitura:"); gets(nomeArq); printf("\nVoce deseja escrever (1) ou ler (2) o arquivo binrio %s \n: ",nomeArq); if((o=getche())== '1') { if (( pontArq = fopen(nomeArq, "wb")) == NULL) // Abre o arquivo para escrita { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nEntre com titulo do meu filme: "); gets(meu.titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&meu.ano); fflush(stdin); //sizeof determina o nmero de bytes da estrutura if (fwrite( &meu, sizeof (struct Filme), 1, pontArq) != 1) { puts("Erro na escrita."); exit(1); } fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch(); exit (0); //cdigo de retorno indicando execuo bem sucedida } else if(o == '2') { if (( pontArq = fopen(nomeArq, "rb")) == NULL) // Abre o arquivo para leitura { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nConteudo do arquivo: %s\n",nomeArq); rewind(pontArq); //garante que a posio de leitura atual o comeo do arquivo //sizeof determina o nmero de bytes da estrutura if (fread( &meu, sizeof (struct Filme), 1, pontArq) != 1) { puts("Erro na leitura."); exit(1); } fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\nMEU filme favorito : %s do ano de %d", meu.titulo, meu.ano); printf("\n pressione uma tecla para continuar\n"); getch (); exit (0); //cdigo de retorno indicando execuo bem sucedida }

PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br

Você também pode gostar