c语言程序设计题集(共10篇)
⒈36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块。要一
次搬完。问:男、女、小孩要多少?
⒉ 找出1000以内的完数,所谓完数是指该数的各因子之和等于
该数,如6=1+2+3。
⒊证明6到200以内的数,符合哥德巴赫猜想(一个大于6的偶
数,可以分解成两个质数之和)。
⒋奇妙的算式:用字母代替十进制数字写出如下算式.EAGL
L
请找出这些字母代表的数字.LGAE
⒌求自然数m和n的最大公约数(用while循环实现)。提示:①比较m和n的大小,如n>m,两者交换; ②求m被n除的余数k;
③如果k为0,除数n为最大公约数;
④如果k不为0,原除数作为新的被除数m,余数作为新除数,继续②。
⒍用迭代法求cosX。
⒎求Fibonacci级数
1,1,2,3,5,8,13,21,34….⒏用牛顿迭代法求方程f(x)=0的根。(必做!)
⒐通过梯形法求y = (x2x3)dx2
0 输出结果。
⒑求1000以内能被73或127整除的自然数平方根之和。⒒求100----200之间的所有能被3以及7整除的自然数的平方根
之和。
⒓求级数a=2/1 + 3/2 + 5/3 +8/5 +13/8+21/13…的前30项之和。⒔求数列41+n(n –1)最小非素数项的序号(n > 2)。
⒕求满足以下条件的数:
该数大于100小于1000;
其个位数与十位数的平方和等其百位数的立方。
⒖求级数e=1+1/1!+1/2!+1/3!+…
要求:求n项(n由键盘输入)或最后一项小于10-6结束。⒗输入三边a、b、c判断是否能构成三角形,如能构成三角形,要求通过海伦公式计算其面积。
注:⑴海伦公式
sp(pa)(pb)(pc),pabc
⑵构成三角形的条件:任意两边只和大于第三边。
⒘求1500内的最大五个素数之和。
⒙一包海鲜单价为46.5元,如果购买100包至300包则按95%优
惠;若购买301包至500包,则按85%优惠;如果购买501包至1000
包,则按80%优惠;若购买1000包以上,按70%优惠。试编写一个
计算顾客购买X包海鲜所需金额,且打印购买数量、单价和总金额的程序。
⒚编程输出1~1000中所有个位数是7的素数,统计其个数,并
求满足该条件数的和,输出结果。
⒛编写程序求:
y11
121
23...1
n(n1)
21.父亲今年30岁,儿子今年6岁,问多少年后,父亲的年龄是 儿子的2倍?
22.将1元人民币换成5分、2分、1分的硬币有多少种换法?
23.一只猴子摘了一堆桃,每天吃一半再加1个,第10天去吃时只剩1个桃,问第一天的一堆桃有多少?
24.一个4位数,逆向排列后是原4位数的倍数,求出符合条件的4位数。
25.一个球从100米高度落下,每次反弹回原高度的一半,求第 10次落地时球的行程及下次反弹的高度。
26.输出公元1000年至今所有闰年。
闰年的条件自查!
27.用三种不同的方法计算。(方法自选三种)
28.用连分数求:
21
2
2
21111
2...29.某地刑警大队对涉及6个嫌疑人的一桩疑案进行分析:⑴ A、B至少有1人作案;
⑵ A、E、F,3人中至少有2人参与作案;
⑶ A、D不可能是同案犯;
⑷ B、C或同时作案,或都与本案无关;
⑸ C、D中有且仅有一人作案;
⑹ 如果D没有参与作案,则E也不可能参与作案。编程找出作案人。
30.阿米巴用简单分裂的方式繁殖,它每分裂一次要用 3 分钟。将若干个阿米巴放在一个盛满营养参液的容器内,45 分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴 220个。试
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++语言程序设计的学习兴趣,培养了学生的动手实践能力,提高了教学质量水平。
关键词:教学方法案例教学启发教学教学效果
0 引言
《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的语言课程,在整个语言课程体系中占有非常重要的地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生很大的影响。针对教师的教法和学生学习语言类课程的学法,结合近几年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言课程的教学和学习有所帮助。
1 分析教学中存在的问题
《C语言程序设计》是一个逻辑性很强的课程。有些问题是将数学知识转化用c语言来实现,这就要求学生首先要能够理解和掌握数学知识,才能将其转化用c语言来实现。在调试程序时,提示的信息都是用英语给定,那么也就要求学生掌握最基本的英语单词,有些甚至是计算机专业英语,能将英语句子翻译为汉语,才能够对程序加以修改。学生在心里认为c语言难学,没有积极学习的主动性,导致上课时没兴趣,不能专心听讲,布置的作业无从下手,在实践课中,看到要编写的程序题目,理不出头绪。
2 涉及新的知识要有导入
在教学的過程中,要将新的知识点,要有很自然的导入语,引导学生思考问题和解决问题的方法。例如:scanf(“%d”,&a);只能从键盘接受 一个整型数,现在要输入40名学生的成绩,如何通过一个scanf函数来实现,难道是要定义40个变量,那如果要接受100个数呢?更多的呢?为了解决诸如此类的问题我们采用数组来实现。这样也就引导学生思路跟着教师,给他们提出问题,在给出解决问题的办法。
3 举一反三
给定一个例子时,将涉及到的所有内容都要讲到。各种形式,可能出现的错误都要指定。例如:现在要求n!我们可以给定一下几种形式:
(1)main()(2)main()
{ int i=1,n;{inti=1,n;
doubles=1; doubles=1;
scanf("%d",&n); scanf("%d",&n);
while(i<=n) do{ s*=i;
{s*=i;i++;
i++;} }while(i<=n);
printf("%lf",s); printf("%lf",s):
} }
(3)main()(4)main()
{inti,n ; {int i,n;
double s=1;doubles=1;
scanf("%d",&n); scanf("%d",&n);
for(i=1;i<=n;i++)i=n;
s*=i;while(i>=1)
printf("%lf",s); {s*=i;
} i--;}
printf("%lf",s);}
(5)main() (6)main()
{intI,n; { inti=0,n;
doubles=1; doubles=1;
scanf("%d",&n); scanf("%d",&n);
i=n; while(i<=n)
for(i=n;i>0,i--) {i++;
s*=I;s*=i;}
printf("%lf",s);}printf("%lf",s);}
一个例子可以给出多种方法来实现,在这只给出6中形式,从这6种中,就可以看到初值不同,语句的书写顺序不同。通过一个例子,让学生能理解各种形式,遇到诸如此类问题时,就可以迎刃而解。
4 与实践教学相结合
程序设计课程具有很强的实践性,对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序。应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。
参考文献:
[1]朱健,庞倩超.C语言程序设计案例教程.全国高职高专教育精品规划教材:北京:交通大学出版社.
[2]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息.2008(1).
[3]谭浩强.C语言程序设计教程.北京:高等教育出版社.
一、选择题(2’*20=40’)
1、c程序由构成。
A.函数B.命令C.程序D.表达式
2、以下选项中合法的变量名是
A.#y2B.a
A.floatB.charC.intD.double4、在我们使用的turboC中,一个int型数据在内存中占个字节
A.0B.1C.2D.45、若有定义:int a=8,b=5,c;执行语句c=ab+0.4后c=
A.1.4B.1C.2.0D.26、在c语言中,char型数据在内存中的存储形式是
A.补码B.ASSCIIC.原码D.反码
程序设计,大学之前,对我们来说,一个很陌生、很神秘的东西!以前接触电脑,觉得电脑玩游戏很好玩,可是从来没有想过,设计一个游戏是多么困难啊,当我对C语言有一定了解的时候,才开始佩服那些设计游戏的人,一个小小的C语言程序,可以让很多大一点学生痛苦难当!可是他们却可以完成一个游戏的设计,真的很不容易!经过C语言的学习和这次实习设计程序,让我对C语言有了一个更深刻的了解和认识!
以前长辈给我们说,学习知识才是你们以后好的生活的保证,我总是不以为然,觉得没有知识,也是可以很好的生活,也就边玩边学,可是通过这次C语言的程序设计,我认识到,没有扎实的知识做基础,很难完成很多工作,想想也对啊,现在是一个科技高度发达的社会,没有科学文化知识做基础,我们如果能很好的完成一项工作呢?作为当代大学生,努力学习文化知识,才是我们现在的任务,只有让自己更有实力,以后才会对社会有贡献!
我是一个自我中心的人,从前总认为,不管什么事情,只要我一个人就可以做好,做完,可是通过这次的程序设计,让我认识到自己的不足,一个大的工程,一个人是没有办法独立完成的,虽然这个程序不是很大,但是我还是遇到了很多的困难,有很多我不会的地方,开始的时候我觉得一个人找资料也是可以解决的,可是后来才发现,那样我的效率很低,很多问题我不懂,我周围有很多人懂,只要我问一下,很快就可以解决,也让我改变了想法,应该和周围的人合作,努力的让自己更有实力,办事效率也会提高!
这次我主要设计的是一个关于学生成绩统计的程序,这个程序的特点就是简便、快捷!让你可以很快的进行添加学生成绩,一个一目了然的主菜单,让你可以看好的找到你要操作的项目!进而可以加快做事效率,添加、删除,都可以很好的做到,也可以让你查看所有的学生成绩!
考试形式:试卷(全国统一 4月第二个星期六9月倒数第二个星期六)
笔试: 满分100分60分及格 时间:90分钟内容: 70分 C语言知识30分 公共基础
选择题:60分 前10个 2分/个 后40个 1分/个
填空题:40分 20空2分/空
上机考试:分批考试满分100分时间:90分钟
填空:3空10分/空
改错:2错误 15分/错
编程:1题40分
结构化程序设计:一个程序语句总是由顺序选择循环三种结构组成模块化程序设计:将一个大的任务分解成若干个小任务,再将小任务划分为更小的任务,直到每一个小任务都只完成一个独立的功能,每一个任务叫做一个模块,一个程序由多个模块。C语言中将模块叫做函数,所以一个C语言程序是由多个函数组成,各个函数之间是相互平等、独立的。
简单的C语言程序:
一个程序中有并且只能有一个主函数main
程序总是从主函数开始执行, 从主函数结束
函数由语句组成;语句:都用分号结束,分号是语句的标志
说明部分必须在前面,执行部分必须在后面
/*注释内容*/说明解释不是程序的一部分可有可无
注释不能嵌套:注释中不能再有注释
以#开头的叫做编译预处理命令,编译预处理命令单独占据一行
#define宏定义
定义一个字符代替某一个内容
#define N 100
在程序中将所有单独的标识符号N用100替代
C语言源程序 编译目标程序链接可执行程序
1 汇编语言与C语言的混合编程方法
1.1 C语言调用汇编语言子程序
在C语言程序中调用汇编指令较多的情况下可以采用直接调用汇编语言子程序的格式, 而且由于C语言编译系统要具有约定的段序以及规定的段组合。因此, 要实现C语言对汇编语言子程序的调用, 汇编语言必须严格遵守编译系统的约定或要求的组合和段顺序。C语言调用汇编子程序必须遵循以下规则。
一是程序内需要使用“EXTERN”关键对函数显示进行说明, 并将此作为建立C语言与汇编子程序的接口, 而且函数的名字必须在8个字符以内, 而且函数名设置为下划线格式。二是根据参数在参数标准的顺序, 依据反序作顺序, 依次将参数压入栈中。最后一个参数首先进栈, 最后一个参数在栈中的地址最高。三是依据参数的值进行传递;四是对代码段进加以说明, 并且使用—TEXT作为加代码段命名原则。过程名前加下划线, 并且是公共过程pulic-过程名。根据C程序模式大小确定汇编使用远过程或近过程, 小模式对应近过程, 大模式对应远过程。五是汇编程序的参数取C程序的参数。由于远过程在返回地址时需要占用4个字符, BP压入需要占用2个字符, 因此首个参数需要位于BP+6指向的远远。而近过程第一个参数则位于BP+4指向的单元。六是汇编程序需要兼顾保护寄存器。C语言调用编程语言子程序会导致寄存器变量超过2个, 而多余部分会自动转入栈中存储。因此, 汇编过程必须严格遵守以下开头和结尾格式:
PUSH BP
MOV BP, SP
PUSH SI
PUSH DI
语句
POP SI
POP BP
RET
1.2 汇编语言调用C语言子程序
由于汇编语言的巨大优势, 在汇编程序中可以实现调用C语言子程序。汇编语言调用C语言子程序不需要改变汇编语言主程序和子程序的格式, 只需确保主程序和子程序的格式相同, 并且在程序开始前加入“EXTREN函数名”即可。表明该函数是用来调用C语言子程序的外部函数。而对外部函数可通过主过程中CALL语句进行调用, 并将CALL语句格式设置为“CALL NEAR PTR函数名”。如果子程序为C语言子程序, 并且C语言子程序中只包含C函数, 则不需要使用EXTERN说明。
1.3 C语言程序嵌入汇编语言
C语言嵌入汇编语言中有C程序调用汇编子程序模块以及在C程序中嵌入汇编指令两种。两种嵌入方式分别应用在不同的情况。
第一, C程序条用汇编子程序模块的嵌入方式中的模块划分原则:为完成任务的需求, 每个模块的体现形式为函数或者过程, 再根据模块的特点选择编写语言进行编写。如果主程序的编写包含C语言, 而模块使用汇编语言进行编写, 则需要使用C程序调用汇编子模块。具体操作方法为分别编写汇编C主程序和汇编子程序, 并依据各自的特点形成符合自身编写语言的目标代码模块, 再将目标代码模块相互连接从而形成最终的可执行文件, 通过执行可执行文件即可实现C程序调用汇编子程序模块。
第二, 在C程序中嵌入汇编指令多用于C语言无法实现对硬件控制的情况。例如对寄存器的值、中断标志寄存器的修改、重复使用某种功能、对时间的要求等等, 可通过在C程序中嵌入汇编指令去实现。使用C程序中嵌入汇编指令时需要注意换行符、寄存器的命名、修改编译连接的命令以及拷贝MASM EXE程序, 存储在Turbo C目录下, 并命名为TASM.EXE进行编译。
2 C语言与汇编语言连接的关键问题
混合使用汇编语言和C语言进行编程还需要解决参数传递、调用关系的确定以及汇编程序与C程序的模块连接三个问题。
在参数传递上, 参数传递是混合编程过程中必须解决的问题, 通常情况下采用堆栈实现参数传递。首先, 将汇编语言中的BP作为基址寄存器, 调用程序将按照反序C语言中的参数压入堆栈中, BP加上不同的偏移量就可以实现对参数的使用。
在调用关系的确定上, 需要实现说明需要调用的函数或过程, 并建立相应的调用及被调用关系。其中被调用的函数或过程为外部类型, 可被外部模块引用。调用程序内也需要说明被引用外部模块的名称。
在汇编程序与C程序的模块连接上, 为确保正确连接, 不仅需要确保不同语言模块的存储模式具有一致性, 还需要汇编模块遵守C兼容的函数和变量命名约定。
3 结语
汇编语言和C语言具有不同的优点和缺陷, 混合汇编语言和C语言进行编程可取长补短, 同时发挥两种语言的优势, 并且弥补两种语言的不同, 实现参数传递、数据共享, 而且具有事半功倍的效果。
摘要:汇编语言和C语言是两种不同的编程语言, 软件开发过程中采用两种语言混合程序设计技术可以极大的提高工作效率以及程序的性能。文本首先简单介绍C语言调用汇编语言子程序、汇编语言调用C语言子程序、C语言程序嵌入汇编语言三种常见的混合编程方法, 在混合编程中还需要注意参数传递、调用关系的确定以及汇编程序与C程序的模块连接三个问题。
关键词:汇编语言,C语言,混合程序设计
参考文献
[1]杜钦生, 楚叶峰, 唐伎玲.基于ARM的汇编语言与C语言混合编程的方法研究[J].长春大学学报, 2011 (10) .
[2]柴孝.C语言与汇编语言的混合程序设计技术[J].信息与电脑 (理论版) , 2011 (11) .
[3]林法.基于汇编语言与C/C++语言混合编程的设计研究[J].电子技术与软件工程, 2014 (04) .
关键词 C语言 程序设计 教学方法
中图分类号:G648.2文献标识码:A文章编号:1002-7661(2011)09-0028-02
C语言是计算机专业和相关专业一门很重要的专业基础课,学好C语言为数据结构等后继课程有很大帮助。但是对于高职学生,数学、英语等基础知识较差,而C语言又作为他们面临的第一门语言类课程,因而学习C语言具有很大的难度。本文结合本人几年来的教学经验,对怎样提高C语言教学质量,如何让学生掌握好C语言基础知识点提出几点看法。
一、创设情境,激发学生学习兴趣
大多数学生对新课程都很感兴趣,都很想学好这门课,所以上好第一节C语言课是一个很好的开始。C语言有很多语法和知识点需要掌握,但是如果第一节课就开始介绍C语言的知识点,不但得不到好的收效,还会让学生因为知识枯燥,不易理解而失去学习本课程的兴趣。上第一节课,先讲授C语言这门课程的重要性以及在计算机课程中的地位,然后给学生演示几个简单的游戏,比如:小型运算器,俄罗斯方块,贪吃蛇等,告诉他们这些都可以用C语言来编写。通过这些实例的引入,可以让学生了解到C语言的实用性,激起学生学习的兴趣。
二、注重教学过程,采用多种教学手段
在教学过程中,把知识点融合在实例中,加强学生对知识点的理解,本人在教学过程中采用以下相应方法:
1.深入浅出
C语言主要包括C语言语法、结构化程序设计、数组、函数、指针、文件等。教材一般都会归纳,但是如果把每一块放在一起讲,难点就比较多。比如,C语言的数据类型很丰富,如果全部放一起讲,学生肯定很难记住,所以可以先讲3种基本数据类型、运算符及相关表达式,再通过一个简单程序,输入输出数据。这样子,学生就逐渐掌握了基本数据类型、定义变量,以及输入输出函数的基本使用。对于一些比较难以理解的概念,可以借用比喻来解释,比如在讲到变量的时候,包括变量的地址、变量名、变量值,在课堂上借用教室打个比方:10网构班(变量名)在实验楼302(变量地址)有45个学生(变量值)。这样学生在定义变量的时候就不会那么抽象了。
2.画出流程图
做任何事情都有一定的步骤,这些步骤是按一定的顺序进行的,缺一不可,如果你对一个问题没有任何思路的话,那肯定编不出程序。在解题的时候,可以先画出流程图,再编程序。如:将50名学生中成绩高于80分的成绩打印出来,可画出流程图如下:
3.先复习旧知识,再导入新课
新内容的导入方法很重要,新课前先回顾复习学过的知识点,从旧知识的某一个点出发,提出和新内容相关的问题,让学生思考,并可适当提问,这样可激发学生思考的积极性。在课堂气氛活跃的情况下,教师适当引导,导入新的知识,这样的讲法可以激发学生的兴趣,使学生更容易接受和理解新知识。
4.任务驱动
每节课开始的时候,可以根据需要布置一些问题,让学生带着相关的问题听课,也可让学生自己思考、归纳,或者互相讨论,这样学生会更有目的性和方向性地听讲。
如:在循环结构for语句中,可以设置三个驱动任务:(1)for语句的一般形式;(2)for语句的执行过程;(3)for语句三个表达式代表的含义,三个表达式能否省略?
5.讲解实例,举一反三
对于C语言程序设计这门课来说,精心设计一些实例,用实例来使概念形象化,深化理解 ,通过教师的分析讲解,使学生更容易入手。然后我们可以对这个简单实例提出新的问题、新的改善方案,引导学生参与对现有程序的修改中来。对于学生的改进方案,教师可引导全体学生来评价优劣,找出其优点,修改其错误,逐步完善,不断优化。这样可以调动学生自主学习积极性,用实例教学加强师生互动。
比如可以在平常写的实例中设置一些待解决的错误,如:故意将赋值符号“=”和等号“= =”互换,漏写分号“;”和大括号“{ }”,引导学生在编程和调试过程中逐一发现并解决这些问题,不仅能够巩固理论知识、养成编程的好习惯,更能调动学生思考问题和解决问题的积极性。同时在解决问题的过程中使学生有一种成就感,这对学习能力的提高和积极性的培养有很好的作用。
6.总结知识点
在课堂讲解过程中,知识点是比较零散的,学生对每个知识点理解了,但对各个知识点之间的联系并不一定理解,缺少一种知识的连贯性,不利于理解和记忆。所以,在每次课结束之前,用几分钟的时间把本次课内容所涉及的知识点回顾一遍,这种回顾既以复习知识点为主,又要讲解其间的联系。当课堂教学内容以一个整体的形式被串联起来后,学生的理解就会加深。如:在讲运算符的时候,每类运算符都有自己的优先级和结合方向,一个一个比较零散,所以在讲完运算符后,可以归纳所有运算符间的优先级和结合方向。
三、引导学生自主学习,培养学生实践能力
程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行。对于学生来说,一定要重视实践环节,包括编程和上机。对于教师来说,一定要引导学生自主学习,做好课程设计。
1.上机准备
教师要事先设计好实验内容,内容要尽量引用之前所讲的知识点,避免涉及后续章节的知识,难易适中,由浅入深。课前可先给学生演示一下实验的最终效果,概括本实验包括的知识点,提醒学生对每一个操作的结果仔细观察和详细记录。学生在操作中遇到问题,教师应启发学生独立思考,引导学生去发现问题、分析问题和解决问题,培养学生的动手能力,让学生亲自观察和体验程序设计的成功感受,加深对知识的理解。最后,学生要书写实验报告。上机结束后,教师要督促学生及时总结实践经验,将实验中碰到的问题及解决的方法记录在实验报告上。教师根据每一次上机的整体情况,对学生中出现的共性问题进行讲解。
2.课程设计
可以让学生分组实现一个具体课程设计,在本课程结束的前几周完成课程设计,加深学生对本课程的总体理解。本人认为,在学校中学习程序设计的目的是进行程序设计及基本训练,而不是要求学生立即编写大型程序,或今后一辈子只用这门语言。所以,布置课程设计时,要把精力放在本课程最基本、最常用的内容上,开始时,不要在每个细节上死背死抠,在有一定基础后,再通过实践熟练掌握。
教好C语言是一项艰巨的任务,在教学过程中,要深入浅出,以学生为主体,以教促学,学以致用,引导学生在学习过程中掌握编程技巧,调动学生学习的主动性和积极性。
参考文献:
[1]唐淑玲.高职C语言程序设计教学效果探析[J].中国校园导刊,2011,(1).
[2]由杨.高校计算机C语言实验教学方法初探[J].中国期刊,2009,(1).
《C语言程序设计》教学总结
C语言是计算机专业的一门专业课,它以其处理功能丰富,表达能力强,使用方便灵活,执行效率高,既具有高级语言的特点,又具有汇编语言的特点,因而成为国内外使用较广泛的语言之一。本人于2002-2003第二学期担任本课程的教学,在教学中注重面向应用、重视实践、结合成人学生的特点由于此课程是该班开的第一门语言课,因此在讲授中按照循序渐进、逐步深入的原则来安排、难点分散使学生不会感到太困难,从而树立学习的自信心。经过一学期的教学实践,学生基本掌握了C语言的基本内容,会编写简单的C语言程序,为后续课程奠定了基础。
二零零三年六月
1)字符串操作
strcpy(p, p1)复制字符串
strncpy(p, p1, n)复制指定长度字符串 strcat(p, p1)附加字符串
strncat(p, p1, n)附加指定长度字符串 strlen(p)取字符串长度 strcmp(p, p1)比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n)比较指定长度字符串 strchr(p, c)在字符串中查找指定字符 strrchr(p, c)在字符串中反向查找 strstr(p, p1)查找字符串
strpbrk(p, p1)以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 strspn(p, p1)以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移
strcspn(p, p1)以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移
* 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符
2)字符串到数值类型的转换
strtod(p, ppend)从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。
strtol(p, ppend, base)从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整
型进制,设置为 0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0 前缀以解释为八进制格式整型 atoi(p)字符串转换到 int 整型 atof(p)字符串转换到 double 符点数 atol(p)字符串转换到 long 整型
3)字符检查
isalpha()检查是否为字母字符 isupper()检查是否为大写字母字符 islower()检查是否为小写字母字符 isdigit()检查是否为数字
isxdigit()检查是否为十六进制数字表示的有效字符 isspace()检查是否为空格类型字符 iscntrl()检查是否为控制字符 ispunct()检查是否为标点符号 isalnum()检查是否为字母和数字 isprint()检查是否是可打印字符
isgraph()检查是否是图形字符,等效于 isalnum()| ispunct()
4)函数原型
原型:strcpy(char destination[], const char source[]);功能:将字符串source拷贝到字符串destination中 例程:
#include
void main(void){
char str1[10] = { “TsinghuaOK”};
char str2[10] = { “Computer”};
cout <
注意:在定义数组时,字符数组1的字符串长度必须大于或等于字符串2的字符串长度。不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。所有字符串处理函数都包含在头文件string.h中。
strncpy(char destination[], const char source[], int numchars);strncpy:将字符串source中前numchars个字符拷贝到字符串destination中。strncpy函数应用举例
原型:strncpy(char destination[], const char source[], int numchars);功能:将字符串source中前numchars个字符拷贝到字符串destination中 例程:
#include
char str1[10] = { “Tsinghua ”};
char str2[10] = { “Computer”};
cout <
原型:strcat(char target[], const char source[]);功能:将字符串source接到字符串target的后面
例程:
#include
char str1[] = { “Tsinghua ”};
char str2[] = { “Computer”};
cout <
原型:strncat(char target[], const char source[], int numchars);功能:将字符串source的前numchars个字符接到字符串target的后面 例程:
#include
char str1[] = { “Tsinghua ”};
char str2[] = { “Computer”};
cout <
原型:int strcmp(const char firststring[], const char secondstring);功能:比较两个字符串firststring和secondstring 例程:
#include
void main(void){
char buf1[] = “aaa”;
char buf2[] = “bbb”;
char buf3[] = “ccc”;
int ptr;
ptr = strcmp(buf2,buf1);
if(ptr > 0)
cout <<“Buffer 2 is greater than buffer 1”<
else
cout <<“Buffer 2 is less than buffer 1”<
ptr = strcmp(buf2,buf3);
if(ptr > 0)
cout <<“Buffer 2 is greater than buffer 3”<
else
cout <<“Buffer 2 is less than buffer 3”<
原型:strlen(const char string[]);功能:统计字符串string中字符的个数 例程:
#include
cout <<“The length of the string is :”<
void *memset(void *dest, int c, size_t count);将dest前面count个字符置为字符c.返回dest的值.void *memmove(void *dest, const void *src, size_t count);从src复制count字节的字符到dest.如果src和dest出现重叠, 函数会自动处理.返回dest的值.void *memcpy(void *dest, const void *src, size_t count);从src复制count字节的字符到dest.与memmove功能一样, 只是不能处理src和dest出现重叠.返回dest的值.void *memchr(const void *buf, int c, size_t count);在buf前面count字节中查找首次出现字符c的位置.找到了字符c或者已经搜寻了count个字节, 查找即停止.操作成功则返回buf中首次出现c的位置指针, 否则返回NULL.void *_memccpy(void *dest, const void *src, int c, size_t count);从src复制0个或多个字节的字符到dest.当字符c被复制或者count个字符被复制时, 复制停止.如果字符c被复制, 函数返回这个字符后面紧挨一个字符位置的指针.否则返回NULL.int memcmp(const void *buf1, const void *buf2, size_t count);比较buf1和buf2前面count个字节大小.返回值< 0, 表示buf1小于buf2;返回值为0, 表示buf1等于buf2;返回值> 0, 表示buf1大于buf2.int memicmp(const void *buf1, const void *buf2, size_t count);比较buf1和buf2前面count个字节.与memcmp不同的是, 它不区分大小写.返回值同上.char *strrev(char *string);将字符串string中的字符顺序颠倒过来.NULL结束符位置不变.返回调整后的字符串的指针.char *_strupr(char *string);将string中所有小写字母替换成相应的大写字母, 其它字符保持不变.返回调整后的字符串的指针.char *_strlwr(char *string);将string中所有大写字母替换成相应的小写字母, 其它字符保持不变.返回调整后的字符串的指针.char *strchr(const char *string, int c);查找字 串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针, 指向字符c在字符串string中首次出现的位置, 如果没有找到, 则返回NULL.char *strrchr(const char *string, int c);查找字符c在字符串string中最后一次出现的位置, 也就是对string进行反序搜索, 包含NULL结束符.返回一个指针, 指向字符c在字符串string中最后一次出现的位置, 如果没有找到, 则返回NULL.char *strstr(const char *string, const char *strSearch);在字符串string中查找strSearch子串.返回子串strSearch在string中首次出现位置的指针.如果没有找到子串strSearch, 则返回NULL.如果子串strSearch为空串, 函数返回string值.char *strdup(const char *strSource);函数运行中会自己调用malloc函数为复制strSource字符串分配存储空间, 然后再将strSource复制到分配到的空间中.注意要及时释放这个分配的空间.返回一个指针, 指向为复制字符串分配的空间;如果分配空间失败, 则返回NULL值.char *strcat(char *strDestination, const char *strSource);将源串strSource添加到目标串strDestination后面, 并在得到的新串后面加上NULL结束符.源串strSource的字符会覆盖目标串strDestination后面的结束符NULL.在字符串的复制或添加过程中没有溢出检查, 所以要保证目标串空间足够大.不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strncat(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符添加到目标串strDest后.源串strSource的字符会覆盖目标串strDestination后面的结束符NULL.如果count大于源串长度, 则会用源串的长度值替换count值.得到的新串后面会自动加上NULL结束符.与strcat函数一样, 本函数不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strcpy(char *strDestination, const char *strSource);复制源串strSource到目标串strDestination所指定的位置, 包含NULL结束符.不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strncpy(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符复制到目标串strDestination所指定的位置.如果count值小于或等于strSource串的长度, 不会自动添加NULL结束符目标串中, 而count大于strSource串的长度时, 则将strSource用NULL结束符填充补齐count个字符, 复制到目标串中.不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strset(char *string, int c);将string串的所有字符设置为字符c, 遇到NULL结束符停止.函数返回内容调整后的string指针.char *strnset(char *string, int c, size_t count);将string串开始count个字符设置为字符c, 如果count值大于string串的长度, 将用string的长度替换count值.函数返回内容调整后的string指针.size_t strspn(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外)在string串中首次出现的位置序号.返回一个整数值, 指定在string中全部由characters中的字符组成的子串的长度.如果string以一个不包含在strCharSet中的字符开头, 函数将返回0值.size_t strcspn(const char *string, const char *strCharSet);查找strCharSet串中任何一个字符在string串中首次出现的位置序号, 包含字符串结束符NULL.返回一个整数值, 指定在string中全部由非characters中的字符组成的子串的长度.如果string以一个包含在strCharSet中的字符开头, 函数将返回0值.char *strspnp(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外)在string串中首
次出现的位置指针.返回一个指针, 指向非strCharSet中的字符在string中首次出现的位置.char *strpbrk(const char *string, const char *strCharSet);
【c语言程序设计题集】推荐阅读:
c语言设计程序11-11
c语言递归程序11-06
c语言程序设计实验11-19
c语言源程序10-03
c语言程序设计作业三06-24
C语言图形程序设计报告10-13
c语言程序设计基础题10-28
c语言程序设计补充题11-17
c语言程序设计大作业11-21
汉诺塔c语言程序07-15
注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:iwenmi@163.com