====== Programação em Linguagem C ====== {{ program-bart.png?250|}} Estas páginas visam unificar e organizar melhor o conteúdo de programação em Linguagem C desenvolvido para as disciplinas de //Oficina de Computação//, //Programação 1// e //Programação 2// ao longo dos últimos anos. Este conteúdo tem como objetivo servir como referência em C para quem já sabe programar em alguma linguagem. ===== Conteúdo ===== FIXME em reorganização Primeiros passos: * [[Introdução à Linguagem C]] * [[Controle de fluxo]] * [[Tipos de dados]] * [[Operadores]] * [[Edição e compilação C em UNIX]] Mais conceitos básicos: * [[Entrada e saída padrão]] * [[Vetores]] * [[Funções]] * [[Estruturas]] * [[Definição de tipos]] Ponteiros e alocação de memória: * [[Ponteiros]] * [[Alocação de memória]] * [[Alocação dinâmica de matrizes]] Strings: * [[Strings]] * [[Codificação de caracteres]] * [[Strings multibyte]] Arquivos: * [[Acesso a arquivos]] * [[Arquivos binários]] Programas maiores: * [[Organização de código]] * [[O preprocessador C]] * [[O sistema Make]] * [[Depuração]] Tópicos avançados: * [[A função main]] * [[Tipos enumerados]] * [[Conversão de tipos]] * [[Ponteiros para funções]] * [[Uniões]] * [[Operações com bits]] Bibliotecas: * [[Bibliotecas]] * [[Construção de bibliotecas]] FIXME Conteúdo em preparação: * [[Variáveis]] * [[Tratamento de erros]] * [[Funções variádicas]] * [[pua:operacoes_em_diretorios|Manipulação de diretórios]] * [[Arquivos mapeados em memória]] * [[C e Assembly]] * [[Doxygen]] * [[pua:Gerência de tempo]] * [[Comparação entre C89, C99 e C11]] ===== Projetos ===== Projetos de programação propostos nos últimos anos: * Números racionais: * [[Números racionais]] * [[Números racionais - ponteiros]] * [[Números racionais - malloc]] * [[Geração de números aleatórios]] * [[Verificador ortográfico]] * [[Processamento de imagens]] * [[Fotomosaico]] * [[Processamento de áudio]] * [[Visualização de modelos 3D]] * [[Jogo ASCII]] * [[Jogo Gráfico]] * [[Planilha ASCII]] * [[Editor de texto ASCII]] * [[Colossal Cave]] * [[Arquivador VINA]] * [[theboys|The Boys]] ===== Material de apoio ===== Programação em C: * [[http://publications.gbdirect.co.uk/c_book/|The C Book]], Banahan M., Brady D., and Doran M., 1991. * [[http://beej.us/guide/bgc|Beej's Guide to C Programming]] * [[http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/index.htm|Practical Programming in C]], MIT OpenCourseWare (slides). * [[http://www1.cs.columbia.edu/~naliniv/teaching/2010-fall-3101-2.php|C Programming]], Columbia University (slides) * [[http://www.learn-c.org|Learn C Online]] * [[http://www.tutorialspoint.com/cprogramming/index.htm|C Programming Tutorial]] * [[https://www.doc.ic.ac.uk/lab/cplus/cstyle.html|Recommended C Style and Coding Standards]] * [[http://www.c-faq.com/|FAQ de programação em C]] * {{crefcard.v2.2.pdf|C Reference Card}} :!: * [[https://www-s.acm.illinois.edu/webmonkeys/book/c_guide/|The C Library Reference Guide]] * [[http://www.advancedlinuxprogramming.com|Advanced Linux Programming]] * [[http://www.ime.usp.br/~pf/algoritmos/|Projeto de Algoritmos]] do prof. Paulo Feofiloff, IME/USP * [[https://www.youtube.com/user/russo84/videos|Canal do prof. Bruno Ribas - UnB]] Apostilas: * {{apostila_c_-_ufpr.pdf|DINF UFPR}} (2008) * {{apostila_c_-_ufpr_pet-cc.pdf|PET-CC UFPR}} (2006) * {{apostila_c_-_nce.pdf|NCE UFRJ}} (2016) * {{apostila_c_-_ufmg.pdf|EEL UFMG}} (2001) * {{apostila_c_-_unicamp_gacli.pdf|GACLI UNICAMP}} (2000) * {{apostila_c_-_ctm_caxias.pdf|CTM Caxias do Sul}} (1997) Having Fun with C: * [[http://www.ioccc.org|Obfuscated C Code Contest]] * [[http://www.underhanded-c.org/|Underhanded C Code Contest]] Diversos: * [[https://www.alpharithms.com/tabs-vs-spaces-the-timeless-debate-581511/|Devo usar TABs ou espaços?]]