Apostila C UFU
85 pág.

Apostila C UFU


DisciplinaIntrodução à Tecnologia da Computação26 materiais156 seguidores
Pré-visualização19 páginas
imediata do programa inteiro, forçando 
um retorno ao sistema operacional, ela age como se estivesse finalizando o programa. A 
forma geral é 
 
 void exit(int código_de_saída); 
 
 O valor código_de_saída é um inteiro que será passado para o Sistema 
Operacional. O zero é geralmente usado como um código de retorno que indica uma 
terminação normal do programa, enquanto que outros argumentos são usados para 
indicar algum tipo de erro. 
 
 O exemplo abaixo é idêntico ao utilizado na seção do-while: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 
 
void funcao1(); //função para conversão de temperatura 
void funcao2(); //função para calculo de fatorial 
 
void main() 
{ 
 int opcao; 
 do{ 
 
 printf(&quot;1: Conversao de Temperatura&quot;); 
 printf(&quot;\n2: Calcular Fatorial&quot;); 
 printf(&quot;\n3: sair&quot;); 
 printf(&quot;\nEscolha uma opcao e tecle ENTER: &quot;); 
 scanf(&quot;%d&quot;,&opcao); // entrada de variavel 
 
 }while(opcao!=1 && opcao!=2); 
 /*este bloco será executado sempre que opcao for 
diferente de 1 e de 2*/ 
 
 switch(opcao) // analisa a opcao do usuario 
 { 
 case 1: // caso seja 1... 
 funcao1(); // ... executa função 1 
 break; 
 
 case 2: // caso seja 2... 
 funcao2(); // ... executa função 2 
 break; 
 
 case 3: // caso seja 3... 
 exit(0); // ...o programa é encerrado 
 break; 
 } 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 25
Neste exemplo, se o usuário escolher sair do programa, caso 3, o comando 
exit(0) encerrará o programa. Note que o argumento utilizado é o inteiro zero, que 
indica saída normal do programa. As funções funcao1() e funcao2() devem ser 
definidas pelo programador. 
 
Comando continue 
 
 O comando continue funciona de uma forma um tanto quanto similar ao 
comando break. Só que, ao invés de forçar a terminação do laço, continue força que 
ocorra a próxima iteração deste, pulando qualquer código intermediário. Para o laço for, 
este comando faz com que o teste condicional e a porção de incremento do laço sejam 
executados. Para os laços while e do-while, o controle de programa passa para o teste 
condicional. Veja o exemplo a seguir, o programa imprime, na tela, os números ímpares 
de 1 a 100: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include <conio.h> 
#include <stdio.h> 
 
void main() 
{ 
 int resultado; 
 for(int i = 1; i <= 100; i++) 
 { 
 resultado = i%2; // resto da divisão i/2 
 if(resultado == 0) // se o resto for 0 
 continue; // continue força a proxima iteração do laço 
 
 printf(&quot;%d &quot;,i); 
 } 
 _getch(); 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 26
Capítulo 4 \u2013 Matrizes e Strings 
 
 Uma matriz é um conjunto de variáveis de um mesmo tipo. Em C, todas as 
matrizes consistem em posições contíguas na memória. O endereço mais baixo 
corresponde ao primeiro elemento e o mais alto, ao último elemento. Matrizes podem 
ter de uma a várias dimensões. A matriz mais comum em C é a de string, que é 
simplesmente uma matriz de caracteres terminada por um nulo. 
 
Matrizes Unidimensionais 
 
 A forma geral para se declarar uma matriz unidimensional é 
 
 tipo nome[tamanho]; 
 
onde tamanho deve ser um inteiro que define quantos elementos a matriz irá armazenar 
e tipo é o tipo de cada elemento da matriz. Matrizes devem ser explicitamente 
declaradas, juntamente com seu tamanho, para que o compilador possa alocar espaço 
para elas na memória. Por exemplo, se você quiser declarar um vetor (matriz 
unidimensional) do tipo float, chamada notas, e com 50 elementos, este vetor deve ser 
declarado da seguinte forma: 
 
 float notas[50]; 
 
 Para vetores, cada elemento possui um índice, sendo que o primeiro elemento 
possui índice zero e o último possui em seu índice o tamanho do menos um 
(tamanho-1). Por exemplo, considere o vetor 
 
 int x[10]; 
 
aqui você está declarando um vetor com dez elementos, x[0] até x[9]. 
 
 
No seguinte código, o programa faz o carregamento de um vetor com os 
números de 0 a 99: 
 
 
 
 
 
 
 
 
 
 
Para um vetor, o tamanho total em bytes é calculado da seguinte forma: 
 
 Total em bytes = sizeof(tipo) * tamanho do vetor 
 
#include <conio.h> 
#include <stdio.h> 
 
void main() 
{ 
 int x[100]; 
 for(int i = 0; i < 100; i++) 
 x[i] = i; // x[0]=0... x[1]=1... x[2]=2... etc. 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 27
A linguagem C não possui verificação de limites em matrizes. Você poderia 
ultrapassar o fim de uma matriz e escrever nos dados de alguma outra variável. Como 
programador, você deve prover verificação dos limites onde for necessário. 
 
A tabela abaixo exemplifica como um vetor apareceria na memória começando 
na posição 100 e fosse declarado na seguinte forma: 
 
double y[7]; 
 
Elemento y[0] y[1] y[2] y[3] y[4] y[5] y[6] 
Endereço 100 101 102 103 104 105 106 
 
 
Passando vetores para funções 
 
Considere o seguinte fragmento de programa que passa o endereço de x para 
função(): 
 
void main() 
{ 
 int x[15]; 
 funcao(x); 
 . 
 . 
 . 
} 
 
Se uma função recebe um vetor, você pode declarar o parâmetro formal em uma 
entre três formas: como um ponteiro, como uma matriz dimensionada ou como uma 
matriz adimensional. Exemplos de como funcao pode receber o vetor x: 
 
funcao(int *x) /* ponteiro */ 
{ 
 . 
 . 
 . 
} 
Ou 
 
funcao(int x[10]) /* matriz dimensionada */ 
{ 
 . 
 . 
 . 
} 
 
Ou ainda 
 
funcao(int x[]) /* matriz adimensional */ 
{ 
 . 
 . 
 . 
} 
 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 28
Todos os três métodos possuem resultados idênticos, pois cada um diz ao 
compilador q um ponteiro inteiro vai ser recebido. A primeira declaração usa, de fato, 
um ponteiro. A segunda emprega a declaração de matriz padrão. A última declaração 
simplesmente especifica que uma matriz do tipo int, de algum tamanho, será recebida. 
 
Strings 
 
 Uma string é definida como um vetor de caracteres que é terminada por um nulo. 
Um nulo é especificado como \u2018\0\u2019 e geralmente é zero. Por essa razão, você precisa 
declarar matrizes de caracteres como sendo um caractere mais longo que a maior string 
que elas devem guardar. Por exemplo, para declarar um vetor string que guarda uma 
string de 10 caracteres, deve-se declarar desta forma 
 
 char string[11]; 
 
 Com isso reserva espaço para o nulo no final da string. 
 Embora a linguagem C não tenha o tipo de dado string, ela permite constantes 
string. Uma constante string é uma lista de caracteres entre aspas. Por exemplo, 
 
 \u201cola mundo\u201d 
 
 Você não precisa adicionar o nulo no final das constantes string manualmente, o 
compilador C faz isso automaticamente. 
 
 C apresenta uma gama de funções de manipulação de strings. Abaixo lista as 
mais comuns com seus respectivos efeitos, considere s1 e s2 duas strings, e ch um 
caractere. 
 
Função Efeito 
strcpy(s1,s2) Copia s2 em s1 
strcat(s1,s2) Concatena s2 ao final de s1 
strlen(s1,s2) Retorna o tamanho de s1 
strcmp(s1,s2) Retorna 0 se s1 e s2 são iguais; menor que 0 se s1 < s2; maior que 
0 se s1 > s2 
strchr(s1,ch) Retorna um ponteiro para a primeira ocorrência de ch em s1 
strstr(s1,s2) Retorna um ponteiro para a primeira ocorrência de s2 em s1 
 
 Essas funções utilizam o cabeçalho STRING.H. 
 
O programa a seguir ilustra o uso dessas funções: 
 
 
 
 
 
 
 
 
 
 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Deve-se lembrar que strcmp() retorna zero em caso das strings serem iguais, e 
zero é falso por isso deve-se usar o operador ! para reverter a condição, assim se tornará 
verdadeiro e o bloco dentro do if será executado. 
 Se executarmos o programa teremos o seguinte resultado: