C语言程序设计试题 库

2024-09-25

C语言程序设计试题 库(精选8篇)

C语言程序设计试题 库 篇1

C语言程序设计的试题及答案

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

{ int n; printf(”input n: “); scanf(”%d“,&n); if (huiwen(n)) printf(”%d 是回文数 “,n); else printf(”%d 不是回文数 “,n);

C语言程序设计试题 库 篇2

C / C + + 语言程序设计是计算机专业本科生的专业基础课程,也是大学计算机基础系列课程的核心课程。通过本系列课程的学习,旨在使学生掌握程序编写的基本技能,培养程序设计思想和方法,养成良好的编程风格,编制高效可靠的程序,进而具备灵活利用所学知识解决实际问题的能力。长期以来,高校都在不断地探索和实践关于C /C + + 语言程序设计课程的教学模式。传统的教学一般着重概念和语法规则,缺少学习的实用性和针对性,实验环节与课堂教学环节存在不同程度的脱节。面对繁复枯燥的语法规则和程序结构,学生也很难的有学习兴趣。因此,根据质量工程的相关要求,研究教学改革方案,找出目前C /C + + 语言程序设计课程在教学中存在的主要问题,对现有的教学方法和教学手进行现代化研究与实践,具有十分重要的现实意义。

2 C / C + + 语言程序设计教学现状

本人承担了多年的C /C + + 语言程序设计课程的教学工作,在教学过程中发现了现有教学模式的一些问题和不足,分析总结如下:

( 1) 教学中过度依赖课本,“照本宣科”现象比较普遍。受中学教育模式影响,大多数教师授课时倾向于依赖选定的教材或很少几本参考教材授课,课程章节固化,凡事以课本为主,课本里有什么就讲什么,授课内容“流程化”“格式化”。这虽然有助于教学内容的结构和完整,学生也能直接沿用中学培养的习惯获得知识,但这只不过是“填鸭式”教学的延伸。长此以往,学生学习的主动性会逐渐丧失,对课本外的东西提不起兴趣,学习也只是为了应付考试。

( 2) 过于偏重理论教学,实践教学所占比重较小。在有限的课时教学中,传统方式仅能将基本的、重要的概念、语义语法规则教授给学生,而对其应用方式、更深层次的知识点、探索及发散性的科学问题涉及较少。课程考核也大多片面强调书面成绩,对于C /C + + 语言程序设计这种实践性要求强的课程,书面考试并不能反映出学生对课程的掌握水平,反而误导部分学生靠“死记硬背”课本上的知识点和程序片段蒙混过关。

( 3) 课程衔接性差,在知识体系中,没能很好形成与“计算机文化基础”和“计算机应用基础”的衔接,也没有把C /C + + 语言知识应用于专业问题的描述和求解中。在教学中,缺少利用所学知识解决实际问题的教学引导,书本与现实隔离,很难做到“学为所用”。

针对上述问题,结合本校实际,对C /C + + 语言课程教学的主要环节教学模式、上机实践、课程考核等方面进行了研究与探讨。

3 C / C + + 语言程序设计教学改革与探索

结合C /C + + 课程的特点,针对传统教学中存在的问题,积极进行课堂教学、实验教学和考核方式的改革,具体从以下几个方面进行了一定的探索实践:

3. 1课程教学改革

( 1) 打破课本章节格式,探索“实例驱动式”和“阶梯式”教学方法针对C /C + + 语言程序设计的课程特色,强调“从实践中来,到实践中去”的教学目标。在课程教学中,注意引入具体化的实例,使得概念的抽象都来源于实际的例子。比如在C语言教学中发现很多同学上课时能听懂,看别人的程序也能看懂,但自己动手去写时却无从下手。这种情况不是个例,而是学习语言类课程时大多数学生都存在的问题。在教学中可以结合生活中的实际例子来示范,为学生“看”和“写”搭建桥梁,培养程序设计思想。例如,从做面包到C语言程序编写的示例( 图1) 。在教学中,可以引导学生分步考虑面包的制作工序,操作中需要摒除详细的细节部分,抽象出核心的流程,然后一步一步代入C语言的程序设计结构和语法规则,使得学生对课程内容有熟悉度和参与感。

通过“做面包”的例子,可以结合变量在内存中存储的方式,帮助学生掌握“变量需要先声明才能使用”的知识点,同时也铺垫了函数的概念,还可以进一步扩展加入分支结构( 面包的不同口味) ,循环结构( 制作多份面包) 等。通过动员学生逐步思考,一起动手做面包,把计算思维与有趣的课堂互动结合起来,既提高了学生学习的兴趣,也“润物细无声”地把编程思维传达到学生心中。而后在学生通过课程学习已经建立了一定的编程思维的基础上,再结合我校的卓越工程师计划,把实际项目引入课堂中来,深入引导实例教学,实现学生从“课本学习”到“实践学习”的转变,通过项目实例让学生亲身感受所学知识的用处,也为毕业后的职业发展打下扎实的基础。

另一方面,知识的获取需要一个循序渐进的过程。这就需要教师在备课时,将同类型问题找出来,将这些问题按难易程度排队上课,先让学生解决最简单的问题,再依次提高问题的难度。通过教学,学生对于同类问题的解决就有了比较深刻的认识。比如上面提到的做面包的问题,同一个问题可以分级扩展,从做一份面包到做多份面包,从做单一口味的面包到做多种口味的面包,从做面包到卖面包,进而面包分类,存货处理等等。通过与实际例子结合循序引进,反复强调知识点加深学生印象,打牢基础。C语言的开设一般在大学一年级,此时着重培养学习兴趣和规范学生养成良好的编程习惯,而C + + 的学习着重于面向对象的程序设计,一般开设于大二下学期或者大三上学期,在C + + 面向对象语言学习时,结合类和对象的概念以及继承和派生等等知识点还可以对“做面包”的问题再做进一步扩展,从做面包到做馒头、饼干等各种糕点,鼓励学生动脑思考逐渐扩充功能,可以自己编程开发一个具备制作、买卖、分类、存货处理等功能的糕点铺。教学中可以根据需要切换各种生活场合,提高学生兴趣,强调编程思想源于生活,服务于生活,学生在日常中也会经常回想起课堂所学知识,达到事半功倍的效果。

( 2) 高效利用团队教学资源,体现从计算机基础课到专业课的顺利交接

C / C + + 语言程序设计立足于引导学生建立基本的“人机互动”概念,构建编程思维理念,掌握核心程序设计方法,开发“发现问题,凝练问题,求解问题”的能力。它是计算机基础课到计算机专业课程的重要衔接,所以在课程设计上,要逐步培养学生从“使用计算机工具→理解计算机工作原理→开发计算机软硬件”的计算思维。但这个目的只通过一门课程是无法完成的,在教学过程中,需要利用院系优秀的教学资源,组建教学团队,使得课程选取→大纲制定→计划培养→落实实施形成系统化,脉络化的结构,加强课程之间的衔接和交互,增加知识的穿插讲授,使得各个课程相辅相成,相得益彰,起到事半功倍的作用。通过对不同专业需求的分析,在制定教学大纲时注重课程的衔接,在实际操作中注重教学团队中任课教师课堂情况的反馈,通过强化教学内容和学生掌握情况双重渠道,避免课程之间的脱节。针对一门课程,学生学分的获取和讲授课时的结束并不意味着本门课程的结束,在形成系统化的课程设计后,可以有效利用每门课程的信息反馈,有的放矢的对学生薄弱环节进行再强化,达到扎实学习,学以致用,而不仅仅是应付考试的良性循环机制。

3. 2上机实践改革

计算机语言类课程的学习关键在于动手实践,但即使意识到了实践的重要性,学生真正动手也往往受限于上机时间和实践平台。在传统的实验教学模式下,大多此类课程都由实验指导书作为参照,学生按图索骥的输入一些代码,完成一些任务。评判的方式也大多依赖于教师,学生实践得不到实时反馈,积极性很难调动起来,课下也不会有意识去编程实践。通过借助我校搭建的ACM/ICPC竞赛平台,学生平时有充足的题目可供练习。而且所有题目规范,输入输出格式明确,评判也由机器在后台完成,正确与否也能实时反馈。通过多组数据的测试,竞赛平台能够发现并迫使学生修正编程中存在的容易人为忽略的问题。另外,ACM/ICPC竞赛平台还可以按照班级、年级、专业等排名,学生也能实时监控自己做题的数量、成功率等,并可以通过Q&A的环节进行错误求助并与其他同学沟通。学生的学习积极性一下子就提高了起来,出错的题目,知识点通过讨论也能自己在课余时间解决。

通过与ACM/ICPC竞赛平台的结合,主要实现了以下几个 方面的探索:

( 1) 激发学生学习兴趣,创造兴趣学习小组

在ACM/ICPC的平台的辅助下,激发学生分组分队共同解决问题,成立程序编写互帮互助小组,采用不定时竞赛的方式对各小组进行考评,并辅以奖励和惩罚措施,尽量让每个学生都不落队。通过组队,同学之间也有了更好的沟通渠道,每个人成为团队的一部分,培养了学生的分享和互帮互助的团队合作精神。

( 2) 鼓励学生涉猎算法等相关知识,培养计算思维

通过ACM选拔,ACM战队的主力队员会通过集训学习数论、计算几何、动态规划、二分图、博弈论、网络流等相关知识,但竞赛选拔的队员屈指可数。这些优秀的种子选手和现有的ACM培训资源却未被大多数学生利用。C /C + + 语言类教学和大多数计算机类课程所追求目标,其核心就是培养学生的计算思维。我们采用了通过优秀学生和ACM集训队带队教师的不定期讲座和培训,以及培训资料等资源的共享来吸引更多的学生参与到程序设计的队伍中来,并已经在学生中通过口耳相传起到了一定的影响力。在上机课中适度引入部分难度稍大的,需要借助其他相关知识才能解决的问题,鼓励学生查阅资料,自己动脑,动手去分析和解决问题,养成良好的主动学习习惯。

3. 3课程考核改革

课程设置的目的不是考试,而是解决问题,特别对于C /C + + 语言程序设计类需要实践的课程尤其是这样。传统的卷面考试不仅不能反映学生对课程的掌握程度,反而诱导出诸如靠划重点、死记硬背程序企图蒙混过关拿到学分的问题。所以在对C /C + + 语言程序设计考核时,我们采用了平时成绩和期末机考相结合的方式。考试成绩分三部分组成,上课活跃度占30% ,分组实践占30% ,期末机考占40% 。其中,上课活跃度包括出勤次数和上课提问情况; 分组实践指通过小组成员共同努力分析、解决实例的情况,一般在上机时根据进度提出难度稍高的问题,鼓励学生通过团队协作,查阅课外资料等来完成; 期末机考是从ACM平台上抽取一部分题目作为期末考核,考察学生实际编程能力。

4结束语

在研究与探索C /C + + 语言程序设计教学的过程中,通过“阶梯式”“实例驱动”的教学方法,辅以ACM竞赛平台,优化配置团队教学资源,追求实用性、系统化、高效率的课程实现,全面提升学生的对程序设计的实践应用能力。通过教学改革,提高学生在学习中发现问题、分析问题和解决问题的能力,培养学生编程思维,计算思维。实践表明,本文提出的教学改进方法可以激发学生学习的热情和兴趣,有效地提高了C /C + + 语言程序设计课程的教学效果。

摘要:针对C/C++语言程序设计课程语法规则繁琐、概念抽象等特点,结合我校实际情况,通过深入分析课堂教学、上机实验及课程考核等教学环节,从教学方法、实验设计及课程考核三方面提出改进方案,提出了以培养学生计算思维为最终目标,以提高学生学习兴趣,激发学生学习积极性为目的,以“阶梯式”“实例驱动”为教学方法,整合教学团队共同促进教学的模式。通过教学改革,激发了学生对C/C++语言程序设计的学习兴趣,培养了学生的动手实践能力,提高了教学质量水平。

C语言程序设计试题 库 篇3

通过这样一个系统,学生可以随时随地进行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.

c语言试题及答案 篇4

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>=0&&ch<=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 main(){ int m,k,i,n=0;for(m=101;m<=200;m+=2){ if(n==0)printf(“n”);k=sqrt(m);for(i= 2;i<=k;i++)if(m%i==0)break;if(i== k){ printf(“%d ”,m);n++;} } }

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 main(){ int i,t;int a[10]={2,4,6,8,10,1,3,5,7,9};for(i=0;i<=4;i++){ t=a[i];a[i]=a[9-i];a[9-i]=t;} for(i=0;i<=9;i++)printf(“%d ”,a[i]);} 运行结果: 7 5 3 1 10 8 6 4 2 功能描述:

将整型数组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>c&&b+c>a&&a+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,要求显示对应五级制的评定,评定条件如下:

C语言常用笔试题 篇5

1.在X86系统中,如下变量在内存中的字节存放顺序,

DWORD Value1=0x8010011c

UINT Value2=12801

2.ASCII和Unicode有什么区别?汉字是如何显示的?

3.说出你最熟悉的`三种排序方法,用你最熟悉的语言写出其中一种。

4.Bool flag

Floot x 与“零值”比较

Char *p

5.是否了解MVC模式,其中M、V、C各表示什么?

6.列举出你曾经用过或者了解的几种设计模式?

7.int iVal1 = 0, iVal2 = 0;

int * ipVal;

ipVal = &iVal1; What is the Value of ipVal = *ipVal =

ipVal = (int*)iVal1; What is the Value of ipVal = *ipVal =

iVal2 = (int)&iVal1; What is the Value of ipVal = *ipVal =

8.void SwapAB(int A, int B)

{

A=B;

B=A;

}

int main

{

int A,B;

A=1;

B=2;

SwapAB(A,B);

return 0; // A= ?, B= ?

}

What is the value of A and B ?

What is the difference between STRUCTURE and OBJECT ORIENTED PROGRAMMING ?

What is the difference between C and C++ ?

《C语言程序设计》教学探究 篇6

《C语言程序设计》作为计算机专业的基础课, 已经成为一门必修的语言课程, 在整个语言课程体系中占有非常重要的地位。在C语言教学过程中, 从客观上讲, 教师的教法和学生的学法的差异, 对教学效果都会产生很大的影响。针对教师的教法和学生学习语言类课程的学法, 结合近几年来的教学经验和教学体会, 把一些经验和方法总结出来, 希望能对C语言课程的教学和学习有所帮助。

1 分析教学中存在的问题

《C语言程序设计》是一个逻辑性很强的课程。有些问题是将数学知识转化用c语言来实现, 这就要求学生首先要能够理解和掌握数学知识, 才能将其转化用c语言来实现。在调试程序时, 提示的信息都是用英语给定, 那么也就要求学生掌握最基本的英语单词, 有些甚至是计算机专业英语, 能将英语句子翻译为汉语, 才能够对程序加以修改。学生在心里认为c语言难学, 没有积极学习的主动性, 导致上课时没兴趣, 不能专心听讲, 布置的作业无从下手, 在实践课中, 看到要编写的程序题目, 理不出头绪。

2 涉及新的知识要有导入

在教学的过程中, 要将新的知识点, 要有很自然的导入语, 引导学生思考问题和解决问题的方法。例如:scanf (“%d”, &a) ;只能从键盘接受一个整型数, 现在要输入40名学生的成绩, 如何通过一个s canf函数来实现, 难道是要定义40个变量, 那如果要接受100个数呢?更多的呢?为了解决诸如此类的问题我们采用数组来实现。这样也就引导学生思路跟着教师, 给他们提出问题, 在给出解决问题的办法。

3 举一反三

给定一个例子时, 将涉及到的所有内容都要讲到。各种形式, 可能出现的错误都要指定。例如:现在要求n!我们可以给定一下几种形式:

一个例子可以给出多种方法来实现, 在这只给出6中形式, 从这6种中, 就可以看到初值不同, 语句的书写顺序不同。通过一个例子, 让学生能理解各种形式, 遇到诸如此类问题时, 就可以迎刃而解。

4 与实践教学相结合

程序设计课程具有很强的实践性, 对于计算机语言课程的教授不应仅仅是传授知识, 应该以培训能力为主。C语言的内容繁多, 在有限的课时内不可能也不必要面面俱到, 所以必须突出重点, 突出实用性, 关键在于教会学生正确运用C语言编写程序。应始终坚持以应用为中心, 以算法为基础, 以培养学生的实践能力为核心, 突出技术实用性和再学习能力的培养。

摘要:《C语言程序设计》是高职高专院校计算机专业基础课程之一, 其教学效果直接影响学生在计算机方面的应用, 教学中出现的听得懂、编不出程序的现象, 探究问题存在的原因, 从教学的教学内容和方法方面进行了探讨, 提出只有教师的教学内容和教学方法进行合理的组合, 激发学生的学习兴趣才能达到良好的教学效果。

关键词:教学方法,案例教学,启发教学,教学效果

参考文献

[1]朱健, 庞倩超.C语言程序设计案例教程.全国高职高专教育精品规划教材:北京:交通大学出版社.

[2]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息.2008 (1) .

[3]谭浩强.C语言程序设计教程.北京:高等教育出版社.

基于C语言的递归程序设计分析 篇7

关键词 递归;循环;C语言

中图分类号 TP 文献标识码 A 文章编号 1673-9671-(2010)121-0031-01

递归作为一种正对实际问题的程序设计解决方案,在整个编程语言学习及程序设计方面有着极其重要的地位。而在实际的教学环节中对于这样一种具有很高使用价值的编程技术,在讲解上和学生理解上还存在着一定困难。

1 递归的基本条件

循环结构是结构化程序设计的三种结构之一,主要应用在处理某些需要重复执行特定语句的情况下,通常在使用循环时我们需要明确三个重要条件:

1)循环的初始条件。可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的问题的规模有规律地递减。也就是说解决问题的方法相同,调用函数的参数每次不同(有规律地递减),如果没有规律也就不能运用递归方法求解。

2)循环的中止条件(或在什么情况下循环运行)。每个子问题必须比原来问题的规模更小,即使小一号也行,如果能够迅速减小规模更好。

3)程序有趋于结束的趋势。必定要有一个明确的结束递归的条件。当问题的规模达到一定程度时(一般的时候应该是规模足够小),问题的解是已知的,在这个地方能结束递归调用,不然可能导致系统崩溃或陷入死循环。

而递归作为一种算法,在数学上我们时这样定义它的,以n的阶乘为例:

0!=1(*)

n!=n*(n-1) 当n>0时 (**)

其中(*)称为基本实例(基本实例的值必须是直接获得的);(**)称为递归归约。递归被定义为:自身定义为一种含有自身简化的形式。那么从形式上我们可以清楚的看到:①每个递归定义必须有一个(或者多个)基本实例;②递归归约最终归结到基本实例;③在基本实例处停止递归。从中我们不难发现递归的算法形式条件和循环的条件是非常类似的。

那么在运行递归函数时,逻辑上我们可以认为递归函数有无限的自身拷贝,完成某个递归调用后,控制返回到先前的调用环境。这同循环算法在思想上也是异曲同工的。所以我们也完全可以编写一个循环结构来替代递归。

造成这种可替代性的主要原因是因为目前为止的编译系统处理递归函数时,在编译之后都是自动将递归转化为循环的。但是和循环不同的是,编译后的递归需要创建一个内存栈来存储递归过程中的临时变量,对于递归函数的调用和返回操作,则分别对应栈的入栈和出栈。

因此任何一个递归程序都可以通过引入堆栈的形式来转化为循环,这种转化其实就是模拟计算机实现递归的过程。你可以考虑人脑来计算递归的过程:先倒过来向前递归,到达最初点以后再正过来向后递推,堆栈的作用就是记住过程中的临时变量。虽然这样做只不过是模拟递归的执行过程,将原来由编译器实现的事情在程序中用代码实现了一遍,但是确实可以通过循环和堆栈的数据结构特性来实现递归的算法和递归函数的功能。

2 递归问题分析

递归程序最少有两种方法可以写出。第一种是想办法把问题转化为数学表达式,能用数学表达式写出的,可以直接把数学表达式变为程序;第二种是按照递归的基本条件,分析所给问题的结构,一个问题总具有一定的规模,想办法把规模变小,使小规模的问题与原问题具有相同的解法,当规模足够小时,该问题的解是已知的,这时可以套用后面所讲的一般递归程序的结构来写递归程序。

例1:求n!。经过分析n!可以表示为

假定n!是一个long型,则直接写出程序如下:

long func(int n) //求n!

{if(n==1 || n==0)

return 1;

return n*func(n-1);

}

例2:求Fibonacci数列(非波纳契)的第n项,该数列表示如下:

按照例1的方法,写出程序如下:

longfib(int n)

{ if( (n==1||(n==2) )

① return 1;

else

② return fib(n-1)+fib(n-2);

}

如输入n=4,程序(具体程序用行标号代替)的执行过程如图1所示,通过分析以上程序,大部分学生对递归函数的执行过程有了较为清晰的认识。

例3:用递归的方法将一个正整数n按位输出,如输入2008,输出2 0 0 8,n的位数不确定,可以是任意正整数。

分析:①函数应该是处理整数n,并且是输出,用PrintNum(int n)来实现这一功能;②如果n的规模很小(只有1位),可以直接输出后结束程序;(这里应该知道n的位数是问题的规模);③把问题的规模变小,去掉n的某1位(在实际讲解时是去掉个位,因为去掉个位比较容易一些,我们用k=n%10保存个位,n=n/10就可以去掉个位),余下位形成一个新的规模比原数小的数,再在新数上递归调用函数,这个新数按要求输出后,去掉的这一位因为是个位,所以应该把它输出到新数的后面。

通过以上分析,写出程序如下:

void PrintNum(int n)/*该函数能把n按要求输出*/

{ int k;

if(n<10){ printf("%2d",n); return ;} /*如果规模很小,则直接处理后结束程序*/

k=n%10; /*在n中提出个位数字*/

PrintNum(n/10);/*把规模更小的子问题递归调用函数来处理*/

printf("%2d",k);

}

通过以上三个例子,学生对递归函数有了较为清晰的认识,对递归程序的写法有了一定的掌握之后,我们可以总结出一个一般递归程序的结构如下,几乎所有递归程序都可以按照这个结构去分析并写程序。

ReturnType Function(问题描述及规模)/* 在程序内部我们应该认为函数Function已经具备处理这类问题的功能,它可以直接被调用 */

我们根据这个结构,要求学生回过来简单看一下前面的三个例子,多数学生便会对递归有更为深入的认识。之后引入汉诺塔问题,该问题的分析方法类似于例3,并套用这个结构,让学生自己试着写该问题的程序,可以发现有一部分学生能自己写出递归函数来。

3 总结

在C语言中,函数一直是学习的重点和难点,递归又是最难掌握的一类函数,本文从实际教学需要出发,首先分析递归的基本条件,从由易到难的顺序,设计了一些教学实例,重点让学生了解递归函数的写法以及执行情况,最后总结出递归函数的一般程序结构,使学生能正确设计递归程序,在实际教学中取得了良好的效果。

参考文献

[1][美]Robert Sedgewick.C算法(第一卷).人民邮电出版社,2004

青岛科技大学c语言期末考试题1 篇8

5.根据以下说明语句,则下面的叙述中不正确的是_____。struct student { int num;char name[10];int score;}stu;A.struct是定义结构体类型的关键字 B.stu是结构体变量名

C.num, name, score都是结构体成员名 D.stu是结构体类型名

6.已知字母A的ASCII码为十进制数65,变量ch1为字符型,则执行语句ch1=‘A’+‘5’-‘2’;后,ch1中的值是_____。

A.D B.67 C.一个不确定的值 D.C 7.以下哪种方法不能对一维数组进行正确的初始化_____。A.int a[ ]={1,2,3};B.int a[5]={ };C.int a[5]=(1,2,3,4,5);D.int a[ ]={2,3,4*5,6};8.已正确定义字符变量ch1,下面能正确赋值的是_____。A.ch1=“a”;B.ch1=‘a’;

C.ch1=“C语言程序设计”;D.ch1=‘ C语言程序设计’;9.逗号表达式(a=3*4,a*4),a+5 的值是_____。A.53 B.17 C.20 D.48 10.设n为float型,m为int型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入的表达式是_____。

A.n=(n*100+0.5)/100.0 B.n=n*100+0.5/100.0 C.m=n*100+0.5,n=m/100.0 D.n=(n/100+0.5)*100.0 11.设i=2,j=3,则表达式(i++)*(++j)的值为_____。A.6 B.8 C.9 D.12 12.关于以下程序段,说法正确的是_____。x=-1;do { x=x*x;}while(!x);A.死循环 B.循环体执行二次 C.循环体执行一次 D.有语法错误

13.若有下列定义:char c[5],*p=c;则对c数组元素地址的正确引用是_____。A.p+2 B.&c[5] C.c++ D.&c 14.当调用函数时,实参是一个数组名,则向函数传送的是_____。A.数组的长度 B.数组每个元素中的值 C.数组每一个元素的地址 D.数组的首地址

15.文件中利用fopen函数打开文件,如果以只读方式打开二进制文件,则以下打开方式正确的是_____。A.r+ B.rb C.wb D.ab

二、填空题(5个小题,每题2分,共10分):

1.若有int i=1,j=7,a;执行语句 a=i+(j%4!=0);后,a的值是_______。2.执行以下程序后,运行结果是_______。#include void main(){ int a,b;for(a=1,b=1;a<=100;a++){ if(b>=10)break;if(b%3==1){ b+=3;continue;} } printf(“%dn”,a);}

3.源程序中用到了strcat函数,需要包含的头文件(即库文件)为_______。4.执行以下程序后,运行结果是_______。#include void main(){ int a=2;float n=5.888,b;b=a+(int)n;printf(“%fn”,b);}

5.语句 scanf(“a=%d,b=%d”,&a,&b);若将3和4分别输入给a和b,则正确的输入方式为____

三、程序分析题,写出程序的运行结果(5个小题,每题4分,共20分): 1.#include void main(){ int x=1,y=0,a=0,b=0;switch(x){ case 1: switch(y){ case 0: a++;break;case 1: b++;break;} case 2: a++;b++;break;} printf(“a=%d,b=%dn”,a,b);}

2.在运行以下程序时,输入“Turbo C++ 3.0”,写出程序的运行结果。#include void main(){ char str[40];printf(“Input a string:”);scanf(“%s”,str);puts(str);} 3.#include void f(int y){ static int i=5;int j=3;j++;printf(“%d+%d+%d=%dn”,i,j,y,i+j+y);i*=2;} void main(){ int x;for(x=1;x<=2;++x)f(x);} 4.#include void swap(int *pa,int *pb){ int *p;p=pa;pa=pb;pb=p;} void main(){ int a=10,b=20;int *p1=&a,*p2=&b;if(a int a=5;int b=7;int plus(int x,int y){ int z;z=x+y;return(z);} void main(){ int a=4,b=5,c;c=plus(a,b);printf(“a+b=%dn”,c);}

四、程序填空题,将下面程序补充完整(10个填空,每空2分,共20分): 1.输出九九表。#include “stdio.h” void main(){ int i,j;for(i=1;i<=9;i++){for(j=1;①;j++)

printf(“%3d*%d=%2d”,i,j,i*j);②;} } 2.利用函数形式,求x数组所有元素的平均值并输出。#include “stdio.h” ①;

void main(){ float avg,x[10]={1.2,3.6,4.5,5.1,6.9,7,8,9,10.5,11.3};avg=average(x);printf(“The average is %5.2fn”,avg);} float average(float a[10]){ int i;float sum=0;for(i=0;i<10;i++)sum=sum+a[i];②;} 3.编写一个计算字符串长度的函数length。#include “stdio.h” void main(){ char str[20];int m;int length(char *p);printf(“Input a string:n”);gets(str);①;

printf(“n the length of str is%d ”,m);} int length(char *p){ int n=0;while(②){ n++;p++;} return n;} 4.输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。#include “stdio.h” void main(){ int i,n=10,a[10];float avg=0;for(i=0;i=‘A’&&*cp<=‘Z’)①;

else if(*cp>=‘a’&&*cp<=‘z’)*cp=*cp-32;②;} puts(str);}

五、程序设计题(3个小题,共20分):

1.设三个整型变量a,b,c,编写程序为a,b,c输入数据,并要求a,b,c按由小到大排序后输出。(5分)2.学生成绩可分为五分制与百分制,编程将百分制转换为五分制输出。(5分)3.编写排序函数sort(int a[ ]),实现对数组a中的元素进行排序,并利用该函数,从键盘输入若干个数(如10个)将其按升序排列。(10分)

第一套试题

一、单项选择题(15个小题,每题2分,共30分): 1-5:AABCD 6-10:ACBBC 11-15:BCADB

二、填空题(5个小题,每题2分,共10分): 1.2 2.4 3.string.h 4.7.000000 5.a=3,b=4

三、程序分析题,写出程序的运行结果(5个小题,每题4分,共20分): 1.a=2,b=1 2.Turbo 3.5+4+1=10 4.10,20 5.a+b=9 10+4+2=16

四、程序填空题,将下面程序补充完整(10个填空,每空2分,共20分): 1.①j<=i ②printf(“n”)

2.①float average(float a[10])或 float average(float a[ ])②return(sum/10)

3.①m=length(str)②*p!=‘’ 或 *p 4.①i%3==0 ②avg+=a[i] 或 avg=avg+a[i] 5.①*cp=*cp+32或*cp=*cp+‘a’-‘A’ ②cp++

五、程序设计题(3个小题,共20分): 1.#include “stdio.h” void main(){ int a,b,c,t;printf(“input a,b and c:”);scanf(“%d%d%d”,&a,&b,&c);„„1分 if(a>b){ t=a;a=b;b=t;} „„3分 if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf(“%d%d%d”,a,b,c);„„1分 } 2.#include “stdio.h” void main(){ float score;printf(“Input a score:”);scanf(“%f”,&score);

while(score>100||score<0)„„2分

上一篇:京卡.互助服务卡功能简介下一篇:《母亲的恩情》读后感600字优秀