Universidade Federal de São Carlos Introdução à Linguagem C Formato de um programa < > indicam diretório padrão. Se colocar “ “ indicará pasta local #include <stdio.h> /*Declaração das bibliotecas*/ int main(void) /* Programa principal */ { // Comandos return (0); } Não é preciso fechar um comentário de linha (aquele com duas barras). /* Fim do arquivo */ Sempre fechar um comentário com */ ! Declaração de variáveis Escopo A forma geral da declaração de variáveis é: tipo_da_variável lista_de_variáveis; ex: int x; char letra; float PI; Pode-se inicializar o valor de uma variável junto de sua declaração: ex: int x=y=10; As variáveis podem ser declaradas: - fora de todas as funções do programa e podem ser usadas a partir de qualquer lugar do programa; - no início de um bloco de código de uma função e só podem ser usadas dentro desse bloco; - na lista de parâmetros de uma função, que, embora recebam valores externos, só são reconhecidas dentro da função. Quanto a nomeação de variáveis: - O nome de variáveis deve começar com uma letra ou sublinhado (_); - Não podem ter os mesmos nomes de palavras reservadas ou de funções; - O C é "case sensitive", ou seja, faz distinção entre letras maiúsculas e minúsculas. Palavras Reservadas (c) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Tipos em C A seguir estão listados os tipos de dados permitidos e seu valores máximos e mínimos em um compilador típico para um hardware de 16 bits. Operadores Aritméticos + - Adição * - Multiplicação / - % Inteira Divisão Resto de Divisão - - Subtração -- - Decremento ++ - Incremento E/S em C Praticamente todas as formas de I/O do C têm os seus tipos e funções declarados no arquivo de inclusão da biblioteca standard stdio.h. • Streams: constituem uma forma portável de ler e escrever informação nos programas escritos em C. • Streams pré-definidos: no UNIX, e na maior parte de outros Sistemas Operacionais definem-se à partir de pelo menos 3 streams, já abertos e prontos a utilizar: stdin (geralmente associado ao teclado); stdout (geralmente associado ao terminal); stderr (também geralmente associado ao terminal); todos eles usam texto como modo de I/O. E/S em C Biblioteca Padrão Para termos acesso à biblioteca que contém as funções e variáveis que facilitam a entrada e saída de dados deve haver a seguinte declaração no inicío do programa: #include <stdio.h> A diretiva (#) include instrui o compilador a ler outro arquivo, adicionando-o àquele que contém a diretiva. Saída - A Função printf A função printf permite que dados sejam escritos na tela do computador. A forma geral é: printf (controle, arg1, arg2, ...); onde os argumentos (opcionais) são impressos de acordo com a maneira indicada pelo controle. Exemplo: #include /* Biblioteca de entrada e saída */ main() /* Aqui começa o programa principal */ { int ano = 2004; /* Declarei ano como inteiro e já defini seu valor */ printf("Estamos no ano de %d", ano); /* Imprime o valor do ano */ } Na tela do computador será impresso: Estamos no ano de 2004 E/S em C - continuação O controle, que sempre aparece entre " ", define como serão impressos os argumentos. Neste controle podem existir dois tipos de informações: caracteres comuns e códigos de formatação. Os códigos de formatação são precedidos por um % e aplicados aos argumentos na ordem em que aparecem. Deve haver um código de formatação para cada argumento. Códigos de Conversão (mais utilizados) Código Comentário %c Caractere simples %d Inteiro %f Real em ponto flutuante %s Cadeia Caracteres (String) %% Imprime o caractere “%” E/S em C - continuação Entrada - A Função scanf A função scanf pode ser utilizada para entrada de dados a partir do teclado. A forma geral é: scanf(controle, arg1, arg2, ...); onde os argumentos são os endereços (&) das variáveis que irão receber os valores lidos. Exemplo: #include <stdio.h> main() { int a; int b; scanf("%d %d", &a, &b); } Espera-se que dois valores inteiros sejam digitados no teclado. O primeiro é armazenado na variável a e o segundo em b. E/S em C - continuação Lendo e Imprimindo Caracteres - Funções getchar e putchar : #include <stdio.h> void main () { char c; printf("Entre com um caracter entre a e z.\n"); c = getchar(); printf("O caracter lido foi o "); putchar(c); } Funções getch e getche Na definição original da função getchar a entrada é armazenada até que a tecla ENTER seja pressionada. Em ambientes onde é necessário tratar o caractere imediatamente esta função pode não ser útil. Muitos compiladores incluem funções para permitir entrada interativa de dados. As duas funções mais comuns são getch e getche, que podem ser encontrados em conio.h. A função getch (void) espera até que uma tecla seja apertada e retorna este valor imediatamente. O caracter lido não é ecoado na tela. A função getche (void) opera da mesma maneira, mas ecoa o caracter lido. E/S em C - continuação Lendo e Imprimindo Strings Um string em C é um vetor de caracteres. Para usar strings é preciso primeiro definir um espaço para armazená-los. Para isto é preciso declarar o tamanho e o tipo do vetor. Por exemplo: char nome[40]; /* reserva um espaço para armazenar caracteres.*/ Toda string em C termina com o caracter null ('\0'), que é automaticamente inserido pelo compilador. Portanto o vetor nome pode armazenar no máximo 39 caracteres. “Problema” de ler e imprimir Strings com scanf e printf ... char nome[40]; scanf("%s", nome); printf(“Bem-vindo %s", nome); ... Caso o nome digitado tenha sido Antonio da Silva, o programa imprimiria somente o seguinte: Bem-vindo Antonio Observar que o comando scanf não lê o nome todo, encerra a leitura quando encontra um caracter branco. Mas como ler para um vetor um nome inteiro ou uma string que contenha brancos? Para isto deve-se usar a função gets. E/S em C - continuação Lendo e Imprimindo Strings com gets e puts A função gets, que pertence à biblioteca stdio.h, lê toda a string até que a tecla ENTER seja pressionada, “capturando” os espaços (brancos) inclusive. Caso a função scanf do exemplo anterior fosse substituída pela gets o programa imprimiria: Bem-vindo Antonio da Silva O comando que substitui o scanf é gets(nome); A função puts tem a seguinte forma: puts(char *str);, ela imprime o string apontado por str. Exemplo similar ao anterior com as funções printf substituídas por puts: ... char nome[40]; puts("Entre com o seu nome:"); gets( nome); puts(“Olá "); puts(nome); puts(“ ,seja bem-vindo!"); ... Saída: Olá, Antônio da Silva, seja bem-vindo! Especificador de formato Tipo Resultado c char um único caractere i ou d int número inteiro o int número em octal x ou X int número em hexadecimal (com letras minúsculas ou maiúsculas) u unsigned int número inteiro sem sinal s char * escreve o string terminado com \0 f double ou float número real com parte decimal e ou E double ou float número real escrito em notação científica g ou G double ou float equivalente a e ou f (é escolhido o que ocupar menos espaço) hi ou hd short número inteiro curto li ou ld long número inteiro longo Lf long double número real com parte decimal % - escreve o caractere % Entre o caractere % e o caractere especificador de formato podemos colocar ainda os seguintes indicadores: - - (sinal menos): faz uma justificação à esquerda; - + (sinal mais): o valor a escrever contém sempre um sinal (- ou +); - valor inteiro: tamanho em caracteres do valor a escrever (se o valor para ser escrito ocupar mais caracteres do que o especificado, não é truncado); - indicador na forma num1.num2: num1: tamanho total em caracteres do valor a escrever num2: precisão (número de algarismos decimais). Alguns exemplos: printf("%-2.3f\n", 17.23478); produz no terminal a saída: printf("VAT = 17.5%%\n"); que escreve: VAT = 17.5% 17.234 Mais Exemplos As funções mais básicas que permitem efetuar operações de entrada/saída nos streams pré-definidos stdin e stdout são: int getchar(void); Essa função lê apenas um caractere de stdin (codificado como inteiro). int putchar(char ch); Essa função coloca o caractere ch em stdout . Estas funções, bem como todas as outras que dizem respeito a operações de entrada/saída suportadas pela biblioteca standard do C, estão declaradas no arquivo de inclusão stdio.h. Exemplo: #include <stdio.h> ... int ch; ... ch = getchar(); putchar((char) ch); ...