Curso de C online para iniciantes, completo e gratuito

C é a linguagem de programação mais usada no mundo, devido ao seu poder e a liberdade, quase sem limites, que o programador C tem com sua máquina.
Isso, porém, tem um custo. Será necessário uma dedicação e estudo maior, principalmente se comparado com outras linguagens de programação. Mas vale a pena, sabendo C, você aprenderá as outras com uma incrível facilidade.

Se é totalmente novo no mundo da programação, recomendo a leitura da seção Comece a Programar, do site-base Programação Progressiva.
Lá você obterá informações gerais sobre programação, computação e linguagens, incluindo a linguagem C.





Para os iniciantes, a ordem sugerida do curso é essa:


Tutorial de Conceitos Básicos da Linguagem C

03. Como comentar seus códigos em C - Comentários e Delimitadores
04. Números inteiros - o tipo int
      4.1 Modificadores do tipo inteiro (int) - short, long, signed e unsigned
05. Números decimais (ou reais) em C - os tipos float e double
06. Escrevendo em C - o tipo char
07. Recebendo números do usuário - A função scanf
08. Recebendo letras do usuário - As funções scanf, getchar, fgetc e getc
09. Buffer: o que é, como limpar e as funções fflush e __fpurge
10. Operações matemáticas - Soma, subtração, multiplicação, divisão e módulo (ou resto da divisão) e precedência dos operadores
11. Os atalhos dos símbolos matemáticos: +=, -= , *=, /= e %=
12. Sistema Binário e Valores lógicos 'true' ou 'false'
13. Operadores Lógicos E (&&),  OU (||) e de Negação (!)
      Exercícios: Questões sobre os conhecimentos básicos da linguagem C



Tutorial de Teste Condicional e Controle de Fluxo

00. O teste condicional IF ELSE
      1.1 Questões sobre IF ELSE
            1.1 Soluções das questões sobre IF ELSE
            1.2 Programa em C: mostra as raízes de uma equação do 2o grau
            1.3 Programa em Cdiz se você passou, reprovou ou ficou de recuperação
02. Operadores de Incremento (++), Decremento (--) - Diferença entre a=b++ e a=++b
03. O laço WHILE: o que é, para que serve e como usar
      3.1 Questões sobre o laço WHILE
      3.2 Soluções das questões sobre o laço WHILE
04. O laço FOR:  o que é, para que serve e como usar o FOR - Cast
      4.1 Questões sobre o laço FOR
      4.2 Soluções das questões sobre o laço FOR
05. Os comandos CONTINUE e BREAK em C: pausando e alterando o fluxo de laços
06. O teste condicional SWITCH: o que é, para que serve e como usar o switch





Tutorial de Funções em C


Tutorial de Estrutura de dados I: Vetores/Arrays

00. Introdução as structs: O que são, para que servem e onde são usadas
01. Como declarar uma struct
02. Como acessar, ler e escrever em elementos de uma struct
03. typedef: Como criar seus próprios tipos
04. Como enviar structs para funções
05. Como passar uma struct para funções por referência - O operador ->
06. Exercícios sobre structs em C



Tutorial de Alocação Dinâmica de Memória

00. Introdução: o que é alocar memória dinamicamente e para quê isso serve
01. A função malloc(): como alocar memória em C
02. A função free(): Como liberar memória em C e evitar vazamento (Memory Leak)
03. A função realloc(): Realocando memória e a função calloc()



Tutorial de Estrutura de dados III: Estruturas Dinâmicas

00. Estrutura dinâmica de dados em C: O que são Listas, Filas, Pilhas e Árvores
01. Listas (List): O que é e como funciona
     1.1 Inserindo nós no início e final da lista
     1.2 Retirando nós do início e final da lista
     1.3 Implementação completa de uma lista - Inserindo e retirando de qualquer local
02. Pilhas em C - Como Programar
03. Filas em C - Como Programar



Tutorial de Arquivos (FILES) em C

00. Introdução: o que são, como funciona e para que servem os arquivos (files)
01. Abrindo arquivos (fopen), modos de abertura (read r, write r, append a) e fechamento (EOF, fclose e fcloseall)
02. Escrevendo em arquivos: As funções fputc, fprintf e fputs
03. Como ler arquivos em C: As funções fgetc, fscanf e fgets
                           



Jogos em C

Batalha Naval: código completo e comentado do Jogo Batalha Naval em C
Código do Jogo da Velha
Código comentado sobre como criar o Jogo da Velha em C



3ª letra do alfabeto e nome da Linguagem













Dennis Ritchie, criador da Linguagem C

Típico programador C

29 comentários:

Ramos Efrain disse...

Ótimos tutoriais de C! Perfeitos para iniciantes, bem fáceis de entender e em uma ordem ideal!

Parabéns ao curso C Progressivo!

Alberto disse...

Maravilhoso tutorial
O melhor q eu ja vi, o c eu estava tendo sérios problemas para aprender e agora esta muito fácil....
Obrigado!!!

Marcos Antônio disse...

ótimo tutoriais vocês do C Progressivo estão de parabéns.

Luane Caroline Aquino Cavalcanti disse...

muito bom,gostei

Anônimo disse...

O site esta de parabéns. Ótima iniciativa.

Rodrigo Schio disse...

Código para o jogo da cobrinha que fiz:

#include
#include
#include
#include

void gotoxy(int x,int y);

using namespace std;

int main(int argc,char *argv[])
{ char tecla;
int x,d=3,cx[1500],cy[1500],t=2,mx,my;
cx[0]=20;
cy[0]=20;
cx[1]=19;
cy[1]=20;
srand(time(NULL));
mx=(rand()%77)+1;
my=(rand()%23)+1;
for(x=0;x<24;x++)
{ gotoxy(0,x);
printf("%c",219);
}
for(x=0;x<78;x++)
{ gotoxy(x,0);
printf("%c",219);
}
for(x=0;x<78;x++)
{ gotoxy(x,24);
printf("%c",219);
}
for(x=0;x<25;x++)
{ gotoxy(78,x);
printf("%c",219);
}
do
{ while(tecla!='s'&&!(tecla=kbhit()))
{ for(x=t-1;x>0;x--)
{ cx[x]=cx[x-1];
cy[x]=cy[x-1];
}
if(d==2)cy[0]--;
if(d==4)cy[0]++;
if(d==1)cx[0]--;
if(d==3)cx[0]++;
gotoxy(mx,my);
printf("%c",1);
if(mx==cx[0]&&my==cy[0])
{ t++;
mx=(rand()%77)+1;
my=(rand()%23)+1;
}
gotoxy(cx[0],cy[0]);
printf("%c",219);
if(cx[t-1]!=0)
{ gotoxy(cx[t-1],cy[t-1]);
printf(" ");
}
if(d==2||d==4)Sleep(200);
else Sleep(100);
for(x=1;x<t;x++)
{ if(cx[0]==cx[x]&&cy[0]==cy[x])tecla='s';
}
if(cy[0]==0||cy[0]==24||cx[0]==0||cx[0]==78)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='H')d=2;
if(tecla=='P')d=4;
if(tecla=='K')d=1;
if(tecla=='M')d=3;
if(cy[0]==0||cy[0]==24||cx[0]==0||cx[0]==78)tecla='s';
}while(tecla!='s');
return EXIT_SUCCESS;
}
void gotoxy(int x,int y)
{ HANDLE hConsoleOutput;
COORD dwCursorPosition;
dwCursorPosition.X=x;
dwCursorPosition.Y=y;
hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
}


a função gotoxy já existem em algumas bibliotecas, mas como usei o dev c++ não achei nenhuma, então criei a minha.

Qualquer dúvida sobre eese código basta perguntar pra mim pelo meu email schio.rodrigo@gmail.com


Att
Rodrigo Schio

Anônimo disse...

os includes que não aparecem são:

iostream
dos.h
windows.h
conio.h

Anônimo disse...

Olá
Eu gostei muito do blog e da forma como vocês demonstram o que foi explicado.
Pretendo seguir carreira na área de jogos e, para isso, escolhi o C como linguagem inicial para meus projetos.
Gostaria de saber se vocês continuam com o blog, pois percebi que alguns tópicos citados não existem no blog, e eles seriam úteis no meu aprendizado.
Espero não estar enganado, fazendo com que percam tempo.
Desde já agradeço

Apostila C Progressivo disse...

Olá Anônimo,

Sim, vamos continuar a desenvolver o site sim, pode ter certeza.
Mas o conteúdo existente já é maior que a maioria dos livros e cursos pagos por aí, então já tem bastante material para estudar.

É importante também que você aprenda outras linguagens, atualmente temos projetos ensinando C, Java, HTML e Assembly, em breve teremos mais.

Bons estudos.

Tiago Kaunda José disse...

olá pessoal sou novo em programação C e gostaria de saber se é possivel criar um programa em C com interface gráfia, botões, label etc. em vez de ficar aquela tela preta.

Apostila C Progressivo disse...

Sim, Tiago.

Sistemas Operacionais, em sua maior parte, são feitos em C e tem muitas interfaces gráficas. Na verdade, é possível fazer praticamente tudo em C.

Se estiver no Windows, pode pesquisar sobre WinApi.

Erick disse...

Cara muito BOM! Posso dizer realmente que quase tudo que aprendi de C foi aqui com o tutoriais de vocês! Muito bom mesmo,demais!Espero que o site continue por muito e muito tempo com a mesma qualidade de material que estão sempre disponíveis aqui!

lucas caiue disse...

Acabei de ler todo o tutorial e queria saber se o tutorial ainda vai ter mais expansões, e se sim qual os assuntos tratado nos novos tópicos,e
se o tutorial já esta completo qual é próximo passo como programador C.Desde já agradeço pelo ótimo tutorial, parabéns.

João disse...

Olá, estou estudando pela apostila, porem não consigo chegar à solução do exercicio "etiqueta" propostos sobre 'conhecimentos basicos da linguagem em c'

(http://www.cprogressivo.net/2013/01/Exercicios-basicos-sobre-a-linguagem-C.html)

alguem poderia me ajudar?

OsVaLdInHo... disse...

Onde encontro as repostas para a lista de exercícios sobre conhecimentos básicos?

Anônimo disse...

site muito bom vlw ai vcs que mantem ele a ativa esta ajudando bastante obrigado di mais

Anônimo disse...

Estou sempre aqui no site estudando, e desta vez eu estou só passando, para dizer, que vocês estão de parabéns, pela simplicidade da estrutura do site, mas ao mesmo tempo, é um luxo no conteúdo, muito obrigado.

Marcelo Araújo disse...

Olá a todos do Cprogressivo. Quero dar-lhes o parabéns pela iniciativa de ensinar programação de forma gratuita. A didática que vocês utilizam é excelente. Mais uma vez parabéns! Vocês estão dando realmente uma oportunidade para muitos entrarem nessa área e o mais importante: gostar de programar.

Unknown disse...

Ola, eu to com uma duvida quanto ao retorno da função.
Eu vi um if, para verificar se o endereço de memoria era null, com resultado return -1 na main.
Alguém pode me explicar pra que serve exatamente o return -1?

PARTE DO CODIGO
v = ( int *) malloc ( . . . );
if ( v == NULL ) return -1;

Anônimo disse...

Ola queria saber se ainda vão continuar com o blog adcionando novos curso e atualizando os outros pq seria massa se tivesse outros cursos como c++ e php

att:Matheus (deu preguiça de logar numa conta)

Leandro ferreira disse...

olá pessoal! gosto de aprender coisas novas. e decidi que seria muito interessante aprender a programa. só que estou começando agora, e estudei apenas logica de programação. gostaria de saber se C seria a linguagem mais recomendada para iniciar.

Gabriel Melhor disse...

a respeito de um codigo em c referente a o jogo da cobrinha,
tipo to com duvida sobre um codigo bem simples, mas eu iniciei agora o curso de ciencias da computacao
entao pra min é o meu primeiro contato com programacao,

tipo a questao que o professor passou é essa:

Escreva um programa completo em C que classifique e imprima o número de notas de uma
turma que são excelentes (9-10), suficientes (7-8), e insuficientes (0-6). O programa também
deve mostrar a média das provas ao final da corrida.

O programa pode ser desenvolvido individualmente ou em dupla. No programa escrevam
comentários para explicar o funcionamento do programa e devem utilizar indentação para
facilitar assim a visualização e o entendimento do programa.

O programa deve executar da seguinte forma:

Este programa classifica a notas de uma turma.

Digite -1 para finalizar de entrar as notas.

Digite nota: 6
Digite nota: 7
Digite nota: 7
Digite nota: 10
Digite nota: 8
Digite nota: 9
Digite nota: 8
Digite nota: 4
Digite nota: 5
Digite nota: -1

Número de notas excelentes = 2
Número de notas suficientes = 4
Número de notas insuficientes = 3

A média da turma é 7,1

tipo o meu codigo pra essa questao ainda ta incompleto e mesmo assim nao to conseguindo criar um contador
é esse:

#include
#include

int main()
{

int cont_suficientes=0,
cont_insuficientes=0,
cont_excelentes=0;

float notas,
soma,
media;


while(notas!=-1)
{
printf("Digite a nota:");
scanf("%f", &notas);

if((notas>=0)&&(notas<=6))
{ cont_insuficientes++;

}

}

printf("notas insuficientes:%d\n\n",cont_insuficientes);


system("pause");
return 0;

}

tipo ate aqui o codigo conta as notas insuficientes, e lê ela para o usuario, mas desse ponto ae se eu colocar outras condições ele nao conta e bagunça tudo.
se puder me ajudar


Roberto GMJ disse...

Boa Tarde Pessoal, novamente Obrigado e parabens pelo curso, minha dúvida é sobre a linguagem C trabalhando com Banco de Dados como o SQL ou outro, é possivel e como funcionaria? Se diverem a indicação de algum material de pesquisa Obrigado.

Tarcisio Lira da Silva disse...

Muito bom, gostaria de saber se com os conhecimentos adquiridos aqui eu consigo criar um sistema operacional, um drive, ou um software que roda direto sobre o hardware.

Call Tech Computadores disse...

Bom dia pessoal. Eu estou bem no inicio. Fiz o exercicio de subtração e o resultado veio um valor maluco... Ou melhor os tres (m1, m2, resultado) veio totalmente doido. Pode me explicar porque?
Obrigado... Curso bom!

Anônimo disse...

Parabens pela aos criadores desse site, vocês têm ajudado bastante!

Anônimo disse...

Curso muito bom! To conseguindo estudar sozinho sem muitos problemas :)

Lucas Martins disse...

Olá!
Já estou fazendo o curso há algumas semanas.
Atualmente estou em "Estruturas Dinâmicas", quase concluindo o curso.
Quero lhes parabenizar pelo ótimo curso e agradecer pelo conhecimento que vocês do C Progressivo disponibilizaram para o público!
Ótimo trabalho e obrigado mais uma vez.
Abraços.

Anônimo disse...

CProgressivo, cadê a explicação sobre variáveis globais?

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.