Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Breve História da Linguagem C
A linguagem C foi criada em 1972 e implementada em um computador DEC PDP-11 por Dennis Ritchie no Bell Laboratories . C é derivada de duas outras linguagens: Algol 68 e BCPL.
O foco da linguagem C inicialmente foi o desenvolvimento de sistemas operacionais e compiladores. C foi usada com grande êxito na construção de uma nova versão do sistema operacional Unix, que 
inicialmente foi escrito em Assembly. O grande sucesso obtido no mundo do Unix fez com que a linguagem ganhasse mais e mais adeptos e atualmente, quase todos os grandes sistemas 
operacionais são construídos em C/C++.
No ano de 1978 foi publicado o livro: The C Programming Language por Kernigham & Ritchie. Este livro fez grande sucesso e ajudou muito a divulgar a linguagem.
A padronização da linguagem C
No início dos anos 80 C passou a ser reconhecida como uma linguagem de propósito geral e contava com diversos compiladores desenvolvidos por vários fabricantes. Nessa época havia uma série de 
compiladores C semelhantes, porém estes compiladores frequentemente apresentavam várias discrepâncias e eram incompatíveis entre si. Isto tornava a padronização da linguagem uma necessidade 
real. A padronização foi iniciada pela ANSI – American National Standard Institute – em 1983 e finalizada em 1989. Em 1999 foi aprovada uma revisão do padrão anterior e novas funcionalidades foram 
acrescentadas. Esta revisão ficou conhecida como C99.
Origem e evolução da Linguagem C
Um grande esforço de padronização foi feito a fim de padronizar a linguagem. Atualmente ainda há versões de compiladores próprias de cada fabricante, porém a maioria dos fabricantes oferece uma 
opção de compatibilidade com o padrão ANSI C.
A linguagem C é uma linguagem de propósito geral, o que quer dizer que se adapta a praticamente qualquer tipo de projeto, alt amente portável e extremamente rápida em tempo de execução. A 
linguagem C++ é uma evolução da linguagem C que incorpora orientação a objetos. Linguagens como Java e C# foram influenciadas pela linguagem C.
<http://linguagemc.com.br/breve-historia-da-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 12:14
 Página 1 de Linguagem de Programação C 
Programando em C
Como usar Dev C++ no Windows 8
Atenção amantes do Dev C++!!! É possível usar o Dev C++ no Windows 8. Melhor ainda, é possível usar um Dev-C++ atualizado e que funciona perfeitamente no Windows 8! Se você quer usar o Dev-C++ porque 
gosta, ou então precisa …
Qual é a linguagem de programação mais usada?
Por: Eduardo Casavella Qual é a linguagem de programação mais utilizada? Qual é linguagem de programação mais popular no mundo? Muitas pessoas fazem esse tipo de pergunta. Segundo o ranking 
elaborado pela Tiobe, a linguagem mais popular é Java, …
Operadores Aritméticos em Linguagem C
Por: Eduardo Casavella Os operadores aritméticos são símbolos utilizados para realizar as operações aritméticas elementares. Vejamos um exemplo de programa em C, utilizando operações aritméticas e 
variáveis do tipo inteiro. Lembrando que em nossos exemplos estamos usando a IDE Dev …
Operações de entrada e saída de dados em Linguagem C
Por: Eduardo Casavella Neste artigo veremos as operações de entrada e saída de dados em linguagem C utilizando as funções scanf () e printf(). Saída de dados Chamamos de saída de dados a exibição de 
textos ou valores de variáveis no …
O que é Linguagem C?
Por: Eduardo Casavella A linguagem C foi criada por Dennis Ritchie nos laboratórios da Bell Telephone em 1972. C foi criada com um propósito: ser usada no desenvolvimento de uma nova versão do sistema 
operacional Unix. A primeira versão do …
Como criar um programa em linguagem C
Por: Eduardo Casavella Vamos desenvolver um primeiro programa em linguagem C usando o ambiente do Dev C++. 1) Para iniciar, abra o Dev e depois clique no menu File | New | Source File 2) Na janela de 
código, digite …
quarta-feira, 22 de novembro de 2017 13:28
 Página 2 de Linguagem de Programação C 
Ciclo de desenvolvimento de um programa em linguagem C
Por: Eduardo Casavella Para criar e executar um programa em linguagem C, devemos completar com sucesso as seguintes ações: Criação do código fonte em C no editor de código; Pré-processamento do 
código; Compilação e geração do código objeto; Linkedição e …
De <http://linguagemc.com.br/programando-em-c/> 
 Página 3 de Linguagem de Programação C 
O que é Linguagem C?
A linguagem C foi criada por Dennis Ritchie nos laboratórios da Bell Telephone em 1972.
C foi criada com um propósito: ser usada no desenvolvimento de uma nova versão do sistema operacional Unix. A primeira versão do Unix utilizava Assembly. Então podemos dizer que desde o 
princípio C foi uma linguagem criada por programadores para programadores.
A linguagem C é considerada de propósito geral, ou seja, é uma linguagem capaz de ser usada para praticamente qualquer tipo de projeto.
É extremamente portável, ou seja, um programa escrito em linguagem C pode ser facilmente usado em qualquer plataforma.
Utilizando linguagem C podemos criar sistemas operacionais, aplicativos de todos os tipos, drivers e outros controladores de dispositivos, programar microcontroladores, etc.
Além de toda essa flexibilidade, C é capaz de gerar programas extremamente rápidos em tempo de execução, possui uma sintaxe simples e poderosa, com instruções de alto nível.
A linguagem C influenciou de forma direta muitas linguagens como C++, Java, C# , Objective C, e muitas outras linguagens de programação tem sua sintaxe e estruturas influenciadas por C.
C é uma linguagem extremamente popular e existem muitos compiladores C disponíveis para todas as plataformas.
ANSI C
No início C e Unix estavam bem atrelados, pois cada nova implementação de Unix para um tipo de máquina, requeria um novo compilador C específico para essa máquina.
Nos anos 80 a linguagem C tornou-se popular também fora do ambiente Unix. Nessa época surgiram novos compiladores comerciais de C e a linguagem passou a ser reconhecida como linguagem de 
propósito geral.
Com o desenvolvimento de diversos compiladores, tornou-se necessário padronizar a linguagem, a fim de garantir a compatibilidade e a portabilidade da linguagem.
A ANSI – American National Standards Institute foi a entidade encarregada de realizar a padronização da linguagem. Após a laboração do padrão este foi denominado de C ANSI. Este padrão foi revisto diversas vezes ao 
longo do tempo e posteriormente foi também reconhecido pela ISO, dando origem ao que chamamos de padrão ANSI/ISO C.
Atualmente uma revisão do padrão está em curso desde 2007, porém até o momento não for terminada.
<http://linguagemc.com.br/o-que-e-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 13:33
 Página 4 de Linguagem de Programação C 
Qual é a linguagem de programação mais usada?
Qual é a linguagem de programação mais utilizada?
Qual é linguagem de programação mais popular no mundo?
Muitas pessoas fazem esse tipo de pergunta.
Segundo o ranking elaborado pela Tiobe, a linguagem mais popular é Java, seguida muito de perto por C.
Vejam a tabela com o ranking.
Tabela Ranking de Linguagens
Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Acessado em 29/03/2012
Para pensar
O ranking da Tiobe não é exatamente calculado de uma forma “científica”. É apenas uma referência de popularidade usando mecan ismos de busca na internet.
Deixa a desejar em termos de metodologia científica, porém….
Existe alguma dúvida sobre a popularidade de linguagens como Java , C , C++, C# ou PHP?
Alguém duvida que o Objective C tenha crescido exponencialmente nos últimos anos devido à popularidade dos aparelhos da Apple?
Posso duvidar da precisão ranking como um todo, mas não duvido nada do poder das linguagens que citei acima.
O que você acha?
<http://linguagemc.com.br/qual-e-a-linguagem-de-programacao-mais-usada/>quarta-feira, 22 de novembro de 2017 13:29
 Página 5 de Linguagem de Programação C 
Como criar um programa em linguagem C
Vamos desenvolver um primeiro programa em linguagem C usando o ambiente do Dev C++.
1) Para iniciar, abra o Dev e depois clique no menu File | New | Source File
2) Na janela de código, digite o programa como abaixo:
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
 printf("Ola mundo!!!\n");
 printf("Este e um programa escrito em linguagem C\n");
 system("pause");
 return 0;
}
3) Salve o programa. Para salvar clique no menu File | Save As…
4) Crie uma nova pasta clicando no ícone
5) Chame a pasta de FontesLinguagemC
6) Entre na pasta criada
• Vamos dar nome ao programa.
• Preencha o campo File Name como Ola
• No campo Save as type escolha a extensão C Source Files (*.c)
quarta-feira, 22 de novembro de 2017 13:34
 Página 6 de Linguagem de Programação C 
7) Uma vez selecionada para salvar como C source files, clique em Save
8 ) Observe que o nome do programa já aparece na aba logo acima do código
9) Para compilar clique em Execute | Compile
10) A resposta da compilação Done significa que compilou com sucesso
11) Para executar o programa clique em Execute | Compile & Run
 Página 7 de Linguagem de Programação C 
12) Programa executando
ANÁLISE DO CÓDIGO DO PROGRAMA
Agora faremos uma análise detalhada, linha a linha, do primeiro programa escrito em linguagem C.
Abaixo temos uma figura com o código do programa e os comentários ao lado dos comandos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h> //biblioteca padrão para comandos i/o
#include<stdlib.h> //necessário para o system("pause")
int main (void)//função principal
{ //início do corpo da função principal
 printf("Ola mundo!!!\n");
 //printf envia um texto para a tela do monitor
 // \n é usado para deslocar o cursor para a próxima linha
 printf("Este e um programa escrito em linguagem C\n");
 system("pause");
 // pausa a execução a fim de visualizarmos o resultado
 return 0; //valor de retorno da função main
} //fim do corpo da função principal e fim do programa
Linha 1: temos a inclusão do arquivo de biblioteca stdio.h. Este arquivo é necessário para executar os comandos de entrada e saída na tela, como por exemplo o printf.
Linha 2 : inclusão do arquivo de biblioteca stdlib.h. Neste programa este arquivo foi necessário para podermos executar o comando syste m (“pause);
Linha 4: função principal. Todo programa em linguagem C deve obrigatoriamente possuir a função main.
Linha 5: Abrir { indica o início do código pertencente à função main(). As instruções do nosso programa ficam dentro do corpo da função main.
Linha 7: O comando printf exibe uma mensagem na tela. O símbolo \n desloca o cursor para a linha seguinte.
linha 11: Outro comando printf exibindo outro texto.
linha 13: system(“pause”); é um comando necessário no ambiente Windows para pausar a tela. Caso contrário o programa executaria e a tela fecharia tão rapidamente que não poderíamos ver o 
resultado.
linha 16: return 0; É o valor de retorno da função main(), obrigatório no padrão ANSI. Significa que o programa executou com sucesso.
linha 18: } chave fechando o corpo da função principal, significa fim do programa.
<http://linguagemc.com.br/primeiro-programa-em-linguagem-c/> 
 Página 8 de Linguagem de Programação C 
Ciclo de desenvolvimento de um programa em linguagem C
Criação do código fonte em C no editor de código;•
Pré-processamento do código;•
Compilação e geração do código objeto;•
Linkedição e geração de arquivo executável ;•
Carregamento do programa para a memória;•
Execução do programa pela CPU.•
Para criar e executar um programa em linguagem C, devemos completar com sucesso as seguintes ações:
Diagrama de blocos do ciclo de desenvolvimento em C.
Edição do código fonte. É a fase de criação do programa usando um editor para linguagem C. Um programa escrito em C deve ser salvo com a extensão .c•
Pré-processamento. O pré-processador executa as chamadas diretivas de pré-processamento. Estas diretivas são feitas antes de iniciar o processo de compilação e são embutidas no código 
fonte do programa. Normalmente as diretivas incluem outros arquivo ao fonte, e/ou fazem determinadas modificações no texto do mesmo.
•
Compilação . É feita a verificação da sintaxe e tradução do código. Se ocorrer algum erro durante o processo de compilação, deve-se voltar ao código fonte , fazer a correção do erro e compilar 
novamente. Se não ocorrer nenhum erro de compilação será gerado o código objeto. Este nada mais é do que uma tradução do código fonte para uma linguagem mais próxima da máquina. O 
arquivo de código objeto possui a extensão .obj.
•
Link edição ( ou linking em inglês): Um programa em linguagem C traz referências a funções que se encontram nas bibliotecas padrão ou, em muitos casos , faz referências a bibliotecas privadas 
definidas pelos programadores do projeto. As bibliotecas, ou arquivos de cabeçalho, tem a extensão .h O linker tem por objetivo juntar esse código em um local e gerar um único arquivo 
executável. Caso ocorra algum erro no processo de link edição, retorna-se ao código fonte para identificar e corrigir o erro e depois, compilar e linkar novamente o código. Se não ocorrer erro, 
então o processo prossegue até gerar o programa executável.
•
Detalhamento das ações:
Carregamento do programa: Uma vez que o arquivo executável tenha sido gerado, o programa está pronto para ser executado. Antes de poder executar um programa, ele dever ser carregado 
para a memória do computador. O programa encarregado de fazer esse carregamento é denominado loader (carregador).
•
Execução: Depois que o programa executável é carregado na memória, então a CPU executa o programa instrução por instrução.•
Executando um programa em C
<http://linguagemc.com.br/desenvolvendo-um-programa-em-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 13:36
 Página 9 de Linguagem de Programação C 
IDEs e Compiladores C
Instalando o Code-Blocks para Linguagem C no Ubuntu
O Code::Blocks é uma IDE open source para as linguagens C/C++. Possui versões para Windows, Linux e Mac. A seguir veremos com o fazer a instalação do Code::Blocks para Ubuntu e também como configurar 
a IDE e criar o primeiro programa …
Instalando o Eclipse CDT para C/C++ no Windows 8.1
O Eclipse CDT é um ambiente de desenvolvimento integrado (IDE) para as linguagens C e C++ baseado na plataforma Eclipse. Para instalar o Eclipse CDT é necessário primeiramente instalar Java JDK (Kit de 
desenvolvimento JAVA). Veremos a seguir o procedimento …
Instalando o Netbeans para C/C++:
Passo 1 – Para obter a IDE entrar no site: https://netbeans.org/ e selecionar a opção Download: Passo 2 – Na tabela abaixo, selecionar o download da opção C/C++: Passo 3 – O download do arquivo será 
iniciado. Após o término …
Como usar Dev C++ no Windows 8
Atenção amantes do Dev C++!!! É possível usar o Dev C++ no Windows 8. Melhor ainda, é possível usar um Dev -C++ atualizado e que funciona perfeitamente no Windows 8! Se você quer usar o Dev -C++ porque 
gosta, ou então precisa …
Tutorial de instalação do Visual Studio C++ 2010 Express
Por: Eduardo Casavella Processo de instalação do Visual Studio C++ 2010 Express passo a passo. O Visual C++ 2010 Express da M icrosoft é um ambiente integrado para programação em linguagem C e/ou C++ 
bastante completo e gratuito. Possui editor de …
Tutorial para instalação do Code Blocks.
Por: Eduardo Casavella Processo de instalação do Code Blocks passo a passo. O Code::Blocks é um ambiente de desenvolvimento i ntegrado para linguagem C/C++, que possui versões para Windows, GNU/Linux 
e MacOS. O interessante é que alémde ser multiplataforma é …
Tutorial de instalação do Dev C++
Por: Eduardo Casavella Processo de instalação do Dev C++ passo a passo. O Dev C++ é uma IDE leve, gratuita e fácil de utiliza r para desenvolvimento de programas tanto em linguagem C como em C++. Estas 
características fazem com que …
<http://linguagemc.com.br/ides-e-compiladores-c/> 
quarta-feira, 22 de novembro de 2017 12:15
 Página 10 de Linguagem de Programação C 
Instalando o Code-Blocks para Linguagem C no Ubuntu
O Code::Blocks é uma IDE open source para as linguagens C/C++. Possui versões para Windows, Linux e Mac. A seguir veremos com o fazer a instalação do Code::Blocks para Ubuntu e 
também como configurar a IDE e criar o primeiro programa usando esta ferramenta.
1 – Abra a Central de programas do Ubuntu e digite Code Blocks no campo de pesquisa
2 – Após aparecer o pacote clique em instalar
3 – Digite a sua senha e clique em Autenticar para permitir a instalação
4 – Aguarde o fim da instalação
5 – Neste passo a IDE encontra-se instalada
6 – Para abrir o Code blocks digite no campo de busca do DASH do Ubuntu a palavra
Code e clique.
quarta-feira, 22 de novembro de 2017 12:17
 Página 11 de Linguagem de Programação C 
7 – Após abrir selecione a opção GNU GCC Compiler e clique em OK
8 – Clique em Create a new project para criar o projeto
9 – Selecione a opção Console Aplication e clique em GO
 Página 12 de Linguagem de Programação C 
10 – Clique em next para continuar
11 – Selecione a linguagem a ser trabalhada (no caso a linguagem c)
12 – Digite um titulo para o projeto e a pasta a ser salvo
 Página 13 de Linguagem de Programação C 
13 – Este passo indica o compilador a ser usado, clique em finish para continuar
14 – Na aba a esquerda, expanda a pasta Sources e de um duplo clique no arquivo
main.c. Para compilar e executar o código clique no símbolo (build and run) marcado abaixo:
15 – Pronto o código esta compilado e executado!
 Página 14 de Linguagem de Programação C 
De <http://linguagemc.com.br/instalando-o-code-blocks-ubuntu-14-04-lts/> 
 Página 15 de Linguagem de Programação C 
Instalando o Eclipse CDT para C/C++ no Windows 8.1
O Eclipse CDT é um ambiente de desenvolvimento integrado (IDE) para as linguagens C e C++ baseado na plataforma Eclipse.
Para instalar o Eclipse CDT é necessário primeiramente instalar Java JDK (Kit de desenvolvimento JAVA).
Veremos a seguir o procedimento de instalação do Java SE Development Kit 8 e depois o procedimento de instalação do Eclipse CDT.
Instalando o JDK
Passo 1 – Acesse o site: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html para realizar o download e escolha a opção Windows x86 ou x64, de acordo com o seu 
sistema operacional.
Caso você não saiba qual é a arquitetura de seu sistema operacional, clique com o botão direito do mouse no ícone Meu Computador e selecione Propriedades.
Passo 2 – Depois de terminar o download, execute a instalação e clique em NEXT para continuar:
Passo 3 – Selecione NEXT novamente e inicie a instalação (aguarde):
Passo 4 – Informe o diretório da instalação do JDK, (não é interessante alterar o padrão):
quarta-feira, 22 de novembro de 2017 12:20
 Página 16 de Linguagem de Programação C 
Passo 5 – A instalação foi finalizada com sucesso. Clique em CLOSE.
Com o JDK instalado, podemos começar a instalação do Eclipse CDT.
Instalando o Eclipse CDT
Passo 1 – Acesse o site https://www.eclipse.org/downloads/ , e na opção Eclipse IDE for C/C++ Developers, escolha a versão desejada (Windows 32 ou Windows 64 bits):
Passo 2 – Clique no link – [Brazil] C3SL – Federal University of Paraná – para download:
Passo 3 – Após baixar o arquivo, descompacte e coloque no diretório Arquivos de Programas do Windows (Ex: C:\ Arquivos de Programas), uma vez que a IDE já é pré-instalada. Crie um atalho na área de trabalho 
(conforme imagem abaixo):
 Página 17 de Linguagem de Programação C 
Passo 4 – Nesta etapa, vamos instalar e configurar o Compilador “MinGW”. Para isso acesse o site: http://www.mingw.org/ , e clique Download Installer:
Passo 5 – Após baixar, execute o arquivo e clique sobre o botão INSTALL:
Passo 6 – Na tela a seguir clique sobre o botão CONTINUE:
 Página 18 de Linguagem de Programação C 
Passo 7 – Após realizar o download dos pacotes, clique em CONTINUE:
Passo 8 – Selecione as opções a seguir (conforme figura abaixo), clique na aba Installation e depois Apply Changes:
Passo 9 – Clique em APPLY para aplicar as alterações (aguarde o download):
 Página 19 de Linguagem de Programação C 
Passo 10 – O compilador foi instalado com sucesso: clique em CLOSE para finalizar:
Passo 11 – Na área de trabalho do computador (Desktop), clique no ícone para abrir o Eclipse, selecione a pasta para salvar o projeto e clique sobre o botão OK:
Passo 12 – Com o Eclipse aberto, selecione File/New/C Project para criar um projeto em Linguagem C.
Passo 13 – Digite um nome para o projeto e selecione o MinGW GCC como compilador do projeto (conforme imagem abaixo). A seguir, clique em NEXT:
 Página 20 de Linguagem de Programação C 
Obs. Selecione a opção “Hello World ANSI C Project”, para testar a IDE.
Passo 14 – Insira o nome do Autor e clique novamente em NEXT:
Passo 15 – Mantenha as duas opções marcadas (Debug e Release) (conforme a figura abaixo) e clique em FINISH.
 Página 21 de Linguagem de Programação C 
Obs: Abaixo encontra-se o código digitado para o teste, que imprime o resultado Hello World!!, na tela.
Passo 16 – Agora vamos compilar. Para isso clique sobre o botão BUILD ou (Ctrl + B) e clique em RUN ou (Ctrl + F11) para executar:
– Segue o resultado do código acima compilado e executado:
<http://linguagemc.com.br/instalando-o-eclipse-cdt-windows-8/> 
 Página 22 de Linguagem de Programação C 
Instalando o Netbeans para C/C++:
in
Compartilhar
Passo 1 – Para obter a IDE entrar no site: https://netbeans.org/ e selecionar a opção Download:
Passo 2 – Na tabela abaixo, selecionar o download da opção C/C++:
Passo 3 – O download do arquivo será iniciado. Após o término do mesmo, executar a instalação e clicar em Próximo para continuar:
Passo 4 – Marcar a opção “Eu aceito os termos do contrato de licença” e clicar em Próximo:
quarta-feira, 22 de novembro de 2017 12:24
 Página 23 de Linguagem de Programação C 
Passo 5 – Diretório de instalação do Netbeans e o Java JDK(não alterar): clicar em Próximo:
Passo 6 – Marcar a opção para verificar atualizações e clicar em Instalar (aguardar):
Passo 7 – Terminada a instalação, clicar em Finalizar:
 Página 24 de Linguagem de Programação C 
Passo 8 – Agora temos a IDE Netbeans C/C++:
Passo 9 – Agora vamos instalar e configurar o compilador para poder desenvolver em Linguagem C; iremos instalar o Cygwin.
Acessar o site para download: https://cygwin.com/ , e clicar no menu Install Cygwin. Selecionar de acordo com a arquitetura do sistema operacional para baixar:
Passo 10 – Após o término do download, executar a instalação e clicar em Avançar:
Passo 11 – Selecionar a opção “Install from Internet” e clicar em Avançar:
 Página 25 de Linguagem de Programação C 
Passo 12 – Marcar a opção All Users (Recomendado) e clicar em Avançar:
Passo 13 – Clicar em Avançar para continuar:
Passo 14 – Selecionar a opção “Direct Connection”, clicar em Avançar:
Passo 15 – Escolher o servidor para realizar o Download e clicar em Avançar :
 Página 26 de Linguagem de Programação C 
Passo 16 – Marcar o pacote “Devel” para instalar e selecionar Avançar:
Passo 17 – Selecionar Avançar novamente e aguardar até terminar o download dos pacotes:
Passo 18 – Após finalizado o download, clicar em Concluir:Passo 19 – Vamos testar o Compilador na IDE abrir o Netbeans e criar um novo projeto na aba Arquivo/Novo Projeto:
 Página 27 de Linguagem de Programação C 
Passo 20 – Selecionar em Categorias: C/C++ e na aba Projetos: Aplicação C/C++, clicar em Próximo:
Passo 21 – Digite o Nome do Projeto e clique em Finalizar:
Obs: Abaixo encontra-se o código digitado para o teste, que imprime o resultado Hello World!!, na tela.
Passo 22 – Selecionar o arquivo main e digitar o código mostrado no item anterior. Clicar em Criar Projeto (F11) para compilar e em seguida clicar no ícone Executar Projeto (F6), para executar o código conforme 
mostrado abaixo:
 Página 28 de Linguagem de Programação C 
Resultado do código acima compilado e executado:
O NetBeans já está configurado e testado. Pronto para usar.
<http://linguagemc.com.br/instalando-o-netbeans-para-cc/> 
 Página 29 de Linguagem de Programação C 
Como usar Dev C++ no Windows 8
Atenção amantes do Dev C++!!!
É possível usar o Dev C++ no Windows 8.
Melhor ainda, é possível usar um Dev-C++ atualizado e que funciona perfeitamente no Windows 8!
Se você quer usar o Dev-C++ porque gosta, ou então precisa usar o DevC++ no Windows 8 porque esta é a IDE utilizada na faculdade a minha sugestão é utilizar o Orwell Dev-C++.
Este é um fork do DevC++, ou seja é um projeto independente que continua atualizando o DevC++ com a concordância de seu autororiginal.
Existem versões modernas do compilador para 32 ou 64 bits.
O download do Orwell Dev-C++ com compilador pode ser feito diretamente do seguinte endereço.
http://sourceforge.net/projects/orwelldevcpp/files/Setup%20Releases/
A instalação é extremamente simples e a IDE tem atualizações consideráveis.
O blog do responsável pelo projeto Orwell Dev C++ no qual são divulgadas notícias e atualizações é:
http://orwelldevcpp.blogspot.com.br/
Uma outra alternativa para rodar o Dev C++ no Windows 8 seria configurar o Dev antigo para usar outro compilador mais atual. Mas não acho que isso seja prático pois o Orwell Dev C++ conta com 
várias atualizações e funcionou perfeitamente, portanto recomendo Orwell Dev-C++.
De <http://linguagemc.com.br/como-usar-dev-c-no-windows-8/> 
quarta-feira, 22 de novembro de 2017 12:28
 Página 30 de Linguagem de Programação C 
Tutorial de instalação do Visual Studio C++ 2010 Express
Processo de instalação do Visual Studio C++ 2010 Express passo a passo.
O Visual C++ 2010 Express da Microsoft é um ambiente integrado para programação em linguagem C e/ou C++ bastante completo e gratuito. Possui editor de código, compilador e ferramentas de 
depuração em ambiente integrado, com uma interface bastante intuitiva e funcional.
O Visual Studio 2010 Express possui ferramentas para programação em diversas linguagens como C++, C#, Visual Basic, etc. Estas ferramentas são gratuitas para estudantes e programadores 
iniciantes.
Como o nosso intuito é desenvolver em linguagem C, vamos instalar o Visual C++ 2010 Express.
Processo de download e instalação
1. As versões do Visual Studio podem ser encontradas em:
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express
2. Na página do Visual Studio 2010 Express Products você pode fazer o download de vários compiladores para várias linguagens. Para instalar a ferramenta para C é só procurar pelo Visual C++ 2010 
Express e clicar sobre o ícone do mesmo.
3. Clique no link do Visual C++ e vai abrir a página a seguir:
4. Aparece uma janela oferecendo o Visual Studio 2010 Professional, que é a versão paga, mas não necessitamos dela, usaremos a versão Express que é gratuita e ideal para estudantes. Para tanto 
clique no link do Visual C++ Express como indicado abaixo:
5. Execute o programa instalador.
6. Aceite os termos de licenciamento.
quarta-feira, 22 de novembro de 2017 12:29
 Página 31 de Linguagem de Programação C 
7. A princípio, não vamos precisar utilizar o Service Pack do SQL Express, portanto sua instalação é opcional. Clique em Next.
8. Por padrão o Visual C++ é instalado no caminho mostrado na figura. Observe que serão necessários no mínimo 2,3 Giga de espaço em disco para poder fazer a instalação, pois o Net framework é 
bastante extenso, além de outros pré-requisitos necessários para a ferramenta. Clique em Install.
9. Clique em Install e o C++ vai iniciar o download dos componentes do framework a serem instalados.
10. Essa é a parte mais demorada da instalação, pois depende principalmente da velocidade de download. Uma vez terminada o Visual C++ está pronto para ser utilizado.
 Página 32 de Linguagem de Programação C 
11. TESTANDO A INSTALAÇÃO
• No menu de programas clique em Microsoft Visual C++ 2010 Express
12. O ambiente do Visual Studio será carregado.
13. Para criar o primeiro programa, clique no menu File | New | Project
14. Escolha Win32 Console Application e no campo Name coloque um nome para a aplicação. Vamos chama-la de prjTeste.
15. Clique em Next para fazer a configuração da aplicação.
 Página 33 de Linguagem de Programação C 
16. Escolha Console Application e selecione também Empty Project.
17. Vai aparecer uma tela como a seguinte:
18. Clique com o botão direito sobre o prjTeste e adicione uma nova classe. Adicione o nome do programa com a extensão .c já que trata-se de código em linguagem C, enquanto que a 
extensão .cpp refere-se a código C++.
19. Digite o código a seguir para testar o funcionamento.
20. Clique no botão
para compilar e executar.
 Página 34 de Linguagem de Programação C 
21. O programa vai rodar e você vai visualizar o ambiente de execução como na figura a seguir:
22. FUNCIONAMENTO DO AMBIENTE DO VISUAL C++
Na janela Solution Explorer podemos visualizar os arquivos de um projeto
Podemos perceber que a solution foi denominada como slnTeste e dentro da solution fica armazenada a pasta do projeto prjTeste.
O projeto prjTeste é composto por diversas pastas, porém a pasta que nos interessá é a pasta Source Files, pois é nela que fica armazenado o código fonte. Neste caso o fonte está no arquivo Ola.c .
Importante: Todo arquivo escrito em linguagem C deve ser sempre salvo com a extensão . c.
23. PARA ABRIR UM PROJETO:
• Por padrão o Visual Studio salva os seus projetos no seguinte caminho:
• C:\Users\SeuUsuário\Documents\Visual Studio 2010\Projects
24. Para abrir um projeto: File | Open | Project Solution
25. Agora devemos abrir a pasta do projeto .
26. Clique na solution slnTeste para abrir o projeto.
 Página 35 de Linguagem de Programação C 
27. Eis o projeto aberto na figura a seguir.
<http://linguagemc.com.br/tutorial-de-instalacao-do-visual-studio-c-2010-express/> 
 Página 36 de Linguagem de Programação C 
Tutorial para instalação do Code Blocks.
Processo de instalação do Code Blocks passo a passo.
O Code::Blocks é um ambiente de desenvolvimento integrado para linguagem C/C++, que possui versões para Windows, GNU/Linux e MacOS. O interessante é que além de ser multiplataforma é 
também software livre. A versão mais recente do Code::Blocks data de 30 de maio de 2010.
Instalação do Code::Blocks
Você pode fazer o download gratuitamente no endereço: http://www.codeblocks.org/downloads/binaries
1. Escolha a opção <Next> para a janela do Setup Wizard.
2. Na tela de licenciamento, clique em <I agree> para concordar com os termos.
3. A seguir, na tela Choose Components clique em <Next>
4. Na tela Choose, Install Location clique sobre o botão <Install>
quarta-feira, 22 de novembro de 2017 12:29
 Página 37 de Linguagem de Programação C 
5. Aparecerá uma tela a conforme a baixo clique em <Sim> para executar.
6. Em seguida, certifique-se que o compilador foi detectado como : Default compiler: GNU GCC Compiler e, então, clique em OK.
7.Caso apareçauma janela de dicas (tips) clique em Close para fechá-la.
8. Escolha a opção Yes, associante Code :: Blocks with C/C++ file types, como indicado na figura seguinte, e clique em <OK>.
9. Agora vamos configurar o compilador e o debugger. No menu Settings , escolha a opçao Compiler and debugger, como indicado abaixo:
 Página 38 de Linguagem de Programação C 
10. Vai surgir a janela Global Compiler settings. Assinale as 4 opções indicadas na figura e depois clique em <OK>.
11. Para finalizar o processo, feche a janela do Code Blocks. Vai sugir uma nova tela, perguntando se você quer salvar as con figurações , conforme pode ser visto na figura a seguir. Clique em <Yes>.
12. Na tela de CodeBlocks Setup, clique em <Next>
13. E, finalmente clique em <Finish> para concluir o processo de instalação.
 Página 39 de Linguagem de Programação C 
Ok, o ambiente está pronto para ser utilizado no desenvolvimento de seus programas.
<http://linguagemc.com.br/tutorial-para-instalacao-do-code-blocks/> 
 Página 40 de Linguagem de Programação C 
Tutorial de instalação do Dev C++
Processo de instalação do Dev C++ passo a passo.
O Dev C++ é uma IDE leve, gratuita e fácil de utilizar para desenvolvimento de programas tanto em linguagem C como em C++. Es tas características fazem com que seja a ferramenta mais utilizada nos 
cursos universitários para disciplinas de introdução à programação com linguagem C.
Passo a passo para a instalação da ferramenta:
1. Você pode fazer uma busca no Google para baixar o instalador, ou fazer o download do executável gratuito no endereço:
http://www.bloodshed.net/devcpp.html
2. Execute o instalador, conforme a tela a seguir. Clique em OK
3. Selecione a língua da sua preferência para as instruções de instalação e clique em OK.
4. Clique no botão <Aceito> para concordar com o Contrato de Licença.
5. Clique no botão<seguinte>
6. Selecione o local da instalação do programa, o padrão(default) é: C:\Dev-Cpp
quarta-feira, 22 de novembro de 2017 13:15
 Página 41 de Linguagem de Programação C 
7. Clique em <Sim> caso queira que outros usuários do computador também possam usar o Dev-C++
8. Clique em <Terminar> para encerrar a instalação
9. Selecione a língua do editor e clique em <Next>, normalmente, eu opto por deixar em inglês que é o a língua original (afinal um programador tem que saber pelo menos o básico de inglês…), mas se 
você preferir, é possível escolher português.
10. Clique no botão <Next>
11. Clique no botão <Next>
 Página 42 de Linguagem de Programação C 
12. Clique no botão <OK> para concluir.
Pronto, a IDE está instalada e você já pode utilizá-la.
<http://linguagemc.com.br/tutorial-de-instalacao-do-dev-c/> 
 Página 43 de Linguagem de Programação C 
Bibliotecas
Acentuação de caracteres em C com locale.h
Localização de programas e acentuação em C com o arquivo de cabeçalho locale.h 
<locale.h> Chamamos de “localizar” um programa quando fazemos a adaptação deste às características de um determinado idioma ou de uma região. A linguagem C utiliza …
ctype.h – toupper, tolower, isalpha, isdigit em C
Em algumas situações é preciso determinar se o usuário digitou um caracter de determinado tipo (numérico ou uma letra por exemplo) ou então, é necessário converter um caracter minúsculo em maiúsculo 
para fazer uma comparação e tomar …
A biblioteca math.h
Fornece um conjunto de funções para operações matemáticas, tais como funções trigonométricas, hiperbólicas, logaritmos, potência e arredondamentos. Todas as funções da biblioteca math.h retornam um 
valor do tipo double. Na tabela abaixo apresentamos algumas funções presentes na …
A biblioteca padrão da linguagem C
C Standard Library é o nome da biblioteca padrão da linguagem C. Esta biblioteca possui uma série de funções prontas com recursos adicionais e disponíveis para utilização. A biblioteca padrão de C é composta 
ao todo por …
A biblioteca string.h
A biblioteca string.h da linguagem C, contém uma série de funções para manipular strings. Neste artigo veremos como: Copiar strings em C usando strcpy e strncpy; concatenar strings em linguagem C usando 
strcat e strncat; descobrir o …
<http://linguagemc.com.br/bibliotecas/> 
quarta-feira, 22 de novembro de 2017 09:36
 Página 44 de Linguagem de Programação C 
A biblioteca padrão da linguagem C 
C Standard Library é o nome da biblioteca padrão da linguagem C. Esta biblioteca possui uma série de funções prontas com recursos adicionais e disponíveis para utilização. A biblioteca 
padrão de C é composta ao todo por 24 arquivos de cabeçalho. Como podemos ver a quantidade de arquivos da biblioteca é bem pequena. A ideia por trás dessa biblioteca é fornecer 
apenas um conjunto básico de operações, de tal forma que a portabilidade do C ANSI entre diversas plataformas seja relativamente simples.
Além da biblioteca padrão, outras bibliotecas foram desenvolvidas para incorporar outras funcionalidades específicas.
Arquivos de Cabeçalho do ANSI C
Nome do 
arquivo
Descrição do arquivo de cabeçalho Disponibilidade a partir 
do padrão
<assert.h> Implementa ajuda na detecção de erros em versões de depuração de programas.
<complex.h> Trata da manipulação de números complexos. – Até aqui C99
<ctype.h> Funções para conversão de maiúsculas, minúsculas e outros tratamentos de caracteres.
<errno.h> Teste de códigos de erro reportados pelas funções de bibliotecas.
<fenv.h> Define várias funções e macros para tratar de exceções em variáveis do tipo ponto flutuante. C99
<float.h> Define limites e precisão de variáveis de ponto flutuante.
<inttypes.h> Trata de conversão precisa entre tipos inteiros. C99
<iso646.h> Adiciona a possibilidade de programação usando a codificação de caracteres de acordo com a ISO646. NA1
<limites> Constantes de propriedades específicas de implementação da biblioteca de tipos inteiros, como a faixa de números que pode ser
representada (_MIN, _MAX).
<locale.h> Especifica constantes de acordo com a localização específica, como moeda, data, etc.
<math.h> Funções matemáticas comuns em computação.
<setjmp.h> Define as macros setjmp e longjmp, para saídas não locais e tratamento de exceções.
<signal.h> Implementa definições para receber e fazer o tratamento de sinais.
<stdarg.h> Acesso dos argumentos passados para funções com parâmetro variável.
<stdbool.h> Trata da definição para tipo de dados booleano. C99
<stdint.h> Padrões de definição de tipos de dados inteiros. C99
<stddef.h> Padrões de definições de tipos.
<stdio.h> Tratamento de entrada/saída.
<stdlib.h> Implementa funções para diversas operações, incluindo conversão, alocação de memória, controle de processo, funções de busca 
e ordenação.
<string.h> Tratamento de strings.
<tgmath.h> Implementa facilidades para utilização de funções matemáticas. C99
<time.h> Trata de tipos de data e hora.
<wchar.h> Tratamento de caracteres para suportar diversas línguas. NA1
<wctype.h> Contém funções para classificação de caracteres wide. NA1
<http://linguagemc.com.br/a-biblioteca-padrao-da-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 08:28
 Página 45 de Linguagem de Programação C 
ctype.h – toupper, tolower, isalpha, isdigit em C
Em algumas situações é preciso determinar se o usuário digitou um caracter de determinado tipo (numérico ou uma letra por exemplo) ou então, é necessário converter um caracter minúsculo em 
maiúsculo para fazer uma comparação e tomar uma decisão. Para esses e outros casos onde necessitamos trabalhar com caracteres , a linguagem C possui uma biblioteca com funções sob medida 
para tais situações: ctype.h.
A biblioteca ctype.h contém funções e macros para manipulação de caracteres.
Utilizando as funções desta biblioteca podemos verificar se um caracter é numérico, ou se é maiúsculo, minúsculo,representa espaço em branco etc.
Na listagem abaixo, podemos visualizar as principais funções de ctype.h.
Funções para conversão de caracteres maiúsculos e minúsculos:
tolower Converte o caracter em minúsculo
toupper Converte caracter minúsculo em maiúsculo.
Funções para manipulação de caracteres
isalnum Verifica se o caracter é alfanumérico
isalpha Verificar se o caracter é uma letra do alfabeto
iscntrl Verificar se o caracter é um caracter de controle
isdigit Verificar se o caracter é um digito decimal
isgraph Verifica se o caracter tem representação gráfica
islower Verifica se o caracter é minúsculo
isprint Verifica se o caracter é imprimível.
ispunct Verifica se o caracter é um ponto
isspace Verificar se o caracter é um espaço em branco
isupper Verifica se o caracter é uma letra maiúscula
isxdigit Verifica se o caracter é um dígito hexadecimal
Vamos elaborar um programa em linguagem C para exemplificar a utilização de algumas funções de ctype.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h> //biblioteca p/ as funções isalpha isdigit toupper tolower
int main(void)
{
 char letra;
 char op;
 printf("Digite uma letra do alfabeto: ");
 scanf("%c", &letra);
 //isalpha verifica se é uma letra do alfabeto
 if (isalpha(letra))
 {
 printf("\n Voce digitou a letra %c \n\n", letra);
 //toupper transforma em maiuscula
 letra = toupper(letra);
 printf("Maiuscula: %c \n\n", letra);
 //tolower transforma em minuscula
 letra = tolower(letra);
 printf("Minuscula: %c \n\n", letra);
 }
 else
 {
 printf("Você não digitou uma letra!!!\n");
 }
 printf("\n Informe um numero de 0 a 9: ");
 fflush(stdin);
 scanf("%c", &op);
 //isdigit verifica se o caracter recebido é um dígito
 if(isdigit(op))
 {
 printf("Digito: %c \n\n", op);
 }
 else
 printf("Voce nao digitou um numero!!!\n\n");
 system("pause");
 return 0;
}
Telas de execução
Tela de execução do exemplo ctype.h
quarta-feira, 22 de novembro de 2017 09:49
 Página 46 de Linguagem de Programação C 
Tela de execução do ctype.h com valores inválidos
<http://linguagemc.com.br/ctype-h-toupper-tolower-isalpha-isdigit-em-c/> 
 Página 47 de Linguagem de Programação C 
A biblioteca math.h
Fornece um conjunto de funções para operações matemáticas, tais como funções trigonométricas, hiperbólicas, logaritmos, potên cia e arredondamentos.
Todas as funções da biblioteca math.h retornam um valor do tipo double.
Na tabela abaixo apresentamos algumas funções presentes na biblioteca math.h
Função Descrição do comando
floor( ) arredonda para baixo
ceil( ) arredonda para cima
sqrt( ) Calcula raiz quadrada
pow(variável, expoente) potenciação
sin( ) seno
cos( ) cosseno
tan( ) Tangente
log( ) logaritmo natural
log10( ) logaritmo base 10
No programa abaixo, temos um resumo das funções mais utilizadas e os comentários.
Exemplo de utilização da biblioteca math.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main (void)
{
 double x = 9.75;
 double arredonda_pbaixo = 0.0;
 double arredonda_pcima = 0.0;
 double raiz_quadrada = 0.0;
 double potencia = 0;
 double seno = 0;
 double cosseno = 0;
 double tangente = 0;
 double logaritmo_natural = 0;
 double logaritmo_xbase10 = 0;
 printf("\n********* Utilizando a biblioteca math.h ***********\n\n");
 printf("\n Funcoes de arredondamento\n\n");
 printf("Valor original de x = %f\n", x);
 arredonda_pbaixo = floor(x);
 printf("Valor aproximado para baixo %f \n", arredonda_pbaixo );
 arredonda_pcima = ceil(x);
 printf("Valor aproximado para cima %f \n", arredonda_pcima);
 printf("\n----------------------------------------------------\n\n");
 printf("\n Funcoes de raiz e potenciacao \n\n");
 printf("Valor original de x = %lf\n", x);
 raiz_quadrada = sqrt(x);
 printf("Valor da raiz quadrada %f \n", raiz_quadrada);
 x = ceil(x); //arredondando o x para cima, x passa a valer 10
 potencia = pow(x,2); //elevando o valor de x ao quadrado
 printf("Valor de %.2lf ao quadrado %.2f \n", x, potencia);
 printf("\n----------------------------------------------------\n\n");
 printf("\n Funcoes trigonometricas\n\n");
 x = 0; //atribuindo zero em x para fazer os cálculos trigonométricos
 seno = sin(x);
 printf("Valor de seno de %.2f = %.2f \n", x, seno);
 cosseno = cos(x);
 printf("Valor de cosseno de %.2f = %.2f \n", x, cosseno);
 tangente = tan(x);
 printf("Valor de tangente de %.2f = %.2f \n\n", x, tangente);
 printf("\n----------------------------------------------------\n\n");
 printf("\n Funcoes logaritmicas\n\n");
 x = 2.718282;
 logaritmo_natural = log(x);
 printf("Logaritmo natural de x %.2f = %.2f \n", x, logaritmo_natural);
 x = 10;
 logaritmo_xbase10 = log10(x);
 printf("Logaritmo de x na base 10 %.2f = %.2f \n",x,logaritmo_xbase10);
 printf("\n----------------------------------------------------\n\n");
 getch();
 return(0);
}
Tela de execução
quarta-feira, 22 de novembro de 2017 10:12
 Página 48 de Linguagem de Programação C 
Tela de execução da biblioteca math.h
<http://linguagemc.com.br/a-biblioteca-math-h/> 
 Página 49 de Linguagem de Programação C 
Constantes
Constantes em C usando #define
Constantes são usadas para armazenar valores que NÃO podem ser modificadas durante a execução de um programa. Uma constante precisa ser declarada, e para tanto usamos a diretiva de pré-processador 
#define. Sintaxe: #define <nome_da_constante> <valor> A declaração …
<http://linguagemc.com.br/constantes/> 
quarta-feira, 22 de novembro de 2017 11:26
 Página 50 de Linguagem de Programação C 
Constantes em C usando #define
Constantes são usadas para armazenar valores que NÃO podem ser modificadas durante a execução de um programa.
Uma constante precisa ser declarada, e para tanto usamos a diretiva de pré -processador #define.
Sintaxe:
#define <nome_da_constante> <valor>
A declaração da constante deve ser feita no início do programa.
É extremamente recomendável utilizar letras maiúsculas ao declarar uma constante.
Declarando as constantes como maiúsculas podemos facilmente diferenciá -las das variáveis que por convenção devem ser declaradas em letras minúsculas.
Exemplos de declaração de constantes
#define ICMS 0.18
#define MAX 100
#define ERRO "Erro!!!"
Quando o programa é compilado, o compilador substitui as ocorrências das constantes definidas pelo valor declarado.
A constante tem duas vantagens principais:
1 – Facilitam a modificação do programa
2 – Tornam o programa mais legível.
Exemplo de programa em linguagem utilizando constantes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <conio.h>
//declaração da constante
#define ICMS 0.18;
int main(void)
{
 float preco_produto, valor_icms;
 printf("Informe o valor do produto: " );
 scanf("%f", &preco_produto);
 valor_icms = preco_produto * ICMS;
 printf("Valor de imposto a ser pago: R$ %.2f",valor_icms );
 getch();
 return 0;
}
Tela de execução
Tela de execução do programa usando constantes em C
De <http://linguagemc.com.br/constantes-em-c-usando-define/> 
quarta-feira, 22 de novembrode 2017 09:26
 Página 51 de Linguagem de Programação C 
Strings
Como acentuar caracteres em C usando a tabela ASCII
A forma mais simples de exibir caracteres acentuados em C é usar um código para o caracter correspondente usando tabela ASCII . Esta tabela pode ser encontrada em: www.asciitable.com. Vejamos 
um exemplo: Suponha que você deseje apresentar a …
A biblioteca string.h
A biblioteca string.h da linguagem C, contém uma série de funções para manipular strings. Neste artigo veremos como: Copiar s trings em C usando strcpy e strncpy; concatenar strings em linguagem C 
usando strcat e strncat; descobrir o …
String em C – vetor de caracteres
O termo string serve para identificar uma sequência de caracteres. Na prática, as strings são usadas para representar textos. Em linguagem C, ao contrário de outras linguagens, não existe um tipo de 
dados string nativo. Para representar …
<http://linguagemc.com.br/strings/> 
quarta-feira, 22 de novembro de 2017 09:36
 Página 52 de Linguagem de Programação C 
Como acentuar caracteres em C usando a tabela ASCII 
A forma mais simples de exibir caracteres acentuados em C é usar um código para o caracter correspondente usando tabela ASCII .
Esta tabela pode ser encontrada em:
www.asciitable.com
Vejamos um exemplo:
Suponha que você deseje apresentar a frase: “O valor da variável é = ” com os caracteres devidamente acentuados usando o printf.
Consultando a tabela verificamos que:
á corresponde ao valor 160
é corresponde ao valor 130
(Veja na parte Extended ASCII Codes)
Então usamos uma marcação de caracter ou seja %c no lugar da letra com acento e passamos o valor listado na tabela como se fosse uma variável.
Veja o exemplo abaixo:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 int i = 10 
 
 printf("O valor da variavel %c : %d\n",160,130, i);
 
 system("pause");
 return 0;
}
Tela de execução
Tela de execução de como acentuar caracteres
Para acentuar outros caracteres é só consultar o código correspondente na tabela ASCII e fazer o mesmo.
De <http://linguagemc.com.br/como-acentuar-caracteres-em-c/> 
quarta-feira, 22 de novembro de 2017 09:29
 Página 53 de Linguagem de Programação C 
A biblioteca string.h 
A biblioteca string.h da linguagem C, contém uma série de funções para manipular strings.
Copiar strings em C usando strcpy e strncpy;•
Concatenar strings em linguagem C usando strcat e strncat;•
Descobrir o tamanho de uma string em C usando strlen();•
Comparar strings em C usando strcmp();•
Neste artigo veremos como:
Construiremos exemplos de programas em C para exemplificar as funções mais utilizadas.
Nas funções a seguir, utilizamos o seguinte padrão para descrever
a sintaxe:
string_destino: é a string que recebe a cópia
string_origem: é a string que contém a cadeia de caracteres que será copiada.
strcpy
Sintaxe:
strcpy(string_destino, string_origem);
Realiza a cópia do conteúdo de uma variável a outra.
Obs:Ambas devem ser strings.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h> //necessário para strcpy
#include <conio.h>
int main (void)
{
 char nome[15];
 strcpy(nome, "Fulano de Tal");
 //strcpy(string_destino, string_origem);
 //note que a string de destino é nome
 //a string de origem é "Fulano de Tal"
 printf("Nome = %s", nome);
 getch();
 return 0;
}
Tela de execução
Execução do exemplo strcpy
strncpy
Sintaxe:
strncpy(string_destino, string_origem, tamanho);
Realiza a cópia do conteúdo de uma variável a outra, porém,
deve ser especificado o tamanho a ser copiado.
Obs:Tanto a variável de destino como a de origem devem ser strings.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>//necessário para strncpy
#include <conio.h>
int main (void)
{
 char str1[8] = "Curso C";
 char str2[5];
 strncpy(str2, str1, 5);
 str2[5] = '\0';
 printf("str2 = %s\n", str2);
 getch();
 return 0;
}
Tela de execução
Execução do exemplo strncpy
strcat
quarta-feira, 22 de novembro de 2017 09:28
 Página 54 de Linguagem de Programação C 
Sintaxe
strcat(string_destino, string_origem);
Realiza a concatenação do conteúdo de uma variável a outra.
Ambas devem ser strings.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Exemplo strcat
#include <stdio.h>
#include <string.h>//necessário para strcat
#include <conio.h>
int main (void)
{
 char str[10] = "Curso";
 strcat(str, " de C");
 //Concatena a string " de C" com o conteúdo da string str
 printf("str = %s\n", str);
 //Será exibido curso de C
 getch();
 return 0;
}
Tela de execução
Execução do exemplo strcat
strncat
Sintaxe:
strncat(string_destino, string_origem, tamanho);
Realiza a concatenação do conteúdo de uma variável a outra,
porém, deve ser especificado o tamanho a ser concatenado.
Ambas devem ser strings.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Exemplo strncat
#include <stdio.h>
#include <string.h>//necessário para strncat
#include <conio.h>
int main (void)
{
 char str1[20] = "Curso";
 char str2[17] = " de programacao C";
 strncat(str1, str2, 15);
 //concatena a string1 com 15 posições da string2
 printf("str1 = %s\n", str1);
 //Será exibido Curso de Programação
 getch();
 return 0;
}
Tela de execução
Execução do exemplo strncat
strlen
Sintaxe:
variável do tipo inteiro = strlen(string);
Determina o tamanho de uma string.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Exemplo strlen
#include <stdio.h>
#include <string.h>//necessário para strlen
#include <conio.h>
int main (void)
{
 char str[5] = "Curso";
 int tamanho;
 tamanho = strlen(str);
 printf("O tamanho da string %s vale %d\n", str, tamanho);
 getch();
 return 0;
}
Tela de execução
 Página 55 de Linguagem de Programação C 
Execução do exemplo strlen
strcmp
Sintaxe:
variável do tipo inteiro = strcmp(string1, string2);
Compara o conteúdo de duas strings;
Possíveis valores de retorno:
0: conteúdo das strings são iguais
< 0: conteúdo da string1 é menor do que string2
> 0: conteúdo da string1 é maior do que string2
Exemplo de programa usando strcmp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>//necessário para strcmp
#include <conio.h>
int main (void)
{
 char str1[3] = "abc";
 char str2[3] = "abd";
 int retorno;
 retorno = strcmp(str1, str2);
 printf("retorno = %d\n", retorno);
 //mostra o retorno da função strcmp
 getch();
 return 0;
}
Tela de execução
Execução do exemplo strcmp
strncmp
Sintaxe:
variável do tipo inteiro = strncmp(string1, string2, tamanho);
Também faz a comparação do conteúdo de duas strings, porém, deve ser especificado o tamanho a ser comparado;
Possíveis valores de retorno:
0: conteúdo das strings são iguais
< 0: conteúdo da string1 é menor do que string2
> 0: conteúdo da string1 é maior do que string2
Exemplo de programa usando strncmp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Exemplo strncmp
#include <stdio.h>
#include <string.h>//necessário para strncmp
#include <conio.h>
int main (void)
{
 char str1[10] = "Curso de C";
 char str2[22] = "Curso de programação C";
 int retorno;
 retorno = strncmp(str1, str2, 5);
 printf("retorno = %d\n", retorno);
 getch();
 return 0;
}
Tela de execução
Execução do exemplo strncmp
De <http://linguagemc.com.br/a-biblioteca-string-h/> 
 Página 56 de Linguagem de Programação C 
String em C – vetor de caracteres
O termo string serve para identificar uma sequênciade caracteres.
Na prática, as strings são usadas para representar textos.
Em linguagem C, ao contrário de outras linguagens, não existe um tipo de dados string nativo.
Para representar uma string em C, devemos criar um vetor de caracteres, ou seja, um vetor do tipo char.
Vejamos como declarar string em C.
Exemplo de declaração de string:
char nome_cliente[61];
Este comando cria a variável nome_cliente como um vetor de char com capacidade de armazenamento de 61 caracteres.
Ocorre, que o último caracter de uma string, deve ser sempre o caracter nulo “ \0” que serve para indicar o final da string.
Sendo assim, em nosso exemplo temos 60 caracteres úteis para armazenar o nome, pois o \0 é o terminador da string e ocupa uma posição de armazenamento.
Como foram declaradas 61 posições e uma delas é ocupada pelo terminador, as outras 60 posições estão livres para armazenament o de caracteres.
Inicializando o valor de strings.
Vejamos alguns exemplos:
char nome_cliente[30] = "Fulano";
char nome_cliente[30] = {'F','u','l','a','n','o'};
Inicializando uma string sem definir o tamanho do vetor
char nome_cliente[] = "Fulano";
Neste caso, a quantidade de caracteres de armazenamento é calculada automaticamente de forma a ter a dimensão exata para cont er a string que está sendo atribuída.
Para armazenar “Fulano”, são necessários 6 caracteres + 1 para o finalizador \0.
Então podemos dizer que
char nome_cliente[] = "Fulano";
equivale a declarar
char nome_cliente[7] = "Fulano";
Lendo uma string em C
Usando scanf
A função scanf permite fazer leitura de strings usando %s.
A função scanf realiza a leitura até encontrar um espaço, depois encerra a leitura e coloca o caracter terminador \0.•
A variável que vai armazenar a string não necessita ser precedida por &.•
Em relação ao uso de scanf para armazenar string devemos observar duas coisas:
Exemplo de utilização do scanf:
scanf(“%s”,nome);
Exemplo: Usando scanf para receber uma string.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<conio.h>
int main(void)
{
 char nome[61];
 printf("Digite seu nome: ");
 scanf("%s",nome);
 printf("O nome armazenado foi: %s", nome);
 getch();
 return 0;
}
Tela de execução
Tela de Execução exemplo 1
Função gets – (get string)
Esta função armazena tudo que foi digitado, inclusive os espaços, até que a tecla ENTER seja pressionada.
Exemplo:
printf (“Digite o nome do cliente:”);
gets(nome_cliente);
Exemplo de programa usando gets() para armazenar uma string
1
2
3
4
#include<stdio.h>
#include<conio.h>
int main(void)
quarta-feira, 22 de novembro de 2017 09:28
 Página 57 de Linguagem de Programação C 
4
5
6
7
8
9
10
11
12
13
14
15
int main(void)
{
 char nome[61];
 printf("Digite seu nome: ");
 gets(nome);
 printf("O nome armazenado foi: %s", nome);
 getch();
 return 0;
}
Tela de execução
Tela de execução do exemplo 2
Observe que por definição, uma string nada mais é do que um vetor de caracteres.
Podemos percorrer o vetor normalmente, usando as mesmas estratégias usadas para vetores de números.
Exemplo: percorrendo um vetor de char
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int i;
 //declarando e atribuindo valores no vetor de char
 char texto[6] = "string";
 printf("Valor da variável texto = %s\n", texto);
 //Percorrendo o vetor de char e mostrando
 //cada elemento individualmente
 for (i=0; i<6; i++)
 {
 printf("Valor do elemento %d da string = %c\n",i, texto[i]);
 }
 getch();
 return 0;
}
Tela de execução
Tela de execução do exemplo 3
De <http://linguagemc.com.br/string-em-c-vetor-de-caracteres/>
 Página 58 de Linguagem de Programação C 
Acentuação de caracteres em C com locale.h
Localização de programas e acentuação em C com o arquivo de cabeçalho locale.h
<locale.h>
Chamamos de “localizar” um programa quando fazemos a adaptação deste às características de um determinado idioma ou de uma região.
A linguagem C utiliza o arquivo de cabeçalho locale.h para implementar a localização de programas.
Veremos dois exemplos para permitir suporte a língua portuguesa. A utilização do arquivo locale.h e da função setlocale() configurada adequadamente vai garantir que caracteres como “ç” e 
acentuação sejam exibidos normalmente em nosso programa.
Exemplo prático:
Vejamos um programa-exemplo que altera a localidade para a localidade padrão do sistema operacional.
Assim, se você estiver usando um sistema operacional em português o suporte ao idioma padrão do sistema será configurado para o programa escrito em C através da função setlocale.
Vamos ao código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <locale.h> //necessário para usar setlocale
int main(void)
{
printf("\n****** Verificando a localidade corrente ********\n\n");
printf ("Localidade corrente: %s\n", setlocale(LC_ALL,NULL) );
printf("Não é possível usar acentuação ou ç corretamente...\n\n");
printf("\n****** Alterando para a localidade do sistema ********\n\n");
//alterando para o padrão do sistema operacional
printf("A localidade corrente agora é %s \n", setlocale(LC_ALL,""));
printf("Agora não tem mais problema algum!\n");
printf("Já posso usar acentuação e também o caracter ç...\n\n\n");
 system("pause");
 return 0;
}
Tela de execução:
Também é possível configurar o idioma português da seguinte forma:
setlocale(LC_ALL, “Portuguese”);
Vejamos um segundo exemplo.
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
 setlocale(LC_ALL, "Portuguese");
 printf("Utilizando caracteres e acentuação da língua portuguesa!\n\n");
 system("pause");
 return 0;
}
Tela de execução:
Conhecendo a função setlocale do arquivo de cabeçalho locale.h
Utilizamos a função setlocale() para fazer a adaptação do programa ao idioma desejado.
Esta adaptação trata de informações sobre a apresentação de alguns dados, tais como:
– Caracteres e acentuação específicos do idioma.
– Formato de números e valores monetários
– Formatação de data e hora
Um programa escrito em C é iniciado com a localização-padrão “C” de acordo com o padrão ISO. Esta localização é uma localização “neutra” e contém informações mínimas a fim de proporcionar uma 
execução consistente independente do ambiente.
Em alguns casos é necessário alterar a localização-padrão “C” para adequar-se ao formato do idioma ou representações específicas de datas e horas.
A função setlocale pode ser usada para modificar essa localização para outra desejada e que seja adequada ao idioma usado no programa.
quarta-feira, 22 de novembro de 2017 09:43
 Página 59 de Linguagem de Programação C 
Vamos analisar mais detalhadamente a sintaxe da função.
Sintaxe:
setlocale(int categoria, const char *local)
onde:
categoria é a categoria a ser modificada ou consultada.
local é uma string que vai corresponder a uma localidade que será atribuída a uma categoria representada pelo argumento categoria.
Sendo que:
A string “C” corresponde à localidade padrão.
A string “” corresponde a localidade de uso corrente do sistema operacional.
NULL faz a consulta do valor atual da localidade estabelecida para a categoria do primeiro argumento da função
Para utilizar a localidade especificada pelo sistema operacional usamos a função setlocale() da seguinte forma:
set locale(LC_ALL,“”) onde LC_ALL faz referência à todos os aspectos da localização.
Como a função foi usada com a string “” a localização foi configurada com o padrão do sistema operacional.
Estaopção é interessante pois é mais portável já que funciona bem em qualquer sistema operacional.
É possível escolher uma localidade especificando diretamente o nome da mesma, porém é importante notar que diferentes sistema s operacionais usam diferentes formas para lidar com localidades. 
Devido a este fato o código torna-se menos portável ao optar por esta forma mais específica.
Por exemplo: no Windows 7 e também no Windows 8 a localidade brasileira é dada por: “Portuguese_Brasil.1252”, porém no Linux para fazer referência à localidade brasileira devemos usar 
“pt_BR_utf8”.
<http://linguagemc.com.br/localizacao-de-programas-com-locale-h/> 
 Página 60 de Linguagem de Programação C 
Variáveis
O comando syzeof
Permite saber o número de bytes ocupado por um determinado tipo de variável. Sintaxe: sizeof(tipo); Exemplo: A expressão sizeof(float) retorna o número de bytes ocupado por um float. Como o operador 
sizeof retorna um valor …
Tipos de dados em C
Existem 5 tipos de dados primitivos (pré-definidos) em C. São eles: Palavra Chave Tipo char caracter int inteiro float real de precisão simples double real de precisão dupla void vazio (sem valor) O tamanho e a 
…
Variáveis em Linguagem C
O que é uma variável? Variável é um local reservado na memória para armazenar um tipo de dado. Toda variável deve ter um identificador, ou seja, um nome. Além de ter um nome, a variável também precisa 
…
<http://linguagemc.com.br/variaveis/> 
quarta-feira, 22 de novembro de 2017 10:33
 Página 61 de Linguagem de Programação C 
Variáveis em Linguagem C
O que é uma variável?
Variável é um local reservado na memória para armazenar um tipo de dado.
Toda variável deve ter um identificador, ou seja, um nome.
Além de ter um nome, a variável também precisa ter um tipo.
O tipo de dado de uma variável determina o que ela é capaz de armazenar.
Tipos de dados
Existem diversos tipos de dados que podem ser usados nas variáveis.
Cada tipo de dado é específico para armazenar um determinado formato de dado.
Inteiro: armazena números inteiros•
Real: armazena números com casas decimais, são as variáveis de ponto flutuante;•
Podemos dizer que os principais tipos de dados numéricos se dividem em:
O tipo de dado caracter é capaz de representar um caracter ou um conjunto de caracteres (letras, dígitos ou símbolos) .
Tipos de dados mais comuns em linguagem C
int: armazena valores numéricos inteiros.
char: armazena caracteres.
float: armazena números com ponto flutuante (reais) com precisão simples.
double: armazena números com ponto flutuante, com precisão dupla, ou seja, normalmente possui o dobro da capacidade de uma variáveldo tipo float.
Sintaxe de declarações de variáveis em C
Em C devemos listar primeiro o tipo, depois o nome da variável.
Sintaxe:
<tipo> <nome_da_variável>;
Exemplo de declaração de variável do tipo inteiro
int contador;
int é o tipo da variável (inteiro)•
contador é o nome da variável.•
onde:
Declarando uma variável real (ponto flutuante):
float salario;
Declarando uma variável do tipo caracter:
char letra;
Endereço de uma variável
Toda variável possui um endereço de memória associado a ela. Esse endereço refere-se ao local da memória onde os dados ficam armazenados.
Quando um programa está sendo escrito, não conhecemos o endereço onde a variável será armazenada. Sendo assim, para fazer referência à variável usamos o nome da mesma e o computador se 
encarrega do resto.
Regras para criação de nomes de variáveis
Devemos observar algumas regras para criar os identificadores das variáveis.
O nome de uma variável deve sempre iniciar com uma letra ou com _ , jamais deve iniciar comum número.
Exemplo:
float total2; // está correto
Como visto, o nome de uma variável pode conter dígitos em qualquer posição, menos na primeira.•
float 2total; //está errado, pois não iniciou com uma letra.
Utilize nomes representativos
Exemplo:
Neste exemplo o nome da variável já diz o que ela vai armazenar.○
float salario;
Isso significa que uma variável declarada como Total será diferente de total.•
Lembre-se que a linguagem C é “case sensitive”, isto é, as letras maiúsculas e minúsculas fazem diferença, pois sãos tratadas como caracteres diferentes.
Comando de atribuição
Atribuir significa armazenar um valor em uma variável.
Em linguagem C usamos o operador = para fazer uma atribuição.
Exemplo:
X = 10;
Este comando atribui o valor 10 para a variável X.
Para poder atribuir um valor a uma variável, esta tem que ter sido previamente declarada.
<http://linguagemc.com.br/variaveis-em-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 10:58
 Página 62 de Linguagem de Programação C 
O comando syzeof
Permite saber o número de bytes ocupado por um determinado tipo de variável.
Sintaxe:
sizeof(tipo);
Exemplo:
A expressão sizeof(float) retorna o número de bytes ocupado por um float.
Como o operador sizeof retorna um valor inteiro podemos visualizar esse valor usando %d.
É possível também utilizar este operador aplicando-o a uma expressão.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
int main(void)
{
 float vteste;
 printf(" --- TIPO ---|--- BYTES ---\n");
 printf(" char .......: %d bytes\n", sizeof(char));
 printf(" short.......: %d bytes\n", sizeof(short));
 printf(" int.........: %d bytes\n", sizeof(int));
 printf(" long........: %d bytes\n", sizeof(long));
 printf(" float ......: %d bytes\n", sizeof(float));
 printf(" double......: %d bytes\n", sizeof(double));
 printf(" long double.: %d bytes\n\n", sizeof(long double));
 printf("\n O tamanho de vteste e...: %d \n\n", sizeof vteste);
 
 getch();
 return 0;
}
Tela de execução
Tela de execução do exemplo usando o comando sizeof
<http://linguagemc.com.br/o-comando-syzeof/> 
quarta-feira, 22 de novembro de 2017 10:35
 Página 63 de Linguagem de Programação C 
Tipos de dados em C
Existem 5 tipos de dados primitivos (pré-definidos) em C.
São eles:
Palavra Chave Tipo
char caracter
int inteiro
float real de precisão simples
double real de precisão dupla
void vazio (sem valor)
O tamanho e a faixa de valores dependem do computador e do compilador utilizado.
O padrão ANSI C determina somente um intervalo de valores mínimo para cada tipo de dado.
Modificadores de Tipos
Com exceção de void, os outros tipos de dados primitivos podem ter modificadores.
Os modificadores alteram o tamanho do tipo de dado ou sua forma de representação.
Sua utilização faz com que seja possível adequar-se melhor às necessidades de armazenamento de dados em determinados casos.
Veja quais são os modificadores na tabela abaixo.
Palavra Chave Tipo
signed caracter
unsigned Inteiro
long longo
short curto
Tipos de dados e modificadores.
Palavra chave Tipo Tamanho Intervalo
char Caracter 1 -128 a 127
signed char Caractere com sinal 1 -128 a 127
unsigned char Caractere sem sinal 1 0 a 255
Int Inteiro 2 -32.768 a 32.767
signed int Inteiro com sinal 2 -32.768 a 32.767
unsigned int Inteiro sem sinal 2 0 a 65.535
short int Inteiro curto 2 -32.768 a 32 767
signed short int Inteiro curto com sinal 2 -32.768 a 32.767
unsigned short int Inteiro curto sem sinal 2 0 a 65.535
long int Inteiro long 4 -2.147.483.648 a 2.147.483.647
signed long int Inteiro longo com sinal 4 -2.147.483.648 a 2.147.483.647
unsigned long int Inteiro longo sem sinal 4 0 a 4.294.967.295
float Ponto flutuante com precisão simples 4 3.4 E-38 a 3.4E+38
double Ponto flutuante com precisão simples 8 1.7 E-308 a 1.7E+308
long double Ponto flutuante com precisão dupla longo 16 3.4E-4932 a 1.1E+4932
<http://linguagemc.com.br/tipos-de-dados-em-c/> 
quarta-feira, 22 de novembro de 2017 10:43
 Página64 de Linguagem de Programação C 
Structs
Redefinição de tipos com typedef
O comando typedef é usado para criar “sinônimo” ou um “alias” para tipos de dados existentes. Então na prática podemos dizer que estamos renomeando um tipo de dados. A renomeação de tipos facilita a 
organização …
Struct em C
Uma struct é uma variável especial que contém diversas outras variáveis normalmente de tipos diferentes. As variáveis internas contidas pela struct são denominados membros da struct. Podemos dizer que 
as structs da linguagem C são o …
<http://linguagemc.com.br/structs/> 
quarta-feira, 22 de novembro de 2017 10:20
 Página 65 de Linguagem de Programação C 
Redefinição de tipos com typedef
O comando typedef é usado para criar “sinônimo” ou um “alias” para tipos de dados existentes. Então na prática podemos dizer que estamos renomeando um tipo de dados.
A renomeação de tipos facilita a organização e o entendimento do código.
Sintaxe:
typedef <nome do tipo de dado> <novo nome>;
É importante ressaltar que o comando typedef não cria um novo tipo. Ele apenas permite que um tipo existente seja denominado de uma forma diferente, de acordo com a especificação desejada pelo 
programador.
Exemplo: Redefinindo tipos básicos com typef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
int main (void) 
{
 //redefinição do tipo float como nota
 typedef float nota;
 
 //declarando as variáveis usando o tipo de dados renomeado
 nota prova1 = 0, prova2 = 0, media = 0;
 
 printf ("Informe a nota da primeira prova: ");
 scanf ("%f", &prova1);
 
 printf ("Informe a nota da segunda prova: ");
 scanf ("%f", &prova2);
 
 media = (prova1 + prova2) / 2;
 
 printf ("Media do aluno: %.2f\n", media);
 getch();
 return 0;
}
Tela de execução
Tela de execução redefinindo tipos básicos com typef
Usando typedef para redefinir structs
É muito frequente o uso de typedef para redefinir tipos como estruturas a fim de tornar os nomes mais curtos, desta forma podemos representar uma estrutura usando apenas seu sinônimo.
Exemplo: typedef e struct
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# include <stdio.h>
# include <stdlib.h>
 
//redefinindo os tipos básicos float e int
typedef float nota;
typedef int inteiro;
 
struct tAluno 
{
 //utilizando os tipos redefinidos dentro da struct
 inteiro matricula ;
 nota prova1;
 nota prova2;
};
 
//redefinindo a struct para encurtar o comando na declaração
typedef struct tAluno tAluno ;
 
int main (void)
{
 
/* declarando a variável do tipo tAluno
 note que com a redefinição agora não é mais necessário escrever struct tAluno */
 
 tAluno aluno ;
 nota media = 0;
 
 printf ("Informe o numero de matricula: "); 
 scanf ("%d", &aluno. matricula);
 
 printf ("Informe a nota da primeira prova: ");
 scanf ("%f", &aluno.prova1);
 
 printf ("Informe a nota da segunda prova: ");
 scanf ("%f", &aluno.prova2);
 
 media = (aluno.prova1 + aluno.prova2) / 2;
quarta-feira, 22 de novembro de 2017 10:22
 Página 66 de Linguagem de Programação C 
38
39
40
41
42
43
44
45
 media = (aluno.prova1 + aluno.prova2) / 2;
 
 printf("\n Matricula.....: %d\n", aluno. matricula);
 printf("Media do aluno: %.2f", media);
 
 getch();
 return 0;
}
Tela de execução
Tela de execução utilizando typedef e struct
<http://linguagemc.com.br/redefinicao-de-tipos-com-typedef/> 
 Página 67 de Linguagem de Programação C 
Struct em C
Uma struct é uma variável especial que contém diversas outras variáveis normalmente de tipos diferentes.
As variáveis internas contidas pela struct são denominados membros da struct.
Podemos dizer que as structs da linguagem C são o equivalente ao que se denomina registros em outras linguagens de programação.
Sintaxe:
struct <identificador>
{
<listagem dos tipos e membros>;
}
struct <identificador> <variável>;
Exemplo de declaração de uma struct
struct ficha_de_aluno
{
char nome[50];
char disciplina[30];
float nota_prova1;
float nota_prova2;
};
struct ficha_de_aluno aluno;
Neste exemplo criamos a struct ficha_de_aluno.
Depois de criar a struct precisamos criar a variável que vai utiliza-la.
Para tanto criamos a variável aluno, que será do tipo ficha_de_aluno.
struct ficha_de_aluno aluno;
Agora vejamos um programa que utiliza uma struct.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <conio.h>
int main(void)
{ 
 /*Criando a struct */
 struct ficha_de_aluno
 {
 char nome[50];
 char disciplina[30];
 float nota_prova1;
 float nota_prova2;
 };
 /*Criando a variável aluno que será do
 tipo struct ficha_de_aluno */
 struct ficha_de_aluno aluno;
 printf("\n---------- Cadastro de aluno -----------\n\n\n");
 
 printf("Nome do aluno ......: ");
 fflush(stdin); 
 /*usaremos o comando fgets() para ler strings, no caso o nome
 do aluno e a disciplina
 fgets(variável, tamanho da string, entrada)
 como estamos lendo do teclado a entrada é stdin (entrada padrão),
 porém em outro caso, a entrada também poderia ser um arquivo */
 fgets(aluno. nome, 40, stdin);
 
 printf("Disciplina ......: ");
 fflush(stdin); 
 fgets(aluno. disciplina, 40, stdin);
 
 printf("Informe a 1a. nota ..: ");
 scanf("%f", &aluno.nota_prova1);
 
 printf("Informe a 2a. nota ..: ");
 scanf("%f", &aluno.nota_prova2);
 
 printf("\n\n --------- Lendo os dados da struct ---------\n\n");
 printf("Nome ...........: %s", aluno. nome);
 printf("Disciplina .....: %s", aluno. disciplina);
 printf("Nota da Prova 1 ...: %.2f\n" , aluno.nota_prova1);
 printf("Nota da Prova 2 ...: %.2f\n" , aluno.nota_prova2);
 
 getch();
 return(0);
} 
Tela de execução
quarta-feira, 22 de novembro de 2017 10:27
 Página 68 de Linguagem de Programação C 
Tela de execução utilizando struct
<http://linguagemc.com.br/struct-em-c/> 
 Página 69 de Linguagem de Programação C 
Estruturas de decisão
O comando switch case em C
É uma forma de reduzir a complexidade de vários if … else encadeados. É muito utilizado, principalmente para uso em estruturas de menu. O conteúdo de uma variável é comparado com um valor constante, e 
caso a …
O operador ternário (?) em C
É uma alternativa para substituir o if…else em algumas situações. Sintaxe: Condição ? verdadeiro : falso Onde Condição é a condição que será testada. Verdadeiro é o que fazer quando a condição …
Estruturas de decisão encadeadas – if – else – if – else
Chamamos de estruturas de decisão encadeadas, quando uma estrutura de decisão está localizada dentro do lado falso da outra. Este tipo de estrutura também é conhecido como seleção “aninhada” ou 
seleção “encaixada”. Qualquer que seja o termo …
Estrutura de decisão if em Linguagem C
Estrutura de decisão if em Linguagem C Uma estrutura de decisão examina uma ou mais condições e decide quais instruções serão executadas dependendo se a condição foi ou não foi. O comando if é uma 
estrutura de …
<http://linguagemc.com.br/estrutura-de-decisao/> 
quarta-feira, 22 de novembro de 2017 11:37
 Página 70 de Linguagem de Programação C 
O comando switch case em C
É uma forma de reduzir a complexidade de vários if … else encadeados.
É muito utilizado, principalmente para uso em estruturas de menu.
O conteúdo de uma variável é comparado com um valor constante, e caso a comparação seja verdadeira, um determinado comando é executado.Pseudocódigo:
Em português estruturado o comando escolha…caso equivale ao switch…case
Veja estrutura escolha … caso
Escolha (Variável)
Inicio
 Caso (Valor1): 
 Instruções;
 
 Caso (Valor2): 
 Instruções;
 
 Caso (ValorN): 
 Instruções;
Fim;
Sintaxe do comando switch case em linguagem C
switch (variável)
{
 case constante1:
 Instruções;
 break;
case constante2:
 Instruções;
 break;
default
 Instruções;
}
Utilização
Vamos construir um programa para verificar o dia da semana a fim de exemplificar a utilização do switch…case.
O usuário vai digitar um número e o programa vai retornar o dia da semana equivalente ao número.
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <conio.h>
int main (void )
{
 int valor;
 printf ("Digite um valor de 1 a 7: ");
 scanf("%d", &valor);
 switch ( valor )
 {
 case 1 :
 printf ("Domingo\n");
 break;
 case 2 :
 printf ("Segunda\n");
 break;
 case 3 :
 printf ("Terça\n");
 break;
 case 4 :
 printf ("Quarta\n");
 break;
 case 5 :
 printf ("Quinta\n");
 break;
 case 6 :
 printf ("Sexta\n");
 break;
 case 7 :
 printf ("Sabado\n");
 break;
 default :
 printf ("Valor invalido!\n");
 }
 getch();
 return 0;
}
Tela de execução
quarta-feira, 22 de novembro de 2017 11:38
 Página 71 de Linguagem de Programação C 
Tela de execução do comando Switch Case C
Explicação do código:
A instrução break termina a execução do switch e o programa continua a executar na instrução seguinte.
O uso do break evita testar as demais alternativas de forma desnecessária quando uma opção verdadeira já foi encontrada.
O comando default exibe uma mensagem, caso nenhuma das alternativas anteriores seja verdadeira.
Agora veja, como ficaria o mesmo programa usando comandos if else aninhados (encadeados).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <conio.h>
int main (void )
{
 int valor;
 printf ("Digite um valor de 1 a 7: ");
 scanf("%d", &valor);
 if (valor == 1)
 printf ("Domingo\n");
 else
 if (valor == 2)
 printf ("Segunda\n");
 else
 if (valor == 3)
 printf ("Terça\n");
 else
 if (valor == 4)
 printf ("Quarta\n");
 else
 if (valor == 5)
 printf ("Quinta\n");
 else
 if (valor == 6)
 printf ("Sexta\n");
 else
 if (valor == 7)
 printf ("Sabado\n");
 else
 printf ("Valor invalido!\n");
 getch();
 return 0;
}
Importante:
Não são aceitas expressões condicionais no comando switch…case, somente são aceitos valores constantes.
Esta é uma diferença bem grande quando comparado ao comando if…else.
Portanto caso tenha que testar uma condição você terá que usar if…else ao invés do switch…case.
<http://linguagemc.com.br/o-comando-switch-case-em-c/> 
 Página 72 de Linguagem de Programação C 
O operador ternário (?) em C
É uma alternativa para substituir o if…else em algumas situações.
Sintaxe:
Condição ? verdadeiro : falso
Onde
Condição é a condição que será testada.
Verdadeiro é o que fazer quando a condição for verdadeira.
Falso é o que fazer quando a condição for falsa.
Exemplo de programa em C usando operador ternário:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <conio.h>
int main (void )
{
 int numero;
 
 printf("Digite um numero: ");
 scanf("%d",&numero);
 
 numero >= 0 ? numero++ : numero--; 
 
 printf("O novo valor de numero e: %d",numero);
 
 getch();
 return(0);
}
Tela de execução do programa
Execução do operador ternário em linguagem C
Explicação do código
numero >= 0 ? numero++ : numero–;
Neste código se o número for maior ou igual a zero será incrementado, caso contrário será decrementado de uma unidade.
Seria o equivalente a usar if:
if (numero > = 0)
 Numero ++;
else
 Numero --;
<http://linguagemc.com.br/o-operador-ternario-em-c/> 
quarta-feira, 22 de novembro de 2017 11:40
 Página 73 de Linguagem de Programação C 
Estruturas de decisão encadeadas – if – else – if – else
Chamamos de estruturas de decisão encadeadas, quando uma estrutura de decisão está localizada dentro do lado falso da outra. Este tipo de estrutura também é conhecido como seleção “aninhada” 
ou seleção “encaixada”.
Qualquer que seja o termo usado para identificar a estrutura, o importante é que esse formato com uma estrutura de seleção dentro da outra permite fazer a escolha de apenas um entre vários 
comandos possíveis.
Vejamos um exemplo em pseudocódigo.
Exemplo:
Receber os valores inteiros e verificar qual dos valores é o maior. Emitir uma mensagem caso os valores sejam iguais.
Algoritmo MaiorNumero;
Var
N1,N2: Inteiro;
Inicio
 Escreva("Digite o primeiro número: ");
 Leia(N1);
 Escreva("Digite o segundo número: ");
 Leia(N2);
 Se (N1 == N2) então
 Escreva ("Os números são iguais”);
 Senão
 Se (N1 > N2) então
 Escreva("O maior valor é = ",N1);
 Senão
 Escreva("O maior valor é = ",N2);
Fim.
Em linguagem C podemos usar estruturas if – else -if encadeadas para construir o código equivalente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
 int N1, N2 ;
 printf("Digite o primeiro numero: ");
 scanf("%d", &N1);
 printf("Digite o segundo numero: ");
 scanf("%d", &N2);
 if (N1 == N2)
 printf("Os numeros são iguais!");
 else
 if (N1 > N2)
 printf("O maior valor e = %d", N1);
 else
 printf("O maior valor e = %d", N2);
 printf("\n");
 system("pause");
 return (0);
}
Tela de execução
Execução do exemplo de Estrutura de decisão encadeada
<http://linguagemc.com.br/estruturas-de-decisao-encadeadas-if-else-if-else/> 
quarta-feira, 22 de novembro de 2017 11:42
 Página 74 de Linguagem de Programação C 
Estrutura de decisão if em Linguagem C
Estrutura de decisão if em Linguagem C
Uma estrutura de decisão examina uma ou mais condições e decide quais instruções serão executadas dependendo se a condição foi ou não foi.
O comando if é uma estrutura de decisão muito utilizada.
Em pseudocódigo teríamos algo assim:
Se (condição) então
Início
 Instruções;
Fim;
Em linguagem C o código equivalente para essa estrutura de decisão é:
if (condição)
{
 instrução ou instruções para condição verdadeira;
}
Exemplo de programa utilizando estrutura de decisão
Elaborar um programa em linguagem C para somar dois números inteiros e mostrar o valor da soma na tela. Caso a soma dos números seja maior que 10 mostrar uma mensagem informativa na tela.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 int A, B, Soma;
 printf("Digite um numero inteiro: ");
 scanf("%d", &A);
 printf("Digite um numero inteiro: ");
 scanf("%d", &B);
 Soma = A + B;
 printf ("O Valor da soma = %d", Soma);
 if(Soma > 10)
 {
 printf("O valor da soma é maior que 10\n");
 }
 system ("PAUSE");
 return(0);
}
Tela de execução
Execução do exemplo deestrutura de decisão if em C
Observe que somente será escrito na tela “O valor da soma é maior que 10” SE a condição (Soma > 10) for verdadeira. Caso a condição seja falsa os comandos que estão dentro do if serão 
ignorados.
Estrutura de decisão if else
Agora vamos modificar o código do exemplo anterior com o intuito de enviar uma mensagem informando também quando a soma é menor ou igual a 10.
Para tanto, o pseudocódigo seria:
Se (Soma > 10) então
Escreva(“Valor maior que 10”);
Senão
Escreva(“Valor menor ou igual a 10”);
Sendo assim, vamos executar uma determinada instrução se a condição for satisfeita ou outra instrução quando a condição for falsa.
O senão simboliza a negação da condição, logo está ligado à instrução que será executada quando a condição for falsa.
Em linguagem C temos o código equivalente:
if(Soma > 10)
{
 printf("O valor da soma é maior que 10\n);
}
else
{
 printf("Valor menor ou igual a 10");
}
Observe que o senão em linguagem C é representado pelo comando else.
Veja o código completo na figura abaixo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 int A, B, Soma;
 printf("Digite um numero inteiro: ");
 scanf("%d", &A);
 printf("Digite um numero inteiro: ");
 scanf("%d", &B);
 Soma = A + B;
 printf("O Valor da soma = %d\n", Soma);
 if(Soma > 10)
 {
 printf("O valor da soma e maior que 10\n");
 }
quarta-feira, 22 de novembro de 2017 11:43
 Página 75 de Linguagem de Programação C 
18
19
20
21
22
23
24
25
26
 }
 else
 {
 printf("Valor menor ou igual a 10\n");
 }
 system("PAUSE");
 return(0);
}
Tela de execução
Execução do exemplo de estrutura de decisão if em C com else.
<http://linguagemc.com.br/estrutura-de-decisao-if-em-linguagem-c/> 
 Página 76 de Linguagem de Programação C 
Estruturas de repetição
Descreve as estruturas de repetição em linguagem C
Comando do while em C
Esta estrutura de repetição, garante que o bloco de instruções seja executado no mínimo uma vez, já que a condição que controla o laço é testada apenas no final do comando. A diferença entre o comando 
while …
O comando while em C
Estrutura de repetição while executa a repetição de um bloco de instruções enquanto uma condição é verdadeira. Pseudocódigo A estrutura enquanto … faça equivale a estrutura while em linguagem C. 
Sintaxe: Iniciar a variável …
O comando for em C
Estrutura de repetição for denominamos “laço” (loop em inglês) a uma estrutura de repetição. As estruturas de repetição, executam a repetição de um conjunto de instruções enquanto uma determinada 
condição é verdadeira. Em linguagem C, existem …
<http://linguagemc.com.br/estruturas-de-repeticao/> 
quarta-feira, 22 de novembro de 2017 11:45
 Página 77 de Linguagem de Programação C 
Comando do while em C
Esta estrutura de repetição, garante que o bloco de instruções seja executado no mínimo uma vez, já que a condição que contro la o laço é testada apenas no final do comando.
A diferença entre o comando while e o do…while é justamente o local onde a condição que controla o laço é testada.
No comando while a condição é testada antes do bloco de instruções, e caso a condição seja falsa a repetição não será executa da.
No do…while o bloco de comandos é executado pelo menos uma vez de forma obrigatória, independente do resultado da expressão l ógica
Vejamos um exemplo de código usando o comando do while
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
int main(void)
{
 float nota1=0,nota2=0,media=0;
 int resp;
 do
 {
 printf("Digite a primeira nota: ");
 scanf("%f",&nota1);
 printf("Digite a segunda nota: ");
 scanf("%f",&nota2);
 media = (nota1 + nota2)/2;
 printf("Media do aluno = %f\n",media);
 printf("Digite 1 para continuar ou 2 para sair\n");
 scanf("%d", &resp);
 }while (resp==1);
 return 0;
}
Programa executando.
<http://linguagemc.com.br/comando-do-while/> 
quarta-feira, 22 de novembro de 2017 11:46
 Página 78 de Linguagem de Programação C 
O comando while em C
petição while
Executa a repetição de um bloco de instruções enquanto uma condição é verdadeira.
Pseudocódigo
A estrutura enquanto … faça equivale a estrutura while em linguagem C.
Sintaxe:
Iniciar a variável de controle
enquanto (condição) faça
Início
 Instruções;
 Atualizar a variável de controle;
Fim;
Lembrando que chamamos de variável de controle a variável testada na condição.
Para que seja possível fazer o teste, a variável de controle deve ter sido inicializada previamente.
Observe que o teste da condição ocorre no início do laço.
Enquanto a condição permanecer verdadeira, são executadas as instruções.
Quando a condição se tornar falsa, o processamento será desviado para fora do laço.
Importante: Note bem, que caso a condição seja falsa logo no início, as instruções do laço são ignoradas.
Utilizando o comando while em linguagem C
Sintaxe:
while (condição)
{
Instrução ou bloco de instruções;
}
Exemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int contador = 1; //declarando e inicializando a variável de controle
 
 while (contador <= 10) // Testando a condição
 {
 printf("%d ", contador); //executando um comando dentro do laço 
 
 contador++; //atualizando a variável de controle
 }
 
 getch(); 
 return 0; 
}
Visualização da tela de execução do programa
Executando comando while
Explicação do código:
Inicialmente, a variável de controle denominada contador foi declarada e inicializada com o valor 1.
O teste da condição while é realizado , e como o contador é menor que 10, então a condição é verdadeira.
Como a condição é verdadeira, o programa entra dentro do corpo do laço e executa o printf, exibindo o valor da variável contador.
Após executar o comando printf, o contador é incrementado.
Depois do incremento, a condição é testada novamente e enquanto for verdadeira, os comandos são executados de novo, até que a condição se torne falsa.
A condição falsa faz com que o laço seja encerrado.
<http://linguagemc.com.br/o-comando-while-em-c/> 
quarta-feira, 22 de novembro de 2017 11:47
 Página 79 de Linguagem de Programação C 
O comando for em C
Estrutura de repetição for
Denominamos “laço” (loop em inglês) a uma estrutura de repetição.
As estruturas de repetição, executam a repetição de um conjunto de instruções enquanto uma determinada condição é verdadeira.
Em linguagem C, existem três estruturas de repetição, são elas: for, while e do…while.
Cada uma destas estruturas tem a sua particularidade em termos de funcionamento.
Veremos cada uma delas em artigos separados no blog, iniciando pelo for.
Pseudocódigo – Estrutura de repetição Para
Em pseudocódigo o laço for da linguagem C é equivalente ao comando Para.
Seu funcionamento é simples, como veremos.
Pseudocódigo:
Para (valor inicial até condição_final passo n) faça
Inicio
Instruções;
Fim;
valor_inicial é uma instrução de atribuição do valor inicial do laço para a variável de controle.•
condição final é uma condição que controla o laço.•
passo é o incremento do laço.•
onde:
Utilização do comando for
O laço for é uma estrutura de repetição muito utilizada nos programas em C.
É muito útil quando se sabe de antemão quantas vezes a repetição deverá ser executada.
Este laço utiliza uma variável para controlar a contagem do loop, bem como seu incremento.
Trata-se de um comando bem enxuto, já que própria estrutura faz a inicialização, incremento e encerramento do laço.Sintaxe:
for(valor_inicial; condição_final; valor_incremento)
{
 instruções;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
//Exemplo1: Programa usando loop for em C
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int contador; //variável de controle do loop
 for(contador = 1; contador <= 10; contador++)
 {
 printf("%d ", contador);
 }
 getch();
 return(0);
}
Explicação:
Primeiramente o contador foi inicializado com um valor determinado•
Depois testamos se a condição que envolve o contador é verdadeira (ou seja se contador <= 10), em caso afirmativo, a repetição continua; caso – contrário, ela será encerrada.•
A cada nova repetição a variável do contador foi incrementada•
Neste primeiro exemplo podemos observar três coisas sobre o funcionamento da estrutura de repetição for:
Laço for decrescente
Em certos casos, ao invés de incrementar, podemos decrementar a variável de controle e construir um laço com contagem decresc ente. Para tanto, devemos inicializar a variável de controle com um 
valor adequado e construir a condição necessária para que o laço seja finalizado.
1
2
3
4
5
6
7
8
9
10
11
12
13
//Exemplo 2 Laço com contagem decrescente
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int contador;
 for (contador = 10; contador >= 1; contador--)
 {
 printf("%d ", contador);
 }
 getch();
 return(0);
}
Exemplo de utilização de laço que repete um comando determinado número de vezes.
1
2
3
4
5
6
7
8
//Exemplo 3 Repetindo uma frase
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int I;//variável de controle do loop
 for (I = 1; I <= 3; I++)
 {
quarta-feira, 22 de novembro de 2017 11:49
 Página 80 de Linguagem de Programação C 
8
9
10
11
12
13
 {
 printf("Aprendendo Linguagem C\n");
 }
 getch();
 return(0);
}
Conclusão:
Neste artigo, vimos que o comando for executa um conjunto de instruções, um determinado número de vezes de acordo com uma con dição enquanto uma variável de controle é incrementada ou 
decrementada a cada passagem pelo “laço”.
<http://linguagemc.com.br/a-estrutura-de-repeticao-for-em-c/> 
 Página 81 de Linguagem de Programação C 
Desvio Incondicional
O comando continue em C
A instrução continue é um comando de desvio incondicional. Sua utilização dentro de um laço faz com que a execução da instruç ão atual (ou bloco de instruções atual) seja interrompida e passa para a próxima 
iteração do …
O comando break em C
Este comando realiza desvio incondicional. Em linguagem C o break tem dois usos principais: 1)Forçar a saída de um switch…cas e 2)Forçar a saída de um laço de repetição. A forma mais comum do comando 
break é ser …
<http://linguagemc.com.br/desvio-incondicional/> 
quarta-feira, 22 de novembro de 2017 11:22
 Página 82 de Linguagem de Programação C 
O comando continue em C
A instrução continue é um comando de desvio incondicional.
Sua utilização dentro de um laço faz com que a execução da instrução atual (ou bloco de instruções atual) seja interrompida e passa para a próxima iteração do laço.
Note bem que o funcionamento do comando continue é diferente do comando break.
Enquanto no break termina o laço abruptamente, o comando continue não termina o laço e sim pula os comandos intermediários e passa para a próxima iteração.
No continue a condição do laço continua sendo testada, bem como o incremento também continua sendo executado.
Exemplo:
Vejamos um programa em linguagem C que utiliza o comando continue.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <conio.h>
int main(void)
{
int i;
for(i = 1; i < 10; i++)
{
if (i % 2 == 0) //se i for par não faz nada e pula para a próxima iteração
{
continue;
}
else // senão imprime os ímpares
{
printf("Numero: %d \n",i );
}
printf("Número ímpar!\n\n");
}
printf("Final do programa!\n\n");
getch();
return 0;
}
TELA DE EXECUÇÃO
Tela de execução do comando continue
Observe que a execução do comando continue faz com que o programa pule para a próxima iteração do laço, sendo assim, o printf (“Número ímpar!\n\n”); não é executado mesmo estando dentro do laço.
Como podemos ver o bloco de instruções que contém esse printf foi interrompido e o programa pulou para a próxima iteração do loop toda vez que encontrou um valor par.
Mas e se ao invés de continue utilizássemos o break?
Neste caso, no primeiro valor par o break seria executado e o laço interrompido.
Veja o código usando break e a tela de execução.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int i;
 for(i = 1; i < 10; i++)
 {
 if (i % 2 == 0) //se i for par executa o break
 {
 break;
 }
 else // senão imprime os ímpares
 {
 printf("Numero: %d \n",i );
 }
 printf("Número ímpar!\n\n");
 }
 printf("Final do programa!\n\n");
 getch();
 return 0;
}
TELA DE EXECUÇÃO
Tela de execução do comando continue
Note que ao encontrar o primeiro valor par o break foi executado, o que interrompeu o laço e foi para o final do programa.
quarta-feira, 22 de novembro de 2017 11:23
 Página 83 de Linguagem de Programação C 
Note que ao encontrar o primeiro valor par o break foi executado, o que interrompeu o laço e foi para o final do programa.
<http://linguagemc.com.br/o-comando-continue/> 
 Página 84 de Linguagem de Programação C 
O comando break em C
Este comando realiza desvio incondicional.
Em linguagem C o break tem dois usos principais:
1)Forçar a saída de um switch…case
2)Forçar a saída de um laço de repetição.
A forma mais comum do comando break é ser utilizado dentro de switch…case para terminar o comando sem ter que passar pelas ou tras instruções.
Já vimos como fazer isso no artigo sobre switch…case.
Acontece que também podemos usar o break de forma mais genérica para terminar estruturas de repetição imediatamente, ou seja, sem testar a condição de controle do laço.
Vejamos um exemplo de programa em linguagem C que utiliza o comando break dentro de um loop for.
Exemplo: Usando break em linguagem C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <conio.h>
int main(void)
{
 int valores[10];//vetor com capacidade para armazenar 10 elementos
 int i;
 //Entrada de dados
 //A princípio loop está feito para repetir 10 vezes
 for(i = 0; i < 10; i++)
 {
 printf("Entre com o %do valor: ",i );
 scanf("%d",&valores[i]);
 if (i == 3)
 {
 printf("Saída do break interrompendo o comando for\n");
 break;//força a saída imediata do loop
 }
 }
 getch();
 return 0;
}
TELA DE EXECUÇÃO – programa usando o comando break em C
Observe que o break dentro do laço forçou a saída do loop for antes dos 10 valores serem recebidos.
Isto ocorreu porque quando o contador i atingiu o valor 3 (no quarto valor de entrada) a condição do if tornou -se verdadeira, e o break foi executado forçando a saída imediata.
<http://linguagemc.com.br/o-comando-break/> 
quarta-feira, 22 de novembro de 2017 11:24
 Página 85 de Linguagem de Programação C 
Loop infinito em C
Um loop ou laço infinito é aquele que apresenta sempre uma condição de teste verdadeira, ou seja, nunca termina.
Algumas vezes, o iniciante em programação cai em um loop infinito de forma acidental.
Isto ocorre quando escreve acidentalmente uma condição que jamais será satisfeita, ou então esquece de alterar o valor da var iável de controle do laço fazendo com que a condição permaneça 
verdadeira para sempre.Existem, porém, programadores que usam loop infinitos em situações em que não se sabe quantas vezes a repetição será executad a.
A ideia é fazer com que a condição de teste que controla a repetição seja sempre verdadeira.
Mas se a condição de teste é sempre verdadeira, como sair do laço?
Para sair do laço infinito usa-se break para forçar a saída quando uma determinada condição ocorrer.
Exemplo de loop infinito com for
quando nada é colocado dentro da estrutura de repetição for, a condição é considerada verdadeira.
for( ; ; )
{
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <conio.h>
int main (void)
{
 int n;
 /* 
 laço for vazio gera um loop infinito
 pois na prática, como não existe a condição
 ela é considerada verdadeira 
 */
 
 for (;;)
 {
 printf("Digite um numero inteiro: ");
 scanf("%d", &n);
 if (n == 7) 
 {
 printf("Saindo do loop...\n");
 break; //força a saída do loop
 }
 printf("Numero: %d\n",n);
 }
 
 printf("Fim de programa");
 getch();
 return(0);
}
Tela de Execução
Tela de Execução do Exemplo de Loop infinito com for
Exemplo de loop infinito com while
While(1)
{
 instruções;
}
Exemplo de Código
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <conio.h>
int main (void)
{
 int n;
 
 /* while (1) - condição verdadeira
 gerando um loop infinito
 */
 
 while (1)
quarta-feira, 22 de novembro de 2017 13:19
 Página 86 de Linguagem de Programação C 
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 while (1)
 {
 printf("Digite um numero inteiro: ");
 scanf("%d", &n);
 if (n == 7) 
 {
 printf("Saindo do loop...\n");
 break; //força a saída imediata do loop
 }
 printf("Numero: %d\n",n);
 }
 
 printf("Fim de programa");
 getch();
 return(0);
}
Tela de Execução
Tela de Execução do exemplo Loop infinito com while
<http://linguagemc.com.br/loop-infinito-em-c/> 
 Página 87 de Linguagem de Programação C 
Operadores
Operadores da linguagem C.
A biblioteca math.h
Fornece um conjunto de funções para operações matemáticas, tais como funções trigonométricas, hiperbólicas, logaritmos, potência e arredondamentos. Todas as funções da biblioteca math.h retornam um 
valor do tipo double. Na tabela abaixo apresentamos algumas funções presentes na …
Resto de uma divisão inteira em linguagem C
Por: Eduardo Casavella A divisão inteira Quando realizamos uma divisão de duas variáveis inteiras, a parte fracionária é eliminada de forma automática, ou então é “truncada”. Como a parte fracionária é 
descartada, temos que o resultado de uma …
Operadores Relacionais em C
Por: Eduardo Casavella São usados para fazer comparações entre variáveis. Observação importante! Devemos sempre atentar para um erro bastante comum que é confundir o operador == que verifica a 
igualdade com o operador de atribuição = que é usado para …
Operadores Aritméticos em Linguagem C
Por: Eduardo Casavella Os operadores aritméticos são símbolos utilizados para realizar as operações aritméticas elementares. Vejamos um exemplo de programa em C, utilizando operações aritméticas e 
variáveis do tipo inteiro. Lembrando que em nossos exemplos estamos usando a IDE Dev …
<http://linguagemc.com.br/operadores/> 
quarta-feira, 22 de novembro de 2017 13:20
 Página 88 de Linguagem de Programação C 
Resto de uma divisão inteira em linguagem C
A divisão inteira
Quando realizamos uma divisão de duas variáveis inteiras, a parte fracionária é eliminada de forma automática, ou então é “tr uncada”.
Como a parte fracionária é descartada, temos que o resultado de uma divisão inteira é sempre um número inteiro.
Por exemplo:
7 / 2 tem como resultado 3 e não 3,5 que é um número real
2 / 3 é zero e não 0,66.
Vejamos um exemplo prático
Programa para fazer divisão de inteiros em C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <conio.h>
int main(void) 
{
 int n1,n2,resto,res; 
 
 printf ("\nDigite um numero:");
 scanf ("%d", &n1); 
 
 printf ("\nDigite um numero:");
 scanf ("%d", &n2); 
 
 res = n1 / n2;
 
 printf("\nResultado da divisao de %d / %d = %d. \n",n1,n2,res); 
 
 getch();
 return(0);
}
Tela de Execução com os valores do Exemplo
Tela de execução divisão de inteiros
Tela de execução divisão de inteiros
O resto da divisão inteira
O operador % retorna o resto da divisão de um número por outro.
5 % 2 = 1
4 % 2 = 0
Em alguns casos, este operador é bastante útil.
Por exemplo, em algumas aplicações é necessário extrair dígitos de um valor inteiro.
Uma forma de fazer isso é dividir o valor inteiro por 10 e armazenar o resto em uma variável.
quarta-feira, 22 de novembro de 2017 13:22
 Página 89 de Linguagem de Programação C 
Uma forma de fazer isso é dividir o valor inteiro por 10 e armazenar o resto em uma variável.
Assim podemos guardar o último dígito em do número em uma variável.
Outro caso interessante que pode ser resolvido com o resto da divisão é verificar se um valor é par ou ímpar.
Sabemos que o número é par se for divisível por 2 e o resto for zero.
Exercício: Faça um programa em linguagem C para verificar se um valor é par ou ímpar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Exemplo de programa em C
//Par ou impar.
#include <stdio.h>
#include <conio.h> 
int main(void) 
{
 int n1,resto; 
 
 printf ("\n Digite um numero:");
 scanf ("%d", &n1); 
 
 resto = n1 % 2;
 printf ("O resto da divisão e %d", resto); 
 
 
 if (resto == 0)
 printf("\nO numero %d e par. \n",n1);
 else
 printf("\nO numero %d e impar. \n",n1);
 
 getch();
 return(0);
}
Tela de execução com um valor Par e um valor impar
Tela de execução valor Par
Tela de execução valor impar
<http://linguagemc.com.br/resto-de-uma-divisao-inteira-em-c/> 
 Página 90 de Linguagem de Programação C 
Operadores Relacionais em C
São usados para fazer comparações entre variáveis.
Tabela Operadores Relacionais
Observação importante!
Devemos sempre atentar para um erro bastante comum que é confundir o operador == que verifica a igualdade com o operador de a tribuição = que é usado para atribuir valor a uma variável.
Exemplos
X == y //verifica se o valor de x é igual ao valor de y
X = 3; //atribui o valor 3 na variável x.
X = y; // atribui o valor de y na variável x
Uma expressão que utiliza um operador relacional devolve como resultado o valor 1 caso seja verdadeira ou o valor zero caso s eja falsa.
Os operadores relacionais são muito utilizados em conjunto com as estruturas de decisão if-else, como veremos no próximo artigo.
<http://linguagemc.com.br/operadores-relacionais/> 
quarta-feira, 22 de novembro de 2017 13:24
 Página 91 de Linguagem de Programação C 
Operações de entrada e saída de dados em Linguagem C
Neste artigo veremos as operações de entrada e saída de dados em linguagem C utilizando as funções scanf () e printf().
Saída de dados
Chamamos de saída de dados a exibição de textos ou valores de variáveis no vídeo.
A função printf()
O comando usado para exibir valores na tela é a função printf().
Sintaxe Básica
printf(“Mensagem a ser escrita na tela”);
Também é possível mostrar texto e valores de variáveis usando argumentos.
Sintaxe:
printf(“Mensagem a ser escritana tela”, lista de argumentos);
Exemplo de mensagem que inclui o valor de uma variável:
printf(“Total a pagar: R$ %f”, total);
%f representa o local onde será escrita uma variável float•
total é a variável float que será mostrada na posição marcada por %f•
onde:
Entrada de dados
Tem por função efetuar a leitura de dados de uma fonte externa.
A função scanf()
É utilizada para fazer a leitura de dados formatados via teclado.
Sintaxe:
scanf(“expressão de controle”, lista de argumentos);
Exemplo:
scanf(“%f”, &salario);
Explicação: este comando efetua uma leitura do teclado onde é esperada uma variável float (indicada por “%f”). O valor lido será armazena do no endereço da variável salário.
Na lista de argumentos devemos indicar os endereços das variáveis. Para fazer isso adicionamos o símbolo “&” como prefixo na frente do nome da variável.
Exemplo: Programa para somar 2 valores inteiros em Linguagem C
Vamos exemplificar o uso das funções printf e scanf através da soma de 2 valores do tipo inteiro.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
 //declaração de variáveis do tipo inteiro
 int a, b, soma;
 printf("Digite um numero inteiro: ");
 scanf("%d", &a); //recebe um inteiro e armazena na variável a
 printf("Digite um numero inteiro: ");
 scanf("%d", &b); //recebe um inteiro e armazena na variável b
 soma = a + b;
 //Efetua adição de a com b e armazena na variável soma
 printf("O valor da soma = %d\n", soma); // Mostra mensagem com o resultado
 system ("pause");
 return(0);
}
Executando o programa, teremos a seguinte tela:
Tela de execução somar 2 valores inteiros em C
<http://linguagemc.com.br/operacoes-de-entrada-e-saida-de-dados-em-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 13:31
 Página 92 de Linguagem de Programação C 
Operadores Aritméticos em Linguagem C
Os operadores aritméticos são símbolos utilizados para realizar as operações aritméticas elementares.
Tabela Operadores Aritméticos em C
Vejamos um exemplo de programa em C, utilizando operações aritméticas e variáveis do tipo inteiro.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h> //biblioteca padrão para comandos i/o
#include <stdlib.h>//necessário para o system ("pause")
int main (void)
{
 int valor1, valor2;
 int resp_soma, resp_subtracao, resp_multiplicacao, resp_divisao;
 printf("Testando operadores aritméticos\n\n");
 // \n desloca cursor para a próxima linha
 printf("Digite o primeiro valor: ");
 scanf("%d", &valor1);
 printf("Digite outro valor: ");
 scanf("%d", &valor2);
 resp_soma = valor1 + valor2;
 printf("\nSoma = %d", resp_soma);
 resp_subtracao = valor1 - valor2;
 printf("\n Subtracao = %d", resp_subtracao);
 resp_multiplicacao = valor1 * valor2;
 printf("\nMultiplicacao = %d", resp_multiplicacao);
 resp_divisao = valor1 / valor2;
 printf("\n Divisao = %d\n", resp_divisao);
 system("pause");
 return (0); //valor de retorno da função main
}
Lembrando que em nossos exemplos estamos usando a IDE Dev C++ em ambiente Windows, daí a utilização do comando system(“pause” );
A tela de execução será a seguinte:
<http://linguagemc.com.br/operadores-aritmeticos-em-linguagem-c/> 
quarta-feira, 22 de novembro de 2017 13:24
 Página 93 de Linguagem de Programação C 
Palavras Reservadas
Lista de palavras reservadas em C
As palavras reservadas, também conhecidas como palavras chave da linguagem C, são comandos de uso muito específico dentro da linguagem. Estas palavras não podem ser usadas com outro propósito além 
do original dentro de programas em …
<http://linguagemc.com.br/palavras-reservadas/> 
quarta-feira, 22 de novembro de 2017 13:26
 Página 94 de Linguagem de Programação C 
Lista de palavras reservadas em C
As palavras reservadas, também conhecidas como palavras chave da linguagem C, são comandos de uso muito específico dentro da linguagem.
Estas palavras não podem ser usadas com outro propósito além do original dentro de programas em C. Por exemplo, você não pode usar palavras reservadas para dar nome a variáveis ou funções.
O padrão ANSI C definiu um conjunto de 32 palavras reservadas na linguagem C, veremos a seguir o significado de cada uma delas.
Lista de palavras reservadas da linguagem C
asm: Indica instruções em assembly.
auto: Define a classe de armazenamento padrão, ou seja , a variável é criada quando a função é invocada e depois é destruída quando a função termina.
break: Comando para forçar a saída imediata dos comandos switch, for, while, e , do…while.
case: Utilizado dentro do comando switch para selecionar uma constante.
char: Tipo de dados utilizado para armazenar caracteres.
const: Impede que uma variável seja modificada, criando assim uma constante.
continue: Força a interrupção dos loops for , while , ou do…while fazendo com que passem para a próxima iteração.
default: É utilizado dentro de switch…case para tratar valores não definidos anteriormente nas opções case.
do: Estutura de repetição usada em conjunto com o while . O comando do…while faz com que os comandos do bloco a ser repetido sejam executados no mínimo uma vez.
double: Tipo de dados numérico de ponto flutuante com precisão dupla.
else: Indica um bloco de comandos a ser executado quando a condição do comando if for falsa.
enum: Tipo de dados definido pelo programador que permite a definição de constantes
extern: Indica que uma variável foi declarada em outro arquivo.
float: Tipo de dados de ponto flutuante com precisão simples.
for: Estrutura de repetição que utiliza condições e contador.
goto: Comando que permite “saltar” incondicionalmente para uma posição do programa pré-determinada.
if: Comando condicional que altera o fluxo do programa de acordo com uma condição que pode ser verdadeira ou falsa.
int: É o tipo de dados mais usados para armazenar valores inteiros.
long: É um tipo de dados usado para armazenar valores inteiros que possui precisão superior ao tipo int..
register: Solicita o armazenamento diretamente nos registradores do processador.
return: Retorna um valor dentro de uma função ou força o abandono da mesma.
short: É o chamado inteiro curto. Armazena valores inteiros com precisão menor (apenas 2 bytes) do que o tipo int.
signed: Sinaliza que uma variável pode armazenar tantos valores positivos como negativos.
sizeof: Comando usado para retornar o tamanho em bytes de um determinado tipo de dados.
static: Comando que avisa ao compilador para reter o valor de uma determinada variável.
struct: Cria as chamadas estruturas, ou seja, registros.
switch: Comando de seleção usando em conjunto com o comando case, permite escolher entre várias opções.
typedef: É um comando modificador usado para criar novos nomes para tipos de dados.
union: Permite que um conjunto de variáveis partilhem o mesmo espaço na memória.
unsigned: Faz com que a variável apenas aceite valores positivos ou zero.
void: Comando que indica que a função não retorna nada ou que não tem parâmetros de entrada.
volatile: Indica que uma variável pode ser alterada.
while: Estrutura de repetição que executa enquanto uma condição é verdadeira.
Note bem que as palavras reservadas da linguagem C são sempre escritas em letras minúsculas.
<http://linguagemc.com.br/lista-de-palavras-reservadas-em-c/> 
quarta-feira, 22 de novembro de 2017 13:26
 Página 95 de Linguagem de Programação C 
Ponteiros
Passando um vetor para função em C
Para passar um vetor para uma função usando linguagem C utiliza-se um ponteiro como parâmetro da função. Ao usarmos o ponteiro como parâmetro, na realidadeestamos passando o endereço inicial do 
vetor e não os seus …
Alocação Dinâmica em C
Alocação Estática. Na alocação estática de memória, o tipo de dados tem tamanho predefinido. Neste caso, o compilador vai alocar de forma automática o espaço de memória necessário. Sendo assim, dizemos 
que a alocação estática …
Função com passagem por referência
Existem dois métodos de passagem de parâmetros para funções: Passagem por valor – permite usar dentro de uma função uma cópia do valor de uma variável, porém não permite alterar o valor da variável 
original (somente a …
Ponteiros em C
A utilização de ponteiros em linguagem C é uma das características que tornam a linguagem tão flexível e poderosa. Ponteiros ou apontadores, são variáveis que armazenam o endereço de memória de outras 
variáveis. Dizemos que um ponteiro …
<http://linguagemc.com.br/ponteiros/> 
quarta-feira, 22 de novembro de 2017 10:59
 Página 96 de Linguagem de Programação C 
Passando um vetor para função em C
Para passar um vetor para uma função usando linguagem C utiliza-se um ponteiro como parâmetro da função. Ao usarmos o ponteiro como parâmetro, na realidade estamos passando o endereço 
inicial do vetor e não os seus elementos.
Vamos exemplificar uma passagem de vetor em uma função através de um exemplo prático.
O programa a seguir recebe 10 notas e armazena-as em um vetor.
Para efetuar o cálculo da média foi implementada uma função que recebe a quantidade de elementos do vetor e o seu endereço in icial, cujo protótipo é:
float media (int n, float *vnotas);
Posteriormente, no corpo da função efetuamos o processamento que manipula os dados do vetor de modo a calcular a média.
Veja o código da função comentada abaixo:
float media (int n, float *vnotas)
{
 int i;
 float m = 0, soma = 0;
 
 //fazendo a somatória das notas
 for (i = 0; i < n; i++)
 soma = soma + vnotas[i]; 
 
 //dividindo pela quantidade de elementos n
 m = soma / n;
 
 //retornando a média
 return m;
}
A seguir o código fonte completo do exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
//protótipo da função media
float media (int n, float *vnotas);
int main (void)
{
 float vnotas[10];
 float media_notas;
 int i;
 /* leitura das notas */
 for (i = 0; i < 10; i++)
 {
 printf("Digite os valores das notas: ");
 scanf("%f", &vnotas[i]);
 }
 
 //chamada da função
 media_notas = media(10,vnotas);
 
 printf ( "\n Media = %.1f \n", media_notas );
 
 system("pause");
 return 0;
}
/* Função para cálculo da média 
 Parâmetros: 
 Recebe a quantidade de elementos n
 Recebe o endereço inicial do vetor notas em *vnotas
 Retorno: 
 Retorna a media na variável m
*/
float media (int n, float *vnotas)
{
 int i;
 float m = 0, soma = 0;
 
 //fazendo a somatória das notas
 for (i = 0; i < n; i++)
 soma = soma + vnotas[i]; 
 
 //dividindo pela quantidade de elementos n
 m = soma / n;
 
 //retornando a média
 return m;
}
Tela de execução
Tela de execução do exemplo passando um vetor para função C
<http://linguagemc.com.br/passando-um-vetor-para-funcao-em-c/> 
quarta-feira, 22 de novembro de 2017 11:19
 Página 97 de Linguagem de Programação C 
Alocação Dinâmica em C
Alocação Estática
Na alocação estática de memória, o tipo de dados tem tamanho predefinido. Neste caso, o compilador vai alocar de forma automá tica o espaço de memória necessário. Sendo assim, dizemos que a 
alocação estática é feita em tempo de compilação. Este tipo de alocação tende a desperdiçar recursos, já que nem sempre é pos sível determinar previamente qual é o espaço necessário para 
armazenar as informações. Quando não se conhece o espaço total necessário, a tendência é o programador exagerar pois é melhor superdimensionar do que faltar espaço.
Alocação Dinâmica
Na alocação dinâmica podemos alocar espaços durante a execução de um programa, ou seja, a alocação dinâmica é feita em tempo de execução. Isto é bem interessante do ponto de vista do 
programador, pois permite que o espaço em memória seja alocado apenas quando necessário. Além disso, a alocação dinâmica perm ite aumentar ou até diminuir a quantidade de memória alocada.
sizeof
A função sizeof determina o número de bytes para um determinado tipo de dados.
É interessante notar que o número de bytes reservados pode variar de acordo com o compilador utilizado.
Exemplo:
x = sizeof(int); //retorna 4 no gcc
malloc
A função malloc aloca um espaço de memória e retorna um ponteiro do tipo void para o início do espaço de memória alocado.
free
A função free libera o espaço de memória alocado.
Exemplo: Vetor Dinâmico
Quando um programador define tipo e o número de elementos um vetor ele está utilizando alocação estática.
Uma alternativa interessante é declarar um vetor como ponteiro, a fim de utilizar alocação dinâmica. Para tanto devemos usar a função malloc. Porém, esta função necessita saber a quantidade de 
bytes que devem ser reservados. Para fazer esse cálculo usamos o comando sizeof.
Vejamos como implementar esses detalhes no exemplo prático abaixo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h> //necessário para usar as funções malloc() e free()
#include <conio.h>
int main(void)
{
 float *v; //definindo o ponteiro v
 int i, num_componentes; 
 
 printf("Informe o número de componentes do vetor\n");
 scanf("%d", &num_componentes);
 
 /* ------------- Alocando dinamicamente o espaço necessário -------------
 
 1 - Calcular o número de bytes necessários
 primeiramente multiplicamos o número de componentes do vetor pela 
 quantidade de bytes que é dada pelo comando sizeof,
 portanto temos: 
 num_componentes * sizeof(float)
 
 2 - Reservar a quantidade de memória
 usamos malloc para reservar essa quantidade de memória, 
 então temos: 
 malloc(num_componentes * sizeof(float))
 
 3 - Converter o ponteiro para o tipo de dados desejado
 como a função malloc retorna um ponteiro do tipo void, 
 precisamos converter esse ponteiro para o tipo da nossa variável, no caso float,
 por isso usamos o comando de conversão explicita:
 (float *)
 
 4 - Juntando tudo e atribuindo em v temos o comando abaixo: */
 
 v = (float *) malloc(num_componentes * sizeof(float));
 
 //Armazenando os dados em um vetor
 for (i = 0; i < num_componentes; i++)
 {
 printf("\n Digite o valor para a posição %d do vetor: ", i+1);
 scanf("%f",&v[i]);
 } 
 
 // ------ Percorrendo o vetor e imprimindo os valores ----------
 printf("\n*********** Valores do vetor dinâmico ************\n\n");
 
 for (i = 0;i < num_componentes; i++)
 {
 printf("%.2f\n",v[i]);
 } 
 
 //liberando o espaço de memória alocado 
 free(v);
 
 getch();
 return 0;
} 
quarta-feira, 22 de novembro de 2017 11:07
 Página 98 de Linguagem de Programação C 
Tela de execução
Exemplo de execução de alocação dinâmica de memória em C
<http://linguagemc.com.br/alocacao-dinamica-de-memoria-em-c/> 
 Página 99 de Linguagem de Programação C 
Função com passagem por referência
Existem dois métodos de passagem de parâmetros para funções:
Passagem por valor – permite usar dentro de uma função uma cópia do valor de uma variável, porém não permite alteraro valor da variável original (somente a cópia pode ser alterada).
Passagem por referência – É passada para a função uma referência da variável, sendo possível alterar o conteúdo da variável original usando-se esta referência.
Na linguagem C a passagem por referência é implementada com o uso de ponteiros.
Usando ponteiros (também chamados de apontadores) é possível alterar os valores das variáveis passadas como argumentos para uma função.
A função utilizada dessa forma é denominada função com passagem por referência. Nesse tipo de função, os argumentos passam os endereços de memória para os parâmetros declarados na 
função. Sendo assim, os parâmetros que recebem os valores passados obrigatoriamente tem que ser ponteiros já que irão receber um endereço de memória.
As alterações feitas dentro da função tem efeito direto nas variáveis passadas como argumentos na chamada. Isto proporciona a oportunidade de retornar vários valores em uma única função já que 
as alterações ocorrem diretamente nas variáveis.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//Exemplo de programa com passagem de parâmetros por referência.
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
//função com passagem por referência
//note que a função tem dois ponteiros como parâmetros
void troca_valores(int *ptrx, int *ptry);
int main(void)
{
int a, b;
printf("Digite o primeiro valor: ");
scanf("%d", &amp;a);
printf("Digite o segundo valor: ");
scanf("%d", &amp;b);
printf("Voce digitou os valores na seguinte ordem: %d e %d\n", a, b);
/* Chamada da função que troca os valores das variáveis a e b.
Observe como são passados os endereços nos argumentos.
Esta é uma função chamada por referência */
troca_valores(&amp;a, &amp;b);
//Exibindo os valores já trocados após a chamada da função
printf("Os valores trocados sao: %d e %d\n", a, b);
getch();
return 0;
}
//função que troca os valores inteiros apontados por ptrx e ptry
void troca_valores(int *ptrx, int *ptry)
{
int auxiliar;
//auxiliar recebe o conteúdo apontado por ptrx
auxiliar = *ptrx;
//coloca o valor que está no local apontado por ptry em ptrx
*ptrx = *ptry;
//finalmente, ptry recebe o valor armazenado em auxiliar
*ptry = auxiliar;
return;
}
Tela de Execução
Tela de execução com passagem de parâmetros por referência.
<http://linguagemc.com.br/funcao-com-passagem-por-referencia/> 
quarta-feira, 22 de novembro de 2017 11:05
 Página 100 de Linguagem de Programação C 
Ponteiros em C
A utilização de ponteiros em linguagem C é uma das características que tornam a linguagem tão flexível e poderosa.
Ponteiros ou apontadores, são variáveis que armazenam o endereço de memória de outras variáveis.
Dizemos que um ponteiro “aponta” para uma variável quando contém o endereço da mesma.
Os ponteiros podem apontar para qualquer tipo de variável. Portanto temos ponteiros para int, float, double, etc.
Por que usar ponteiros?
Ponteiros são muito úteis quando uma variável tem que ser acessada em diferentes partes de um programa.
Neste caso, o código pode ter vários ponteiros espalhados por diversas partes do programa, “apontando” para a variável que co ntém o dado desejado.
Caso este dado seja alterado, não há problema algum, pois toda a parte do programa tem um ponteiro que aponta para o endereço onde reside o dado atualizado.
Alocação dinâmica de memória•
Manipulação de arrays.•
Para retornar mais de um valor em uma função.•
Referência para listas, pilhas, árvores e grafos.•
Existem várias situações onde ponteiros são úteis, por exemplo:
Sintaxe de declaração de ponteiro
tipo *nome_ponteiro;
Onde temos:
tipo : é o tipo de dado da variável cujo endereço o ponteiro armazena.
*nome_ponteiro : O nome da variável ponteiro.
O asterisco * neste tipo de declaração determina que a variável será um ponteiro.
Exemplo de declaração de ponteiro:
int *ptr;
Exemplo: Programa utilizando ponteiro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
int main(void)
{
 //valor é a variável que
 //será apontada pelo ponteiro
 int valor = 27;
 //declaração de variável ponteiro
 int *ptr;
 //atribuindo o endereço da variável valor ao ponteiro
 ptr = &valor;
 printf("Utilizando ponteiros\n\n");
 printf ("Conteúdo da variável valor: %d\n", valor);
 printf ("Endereço da variável valor: %x \n", &valor);
 printf ("Conteúdo da variável ponteiro ptr: %x", ptr);
 getch();
 return(0);
}
Tela de Execução
Tela de execução do programa usando ponteiro
Explicação detalhada do código
//valor é a variável que será apontada pelo ponteiro
int valor = 27;
//declaração de variável ponteiro
int *ptr;
Note que foi usado o operador * para designar que a variável ptr é um ponteiro. Como a intenção é armazenar o endereço da var iável denominada valor que é uma variável do tipo int, o ponteiro 
também tem que ser do tipo int. Isto significa que vai apontar para uma variável do tipo inteiro.
//atribuindo o endereço de valor ao ponteiro
ptr = &valor;
Para atribuir o endereço da variável valor ao ponteiro ptr utilizamos o operador de endereço &, pois estamos nos referindo ao endereço da variável valor e não ao conteúdo da mesma.
 printf("Utilizando ponteiros\n\n");
 printf ("Conteúdo da variável valor: %d\n", valor);
 printf ("Endereço do variável valor: %x \n", &valor);
 printf ("Conteúdo da variavel ponteiro ptr: %x", ptr);
Foi utilizado %x para exibir o endereço e o conteúdo do ponteiro ptr, pois trata-se de um valor hexadecimal por ser endereço de memória.
<http://linguagemc.com.br/ponteiros-em-c/> 
quarta-feira, 22 de novembro de 2017 11:02
 Página 101 de Linguagem de Programação C 
Enum
Enum em C
É um tipo de dado definido pelo usuário que define uma variável que vai receber apenas um conjunto restrito de valores. Na re alidade, um enum é um conjunto de valores inteiros representados por identificadores. 
Sintaxe: enum < …
<http://linguagemc.com.br/enum/> 
quarta-feira, 22 de novembro de 2017 11:30
 Página 102 de Linguagem de Programação C 
Enum em C
É um tipo de dado definido pelo usuário que define uma variável que vai receber apenas um conjunto restrito de valores. Na realidade, um enum é um conjunto de valores inteiros representados por 
identificadores.
Sintaxe:
enum < nome > { < constante1 > , < constante2 > , · · · , < constanteN > , }
Um exemplo clássico é usar uma enum para armazenar os meses do ano. Vejamos como funciona:
enum meses_do_ano { Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}
Por padrão o primeiro valor de uma enum é inicializado com zero. Mas é possível determinar o valor inicial, basta declarar o primeiro valor para o identificador, e os valores seguintes serão 
automaticamente calculados com um incremento de uma unidade.
Então podemos atribuir o valor 1 para janeiro como abaixo:
enum meses_do_ano { Janeiro=1, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}
Alguns compiladores são capazes de verificar quando um valor que não está na lista da enum está sendo atribuído, porém outros não são, logo isto fica a cargo do programador.
Exemplo: Utilizando enum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
#include <conio.h>
//definição da enum
enum meses_do_ano {Janeiro = 1, Fevereiro,Marco, Abril, Maio, Junho,
 Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}meses;
int main(void)
{
 printf("Digite o numero do mes: ");
 scanf("%d",&meses);
 //Testando se o valor está na faixa válida usando os valores da enum
 if((meses >= Janeiro) && (meses <= Dezembro))
 {
 //switch que determina qual mes será impresso na tela
 switch(meses)
 {
 case Janeiro:
 printf("%d - Janeiro",meses);
 break;
 case Fevereiro:
 printf("%d - Fevereiro",meses);
 break;
 case Marco:
 printf("%d - Marco",meses);
 break;
 case Abril:
 printf("%d - Abril",meses);
 break;
 case Maio:
 printf("%d - Maio",meses);
 break;
 case Junho:
 printf("%d - Junho",meses);
 break;
 case Julho:
 printf("%d - Julho", meses);
 break;
 case Agosto:
 printf("%d - Agosto", meses);
 break;
 case Setembro:
 printf("%d - Setembro", meses);
 break;
 case Outubro:
 printf("%d - Outubro", meses);
 break;
 case Novembro:
 printf("%d - Novembro", meses);
 break;
 case Dezembro:
 printf("%d - Dezembro", meses);
 break;
 }
 }
 else //senão estiver na faixa válida exibe mensagem
 {
 printf("Valor INVALIDO!!!\n");
 printf("Os valores validos para os meses do ano são: \n\n");
 //Loop que exibe a faixa de valores válida
 //Note que os valores da enum são na realidade inteiros
 //então podemos incrementa-los e usar no loop
 for(meses = Janeiro; meses <= Dezembro; meses++)
 printf("Mes: %d \n", meses);
 }
 getch();
 return 0;
}
Tela de execução
quarta-feira, 22 de novembro de 2017 11:31
 Página 103 de Linguagem de Programação C 
Tela de execução
Tela de execução do exemplo utilizando enum
Tela de execução do exemplo utilizando enum com valor invalido
<http://linguagemc.com.br/enum-em-c/> 
 Página 104 de Linguagem de Programação C 
Funções
Passando um vetor para função em C
Para passar um vetor para uma função usando linguagem C utiliza-se um ponteiro como parâmetro da função. Ao usarmos o ponteiro como parâmetro, na realidade estamos passando o endereço inici al do 
vetor e não os seus …
Função com passagem por referência
Existem dois métodos de passagem de parâmetros para funções: Passagem por valor – permite usar dentro de uma função uma cópia do valor de uma variável, porém não permite alterar o valor da variável 
original (somente a …
Recursividade em C
Chamamos de recursividade ou recursão quando uma função chama a si mesma. Sim amigos, isto é possível, uma função pode invoca r a si mesma! Como funciona a recursividade? Em uma função recursiva, a 
cada chamada é criada …
Funções e escopo de variáveis
Chamamos de escopo de variável ao conjunto de regras que determinam a utilização de uma variável em um programa Podemos divid ir as variáveis quanto ao escopo em três tipos: variáveis locais, parâmetros 
formais e variáveis globais. Variáveis …
Argumentos em linha de comando
Em linguagem C podemos passar argumentos através da linha de comando para um programa quando ele inicia. A função main recebe parâmetros passados via linha de comando como vemos a seguir: int 
main( int argc, char *argv[ …
Funções em C
Definição de Função Uma função nada mais é do que uma sub-rotina usada em um programa. Na linguagem C, denominamos função a um conjunto de comandos que realiza uma tarefa específica e m um 
módulo dependente de código. …
<http://linguagemc.com.br/funcoes/> 
quarta-feira, 22 de novembro de 2017 11:54
 Página 105 de Linguagem de Programação C 
Funções em C
Definição de Função
Uma função nada mais é do que uma sub-rotina usada em um programa.
Na linguagem C, denominamos função a um conjunto de comandos que realiza uma tarefa específica em um módulo dependente de cód igo.
A função é referenciada pelo programa principal através do nome atribuído a ela.
A utilização de funções visa modularizar um programa, o que é muito comum em programação estruturada.
Desta forma podemos dividir um programa em várias partes, no qual cada função realiza uma tarefa bem definida.
Esqueleto de uma função
tipo_de_retorno nome_da_função (listagem de parâmetros)
{
 instruções;
 retorno_da_função;
}
Parâmetros de uma função
Os parâmetros são as variáveis declaradas diretamente no cabeçalho da função.
A finalidade dos parâmetros é fazer a comunicação entre as funções e a função principal.
Chamamos de passagem de parâmetros a passagem de valores entre as funções.
Exemplo de programa usando função em C
#include<stdio.h>
#include<conio.h>
/*
Nome da função: multiplica
 recebe como parâmetos dois valores inteiros (N1,N2)
 objetivo: multiplicar os valores recebidos nos parâmetros.
 retorno: um parâmetro inteiro (res) contendo o resultado
*/
int multiplica(int N1, int N2) //multiplica recebe N1,N2 e retorna um int
{
 int resultado;
 resultado = N1 * N2;
 return(resultado); //retornando o valor para main
}
/******************* função principal (main) *********************/
int main(void)
{
 int V1, V2, resultado;
 printf("Digite o primeiro valor:");
 scanf("%d", &V1);
 printf("Digite o segundo valor:");
 scanf("%d", &V2);
//chama a função e recebe o retorno
 resultado = multiplica(V1,V2);
 printf("Resultado = %d\n", resultado);
 getch();
 return 0;
}
TELA DE EXECUÇÃO
Tela de execução do programa usando função em C
Explicação do código do programa:
Observe que o corpo da função multiplica foi declarado e a implementação do código foi feita antes da função main.
Na função main os valores de V1 e V2 foram recebidos.
Foi feita a chamada da função multiplica e a passagem de parâmetros.
O valor retornado pela função foi armazenado em resultado.
O valor armazenado em resultado foi apresentado.
Protótipo de função em C
Tipo da função;•
Nome da função;•
Lista de parâmetros que a função necessita;•
O protótipo de uma função é basicamente, uma declaração da interface da função, ou seja, deve especificar:
Exemplo:
int multiplica(int N1, int N2)
Programa em C reescrito usando protótipo
#include<stdio.h>
#include<conio.h>
/* Protótipo da função */
int multiplica(int N1, int N2);
int main(void)
{
 int V1, V2, resultado;
 printf("Digite o primeiro valor:");
 scanf("%d", &V1);
 printf("Digite o segundo valor:");
 scanf("%d", &V2);
//chama a função e recebe o retorno
 resultado = multiplica(V1,V2);
quarta-feira, 22 de novembro de 2017 12:11
 Página 106 de Linguagem de Programação C 
 resultado = multiplica(V1,V2);
 printf("Resultado = %d\n", resultado);
 getch();
 return 0;
}
int multiplica(int N1, int N2) //multiplica recebe N1,N2 e retorna um int
{
 int resultado;
 resultado = N1 * N2;
 return(resultado); //retornando o valor para main
}
TELA DE EXECUÇÃO
Tela de execução do programa em C reescrito usando protótipo
Função sem retorno
Em C, é possível criar funções que não retornam nenhum valor.
Normalmente, isto é feito quando queremos executar um bloco de comandos, mas estes comandos não precisam retornar nada.
Neste caso, devemos usar void no tipo de retorno do cabeçalho da função.
Se a função não recebe nenhum parâmetro, também colocamos void no local da listagem dos parâmetros.
exemplo:
void imprime_cabec(void)
{
 printf("******************************\n"); 
 printf("* LINGUAGEM C *\n");
 printf("******************************\n");return; /* retorno de uma função void */
}
Para funções do tipo void, (ou seja, sem retorno) devemos usar o comando return;
Note bem que este return não contém nenhum parâmetro.
Já que não é preciso retornar nenhum parâmetro e se eu não escrever o comando return?
Se a instrução return for omitida, alguns compiladores vão gerar mensagens de advertência (warning), pois o padrão ANSI C rec omenda a utilização da instrução.
Exemplo de programa usando funções com e sem retorno.
#include<stdio.h>
#include<conio.h>
/******* Área dos protótipos ******/
void imprime_cabec(void);
int multiplica(int N1, int N2);
/******* fim dos protótipos *******/
/* ******* FUNÇÃO PRINCIPAL *******/
int main(void)
{
 int V1=0, V2=0, resultado=0;
 //Chamada da função imprime_cabec
 imprime_cabec();
printf("Digite o primeiro valor:");
 scanf("%d", &V1);
 printf("Digite o segundo valor:");
 scanf("%d", &V2);
//chama a função e recebe o retorno
 resultado = multiplica(V1,V2);
 printf("Resultado = %d\n", resultado);
getch();
 return 0;
}
/* ******** FIM DA FUNÇÃO PRINCIPAL *******/
/* --------- Corpo das funções --------- */
/*
***** Função imprime_cabec *****
Parâmetros de entrada: não tem (void)
Objetivo: imprimir cabeçalho na tela
Tipo de retorno: não tem (void)
*/
void imprime_cabec(void)
{
 printf("******************************\n");
 printf("* LINGUAGEM C *\n");
 printf("******************************\n\n");
return;/* retorno de uma função void */
}
/*
***** Função multiplica *****
Parâmetros de entrada: N1, N2 ambos int
Objetivo: multiplicar valores
Tipo de retorno: int (resultado);
*/
//multiplica recebe N1,N2 e retorna um int
int multiplica(int N1, int N2)
{
 int resultado;
 resultado = N1 * N2;
//retornando o valor para main
 return(resultado);
}
TELA DE EXECUÇÃO
 Página 107 de Linguagem de Programação C 
Tela de execução do programa usando funções com e sem retorno
Neste programa utilizamos duas funções, uma delas com retorno de valor multiplica() e outra delas sem retorno imprime_cabec() .
Primeiramente, declaramos todos os protótipos das funções antes da main.
Na função main() são feitas as chamadas para as outras funções.
Após a finalização do código da main(), são implementados os corpos das outras funções.
Quando a função main() chama (invoca) outra função, o programa “salta” para o trecho de código da função que foi chamada, exe cuta esta função e depois retorna novamente para a função principal 
main().
<http://linguagemc.com.br/funcoes-em-c/> 
 Página 108 de Linguagem de Programação C 
Argumentos em linha de comando
Em linguagem C podemos passar argumentos através da linha de comando para um programa quando ele inicia.
A função main recebe parâmetros passados via linha de comando como vemos a seguir:
int main( int argc, char *argv[ ] )
Onde:
argc – é um valor inteiro que indica a quantidade de argumentos que foram passados ao chamar o programa.
argv – é um vetor de char que contém os argumentos, um para cada string passada na linha de comando.
argv[0] armazena o nome do programa que foi chamado no prompt, sendo assim, argc é pelo menos igual a 1, pois no mínimo existirá um argumento.
Os argumentos passados por linha de comando devem ser separados por um espaço ou tabulação.
Exemplo: Programa que conta e mostra os argumentos recebidos na linha de comando.
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <conio.h>
int main( int argc, char *argv[ ] )
{
 int cont;
 for(cont=0; cont < argc; cont++)
 printf("%d Parâmetro: %s\n", cont,argv[cont]);
 getch();
 return 0;
}
Obs: Este programa deve ser salvo em um diretório (no meu caso salvei em C:\teste), compilado e para executar devemos usar o prompt de comando. O programa será chamado a executar 
diretamente pelo prompt. Para tanto chamamos o programa pelo nome e passamos os argumentos. Veja o exemplo da chamada de execução na primeira linha da figura.
Tela de execução – Recebendo parâmetros do prompt
Tela de execução recebendo parâmetros do prompt
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <conio.h>
int main( int argc, char *argv[ ] )
{
 int Resultado, valorA=0, valorB=0;
 printf("\n Multiplicando valores passados na linha de comando\n");
 //atoi converte de alfanumérico para inteiro
 valorA = atoi(argv[1]);
 valorB = atoi(argv[2]);
 Resultado = valorA * valorB;
 printf("\n%d X %d = %d\n",valorA,valorB,Resultado);
 getch();
 return 0;
}
Tela de execução –Multiplicando valores passados pelo prompt
Tela de execução multiplicando valores passados pelo prompt
Explicação do código
Os argumentos passados via linha de comando são armazenados em strings, logo é necessário realizar uma conversão usando a função atoi () para transformar os valores a serem multiplicados em 
números inteiros.
atoi(argv[1]) converte o argumento da posição [1] do vetor argv[] em inteiro.
Depois de converter os argumentos em inteiros efetuamos a multiplicação normalmente.
<http://linguagemc.com.br/argumentos-em-linha-de-comando/> 
quarta-feira, 22 de novembro de 2017 12:10
 Página 109 de Linguagem de Programação C 
Funções e escopo de variáveis
Chamamos de escopo de variável ao conjunto de regras que determinam a utilização de uma variável em um programa
Podemos dividir as variáveis quanto ao escopo em três tipos:
variáveis locais, parâmetros formais e variáveis globais.
São aquelas declaradas dentro do bloco de uma função.•
Não podem ser usadas ou modificadas por outras funções.•
Somente existem enquanto a função onde foi declarada estiver sendo executada.•
Variáveis locais
Os parâmetros formais de uma função também são variáveis locais da função.•
Parâmetros formais
São declaradas fora de todos os blocos de funções.•
São acessíveis em qualquer parte do programa, ou seja, podem ser usadas e modificadas por todas as- outras funções.•
Existem durante toda a execução do programa.•
Variáveis Globais
Escopo de variáveis
#include <stdio.h>
#include <conio.h>
//declaração de variáveis globais
// ---------------- Função main()-------------------
int main(void)
{ 
 //declaração das variáveis locais da main()
 
 return(0);
}
// -------------------------------------------------
void funcao1(variáveis locais de parâmetros) 
{
 // declaração das variáveis locais da função1
 
 return;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//Exemplo de programa com variáveis globais e locais.
#include<stdio.h>
#include<conio.h>
//declaração de variáveis globais
float media, nota1, nota2;
//protótipo da função entrada
void entrada(void);
// ---------------- função main()-------------------
int main(void)
{
 //variável local
 char resposta;
 do
 {
 //chamada da função p/ entrada das notas
 entrada();
 //usando variáveis globais: media,nota1,nota2
 media = (nota1 + nota2) / 2;
 printf("\n Media do aluno: %.2f\n", media);
 printf("\n Deseja calcular outra media? (s/n)");
 fflush(stdin);
 scanf("%c",&resposta);
 }
 while(resposta == 's');
 return(0);
}
// --------- fim da função main() -----
//função entrada de dados
//usa as variáveis globais nota1 e nota2
void entrada(void)
{
 printf("\n Digite a primeira nota: ");
 scanf("%f", &nota1);
 printf("Digite a segunda nota: ");
 scanf("%f", &nota2);
 return;
}
Tela de Execução
quarta-feira, 22 de novembro de 2017 12:08
 Página 110 de Linguagem de Programação C 
Tela de execução de escopo de variáveis
Perguntas frequentes:
Podem existir variáveis locais e globais como mesmo nome?
Sim. Caso isto ocorra, as variáveis irão se comportar como variáveis diferentes, embora possuam o mesmo nome.
Nota: por uma questão de clareza na escrita do código, a prática de nomear variáveis globais e locais com o mesmo nome não é recomendada.
Supondo que exista uma variável local e uma global com o mesmo nome, qual prevalece?
Prevalece sempre a variável local.
As variáveis declaradas dentro da função main() são locais à mesma, pois embora seja uma função especial main não deixa de se r uma função. É muito comum programadores iniciantes confundirem 
as variáveis declaradas na main() com variáveis globais. Isto é um erro conceitual. Para ser global a variável tem que ser de clarada fora do bloco de qualquer outra função, inclusive fora da main().
<http://linguagemc.com.br/funcoes-e-escopo-de-variaveis/> 
 Página 111 de Linguagem de Programação C 
Recursividade em C
Chamamos de recursividade ou recursão quando uma função chama a si mesma.
Sim amigos, isto é possível, uma função pode invocar a si mesma!
Como funciona a recursividade?
Em uma função recursiva, a cada chamada é criada na memória uma nova ocorrência da função com comandos e variáveis “isolados”das ocorrências anteriores.
A função é executada até que todas as ocorrências tenham sido resolvidas.
Porém um problema que surge ao usar a recursividade é como fazê-la parar. Caso o programador não tenha cuidado é fácil cair num loop infinito recursivo o qual pode inclusive esgotar a memória…
Toda recursividade é composta por um caso base e pelas chamadas recursivas,.
Caso base: é o caso mais simples. É usada uma condição em que se resolve o problema com facilidade.
Chamadas Recursivas: procuram simplificar o problema de tal forma que convergem para o caso base.
Torna a escrita do código mais simples e elegante, tornando-o fácil de entender e de manter.•
Vantagens da recursividade
Quando o loop recursivo é muito grande é consumida muita memória nas chamadas a diversos níveis de recursão, pois cada chamad a recursiva aloca memória para os parâmetros, variáveis 
locais e de controle.
•
Em muitos casos uma solução iterativa gasta menos memória, e torna -se mais eficiente em termos de performance do que usar recursão.•
Desvantagens da recursividade
Exemplo clássico de recursividade: fatorial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//Cálculo de fatorial com função recursiva
#include <stdio.h>
#include <conio.h>
//protótipo da função fatorial
double fatorial(int n);
int main(void)
{
 int numero;
 double f;
 printf("Digite o número que deseja calcular o fatorial: ");
 scanf("%d",&numero);
 //chamada da função fatorial
 f = fatorial(numero);
 printf("Fatorial de %d = %.0lf",numero,f);
 getch();
 return 0;
}
//Função recursiva que calcula o fatorial
//de um numero inteiro n
double fatorial(int n)
{
 double vfat;
 if ( n <= 1 )
 //Caso base: fatorial de n <= 1 retorna 1
 return (1);
 else
 {
 //Chamada recursiva
 vfat = n * fatorial(n - 1);
 return (vfat);
 }
}
Tela de Execução
Tela de execução clássico de recursividade fatorial
Explicação do código
No programa acima, se o número n for menor ou igual a 1 o valor 1 será retornado e a função encerrada, sem necessidade de chamadas recursivas. Caso contrário dá-se início a chamadas recursivas 
até cair no caso mais simples que é resolvido e assim, as chamadas retornam valores de forma a solucionar o cálculo.
Veja a figura a seguir que representa as chamadas recursivas para o cálculo de 5!
quarta-feira, 22 de novembro de 2017 12:07
 Página 112 de Linguagem de Programação C 
Cálculo recursivo 5!
<http://linguagemc.com.br/recursividade-em-c/> 
 Página 113 de Linguagem de Programação C 
Função com passagem por referência
Existem dois métodos de passagem de parâmetros para funções:
Passagem por valor – permite usar dentro de uma função uma cópia do valor de uma variável, porém não permite alterar o valor da variável original (somente a cópia pode ser alterada).
Passagem por referência – É passada para a função uma referência da variável, sendo possível alterar o conteúdo da variável original usando-se esta referência.
Na linguagem C a passagem por referência é implementada com o uso de ponteiros.
Usando ponteiros (também chamados de apontadores) é possível alterar os valores das variáveis passadas como argumentos para uma função.
A função utilizada dessa forma é denominada função com passagem por referência. Nesse tipo de função, os argumentos passam os endereços de memória para os parâmetros declarados na 
função. Sendo assim, os parâmetros que recebem os valores passados obrigatoriamente tem que ser ponteiros já que irão receber um endereço de memória.
As alterações feitas dentro da função tem efeito direto nas variáveis passadas como argumentos na chamada. Isto proporciona a oportunidade de retornar vários valores em uma única função já que as 
alterações ocorrem diretamente nas variáveis.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//Exemplo de programa com passagem de parâmetros por referência.
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
//função com passagem por referência
//note que a função tem dois ponteiros como parâmetros
void troca_valores(int *ptrx, int *ptry);
int main(void)
{
int a, b;
printf("Digite o primeiro valor: ");
scanf("%d", &amp;a);
printf("Digite o segundo valor: ");
scanf("%d", &amp;b);
printf("Voce digitou os valores na seguinte ordem: %d e %d\n", a, b);
/* Chamada da função que troca os valores das variáveis a e b.
Observe como são passados os endereços nos argumentos.
Esta é uma função chamada por referência */
troca_valores(&amp;a, &amp;b);
//Exibindo os valores já trocados após a chamada da função
printf("Os valores trocados sao: %d e %d\n", a, b);
getch();
return 0;
}
//função que troca os valores inteiros apontados por ptrx e ptry
void troca_valores(int *ptrx, int *ptry)
{
int auxiliar;
//auxiliar recebe o conteúdo apontado por ptrx
auxiliar = *ptrx;
//coloca o valor que está no local apontado por ptry em ptrx
*ptrx = *ptry;
//finalmente, ptry recebe o valor armazenado em auxiliar
*ptry = auxiliar;
return;
}
Tela de Execução
Tela de execução com passagem de parâmetros por referência.
<http://linguagemc.com.br/funcao-com-passagem-por-referencia/> 
quarta-feira, 22 de novembro de 2017 12:06
 Página 114 de Linguagem de Programação C 
Passando um vetor para função em C
Para passar um vetor para uma função usando linguagem C utiliza-se um ponteiro como parâmetro da função. Ao usarmos o ponteiro como parâmetro, na realidade estamos passando o endereço 
inicial do vetor e não os seus elementos.
Vamos exemplificar uma passagem de vetor em uma função através de um exemplo prático.
O programa a seguir recebe 10 notas e armazena-as em um vetor.
Para efetuar o cálculo da média foi implementada uma função que recebe a quantidade de elementos do vetor e o seu endereço inicial, cujo protótipo é:
float media (int n, float *vnotas);
Posteriormente, no corpo da função efetuamos o processamento que manipula os dados do vetor de modo a calcular a média.
Veja o código da função comentada abaixo:
float media (int n, float *vnotas)
{
 int i;
 float m = 0, soma = 0;
 
 //fazendo a somatória das notas
 for (i = 0; i < n; i++)
 soma = soma + vnotas[i]; 
 
 //dividindo pela quantidade de elementos n
 m = soma / n;
 
 //retornando a média
 return m;
}
A seguir o código fonte completo do exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
1415
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
//protótipo da função media
float media (int n, float *vnotas);
int main (void)
{
 float vnotas[10];
 float media_notas;
 int i;
 /* leitura das notas */
 for (i = 0; i < 10; i++)
 {
 printf("Digite os valores das notas: ");
 scanf("%f", &vnotas[i]);
 }
 
 //chamada da função
 media_notas = media(10,vnotas);
 
 printf ( "\n Media = %.1f \n", media_notas );
 
 system("pause");
 return 0;
}
/* Função para cálculo da média 
 Parâmetros: 
 Recebe a quantidade de elementos n
 Recebe o endereço inicial do vetor notas em *vnotas
 Retorno: 
 Retorna a média na variável m
*/
float media (int n, float *vnotas)
{
 int i;
 float m = 0, soma = 0;
 
 //fazendo a somatória das notas
 for (i = 0; i < n; i++)
 soma = soma + vnotas[i]; 
 
 //dividindo pela quantidade de elementos n
 m = soma / n;
 
 //retornando a média
 return m;
}
Tela de execução
Tela de execução do exemplo passando um vetor para função C
<http://linguagemc.com.br/passando-um-vetor-para-funcao-em-c/> 
quarta-feira, 22 de novembro de 2017 12:04
 Página 115 de Linguagem de Programação C 
<http://linguagemc.com.br/passando-um-vetor-para-funcao-em-c/> 
 Página 116 de Linguagem de Programação C 
Valores aleatórios em C com a função rand
Para gerar um número aleatório (randômico) em linguagem C podemos usar a função rand pertencente à biblioteca stdlib.h.
Gerar sequências de números aleatórios é um problema bastante comum em programação.
A função rand
Quando esta função é chamada ela produz um valor aleatório na faixa entre 0 e a constante RAND_MAX. O valor desta constante encontra-se definida no arquivo stdlib.h.
Muitas vezes necessitamos gerar valores dentro de determinada faixa. Para exemplificar, vamos supor que a faixa de valores desejada esteja entre o valor mínimo zero e o valor máximo 100.
Vejamos um exemplo prático que gera uma sequência com 10 números aleatórios.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
 int i;
 printf("Gerando 10 valores aleatórios:\n\n");
 for (i = 0; i < 10; i++)
 {
 /* gerando valores aleatórios entre zero e 100 */
 printf("%d ", rand() % 100);
 }
 getch();
 return 0;
}
Tela de execução
Programa executando sequência de 10 números aleatórios.
Note que para limitar o valor máxima da faixa usamos o comando rand() % 100.
Agora observe o seguinte: se executarmos o programa acima várias vezes, a sequência de valores gerada cada uma das vezes será a mesma.
Por que isto ocorre?
Os valores não deveriam ser diferentes a cada execução?
Acontece que para a função rand funcionar ela precisa de um valor inicial chamado de “semente”. Se nenhum valor é passado rand assume um valor constante. No caso a função assume 1. Como 
este valor, ou seja 1, é assumido sempre no programa acima, a sequência gerada será a mesma para cada execução.
Para gerar valores diferentes a cada execução é necessário utilizar a função srand que inicializa a função rand com um valor “semente” de tal forma que esta semente seja um valor diferente a cada 
execução do programa, isto por sua vez produz valores diferentes na sequência.
A função srand
Para fazer com que os valores gerados não se repitam precisamos usar a função srand a fim de inicializar a função rand com um valor “semente” para que se produza um valor aleatório na faixa 
determinada. A função srand recebe um argumento do tipo inteiro sem sinal, ou seja, unsigned int.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>// necessário p/ as funções rand() e srand()
#include <time.h>//necessário p/ função time()
int main(void)
{
 int i;
 printf("Gerando 10 valores aleatórios:\n\n");
 /* srand(time(NULL)) objetiva inicializar o gerador de números aleatórios
 com o valor da função time(NULL). Este por sua vez, é calculado
 como sendo o total de segundos passados desde 1 de janeiro de 1970
 até a data atual.
 Desta forma, a cada execução o valor da "semente" será diferente.
 */
 srand(time(NULL));
 for (i=0; i < 10; i++)
 {
 // gerando valores aleatórios na faixa de 0 a 100
 printf("%d ", rand() % 100);
 }
 getch();
 return 0;
}
Tela de execução
Executando sequência de 10 números aleatórios utilizando a função srand.
Assim os números aleatórios não repetirão a cada execução.
De <http://linguagemc.com.br/valores-aleatorios-em-c-com-a-funcao-rand/> 
quarta-feira, 22 de novembro de 2017 13:38
 Página 117 de Linguagem de Programação C 
Arquivos em C
Arquivos
Os arquivos permitem gravar os dados de um programa de forma permanente em mídia digital.
Armazenamento permanente de dados: as informações permanecem disponíveis mesmo que o programa que as gravou tenha sido encerr ado, ou seja, podem ser consultadas a qualquer 
momento.
•
Grande quantidade dados pode ser armazenada: A quantidade de dados que pode ser armazenada depende apenas da capacidade dispo nível da mídia de armazenamento. Normalmente a 
capacidade da mídia é muito maior do que a capacidade disponível na memória RAM.
•
Acesso concorrente: Vários programas podem acessar um arquivo de forma concorrente.•
Vantagens de utilizar arquivos
A linguagem C trata os arquivos como uma sequência de bytes. Esta sequência pode ser manipulada de várias formas e para tanto, existem funções em C para criar, ler e escrever o conteúdo de 
arquivos independente de quais sejam os dados armazenados.
Tipos de arquivos
Em C trabalhamos com dois tipos de arquivos:
1) Arquivo texto: Armazena caracteres que podem ser mostrados diretamente na tela ou modificados por um editor de texto.
Exemplos de arquivos texto: documentos de texto, código fonte C, páginas XHTML.
2) Arquivo binário é uma sequência de bits que obedece às regras do programa que o gerou.
Exemplos: Executáveis, documentos do Word, arquivos compactados.
O ponteiro para arquivo
Em C, o arquivo é manipulado através de um ponteiro especial para o arquivo.
A função deste ponteiro é “apontar” a localização de um registro.
Sintaxe:
FILE < *ponteiro >
O tipo FILE está definido na biblioteca stdio.h.
Exemplo de declaração de um ponteiro para arquivo em C:
FILE *pont_arq;
Lembrando que FILE deve ser escrito em letras maiúsculas.
Operações com arquivos do tipo texto
Abertura de arquivos.
Para trabalhar com um arquivo, a primeira operação necessária é abrir este arquivo.
Sintaxe de abertura de arquivo:
< ponteiro > = fopen(“nome do arquivo”,”tipo de abertura”);
A função fopen recebe como parâmetros o nome do arquivo a ser aberto e o tipo de abertura a ser realizado.
Depois de aberto, realizamos as operações necessárias e fechamos o arquivo.
Para fechar o arquivo usamos a função fclose.
Sintaxe de fechamento de arquivo
fclose< ponteiro >;
Lembrando que o ponteiro deve ser a mesma variável ponteiro associada ao comando de abertura de arquivo.
Tipos de abertura de arquivos
r: Permissão de abertura somente para leitura. É necessário que o arquivo já esteja presente no disco.
w: Permissão de abertura para escrita (gravação). Este código cria o arquivo caso ele não exista, e caso o mesmo exista ele recria o arquivo novamente fazendo com que o conteúdo seja perdido. 
Portanto devemos tomar muito cuidado ao usar esse tipo de abertura.
a: Permissão para abrir um arquivo texto para escrita(gravação),permite acrescentar novos dados ao final do arquivo. Caso não exista, ele será criado.
Exemplo de criação de arquivos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 // criando a variável ponteiro para o arquivo
 FILE *pont_arq;
 //abrindo o arquivo
 pont_arq = fopen("arquivo.txt", "a");
 // fechando arquivo
 fclose(pont_arq);
 //mensagem para o usuário
 printf("O arquivo foi criado com sucesso!");
 system("pause");
 return(0);
}
Tela de execução
quarta-feira, 22 de novembro de 2017 13:40
 Página 118 de Linguagem de Programação C 
Tela de execução do exemplo criação de arquivo
Problemas na abertura de arquivos
Você está tentando abrir um arquivo no modo de leitura, mas o arquivo não existe;•
Você não tem permissão para ler ou gravar no arquivo;•
O arquivo está bloqueado por estar sendo usado por outro programa.•
Na prática, nem sempre é possível abrir um arquivo. Podem ocorrer algumas situações que impedem essa abertura, por exemplo:
Quando o arquivo não pode ser aberto a função fopen retorna o valor NULL.
É altamente recomendável criar um trecho de código a fim de verificar se a abertura ocorreu com sucesso ou não.
Exemplo:
if (pont_arq == NULL)
{
 printf("ERRO! O arquivo não foi aberto!\n");
}
else
 {
 printf("O arquivo foi aberto com sucesso!");
 }
Gravando dados em arquivos
A função fprintf armazena dados em um arquivo. Seu funcionamento é muito semelhante ao printf, a diferença principal é a existência de um parâmetro para informar o arquivo onde os dados serão 
armazenados.
Sintaxe:
fprintf(nome_do_ponteiro_para_o_arquivo, “%s”,variavel_string)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Exemplo: Abrindo, gravando e fechando arquivo
#include <stdio.h>
#include <conio.h>
int main(void)
{
 FILE *pont_arq; // cria variável ponteiro para o arquivo
 char palavra[20]; // variável do tipo string
 //abrindo o arquivo com tipo de abertura w
 pont_arq = fopen("arquivo_palavra.txt", "w");
 //testando se o arquivo foi realmente criado
 if(pont_arq == NULL)
 {
 printf("Erro na abertura do arquivo!");
 return 1;
 }
 printf("Escreva uma palavra para testar gravação de arquivo: ");
 scanf("%s", palavra);
 //usando fprintf para armazenar a string no arquivo
 fprintf(pont_arq, "%s", palavra);
 //usando fclose para fechar o arquivo
 fclose(pont_arq);
 printf("Dados gravados com sucesso!");
 getch();
 return(0);
}
Tela de execução
Tela de execução do exemplo abrindo, gravando e fechando arquivo
Leitura de arquivos
Leitura caracter por caracter – Função getc()
Faz a leitura de um caracter no arquivo.
Sintaxe:
getc(ponteiro_do_arquivo);
Para realizar a leitura de um arquivo inteiro caracter por caracter podemos usar getc dentro de um laço de repetição.
do
{
 //faz a leitura do caracter no arquivo apontado por pont_arq
 c = getc(pont_arq);
 
 //exibe o caracter lido na tela
 printf("%c" , c); 
 
}while (c != EOF);
A leitura será realizada até que o final do arquivo seja encontrado.
Leitura de strings – Função fgets()
É utilizada para leitura de strings em um arquivo. Realiza a leitura dos caracteres até o final da linha quando encontra o caracter \n. A leitura é efetuada de tal forma que a string lida é armazenada em 
um ponteiro do tipo char. A função pode ser finalizada quando encontrar o final do arquivo, neste caso retorna o endereço da string lida. Se ocorrer algum erro na leitura do arquivo, a função retorna 
NULL.
1
2
3
4
5
6
//Leitura de arquivo
#include <stdio.h>
#include <conio.h>
int main(void)
{
 Página 119 de Linguagem de Programação C 
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
 FILE *pont_arq;
 char texto_str[20];
 //abrindo o arquivo frase em modo "somente leitura"
 pont_arq = fopen("arquivo_palavra.txt", "r");
 //enquanto não for fim de arquivo o looping será executado
 //e será impresso o texto
 while(fgets(texto_str, 20, pont_arq) != NULL)
 printf("%s", texto_str);
 //fechando o arquivo
 fclose(pont_arq);
 getch();
 return(0);
}
Tela de execução
Tela de execução da exemplo leitura de arquivo
<http://linguagemc.com.br/arquivos-em-c-categoria-usando-arquivos/> 
 Página 120 de Linguagem de Programação C 
Vetores
Vetores e Matrizes em linguagem C
Arrays com várias dimensões em C
É possível utilizar arrays com várias dimensões. Ex; float notas[20]; //array de 1 dimensão, conhecido como vetor. float matriz1[5][5]; //array de 2 dimensões, conhecido como matriz. Também é possível 
declarar matrizes com múltiplas dimensões. int matriz3d [4][4][4] …
Alocação Dinâmica em C
Na alocação estática de memória, os tipos de dados têm tamanho predefinido. Neste caso, o compilador vai alocar de forma automática o espaço de memória necessário. Sendo assim, dizemos que a alocação 
estática …
Matriz em C
Por: Eduardo Casavella Neste artigo, veremos como trabalhar com matrizes, através de exemplos em linguagem C. O que é uma matriz? Matriz é a uma estrutura de dados do tipo vetor com duas ou mais 
dimensões. Os itens de uma …
Vetores – arrays em linguagem C
Por: Eduardo Casavella O vetor é uma estrutura de dados indexada, que pode armazenar uma determinada quantidade de valores do mesmo tipo. Os dados armazenados em um vetor são chamados de itens 
do vetor. Para localizar a posição de …
<http://linguagemc.com.br/vetores/> 
quarta-feira, 22 de novembro de 2017 13:42
 Página 121 de Linguagem de Programação C 
Arrays com várias dimensões em C
É possível utilizar arrays com várias dimensões.
Ex;
float notas[20]; //array de 1 dimensão, conhecido como vetor.
float matriz1[5][5]; //array de 2 dimensões, conhecido como matriz.
Também é possível declarar matrizes com múltiplas dimensões.
int matriz3d [4][4][4]
primeira posição da matriz: 0,0,0
última posição da matriz: 3,3,3
Note que uma matriz desse tamanho tem um consumo de: 4 X 4 X 4 = 64 variáveis, então é necessário um certo cuidado com o cons umo excessivo de memória.
Como atribuir um array para outro array?
Suponha dois vetores.
int v1[5], v2[5];
v1 = v2; //Esta atribuição NÃO É CORRETA!
Isto não é possível porque o compilador não copia todas as posições do vetor de uma vez.
Então só seria possível copiar posição por posição. Além do mais os vetores poderiam ter tamanhos diferentes o que poderia ca usar problemas no caso de uma atribuição desse tipo.
Inicializando de arrays
Veremos como inicializar arrays de uma dimensão (vetores) e de várias dimensões (matrizes).
Como inicializar um vetor com zeros.
É possível usar uma estrutura de repetição for para “zerar” todas as posições do vetor.
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<conio.h>
int main(void)
{
 int vetor[19],i;
 /* Inicializando o vetor com zeros */
 for (i = 0; i <= 19; i++)
 {
 vetor[i] = 0;
 }
 /* Imprimindo os valores do vetor */
 for (i = 0; i <= 19; i++)
 {
 printf ("vetor[%d] = %d\n", i, vetor[i]);
 }
 getch();
 return 0;
}
Tela de execução
Tela de execução inicializando o vetor com zeros
Como podemos ver esta técnica funciona bem e é muito útil especialmente para vetores de muitas posições.
Mas e se os valores atribuídos fossem diferentes?
Neste caso, não poderíamos usar o for pois não há um único valor a ser atribuído e sim vários valores diferentes.
Poderíamos declarar o vetor atribuir valores durante a própria declaraçao assim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<conio.h>
int main(void){
 int i,vetor[6] = {7, 55, 5, 4, 76, 89};
 /* Imprimindo os valores do vetor */
 for (i = 0; i <= 5; i++)
 {
 printf ("vetor[%d] = %d\n", i, vetor[i]);
 }
 getch();
 return 0;
}
Tela de execução
quarta-feira, 22 de novembro de 2017 13:43
 Página 122 de Linguagem de Programação C 
Tela de execução atribuindo valores na própria declaração
Supondo agora uma matriz de duas dimensões:
int m[2][2] = {1,2,3,4};
ou
int m[2][2] = {{1,2},{3,4}};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<conio.h>
int main(void)
{
 int i, j, matriz[2][2] = {10,20,30,40};
 /* Imprimindo os atribuídos para a matriz */
 for (i = 0; i <= 1; i++)
 {
 for(j = 0; j <=1; j++)
 {
 printf ("matriz[%d][%d] = %d\n", i,j, matriz[i][j]);
 }
 }
 getch();
 return 0;
}
Tela de execução
Tela de execução Valores atribuídos para a matriz
Uma outra forma de atribuição seria
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<conio.h>
int main(void)
{
 int matriz[2][2] = {{11,22},{32,44}};
 int i,j;
 /* Imprimindo os atribuídos para a matriz */
 for (i = 0; i <= 1; i++)
 {
 for(j = 0; j <=1; j++)
 {
 printf ("matriz[%d][%d] = %d\n", i,j, matriz[i][j]);
 }
 }
 getch();
 return 0;
}
Tela de execução
Tela de execução outra forma de atribuição
A segunda forma é um pouco mais trabalhosa, porém considero que seja mais clara.
Inicializando um vetor sem tamanho definido
Para inicializar o vetor sem definir o tamanho usamos a seguinte atribuição;
int v[] = {99,32,45,87,90,76};
Neste caso o compilador vai calcular automaticamente que a quantidade de posições usadas pelo vetor
são 6.
Inicializando uma matriz sem tamanho definido.
int m[][2] = {23, 45, 54, 55,77, 65}
Neste caso como a segunda dimensão é 2, o compilador vai calcular a primeira dimensão como sendo 3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<conio.h>
int main(void)
{
 /* Inicializando uma matriz sem tamanho definido */
 int matriz[][2] = {23, 45, 54, 55,77, 65};
 int i,j;
 /* Imprimindo os atribuídos para a matriz */
 for (i = 0; i <= 2; i++)
 {
 for(j = 0; j <= 1; j++)
 {
 printf ("matriz[%d][%d] = %d ", i,j, matriz[i][j]);
 }
 printf("\n");
 Página 123 de Linguagem de Programação C 
16
17
18
19
20
21
 printf("\n");
 }
 getch();
 return 0;
}
Tela de execução
Tela de execução inicializando uma matriz sem tamanho definido
Embora seja possível fazer estes tipos de declarações sem tamanhos definidos é mais interessante
usar uma variável para guardar o tamanho do vetor, dessa forma fica mais claro o que está sendo feito.
<http://linguagemc.com.br/arrays-com-varias-dimensoes-em-c/> 
 Página 124 de Linguagem de Programação C 
Alocação Dinâmica em C
Alocação Estática
Na alocação estática de memória, o tipo de dados tem tamanho predefinido. Neste caso, o compilador vai alocar de forma automática o espaço de memória necessário. Sendo assim, dizemos que a 
alocação estática é feita em tempo de compilação. Este tipo de alocação tende a desperdiçar recursos, já que nem sempre é possível determinar previamente qual é o espaço necessário para 
armazenar as informações. Quando não se conhece o espaço total necessário, a tendência é o programador exagerar pois é melhor superdimensionar do que faltar espaço.
Alocação Dinâmica
Na alocação dinâmica podemos alocar espaços durante a execução de um programa, ou seja, a alocação dinâmica é feita em tempo de execução. Isto é bem interessante do ponto de vista do 
programador, pois permite que o espaço em memória seja alocado apenas quando necessário. Além disso, a alocação dinâmica perm ite aumentar ou até diminuir a quantidade de memória alocada.
sizeof
A função sizeof determina o número de bytes para um determinado tipo de dados.
É interessante notar que o número de bytes reservados pode variar de acordo com o compilador utilizado.
Exemplo:
x = sizeof(int); //retorna 4 no gcc
malloc
A função malloc aloca um espaço de memória e retorna um ponteiro do tipo void para o início do espaço de memória alocado.
free
A função free libera o espaço de memória alocado.
Exemplo: Vetor Dinâmico
Quando um programador define tipo e o número de elementos um vetor ele está utilizando alocação estática.
Uma alternativa interessante é declarar um vetor como ponteiro, a fim de utilizar alocação dinâmica. Para tanto devemos usar a função malloc. Porém, esta função necessita saber a quantidade de 
bytes que devem ser reservados. Para fazer esse cálculo usamos o comando sizeof.
Vejamos como implementar esses detalhes no exemplo prático abaixo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <stdlib.h> //necessário para usar as funções malloc() e free()
#include <conio.h>
int main(void)
{
 float *v; //definindo o ponteiro v
 int i, num_componentes; 
 
 printf("Informe o número de componentes do vetor\n");
 scanf("%d", &num_componentes);
 
 /* ------------- Alocando dinamicamente o espaço necessário -------------
 
 1 - Calcular o número de bytes necessários
 primeiramente multiplicamos o número de componentes do vetor pela 
 quantidade de bytes que é dada pelo comando sizeof,
 portanto temos: 
 num_componentes * sizeof(float)
 
 2 - Reservar a quantidade de memória
 usamos malloc para reservar essa quantidade de memória, 
 então temos: 
 malloc(num_componentes * sizeof(float))
 
 3 - Converter o ponteiro para o tipo de dados desejado
 como a função malloc retorna um ponteiro do tipo void, 
 precisamos converter esse ponteiro para o tipo da nossa variável, no caso float,
 por isso usamos o comando de conversão explicita:
 (float *)
 
 4 - Juntando tudo e atribuindo em v temos o comando abaixo: */
 
 v = (float *) malloc(num_componentes * sizeof(float));
 
 //Armazenando os dados em um vetor
 for (i = 0; i < num_componentes; i++)
 {
 printf("\n Digite o valor para a posição %d do vetor: ", i+1);
 scanf("%f",&v[i]);
 } 
 
 // ------ Percorrendo o vetor e imprimindo os valores ----------
 printf("\n*********** Valores do vetor dinâmico ************\n\n");
 
 for (i = 0;i < num_componentes; i++)
 {
 printf("%.2f\n",v[i]);
 } 
 
 //liberando o espaço de memória alocado 
 free(v);
 
quarta-feira, 22 de novembro de 2017 13:44
 Página 125 de Linguagem de Programação C 
53
54
55
56
 
 getch();
 return 0;
} 
Tela de execução
Exemplo de execução de alocação dinâmica de memória em C
<http://linguagemc.com.br/alocacao-dinamica-de-memoria-em-c/> 
 Página 126 de Linguagem de Programação C 
Matriz em C
Neste artigo, veremos como trabalhar com matrizes, através de exemplos em linguagem C.
O que é uma matriz?
Matriz é a uma estrutura de dados do tipo vetor com duas ou mais dimensões.
Os itens de uma matriz tem que ser todos do mesmo tipo de dado.
Na prática, as matrizes formam tabelas na memória.
Matriz em linguagem C
Exemplo de declaração de matriz com 2 dimensões usando linguagem C
float Media[5][2];
O valor 5 representa a quantidade de linhas.•
O valor 2 representa a quantidade de colunas.•
Onde:
Dizemos que esta matriz é do tipo 5 X 2.
Como temos 5 linhas com 2 posições de armazenamento em cada linha, temos capacidade para armazenar até 10 elementos (itens) d o tipofloat.
Será necessário utilizar um índice para cada dimensão da matriz, logo uma matriz bidimensional terá 2 índices, um para posici onar a linha, outro para a coluna.
Assim, como no vetor, o índice da primeira posição é zero.
Como atribuir valores a uma matriz?
Suponha a matriz como declarada:
float Media[5] [2];
para atribuir uma valor precisamos identificar a posição usando os índices:
Media [0][0] = 5;
//Atribui o valor 5 na primeira linha e primeira coluna.
Media [1][0] = 7;
// Atribui o valor 7 na segunda linha, primeira coluna.
Preenchendo uma matriz
Para fazer o preenchimento de uma matriz, devemos percorrer todos os seus elementos e atribuir -lhes um valor.
Isto pode ser feito tanto gerando valores para cada elemento da matriz, como recebendo os valores pelo teclado.
Um método interessante para percorrer uma matriz é usar duas estruturas de repetição for e duas variáveis inteiras, uma para a linha e a outra para a coluna.
Exemplo:
Suponha uma matriz de 3 linhas por 3 colunas do tipo inteiro.
Para percorrer a matriz recebendo seus valores, podemos fazer:
for ( i=0; i<3; i++ )
 for ( j=0; j<3; j++ )
 {
 scanf ("%d", &matriz[ i ][ j ]);
 }
Neste trecho de código, a variável i representa a linha e j a coluna da matriz.
Usando as repetições, percorremos cada posição da matriz e recebemos um valor usando scanf();
Mostrando os elementos de uma matriz
Para mostrar os elementos de uma matriz, podemos usar o mesmo método, porém usamos o comando de saída printf().
for ( i=0; i<3; i++ )
 for ( j=0; j<3; j++ )
 {
 printf ("%d", matriz[ i ][ j ]);
 }
Exemplo:
Programa em C que preenche uma matriz com 3 linhas X 3 colunas e depois mostra os dados recebidos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
#include<conio.h>
int main (void )
{
 int matriz[2][2],i, j;
 printf ("\n Digite valor para os elementos da matriz\n\n");
 for ( i=0; i<3; i++ )
 for ( j=0; j<3; j++ )
 {
 printf ("\n Elemento[%d][%d] = ", i, j);
 scanf ("%d", &matriz[ i ][ j ]);
 }
 printf("\n\n******************* Saída de Dados ********************* \n\n");
 for ( i=0; i<3; i++ )
 for ( j=0; j<3; j++ )
 {
 printf ("\n Elemento[%d][%d] = %d\n", i, j, matriz[ i ][ j ]);
 }
 getch();
 return(0);
}
Tela que mostra a execução do código do exemplo:
quarta-feira, 22 de novembro de 2017 13:44
 Página 127 de Linguagem de Programação C 
Programa usando matrizes em linguagem C
Utilizamos um par de estruturas de repetição for para primeiramente fazer a leitura dos valores da matriz.
Fixamos a linha, ou seja, o índice i enquanto o índice da coluna j varia até preencher todos os elementos da linha.
Depois que uma linha é preenchida, o índice da linha é incrementado e recomeça o preenchimento da coluna por coluna com o loo p for interno controlado pelo índice j.
A saída de dados usa o mesmo princípio para percorrer a matriz e exibir os dados.
<http://linguagemc.com.br/matriz-em-c/> 
 Página 128 de Linguagem de Programação C 
Vetores – arrays em linguagem C
=O vetor é uma estrutura de dados indexada, que pode armazenar uma determinada quantidade de valores do mesmo tipo.
Os dados armazenados em um vetor são chamados de itens do vetor.
Para localizar a posição de um item em um vetor usamos um número inteiro denominado índice do vetor.
Vantagem de utilização do vetor
Facilidade de manipular um grande conjunto de dados do mesmo tipo declarando-se apenas uma variável.
Pseudocódigo:
NomeDoVetor: Vetor[inicio..final] de tipodevariavel
Exemplo:
V: vetor[0..9] de Real;
Representação gráfica de um vetor.
Representação de vetor
Vetor em linguagem C
Sintaxe:
Tipo NomeDoVetor[quantidade_de_itens];
Exemplo:
Declaração do vetor do tipo float com 10 números:
float V[10];
É importante notar que em linguagem C, o vetor é indexado a partir da posição zero.
A primeira posição de um vetor tem índice zero.•
A última posição de um vetor tem índice = número de posições – 1.•
Podemos dizer que em C
Declarando e inicializando de vetores
Exemplo 1:
Podemos declarar e inicializar um vetor com um tamanho constante, como abaixo:
int numeros[5] = {10, 20, 30, 40, 50};
Exemplo 2:
Iniciando apenas alguns elementos do vetor:
int valores[5] = {2,4,6};
será equivalente a
int valores[5] = {2,4,6,0,0};
Isto ocorre porque apenas alguns itens do vetor foram inicializados.
Neste caso, quando o número de itens inicializados é menor que o número total de itens do vetor, os itens não inicializados s ão automaticamente zerados.
Exemplo 3:
Inicializando um vetor sem especificar a quantidade de elementos
int valores[] = {3,5,7};
Neste exemplo, não foi especificado o tamanho do vetor, porém ao inicializar os elementos o compilador faz a contagem dos ite ns e determina o tamanho do vetor automaticamente.
Código de exemplo: Vetor em C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<conio.h>
int main(void)
{
 float notas[5] = {7, 8, 9.5, 9.9, 5.2};
 // declarando e inicializando o vetor notas
 printf("Exibindo os Valores do Vetor \n\n");
 printf("notas[0] = %.1f\n", notas[0]);
 printf("notas[1] = %.1f\n", notas[1]);
 printf("notas[2] = %.1f\n", notas[2]);
 printf("notas[3] = %.1f\n", notas[3]);
 printf("notas[4] = %.1f\n", notas[4]);
 getch();
 return 0;
}
quarta-feira, 22 de novembro de 2017 13:44
 Página 129 de Linguagem de Programação C 
17 }
Programa usando vetor em C
Explicação do código
Para fazer referência a uma determinada posição do vetor, devemos utilizar o nome do array e seu respectivo índice.
Por exemplo:
notas[0], faz referência ao elemento armazenado no vetor notas posição (índice) zero.
Para exibir esse elemento na tela usamos:
printf(“notas[0] = %.1f\n”, notas[0]);
Utilizando um laço for para automatizar a exibição de um vetor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<conio.h>
int main(void)
{
 int i;
 float notas[5] = {7, 8, 9.5, 9.9, 5.2};
 // declarando e inicializando o vetor notas
 printf("Exibindo os Valores do Vetor \n\n");
 for( i = 0 ; i <= 4; i++)
 {
 printf("notas[%d] = %.1f\n",i, notas[i]);
 }
 getch();
 return 0;
}
Programa usando vetor em C
Explicação do código
Declaramos uma variável de controle para o laço for.
Observe que a variável i, tem uma dupla função neste programa.
Além de controlar o laço a variável i também foi usada como índice do vetor.
Desta forma, podemos inicializar i com valor zero e fazê-la variar até o tamanho do vetor – 1, ou seja, a
variável parte de zero e vai até 4, exatamente como os índices do vetor.
Como i varia de zero até 4, faz um total de 5 repetições no controle do laço, e ao mesmo tempo, controla a posição do vetor c ujo elemento será
mostrado na tela.
<http://linguagemc.com.br/vetores-ou-arrays-em-linguagem-c/> 
 Página 130 de Linguagem de Programação C

Mais conteúdos dessa disciplina