c语言测试题答案(精选6篇)
c语言测试题答案 第1篇
一、单选题
1.在C语言中,下列类型属于构造类型的是(D)A.整型 B.字符型 C.实型 D.数组类型 2.下列字符串不是标识符的是(D)A.sum B.Average C.Day_night D.M.D.JOHN 3.在C语言中,回车换行符是(A)A.n B.t C.v D.b 4.在C语言中,语句和数据定义是用(C)作为结束标记的 A.句号 B.逗号 C.分号 D.括号 5.设有如下定义: int x=10,y=5,z;则语句printf(“%dn”,z=(x+=y,x/y));的输出结果是(C)A.0 B.1 C.3 D.4 6.10.以下程序的输出结果是(B)main(){char c1=’8’,c2=’2’;
printf(“%c,%c,%d,%dn”,c1,c2,c1-c2,c1+c2);} A.因输出格式不合法,输出出错信息 B.8,2,6,106 C.8,2,6,10 D.8,2,5,9 7.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是(A)main(){int x;scanf(“%d”,&x);
if(x++>5)printf(“%dn”,x);else printf(“%dn”,x--);} A.7和5 B.7和4 C.6和4 8.表达式(int)2.1416的值时(A)A.2 B.2.1 C.0 D.3 9.下列运算符优先级最高的是(B)A.> B.+ C. D.!= 10.C语言容许函数值类型缺省定义,此时该函数值隐含的类型时(B)A.float型 B.Int型 C.Long 型 D.Double型
11、C程序的基本构成单位是(C)A、子程序 B、过程 C、函数 D、文件
12、C语言中要求操作数都为整型数据的算术符是(C)A、/ B、!C、% D、= =
13、若int x=1,y=1;则表达式(!x||y--)的值是(B)。A、0 B、1 C、2 D、-1
14、能正确表示逻辑关系:a≥10或a≤0的C语言表达式(D)A、a>=10 or a<=0 B、a>=0|a<=10 C、a>=10 a<=0 D、a>=10||a<=0
15、double x,y;表达式x=1,y=x+3/2的值是(C)。A、1 B、2 C、2.0 D、2.5
16、运行C源程序的命令是(D)A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9
17、运行完C程序后,查看C程序运行结果的命令是(A)A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9 18.若有程序段:int i=2,j;j=i++;printf(“%d,%d”,++i,j);该程序段的输出结果是:(D)A、3,2 B、4,3 C、3,3 D、4,2 19设 int a=12;表达式a+=a-=a*=a的值是(C)。A 12 B 144 C 0 D 132 20、若给定条件表达式(M)?(a++):(a--),则其中表达式M和(D)等价。A M==0 B M=1 C M!=1 D M!=0
21、在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式为(D)。A 只能是逻辑表达式 B只能是关系表达式
C 只能是逻辑表达式或关系表达式 D可以是任意表达式
22、下列选项中,(A)给变量赋初值是错误的。
A int a=b=3;B int a,b,c=5;C int a=3,b,c=a;D float f=3.56;
23、在C语言中,一个字符变量在内存中占用(A)个字节。A 1 B 2 C 3 D 4
24、int a=12,b=13,c;c=(a
25、设有int i;则表达式i=1,++i,++i||++i,i的值为(C)A.1 B.2 C.3 D.4 30以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是(A)A)if((a>b)(b>c))k=1;B)if((a>b)||(b>c))k=1 else k=0;C)if(a<=b)k=0;D)if(a>b)k=1;else if(b<=c)k=1;else if(b>c)k=1;else k=0;
31、算法具有五个特性,以下选项中不属于算法特性的是(A)有穷性(B)简洁性(C)可行性(D)确定性 32以下选项中可作为C语言合法常量的是(A)(A)-80.(B)-080(C)-8e1.0(D)-80.0e
33、以下叙述中正确的是(C)
(A)用C语言实现的算法必须要有输入和输出操作(B)用C语言实现的算法可以没有输出但必须要有输入(C)用C程序实现的算法可以没有输入但必须要有输出(D)用C程序实现的算法可以既没有输入也没有输出
33、以下选项中,不能作为合法常量的是(B)(A)1.234e04(B)1.234e0.4(C)1.234e+4(D)1.234e0
34、有以下程序
B)(main(){ int i=1,j=2,k=3;if(i++==1(++j==3||k++==3))printf(“%d %d %dn”,i,j,k);} 程序运行后的输出结果是(D)(A)1 2 3(B)2 3 4(C)2 2 3(D)2 3 3
35、判断变量ch中的字符是否为数字字符,正确表达式是____D___。
A)ch>=0ch<=9 B)’0’<=ch<=’9’ C)ch>=’0’||ch<=’9’ D)ch>=’0’ch<=’9’
36、若执行以下程序时从键盘上输入9,则输出结果是__B_____ A)11 B)10 C)9 D)8 main()
{ int n; scanf(“%d”,&n); if(n++<10)printf(“%dn”,n); else printf(“%dn”,n--); }
37、若w=1,x=2,y=3,z=4;则条件表达式w>x?w:y 38、以下非法的赋值语句是(C)A)n=(i=2,++i);B)j++;C)++(i+1);D)x=j>0; 39、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是(D)A)6.500000 B)6 C)5.500000 D)6.000000 40、已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为 1、j的值为 2、k的值为3,以下选项中正确的输入语句是(C)A)scanf(“---”,&i,&j,&k);B)scanf(“%d %d %d”,&i,&j,&k);C)scanf(“%d,%d,%d”,&i,&j,&k);D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k); 41、若有以下程序: main(){ int k=2,i=2,m;m=(k+=i*=k);printf(“%d,%dn”,m,i);} 执行后的输出结果是(C)A)8,6 B)8,3 C)6,4 D)7,4 42、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 y+z/2的值是(D)A)6 B)0 C)2 D)1 43 以下选项中,与k=n++完全等价的表达式是(A)A)k=n,n=n+1 B)n=n+1,k=n C)k=++n D)k+=n+1 39、若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是B A)i= *P;B)*P=*&J;C)i=&j;D)i=* *p;40、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为6的表达式是C A)*p+6 B)*(p+6)C)*p+=5 D)p+5 二、填空题 1.C语言是通过 库函数 来进行输入和输出的。 2.C语言的数据类型有四大类,他们是 基本类型、构造类型、指针类型和 空类型。 4.下面程序的运行结果是 3.600000,3 main(){float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);} 5.数组名定义规则和变量名相同,遵守 标识符 命名规则。 6、main(){char c1,c2,c3;c2=’c’;c1=c2-1;c3=c2+1;printf(“%c,%d,%cn”,c1,c2,c3);} 程序的运行结果是: b,99,d 7、main(){int a=5,b=6,c;c=a;if(a>b)c=1;else if(a= =b)c=0;else c=-1;printf(“c=%dn”,c);} 程序的运行结果是:-1 11.设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为 0。12.设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是 9。14.求100~200间的全部素数。# include 15、main(){ int x,y=1,z=10;if(y!=0)x=5; printf(“x=%dt”,x);x=1;if(z<0)if(y>0)x=3;else x=5;printf(“x=%dn”,x);if(z=y<0)x=3;else if(y==0)x=5;else x=7;printf(“x=%dt”,x);printf(“z=%dn”,z);} 写出程序的运行结果:x=5 x=1 x=7 z=0 16、百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main(){ int hb,hm,hl,n=0;for(hb=0;hb<=100;hb+= 3)for(hm=0;hm<=100-hb;hm+= 2){ hl=100-hb-hm;if(hb/3+hm/2+2* hl ==100){ n++;printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl);} } printf(“n=%dn”,n);} 17、写出程序运行结果,并简述功能(运行结果5分,功能描述3分,共8分)#include 将整型数组a以逆序形式显示出来 18、有以下语句段 int n1=10,n2=20;printf(“ n1=%dnn2=%d ”,n1,n2); 要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。n1=10 n2=20 19、有以下程序 main(){ int n=0,m=1,x=2;if(!n)x-=1;if(m)x-=2;if(x)x-=3;printf(“%dn”,x);} 执行后输出结果是-4。 21、.以下程序运行后的输出结果是____ main(){ int a,b,c;a=10;b=20;c=(a%b<1)||(a/b>1);printf(“%d %d %dn”,a,b,c);} 答案:10 20 0 22、任意输入三条边(a,b,c)后,若能构成三角形且为等腰、等边和直角,则分别输出DY、DB和ZJ,若不能构成三角形则输出NO。main(){ float a,b,c,a2,b2,c2 scanf(“%f%f%f%,&a,&b,&c);printf(”%5.1f,%5.1f,%5.1f“,a,b,c);if(a+b>cb+c>aa+c>b){ if(a==b || b==c || a==c)printf(”DY“);if(a==b b==c)printf(”DB“);a2=a*a;b2=b*b;c2=c*c;if((a2+b2==c2)||(a2+c2==b2)||(b2+c2==a2))printf(”ZJ“);printf(”n“);} else printf(”NOn“);} 23、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是___x=2______ if(a 24、以下程序运行后的输出结果是 20,0。 main(){ int x=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf(“%d,%d n”,x,y);} 三、程序题 1、在购买某物品时,若所花的钱x在下述范围内,所付钱y按对应折扣支付: x x<1000 0.9x 1000≤x<2000 0.8x 2000≤x<3000 0.7x x.≥3000 y= 2、编一程序根据上网时间计算上网费用,计算方法如下: 费用= 30元基数 <10小时 每小时3元 10 ~50 每小时2.5元 ≥50小时 同时为了鼓励多上网,每月收费最多不超过150元。 3、已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下: 等级= 优 mark≥90 良 80≤mark<90 中 70≤mark<80 及格 60≤mark<70 不及格 mark<60 第一题答案: #include 一、单选题(每小题2分,共30分) 1.、A2、.B3、.D4、.A5、A6、A7、C8、.C9、.A.10、A11、.A12、C13、D14、A15、D 二、填空题(每小题1分,共20分) 1、把10赋值给变量S2、基本型、短整型、长整型、无符号型,int、short、long、unsigned3、字母、数字、下划线4、3.55、36、a=a*b7、a=a/b8、19、3.510、字母、下划线 三.判断题(每小题2分,共10分) 1、正确 2、错误 3、错误 4、错误 5、正确 四、简答题;(每小题5分,共20分) 1、字符常量是由单引号引起的单个字符、字符串常量是由双引号引字节起的字符序列,字符常量的存储单元是一个字节而字符串常量所占的存储单元比它实际的字符个数多一个 2、基本的输入输出一般分为三种:一是单字符的输入与输出,即getchar()和putchar()函数;二是格式化的输入与输出,即scanf()和printf();三是字符串的输入与输出,即gets()和puts()函数3、1)C语言具有中级语言的特性2)C语言结构性能强3)功能齐全4)适用范围广泛 4、编辑、编译、连接、执行 五、程序改错题(每小题4分、共8分) 1、错误:scanf(“%d ”,i);正确:scanf(“%d ”,&i); 2、错误:main正确;main() 六、编程题(第6分,共12分)、main() {printf(“**********n”); printf(“Very Good!n”); printf(“**********n”); } 2、main() {inta=15, b=5,sum; sum=a+b; printf(“%d”,sum); 测试驱动开发是一种新的快速软件开发方法,它的基本思想是用测试推动整个软件开发的进行,即在系统开发之前,先编写“测试代码”,列举典型的测试用例,然后再编写“功能代码”,实现部分或全部系统的功能,确保所有事先准备的测试用例全部通过。 C语言是信息类专业一门重要的专业基础课,在整个课程体系中占有举足轻重的地位。学好C语言,可以为后续的数据结构、数据库、操作系统等课程的学习打下坚实的基础。教学工作者对C语言教学作了很多研究,提出了不少实用的方法。在本文中,我们提出将测试驱动开发理念引入C语言教学中。这种方法在近几年的教学实践中推广使用,获得了良好的教学效果。 1 测试驱动开发与C语言教学的结合 在多年的C语言教学中,我们发现,初学者在学习C语言的障碍来自于多个方面,其中主要有2个方面的原因:(1)缺乏计算机的程序化思维模式。作为大学生的第一门计算机语言,很多学生刚开始学习编程时,往往不知从何处入手。出现这个问题的原因是学生不能正确认识计算机能做什么工作,以及实际问题的解决步骤和算法。(2)不能深入理解程序的执行过程。要想学好C语言,必须理解C语言语句的执行顺序和执行效果。有了这方面的知识,就会领悟计算机解决问题的方法和实质。同时,也就会解决(1)中所提到的问题。怎样才能深入理解程序的执行过程呢?要借助于调试工具。通过调试,我们可以单步运行程序,能清晰地查看程序运行的流程以及相关变量值的变化过程。由此可见,调试在C语言学习和实践中起着至关重要的作用[1]。 调试与测试有着极大的内在联系。一般来说,调试是指在软件开发过程中,定位并排除程序中的错误,而软件测试是通过验证一些测试用例,找出软件中存在的错误。因此可以说,调试中要进行大量的测试,测试中(特别是白盒测试)要借鉴调试的方法。将测试驱动开发引入到C语言教学中,可以让学生熟悉调试与测试的过程,提供了一种解决实际问题的思维模式,让学生养成测试的习惯,确保程序开发的质量。 2 实例分析 为了更好地理解测试驱动开发方法的优越性以及在C语言教学中的应用,下面以一个实例来进行说明。 例如,要求用户从键盘输入一个年份,接着判断该年份是否为闰年。这个问题是参考文献[1]中的一个例题,学习过C语言的同学几乎都做过。对于初次遇见这个题目的学生来说,还是感觉有一定难度的。然而,当看完教材的解释以后,思路就会变得很清晰。由此可见,问题的结症在于闰年判定规则的建立。 怎样才能快速总结出规则并解决问题呢?一种很自然的想法就是列举一些实例,再总结出规则。比如,闰年的情况有2000、2012、1996,非闰年的情况有2011、1998、1900。这两组年份符合一些什么规则呢?最容易找出的一个规则是,不能被4整除的一定不是闰年,如2011、1998。再来分析一下1900,为什么它也不是闰年呢?因为它能被100整除,则要求能被400整除才算是闰年,否则就不是闰年。由于不满足这个条件,1900年就不是闰年。于是判断不是闰年的第二条规则也找出来了[2]。其实,考虑到这个程度,我们已经把不是闰年的情况全部列出来了,其它情况当然就是闰年。完成了“列举实例”、“总结规则”这两个步骤后,接下来就是编程实现了。我们按照“自顶向下,逐步细化”的思想,首先编写出程序的最初框架: 编写好最初的程序框架之后,进行第1步测试:将这个程序框架进行编译。结果出现了错误,提示isLeap没有定义。显然,我们需要实现isLeap这个函数,并最好放在main函数之前,这样可以省去函数的声明,其代码如下: 添加了isLeap函数的定义以后,程序顺利通过了编译。到此为止,只能说程序已经没有语法错误了,它在逻辑上是不是完全正确呢?这就需要第2步测试:编写测试用例,逐一验证其正确性。根据前面列举的实例,制作以下表格进行测试: 从测试结果可以看出,前面5个测试用例都是正确的,然而最后一个实际结果与期望结果不符,出现问题了。1900是能被4整除的,在我们编写的程序中,1900满足if后面的条件,所以就认为是闰年了。但是实际情况是,由于1900还能被100整除,所以还要测试它是否被400整除。很显然,不是闰年的第二条规则我们在程序中没有考虑到,因此出现了错误。 于是,将isLeap函数作一下修改,根据我们的思维逻辑顺序,很容易得到如下的程序: 再来验证表1中的各个测试用例,发现全部通过测试。可以证明这个程序是正确的。但我们同时也发现,isLeap函数在逻辑上有些复杂,能不能做一些精简呢?当然是可以的。这就需要第3步测试:对代码进行重构,并再次验证各个测试用例。于是得到下面的代码: 可以发现,到目前isLeap函数内部结构非常清晰,if语句的条件正好就是非闰年的两条规则。用或运算连接起来,条件成立就返回0,表示非闰年,否则就返回1,表示是闰年。 3 总结 本文针对C语言教学中出现的问题,将测试驱动开发方法引入到C语言教学中,不仅提供了一种新的解决问题的思维模式,更重要的是,通过列举一些典型的测试用例,让学生重视调试和测试,深入理解程序运行过程,确保程序的正确性与质量。实践证明,通过对测试驱动开发方法在C语言教学中的推广使用,可以大幅度提高教学效果,受到学生的普遍欢迎。 摘要:本文结合C语言课程的教学实践,提出了将测试驱动开发引入C语言教学的方法,并通过实例说明该方法能给学生提供一种全新的思维模式,帮助学生解决实际问题,提高程序编写的质量。该研究成果取得了良好的教学效果,受到学生的普遍欢迎。 关键词:测试驱动开发,C语言,软件测试 参考文献 [1]谭浩强.C语言程序设计(第四版)[M].北京:清华大学出版社,2010.03. 通过这样一个系统,学生可以随时随地进行C语言练习,巩固基础知识,强化专业素养;并且,系统可自动生成C语言试题,减轻教师工作量;在考试结束后,系统能够自动阅卷并评分,提高试题评测的准确性;综上所述,C语言试题生成系统将提高高校的办公效率和学生的专业素养。 关键词:C语言;自动组卷;在线评测;B/S 中图分类号:TP311.52 文献标识码:A 文章编号:1674-7712 (2014) 18-0180-01 一、国内外现状 国内外学者一直都热衷于试题生成系统的研究,试题生成系统主要包含两大主要模块:自动组卷模块和在线考试模块。自动组卷模块在长时间内一直有学者进行深入探讨,但至今并没有一个很好的算法方案。主要问题存在于采用经典的数学方法很难解决试卷生成过程中的收敛过程。目前的自动组卷模块根据其所使用的策略大致可以分成五类:基于随机抽取的自动组卷;基于深度与广度搜索算法的自动组卷;基于遗传算法的自动组卷;基于项目反应理论的自适应测试;基于数据挖掘和知识发现的自动组卷理论。而在线考试模块中,已经出现了ACM/ICPC的源代码在线评测系统,并且在实际应用当中效果显著,明显增加了阅卷人的效率。然而其要求运行环境苛刻,并且不具备通用性(只能应用于源代码的测试),所以并不能很好的应用于国内的科学教育工作当中。我国国内也自主开发了一些在线评测系统,如等级考试的机试测试部分,这就是一个很好的应用实例,每年有数千万的考生参加,也取得了显著的应用效果。然而由于其源代码的封闭性,致使其无法应用于其他高等院校。并且其系统当中也存在一定的效率问题。 二、系统概要设计 试题生成系统采用的是模块化的设计思想,不同的模块化对应不同的功能,而不同的用户对系统有不一样的功能需求。但总体来说本系统的功能需求主要包含包括几方面:(1)对用户的管理。用户在进入系统时,必须要注册用户,登录基本信息。在这项功能里,要实现对用户的有效管理,本系统的用户包括对学生、管理员、老师。在系统的数据库中队用户的基本信息进行记录管理。(2)对试题管理。系统在对试题管理的过程中,系统可以随机分组试题,自动合成试卷,或者通过手工调整、编辑试卷和打印试卷等。老师还可以添加试题,删除试题,修改试题,查询试题。系统会及时更新试题库,对试题库进行备份,同时对不同的试题内容和属性进行分类管理。(3)在线评测。学生在登录系统后,确认考试信息等内容,系统就会及时生成试题,考生就可以进行在线考试,不受地域的影响。而在选择套题的同时,系统会根据考生选择的套题,而列出考试范围的试题,给出每门课程合适的题型,而考生必须在规定的时间来完成。(4)成绩的管理。考生考试完成后,成绩将会保存在数据库中。而老师或者学生在考试完成后,通过任何一台联网的计算机上就可以通过网页方就可以查询学生的成绩。 总的来说,无论是学生考试还是教管理员对系统的管理还是老师对试题的添加修改,都能够随时随地通过网络完成对应的工作。 三、系統的功能模块 通过对系统的需求分析,明确了本系统需要包含题库管理、试卷管理、考试管理、成绩管理、学生管理、教师管理以及系统维护等七个模块。 四、核心模块详细设计 自动组卷模块是本系统设计的重中之重,其只需要教师进行简单的操作,便可根据教师设定的参数完成自动组卷,并且,在组卷之后还能够提示教师修正题目,对不适合的题目进行修改。在整个执行过程中,首先判定用户是否拥有操作权限,若没有操作权限则自动终止;若有操作权限,则要求用户输入试卷生成时用到的必要信息,如试卷难度、试卷类型等,以及各种类型题目的数量,然后根据上述信息构成Z(X),U(X)数组,使用随机选择法生成所要求的试题;在生成试题之后,询问用户是否需要进行修改,若需要进行修改,则根据输入的题目编号,修改对应的题目信息。如此往复直到节后,最后将相关信息分别存入试卷信息表和试题试卷对应表中。 五、结束语 系统的实现有效地提高了教学的管理,大大提高了工作效率。在系统的详细设计开发过程中,采用模块化的设计,采用当前比较流行的ASP技术,AJAX技术,基于B/S应用体系结构,让系统更加健壮和灵活,能够适应系统的不断变化和发展。一个良好的试题生成系统它所涉及的内容和知识面较多,由于时间和条件的限制,系统仍存在一定的问题,今后的研究着重从以下几个方面着手:(1)完善试题生成系统各模块的功能的实现。(2)更深入地完善试题生成的算法,让试题的调度更加合理科学。(3)更深入地学习考试数据的备份与恢复。(4)由于在本系统中主观题还需要老师亲自去修改,在以后的研究方向中需要进一步研究主观题的网上考试的自动打分。(5)在题库的建设问题上做更深入的研究。(6)进一步的做好系统的安全工作,防止黑客的入侵导致试题的泄露。(7)考试的监控系统,功能还有待完善,例如能够实现人脸识别等功能。 参考文献: [1]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2007:10-12. [2]宋云娴,白鹏.智能教学系统设计与实现[M].北京:电子工业出版社,1995:60-90. [3]师书恩.信息技术教学应用[M].北京:高等教育出版社,2004:19-35. [4]郑玉.基于Web的计算机辅助教学系统[J].电子工程师,2001(02):15-17. [5]深泉,胡宁静.数据库设计和自动组卷中的几个问题[J].湘潭大学自然科学学报,2002(03):27-31. } int huiwen(int n) { int a[6],i=0,j; while (n!=0) //从第一个开是放元素 {i++; a[i]=n%10; n=n/10; } for(j=1;j 方法二、#include int rev(int a);------------------------------------------------------------------------- 1 分 void main() { int x, y,i=0; for(x=1;x<1000;x++)-------------------------------------------------------------2 分 { y=rev(x); if(x==y) { printf(”%6d“,x);----------------------------------------------------------3 分 --2 分 } } int rev(int a) { int m, b=0;--------------------------------------------------------------------------1 分 while(a!=0) { m=a%10; b=b*10+m; a=a/10;--------------------------------------------------------------------------5 分 } return b;------------------------------------------------------------------------------1 分 i++; if(i%10==0) } printf(” “);---------------------------------------------------------- 6. #include ”stdio.h“ int tgshu(int n); void main() { int n; printf(”input n: “); scanf(”%d“,&n); if (tgshu(n)) printf(”%d 是同构数 “,n); else printf(”%d 不是同构数 “,n); } int tgshu(int n) { int d=1,nn,k=0,t; nn=n*n; t=n; while(t!=0) { d=d*10; t=t/10; if(nn%d==n) return 1; } else return 0; } 7. #include ”stdio.h“ #define n 5 void out(int a[n][n] ); int he(int a[n][n]); void main() { int a[n][n],i,j,s; printf(”input 5*5 elements “); for(i=0;i } int he(int a[n][n]) { int i,sum=0; for(i=0;i 8. #include ”stdio.h“ #define n 4 void out(int a[n][n] ); void inp(int a[n][n]); void main() { int a[n][n],i,j,k; printf(”input 5*5 elements “); inp(a); for(i=0;i } 9. #include ”stdio.h“ int change(int x,int a[]) //返回值为二进制的位数 { int n=-1; while(x!=0) { n++; a[n]=x%2; x=x/2; } return n; } void main() { int x,a[20],i,n; printf(”input x “); scanf(”%d“,&x); n=change(x,a); for(i=n;i>=0;i--) printf(”%1d“,a[i]); printf(” “); } 10. #include ”stdio.h“ int ni(int x,int a[]) //返回值为数的位数 { int n=-1; while(x!=0) { n++; a[n]=x%10; x=x/10; } return n; } void main() { int x,a[20],i,n; printf(”input x “); scanf(”%d“,&x); n=ni(x,a); for(i=0;i<=n;i++) printf(”%1d“,a[i]); printf(” “); } 11. #include ”stdio.h“ int exp(int x,int n); void main() { int x,n; printf(”input x,n: “); scanf(”%d%d“,&x,&n); printf(”%d “,exp(x,n)); } int exp(int x,int n) { if (n==1)return x; return x*exp(x,n-1); } 12. #include ”stdio.h“ long int jch(int n) { if(n==1) return 1; else return n*jch(n-1); } void main() { int m,n,zuhe; printf(”input two integers m,n(m>n) “); scanf(”%d,%d“,&m,&n); if(m>=n) zuhe=jch(m)/(jch(n)*jch(m-n)); printf(”%d,%d 的组合为:%d“,m,n,zuhe); } 13. #include ”stdio.h“ void serach(int a[],int x) { int i; for (i=0;i<10;i++) if(a[i]==x) { printf(”Found “); return ; } printf(”Not found! “); } void main() { int i,a[10],x; printf(”input 10 integers “); for (i=0;i<10;i++) scanf(”%d“,&a[i]); printf(”input x “); scanf(”%d“,&x); serach(a,x); } 14. #include ”stdio.h“ #include ”string.h“ typedef struct { char no[10]; int score; }studtype; void search(studtype a[],char xno[]) { int i; for (i=0;i<20;i++) if(strcmp(a[i].no,xno)==0) { printf(”%d “,a[i].score); return ; } printf(”Not found! “); } void main() { studtype stu[20]; char xno[10]; int i; printf(”input 20 no,score “); for (i=0;i<20;i++) scanf(”%s%d“,stu[i].no,&stu[i].score); printf(”input xno “); scanf(”%s“,xno); search(stu,xno); } 15. 编程实现:从键盘任意输入某班 20 个学生的姓名和成绩,输出最高分及不及格学生的 人 数。要求分别用两个自定义函数求最高分和不及格人数。 #define N 20 #include typedef struct { char name[10]; int score; }datatype; int max(datatype stu[]); int num(datatype stu[]); void main() { datatype stu[N]; int i,max_score,n; /*姓名*/ /*成绩*/ /*最高分函数声明*/ /*不及格人数函数声明*/ printf(”请输入 %d 名职工姓名 成绩: “, N); for(i=0;istu[m].score)m=i; return stu[m].score; } int num(datatype stu[]) { int i,n=0; for(i=0;i 16. 编程实现:输入 2 个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要 求 每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。 #define M 4 #define N 5 #include void merge(int a[],int b[],int c[]); void main() { int i,a[M],b[N],c[M+N]; printf(”请输入 %d 个降序排列的整数: “, M); for(i=0;i void merge(int a[],int b[],int c[]) { int i,j,k; i=0;j=0;k=0; while(ib[j]) c[k++]=a[i++]; else c[k++]=b[j++]; while(i 17. 编程实现:输入 N 名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工 信 息。要求:职工信息的输入和输出分别通过自定义函数来实现。 #define N 10 #include //#include typedef struct { char name[10]; float score; }datatype; void input(datatype work[]); void print(datatype work[]); void main() { datatype work[N]; input(work); print(work); } void input(datatype work[]) /*input 函数定义*/ { int i; printf(”请输入 %d 名 学生的姓名 成绩: “, N); for(i=0;i void print(datatype work[]) /*print 函数定义*/ { int i; for(i=0;i60)printf(”%10s “,work[i].name); } 18. 编程实现:从键盘输入 10 名学生的信息,包括学号、姓名、成绩,用一个排序函数 sort 完成学生成绩降序排列,并输出学生排序后的结果。 #define N 10 #include //#include typedef { char num[20]; char name[20]; float score; }stutype; void input(stutype stu[]); void sort(stutype stu[]); void print(stutype stu[]); int main() { stutype stu[N]; input(stu); sort(stu); print(stu); return 0; } void input(stutype stu[]) /*input 函数定义*/ { int i; printf(”请输入 %d 名学生信息(学号 姓名 成绩): “, N); for(i=0;i k=i; for(j=i+1;j printf(”****名次 学号 姓名 成绩**** “); for(i=0;i 19. //编程实现:任意输入一组不多于 20 个的升序排列的若干个整数,任意输入不多于 10 个 的整数(-1 作为输入结束标志) ,将其插入到该序列中,使其依然有序。要求:通过自定义 函数实现将一个整数插入到一个有序序列中,使其依然有序。 #include void ins(int a[],int*n,int x); void main() { int a[30],x,m,i; m=-1; printf(”输入一组不多于 20 个的升序排列的若干个整数,-1 作为输入结 束标志 “); scanf(”%d“,&x); while(x!=-1) { m++; a[m]=x; scanf(”%d“,&x); } printf(”输入一组不多于 10 个的升序排列的若干个整数, -1 作为输入结束标志 “); scanf(”%d“,&x); while(x!=-1) { ins(a,&m,x); scanf(”%d“,&x); } for(i=0;i<=m;i++) printf(”%5d“,a[i]); } void ins(int a[],int*n,int x) { int i=*n; while(a[i]>x&&i>=0) { a[i+1]=a[i]; i--; } a[i+1]=x; (*n)++; } 20. 一个班级有 30 个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。 要求编程实现以下功能: 1) 从键盘上输入 30 个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算 机 )/3 计算得出。 2)输出所有平均成绩大于等于 85 的学生姓名(要求用自定义函数实现该功能)。 #include ”stdio.h“ #define n 30 typedef struct { char no[11],name[9]; int math,chiness,comp; float ave; }studtype; void out(studtype a[]) { int i; for (i=0;i=85)printf(”%10s “,a[i].name); } void main() { studtype stu[n]; int i; printf(”input no,name,math,chiness,computer “); for (i=0;i 第七章 数组 一.填空 1. 数组是由固定数目的( )的变量按一定顺序排列而构成的。 )个字节 2. 设有数组定义:char array[]=“China” ;则数组所占的存储空间为( 。 3. 一个二维字符数组 a[10][20]能够存储( )个字符串。 4. 假定在一维数组 b[10]中,元素 b[5]的指针为 p,则 p+4 所指向的元素为( 5. 一维数组的下标从( )开始。 )。 ) 。 6. 设有数组 a[10];则首地址可以写成 ( 7. 设有数组 int a[10], 数组元素 a[5]用指针表示的形式是( 8. 设有数组 int a[10][15], 数组元素 a[5][3]用指针表示的形式是( 9. 定义 3 行 4 列的整型二维数组 a 的语句是( ) 。 10. 定义 int b[ ]={5,6,7,8}, y, *p=b; 执行 y=*p++ 以后, y 的值为( 11. 按下面的语句定义数组 a 后,a [2][0] 的值为( int a[3][2]={2,4,6,8,10}; )。 )。 ) 。 ) 。 12. 假设要把“student! ”存入一个字符数组,则该数组长度应该至少为( 。 13. 在 C 语言中,如果采用语句 int a[2][3] = {1,2,3,4,5} 完成一个二维数组的定义和初 始化,那么 a[0][1] 的值为( ) 。 14. 在 C 语言中,如果采用语句 int a[2][3] = {1,2,3,4,5} 完成一个二维数组的定义和初 始化,再定义 int *b = a[0],那么 *(b+2) 的值为 ( ). 15. 若 int a[ ][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是( 16. 按下面的语句定义数组 b 后,b[2][1]的值为( int b[][2]={2,1,4,3,5,6}。 ) 。 ) 。 ) 17. 设 int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4=( 18. 定义 2 行 3 列 5 层的整型三维维数组 a 的语句是( 19. 若有 int a[3]={10,12,30};则*(a+2)+3= ( 20. 若有 int a[3]={10,12,30};则 a+1 是( ) 。 ) 。 ) 。 )的地址。 21. 假设 int 型变量占两个字节的存储单元,若有定义:int x[10]={0,2,4}; 则数组 x 在内存 中所占字节数为 ( ) 。 22. 若有定义 int a[][3]={1,2,3,4,5,6,7};,则 a 数组第一维的大小是( ) 。 23. 数组 int a[3][3];共定义了( 24. C 语言中,二维数组的存放方式为按( )个数组元素。 )存放。 (填“行”或“列” ) 25. 定义 int a[10]={11,12,13,14,15}, *p=&a[5]; 假设&a[0]和&a[1]的值分别是 0x 和 0 x,则 p 的值是( ) 。 26. 定义 int a[10]={11,12,13,14,15}, *p=&a[3]; 假设&a[0]和&a[1]的值分别是 0x2000 和 0 x2004,则表达式 a[0]+*p 的值是( ) 。 27. 对一维数组初始化时,若有 int ) 。 a[10]={0,1,2,3,4},则 a[5]的值是( 28. 已知:int a[][3]={1,3,5,7,9,11}; 此时数组元素 a[1][2]的值为( ) 。 29. 定义 char a[7]= ”abcdef“; char b[4]= ”ABC“,执行语句 strcpy(a,b);printf(”%s“,a), 输出结果是( ) 。 30. 定义 int a[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句 printf(”%d“,*p+7);输出 结果是( ) 。 31. 已知 int a[5] = { 2, 3, 4, 5, 6 }; int *p = a+2; 则表达式 *p*a[3] 的值是( ) 。 32. 定义 char a[7]= ”123456“; char b[4]= ”ABC“,执行语句 strcpy(a,b); printf(”%c“,a[ 6]),输出结果是( ) 。 33. 对整形数组 int a[5]={1,2,3}; 则执行语句 a[2]=a[2]+a[1]*(*(a+3)); a[2]的值为( ) 34. 定义 char a[5]={65,66,67},*p=a; 则执行语句 printf(”%s“,p+1);输出结果为( )。 35. 对于定义 struct TData{ int a[2]; char c; }; struct TData slist*3+=,,,1,2-,’A’-,,,3,4-,’B’---; slist[1].a[0]的值为( )。 36. 已知:int a[][3]={1,3,5,7,9,11}; 则*(a[1]+1)的值为( ) 。 37. 已知:int a[2][3]={1,3,5,7,9,11,13},*p; p=&a[2]; p=p+3; 则*p 的值为( )。 38. 定义 char a[7]= ”123“; char b[4]= ”ABC“,执行语句 strcat(a,b); printf(”%s“,a),输 出结果是( ) 。 39. 对整形数组 int a[5]={3,3,3}; 则执行语句 a[2]=a[1]>0?(a[4]+1):(a[2]+2); a[2]的值 为( ); 40. 定义 int a[ ]={5,6,7,8}, *p=a; 执行 *(p++); 以后, a[0]的值为( )。 解答: 1. 同类型 2. 6 3. 10 4. b[9] 5. 0 6. a 7. *(a+5) 8. *(*(a+5)+3) 9. int a[3][4] 10. 5 11. 10 12. 9 13. 2 14. 3 15. 2 16. 6 17. 4 18. int a[2][3][5] 19. 33 20. a[1] 21. 20 22. 3 23. 9 24. 行 25. 0x 26. 25 27. 0 28. 11 29. ABC 30. 8 31. 20 32. 6 33. 3 34. BC 35. 4 36. 5 37. 11 38. 123ABC 39. 1 40. 5 二.阅读程序写结果 1. #include void main() { int a[2][3]={{3,2,7},{4,8,6}}; int i,j,m=0; for(i=1;i<=1;i++) for(j=0;j<=i;j++) m=m+a[i][j]; printf(”m=%d“,m); } 2. #include void main(void) { int array[10] = {1, 2, 4, 5, 6, 0, 0, 0, 0, 0}, i; printf(” “); for (i=0; i<10; i++) printf(”%3d “, array[i]); printf(” “); for (i=9; i>=2; i--) array[i] = array[i-1]; array[2] = 3; for (i=0; i<10; i++) printf(”%3d “, array[i]); printf(” “); } 3. #include void main(void) { char a[]=”ABCDEFGH“,b[]=”abCDefGh“; char *p1,*p2; int k; p1=a; p2=b; for(k=0;k<=7;k++) if (*(p1+k)==*(p2+k)) printf(”%c“,*(p1+k)); printf(” “); } 4. #include #include void main() { char a[30]=”Hello “; char b[10]=”Students“; char c[10]=”Teachers“; strcat(a,c); printf(”%s,%s. “,a,b); } 5. #include void inv(int x[],int n); void main() { int i, a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a, 10); printf(”The array has been reverted. “); for(i=0;i<10;i++) printf(”%d,“,a[i]); printf(” “); } void inv(int x[], int n) { int t,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } } 6. #include void main() { float a[3][3]={1,2,3,4,5,6,7,8,9},sum=0; int i; printf(”please input rectangle element: “); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(”duijiaoxian he is %6.2f“,sum); } 7. #include int main() { int i=1,n=3,j,k=3; int a[5]={1,4,5}; while(i<=n&&k>a[i]) i++; for(j=n-1;j>=i;j--) a[j+1] = a[j]; a[i] = k; for(i=0;i<=n;i++) printf(“%2d”,a*i+); return 0; } 8. #include void main() { int a[10]={0,1,2,3,4,5,6,7,8,9}, b[10],i,sum=0; { b[i]=a[i-1]+a[i]; sum=sum+b[i]; } for(i=1;i<10;i++) if(i%3==0) sum=sum+b[i]; printf(”sum=%3d“,sum); } 9. #include void main() { int a[5]={2,6,1,3,4},n=5,i,j,t; for(i=0,j=1;j for(i=1;i<10;i++) if(a[i] void funa(int x[],int n); void main() { int i, a[5]={3,7,9,11,0}; funa(a, 5); for(i=0;i<5;i++) printf(”%d,“,a[i]); printf(” “); } void funa(int x[], int n) { int t,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } } 11. #include void main() { int a[5]={24,15,33,64,45},n=5,i,j,t; for(i=0;i0;i--) printf(”%d,“,a[i-1]); } 12. #include void main() { int a[5],i,j,t; for(i=4;i>=0;i--) scanf(”%d“,&a[i]); for(i=0;i<5;i++) a[i]=a[i]+10; for(i=0;i<5;i++) printf(”%d,“,a[i]); } 输入:42 31 24 15 16<回车>13. #include void main() { char a[][5]={”Zhong“,”Gong“, ”ren“}; printf(”%s %s “, a[0],a[1]); } 14. #include void main() { int a[3][3]={0,1,2,3,4,5,6,7,8},i,j,t; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][0]; for(i=0;i<3;i++) printf(”%d,“,a[i][i]); } 15. #include void main() { int a[3][3]={1,2,3,4,5,6,7,8,9},i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][2]; while(i>0) { i--; printf(”%d,“,a[i][i]); } } 16. #include void main() { int i,j; char a[10]={”ABCDEFGHIJ“}; for(i=0;i<10;i++) a[i]=a[i]+3; } printf(”%c “, a[6]); 17. #include int main() { int i,a[10]={0,1,2,3,4,5,6,7}; for(i=1;i<9;i++) a[i]=a[i-1]+a[i+1]; printf(”%d%d “,a[5],a[8]); return 0; } 18. #include int main() { int i,a[]={1,2,3,4,5,6,7,8,9,10}; for(i=0;i<5;i++) a[i]=i+2; for(i=9;i>=0;i--) if(a[i]%3==0) printf(”%d “,a[i]); return 0; } 19. #include int main() { int num=13,len=0,i=0,a[30]; do { a[len]=num%2; }while(num); for(i=0;i int main() { int a[5]={6,9,12,16}; int x,i=3; scanf(”%d“,&x); while(i>=0 && x c=swap(a,b); printf(”%d%d“, a,c); } 40. #include void fun(int n) { if(n==1) printf(”*“); else { printf(”-“); fun(n-1); } } void main { int i,j=0; for(i=1;i<4;i++) fun(i); printf(”XiaoXin!“); } 解答: 1. p=27 2. 运行结果:12345 3. 3 4. 5 3 32 5. 2 6. 11 21 31 7. 3 7 5 8. 6 7 8 5 5 9. 012345 10. a1=1 a2=3 a3=2 11. 10,20,30 12. a=2,b=3 a=2,b=3 13. 10,20,30 14. a=1.0000 15. 567 16. 4 17. 3.000000 18. 80,-20 19. -1 20. j=12 21. 4,3,5 22. 18 23. Hello, world! Hello, world! Hello, world! 24. x=3; 25. x=22 26. i = 7; j = 6; x = 7 i = 2; j = 7; x = 5 27. 7 28. (1) x = 2 y = 3 z = 0 (2) x = 4 y = 9 z = 5 (3) x = 2 y = 3 z = 0 29. 10, 20, 40, 40 30. 125 31. 3,0,-90,23,6,10 32. sum=6 33. i=20 i=40 34. j=9 35. c=1 36. +4++2+ 37. 8 38. c=33 39. 389 40. * -* --* XiaoXin! 三.补充程序 1. 定义了一个 max 函数,找两个整数的最大值,其位置在 main 之后. #include ”stdio.h“ ________________________ int main() { int x,y,z; printf(”input two numbers:“); scanf(”%d%d“,&x,&y); ________________________; printf(”maxmum=%d“,z); return 0; } int max(int a,int b) { ________________________; if(a>b)w=a; else w= b; ________________________; } 2. 用函数 nzp 判别一个整数 a 的值,若大于 0 则输出该值,若小于等于 0 则输出 0 值。 #include ”stdio.h“ ________________________nzp(________________________) { if(v>0) ________________________ else printf(”%d “,0); } int main() { int a; printf(”input number a:“); scanf(”%d“,&a); ________________________ return 0; } 3. 主函数调 f1 计算 n 阶乘. #include ”stdio.h“ ________________________ int main() { int n; long s; scanf(“%d”,&n); ________________________ printf(”s=%ld“,s); return 0; } long f2(int n) { ________________________ int i; for(i=1;i<=n;i++) c=c*i; ________________________ } 4. 主函数调 fun 计算 1+1/2!+1/3!+...+1/30!的和. #include ”stdio.h“ ________________________ int main() { int n; float s; ________________________ printf(”1+1/2!+1/3!...+1/30!=%f“,s); return 0; } float fun() { int n; float t=1; ________________________ for(n=1;n<=30;n++) { t*=1/n; s+=t; } ________________________ } 5. 数组 a 中存放了一个学生 5 门课程的成绩,求平均成绩。 #include ”stdio.h“ ________________________ int main() { float sco[5],av; int i; printf(”input 5 scores:“); for(i=0;i<5;i++) scanf(”%f“,&sco[i]); ________________________ printf(”average score is %5.2f“,av); return 0; } float aver(float a[]) { int i; float s=a[0]; ________________________ for(i=1;i<5;i++) s=s+a[i]; av=s/5; ________________________ } 6. 用递归法计算 n! #include ”stdio.h“ ________________________ int main() { int n; long y; printf(”input a inteager number:“); scanf(”%d“,&n); ________________________ printf(”%d!=%ld“,n,y); return 0; } ________________________ff( int n) { long f; if(n<0) printf(”n<0,input error“); else if(n==0||n==1) f=1; else f=ff(n-1)*n; ________________________ } 7. 输入正方体的长宽高 l,w,h。求体积及三个面 x*y,x*z,y*z 的面积。 #include ”stdio.h“ int s1; ________________________ int vs( int a,int b,int c) { ________________________ v=a*b*c; s1=a*b; s2=b*c; s3=a*c; ________________________ } int main() { int v,l,w,h; printf(”input length,width and height“); scanf(”%d%d%d“,&l,&w,&h); ________________________ printf(”v=%d s1=%d s2=%d s3=%d“,v,s1,s2,s3); return 0; } 8. 输入两个正整数 num1,num2,求其最大公约数. #include ”stdio.h“ ________________________ int main() { int d; int num1,num2; printf(”please input two numbers:“); scanf(”%d,%d“,&num1,&num2); ________________________ printf(”gongyueshu:%d“,d); return 0; } int gongyue(int a,int b) { ________________________ while(b) { temp=a%b; a=b; b=temp; } ________________________ } 9. 利用递归函数调用方式,输出 6 个数字。 #include ”stdio.h“ ________________________ int main() { int w=5; fun(w); printf(”“); return 0; } ________________________fun(________________________) { if(k>0) ________________________; printf(“%d”,k); } 10. 主函数调 printstar 打印一串星形图案. #include ”stdio.h“ ________________________ int main() { ________________________ ; return 0; } ________________________printstar(________________________) { printf(“*************”); } 解答: 1. int max(int a,int b); z=max(x,y); int w; return w; 2. void int v printf(”%d“,v); nzp(a); 3. long f2(int n); s=f2(n); long c=1; return c; 4. float fun(void); s=fun(); float s=0; return s; 5. float aver(float a[]); av=aver(sco); float av; return av; 6. long ff(int n); y=ff(n); long return f; 7. int s2,s3; int v; return v; v=vs(l.w,h); 8. int gongyue(int a,int b); d=gongyue(num1,num2); int temp; return a; 9. void fun(int k); void int k; fun(k-1); 10. void printstar(void); printstar(); void void 四.改错题 解答: 五.编程一 解答: 六.编程二 1. 编程实现:任意输入两个正整数,求它们的最大公约数和最小公倍数。要求最大公约数 通过自定义函数来输出。 2. 编程实现:求出 10~10000 之内的所有素数。要求素数判断通过自定义函数来实现。 3. 编程实现:输出所有的“水仙花数” 。所谓“水仙花数”是指一个 3 位数,其各位数字立 方和等于该数本身。例如:153 是一个“水仙花数” ,因为 。要求水仙花数的判断通过自定 义函数来实现。 4. 编程实现:打印出 2~1000 之间的所有完数。所谓完数,是指这样的数,该数的各因子之 和正好等于该数本身,例如:6=1+2+3;28=1+2+4+7+14;因此,6、28 都是完数。要求完数 的 判断通过自定义函数来实现。 5. 编程实现:打印出 10~9999 之间的所有回文数,要求每 10 个数一行输出。要求回文数的 判 断通过自定义函数来实现。 6. 编程实现:打印出 1~9999 之间的所有同构数,所谓同构数是指一个数如果出现在该数平 方的右端,该数就是同构数。如 5,25 都是同构数。要求同构数的判断通过自定义函数来实 现 。 7. 给定一 5*5 的整型矩阵,求所有正对角线元素之和,并以矩阵的形式输出矩阵的值。要 求 :对角线元素之和及矩阵输出分别通过两个自定义函数来实现。 8. 编程实现:输入一 4*4 的矩阵的值,求出每行的最大值并输出其所在列号。要求:通过 通 过自定义函数实现矩阵的输入输出。 9. 编程实现:任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中, 然后输出,要求数制转换通过自定义函数来实现。 10. 编程实现:任意输入一个正整数,编程求出它是几位数并将其逆序输出。要求通过自定 义函数实现求是几位数,该函数原形为:int ni(int x,int a[]);函数返回值是该数是几位 数,x 为给定的数,a 中存放该数的各个位。 11. 编写程序从键盘输入 x 和 n 的值,求 xn (n 为大于等于零的整数) ,要求用 n 递归函数求 x 。 12. 编写实现:输入两个正整数 m,n(m>n) ,计算从 m 个元素中任意取 n 个元素的组合,计 算机 公式为: 要求通过递归函数求阶乘。 13. 编程实现:从键盘任意输入 10 个不相同的整数,然后,输入要查找的数 x,如果在这 10 个 数中找到 x,则打印“Found!” ;如果找不到,则打印“Not found!” 。要求通过自定义函数 实现查找功能。 14. 从键盘输入某班 20 个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找 出 他的成绩并输出,若未找到,给出相应提示。要求通过自定义函数实现查找功能。 15. 编程实现:从键盘任意输入某班 20 个学生的姓名和成绩,输出最高分及不及格学生的 人 数。要求分别用两个自定义函数求最高分和不及格人数。 16. 编程实现:输入 2 个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要 求 每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。 17. 编程实现:输入 N 名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工 信 息。要求:职工信息的输入和输出分别通过自定义函数来实现。 18. 编程实现:从键盘输入 10 名学生的信息,包括学号、姓名、成绩,用一个排序函数 sort 完成学生成绩降序排列,并输出学生排序后的结果。 19. 编程实现:任意输入一组不多于 20 个的升序排列的若干个整数,任意输入不多于 10 个 的 整数(-1 作为输入结束标志) ,将其插入到该序列中,使其依然有序。要求:通过自定义函 数实现将一个整数插入到一个有序序列中,使其依然有序。 20. 一个班级有 30 个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。 要求编程实现以下功能: 1) 从键盘上输入 30 个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算 机 )/3 计算得出。 2) 输出所有平均成绩大于等于 85 的学生姓名(要求用自定义函数实现该功能)。 解答: 1. #include ”stdio.h“ int GreatComDiv(int m,int n); int LeaseComMul(int m,int n); void main() { int m,n,t; printf(”请输入 m 和 n 的值:“); scanf(”%d%d“,&m,&n); if((m<=0)||(n<=0)) { printf(”输入错误!请重新输入!“); scanf(”%d%d“,&m,&n); } if(m int LeaseComMul(int m,int n) {int greatcomdiv; greatcomdiv=GreatComDiv( m, n); return m*n/greatcomdiv; } 2. #include ”stdio.h“ int sushu(int n); void main() { int n; printf(”input n:“); scanf(”%d“,&n); if (sushu(n)) printf(”%d 是素数“,n); else printf(”%d 不是素数“,n); } int sushu(int n) { int i; for(i=2;i return 1; } 3. 编程实现:输出所有的“水仙花数” 。所谓“水仙花数”是指一个 3 位数,其各位数字立 方和等于该数本身。例如:153 是一个“水仙花数” ,因为 。要求水仙花数的判断通过自定 义函数来实现。 #include ”stdio.h“ int fun(int n); void main() {int i; for(i=100;i<=999;i++) if (fun(i))printf(”%d“,i); } int fun(int n) {int a,b,c; a=n/100;b=n/10%10;c=n%10; } if (a*a*a+b*b*b+c*c*c==n)return 1; return 0; 4. #include ”stdio.h“ int wanshu(int n); void main() { int n; printf(”input n:“); scanf(”%d“,&n); if (wanshu(n)) printf(”%d 是完数“,n); else printf(”%d 不是完数“,n); } int wanshu(int n) { int i,s=0; for(i=1;i<=n/2;i++) if(n%i==0) s+=i; if(s==n) return 1; else return 0; } 5. 方法一: #include ”stdio.h“ int huiwen(int n); void main()c语言测试题答案 第2篇
c语言测试题答案 第3篇
c语言测试题答案 第4篇
C语言程序设计的试题及答案 第5篇
C语言程序设计的试题及答案 第6篇







