当前位置:文档之家› C语言试题、学习、考试大全2

C语言试题、学习、考试大全2

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->bfOffBits ;

7 for( i=0; i < 1024; i++)

8 {

9 pPrintBlock[i] = (char*)malloc(216);

10 memset(pPrintBlock[i], 0, 216);

11 }

12

13 for(h = 0; h < pbmi->bmiHeader.biHeight; h++)

14 {

15 for(w = 0; w < pbmi->bmiHeader.biWidth; w++)

16 {

17 b1 = *pBits; //B

18 b2 = *(pBits+1); //G

19 b3 = *(pBits+2); //R

20 if( (int)b1 != 255 && (int)b2 != 255 && (int)b3 != 255)

21 {

22 index = w / 8;

23 index = 1 << (w%8);

24 index = pPrintBlock[h][w / 8] | ( 1 << (w%8) );

25 pPrintBlock[h][w / 8] = pPrintBlock[h][w / 8] | ( 1 << (w%8) );

26 }

27 pBits += 3;

28

29 }

30 if(pbmi->bmiHeader.biWidth *3 % 4 != 0)

31 {

32 pBits += ( 4 - pbmi->bmiHeader.biWidth*3 % 4);

33 }

34 }

c语言初学者环境选择

语言初学既要考虑学习的效果,还要考虑今后的使用和发展。所以我推荐几个c语言的开发环境:

1、kdevelop是linux下最好的开发环境之一,也是linux下主要的开发软件。有志于做linux开发的可在此环境下学习。学习顺序为:c->c++->数据结构->操作系统原理->数据库(orcale、mysql)->QT(GTK、gomn

2、bcb是borland c++ builder非常经典的c&c++开发环境,在vc++ 和delphi对决江湖时,c++ builder是一匹黑马,学习难度小于vc++,但功能基本和vc++齐平,兼有跨平台开发的本事(linux)

3、vs2008是微软搞的集成开发环境vb、c#、c++、j#等开发环境功能之强大叹为观止(可惜只能在windows下使用),可以开发窗口程序、网站、移动设备程序包括嵌入程序。

以只是建议,仅供参考。

C语言入门必备手册

这里不是教你什么知识,而是给你澄清一些资料,只给对编程一窍不通的或者刚入门的人看。如果你尚未学习或者才学习不够一天,一定要看这手册,这份手册已经讲述的知识,我们不会在版面给予回答此手册我会尽量保持准确,但如有不正确,请指正我也会不断更新此手册

一、什么都不懂

Q:什么是C?

A:一门面向过程的计算机语言,发明至今已经差不多有三十年历史,由于它相对其他高级语言高效,运行效率又比较接近低级语言,所以至今仍得到广泛的引用,无论你用windows还是linux,你现在看到东西的底层都是用C写的,而大部分的网络协议都是用C 实现的,画面最漂亮的游戏用C实现的,工业控制程序也是用C实现的。C不是万能,也不是垃圾,只是一门某些方面适用,某些方面不适用的语言

Q:什么是C++?

A:一门面向对象的计算机语言,发明至今已经有二十多年了。由于面向对象编程对程序架构有较好的帮助,因为比较适合构建大型的系统(当然,学术界对此存在争论),但无论如何,C++由于和C一样接近底层,而且又面向对象,所以也得到广泛的使用。C++不是万能,也不是垃圾,只是一门某些方面适用,某些方面不适用的语言,不要向某一个笨蛋一样认为c + 类== c++ 。

Q:TC,VC,BC,BCB是什么?有什么区别?谁好?

A:它们都是开发C/C++的开发环境,是软件。它们是不同时期由不同公司发行的软件Turbo C ,Borland公司在八十年代末期发行的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/C++

Q:什么语言/开发环境最好?

A:没有最好,只有最适用某方面

Q:需要什么基础才能学C/C++

A:至少学过幼儿园语文,小学英语,小学数学才能学,所以先确定你拥有小学学历,然后就能学了至于学习C++前是否需要学C,C++的发明者认为不用,但见仁见智Q:如何更有效的学习C/C++?

A:不断的看书+实践,先把书上的练习题做完再说,务必记住不要钻牛角尖,很多初学者经常犯这样的错误,不要盲目的提出问题,现在看来是问题其实在以后的实践和学习中都会慢慢理解的,任何东西都需要一个过程。万万不可浮躁。

Q:TC能开发windows软件吗?

A:不能,因为不同系统,生成的程序格式不同

Q:要多久才能成为高手?

A:当你不再问这个问题的时候,总是会有比你技术高的人,也许你在你生活的环境中没有,的确可以说你在这个小范围是高手,但是再在别的地方一定会有比你厉害的人只是你没有接触到而已

Q:学C/C++有什么用?

A:先想想你为了什么而学,想不到就不要学

Q:学完C/C++又能怎样

A:没怎样,学是为了使用服务的只证明你会一门语言,但不等于你会开发软件。就像学外语,为的是跟外国人交际,但如果你不懂交际,几时精通英语,法语,日语,朝鲜语,阿拉伯语,西班牙语……还是不会跟人交际你应该继续学习软件开发的知识,包括数据结构,算法,软件工程等等,还有要提高数学水平,譬如微积分,离散数学,矩阵,概率,统计,数值分析

Q:我有很多不懂,怎么办?

A:查帮助,搜索引擎。最著名的帮助文档叫MSDN,我们主要使用其光盘发行版,D版可以从电脑城买,正版可以去微软订购,如果没有光盘可以去https://www.doczj.com/doc/691947869.html,查询。

二、开始学习了

Q:我在TC看到缺少cos.obj的提示,为什么?

A:路径设置错误,在Options菜单-〉Directionary,分别TC里面1、设置含有很多.h文件的目录,2、设置含有很多lib文件的目录,3、设置生成可执行文件的目录,4、设置TC 本身所在的目录。记得最后要选Save Options

Q:include A:

Q:全角/半角A:

Q:使用VC看到不能连接_main或_WinMain的提示

A:如果你需要用main做主函数,请新建Project-〉Win32 Console Application 如果你需要用WinMain做主函数,请新建Project-〉Win32 Application

Q:使用TC/VC看不到输出,或者一闪而过

在TC,按Alt+F5,或者在程序最后加上system("PAUSE"), 或者加上getchar() 在VC,选择Excute执行,或者在程序最后加上system("PAUSE"), 或者加上getchar()

C语言实现清屏操作

子函数及演示程序:

#include

#include

#include

void goto_xy(int x,int y);

void dcls(int x1,int x2,int y1,int y2);

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);

getch();

}

/*********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);

}

else{

d=(y2-y1)/2;

y0=(y1+y2)/2;

x0=x1+d;

x00=x2-d;

for(i=0;i

recls(x0-i,x00+i,y0-i,y00+i);

delay(10);

}

}

/************* clear rectangle side(矩形边清屏)***********************/ void recls(int x1,int x2,int y1,int y2)

{

int i,j;

for(i=y1;i

goto_xy(x1,i);

putchar(\' \');

goto_xy(x2,i);

putchar(\' \');

delay(10);

}

for(j=x1;j

goto_xy(i,y1);

putchar(\' \');

goto_xy(j,y2);

putchar(\' \');

delay(10);

}

}

/******************open screen clear(开屏式清屏)*********************/ void kcls(int x1,int x2,int y1,int y2)

{

int t,s,i,j;

t=s=(y1+y2)/2;

for(;t<=y2;t++,s--)

for(j=x1;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;j

goto_xy(j,t);

putchar(\' \');

goto_xy(j,s);

putchar(\' \');

delay(10);

}

}

/******************bottom screen clear(自下清屏)********************/ void dcls(int x1,int x2,int y1,int y2)

{

int t,s,j,i;

t=s=(y1+y2)/2;

for(j=x2;j>x1;j--)

for(i=y1;i

goto_xy(j,i);

putchar(\' \');

delay(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;i<24;i++){

for(j=0;j<79;j++){

goto_xy(i,j);

printf(\"a\");

}

}

}

C语言学习要领

1、计算机语言挺枯燥的,如何提起兴趣

答:首先要明确学习的目标,没有明确的学习目标就没有学习动力。给自己定一个目标,比如这次一定通过计算机等级考试,或者这个月学习完做个东西出来等等。其次,确定了目标之后,要认真去做,多上机操作实践,遇到不懂的要多跟教师和其他学员交流,千万不能放弃。当自己编的一段小程序运行通过,或攻下一道难题,自己就会获得一种成就感,可能还会很兴奋,也就渐渐有了兴趣。最后,要把所学的知识运用到实际问题当中,这样既可以巩固所学的知识,不至于完学了就忘,还可以根据实际需要拓展知识面。这样良性循环,兴趣也会越来越浓。

2、有学员来信问到:我的电脑里安装的TURBO?C(970K)不能正常的编译,现象是:在编译过程中,提示没有错误也没有警告,按任意键返回,可是在电脑上不能生成"OBJ"文件,有时提示:Unable to open input file’cos.obj’,我的朋友从他们学校的PC上拷贝回来的程序也出现这个问题?!在他们学校却很正常,这是怎么回事?这个问题一直在困扰我,使我的学习不能进行下去!请帮我解决。谢谢!

答:这需要重新设置options--directories中的include目录和lib目录,设为你C的安装目录就可以了。记住要保存哟!

3、#include

main()

{int m=7,n=4;

float a=38.4,b=6.4,x;

x=m/2+n*a/b+1/2;

printf("%f\n",x);

}

这个程序的结果是27.000000

为什么我一直算的是28.000000呢?请指教

答:main()

{

int m=7,n=4;

float a=38.4,b=6.4,x;

x=m/2+n*a/b+1/2;

printf("%f\n",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.0000

4、有些人说我的程序很难让人看懂,请问如何将程序写得规范、简洁明了

答:这是编程中重要的一点,要养成良好的编程习惯。请看一个例题:程序很简单,是用TURBO C编一个时钟程序。具体如下:

/****************************************************

Module:clock.c

just a test of my programming ability

*****************************************************/

#include"math.h"

#include"dos.h"

#include"stdio.h"

#include"graphics.h"

main()

{

char s[30];

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 driver*/

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:%02d\n",t.ti_hour,t.ti_min,t.ti_sec,t);

outtextxy(0,0,s); /* 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);

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);

setcolor(15);

/* draw the points */

sleep(1);

clrscr();&nb

sp;

keydown=kbhit();/* check whether key down */

if(keydown)

{

closegraph();/* close graphic device */

exit(0);

}

}

}

printf的实现原理

在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机的内存中,数据有2块,一块是堆,一块是栈(函数参数及局部变量在这里),而栈是从内存的高地址向低地址生长的,控制生长的就是堆栈指针了,最先压入的参数是在最上面,就是说在所有参数的最后面,最后压入的参数在最下面,结构上看起来是第一个,所以最后压入的参数总能被函数找到,因为它就在堆栈指针的上方,printf第一个被找到的参数就是那个字符指针,就是双引号括起来的那一部分,函数通过判断字符串里控制参数的个数来判断参数个数及数据类型,通过这些就可算出个数据需要的堆栈指针的偏移量了,下面给出printf("%d,%d",a,b);(其中a,b都是int型的)汇编代码

.section .data string out=“%d,%d”

push b;

push a;

push $out

call printf

看到没参数是最后的先压如,最先的后压入,参数控制的那个字符串常量最后压入,所以这个常量总是能被找到。

名师谈C语言的重要性和如何学习C语言

很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序,这简直就是天方夜谭。为什么C语言如此重要呢?

第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。

第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。

第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C 语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。

那么究竟怎样学习C语言呢?

1:工欲善其事,必先利其器

这里介绍几个学习C语言必备的东东:

一个开发环境,例如turbo C2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。

一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编第二版清华大学出版社,此书编写的很适合初学者,并且内容也很精到。

除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语

言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。

2:葵花宝典

学习计算机语言最好的方法是什么?答曰:读程序。

没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。

3:登峰造极

写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。

是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的人研读此书。

图形模式下的汉字显示

#include void main(){printf(\"我正在学习C语言!\");}

在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。

汉字显示的第一步是打开字库文件。

函数: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 by[32]; /*p:HZ str*/

if( handle<0 ) return -1; while((i=*p++)!=0){

if(i>0xa1)

if(f==0){

c1=(i-0xa1)&0x07f;

f=1;

}

else{

c2=(i-0xa1)&0x07f;

f=0;

rec=c1*94+c2;

l=rec*32L;

lseek(handle,l,SEEK_SET);

read(handle,by,32);

for(i1=0;i1<16;i1++)

for(i2=0;i2<2;i2++)

for(i3=0;i3<8;i3++)

if(GetBit(by[i1*2+i2],7-i3))

putpixel(x+i2*8+i3,y+i1,color);

x=x+z+16;

}

}

return(x);

}

函数GetBit定义如下:

函数:int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。

int GetBit(unsigned char c,int n)

{

return((c>>n)&1);

}

汉字显示结束,应该关闭字库文件。

void CloseHz(void)

{

close( handle );

}

#include \"\\Caic\\Include\\Hz.h\"

#include

#include const char* Hz16Path = \"\\\\UCDOS\\\\Hzk16.\";

const char* HzStr = \"苦丁香C语言辅助学习软件\";

void main(){

int gr=DETECT,gm;

initgraph(&gr,&gm,\"\\\\Caic\\\\Bgi\");

OpenHz( Hz16Path );

Wrt16Hz(20,20,4,RED,HzStr);

CloseHz();

getch();

closegraph();

}显示24点阵及放大汉字

下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。

函数:int WrtHz24(int x,int y,int z,int color,int m,\\int n,char *p); 功能:显示24点阵及放大汉字。

int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)

{

unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/

int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/

long l; /*color:汉字颜色*/

char by[72]; /*m: x 方向的放大倍数*/

/*n: y 方向的放大倍数*/

if( handle<0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){

if(i>0xa1)

if(f==0){

c1=(i-0xa1)&0x7f;

f=1;

}

else{

c2=(i-0xa1)&0x7f;

f=0;

rec=(c1-15)*94+c2;

l=rec*72L;

lseek(handle,l,SEEK_SET);

read(handle,by,72);

for(i1=0;i1<24*m;i1=i1+m)

for(i4=0;i4

for(i2=0;i2<=2;i2++)

for(i3=0;i3<8;i3++)

if(GetBit(by[i1/m*3+i2],7-i3))

for(i5=0;i5

putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);

x=x+24*m+z;

}

}

return(x);

} 使用Wrt24Hz的例子:#include \"\\Caic\\Include\\Hz.h\"

#include

#include const char* Hz24Path = \"C:\\\\Ucdos\\\\fnt\\\\hzk24s.\"

const char* HzStr = \"苦丁香C语言辅助学习软件\";

void main(){

int gr=DETECT,gm;

initgraph(&gr,gm,\"\\\\Caic\\\\Bgi\");

OpenHz( Hz24Path );

Wrt24Hz(20,20, /*先是在(x,y)*/

4, /*汉字间的空格为4*/

RED, /*用红色显示*/

2, /*x 方向放大2倍*/

4, /*y 方向放大4倍*/

HzStr); /*显示字符串*/

CloseHz();

getch();

closegraph();

}

新手(必看)怎样学习C语言

1、多看代码

在有一定基础以后一定要多看别人的代码。注意代码中的算法和数据结构。毕竟学C 之后的关口就是算法和数据结构。提到数据结构,指针是其中重要的一环,绝大多数的数据结构是建立在指针之上的,如链表、队列、树、图等等,所以只有学好指针才能真正学好C。别的方面也要关注一下,诸如变量的命名、库函数的用法等等。有些库函数是经常用到的。对于这些函数的用法就要牢牢记住。

2、要自己动手

编程序是个实干的活,光说不练不行。刚开始学的时候可以多练习书上的习题。对于自己不明白的地方,自己编个小程序实验一下是最好的方法,能给自己留下深刻的印象。自己动手的过程中要不断纠正自己不好的编程习惯和认识错误。有一定的基础以后可以尝试编一点小游戏,文曲星之类的电子词典上小游戏很多,照着编作为练习。基础很扎实的时候,可以编一些关于数据结构方面的东西,诸如最经典的学生管理系统。之后.....学汇编、硬件知识。

3、选择一个好的编译器

英文版Turbo C v2.0没话说,最经典的C编译器,其次推荐一个win-tc 1.91,支持windows

下的编译器。

4、关于养成良好的编程习惯

基本上每本C教材上都要提到。作为新手这条一定要时时遵守。具体方面:

(1)在比较复杂的代码后面要有注释。如果光溜溜一堆代码,别人就不可能看懂你的代码,而且也不利于查找错误。除非你一直编东西给自己看。能在代码里说明白的就一定要在代码里体现。比如变量名、函数名,在命名的时候尽量说明是干什么用的。

(2)注意语句的嵌套不能过长,一般来说,一段代码里Tab要少于8个。简单说就是语句最多8个嵌套。对于新手来说,这个标准还要下降。有一个好习惯是,把主函数尽量写简短。经常看到别人的代码是主函数只有几行,几个函数调用,而定义全在主函数外部。这样一是减少了主函数内部的嵌套,二是比较精简,容易读懂。

(3)注意语句的选择。并不是分支语句就用if循环就用while、for。在适当的情况下switch和do while语句也是要用的。在某些时候,switch语句比if语句更加精练明了,而do while比while少一个循环。

用C语言实现程序的多态性

前言:关于多态,关于C多态(polymorphism) 一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。然而在人们的直观感觉中,多态的含义大约等同于“同一个方法对于不同类型的输入参数均能做出正确的处理过程,并给出人们所期望获得的结果”,也许这正体现了人们对于多态性所能达到的效果所寄予的期望:使程序能够做到越来越智能化,越来越易于使用,越来越能够使设计者透过形形色色的表象看到代码所要触及到的问题本质。

作为读者的你或许对于面向对象编程已有着精深的见解,或许对于多态的方便与神奇你也有了深入的认识。这时候你讶异的开始质疑了:“多态,那是面向对象编程才有的技术,C 语言是面向过程的啊!”而我想说的是,C 语言作为一种编程语言,也许并不是为了面向对象编程而设计,但这并不意味着它不能实现面向对象编程所能实现的功能,就比如说,多态性。

在本文中我们使用一个简单的单链表作为例子,展示C 语言是如何体现多态性的。

结构体:不得不说的故事

许多从写C 代码开始,逐渐走向C++ 的程序员都知道,其实C++ 里面的class,其前身正是C 语言中的structure。很多基于 C 语言背景介绍C++ 的书籍,在介绍到class 这一章的时候都会向读者清晰地展示,一个 C 语言里的structure 是怎样逐渐变成一个典型的C++ class 的,甚至最后得出结论:“structure 就是一个所有成员都公有的类”,当然了,class 还是class,不能简单的把它看做一个复杂化了的structure 而已。

下面我们来看看在C 语言中定义一个简单的存储整型数据的单链表节点是怎么做的,当然是用结构体。大部分人会像我一样,在linkList.h 文件里定义:

typedef struct Node*linkList;

struct Node//链表节点

{

int data;//存储的整型数据

linkList next;//指向下一个链表节点

};

链表有了,下面就是你想要实现的一些链表的功能,当然是定义成函数。我们只举几个常用功能:

linkList initialLinklist();//初始化链表

link newLinkList(int data);//建立新节点

void insertFirst(linkList h,int data);//在已有链表的表头进行插入节点操作

void linkListOutput(linkList h);//输出链表中数据到控制台

这些都是再自然不过的 C 语言的编程过程,然后我们就可以在linkList.c 文件中实现上述两个函数,继而在main.c 中调用它们了。

然而上面我们定义的链表还只能对整型数据进行操作。如果下次你要用到一个存储字符串类型的链表,就只好把上面的过程重新来过。也许你觉得这个在原有代码基础上做略微修改的过程并不复杂,可是也许我们会不断的增加对于链表这个数据结构的操作,而需要用链表来存储的数据类型也越来越多,这些都意味着海量的代码和繁琐的后期维护工作。当你有了上百个存储不同数据类型的链表结构,每当你要增加一个操作,或者修改某个操作的传入参数,工作量会变大到像一场灾难。

但是我们可以改造上述代码,让它能够处理你所想要让它处理的任何数据类型:实行,字符型,乃至任何你自己定义的structure 类型。

Void*:万能的指针“挂钩”

几乎所有讲授 C 语言课程的老师都会告诉你:“指针是整个 C 语言的精髓所在。”而你也一直敬畏着指针,又爱又恨地使用着它。许多教材都告诉你,int * 叫做指向整型的指针,而char * 是指向字符型的指针,等等不一而足。然而这里有一个另类的指针家族成员——void *。不要按照通常的命名方式叫它做指向void 类型的指针,它的正式的名字叫做:可以指向任意类型的指针。你一定注意到了“任意类型”这四个字,没错,实现多态,我们靠的就是它。

下面来改造我们的链表代码,在linkList.h 里,如下:

typedef struct Node*linkList;

struct Node//链表节点

{

void*data;//存储的数据指针

linkList next;//指向下一个链表节点

};

linkList initialLinklist();//初始化链表

link newLinkList(void*data);//建立新节点

void insertFirst(linkList h,void*data);//在已有链表的表头进行插入节点操作

void linkListOutput(linkList h);//输出链表中数据到控制台

我们来看看现在这个链表和刚才那个只能存储整型数据的链表的区别。

当你把Node 结构体里面的成员定义为一个整型数据,就好像把这个链表节点打造成了一个大小形状固定的盒子,你定义一个链表节点,程序进行编译的时候编译器就为你打造一个这样的盒子:装一个int 类型的数据,然后装一个linkList 类型的指针。如果你想强行在这个盒子里装别的东西,编译器会告诉你,对不起,盒子的大小形状并不合适。所以你必须为了装各种各样类型的数据打造出不同的生产盒子的流水线,想要装哪种类型数据的盒子,就开启对应的流水线来生产。

但是当你把结构体成员定义为void *,一切都变得不同了。这时的链表节点不再像个大小形状固定的盒子,而更像一个挂钩,它可以挂上一个任意类型的数据。不管你需要存储什么类型的数据,你只要传递一个指针,把它存储到Node 节点中去,就相当于把这个数据“挂”了上去,无论何时你都可以根据指针找到它。这时的链表仿佛变成了一排粘贴在墙上的衣帽钩,你可以挂一排大衣,可以挂一排帽子,可以挂一排围巾,甚至,你可以并排挂一件大衣一顶帽子一条围巾在墙上。void * 初露狰狞,多态离C 语言并不遥远。

实现:你的多态你做主

当你真正开始着手做这个工作的时候,你会发现把数据放入链表中的操作和普通的存放int 类型的链表的实现并没有什么大的区别,很方便。但是当你要把已经存进去的数据读取出来的时候,就有一点麻烦了。对于void * 类型的指针,编译器只知道它里面存储了一个地址,但是关于这个地址里的数据类型,编译器是没有任何概念的。毕竟我们不能指望编译器什么都知道,什么都能替你做好,所以存进去的数据的类型,作为程序员的我们必须清楚的知道,并且在取出这个数据的时候,用这一类型的指针来对void * 做强制类型转换。

为了方便的做到这一点,我采取的方法是在Node 结构体中增加一个标识数据类型的域,并用一个枚举类型来存放这些数据类型。这时的linkList.h 如下所示:#ifndef LINKLIST_H

#define LINKLIST_H

typedef struct Node*linkList;

enum dataType

{

INT,

DOUBLE,

CHAR,

STRING

};

struct Node//链表节点

{

void*data;//存储的数据指针

int dataType;//存储数据类型

linkList next;//指向下一个链表节点

};

linkList initialLinklist();//初始化链表

linkList newLinkList(void*data,int dataType);//建立新节点

void insertFirst(linkList h,void*data,int dataType);//在已有链表的表头

进行插入节点操作

void linkListOutput(linkList h);//输出链表中数据到控制台

#endif

初始化链表,代码如下:

linkList initialLinklist()

{

linkList link=(linkList*)malloc(sizeof(*link));

link->data=NULL;

link->dataType=-1;

link->next=NULL;

return link;

}

建立新节点,代码如下:

linkList newLinkList(void*data,int dataType)

{

linkList link=(linkList*)malloc(sizeof(*link));

link->data=data;

link->dataType=dataType;

link->next=NULL;

return link;

}

在已有链表的表头进行插入节点操作,代码如下:

void insertFirst(linkList h,void*data,int dataType)

{

linkList l=newLinkList(data,dataType);

l->next=h->next;

h->next=l;

}

输出链表中数据到控制台,代码如下:

void linkListOutput(linkList h)

{

linkList p=h;

p=p->next;

while(p!=NULL)

{

switch(p->dataType)

{

case0:

{

printf("%4d",*(int*)(p->data));

break;

}

case1:

{

printf("%4f",*(double*)(p->data));

break;

}

case2:

{

printf("%4c",*(char*)(p->data));

break;

}

case3:

{

printf("%s",(char*)(p->data));

break;

}

}

p=p->next;

}

printf("\n");

}

小结

通过上面这个链表的小例子,大家可能已经看到了 C 语言的灵活性。这段代码虽然短并且功能简单,但是已经实现了多态性。这篇文章的本意并不在于想要告诉大家用C 实现多态的方法,而多态的含义也无疑是更加广泛的。这篇文章的初衷其实是基于这样一点认识:面向对象是一种程序设计思想,而 C 语言则是一种编程语言。也许它并不是专门为了面向对象编程而设计,但是这绝不意味着它不能实现面向对象的程序设计。当然以上所展示的这几个操作,如果是用别的编程语言,可能只要寥寥几行就可以完成,但是 C 语言想告诉我们的是:也许我不擅长,但是并不意味着我做不到。

指针运算终于明白了

struct Test

{

int Num;

char *pcName;

short sDate;

char cha[2];

short sBa[4];

}*p;

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目 1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4)如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 .写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1)标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3)懂得在宏中小心地把参数用括号括起来 4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b); 3.预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,

c语言试卷第二套

以下叙述中正确的是(D)。 A.C语言中的函数不可以单独进行编译 B.C语言的源程序不必通过编译就可以直接运行 C.C源程序经编译形成的二进制代码可以直接运行 D.C语言中的每条可执行语句最终都将被转换成二进制的机器指令 若有说明语句:char c='\72';则变量c(D)。 A.说明不合法,c的值不确定 B.包含2个字符 C.包含3个字符 D.包含1个字符 定义字符变量c1的值是'A',c2的值是'D'. 执行语句printf("%d,%d",c1,c2-2);后,输出结果是(A)。 A.65,66 B.65,68 C.A,68 D.A,B 若希望当A的值为奇数时,表达式的值为"真",A的值为偶数时,表达式的值为"假",则以下不能满足要求的表达式是(D)。 A.A%2==1 B.A%2 C.!(A%2==0) D.!(A%2) 为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定: else子句总是与(A)配对。 A.其之前最近的if B.其之后最近的if C.同一行上的if D.缩排位置相同的if 下面程序段运行的结果是(A). x=-1; do{ x=x*x; }while (!x); A.循环执行一次 B.有语法错误 C.死循环 D.循环执行两次 以下正确的描述是(A). A.只能在循环体内和switch语句内使用break语句 B.continue语句的作用是终止整个循环的执行 C.从多层嵌套的外层循环中退出时,只能使用goto语句

D.在循环体内使用break和continue语句的作用相同 以下不能正确定义二维数组的选项是(A)。 A.int a[2][]={{1,2},{3,4}}; B.int a[2][2]={{1},2,3}; C.int a[2][2]={{1},{2}}; D.int a[][2]={1,2,3,4}; char a[10];不能将字符串"abc"存储在数组中的是(B)。 A.int i;for(i=0;i<3;i++)a[i]=i+97;a[i]=0; B.a="abc"; C.strcpy(a,"abc"); D.a[0]=0;strcat(a,"abc"); 在C语言中,引用数组元素时,其数组下标的数据类型允许是(B)。 A.整型常量 B.整型常量或整型表达式 C.整型表达式 D.任何类型的表达式 在定义全局变量和局部静态变量的同时赋值,变量的初始化在(C)时确定的. A.运行 B.编辑 C.编译 D.调试 以下不正确的说法是:C语言规定(C)。 A.实参可以是常量,变量或表达式 B.实参可以为任何类型 C.形参可以是常量,变量或表达式 D.形参应与其对应的实参类型一致 C语言程序中必须有的函数是(B)。 A.#include "stdio.h" B.main C.printf D.scanf 在"文件包含"的预处理中,被包含的文件应是(A). A.文本文件 B.可执行文件 C.目标文件 D.二进制文件 若有说明:int *p,m=5,n;以下正确的程序段是(D)。 A.scanf("%d",&n);*p=n; B.p=&n;scanf("%d",*p)

大学C语言考试试题

C语言模拟试题 一、判断 1、关系运算符<= =与= =的优先级相同。(N ) 2、C语言的函数可以嵌套定义。(N ) 3、若有定义和语句:int a;char c;float f;scanf(“%d,%c,%f”,&a,&c,&f);若通过键盘输入:10,A,12.5, 则a=10,c=?A?,f=12.5.( Y ) 4、变量根据其作用域的范围可以分作局部变量和全局变量。( Y ) 5、#define和printf都不是C语句。( Y ) 6、Int I,*p=&I;是正确的C说明。( Y ) 7、结构体类型只有一种。( N ) 8、在Turbo C中,整形数据在内存中占2个字节。( N ) 9、一个include命令可以指定多个被包含的文件。( N ) 10、有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是*(p+8).( Y ) 二、选择 2、C语言中,char类型数据占(A) A、1个字节 B、2个字节 C、4个字节 D、8个字节 3、已知x=43,ch=?A?,y=o;则表达式(x>=y&&ch1;i--) for(j=1;j

大学C语言考试试题及答案

精选考试类文档,如果您需要使用本文档,请点击下载! 祝同学们考得一个好成绩,心想事成,万事如意! 大学C语言考试试题及答案 姓名成绩 温馨提示:同学们,经过培训学习,你一定积累了很多知识,现在请认真、仔细地完成这张试题吧。加油! 一单项选择题 1. 在C语言中,以 D 作为字符串结束标志 A)’\n’ B)’ ’ C) ’0’ D)’\0’ 2.下列数据中属于“字符串常量”的是( A )。 A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串 在C语言中,用单引号标识字符;用双引号标识字符串

选项B,C,分别用{}和’’标识字符串 选项D,标识字符。 3、以下说法中正确的是( C )。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是( B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C )。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是( B )。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是( C )。 A) %x B) a+b C) a123 D) 123 8、下列四组字符串中都可以用作C语言程序中的标识符的是( A )。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D )。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是 C 。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

c语言笔试题(答案)(精心整理)

笔试题 一、填空题(每个空4分,共28分) 1)struct tagABC { char name[10]; char sex; long sno; float score[4]; }*pAbc;(四字节对齐) pAbc=NULL; 那么,执行pAbc+=2;之后pAbc的值为(64 ) 2)如下代码,最终value的值是(8) int *p1,*p2; int value; p1=(int*)0×400; p2=(int*)0×408; value = p2-p1; 3)如下代码,printf的结果为(2) #include〈stdio.h〉 #include〈string.h〉 void main(void) { char acNew[20]= “\\0\0”; printf(“%d\n”,strlen(acNew)); } 4) 有如下程序段,运行该程序的输出结果是(33) main () { int y=3,x=3,z=1; printf(“%d%d\n”,(++x,y++),z+2); } 5)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后,n的值为(2)6)struct tagAAA { Unsigned char ucId:1; Unsigned char ucPara0:2; Unsigned char ucState:6; Unsigned char ucTail:4; Unsigned char ucAvail; Unsigned char unTail2:4; Unsigned long ulData; }AAA_S 问:AAA_S在字节对齐分别为1,4情况下,占用的空间大小分别是多少?( 9)(12 )

上海理工大学 C语言 第二套试题

注意: 1. 本练习时间为1小时,如有多余时间请完成实验5 2. 请单号的机器完成A 卷测试题,双号机器完成B 卷测试题 3. 以自己学号为文件夹名,并上传1.cpp,2.cpp,3.cpp 3个源代码文件 A 卷测试题目(机器号为单号学生完成) 1. 输入两个值分别为a,b,请输出ab b 42 的值, 程序保存为1.cpp. 2. 编写程序,判断输入的两个小数是否相互等, 程序保存为2.cpp. 3.编写程序, [问题的描述] 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现有100元钱要买100只鸡,列出所有可能的购鸡方案。 程序保存为3.cpp. B 卷测试题目(机器号为双号学生完成) 1. 编写程序 [问题的描述] 有2个变量,分别存入2个不同的整数,有人试图将这2个变量中的值互换。 [案例] 原始状态为:x=5 y=6 互换后的状态为:y=6 x=5 程序只允许定义两个变量,程序保存为1.cpp.

2.编写程序,连续输入10个值,请输出输入值的最大值和最小值, 程序保存为2.cpp. 3.[问题的描述] 打印出下图所示的杨辉三角形 两个未知数和的幂次方运算后的系数问题,比如(x+y)的平方=x的平方+2xy+y的平方,这样系数就是1,2,1这就是杨辉三角的其中一行,立方,四次方,运算的结果看看各项的系数,这就是杨辉三角,也叫贾宪三角,2项式乘方展开式的系数规律。如图,在贾宪三角中,第3行的第三个数恰好对应着两数和的平方公式依次类推,杨辉三角是一个由数字排列成的三角形数表,一般形式如下图所示。 [案例] 输出10行的图

C语言考试试题

试题 课程名称C语言程序设计适用时间 试卷类别 A 适用专业、年级、班 一、选择题(每小题2分, 2×25=50分) 1.下列叙述错误的是( )。 A) C程序中的每条语句都用一个分号作为结束符B) C程序中的每条命令都用一个分号作为结束符 C) C程序中的变量必须先定义,后使用 D) C语言以小写字母作为基本书写形式,并且C语言要区分字母的大小写 2.以下叙述不正确的是( )。 A) 一个C源程序必须包含一个main函数B) 一个C源程序可由一个或多个函数组成 C) C程序的基本组成单位是函数D) 在C程序中,注释说明只能位于一条语句的后面 3.C语言中最简单的数据类型包括( )。 A)整型、实型、逻辑型B)整型、实型、字符型 C)整型、字符型、逻辑型D)字符型、实型、逻辑型 4.C语言中运算对象必须是整型的运算符是( )。 A)%= B)/ C)= D)<= 5.若变量a,i已正确定义,且i已正确赋值,合法的语句是( )。 A)a= =1 B)++i;C)a=a++=5;D)a=int(i); 6.下列运算符中优先级最高的是( )。 A) < B) + C) && D) ! = 7.设有说明:char w;int x;float y;double z;则表达式w*x+z-y 值的数据类型是( )。 A) int B) float C) double D) char 8.设x和y均为int型变量,则语句:x+=y;y=x-y;x-=y;的功能是( )。 A)把x和y按从大到小排列B)把x和y按从小到大排列C)无确定结果D)交换x和y中的值 9.设整型变量a,b的值均为8, printf("%d,%d",(a++,++b),b--);的输出是( )。 A)8,8 B)8,7 C)9,9 D)8,9 10.若有语句scanf("%d%d",&a,&b);要使变量a,b分别得到10和20,正确的输入形式为( )。 A)10 20 B)10,20 C)1020 D)10:20 11.判断char型变量ch是否为大写字母的正确表达式是( )。 A)'A'<=CH<='Z' B) (CH>='A')& (CH<='Z') C)(CH>='A')&& (CH<='Z') D) ('A'<=ch)AND('Z'>=ch) 12.有如下程序 main( ) { int x=1,a=0,b=0; switch(x) { case 0: b++; case 1: a++; case 2: a++;b++; } printf("a=%d,b=%d\n",a,b);} 该程序的输出结果是( )。 A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2 13.以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下: main( ) { int n,k; float score,sum,ave; sum=0.0; for(n=1;n<=10;n++) { for(k=1;k<=4;k++) { scanf("%f",&score); sum+=score; } ave=sum/4.0; printf("NO%d:%f\n",n,ave); } } 上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是( )。 A) sum=0.0; B) sum+=score; C) ave=sun/4.0; D) printf("NO%d:%f\n",n,ave);

c语言笔试题目及答案

c语言笔试题目及答案 C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。下面是c语言笔试题目及答案,请参考。 c语言笔试题目及答案 一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选 项涂写在答题卡相应位置上,答在试卷上不得分。 (1)数据的存储结构是指________。 A)存储在外存中的数据 B)数据所占的存储空间量 C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示 答案:D 评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。 (2)下列关于栈的描述中错误的是________。 A)栈是先进后出的线性表

B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底指针 答案:B 评析:栈是一种特殊的线性表,又称先进后出表(FILO—First In Last Out)。 (3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ________。 A)冒泡排序为n2 B)冒泡排序为n C)快速排序为n D)快速排序为n(n一1)/2 答案:D 评析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2。快速排序法的最坏情况比较次数也是n(n-1)/2。 (4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。 A)log2n B)n/2 C)n D)n+l 答案:C 评析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。对长度为n的线性表进行顺序查找,在最坏情况下需要比较

C语言试卷第2套 含答案

第二套试题 一、判断题 第1题:C语言允许直接访问物理地址。参考答案:对第2题:在标准C语言中,共用体变量中的各成员的首地址是不一样的。参考答案:错第3题:全局变量的作用域一定比局部变量的作用域范围大参考答案:错 第4题:C语言的源程序不必通过编译就可以直接运行参考答案:错 第5题:指针变量与变量的指针都与地址有关参考答案:对 第6题:C语言的函数可以嵌套定义参考答案:错 第7题:局部变量的作用域是当前文件。参考答案:错 第8题:在标准C语言中,宏替换是程序运行时完成的。参考答案:错 第9题:在标准C中,“=”是判断两个数是否相等。参考答案:错 第10题:C语言编译时不检查语法参考答案:错 二、选择题(请选择正确的选项) 第1题:以下程序的输出结果是 main( ) { int n=4; while(n--) printf("%d ",--n); } 参考答案:A A、2 0 B、3 1 C、3 2 1 D、2 1 0 第2题:数组定义为int a[3][2]={1, 2, 3, 4, 5, 6},数组元素_____的值为6。 参考答案:B A、a[3][2] B、a[2][1] C、a[1][2] D、a[2][3] 第3题:字符串指针变量中存入的是 参考答案:A A、字符串的首地址 B、字符串 C、第一个字符 D、字符串变量 第4题:下列表达式的值为0的是() 参考答案:C A、3﹪5 B、3/5.0 C、3/5 D、3<5 第5题:C语言中以追加方式打开一个文件应选择_______________参数参考答案:D A、“r” B、“w” C、“rb” D、“a” 第6题:C语言中while和do-while循环的主要区别是 参考答案:A A、do-while循环体至少无条件执行一次 B、while的循环控制条件比do-while循环控制条件严格 C、do-while循环允许从外部转到循环体内 D、do-while循环体不能是复合语句

C语言考试试卷及答案

2011-2012学年第一学期 C语言程序设计A 课程A卷考试题 共 4 页此第 1 页成绩 一、单项选择题(每小题2分,共40分) 1. C语言中合法的字符常量是() A.n B.’\n’ C.110 D.”n” 2. 有以下程序: main( ) { char ch=’A’; printf(“ch(1)=%d,ch(2)=%c\n”,ch,ch+1); } 程序运行后的输出结果是() A. ch(1)=65,ch(2)=A B. ch(1)=97,ch(2)=A C. ch(1)=65,ch(2)=B D. ch(1)=97,ch(2)=B 3. 能表示a不能被2整除且a、b不相等,但a、b的和等于0的C语言逻辑表达式是() A. a==-b&&a%2==0 B. a!=b&&a+b==0&&a%2 C. !(a%2)&&a==-b D.a%2==0&&a+b==0 4. 以下程序段中语句” printf("i=%d,j=%d\n",i,j);”的执行次数是() int i, j; for(i=3;i ;i--) for(j=1;j<5;j++) printf("i=%d,j=%d\n",i,j); A. 12 B. 20 C. 15 D. 24 5. 执行以下程序段后,x[2]的值是() int x[10]={1,2,3,4,5,6,7,8,9,10},i,j,t; i=0;j=9; while(i

C语言笔试题带答案

一、选择题(1)~(10)每小题2分,? (11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)在数据结构中,从逻辑上可以把数据结构分为_______。 A)动态结构和静态结构??? ??B)紧凑结构和非紧凑结构 C)线性结构和非线性结构??? D)内部结构和外部结构 答案:C 评析:逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。 (2)若进栈序列为l,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是_______。 A)1,4,3,2??? B)2,3,4,l C)3,1,4,2 ???D)3,4, 2,1 答案:C 评析:栈是一种后进先出表,选项c中,先出栈的是3,说明此时栈内必然有1,2,由于l先于2进栈,所以l不可能在2之前出栈,故选项C这种出栈序列是不可能的。 (3)排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为_______。 A)希尔排序??? B)冒泡排序??? C)插入排序??? D)选择排序 答案:A 评析:希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。 (4)在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比较次数为_______。 A)2??? ??B)3?????? C)4 ???????D)5 答案:C

评析:二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。本题中,与 ll比较的关键码分别为15,8,10,12四个。 (5)对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为_______。 A)n-1??? B)n??? C)n+l ?????D)2n 答案:C 评析:在n个结点的单向链表(无表头结点)中,每个结点都有一个指针单元(即指针域),加上头指针,至少需要n+1个指针单元。 (6)在软件开发过程中,软件结构设计是描述_______。 A)数据存储结构?? ??B)软件体系结构??? C)软件结构测试??? D)软件控制过程 答案:B 评析:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。 (7)模块本身的内聚是模块独立性的重要性度量因素之一。在7类内聚中,具有最强内聚??? 的一类是_______。 A)顺序性内聚? ???B)过程性内聚? ????C)逻辑性内聚??? D)功能性内聚 答案:D 评析:内聚性是一个模块内部各元素间彼此结合的紧密程度的度量。内聚共有7类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。 (8)数据存储和数据流都是_______,仅仅是所处的状态不同。 A)分析结果??? B)事件??? C)动作??? D)数据 答案:D 评析:数据流图有4种成分:源点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。 (9)数据的完整性是指数据的正确性、有效性和_______。 A)可维护性??? B)独立性??? C)安全性??? D)相容性

c语言模拟题目第十七套

第十七套 设a=12,且a定义为整型变量。执行语句a+=a-=a*=a;后a的值为()。 A、0 B、144 C、132 D、12 【参考答案】错误 A 【学生答案】 [未答此题] 设变量定义为"int a, b;",执行下列语句时,输入( ),则a和b的值都是10. scanf("a=%d, b=%d",&a, &b); A、a=10, b=10 B、a=10 b=10 C、10, 10 D、10 10 【参考答案】错误 A 【学生答案】 [未答此题] main() {int x=1,a=0,b=0; switch (x) { case 0: b++; case 1: a++; case 2: a++;b++; } printf("a=%d,b=%d",a,b); }该程序的输出结果是( ) A、a=1,b=1 B、a=1,b=0 C、a=2,b=2 D、a=2,b=1 【参考答案】错误 D 【学生答案】 [未答此题] 执行下列语句后的输出为()。

int j=-1; if(j<=1) printf("****\n"); else printf("%%%%\n"); A、%%%% B、**** C、有错,执行不正确 D、%%%%c 【参考答案】错误 B 【学生答案】 [未答此题] 以下正确的描述是( ). A、只能在循环体内和switch语句内使用break语句 B、continue语句的作用是终止整个循环的执行 C、从多层嵌套的外层循环中退出时,只能使用goto语句 D、在循环体内使用break和continue语句的作用相同 【参考答案】错误 A 【学生答案】 [未答此题] 设有如下程序段: int k=10; while(k==0) k--; 则下述说明中正确的是( ). A、循环体一次也不执行 B、循环体执行一次 C、死循环 D、循环体执行10次 【参考答案】错误 A 【学生答案】 [未答此题] 对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是()。 A、将5个初值依次赋给a[6]至a[10] B、将5个初值依次赋给a[0]至a[4] C、因为数组长度与初值的个数不相同,所以此语句不正确 D、将5个初值依次赋给a[1]至a[5] 【参考答案】错误 B

大学c语言考试题库含答案

================================================== 题号:1482 执行以下程序段后,输出结果和a的值是()。int a=10; printf("%d",a++); A、11 和10 B、11 和11 C、10 和11 D、10 和10 答案: C 题号:2100 已知字符'A'的ASCⅡ代码值是65,字符变量c1的值是'A',c2的值是'D'.执行语句printf("%d,%d",c1,c2-2);后,输出结果是 A、65,66 B、A,B C、65,68 D、A,68 答案: A 题号:5055 相同结构体类型的变量之间,可以()。 A、比较大小 B、地址相同 C、赋值 D、相加 答案: C 题号:3217 int a[10];合法的数组元素的最小下标值为()。 A、1 B、0 C、10 D、9 答案: B

能正确表示逻辑关系:" a≥10或a≤0 "的C语言表达式是 A、a>=0 | a<=10 B、a>=10 or a<=0 C、a>=10 && a<=0 D、a>=10 || a<=0 答案: D 题号:157 main() {int x=1,a=0,b=0; switch (x) { case 0: b++; case 1: a++; case 2: a++;b++;} printf("a=%d,b=%d",a,b); }该程序的输出结果是( ) A、2,2 B、2,1 C、1,1 D、1,0 答案: B 题号:4784 设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的 数据类型为()。 A、不确定 B、double C、int D、float 答案: B 题号:1647 以下程序中,while循环的循环次数是______ main() { int i=0;

c语言常见笔试题总结

c语言常见笔试题总结 此句出自北宋诗人林逋的七律《山园小梅》,原诗为“众芳摇落独暄妍,占尽风情向小园。疏影横斜水清浅,暗香浮动月黄昏。霜禽欲下先偷眼,粉蝶如知合断魂。幸有微吟可相狎,不须檀板共金尊。” 【1 使用宏】 1.1 #ifdef NDEBUG now i will introduce myself briefly. i am 21 years old. i was born in heilongjiang province, northeast of china. i am a senior student at beijing xx university. my major is packaging engineering. and i will receive my bachelor degree after my graduation in june. in the past 4 years, i spend most of my time on study. i have passed cet4/6 with an ease. and i have acquired basic knowledge of packaging and publishing both in theory and in practice. besides, i have attended several packaging exhibition held in beijing. this is our advantage study here. moreover, i have taken a tour to some big factory and company. through these i have a deeply understanding of domestic packaging industry. 勤思考研解析:此题考查了初中生出现反抗心理的原因,有三个:自我意识高涨;独立意识增强;中枢神经系统的兴奋性过强,因此答案是C。 #define TRACE(S) S #else #define TRACE(S) printf(“%s;\n”, #S); S #endif 问:以上TRACE()宏的作用是什么? 1.2 #error的作用? 1.3 定义一个宏,求出给定数组中的元素的个数 人员绩效考评的成对比较法中,管理者只有在对每个员工与其他所有员工进行成对比较之后,才能得出对其业绩的总的评价结果。如某部门有五名员工,用该方法所需的总的成对比较次数为

c语言模拟题目第二十套

第二十套 下列程序段的输出结果为()。 float x=213.82631; printf("%3d",(int)x); A、213.82 B、213.83 C、213 D、3.8 【参考答案】错误 C 【学生答案】 [未答此题] a,b为整型变量,二者均不为0,以下关系表达式中恒成立的是()。 A、a/b*b+a%b==a B、a/b*b==a C、a*b/a*b==1 D、a/b*b/a==1 【参考答案】错误 A 【学生答案】 [未答此题] int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为()。 A、3 B、2 C、1 D、不一定 【参考答案】错误 C 【学生答案】 [未答此题] C语言的switch语句中case后( )。 A、可为任何量或表达式 B、可为常量或表达式或有确定值的变量及表达式 C、只能为常量或常量表达式 D、只能为常量 【参考答案】错误 C 【学生答案】 [未答此题]

设j和k都是int类型,则下面的for循环语句( )。 for(j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k); A、最多执行9次 B、是无限循环 C、循环体一次也不执行 D、最多执行10次 【参考答案】错误 D 【学生答案】 [未答此题] 以下程序中,while循环的循环次数是( ). main() { int i=0; while(i<10) { if(i<1) continue; if(i==5) break; i++; } } A、1 B、6 C、死循环,不能确定次数 D、4 【参考答案】错误 C 【学生答案】 [未答此题] 以下不能对二维数组a进行正确初始化的语句是()。 A、int a[2][3]={{1,2},{3,4},{5,6}}; B、int a[][3]={{1,2},{0}}; C、int a[2][3]={0}; D、int a[][3]={1,2,3,4,5,6}; 【参考答案】错误 A 【学生答案】 [未答此题] 下面函数调用语句中,fun含有实参的个数为( ). fun((x,y),(x+y,z,x/y));

c语言期中考试试题及答案

《C语言程序设计》期中考试试卷 课程编号:03402513试卷类型:A卷考试形式:笔试考试日期: 注意事项:1.请将试卷最后一页的答题纸撕下,将答案填写在其中;2.交卷时请确认答题纸是否按要求写好姓名等信息并与试题一起上交;3.不准携带任何书籍、资料、纸张等。4.草稿纸用试卷的背面。 一、单项选择题(1空1分,共20分) 1、C语言程序的基本结构是(【1】) 。 【1】 A) 函数 B) 语句 C) 字符 D) 程序行 2、一个C程序的执行是(【2】) 。 【2】A) 从本程序的主函数开始,到本程序的主函数结束 B)从本程序的第一个函数开始,到本程序的最后一个函数结束 C) 从本程序的主函数开始,到本程序的最后一个函数结束 D)从本程序的第一个函数开始,到本程序的主函数结束 3、下列四个叙述中,错误的是(【3】) 。 【3】 A) 一个C源程序必须有且只能有一个主函数 B) 一个C源程序可以含一个或多个子函数 C) 在C源程序中注释说明必须位于语句之后 D) C源程序的基本结构是函数 4、下面不属于C语言保留字的是(【4】) 。 【4】 A) short B) ELSE C) extern D) for 5、下列四个叙述中,正确的是(【5】) 。 【5】 A) 库函数也是C语言本身的组成部分 B) C语言中的输入输出操作是由相应语句完成的 C) 库函数是C编译系统提供的功能函数 D) 标题文件(头文件)可以在程序的函数内部调用 6、下列四组数据类型中,C语言允许的一组是(【6】)。 【6】 A) 整型、实型、逻辑型 B) 整型、实型、字符型 C) 整型、双精度型、布尔型 D) 整型、实型、复型 7、在C语言中不同数据类型的的长度是(【7】)。 【7】 A) 固定的 B) 由用户自己定义的 C) 任意的 D) 与机器字长有关

c语言期中考试试题及答案

中国民航大学2009-2010学年第二学期 《C 语言程序设计》期中考试试卷 课程编号:03402513 试卷类型: A 卷 考试形式:笔试 考试日期: 注意事项:1.请将试卷最后一页的答题纸撕下,将答案填写在其中;2.交卷时请确认答题纸是否按要求写好姓名等信息并与试题一起上交;3.不准携带任何书籍、资料、纸张等。4.草稿纸用试卷的背面。 一、单项选择题(1空1分,共20分) 1、C 语言程序的基本结构是(【1】) 。 【1】 A) 函数 B) 语句 C) 字符 D) 程序行 2、一个C 程序的执行是(【2】) 。 【2】 A) 从本程序的主函数开始,到本程序的主函数结束

B)从本程序的第一个函数开始,到本程序的最后一个函数结束 C) 从本程序的主函数开始,到本程序的最后一个函数结束 D)从本程序的第一个函数开始,到本程序的主函数结束3、下列四个叙述中,错误的是(【3】) 。 【3】 A) 一个C源程序必须有且只能有一个主函数 B) 一个C源程序可以含一个或多个子函数 C) 在C源程序中注释说明必须位于语句之后 D) C源程序的基本结构是函数 4、下面不属于C语言保留字的是(【4】) 。 【4】 A) short B) ELSE C) extern D) for 5、下列四个叙述中,正确的是(【5】) 。 【5】 A) 库函数也是C语言本身的组成部分 B) C语言中的输入输出操作是由相应语句完成的

C) 库函数是C编译系统提供的功能函数 D) 标题文件(头文件)可以在程序的函数内部调用 6、下列四组数据类型中,C语言允许的一组是(【6】)。 【6】 A) 整型、实型、逻辑型 B) 整型、实型、字符型 C) 整型、双精度型、布尔型 D) 整型、实型、复型 7、在C语言中不同数据类型的的长度是(【7】)。 【7】 A) 固定的 B) 由用户自己定义的 C) 任意的 D) 与机器字长有关 8、下列四组(八进制或十六进制)常数中,正确的一组是(【8】)。【8】 A) 016 0xbf 18 B) 0abc 017 0xa C) 010 -0x11 0x16 D) 0A12 7FF -123 9、下列四组转义字符中,合法的一组是(【9】)。 【9】 A)‘\t’‘\\’‘\n’ B)‘\’‘\017’‘\x’

c语言模拟题目第三套

第三套 若x,i,j,k 都是int型变量,则计算x=(i=4,j=16,k=32)后,x的值为:( ). A、52 B、16 C、4 D、32 【参考答案】错误 D 【学生答案】 [未答此题] 执行以下程序段后,输出结果和a的值是()。 int a=10; printf("%d",a++); A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10 【参考答案】错误 B 【学生答案】 [未答此题] 以下程序的输出结果是:( ) main() {int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--); } A、6 B、5 C、7 D、4 【参考答案】错误 A 【学生答案】 [未答此题] 执行下面程序段后,i的值是( ). int i=10; switch(i) {case 9: i+=1;

case 10: i--; case 11: i*=3; case 12: ++i; } A、28 B、10 C、9 D、27 【参考答案】错误 A 【学生答案】 [未答此题] 下面有关 for 循环的正确描述是( )。 A、for 循环是先执行循环体语句,后判断表达式 B、在 for 循环中,不能用 break 语句跳出循环体 C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 D、for 循环只能用于循环次数已经确定的情况 【参考答案】错误 C 【学生答案】 [未答此题] 针对下列程序段回答问题( ). for(t=1;t<=100;t++) { scanf("%d",&x); if(x<0) continue; printf("%3d",t); } A、x>=0时什么也不输出 B、最多允许输出100个非负整数 C、printf函数永远也不执行 D、当x<0时整个循环结束 【参考答案】错误 B 【学生答案】 [未答此题] 若char a[10];已正确定义,以下语句中不能从键盘上给a数组的 所有元素输入值的语句是()。 A、for(i=0;i<10;i++)a[i]=getchar(); B、scanf("%s",a); C、gets(a);

相关主题
文本预览
相关文档 最新文档