第一篇:C语言程序设计教学研究论文
1以问题为导向的《C语言程序设计》的教学设计
(一《)C语言程序设计》的教学目标
社会对于人才的需要,并不是要求他们只要学会理论知识就可以,各个单位对人才的要求更看重于他们的实践能力,要求他们能够把所学习过的知识转化为动手能力与实际解决问题的能力。因此,对于学生的《C语言程序设计》课程的教学只是进行理论知识的教育是远远不够的,还有提升学生的综合能力。学生要达到的认知类目标包括:掌握C语言程序设计课程相关的基本概念;理解解决问题的基本技巧;理解标记控制循环与计数控制循环;把握程序性的知识,并学会如何应用。学生要达到的能力类的目标包括:掌握C语言程序设计的基本技能,进行程序计算;熟练运用与、或、否命题,以此来解决实际中的程序问题;熟练运用一些基本的逻辑运算符;能够使用break和continue程序控制语句;学会编写基本字符模式下的简单程序;另外还有培养学生动手实践能力和与他人合作的能力。除此之外,还有培养学生学习C语言程序设计的兴趣,养成学习工作中严谨、务真求实的良好态度,培养解决程序问题的开放性思维。
(二《)C语言程序设计》教学策略设计
对学生进行C语言程序设计的教育,其最终目的就是要让学生掌握这门课程,并且运用到实际工作中,而教学策略的设计,就是为了在最短的时间内,让学生掌握更多的知识,并且将其转化为自身的实践能力。(1《)C语言程序设计》的教学方法教学方法多种多样,其中讲授法、谈话法、演示法、实践法等最为常见。教师在选择教学方法的时候,要充分考虑教学大纲的要求和教材中的内容,还要考虑学生的学习情况与学习能力,以及现有的教学条件,从而选择最适合教学工作的一种方法。同样的教学方法,对于某一个班级的学生合适,对于另外一个班级也许就不适用,因为每个班的学习氛围不同,同理,对于某一位学生教学方法很恰当,而对另外一个学生来说,可能就是阻碍学习的因素。因此,教师在教学过程中要对各个方面影响教学效果的因素进行充分的考虑。对学生的教学工作,可以采取分组教学的形式,这种方法不但可以让教师能够更大程度上关注到每一位学生的学习情况,还能够通过小组间学生相互帮助,分享交流学习经验,从而获得更多提高成绩的机会。另外,学生之间的交流要比学生与教师之间的交流更为顺利,学生之间相互学习更容易发现自身的优势与不足之处,从而把自己的学习经验分享给其他人,同时向其他同学学习自己没有掌握的知识。小组教学还能够增强学生的交流能力,加强学生之间的人际关系,培养学生的团队合作能力,从而提升学生的综合素质。(2《)C语言程序设计》的学习组织形式学习组织能力是指学生在学习的过程中,师生的共同活动在程序、人员、时空关系上的组合形式。运用适合学生的学习组织形式,有助于学生提高C语言程序设计学习的效率,同时,还可以将一些高效率的学习方法、学习敬仰在学习组织形式中进行运用,由于《C语言程序设计》教学分为基础知识与课程设计两种基本形式,我们把以问题为导向的《C语言程序设计》教学模式下的学习组织形式也分为两种类型。一种是课堂小组合作学习。在《C语言程序设计》所有课时中,基础知识的课程占据了绝大多数,教学地点可以选为网络机房,以问题为导向的《C语言程序设计》有利于学生培养团队合作精神,提高彼此之间的交流能力,鼓励学生在学习的过程中勇敢地提出问题回答问题,为学生营造一种良好的学习氛围。教师充分发挥自身的引导与辅助的作用,帮助学生发现问题,解决问题。另一种类型是课程设计探究学习。课程设计的时间一般比较短,在此期间,教师要通过合理的课程设计来为学生创造一个和谐的学习氛围,师生之间、学生之间进行交流,分享学习经验与解决问题的方法,一方面可以增加学生彼此学习的机会,另一方面也可以监督学生完成自己的学习任务。(3)网络环境下的问题导向教学模式网络环境下的以问题为导向的《C语言程序设计》课程教学模式,则是利用网络科技来辅助教师的教学活动,在这个教学过程中,教师是教学活动中的引导者与辅助者,而学生才是学习的主体。教师为学生设计好学习任务,明确每一位学生所要解决的问题,再对学生进行合理的分组,让学生充分利用网络资源,收集对自己有利的信息,并且对信息进行有效的筛选与整合。学生在寻求解决问题的过程中,能够充分利用网络环境的优势,推动以问题为导向的教学模式的实施,实现学生的自主学习、互动合作、自觉约束自己的学习活动。这样,学生在整个学习过程中,不仅解决了教师提出的问题,还掌握了搜集、处理信息的能力,收获成功之后的成就感,增强与他人之间的交流,提高自身的创造能力,真正做到增强自身的综合素质。
2以问题为导向的《C语言程序设计》的实践
在《C语言程序设计》课程教学过程中,教师的教学工作与学生的学习活动总是会暴露一些问题,如教师讲解不到位,学生不能理解理论知识,教师讲课难以吸引学生的学习兴趣,学生学习效率低下等问题。而以问题为导向的《C语言程序设计》教学模式,要如何进行具体的实施,才能够帮助学生掌握解决问题的技巧,加深对理论知识的理解呢?
(一)以问题为导向的教学模式中的课程设计
在《C语言程序设计》教学过程中,使用以问题为导向的教学模式,要明确本次课程的教学目标是什么,所有的课程设计的大方向要以教学目标为准则,教学中要以人为本,以学生为中心,站在学生的立场上,充分考虑到学生的接受知识的能力与完成任务的可能性。另外还有考虑哪些教学设备可以供学生使用,做到最大程度利用现有的资源,帮助学生掌握更多的知识。同时,对于学生的要求要合理,要求过高,学生难以完成目标,将会打击学生的参与教学的积极性与信心,要求过低,将会浪费时间,学生的实际能力达不到质的飞跃。因此,课程的设计要实事求是,一切从实际出发。
(二)以问题为导向的教学模式实施的原则
1.遵循现代社会教育事业的发展规律,尊重学生的认知规律,鼓励学生运用自己的优势进行创新性的学习。2.坚持以学生为主体、以学生为中心的原则,让学生出于教学中的主体地位。营造轻松的学习氛围,让每一位学生都积极大胆地参与到其中,敢于提出自己的疑问,敢于回答教师与其他学生提出的问题,积极参与具有挑战性的任务。3.教师发挥自身的引导与辅助的作用,引导学生进行有利于提高自身能力的学习活动,帮助学生解决难度较大的问题,并且监督学生对问题作出总结,从完成任务的过程中学到更多的知识。
(三)以问题为导向的教学模式应当注意的问题
1.教师要注意因材施教,每一位学生的学习能力不同,不能一概而论。针对不同学生提出不同要求,有助于学生扬长避短,提高学生的整体素质。2.对学生的学习结果给予客观公正的评价,参与教学活动积极性高及表现突出的学生要给予表扬,进一步调动学生参与的积极性。3.注意课堂中的气氛,轻松的学习氛围不代表可以随意讨论与课程学习无关的内容,教师要保证学生将时间都应用到学习中来。
第二篇:程序设计课程教学研究
程序设计课程教学研究
摘要 学习计算机语言并进行编程训练,是学生深入理解计算机的一个突破口,是熟悉计算机思维的一个重要途径。但如何让学生掌握程序设计的基本概念和基本方法,并能用一种程序设计语言编写计算机程序,难度很大。同时也是计算机教学人员需要进行教学研究的一个主要方面。
关键词 教学模式;教师;学生;教学并重
中图分类号 G642 文献标识码 A 文章编号 1671-489X(2008)016-0042-02 学生编程能力较差的原因
对于一些非计算机专业的学生,他们主观上会认为,将来不会从事编写程序的工作,学习编程对他们没用。计算机学科概念的基本术语比较抽象,程序设计语言的语法枯燥,编程的算法比较复杂,由于以上几方面的原因导致学生在学习过程中没有学习的兴趣以及学习的主动性。在学习程序设计的过程中,不光需要学生掌握所学的程序设计语言的基本语法规则,还要学会程序设计的思维方法,而前者全是一些严格的规定,后者却要求灵活运用。学生在初学编程时,如果长时间调试一个程序而总处于不通过的状态学生就会气馁,产生一定的厌学情绪,对后面内容的学习会形成阻碍,以至影响整个课程的学习。
为了让学生充分认识到程序设计课程的重要性,对程序设计产生兴趣,需要任课教师的不断探索、改进教学方法,改变“以教师为中心”的传统教学模式,使学生从被动学习变为主动学习,为学生自主学习提供丰富的学习资源,从而取得较好的学习成效。这正是现代教学理论所倡导的。本人结合自己从事计算机程序设计语言课程教学的经验,对于如何在教学过程中提高学生的编程能力做出以下几方面经验总结。由以教师为中心到以学生为中心教学模式的改变[1]
以教师为中心,教师讲、学生听,主要靠教师向学生灌输,作为认知主体的学生在教学过程中自始至终处于被动状态,其主动性、积极性难以发挥。既不能保证教学的质量与效率,又不利于培养学生的发散性思维、批判性思维和创造性思维,即不利于创造型人材的成长。为了改变这种状况,国内外的许多教育工作者、教育学家、教育技术专家多年来从理论与实践两个方面作了大量的研究与探索。传统的教学模式最后形成的效果就是将知识从教师头脑中传送到学生的笔记本上,并没有使学生真正的掌握所学的内容。
学生是信息加工的主体,教师是学生在学习过程中的帮助者、促进者,而不是知识灌输者。以学生为中心的教学模式强调学生对知识的主动探索,主动发现的能力。本人认为知识主要不是通过教师传授得到,而是学生在一定的情景及社会文化背景下,借助他人(包括教师和学习伙伴)的帮助,利用必要的学习资源而获得的。所以我们在教学的过程中应以学生为中心,在整个教学过程中由教师起组织者、指导者、帮助者和促进者的作用,利用情境、协作、会话等学习环境要素充分发挥学生的主动性、积极性和首创精神,最终达到使学生有效地实现对当前所学知识的意义建构的目的。教学方法的更新[2]
在传统的程序设计语言课程中我们教师经常在理论课教学中介绍语法,在实践教学(上机)中让学生调试程序。这样的教学模式的缺点是:枯燥的语法知识介绍往往提不起学生学习的兴趣,而简单的验证性的上机,使学生的上机实践可以草草了事,这就是许多专家和教育工作者都已经指出的目前(特别是计算机专业学生)程序设计水平不高的重要原因。
笔者认为可以在课堂上讲授算法,上机学习程序的测试、调试和语法知识。这种教学方法非常符合程序设计及其语言的学习规律。我们自己的学习经验也表明,学习语法知识最好的办法是设计一些典型用法上机去试。而学习算法不一定必须在计算机上进行。因此,计算机程序设计的教学应当是三个环节:以系统学习算法为主的课堂教学、以举一反三为主的课后程序设计作业和以测试、调试程序和语法验证学习为主的上机。多媒体教学环境的应用
以计算机多媒体技术及其网络技术为核心的现代教育技术是最理想的教学环境。多媒体技术能够提供外部刺激的多样性, 有利于知识的获取,能为学习者提供多种感官的综合刺激,这对于知识的获取和保持,都是非常重要的。多媒体技术既能让学习者看得见,也能让其听得见,还能让学习者用手操作。这样通过多种感官的刺激所获取的信息量,比单一地听老师讲课多得多。学生在学习过程中,如果既能听到又能看到所学内容,再通过讨论、交流,用自己的语言或文字表达出来,其知识的保持将大大优于传统教学的效果。这说明多媒体应用于教学过程不仅非常有利于知识的获取,而且非常有利于知识的保持。
同时多媒体技术有利于因材施教。因材施教是优化教学过程、提高教学质量的重要教学原则之一。如今,各高校不断扩招,生源复杂,学生个体之间差异很大,要在传统教材中同时满足基础较差学生、一般学生和优秀学生对教学内容的不同需求是很难做到的。而利用多媒体技术,按学生的知识基础与水平,很容易把相关学科的预备知识、相应的演示实验、练习题、测验题及其解答等,与教学内容相关而与学习特征不同的教学资料组成一个有机的整体,供不同类型的学生使用。程序设计基础教学环境的设计
C语言程序设计课程是一门公共必修课,一般来说是学生在大学时期所学的第一门计算机编程课。该课的特点是:语言规则枯燥、难记;数组、函数、指针等概念比较抽象,不易理解;需掌握的常用算法较多;程序设计的思维方法较难掌握;编写的程序需要上机检验、调试。本人主要从以下几方面对于程序设计基础教学环境的设计加以阐述。
5.1 编程情景的创设创设与当前学习主题相关的、尽可能真实的情景。程序设计课程的一个显著特点是每学习到一个主题,都可以在计算机上直接编写程序、调试程序、运行程序、查看运行结果,从上机编程的操作上来讲,学生体验到的是真实情景。另一方面,对于C语言程序中所涉及的概念、算法的学习,要为学生创设资源丰富的学习环境,其中应包括实例案例、相关学习资料,使得学习者可以根据自己的学习需要、学习兴趣去主动发现、主动探索要掌握的知识。
5.2 教学资源的丰富我们任课教师应该为学生提供本课程所涉及到的具有不同作用的信息资源如:教材和课件;课程教学网站上的学习指导、常见问题解答,以及学习参考资料、参考习题和解答,用于学生阅读或查阅的学习内容;而课程教学网站上的自测练习系统、作业系统、答疑系统可用于学生自测、自我反馈。
5.3 挖掘学生自主学习的意识在教学过程中,充分发挥学生的主动性,使学生主动探究问题。为学生设计不同的情景去应用他所学的知识,并让学生能根据自身行动的反馈信息来形成对客观事物的认识和解决实际问题的方案,从而实现自我反馈。
5.4 学习气氛的创设在程序设计课程教学中,应经常由教师精心设计问题,引导学生开展小组讨论、协商,最后教师对学生的表现进行恰当的评价。这样既增加了学生学习的热情,又使学生掌握了所学的内容。
5.5 学习效果的检测我们可以在必要的时候对学生所学的内容进行阶段性的检测,这样教师可以使学生对于知识的掌握情况有所了解,教师可以根据评价的结果,为每个学生设计出一套强化练习方案,指出其知识薄弱点,并设计有针对性的学习材料和练习题,以便通过强化练习纠正原有的错误理解或片面认识。
通过以上几方面的分析可知,现代的教学系统由教师、学生、教材和教学媒体4个要素构成。这4个要素不是孤立地、简单地组合在一起的,而是相互联系、相互作用的有机整体。在传统教学模式中教师是主动的施教者,具有绝对的权威,教师通过媒体把知识传递给学生,学生在整个教学过程中处于被动接受状态,媒体在教学过程中辅助教师教学,教材是教师讲授的蓝本。此时,学生只是被动地接受现成的结论,缺乏对问题的分析,其思维能力得不到很好的发展,学生的批判性和独立性受到压制,求知欲被消磨。学生厌学,或掌握的知识存在一些弊端,如不完整,过于空泛,无法在需要的时候及时运用,不灵活,无法在新的或类似的情境中迁移应用。
为了解决上述问题,必须正确认识教学过程的本质,在先进的教育理论指导下,深化课堂教学改革,改变传统的以教师为中心的教学结构,创建既能发挥教师主导作用,又能发挥学生对学习的兴趣继而提高学生的编程能力,从而真正地做到“教学并重”的教学模式。这既是高校深化学科教学改革的主要目标,同时也是我们教学工作者需要研究的主要课题。
参考文献
[1]裘迅.计算机程序设计课程教学模式研究[J].苏州市职业大学学报,2003(04)
[2]张敏霞.程序设计语言课程教学方法改革的探索与实践[J].中国高教研究,2004(02)
第三篇:c语言程序设计论文
C语言程序设计论文
摘要
该程序编译的是通讯录,可以实现一般主要功能有:有建立通讯录的个人信息功能,如记录该人姓名信息,地址信息,出生日期信息,所在城市信息,以及其城市的邮编信息等,删除个人信息,通讯录个人的信息列表,个人的信息查询,个人的信息保存,以及个人的信息提取的功能,最后可以直接退出通讯录。
当然实行不同的功能需要定义不同的功能函数,在记录个人信息定义不同的结构体,每一个成员的信息可以是一个基本类型或者是一个够造类型,对结构体变量的应用,其中包括赋值,输入,输出,运算等方式来实现结构变量的成员。
当然也可以执行该程序应用了函数的调用,自定义函数以及文件的存储与调用等。个人的信息保存在这个问题上,这信息可以动态的分配到内存空间,每一次分配一块空间用来存放一个人的个人信息的数据,定义两个域,一个是数据域,用来存放各种实际的数据,如个人姓名信息,个人地址信息,出生日期等等数据。在编辑程序,用到了基本的循环、选择、排序的算法,使用数组或数组元素的指针和指针变量,对结构体及其元素用指针或指针变量来指向。并且使用多种预处理功能,如宏定义、文件包含、条件编译等。来进行程序的修改、阅读、移植和调试,也有利于实现模块化程序设计。程序员在程序中用预处理命令来调用这些功能。
通讯录的个人信息数据的编辑、存储、列表、删除、查询、提取等实行运用,在程序中存储二百人的个人信息空间,日期不能超过两个字符。在运行后,程序自动给出提示选择,给出你所需要执行的功能,在选择后会给出相应的显示和下一步的提示,在编辑个人信息时必须有姓名,否者会返回上一选择菜单,有部分信息可以不填。在编辑完后,就可以实行其他功能,将给出其他选择,如将个人信息删除、将个人信息列表、保存个人信息、提取个人信息等等的功能。最后在执行完后就可直接根据提示选择退出。就实现了整个通讯录的流程。
关键词:通讯录、列表、函数、编译
C语言程序设计论文
目录
题目内容及其功能..........................2 算法原理..................................2 算法流程图................................8 源程序...................................14 运用结果及分析...........................20 设计心得.................................22 参考文献.................................23
C语言程序设计论文
题目内容及其功能
该通讯录主要功能有:有建立通讯录的个人信息,如姓名,地址,出生日期,城市,邮编等。也可以执行删除个人信息,通讯录信息列表,信息查询,信息保存,以及信息提取的功能,最后可以退出通讯录。该程序应用了函数的调用,自定义函数以及文件的存储与调用等,使用数组或数组元素的指针和指针变量,对结构体及其元素用指针或指针变量来指向。
算法原理
(1)通过选择来实现程序的功能: int main(void){ start=last=NULL;for(;;){
switch(menu_select())
{
case 1:enter();
break;
case 2:mldelete(&start,&last);
break;
case 3:list();
break;
case 4:search();
break;
case 5:save();
break;
case 6:load();
break;
case 7:exit(0);
} 输出运行结果并且给出选择: int menu_select(void){ char s[80];int c;printf(“******tongxunlu*******n”);printf(“*1.Enter a name
*n”);printf(“*2.delete a name
*n”);printf(“*3.list the file
*n”);printf(“*4.search
*n”);
printf(“*5.save the file
*n”);printf(“*6.load the file
*n”);printf(“*7.Quit
*n”);
C语言程序设计论文
printf(“**********************n”);do {
printf(“nplease enter your choice:”);
gets(s);
c=atoi(s);}while(c<0||c>7);return c;}
(2)输入个人信息:名字,地址,日期,邮政编码 void enter(void){ struct address *info;for(;;){
info=(struct address *)malloc(sizeof(struct address));
if(!info)
{
printf(“nout of memory”);
return;
}
inputs(“please enter name:”,info->name,30);
if(!info->name[0])break;/*stop entering*/
inputs(“please enter street:”,info->street,40);
inputs(“please enter city:”,info->city,20);
inputs(“please enter state:”,info->state,3);
inputs(“please enter zip:”,info->zip,10);
dls_store(info,&start,&last);}/*entry loop*/ } 如果超过给定内存,将给出提示,输入太长: void inputs(char *prompt,char *s,int count){ char p[225];do {
printf(prompt);
fgets(p,254,stdin);
if(strlen(p)>count)
printf(“nToo Longn”);} while(strlen(p)>count);p[strlen(p)-1]=0;/* remove newline character */ strcpy(s,p);}(3)制作列表,对输入的个人信息进行存储与排列 void dls_store(C语言程序设计论文
struct address *i,/*new element*/ struct address **start,/*first element in list*/ struct address **last/*last element in list*/){ struct address *old,*p;if(*last==NULL){/*first element in list*/
i->next=NULL;
i->prior=NULL;
*last=i;
*start=i;
return;} p=*start;/*start at top of list*/ old=NULL;while(p){
if(strcmp(p->name,i->name)<0){
old=p;
p=p->next;
}
else{
if(p->prior)
{
p->prior->next=i;
i->next=p;
i->prior=p->prior;
p->prior=i;
return;
}
i->next=p;/*new first element*/
i->prior=NULL;
p->prior=i;
*start=i;
return;
} } old->next=i;/*put on end*/ i->next=NULL;i->prior=old;*last=i;}(4)将通讯录中的信息,先进行查找,然后删除个人信息 void mldelete(struct address **start,struct address **last)
C语言程序设计论文
{ struct address *info;char s[80];
inputs(“Enter name:”,s,30);info=find(s);if(info){
if(*start==info){
*start=info->next;
if(*start)(*start)->prior=NULL;
else *last=NULL;
}
else{
info->prior->next=info->next;
if(info!=*last)
info->next->prior=info->prior;
else
*last=info->prior;
}
free(info);/*return memory to system*/ } }(5)从其内存中查找某个名字,并进行输出,如果没有就输出没有发现名字 struct address *find(char *name){ struct address *info;info=start;while(info){
if(!strcmp(name,info->name))return info;
info = info->next;/* get next address */ } printf(“Name not found.n”);return NULL;/*not found*/ }(6)将通讯录中所有个人信息分别列出 void list(void){ struct address *info;info=start;while(info){
display(info);
info = info->next;/* get next address */
C语言程序设计论文
} printf(“nn”);}(7)分别输出个人信息
void display(struct address *info){ printf(“%sn”,info->name);printf(“%sn”,info->street);printf(“%sn”,info->city);printf(“%sn”,info->state);printf(“%sn”,info->zip);printf(“nn”);}(8)根据其个人信息的存储地址来查找个人名字信息 void search(void){ char name[40];struct address *info;printf(“Enter name to find:”);gets(name);info = find(name);if(!info)
printf(“Not Foundn”);else display(info);}(9)保存输入的个人信息 void save(void){ struct address *info;FILE *fp;fp = fopen(“mlist”,“wb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} printf(“nSaving Filen”);info = start;while(info){
fwrite(info,sizeof(struct address),1,fp);
info = info->next;/* get next address */ } fclose(fp);
C语言程序设计论文
}(10)查找并提取已输入的个人信息 void load(){ struct address *info;FILE *fp;fp=fopen(“mlist”,“rb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} 释放内存空间:
while(start){
info=start->next;
free(info);
start=info;fclose(fp);}
C语言程序设计论文
算法流程图
图1-1制作列表流程图
C语言程序设计论文
图1-2删除个人信息流程图
C语言程序设计论文
图1-3个人信息-名字的查找流程图
C语言程序设计论文
图1-4查找到个人信息流程图
C语言程序设计论文
图1-5保存个人信息流程图
C语言程序设计论文
图1-6提取下载个人信息流程图
C语言程序设计论文
源程序
#include“stdio.h” #include“stdlib.h” #include“string.h” struct address{ char name[30];char street[40];char city[20];char state[3];char zip[11];struct address *next;struct address *prior;};struct address *start;struct address *last;struct address *find(char *);
void enter(void),search(void),save(void);void load(void),list(void);void mldelete(struct address **,struct address **);void dls_store(struct address *i,struct address **start,struct address **last);void inputs(char *,char*,int),display(struct address *);int menu_select(void);
int main(void){ start=last=NULL;for(;;){
switch(menu_select())
{
case 1:enter();
break;
case 2:mldelete(&start,&last);
break;
case 3:list();
break;
case 4:search();
break;
case 5:save();
break;
case 6:load();
break;
C语言程序设计论文
case 7:exit(0);
} }return 0;}
int menu_select(void){ char s[80];int c;printf(“******tongxunlu*******n”);printf(“*1.Enter a name
*n”);printf(“*2.delete a name
*n”);printf(“*3.list the file
*n”);printf(“*4.search
*n”);
printf(“*5.save the file
*n”);printf(“*6.load the file
*n”);printf(“*7.Quit
*n”);
printf(“**********************n”);do {
printf(“nplease enter your choice:”);
gets(s);
c=atoi(s);}while(c<0||c>7);return c;}
/*Enter names and address.*/ void enter(void){ struct address *info;for(;;){
info=(struct address *)malloc(sizeof(struct address));
if(!info)
{
printf(“nout of memory”);
return;
}
inputs(“please enter name:”,info->name,30);
if(!info->name[0])break;/*stop entering*/
inputs(“please enter street:”,info->street,40);
inputs(“please enter city:”,info->city,20);
inputs(“please enter state:”,info->state,3);
inputs(“please enter zip:”,info->zip,10);
dls_store(info,&start,&last);
C语言程序设计论文
}/*entry loop*/ } /*******************************************/ void inputs(char *prompt,char *s,int count){ char p[225];do {
printf(prompt);
fgets(p,254,stdin);
if(strlen(p)>count)
printf(“nToo Longn”);} while(strlen(p)>count);p[strlen(p)-1]=0;/* remove newline character */ strcpy(s,p);} /*Create a doubly linked list in sorted order */ void dls_store(struct address *i,/*new element*/ struct address **start,/*first element in list*/ struct address **last/*last element in list*/){ struct address *old,*p;if(*last==NULL){/*first element in list*/
i->next=NULL;
i->prior=NULL;
*last=i;
*start=i;
return;} p=*start;/*start at top of list*/ old=NULL;while(p){
if(strcmp(p->name,i->name)<0){
old=p;
p=p->next;
}
else{
if(p->prior)
{
p->prior->next=i;
i->next=p;
i->prior=p->prior;
C语言程序设计论文
p->prior=i;
return;
}
i->next=p;/*new first element*/
i->prior=NULL;
p->prior=i;
*start=i;
return;
} } old->next=i;/*put on end*/ i->next=NULL;i->prior=old;*last=i;} /*Remove an element from the list*/ void mldelete(struct address **start,struct address **last){ struct address *info;char s[80];
inputs(“Enter name:”,s,30);info=find(s);if(info){
if(*start==info){
*start=info->next;
if(*start)(*start)->prior=NULL;
else *last=NULL;
}
else{
info->prior->next=info->next;
if(info!=*last)
info->next->prior=info->prior;
else
*last=info->prior;
}
free(info);/*return memory to system*/ } }
/*Find an address.*/
struct address *find(char *name){
C语言程序设计论文
struct address *info;info=start;while(info){
if(!strcmp(name,info->name))return info;
info = info->next;/* get next address */ } printf(“Name not found.n”);return NULL;/*not found*/ } /* Display the entire list */ void list(void){ struct address *info;info=start;while(info){
display(info);
info = info->next;/* get next address */ } printf(“nn”);} /* this function actually prints the fields in each address.*/ void display(struct address *info){ printf(“%sn”,info->name);printf(“%sn”,info->street);printf(“%sn”,info->city);printf(“%sn”,info->state);printf(“%sn”,info->zip);printf(“nn”);} /* Look for a name in the list */ void search(void){ char name[40];struct address *info;printf(“Enter name to find:”);gets(name);info = find(name);if(!info)
printf(“Not Foundn”);else display(info);}
C语言程序设计论文
/* Save the file to disk */ void save(void){ struct address *info;FILE *fp;fp = fopen(“mlist”,“wb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} printf(“nSaving Filen”);info = start;while(info){
fwrite(info,sizeof(struct address),1,fp);
info = info->next;/* get next address */ } fclose(fp);} /*
Load the address file.*/ void load(){ struct address *info;FILE *fp;fp=fopen(“mlist”,“rb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} /* free any previously allocated memory */ while(start){
info=start->next;
free(info);
start=info;} /*
reset top and bottom pointers
*/ start=last=NULL;printf(“nLoading Filen”);while(!feof(fp)){
info=(struct address *)malloc(sizeof(struct address));
C语言程序设计论文
} if(!info){
printf(“Out of Memory”);
return;} if(1!=fread(info,sizeof(struct address),1,fp))break;dls_store(info,&start,&last);}
fclose(fp);运用结果及分析
图1-1 运行结果并且给出选择
图1-2输入个人信息
C语言程序设计论文
图1-3删除个人信息
1-4列出个人信息
C语言程序设计论文 1-5查找个人信息
图1-6保存个人信息
C语言程序设计论文
设计心得
通过进行C语言程序设计,我更加懂得C语言设计不仅仅需要逻辑思维地紧密,更加需要细心,通过两个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。读了那么多年的书,课程设计可是第一次。看着劳动成果,很欣慰!
刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于画图方面的,可是这点小进展远远不够,这只是一个小小的开始。下一步是上网查,找到了些与我们题目相似的,那时我很高兴,完成了这个程序。
虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。
做完这个课程设计,我的自信一下子提高了,我也会写程序了;尽管对于有些人这种程序会很简单,可对我们C语言初学者来说,已经很不容易了。这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊!
程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。可得最后结论。
一个多礼拜的挣扎,绞尽脑汁终于带着麻木的手指和大脑脱出那堆“泥潭”。现在的心情是如鱼得水,干涩的眼睛前方是万里晴空。终于,所有的努力即将化成了一个个铅字,打印机“滋滋”的声音仿佛已经宛如天籁般悦耳地在耳畔响起。此时此刻,真想把一切抛上天空。高呼:“出来了!我的成果即将出来了!”,心里也在默默的感慨着:“有志者,事竟成,破釜沉舟,百二秦关终归楚。苦心人,天不负,卧薪尝胆,三千越甲可吞吴。”
当然这次程序设计也让我看到了自己基础的薄弱。古人有诗云:“路漫漫其修远兮,吾将上下而求索”。从今天起我将不断继续求索,学习之路也好,人生之路也罢。
总之我受益匪浅。
C语言程序设计论文
参考文献
《C程序设计》„„谭浩强 著„„清华大学出版社„2005.7 《C语言程序设计》„„(美)郝伯特.希尔特 著 „„电子工业出版社
第四篇:C语言程序设计教学探究论文
[摘要]文章主要针对高职高专院校中《C语言程序设计》教学中出现的听得懂、编不出的现象,分析问题存在的原因,从教学的课程目标定位、教学内容和方法改革方面进行了探讨,提出只有教师的教学内容和教学方法进行合理的组合,提高学生的学习兴趣才能达到良好的教学效果。
[关键词]教学方法 案例教学 教学效果
《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的课程,在整个课程体系中占有重要地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生直接的影响。针对学生学习语言类课程的一般思维规律和思维模式,笔者结合多年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言教学有所帮助。
一、教学中存在的问题
《C语言程序设计》是一个逻辑性很强的课程。学生在毕业设计时会面临具体的设计要求的问题,它与任何一本教材中的内容相距甚远,这使大多数同学感到无从下手。这其中的原因可以分成两类:一方面目前高校使用的教材中,绝大多数结构都基本相同。在每一章介绍完了概念之后,提供一些例题解释相关概念的使用方法,并在章节结束后针对本章中出现的内容提供一些练习题。考试普遍采用单选、判断及简答等方式测试学生对于教材内容的掌握程度。从实际效果分析,实际上是测试学生对各章节中的基本概念记忆程度而不是理解程度。另一方面是在考试压力下,特别是目前的应试考试方式中,学生更多注意的是教材中的典型例题与老师指定的重点内容,对于程序的系统概念没有真正理解,特别是没有整体设计的概念。通过对各类考试结果的分析,可以注意到一个现象,在考试中涉及的综合编程部分,学生的得分率很低。为了确保学生的课程通过率,在考试时尽可能将综合测试部分的比例压低或提供学生统一复习提纲,这样做的结果就是学生在学习时一切围绕任课老师讲课的内容,特别是老师讲授的例题。学生在学习的过程中,没有注意如何综合运用相关内容解决具体问题,导致学生在学完程序设计课程进入应用阶段时,面对具体的专业设计要求无从下手。
二、提高程序设计课程教学效果的途径
1.明确课程目标
通过学习,学生应能正确理解语言的基本概念、语法、语义并得到充分的程序设计训练。C语言课程一般是为应用性教学而设置的,因此,强调实践性是计算机语言课程教学中特别要注意的问题。对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。过分强调该语言的系统性和完整性可能会转移学生对课程重点的注意力。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序,一些细节、具体规则和进一步的知识可以让学生在今后的应用中查阅有关书籍。教师应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。
2.进行教学改革
(1)教学内容改革
程序设计课程具有很强的实践性,要以社会对编程能力的需求和技术发展为依据,调整教学大纲和教学内容,以适应技术岗位能力要求,设计模块化课程体系。在课程设置与建设中,要充分体现教学内容在训练和提高学生培养学生实践能力方面的要求。适当增加实训教学内容,以强化学生的实际开发和应用能力,实现“零距离就业”。
(2)改变教学思想
①由整体到具体,培养学生对C语言的兴趣及正确的思维模式。《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。在教学过程中,应该先介绍一个较完整的程序例子,该例子包含了该语言中的主要语句,目的是使学生先对程序有个初步的印象,再简单介绍该例子中用到的语句,让学生对该语言的学习有一个大概的了解,避免学生对学习语言望而生畏。整个教学过程中应该把“解题思路、方法和步骤”当作授课的重点,从而让学生明白如何分析、解决实际问题,逐渐培养学生进行程序设计的正确思维模式。
②一题多解,注重算法是程序设计的灵魂,是教学重点,也是教学难点,而语言只是表示形式。没有正确的算法,计算机将解决不了任何问题。对于C语言所涉及到的算法,应进行部分精讲多练。
(3)教学方法改革
①案例分析教学。通过案例分析,重点讲解程序设计的思想和方法,辅以语言知识的介绍,将课程内容分为若干个主题,以程序设计做为贯穿各主题的主线。每个主题的教学过程由“要点讲解”、“练习/上机实践”和“疑难解答”三个阶段组成。
②基于问题的教学。提出问题,以学生独立完成为主,教师只提供必要的辅导,培养学生探索问题和解决问题的能力,更有利于创新能力的培养。
③“项目驱动”教学。在理论教学中采用“项目驱动”教学法,整个课程教学围绕一个“工程项目”进行,通过逐步拓展的实训项目和设计,将每一阶段的学习进行小结性的贯穿与能力提高。将C 的知识点都溶化到一个个实训项目的程序编写中。在课程初期,主要是进行单项的编程练习,重在掌握C 语言的基本语句、数据类型与程序结构等。在进入数组、函数、结构、指针和文件内容教学时,开始实训项目的编程实践,逐步组建“教师管理系统”,并且添加文本菜单,整合扩展记录添加、排序、查询、统计和记录浏览等内容形成课程设计。
(4)课程考核方式改革
①平时上机训练时给学生留一些编程习题,每次根据学生编写情况进行测评并占据期末总成绩30%。
②期末前,给学生留一个综合实训题考核学生综合解决问题的能力,要求同学们在一周内完成,占据期末总成绩30%。
③期末进行理论考试,占期末总成绩的40%。
3.展示学生作品,激发学生的学习欲望
计算机软件课程具有多样性、复杂性和求异性特点,我们要针对每个学生任务完成的情况,让同学们展示自己的劳动成果,及时肯定学生的成绩,这样会有利于激发学生们的学习热情,保持浓厚的学习兴趣,对学生的后续学习将产生强大的动力和自信心,也可以对每次任务的完成情况进行积分制度,算入期末成绩中,以激发学生们的兴趣。
4.自始至终培养学生的自学能力
学生学习软件的最终目的是编写满足需求的程序,所以我们在教学中教授的不仅仅是具体语言的语法知识,更重要的是通过这门语言学习,培养学生遇到实际问题自己分析问题、解决问题的能力。我们可以通过给学生布置作业的形式让同学们自学,初始阶段往往会遇到因为学生自学能力差而带来的困难,所以在学生完成任务时,老师既要要求学生独立思考、自主学习,又要鼓励学生间进行协作学习。教师可以分配一些比较复杂的问题,由几个学生组成一个小组合作解决,这样同学们可以互相探讨学习方法,协作解决一些遇到的问题,通过解决问题,锻炼学生综合应用知识的能力、培养其创造性和合作精神。
参考文献:
[1]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息,2008(1).[2]于丽杰,王育平,董楠萍等.面向对像程序设计综合实践课程教学模式的探索[J].高教论坛,2007.01.
第五篇:C语言程序设计
1.Problem A: Hello world!Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。
Input 无
Output 请输出: Hello Da_min, Hello Er_min, Hello Xiao_ming!
Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming!
HINT 请注意换行符
Append Code #include
printf(“Hello Da_min,n”);
printf(“Hello Er_min,n”);
printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圆的面积和周长 Description 从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。
Input 输入一个浮点型数据,有效数字不会超过十进制的6位。
Output 输出为两行。
第一行为圆的面积,第二行为圆的周长,格式见sample。
Sample Input 3
Sample Output Area: 28.260000 Perimeter: 18.840000
HINT 了解浮点类型的输入、输出和算术运算符
Append Code 法一
#include
#include
double r;
scanf(“%d”,&r);
printf(“Area: %lfn”,pi*r*r);
printf(“Perimeter: %lfn”,2*pi*r);
}
3.Problem C:平均值 Description 求3个数的平均值。
Input 输入只有一行,为3个较小的整数。
Output 输出为这3个整数的平均值,保留3位小数。
Sample Input 1 2 3 Sample Output 2.000
HINT 注意除法运算对整型数据和浮点型数据是不一样的。
Append Code #include
4.Problem D: 求字符的值 Description 从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。
Input 输入为3个字符。
Output 输出为3行。
每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。
Sample Input 0 A
Sample Output 048 060 030 032 040 020 065 101 041
HINT 了解字符值的存储和整型的关系。
Append Code #include
5.Problem A: 最简单的程序 Description 输出一行“Hello world!”。
Input 无
Output Hello world!
Sample Input Sample Output Hello world!
HINT Append Code #include
printf(“Hello world!”);}
6.Problem B: 算术基本运算 Description 计算两整数x和y(0 Input 输入只有一行,格式见sample。 Output 输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自减运算 Description C语言中有自增运算++、自减运算--,并且可以前置和后置。 编写一个程序:对输入的一个整数a,输出a++、a--、++a、--a的值。 Input 一个整数a,a是很小的整数。 Output 输出为5行,第一行为a的值,后面依次为--a、a--、a++、++a的值。 5行输出纵向a要对齐,“:”对齐,“:”前后各一个空格,后面的数值不用对齐。每行行尾都有回车。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 绝对值 Description 求整型数据和浮点型数据的绝对值。 Input 输入两个数,第一个是整数,第二个是浮点数。 Output 输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。 Sample Input-1 1 Sample Output 1 1 HINT 求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇数还是偶数? Description 输入一个整数,判读它是奇数还是偶数。 Input 输入只有一行,为一个100以内的正整数。 Output 输出为一行。 若输入为偶数则输出“even”,奇数输出“odd”。Sample Input 30 Sample Output even HINT 用整数运算可以解决,练习“?:”表达式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 简单的打折计算 Description 商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。 Input 输入只有一行,三个整数m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判断闰年 Description 输入一个正整数的年份,判断是否为闰年。 Input 输入只有一行,为一个10000以内的正整数。 Output 输出为一行。 若输入为闰年偶数则输出“Yes”,否则输出“No”。 Sample Input 2010 Sample Output No HINT 了解逻辑运算符和关系运算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。 Input 一个整数x,100<=x<=999。 Output x是水仙花数,则输出“YES”,否则为“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三个数比较大小 Description 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。 Input 输入只有一行,为三个整数。 Output 按从小到大输出这三个数。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if语句判断各种情况可以解决这个问题。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 给定3个正整数a、b和c,按照如下规则求和: 如果这个数字是偶数,则累加到和中; 如果这个数字是奇数,则将大于该数的最小偶数累加到和中。 Input 三个正整数,均在100以内。 Output 一个和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不会使用分支语句,可使用条件运算符判断到底将哪个数累积到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你过线了吗? Description 经过四年的学习,你决定报考我国著名的“285”高校之一的北青大学,经过认真的复习,残酷的考试,终于知晓了自己的考试成绩,也知道了北青大学的录取分数线,请你编程判断,自己过线了吗? Input 输入有2行,第一行有4个正整数,分别表示三门课程的分数线以及总分分数线。第二行有3个非负整数,分别表示你考的三门课程的成绩。 Output 如果你的三门课程成绩都不低于相应课程的分数线,且你的考试总分也不低于北青大学的总分分数线要求,则输出“congratulations”,否则输出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的和,顺序与输入对应。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N给出了测试样例数,用for循环处理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判断是否是元音字母 Description 输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 输入一个英文字母 Output 是元音字母,输出“yes”,否则输出“no”,行尾没有回车。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按顺序输出三个数 Description 对于输入的3个整数,按照从小到大的顺序输出。 Input 输入3个int类型内的整数,两两之间用一个空格隔开。 Output 按照从小到大的顺序输出上述三个数,两两之间用一个空格隔开。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判断输入整数的奇偶性。 判断奇偶数 Input 输入为一个整数。 Output 输出只有一行,代表判断结果。如果输入的整数n是一个偶数,输出: n is an even number.否则输出: n is an odd number.见样例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判断两个整数的大小关系 Description 输入2个整数a和b,如果a>b,则输出1,否则输出0。 Input 两个整数a和b,均不超过int类型的表示范围。 Output 表示a>b的结果:如果a>b,则输出1,否则输出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成绩的等级 Description 把百分制的考试成绩转换成五级制的成绩: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之间的输入是非法数据,输出“Error”。 Input 输入多行,每行一个整数。 Output 输入所对应的成绩等级。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch语句解决这个问题比较方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 输出是m的倍数或n的倍数、但不是 m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n Input 输入三个整数,依次为k、m、n。 Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 两整数相加减 Description 计算a+b和a-b。 Input 输入为一对整数a和b。a,b用空格分开。 Output 输出a+b和a-b的计算结果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它满足条件吗? Description 需要判断给定的一个整数是否同时满足如下三个条件: 1.它是一个完全平方数。2.它是一个偶数。3.它是一个正数。 注:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一个int范围内的整数。 Output 如果输入的数字满足条件,则输出yes,否则输出no。 Sample Input 100 Sample Output yes HINT 注意逻辑表达式判断三个条件的顺序。如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 库函数sqrt()可以用于求一个数的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 编写一个完整的程序,运行时向用户提问”你考试考了多少分?(0-100)“接受输入后判断其等级并显示出来等级: 优:90<=分数<=100 良:80<=分数<90 中:60<=分数<80 差:0<=分数<60 Input 输入任意一个整数分数值,显示等级;再输入任意一个整数分数值,显示等级;....直到测试数据较充分,可输入-1止。 Output 对任意输入的分数值,输出对应的等级,直到输入的数为-1时才退出运行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 优 优 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”优n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 学校举行运动会,如果全体学生按照3人一队列队,则多了1个人;如果按照4人一队列队,则多了2个人;如果按照5人一队排队,则多了3个人。请问这个学校有多少学生? Input 一个int类型的正整数N,是学生人数的上界,即:该校学生数不超过N。 Output 所有可能的学生数,每个数占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正负数各有几个? Description 输入若干个整数,求其中正数、负数的个数。 Input 输入分为2行:第一行是一个数字N>0,表示下面有N个整数。第2行是N个整数,都是int类型的。 Output 输出所输入的N个整数的正数个数和负数个数,并用空格分开2个输出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似还有一种叫做0的数。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 练习break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。 Input 输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。 Output 输出为两行,格式见sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格还是回车都是空白符,对scanf(”%d“)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n];