C语言试题学习考试大全_第1页
C语言试题学习考试大全_第2页
C语言试题学习考试大全_第3页
C语言试题学习考试大全_第4页
C语言试题学习考试大全_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、24位位图格式解析每一行的图素数等于该结构的bcWidth字段。每一行从最左边的图素开始,直到图像的右边。分别对应的B,G,R像素。每个像素占8位, 每列的宽度为bcWidth,必须为4的倍数,不足的用零填充。下面是读取二十四位位图的关键代码:代码1 BITMAPFILEHEADER * pbmfh ;2 BITMAPINFO * pbmi ;3 BYTE * pBits ;4 pbmfh = DibLoadImage (szFileName) ;5 pbmi = (BITMAPINFO *) (pbmfh + 1) ;6 pBits = (BYTE *) pbmfh + pbmfh-bfOf

2、fBits ;7 for( i=0; i 1024; i+)8 9 pPrintBlocki = (char*)malloc(216);10 memset(pPrintBlocki, 0, 216);11 1213 for(h = 0; h bmiHeader.biHeight; h+)14 15 for(w = 0; w bmiHeader.biWidth; w+)16 17 b1 = *pBits; /B18 b2 = *(pBits+1); /G19 b3 = *(pBits+2); /R20 if( (int)b1 != 255 & (int)b2 != 255 & (int)b3 !

3、= 255)21 22 index = w / 8;23 index = 1 (w%8);24 index = pPrintBlockhw / 8 | ( 1 (w%8) );25 pPrintBlockhw / 8 = pPrintBlockhw / 8 | ( 1 bmiHeader.biWidth *3 % 4 != 0)31 32 pBits += ( 4 - pbmi-bmiHeader.biWidth*3 % 4);33 34 c语言初学者环境选择语言初学既要考虑学习的效果,还要考虑今后的使用和发展。所以我推荐几个c语言的开发环境:1、kdevelop是linux下最好的开发环境之

4、一,也是linux下主要的开发软件。有志于做linux开发的可在此环境下学习。学习顺序为:c-c+-数据结构-操作系统原理-数据库(orcale、mysql)-QT(GTK、gomn2、bcb是borlandc+builder非常经典的c&c+开发环境,在vc+和delphi对决江湖时,c+builder是一匹黑马,学习难度小于vc+,但功能基本和vc+齐平,兼有跨平台开发的本事(linux)3、vs2008是微软搞的集成开发环境vb、c#、c+、j#等开发环境功能之强大叹为观止(可惜只能在windows下使用),可以开发窗口程序、网站、移动设备程序包括嵌入程序。以只是建议,仅供参考。C语言入

5、门必备手册这里不是教你什么知识,而是给你澄清一些资料,只给对编程一窍不通的或者刚入门的人看。 如果你尚未学习或者才学习不够一天,一定要看这手册,这份手册已经讲述的知识,我们不会在版面给予回答 此手册我会尽量保持准确,但如有不正确,请指正 我也会不断更新此手册一、什么都不懂Q:什么是C?A: 一门面向过程的计算机语言,发明至今已经差不多有三十年历史,由于它相对其他高级语言高效,运行效率又比较接近低级语言,所以至今仍得到广泛的引用,无论你用windows还是linux,你现在看到东西的底层都是用C写的,而大部分的网络协议都是用C实现的,画面最漂亮的游戏用C实现的,工业控制程序也是用C实现的。C不是

6、万能,也不是垃圾,只是一门某些方面适用,某些方面不适用的语言Q:什么是C+?A:一门面向对象的计算机语言,发明至今已经有二十多年了。由于面向对象编程对程序架构有较好的帮助,因为比较适合构建大型的系统(当然,学术界对此存在争论),但无论如何,C+由于和C一样接近底层,而且又面向对象,所以也得到广泛的使用。C+不是万能,也不是垃圾,只是一门某些方面适用,某些方面不适用的语言,不要向某一个笨蛋一样认为c + 类 = c+ 。Q:TC,VC,BC,BCB是什么?有什么区别?谁好?A:它们都是开发C/C+的开发环境,是软件。它们是不同时期由不同公司发行的软件 Turbo C ,Borland公司在八十年

7、代末期发行的C语言的开发环境 Turbo C+,Borland公司在八十年代末九十年代初发行的C+语言的开发环境 Visual C+,Microsoft公司 在九十年代至今发行的C/C+开发环境 Borland C+,Borland公司 在九十年代中发行的C/C+开发环境 Borlan C+ Builder,Borland公司在九十年代后期至今开发的C/C+开发环境,与其他开发环境不用的是它属于快速应用程序开发(RAD),可以让你不写代码就能建立程序,当然它的运行效率见仁见智 没有什么是万能的,不同场合用不同的东西 而且C/C+还有很多开发环境,譬如gcc, watcom C+, Dev C/

8、C+Q:什么语言/开发环境最好?A:没有最好,只有最适用某方面Q:需要什么基础才能学C/C+A:至少学过幼儿园语文,小学英语,小学数学才能学,所以先确定你拥有小学学历,然后就能学了 至于学习C+前是否需要学C,C+的发明者认为不用,但见仁见智Q:如何更有效的学习C/C+?A:不断的看书+实践,先把书上的练习题做完再说,务必记住不要钻牛角尖,很多初学者经常犯这样的错误,不要盲目的提出问题,现在看来是问题其实在以后的实践和学习中都会慢慢理解的,任何东西都需要一个过程。万万不可浮躁。Q:TC能开发windows软件吗?A:不能,因为不同系统,生成的程序格式不同Q:要多久才能成为高手?A:当你不再问这

9、个问题的时候,总是会有比你技术高的人,也许你在你生活的环境中没有,的确可以说你在这个小范围是高手,但是再在别的地方一定会有比你厉害的人只是你没有接触到而已Q:学C/C+有什么用?A:先想想你为了什么而学,想不到就不要学Q:学完C/C+又能怎样A:没怎样,学是为了使用服务的 只证明你会一门语言,但不等于你会开发软件。就像学外语,为的是跟外国人交际,但如果你不懂交际,几时精通英语,法语,日语,朝鲜语,阿拉伯语,西班牙语还是不会跟人交际 你应该继续学习软件开发的知识,包括数据结构,算法,软件工程等等,还有要提高数学水平,譬如微积分,离散数学,矩阵,概率,统计,数值分析Q:我有很多不懂,怎么办?A:查

10、帮助,搜索引擎。最著名的帮助文档叫MSDN,我们主要使用其光盘发行版,D版可以从电脑城买,正版可以去微软订购,如果没有光盘可以去查询。二、开始学习了Q:我在TC看到缺少cos.obj的提示,为什么?A:路径设置错误,在Options菜单-Directionary,分别TC里面1、设置含有很多.h文件的目录,2、设置含有很多lib文件的目录,3、设置生成可执行文件的目录,4、设置TC本身所在的目录。 记得最后要选Save OptionsQ:include A:Q:全角/半角 A:Q:使用VC看到不能连接_main或_WinMain的提示A:如果你需要用main做主函数,请新建Project-Wi

11、n32 Console Application 如果你需要用WinMain做主函数,请新建Project-Win32 ApplicationQ:使用TC/VC看不到输出,或者一闪而过在 TC,按Alt+F5,或者在程序最后加上system(PAUSE), 或者加上getchar() 在VC,选择Excute执行,或者在程序最后加上system(PAUSE), 或者加上getchar()C语言实现清屏操作子函数及演示程序:#include#include#includevoid goto_xy(int x,int y);void dcls(int x1,int x2,int y1,int y2)

12、;void bcls(int x1,int x2,int y1,int y2);void kcls(int x1,int x2,int y1,int y2);void recls(int x1,int x2,int y1,int y2);void zcls(int x1,int x2,int y1,int y2);void puta(void);/*-演示程序-*/main()puta();getch();dcls(0,4,0,79);getch();puta();getch();bcls(0,25,0,79);getch();puta();getch();zcls(0,25,0,79);ge

13、tch();/*center clear screen(中心清屏)*/void zcls(int x1,int x2,int y1,int y2)int x00,y00,x0,y0,i,d;if(y2-y1)(x2-x1)d=(x2-x1)/2;x0=(x1+x2)/2;y0=y1+d;y00=y2-d;for(i=0;i(d+1);i+)recls(x0-i),(x00+i),(y0-i),(y00+i);delay(10);elsed=(y2-y1)/2;y0=(y1+y2)/2;x0=x1+d;x00=x2-d;for(i=0;id+1;i+)recls(x0-i,x00+i,y0-i,

14、y00+i);delay(10);/* clear rectangle side(矩形边清屏)*/void recls(int x1,int x2,int y1,int y2)int i,j;for(i=y1;iy2;i+)goto_xy(x1,i);putchar( );goto_xy(x2,i);putchar( );delay(10);for(j=x1;jx2;j+)goto_xy(i,y1);putchar( );goto_xy(j,y2);putchar( );delay(10);/*open screen clear(开屏式清屏)*/void kcls(int x1,int x2,

15、int y1,int y2)int t,s,i,j;t=s=(y1+y2)/2;for(;t=y2;t+,s-)for(j=x1;jx2;j+)goto_xy(j,t);putchar( );goto_xy(j,s);putchar( );delay(10);/*close screen clear*闭幕式清屏*/void bcls(int x1,int x2,int y1,int y2)int t,s,j;t=y1;s=y2;for(t=y1;t(y1+y2)/2;t+,s-)for(j=x1;jx1;j-)for(i=y1;iy2;i+)goto_xy(j,i);putchar( );de

16、lay(10);/*设置光标子函数*/void goto_xy(int x,int y)union REGS r;r.h.ah=2;r.h.dl=y;r.h.dh=x;r.h.bh=0;int86(0x10,&r,&r);/*在屏幕上打出一连串的a字母用于演示程序*/void puta(void)int i,j;for(i=0;i24;i+)for(j=0;j79;j+)goto_xy(i,j);printf(a);C语言学习要领1、计算机语言挺枯燥的,如何提起兴趣答:首先要明确学习的目标,没有明确的学习目标就没有学习动力。给自己定一个目标,比如这次一定通过计算机等级考试,或者这个月学习完做个

17、东西出来等等。其次,确定了目标之后,要认真去做,多上机操作实践,遇到不懂的要多跟教师和其他学员交流,千万不能放弃。当自己编的一段小程序运行通过,或攻下一道难题,自己就会获得一种成就感,可能还会很兴奋,也就渐渐有了兴趣。最后,要把所学的知识运用到实际问题当中,这样既可以巩固所学的知识,不至于完学了就忘,还可以根据实际需要拓展知识面。这样良性循环,兴趣也会越来越浓。2、有学员来信问到:我的电脑里安装的TURBO?C(970K)不能正常的编译,现象是:在编译过程中,提示没有错误也没有警告,按任意键返回,可是在电脑上不能生成OBJ文件,有时提示:Unable to open input filecos

18、.obj,我的朋友从他们学校的PC上拷贝回来的程序也出现这个问题?!在他们学校却很正常,这是怎么回事?这个问题一直在困扰我,使我的学习不能进行下去!请帮我解决。谢谢!答:这需要重新设置options-directories中的include目录和lib目录,设为你C的安装目录就可以了。记住要保存哟!3、#includemain()int m=7,n=4;float a=38.4,b=6.4,x;x=m/2+n*a/b+1/2;printf(%fn,x);这个程序的结果是27.为什么我一直算的是28.呢?请指教答:main()int m=7,n=4;float a=38.4,b=6.4,x;x=

19、m/2+n*a/b+1/2;printf(%fn,x);m/2=3;因为m是整形所以结果为整形不是3.5而是3同样1/2不是0.5而是0。要改的话,x=(float)m/2+n*a/b+1.0/2.0;结果为28.00004、有些人说我的程序很难让人看懂,请问如何将程序写得规范、简洁明了答:这是编程中重要的一点,要养成良好的编程习惯。请看一个例题:程序很简单,是用TURBO C编一个时钟程序。具体如下:/*Module:clock.cjust a test of my programming ability*/#includemath.h#includedos.h#includestdio.h

20、#includegraphics.hmain()char s30;int gdriver,gmode;int cosh,sinh,cosm,sinm,coss,sins;struct ;time t;char keydown=0;int x=300,y=160,r=40;clrscr();gdriver=9; gmode=1;initgraph(&gdriver,&gmode,a:);/*需要说明的是,第三个参数a:是egavga.bgi这个文件的路径*/* install the graphic device.the third parameter is the path of the dr

21、iver*/setbkcolor(0);setcolor(WHITE);while(1)circle(x,y,r);/*paintthecircle*/line(x,y+r-10,x,y+r-12);line(x+r-4,y,x+r,y);line(x-r,y,x-r+4,y);line(x,y-r+10,x,y-r+10+2); /* draw the fout scales */gettime(&t);sprintf(s,The current time is %2d:%02d:%02dn,t.ti_hour,t.ti_min,t.ti_sec,t);outtextxy(0,0,s); /

22、* out put the current time */outtextxy(0,10,This clock is written by lijun); /*?show the auther */coss=(int)(r-10)*cos(t.ti_sec*3.14f/30-3.14f/2)+x);sins=(int)(r-10)*sin(t.ti_sec*3.14f/30-3.14f/2)+y);cosm=(int)(r-19)*cos(t.ti_min*3.14f/30-3.14f/2)+x);sinm=(int)(r-19)*sin(t.ti_min*3.14f/30-3.14f/2)+y

23、);cosh=(int)(r-28)*cos(t.ti_hour+(float)(t.ti_min)/60)*3.14f/6-3.14f/2)+x);sinh=(int)(r-28)*sin(t.ti_hour+(float)(t.ti_min)/60)*3.14f/6-3.14f/2)+y);/* calculate the position of the three points */setcolor(14);line(x,y,coss,sins);setcolor(13);line(x,y,cosm,sinm);setcolor(10);line(x,y,cosh,sinh);setco

24、lor(15);/* draw the points */sleep(1);clrscr(); keydown=kbhit();/* check whether key down */if(keydown)closegraph();/* close graphic device */exit(0);printf的实现原理在C/C+中,对函数参数的扫描是从后向前的。C/C+的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机的内存中,数据有2块,一块是堆,一块是栈(函数参数及局部变量在这里),而栈是从内存的高地址向低地址生长的

25、,控制生长的就是堆栈指针了,最先压入的参数是在最上面,就是说在所有参数的最后面,最后压入的参数在最下面,结构上看起来是第一个,所以最后压入的参数总能被函数找到,因为它就在堆栈指针的上方,printf第一个被找到的参数就是那个字符指针,就是双引号括起来的那一部分,函数通过判断字符串里控制参数的个数来判断参数个数及数据类型,通过这些就可算出个数据需要的堆栈指针的偏移量了,下面给出printf(%d,%d,a,b);(其中a,b都是int型的)汇编代码.section .data string out=“%d,%d”push b;push a;push $outcall printf看到没参数是最后

26、的先压如,最先的后压入,参数控制的那个字符串常量最后压入,所以这个常量总是能被找到。名师谈C语言的重要性和如何学习C语言很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序,这简直就是天方夜谭。为什么C语言如此重要呢?第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,

27、所以,如果你想在程序设计方面有所建树,就必须去学它。第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。第三:很多新型的语言都是衍生自C语言,C+,Java,C#,J#,perl.哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要

28、掌握好C语言。那么究竟怎样学习C语言呢?1:工欲善其事,必先利其器这里介绍几个学习C语言必备的东东:一个开发环境,例如turbo C2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C+,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。一本学习教程,现在C语言教材多如牛毛,但推荐大家使用C语言程序设计谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。除此以外,现在有很多辅助学习的软件,毕竟现在是W

29、indow时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。2:葵花宝典学习计算机语言最好的方法是什么?答曰:读程序。没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没

30、有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。3:登峰造极写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。是不是写出底层程序就是程序设

31、计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题

32、的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的数据结构清华大学出版社,希望每一个想成为程序设计高手的人研读此书。图形模式下的汉字显示#include void main()printf(我正在学习语言!);在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如的HZK16。汉字显示的第一步是打开字库文件。函

33、数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path)return (handle=open(Hz16Path,O_RDONLY|O_BINARY); 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。函数: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int x, int y,int z,int color,char *p)unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/int rec,i1,i2,i3; /*z:space between;*/long l; /*color:txt color*/char by32; /*p:HZ str*/if( handle0xa1)if(f=0)c1=(i-0xa1)&0x07f;f=1;elsec2=(i-0xa1)&0x07f;f=0;rec=c1*94+c2;l=rec*32L;l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论