关于如何深入学习C语言

时间:2023-01-29 12:32:55
我说明下我自己的情况,我在学校学过一学期C语言一学期C++,学过一学期汇编

语言,对计算机虽然不是很精通但也不是小白。我现在想深入点学习C语言,因为我根据我

现在掌握的C语言知识和理解很难做出什么实用性的东西来,顶多也就是能编点小程序处理

点数学问题,而且对程序效率的深层优化什么的也是不很明了。
    我举例子来说,我个人是比较喜欢这样的学习方法的:就是先确定自己想完成一个什

么功能的程序,然后一步步来实现,我以前编过一个贪吃蛇的程序,用了一晚上从准备到

出来完整的程序,因为以前我从没编过关于图形界面的程序,所以开始很慢,但是用了一

晚上算是实现了。虽然贪吃蛇的大体是实现了,但是程序运行起来并不是那么完美的,比

如说在蛇转向的时候总会闪几下,我不知道这是为什么,因为从我的程序看来不应该闪的

。我自己考虑可能是由于不了解系统的比较深的原理不能达到很好的显示效果(比如说双

缓冲什么的,我听到过这个词但不知道具体什么意思)。还有昨天晚上我给自己定了个目

标,就是编一个程序能实现把所有的小于指定数的素数写入一个记事本文件内保存。然后

开始上网学习C语言简单的文件操作,最后程序也实现了是个比较简单的程序,虽然运行效

率有点低,而且也遇到了一个之前不曾想到的问题。我大体说下。因为程序涉及文件读写

操作,我的程序是每测试出一个数是素数就写进文件,然后关闭文件,这样势必运行慢了

,因为在程序关闭文件时要把文件缓存的内容写进硬盘,硬盘读写相对慢就耽误程序的运

行。于是我就想改进程序,先把素数写进缓存,等写了很多个素数直到缓存满了再写到硬

盘。但是实现起来又遇到了问题,我把自己的程序改了下,打开文件不关闭,这样就不会

每写一个素数都要写硬盘了,但是我发现只有我要求程序寻找小于5000(具体或许不是这

个数,我没测试到底是几)的素数的时候程序运行正常,一旦要求程序运行查找很大的数

以下的素数时总是报错,是系统错误。我想综其原因可能就是我对文件操作和系统缓冲的

具体细节什么的不清楚。(关于这两个程序的源码,我想我还是在下面贴出来吧)
    我想问的是比较深入的学习C语言的步骤,一步步来,我想先确定各项目,比如先实现

个什么程序,后实现个什么程序,我好有具体目标一步步来。最好不要只是给我推荐读什

么书,因为我放假在家很难静下心来研究一本书的,而且我想如果我真是有心情一本一本

书读下来也不用来这里问问题了。我对基本的C的语法什么的都了解了,就是想能深点学习

,因为C语言毕竟不是只用来处理几个数学小问题就行了的。连操作系统都能用C写,我不

求能到达那种专业的程度,毕竟不是一两天的事。我就是想能一步步更加深的学习C。另外

我没专门学习过数据结构和算法,我也不想单独来学,我想在学习C和处理问题的道路上顺

便用到后学习。
    我想有过C学习经历的人都有经过我这一步的时候吧,有没有过来人讲一下他学习C的

经验和根据我的情况给我些建议,我很感激。也不必非得回答我的问题,大家觉得根据我

自己说的我的情况给我点具体可行的建议什么的就行了。我领会东西还算不笨,而且对计

算机语言方面的学习能力也算比较强。我不是小气只是真的分不多,先谢谢了。还有我留

下自己邮箱如果有什么东西或者想进一步交流可以给我发邮件:

xuejianbest@hotmail.com

50 个解决方案

#1


//这是未修改前的将素数写进文件的源代码:

#include <stdio.h>
#include <math.h>
void writefile(int);    //这个函数的作用就是把传递给它的参数写进文件
int main()
{
FILE *pWriteFile=fopen("D:\\VC\\file1.txt","w");
fclose(pWriteFile);         //这两句的作用是如果存在重名文件,则删除了重建。

int i;
int num=3;   
int big=3;
printf("输入一个大数做为结束条件:");
scanf("%i",&big);
if(big<3)           //输入的数小于3直接退出程序
  goto exit0;
writefile(2);    //先在文件里写2,因为2是素数,而程序下面是从3开始判断的
s0: 
for(i=3;i<=sqrt(num);i+=2) //判断num是否为素数
  if(num%i==0)
  {
   num+=2;
   goto s0;
  }
writefile(num);    //把num写进文件
num+=2;
if(num>big)     //退出程序条件
  goto exit0;
goto s0;
exit0:
return 0;
}
void writefile(int num)       //此函数作用是把num写进文件里,而且后面跟着写两个空格来分隔两个数字。
{        //num是数字,文件里是以字符形式出现的,所以函数里涉及数字到字符的转换
int i=31;
int a=0,b=0;
char zhishu[32]={0};
while(num!=0)
{
  zhishu[--i]=num%10+0x30;
  num/=10;
}
for(a=0;zhishu[a]==0;a++) ;
while(a!=31)
  zhishu[b++]=zhishu[a++];
zhishu[b++]=' ';
zhishu[b++]=' ';
zhishu='\0';
FILE *pWriteFile=fopen("D:\\VC\\file1.txt","a");
  fputs(zhishu,pWriteFile);
fclose(pWriteFile);    //这里有关闭文件操作,所以每运行一次函数都要写硬盘,这势必影响程序运行速度
}

//总结:由于每次调用writefile函数都要写硬盘,也就是说每写个素数到文件都真正读取文件一次,没有利用好文件操作的缓存,程序效率低。

#2


//做了一部分修改后的把素数写入文件的程序代码
#include <stdio.h>
#include <math.h>
int main()
{
FILE *pWriteFile=fopen("D:\\VC\\file1.txt","w");
fclose(pWriteFile);
int i;
int t;             
int num=3;
int big=3;
printf("输入一个大数做为结束条件:");
scanf("%i",&big);
s0: 
for(i=3;i<=sqrt(num);i+=2)
  if(num%i==0)
  {
   num+=2;
   goto s0;
  }
//---------------------------------------------------------    把原来的writefile函数实现的功能在这里实现,程序其他地方基本没改
t=num;          //保存num的值
int writefilei=31;
int writefilea=0,writefileb=0;
char writefilezhishu[32]={0};
while(num!=0)
{
  writefilezhishu[--writefilei]=num%10+0x30;
  num/=10;
}                
for(writefilea=0;writefilezhishu[writefilea]==0;writefilea++) ;
while(writefilea!=31)
  writefilezhishu[writefileb++]=writefilezhishu[writefilea++];   //把num数字转化为字符型时并存在writefilezhishu[]这个数组里
writefilezhishu[writefileb++]=' ';
writefilezhishu[writefileb++]=' ';
writefilezhishu[writefileb]='\0';
pWriteFile=fopen("D:\\VC\\file1.txt","a");   //只打开不关闭 
fputs(writefilezhishu,pWriteFile);
num=t;           //恢复num的值
//---------------------------------------------------------------
num+=2;
if(num>big)
  goto exit0;
goto s0;
exit0:
fclose(pWriteFile);   //退出程序时关闭文件
return 0;
}

//这样效率是比之前高了点,但是存在一个问题,当要求输入时候输入的数大于一个值时候报错(比如输入5000),而输入小点的数(比如2000)正常。
//我不知道原因何在。后来我又把程序改了一下,一切正常效率也提上去了,但是至于这个程序为什么会出现这种情况,我还是不清楚,希望了解的人给个解释,谢谢。
//我会把报错的截图发在后面,还有修改后的程序只改了一行,就是把打开文件那一行移到上面去。
//我还是再在下面贴个改好了的程序源码吧,有利于查出为什么会出现上面这个程序的错误。

关于如何深入学习C语言

#3


//最终版把素数写入文件的程序代码
#include <stdio.h>
#include <memory.h>
#include <math.h>
int main()
{
 FILE *pWriteFile=fopen("D:\\VC\\file1.txt","w");
 fclose(pWriteFile);
 pWriteFile=fopen("D:\\VC\\file1.txt","a");                //把打开文件操作移到程序开始
 int i;
 int t;             
 int num=3;
 int big=3;
 int writefilei=31;
 int writefilea=0,writefileb=0;
 char writefilezhishu[32]={0};
 printf("输入一个大数做为结束条件:");
 scanf("%i",&big);
 if(big<3)
 goto exit0;
 fputs("2  ",pWriteFile); 
s0: 
 for(i=3;i<=sqrt(num);i+=2)
  if(num%i==0)
  {
   num+=2;
   goto s0;
  }
//---------------------------------------------------------    把原来的writefile函数实现的功能在这里实现,程序其他地方基本没改
 t=num;          //保存num的值
 writefilei=31;
 writefilea=0,writefileb=0;
 memset(writefilezhishu,0,sizeof(writefilezhishu));

 while(num!=0)
 {
  writefilezhishu[--writefilei]=num%10+0x30;
  num/=10;
 }                
 for(writefilea=0;writefilezhishu[writefilea]==0;writefilea++) ;
 while(writefilea!=31)
  writefilezhishu[writefileb++]=writefilezhishu[writefilea++];   //把num数字转化为字符型时并存在writefilezhishu[]这个数组里
 writefilezhishu[writefileb++]=' ';
 writefilezhishu[writefileb++]=' ';
 writefilezhishu[writefileb]='\0';
 fputs(writefilezhishu,pWriteFile);     //这里不打开或者关闭文件,只写文件,实际上写的是文件缓存
 num=t;           //恢复num的值
//---------------------------------------------------------------
 num+=2;
 if(num>big)
  goto exit0;
 goto s0;
exit0:
 fclose(pWriteFile);   //退出程序时关闭文件
 return 0;
}


//这样程序无论输入的数字是多少运行都不会出错了,一切正常,而且运行效率与前面程序相比大大提高,因为这个程序写文件利用了全缓冲方式。

#4


如果你想深入学习C语言的话,我建议你看看汇编和操作系统、数据结构之类的书。

#5


想深入学习C语言,至少得了解汇编

#6


同上,这么多人都告诉你了。

#7


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

#8


该回复于2011-01-19 17:05:12被版主删除

#9


char writefilezhishu[32]={0};
while(num!=0)
{
  writefilezhishu[--writefilei]=num%10+0x30;
  num/=10;
}   
for(writefilea=0;writefilezhishu[writefilea]==0;writefilea++) ;
这句没有任何作用,因为你前面至少 每个都加了0x30,所以还没进入就退出了。

你那个输入5000以后就出错是,因为5000以内的数超过了32个,你内存访问越界了。

深入学习C语言, 要学好汇编,数据结构,算法,可能以后还要操作系统,计算机组成原理,体系结构等。

#10


该回复于2011-01-20 09:26:19被版主删除

#11


我是觉得楼主的能力已经很强了。。。


双缓冲 在QT里是一种事件处理机制 

#12


该回复于2011-01-20 09:32:44被版主删除

#13


多动手调程序,多搜集资料  适当买些书自学

#14


共同学习~~楼上说的很清楚了

#15


多了解汇编吧

#16


我刚好跟你相反,我只喜欢看书,不喜欢写代码!

#17


编译原理也是非常重要的。特别是运行时环境和代码生成那几章!

#18


送你一句话,看了过后你就知道怎么做了:
程序不是看出来的,是写出来的;思想不是想出来的,是敲出的!
楼主好好琢磨一下。

#19


每日任务…~

#20


楼主的文笔,有平静的力量。怎么就静不下来看书?关于文件的操作我实在看不懂你写,我没觉得那么复杂。你用fopen打开一个流然后又用fclose把流关闭。你说是为了防止重名。可是你怎么判断?你没任何条件就把它关了?以w方式打开流,如果该文件存在则文件长度截为零。打开一个流的时候,fopen函数已经建立了缓冲区还有做了其他杂七杂八的事情。当然你可以用setvbuf建立一个替换缓冲区。为什么你对文件进行一次操作就要关闭一次?最后不操作再关不行?我推荐K&R的那本。只有200多页。C语言教父写的。我听说很好准备去看。我也很迷茫。

#21


关于如何深入学习C语言lz大脑短路 ,不解释,为何会如此复杂,写个素数程序,,,

#22


楼上的问题还真独到。

#23


LZ还没干啥就开始展望未来了,求素数可以用筛法,你还sqrt循环呢,这个刚学C语言的都会。

#24


C语言只是个工具嘛,拿来用的,比如学学SDK编程嘛,去运用C语言写的东西

#25


KISS!
Keep It Sample and Stupid!

#26


纠正上帖
Sample->Simple

#27


lz的文笔很好

#28


zhishu......

#29


爱拉托逊斯筛选法

#30


其实楼主挺强的,而且目标又明确,继续努力下去肯定有收获

#31


lz不错了,我还在看书的阶段,离自己编一个程序还有一大段距离

#32


楼主文笔真好! 关于如何深入学习C语言
不过写个找素数的程序应该不会这么复杂的吧,你可以去谷歌下筛法找素数,进而研究一下算法

#33


应该去做项目提升
游戏 开源项目 等等
对游戏感兴趣吗?联系U箱ksqdq11@163.com

#34


学习一门语言?
看书---写程序---读程序---调试程序----再写程序。。。。

如何深入?
看书:C与指针---C陷阱与缺陷---C专家编程---ISO C标准。
写程序---读程序---调试程序----再写程序

再深入?
修炼内功。
汇编语言,操作系统,数据结构,算法。。。
写程序---读程序---调试程序----再写程序

再再深入?
。。。。。。。。。。。。。。。。。。。。
写程序---读程序---调试程序----再写程序

#35


好长的帖子啊,没看完。。。

#36


怎么才叫深入呢?语言就是语言,语法就摆在那里,再深入也是有限的。

编程编到最后其实就是思想,而不是什么语言。

#37


兴趣--> 相关的书籍->项目->周边的书籍

#38


该回复于2011-02-09 13:25:55被版主删除

#39


我也一直对深入学习摸不到头绪..

#40


素数可以编译的时候直接静态生成然后,筛选,当然这是听老师讲的,没试过

#41


汇编……

#42


我猜拟如果坚持下去,或许有一天会回头跟我们这样的新手说吧,楼主
引用 34 楼 athenacle_ 的回复:
学习一门语言?
看书---写程序---读程序---调试程序----再写程序。。。。

如何深入?
看书:C与指针---C陷阱与缺陷---C专家编程---ISO C标准。
写程序---读程序---调试程序----再写程序

再深入?
修炼内功。
汇编语言,操作系统,数据结构,算法。。。
写程序---读程序---调试程序----再写程序

再再深入?
。。。。。。。。。。。。……

#43


其实很佩服楼主的毅力,我就是有点懒,刚开始还能坚持,现在又放下了,向楼主学习,努力。。。。。

#44


楼主真的很强大,我自学c语言有一个月了,只会一些小程序,其他什么度不会

#45


引用 7 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
这是学习C和其他知识的步骤么  我大白  想自学C的一些基础知识,现在迷茫,不知道如何入门、做什么准备、学习它需要多久   请老师指明  谢谢了

#46


非常不错,值得学习啊

#47


引用 45 楼 guofansen 的回复:
引用 7 楼 zhao4zhong1 的回复:

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……


这是学习C和其他知识的步骤么 我大白 想自学C的一些基础知识,现在迷茫,不知道如何入门、做什么准备、学习它需要多久 请老师指明 谢谢了

下载Win-TC看帮助里面的C基础知识。

#48


引用 34 楼 athenacle_ 的回复:
学习一门语言?
看书---写程序---读程序---调试程序----再写程序。。。。

如何深入?
看书:C与指针---C陷阱与缺陷---C专家编程---ISO C标准。
写程序---读程序---调试程序----再写程序

再深入?
修炼内功。
汇编语言,操作系统,数据结构,算法。。。
写程序---读程序---调试程序----再写程序

再再深入?
。。。。。。。。。。。……
很好了

#49


0.0

#50


要想学好c语言就得计算机运行程序的每一步.你懂得数字电路,计算机组成原理,操作系统(windows,linux),汇编,编译,链接,数据结构,离散数学,线性代数.....必要的话还要学网络,网络安全,密码学......
其实c语言学到后来就是数学了,各种算法
学海无涯,回头是岸......

#1


//这是未修改前的将素数写进文件的源代码:

#include <stdio.h>
#include <math.h>
void writefile(int);    //这个函数的作用就是把传递给它的参数写进文件
int main()
{
FILE *pWriteFile=fopen("D:\\VC\\file1.txt","w");
fclose(pWriteFile);         //这两句的作用是如果存在重名文件,则删除了重建。

int i;
int num=3;   
int big=3;
printf("输入一个大数做为结束条件:");
scanf("%i",&big);
if(big<3)           //输入的数小于3直接退出程序
  goto exit0;
writefile(2);    //先在文件里写2,因为2是素数,而程序下面是从3开始判断的
s0: 
for(i=3;i<=sqrt(num);i+=2) //判断num是否为素数
  if(num%i==0)
  {
   num+=2;
   goto s0;
  }
writefile(num);    //把num写进文件
num+=2;
if(num>big)     //退出程序条件
  goto exit0;
goto s0;
exit0:
return 0;
}
void writefile(int num)       //此函数作用是把num写进文件里,而且后面跟着写两个空格来分隔两个数字。
{        //num是数字,文件里是以字符形式出现的,所以函数里涉及数字到字符的转换
int i=31;
int a=0,b=0;
char zhishu[32]={0};
while(num!=0)
{
  zhishu[--i]=num%10+0x30;
  num/=10;
}
for(a=0;zhishu[a]==0;a++) ;
while(a!=31)
  zhishu[b++]=zhishu[a++];
zhishu[b++]=' ';
zhishu[b++]=' ';
zhishu='\0';
FILE *pWriteFile=fopen("D:\\VC\\file1.txt","a");
  fputs(zhishu,pWriteFile);
fclose(pWriteFile);    //这里有关闭文件操作,所以每运行一次函数都要写硬盘,这势必影响程序运行速度
}

//总结:由于每次调用writefile函数都要写硬盘,也就是说每写个素数到文件都真正读取文件一次,没有利用好文件操作的缓存,程序效率低。

#2


//做了一部分修改后的把素数写入文件的程序代码
#include <stdio.h>
#include <math.h>
int main()
{
FILE *pWriteFile=fopen("D:\\VC\\file1.txt","w");
fclose(pWriteFile);
int i;
int t;             
int num=3;
int big=3;
printf("输入一个大数做为结束条件:");
scanf("%i",&big);
s0: 
for(i=3;i<=sqrt(num);i+=2)
  if(num%i==0)
  {
   num+=2;
   goto s0;
  }
//---------------------------------------------------------    把原来的writefile函数实现的功能在这里实现,程序其他地方基本没改
t=num;          //保存num的值
int writefilei=31;
int writefilea=0,writefileb=0;
char writefilezhishu[32]={0};
while(num!=0)
{
  writefilezhishu[--writefilei]=num%10+0x30;
  num/=10;
}                
for(writefilea=0;writefilezhishu[writefilea]==0;writefilea++) ;
while(writefilea!=31)
  writefilezhishu[writefileb++]=writefilezhishu[writefilea++];   //把num数字转化为字符型时并存在writefilezhishu[]这个数组里
writefilezhishu[writefileb++]=' ';
writefilezhishu[writefileb++]=' ';
writefilezhishu[writefileb]='\0';
pWriteFile=fopen("D:\\VC\\file1.txt","a");   //只打开不关闭 
fputs(writefilezhishu,pWriteFile);
num=t;           //恢复num的值
//---------------------------------------------------------------
num+=2;
if(num>big)
  goto exit0;
goto s0;
exit0:
fclose(pWriteFile);   //退出程序时关闭文件
return 0;
}

//这样效率是比之前高了点,但是存在一个问题,当要求输入时候输入的数大于一个值时候报错(比如输入5000),而输入小点的数(比如2000)正常。
//我不知道原因何在。后来我又把程序改了一下,一切正常效率也提上去了,但是至于这个程序为什么会出现这种情况,我还是不清楚,希望了解的人给个解释,谢谢。
//我会把报错的截图发在后面,还有修改后的程序只改了一行,就是把打开文件那一行移到上面去。
//我还是再在下面贴个改好了的程序源码吧,有利于查出为什么会出现上面这个程序的错误。

关于如何深入学习C语言

#3


//最终版把素数写入文件的程序代码
#include <stdio.h>
#include <memory.h>
#include <math.h>
int main()
{
 FILE *pWriteFile=fopen("D:\\VC\\file1.txt","w");
 fclose(pWriteFile);
 pWriteFile=fopen("D:\\VC\\file1.txt","a");                //把打开文件操作移到程序开始
 int i;
 int t;             
 int num=3;
 int big=3;
 int writefilei=31;
 int writefilea=0,writefileb=0;
 char writefilezhishu[32]={0};
 printf("输入一个大数做为结束条件:");
 scanf("%i",&big);
 if(big<3)
 goto exit0;
 fputs("2  ",pWriteFile); 
s0: 
 for(i=3;i<=sqrt(num);i+=2)
  if(num%i==0)
  {
   num+=2;
   goto s0;
  }
//---------------------------------------------------------    把原来的writefile函数实现的功能在这里实现,程序其他地方基本没改
 t=num;          //保存num的值
 writefilei=31;
 writefilea=0,writefileb=0;
 memset(writefilezhishu,0,sizeof(writefilezhishu));

 while(num!=0)
 {
  writefilezhishu[--writefilei]=num%10+0x30;
  num/=10;
 }                
 for(writefilea=0;writefilezhishu[writefilea]==0;writefilea++) ;
 while(writefilea!=31)
  writefilezhishu[writefileb++]=writefilezhishu[writefilea++];   //把num数字转化为字符型时并存在writefilezhishu[]这个数组里
 writefilezhishu[writefileb++]=' ';
 writefilezhishu[writefileb++]=' ';
 writefilezhishu[writefileb]='\0';
 fputs(writefilezhishu,pWriteFile);     //这里不打开或者关闭文件,只写文件,实际上写的是文件缓存
 num=t;           //恢复num的值
//---------------------------------------------------------------
 num+=2;
 if(num>big)
  goto exit0;
 goto s0;
exit0:
 fclose(pWriteFile);   //退出程序时关闭文件
 return 0;
}


//这样程序无论输入的数字是多少运行都不会出错了,一切正常,而且运行效率与前面程序相比大大提高,因为这个程序写文件利用了全缓冲方式。

#4


如果你想深入学习C语言的话,我建议你看看汇编和操作系统、数据结构之类的书。

#5


想深入学习C语言,至少得了解汇编

#6


同上,这么多人都告诉你了。

#7


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

#8


该回复于2011-01-19 17:05:12被版主删除

#9


char writefilezhishu[32]={0};
while(num!=0)
{
  writefilezhishu[--writefilei]=num%10+0x30;
  num/=10;
}   
for(writefilea=0;writefilezhishu[writefilea]==0;writefilea++) ;
这句没有任何作用,因为你前面至少 每个都加了0x30,所以还没进入就退出了。

你那个输入5000以后就出错是,因为5000以内的数超过了32个,你内存访问越界了。

深入学习C语言, 要学好汇编,数据结构,算法,可能以后还要操作系统,计算机组成原理,体系结构等。

#10


该回复于2011-01-20 09:26:19被版主删除

#11


我是觉得楼主的能力已经很强了。。。


双缓冲 在QT里是一种事件处理机制 

#12


该回复于2011-01-20 09:32:44被版主删除

#13


多动手调程序,多搜集资料  适当买些书自学

#14


共同学习~~楼上说的很清楚了

#15


多了解汇编吧

#16


我刚好跟你相反,我只喜欢看书,不喜欢写代码!

#17


编译原理也是非常重要的。特别是运行时环境和代码生成那几章!

#18


送你一句话,看了过后你就知道怎么做了:
程序不是看出来的,是写出来的;思想不是想出来的,是敲出的!
楼主好好琢磨一下。

#19


每日任务…~

#20


楼主的文笔,有平静的力量。怎么就静不下来看书?关于文件的操作我实在看不懂你写,我没觉得那么复杂。你用fopen打开一个流然后又用fclose把流关闭。你说是为了防止重名。可是你怎么判断?你没任何条件就把它关了?以w方式打开流,如果该文件存在则文件长度截为零。打开一个流的时候,fopen函数已经建立了缓冲区还有做了其他杂七杂八的事情。当然你可以用setvbuf建立一个替换缓冲区。为什么你对文件进行一次操作就要关闭一次?最后不操作再关不行?我推荐K&R的那本。只有200多页。C语言教父写的。我听说很好准备去看。我也很迷茫。

#21


关于如何深入学习C语言lz大脑短路 ,不解释,为何会如此复杂,写个素数程序,,,

#22


楼上的问题还真独到。

#23


LZ还没干啥就开始展望未来了,求素数可以用筛法,你还sqrt循环呢,这个刚学C语言的都会。

#24


C语言只是个工具嘛,拿来用的,比如学学SDK编程嘛,去运用C语言写的东西

#25


KISS!
Keep It Sample and Stupid!

#26


纠正上帖
Sample->Simple

#27


lz的文笔很好

#28


zhishu......

#29


爱拉托逊斯筛选法

#30


其实楼主挺强的,而且目标又明确,继续努力下去肯定有收获

#31


lz不错了,我还在看书的阶段,离自己编一个程序还有一大段距离

#32


楼主文笔真好! 关于如何深入学习C语言
不过写个找素数的程序应该不会这么复杂的吧,你可以去谷歌下筛法找素数,进而研究一下算法

#33


应该去做项目提升
游戏 开源项目 等等
对游戏感兴趣吗?联系U箱ksqdq11@163.com

#34


学习一门语言?
看书---写程序---读程序---调试程序----再写程序。。。。

如何深入?
看书:C与指针---C陷阱与缺陷---C专家编程---ISO C标准。
写程序---读程序---调试程序----再写程序

再深入?
修炼内功。
汇编语言,操作系统,数据结构,算法。。。
写程序---读程序---调试程序----再写程序

再再深入?
。。。。。。。。。。。。。。。。。。。。
写程序---读程序---调试程序----再写程序

#35


好长的帖子啊,没看完。。。

#36


怎么才叫深入呢?语言就是语言,语法就摆在那里,再深入也是有限的。

编程编到最后其实就是思想,而不是什么语言。

#37


兴趣--> 相关的书籍->项目->周边的书籍

#38


该回复于2011-02-09 13:25:55被版主删除

#39


我也一直对深入学习摸不到头绪..

#40


素数可以编译的时候直接静态生成然后,筛选,当然这是听老师讲的,没试过

#41


汇编……

#42


我猜拟如果坚持下去,或许有一天会回头跟我们这样的新手说吧,楼主
引用 34 楼 athenacle_ 的回复:
学习一门语言?
看书---写程序---读程序---调试程序----再写程序。。。。

如何深入?
看书:C与指针---C陷阱与缺陷---C专家编程---ISO C标准。
写程序---读程序---调试程序----再写程序

再深入?
修炼内功。
汇编语言,操作系统,数据结构,算法。。。
写程序---读程序---调试程序----再写程序

再再深入?
。。。。。。。。。。。。……

#43


其实很佩服楼主的毅力,我就是有点懒,刚开始还能坚持,现在又放下了,向楼主学习,努力。。。。。

#44


楼主真的很强大,我自学c语言有一个月了,只会一些小程序,其他什么度不会

#45


引用 7 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
这是学习C和其他知识的步骤么  我大白  想自学C的一些基础知识,现在迷茫,不知道如何入门、做什么准备、学习它需要多久   请老师指明  谢谢了

#46


非常不错,值得学习啊

#47


引用 45 楼 guofansen 的回复:
引用 7 楼 zhao4zhong1 的回复:

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……


这是学习C和其他知识的步骤么 我大白 想自学C的一些基础知识,现在迷茫,不知道如何入门、做什么准备、学习它需要多久 请老师指明 谢谢了

下载Win-TC看帮助里面的C基础知识。

#48


引用 34 楼 athenacle_ 的回复:
学习一门语言?
看书---写程序---读程序---调试程序----再写程序。。。。

如何深入?
看书:C与指针---C陷阱与缺陷---C专家编程---ISO C标准。
写程序---读程序---调试程序----再写程序

再深入?
修炼内功。
汇编语言,操作系统,数据结构,算法。。。
写程序---读程序---调试程序----再写程序

再再深入?
。。。。。。。。。。。……
很好了

#49


0.0

#50


要想学好c语言就得计算机运行程序的每一步.你懂得数字电路,计算机组成原理,操作系统(windows,linux),汇编,编译,链接,数据结构,离散数学,线性代数.....必要的话还要学网络,网络安全,密码学......
其实c语言学到后来就是数学了,各种算法
学海无涯,回头是岸......