- Introdução
- C e Java lideram os principais rankings de popularidade, sendo o C a linguagem mais popular no desenvolvimento de sistemas embarcados
- Um programa em C é composto por um conjunto de Funções.
- A função pela qual o programa começa a ser executado chama-se “main()”.
- Após cada comando em C deve-se colocar um ; (ponto-e-vírgula).
- É uma linguagem “tipada”, ou seja, os dados precisam ter tipos definidos
- Possui estruturas diversas de fluxo e controle como “if… else”, “Switch case”, etc.
- Código básico de um programa C
- Observar que sempre deve existir uma função main()
- O retorno desta função por padrão C90 (gcc) será um int (mesmo se for omitido)
- As chaves "{" e "}" representam o início e fim de um bloco de instruções
- Os caracteres "/*" e "*/" representam o início e fim de um bloco de comentários
int main()
{
/*instruções*/
}
- Preparando o ambiente
- Como precisaremos digitar alguns comandos, vamos utilizar o terminal do linux, abra portanto o terminal
- Por padrão o linux inicia na pasta do usuário, ficará algo assim:
aluno@sj-redes1-d1:~$
</syntaxhighlight>
- Observe a composição é usuário@computador:pasta
- Neste caso “~$” representa que o usuário está em sua pasta home
- Criando uma pasta para seus projetos
- Você pode criar uma pasta via explorador de arquivos no modo gráfico
- Via terminal conforme segue executando os seguintes comandos para criar e entrar na pasta do usuário:
~$ mkdir ExerciciosC
~$ cd ExerciciosC
</syntaxhighlight>
- Observe que agora o terminal exibe algo como:
aluno@sj-redes1-d1:~/ExerciciosC$
</syntaxhighlight>
- Editando um arquivo .c
- O arquivo “.c” é o código-fonte de nosso projeto, é onde digitaremos o código na linguagem C. Trata-se de um arquivo texto simples, porém respeitando a sintaxe do C.
- Para editar o arquivo “.c” podemos utilizar qualquer editor como o “gedit” do linux que é bem parecido com o “bloco de notas” do windows.
- Depois de criar o arquivo precisaremos compilar este código para transformá-lo em executável e finalmente poder rodá-lo, para compilar utilizaremos o compilador gcc do linux.
- Passo-a-passo criando o OlaMundo.c
- Abra o gedit com um texto em branco e salve em sua pasta de projetos com o nome “OlaMundo.c”
- Digite dentro do arquivo em branco criado o seguinte código:
#include <stdio.h>
main()
{
printf("Olá Mundo!\n");
}
- Certifique-se de salvar o arquivo “OlaMundo.c” após as alterações
- No terminal dê um comando ls para listar os arquivos do diretorio, como resultado deve ser exebido o arquivo OlaMundo.c que você criou no gedit
~/ExerciciosC$ ls
OlaMundo.c
</syntaxhighlight>
- No terminal compile o código através do gcc. Neste exemplo a pasta “ExerciciosC” foi criada para gravar o projeto, do gedit foi salvo nesta pasta o programa “OlaMundo.c”. Como resultado nenhuma mensagem deve ser exibida, o terminal simplesmente irá ficar pronto para um novo comando, isso significa que compilou com sucesso (sem erros)
~/ExerciciosC$ gcc OlaMundo.c -o OlaMundo
</syntaxhighlight>
- Dê um novo comando ls para listar os arquivos do diretorio, como resultado deve ser exibido dois arquivos, o OlaMundo.c e agora o OlaMundo, um arquivo executável criado pelo compilador
~/ExerciciosC$ ls
OlaMundo OlaMundo.c
</syntaxhighlight>
- Execute OlaMundo através do comando a seguir. Observe a mensagem “Olá Mundo!” exibida no terminal.
~/ExerciciosC$ ./OlaMundo
Olá Mundo!
</syntaxhighlight>
- Analisando o programa OlaMundo
- Observe que foi realizada uma declaração antes da função main. Isto é necessário para utilização do comando de impressão em tela, o printf utilizado abaixo.
- include <stdio.h> </syntaxhighlight>
- Observe que não foi definido um retorno para main, o compilador deverá tratar esta função com retorno int
- A instrução realizada em código é de impressão em tela, neste caso a tela (terminal visualizado pelo monitor) é a saída padrão (standard)
printf("Olá Mundo!\n");</syntaxhighlight>
- Enfim, observe que não foi especificado um retorno, do tipo “return”. Isso faz com que o retorno deste programa seja indefinido
- Identificadores
- São os nomes que o programador dá a suas variáveis, constantes e funções
- Deve sempre iniciar com uma letra ou “_” (underscore )
- A partir do segundo caracter pode também conter números
- A linguagem não suporta caracteres especiais como letras acentuadas
- Identificadores não podem ser escritos com espaço, exemplo “buscarCodigo()”, não pode ser escrito como “buscar codigo()”
- A linguagem C é case-sensitive. Por exemplo, as variaveis “numero”, “Numero” e “NUMERO” são endereços diferentes
- Deve ter no máximo 31 caracteres (compatível com TurboC)
- Boas práticas quanto a identificadores
- O uso de nomes auto-explicativos facilita a compreensão e manutencão futura
- É comum variar maiúsculas e minúsculas para facilitar a leitura como “QtMedidas”, “ValorMedio”
- Variáveis
- O que é uma variável? - Khan Academy
- Por uma questão de eficiência de uso de memória e processamento o C possui diversos tipos de variáveis, vamos agora trabalhar com alguns deles que servirão para praticamente todas as nossas necessidades
- char: ocupa 1 byte na memória e varia de -127 a +127
- int: ocupa 4 bytes e varia de -2.147.483.648 a +2.147.483.647
- double: ocupa 8 bytes e possui dez dígitos de precisão
- char[]: esta é o mesmo char descrito acima mas aqui simbolizando uma cadeia/vetor de caracteres (string)
- Apenas para conhecimento neste momento, há outros tipos como short, float e long double e os tipos que não são de precisão podem ainda ser signed ou unsigned
- Como funciona a memória de computadores? - Khan Academy
- Crie o arquivo através do pico “nome do arquivo.c”
~/ExerciciosC$ pico UsaVariavel.c
</syntaxhighlight>
- Digite dentro do arquivo em brando criado o seguinte código:
#include <stdio.h>
main()
{
int x; /* declaração de uma variável inteira */
x=5;/* atribuindo o valor 5 (constante) a variável x */
printf ("O valor de x é %d\n",x);
}
Observe que o C permite também que uma variável seja inicializada com determinado valor no momento de sua criação. Ex.:#include <stdio.h>
main()
{
int x = 5; /* declaração de uma variável inteira atribuindo o valor 5*/
printf ("O valor de x é %d\n",x);
}
- Compile e execute
- Continuação da teoria
- C é uma linguagem “compilada”, ou seja, de um código fonte (escrito em C) são gerados códigos de máquina formando um ou mais arquivos executáveis e inteligíveis apenas para o computador
- Há diversos compiladores e estes podem ter algumas diferenças de comportamento e aceitarem diferentes parametrizações
- Um código é compilado para um sistema operacional específico e uma arquitetura de processador, portanto, um código compilado para um S.O. não tem qualquer garantia de funcionamento em outros sistemas. Da mesma forma um código que roda em um PC, não tem qualquer garantia de rodar em outras arquiteturas diversas
- Em oposição ao código compilado temos o código interpretado
- Sempre que um código fonte é modificado se faz necessário nova compilação para que as modificações façam efeito na execução
- As variáveis que serão utilizadas pelo programa devem ser listadas antecipadamente
- A linguagem C tem um conjunto de palavras reservadas, que não podem ser utilizadas para outro propósito se não o que está definido na estrutura da linguagem
- Exemplos: break, case, if, for, while, return,...
- O C permite que trabalhemos com bibliotecas (lib) que são conjuntos de funções que realizam certas tarefas
- Além de podermos criar nossas próprias bibliotecas com funções úteis que podemos reutilizar em vários programas, também podemos nos apropriar de diversas libs já desenvolvidas, sejam padrão ANSI (libc) ou não, desta forma não precisamos “reinventar a roda” e já sair de largada com várias funcionalidades
- Exemplos: <stdio.h>, <math.h>, <complex.h>, <float.h>, <string.h>, etc. (são 24 padrão ANSI no total)
- Entendendo a compilação
- Edição: atividade feita pelo programador
- Preprocessamento: compilador processa o código e ignorando comentários, fazendo associações de constantes e controle de código através de diretivas especiais de compilação
- Compilação: criação do código-objeto, é a tradução da linguagem C em linguagem de máquina
- Linkagem: associação de diferentes código-objeto e bibliotecas
- Carregamento: carrega o programa em memória
- Execução: cpu realiza a execução das instruções passo a passo, armazenando os resultados em memórias definidas pelo programa e pilhas de dados para controle
- Comentários
- Como vimos podemos incluir no programa fonte textos livres que ajudam na compreensão do código
- Os comentários são ignorados pelo compilador, não se tornam código de máquina
- Para incluir comentários inicie com /* digitando então o comentário aqui e terminando com */
- Este formato permite que digitemos varias linhas de comentários, normalmente é utilizado para textos mais extensos
- A maioria dos compiladores também aceita o formado //comentário, que serve para incluir um comentário de apenas uma linha, apenas os caracteres depois do // serão ignorados e neste caso o terminador é o sinal de nova linha que normalmente está oculto
- Operadores aritméticos
- “+” adição
- “-” subtração
- “*” multiplicação
- “/” divisão
- “%” resto da divisão
- Por padrão, multiplicações e divisões são operadas antes de somas e subtrações
- Devemos utilizar parênteses para agrupar operações e definir a sequencia mais adequada. O compilador vai sempre resolver o que está dentro dos parênteses primeiro, de “dentro para fora” quando houver mais de um nível
- Exemplos
- 1+2*3 = 7 é o mesmo que 1+(2*3)
- (1+2)*3 = 9
- 1+2*3+4*5 = 27 é o mesmo que 1+(2*3)+(4*5)
- (((1+2)*3)+4)*5 = 65
- Escrevendo mensagens na tela (saída de dados)
- A função printf da lib stdio é bastante completa para esta tarefa, permite escrever mensagens com múltiplos argumentos.
- Formato printf (“string de controle”, lista de argumentos);
- Exemplo:
- printf(“Olá Mundo!\n”);
- printf(“Digite sua idade:\n”);
- printf(“Sua idade é: %d”,idade);
- Para saber mais sobre o printf e seus identificadores ver c_function_printf
- Lendo o teclado do usuário (entrada de dados)
- A função scanf da lib stdio é bastante útil para esta tarefa, ela aguarda que o usuário entre com uma informação e tecle [ENTER] no final.
- Esta função é blocante, ou seja, o programa fica parado esperando a entrada de dados para então dar continuidade a execução
- Formato scanf (“string de controle”, lista de argumentos);
- Exemplo:
- Operadores relacionais e lógicos
- Relacionais
- > maior que, ex.: Se (i > j) printf(“i é maior que j”);
- >= maior ou igual que, ex.: Se (i >= j) printf(“i é maior ou igual a j”);
- < menor que, ex.: Se (i < j) printf(“i é menor que j”);
- <= menor ou igual que, ex.: Se (i <= j) printf(“i é menor ou igual a j”);
- Igualdade
- == igual a, ex.: Se (i == j) printf(“i é igual a j”);
- != diferente de, ex.: Se (i != j) printf(“i é diferente de j”);
- Lógicos
- && Lógica E (AND), ex.: Se (i > j) && (i > 0) printf(“i é maior que j e positivo”);
- || lógica OU (OR), ex.: Se (i > j) || (i == 0) printf(“i é maior que j ou é igual a zero”);
- ! Lógia negação (NOT), ex.: Se !(i > j) printf(“i não é maior que j”);
- Atividade
- Ler apostila de C da UFMG
- Exercícios
- Implemente um programa em C que calcula a média de dois números reais digitados pelo usuário e imprime em tela a resposta deste cálculo
- Implemente um programa em C que recebe “a”, “b” e “c”, calcula e exibe o delta (delta = b*b-4ac).
- Implemente um programa em C que calcule a Potência dissipada por uma carga dados V e I.
- Implemente um programa em C que calcula a resistência R dados P e I.
- Implementar um programa C para converter um ângulo em radianos para graus.
- Implementar um programa C para converter um ângulo em graus para radianos.
|