第一篇:如何学C语言
如何学C语言
(一)“项目驱动”式教学
目前最著名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件和应用软件不能用c语言编写呢?由此可以肯定的说,c语言是一门十分优秀而又重要的语言。
c语言程序设计是过程性程序设计语言,它的发展贯穿了计算机发展的历程,它蕴含了程序设计的基本思想,囊括了程序设计的基本概念,所以它是理工科高等院校的一门基础课程。从市面上有关c语言的书籍和高等院校采用的教材来看,它们有一个共性,那就是:脱离了实际应用(全是小打小闹的小例子),纯粹的过程性程序设计,没有软件工程思想的体现,没有一定程序设计风格,仅仅是为了让大家明白什么是c语言而已。
高等院校开设c语言程序设计的目的是让学生对程序设计有个入门,有个直观的理解,同时为其他后续课程作铺垫。但是如果教学仅仅以此为目的,那么教学本身就效果而言是个大大的失败。
大家知道,在商业上讲究唯利是图,“利”是商业追求的目标,离开了“利”经商,则商无动力,其结果是必败无疑。在c语言程序设计教学当中,教师应该把“唯用是图”作为教学的首要目标。如果抛开了实际应用进行程序设计教学,就是纸上谈兵,就是“说明书”式的教学。印度的程序设计课程采用“事件驱动式”教学,我认为在中国的c语言程序设计教学中应该采用“项目驱动式”教学。“项目驱动式”教学就是以项目为目的,以c语言理论教学为过程,最终能用c语言设计项目,实现项目的要求。“项目驱动式”教学的关键在于培养学生“如何做什么”和“可以干什么”。一个项目就是一个工程,在“项目驱动式”教学中,首先应该让学生简单了解什么是软件工程思想,其次在c语言理论教学过程中,让学生懂得面向对象的程序设计的风格,最后引导他们来设计项目。
(二)“项目驱动”式教学应注意的问题
1.c语言程序设计教学要帮助学生树立面向工程的观点
在计算机行业中,软件是通过人们的智力活动、把知识与技术转化成信息的一种产品。软件的设计已经用工程的观念来进行管理。软件设计工作被当作一项系统工程来对待。软件的的生存周期一般可分为以下阶段:问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试、运行与维护。我们不难看出软件工程的复杂程度是很大的。理工科高等院校把c语言作为一门基础课程,也是为了给社会培养信息技术人才。众所周知,养成一个好的习惯是非常重要的,所以c语言程序设计作为大多数工科院校学生接触的第一门程序设计语言(有的院校讲pascal),就应该让学生树立正确的观点。那么当前的程序设计教学也必须以切合将来软件工程开发的实际需要为第一目标,使学生在学习程序设计的初级阶段就树立正确的软件工程观点。这样做不仅可以为学生将来从事计算机应用设计打下良好的基础,而且有利于培养学生分析问题的完备性,以及统筹全局,协调关系的基本素质。
2.理论教学应从单一的“结构化程序设计”向“结构化与面向对象并举”转变
“结构化程序设计”方法是程序设计的基础,必须让学生掌握得坚实可靠。结构化程序设计的过程是培养学生思维能力的过程,在教学中经常发现有些学生的思维混乱。这些都是缺乏思维训练的结果。结构化程序设计的训练不仅可以让学生养成良好的程序设计习惯,而且可以有效地培养学生思维的条理性和逻辑性。所以在授课过程中要注意讲解结构化程序设计的思想时应突出两点:(1)程序的质量首先取决于它的结构。(2)程序设计的基本方法是自顶向下地逐步求精和模块化。
在c程序教学过程中,越到后面的章节,学生越会产生设计程序逐渐变难的感觉,这是不符
合逻辑的一种怪现象。按照常理,C语言学的越多,说明你的程序设计知识越多,设计起程序来应该更加得心应手,那么出现这种现象的原因何在呢?当然该问题的出现的原因是多方面的,但是其中最重要的一点就是长期以来程序设计的观念不是以如何处理好对象为出发点,而是以如何使用好语言为基本点。受这种思想的影响,我们的程序设计教学大多数不是以如何解决好问题为重点,而是以讲解语法规则和语句格式为重点,是“说明书”式的教学。这样做造成的结果就是见到一个程序后学生首先想到是该用哪条语句,而不是思考怎样合理的解析。要切实解决这个问题,首先应该改变程序设计的观念。“面向对象程序设计”思想是目前最为流行、极为实用的一种程序设计方法,但是让学生直接接触“面向对象程序设计”,肯定不能对程序设计打下牢固的基础。“结构化与面向对象并举”是现代计算机程序设计的发展趋势,应该认真探索研究,让学生有一个较为轻松的学习过程。程序设计的实质就是编写处理对象的过程,所以将c与c++有机的融为一体的教材应该是首选教材,在教学过程中,我们应该从社会发展的角度进行探索研究,将目前最为流行又极为实用“面向对象程序设计”思想融合到c语言教学中。
3.c语言教学应培养学生良好的程序设计风格
具有良好的设计风格应该是程序员所具备的基本素质,在实际的项目中程序员往往都有自己的一些编程风格。目前95%以上的程序设计书籍不注重程序设计风格问题,这导致了很多学生没有良好的程序设计风格,在他们刚刚毕业踏入社会时,如果周围的同事没有良好的编程风格,那么很难通过环境来使自己提高这方面的素质,即使有提高也不容易比较全面的提高。因此在学生接触的第一门程序设计语言教学中,就应该培养学生良好的程序设计风格,使他们一进工作环境就具备这个素质。
Pascal设计者N.Writh教授十分重视程序设计风格的养成,他坚信“教给学生们以表达他们思维的语言会深深地影响他们思维和创造发明的习惯,而正是这些语言本身的混乱直接影响着学生们的程序设计的风格”,他这里所指的“这些运用”是当时那些主要用于程序设计教学的计算机语言。对学生来讲,一开始就强调程序设计风格很有必要,良好的程序设计风格不仅有助于提高程序的可靠性、可理解性、可测试性、可维护性和可重用性,而且也能够促进技术的交流,改善软件的质量。所以培养良好的程序设计风格对于初学者来说非常重要。程序设计风格,实际上是指的是编码风格。在教学过程中应从源程序文档化,数据说明的原则,输入/输出方法这三个方面培养学生的编码风格,进而从编码原则探讨提高程序的可读性、改善程序质量的方法。
(1)源程序文档化。编码的目的是产生程序,但是为了提高程序的可维护性。源代码是需要实现文档化的。源程序文档化包括选择标识符(变量和标号)的名字、安排注释以及标准的书写格式等。
①选择标识符的命名规则。标识符包括模块名、变量名、常量名、标号名、子程序名等。这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能顾名思义。另外在模块名、变量名、常量名、标号名、子程序名中使用下划线是一种风格。使用这一技术的一种广为人知的命名规则就是匈牙利命名法(变量类型由一个或两个字符表示,并且这些字符将作为变量名的前缀)。当然使用匈牙利命名法与否都没有错误,重要的是要保持一致性——在整个程序中使用相同的命名规则。这就是说,如果你在一个小组环境中编程,你和其他小组成员应该制定一种命名规则。并自始至终使用这种规则。如果有人使用了别的命名规则,那么集成的程序读起来将是很费劲的。此外,你还要与程序中用到的第三方库(如果有的话)所使用的风格保持一致。如果可能的话,你应该尽量使用与第三方库相同的命名规则,这将加强你的程序的可读性和一致性。
②注释。程序中的注释是程序设计者与程序阅读者之间通信的重要手段。注释能够帮助读者理解程序,并为后续测试维护提供明确的指导信息。因此,注释是十分重要的,大多数程序
设计语言提供了使用自然语言来写注释的环境,为程序阅读者带来很大的方便。注释分为功能性注释和序言性注释。
a.功能性注释。功能性注释在源程序中,用以描述其后的语句或程序段是在做什么工作,也就是解释下面要“做什么”,而不是解释下面怎么做。对于书写功能性注释,要注意以下几点:第一描述一段程序,而不是每一个语句。第二利用缩进和空行,使程序与注释容易区别。第三注释要准确无误。
b.序言性注释。序言性注释通常位于每个程序模块的开头部分,它给出程序的整体说明,对于理解程序具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关内容包括:程序标题;有关该模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述;模块位置(在哪一个源文件中,或隶属于哪一个软件包);开发简历:模块设计者、复审考、复审日期。③用标准的书写格式。源程序清单的书写建议采用以下几点:
a.每行只写一条语句;
b.用分层缩进的写法显示嵌套结构层次,这样可使程序的逻辑结构更加清晰,层次更加分明。c.书写表达式时适当使用空格或圆括号作隔离符。
d.在注释段周围加上边框;
e.注释段与程序段、以及不同的程序段之间插入字行;
(2)数据说明采用的原则。在编写程序时,要注意数据说明的风格。
数据说明的次序如果规范,将有利于测试,排错和维护。首先说明的先后次序要固定,例如,按常量说明、简单变量类型说明、数组说明用数据块说明、所有的文件说明的顺序说明。当然在类型说明中还可进一步要求,例如按如下顺序排列:整型量说明、实型量说明、字符量说明、逻辑说明。
其次当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。
最后对于复杂数据结构,应利用注释说明实现这个数据结构的特点。
(3)输入/输出方法。输入/输出的方式和格式应当尽量避免因设计不当给用户带来的麻烦。这就要求,源程序的输入/输出风格必须满足能否为用户接受这一原则。所以在设计程序时,应考虑以下原则:输入数据时,要使输入的步骤和操作尽可能简单,应允许使用自由格式输入;应允许缺省值;对输入的数据要进行检验,以保证每个数据的有效性。
(三)结束语
在教学过程中,我们让学生设计一个程序模拟体育彩票的销售与对奖的过程,取得了良好的效果。他不仅启发和诱导了学生独立思考、积极思维的主动性,而且充分调动了学生学习的自觉性和积极性,使学生融会贯通地掌握了所学知识,提高了分析问题和解决实际问题的能力。
搞好c程序设计的教学工作涉及的因素很多,如果以项目来驱动教学,首先让学生树立面向工程的思想,其次把教学从单一的“结构化程序设计”向“结构化与面向对象并举”转变,最后特别要培养学生养成良好的编码风格,从而使他们学会能够“干什么”,那么我们认为教学目的就达到了。
第二篇:c语言
学C语言有感
姓 名: 李文丽 学 号:034108048 班 级:083411 指导老师:张印
2009年12月
学C语言有感
第1页
学C语言有感
摘要:C语言既有高级语言的特点,又具有汇编语言的特点;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言C语言版本。首先按照学习C语言的顺序分别介绍了我在学习C语言过程中所遇到的问题,叙述了在C语言学习过程,学习C语言的重点,难点,以及易出错的地方,并且用具体的案例做解释。然后阐述了学习C语言的体会:C语言的语法部分是学好C语言的基础,学习c语言不能停留在学习它的语法规则,只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。最后总结学习c语言,既是件有趣的事情,又是件艰苦的事情。静下心来学习,我们会有所收获,更会其乐无穷的。
关键词:运算符 表达式 优先级 语句 变量
一、C语言的学习中的问题
在这个学期里,我们工商管理专业的学生在专业老师张印的带领下进行了实用c语言简明教程的学习。经过这一个学期的学习,我们已经对c语言这门课程有了一定的了解。C语言是一门最基础的语言,也是一门广泛使用的语言。所以学习C语言义不容辞
首先,在学习的最初几节课,老是主要向我们讲述了C语言的特点,学习C语言的意义,以及学习C语言能给我们所带来的方便优越之处。
C语言是一种结构化语言。它层次清晰,简洁紧凑、灵活方便,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强,语法限制不太严格、程序设计自由度大。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作,适用范围大,可移植性好。总之,C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有是一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言C语言版本。
当然,C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数族下标越界不作检查等。从应用的角度,C语言比其他高级语
学C语言有感
第2页
言较难掌握。
下面我给大家说一说我在学习C语言过程中所遇到的问题。
在第二章,我们学习的是数据描述与基本操作。在这一章,我们主要讲了数据类型,运算符与表达式,和不同类型数据间的混合运算。其中比较难以理解和掌握的是自加、自减运算符。
自加、自减运算符作用是使变量的值增1或减1;当符号在前,变量在后,++i/--i 变量的值先加1或先减1,然后再参与其它运算。当符号在后,变量在前,++i/--i 变量的值先参与其它运算,然后再加1或先减1。例如: # include
1.自加运算符(++)和自减运算符(--)只能用于变量,而不能用于常量或表达式,如6++或(a+b)++都是不合法的。因为5是常量,常量的值是不能改变的。(a+b)++也不可能实现,假如a+b的值为5,那么自加后得到的6放在什么地方?
2.++和--的结合方向是“自右向左”。负号运算符和++运算符同优先级,而结合方向为“自右向左”,即它相当于-(i++),如果有printf(“%d”,-i++),则先取出i的值3,输出-i的值-3,然后i增值为4。注意-(i++)是先用i的原值3加上负号输出-3,再对i加1,不要认为加完1后再加负号,输出-4,这是不对的。
例如,x=a*b+c%d 无所谓;
例如,a=3;y=a*++a;不同的编译系统有两种处理方式,结果不同:
A)按从左到右的顺序处理为:先取a的值3,再计算++a,a的值 自增为4,子表达式++a的值也为4,所以相乘的结果为12;
学C语言有感
第3页
B)按从右到左的顺序处理为:先计算++a,a的值自增为4,子表达式++a的值也为4,再取a的值为4,所以相乘的结果为16。
在第三章我们讲的是顺序结构程序设计,其中所涉及的主要问题说优先级。
说到优先级什么叫优先级?比方说,我们在公交车终点站排座队时总会遇到70岁以上的老人不需要排队就能上车的情景,这就是优先级的涵义。C程序在运行时也象排队坐车一样,首先照顾那些优先级高的运算符,若是优先级相同,那么就象遇到两位(或两位以上)70岁以上的老人那样,让他们依次上车。
下面我们通过几个例子来说明:
(1)3*20/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算3 * 20=60,然后被4除,结果为15,最后是%(求余数)运算,所以表达式的最终结果为15%10 = 5(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
例子中的“;”是C语言的语句分隔符,执行顺序为从左到右,第1条语句执行后a的值为3,第2条语句执行后b的值为5,第3条语句中有两个运算符前置+ +和*,按表中所列顺序,+ +先执行,*后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值为20,最后执行第4条语句,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20。(3)a = 3,b = 5,b+ = a,c = b* 5
例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。
但是C语言中的优先级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。例如条件表达式:条件?结果1:结果2,这种表达式很多朋友都知道,它的作用与IF…ELSE…条件判断语句很雷同,它运算时的优先级就不是按照C语言的规则来完成的。所以说对于优先级各位编程爱好者一定灵活掌握,不要死记硬背。
第三四章的选择结构程序设计和循环结构设计说我们这学期所学内容的重点。在这里,学者结构程序设计比较简单,我们就不多说了,主要谈一下循结构环程序设计。
学C语言有感
第4页
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do –while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提昌用goto循环,所以下面我们重点讲解另外的三种循环。
用while和do—while循环时,循环变量的初始化的操作应在循环体之前,而for循环是在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do—while循环是先执行循环体后判断表达式,也就是说do—while的循环体最少被执行一次,而while 循环和for就不一定了。这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,不能用break和 continue语句进行控制。这三种结构并不是彼此孤立的,在循环中可能出现分支、顺序结构,分支中也可能出现循环、顺序结构而把循环、分支看成一个语句,它又是构成顺序结构的一个元素,因此这三种结构相互结合,就能实现各种算法,设计出解题程序,但若是很大的题目,这样编出的程序往往很长,重复结构多,并且可阅读性差,因此我们常将C程序设计成模块化结构。
二、C语言学习的重点、难点
针对我个人而言,在C语言学习过程,学习C语言的重点,难点,以及易出错的地方主要有以下几个方面: 如果对几个变量赋予同一个初值,应写成: int a=3,b=3,c=3;表示a、b、c的初值都是3。不能写成: int a=b=c=3;2 强制类型转换其一般形式为(类型名)(表达式)表达式应该用括号括起来。如(int)(x+y)表示将x+y的值转换成整形如果写成(int)x+y则表示将x转换成整形,然后与y相加。使用scanf函数注意的问题: ①“格式控制”后面应当是变量地址,而不应是变量名。如 scanf(“%d”,a)是不对的,应改为scanf(“%d”,&a);②scanf函数格式控制最后面不能有n否则将没有结果输出如scanf(“%dn”,&a);是不对的。③输入数据时不能规定精度,如scanf(“%7.2f”),&a);是不合法的 ④如果在%后有一个“*”附加说明符,表示跳过它指定的列数。
学C语言有感
第5页
三、学习c语言的体会
在经过了一个学期的学习之后,对于学习c语言心得体会也总结了一下:
1、既然是一门语言,他就汉语,英语一样,都有自己的语法规则,学习一门语言,就是要按照它的语法来编程。C语言的语法部分是学好C语言的基础,只有学好了这些语法,才会写程序,看程序。所以对一个初学者来说,加深对课堂讲授内容的理解,要扎实地熟悉每一个语法,并能根据这些语法来编程。
2、课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
3、学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。学习C语言是没有什么捷径的,打好基础,做好每章的练习才是关键。尤其是书本里的习题,不能因为简单就不去实践,学习C语言,乃至于学习所有的电脑知识都是一样的,实践练习永远处于最为重要的地位,须知电脑是要实际操作的,对于C语言,更是要是把这个程序自己编出来并且运行成功,知识点才记得最为深刻。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。学习c语言更为重要的是掌握编程的思想,如何用简捷的方法解决一个问题。同样做一个循环问题,可能有人要做300次循环,而有的人要做100次,这就是差距。平时,我们学习的时候要注意掌握每个概念,当然理论的学习是离不开实践的,尤其是c语言,需要你编写大量的程序,最初可以学着别人的程序打,慢慢就应该独立出来,把自己的想法用c语言描述出来,这是一件十分快乐的事情。建议初学者不要看高级编程,先勤写代码、多看代码、培
学C语言有感
第6页
养风格、熟悉语法、最关键的还是把握思想。当你能够信手拈来的时候,你的c语言才可以说学会了。一定要养成自己独立写完一个程序的能力,这样可以有一种成就感。不断培养这种成就感,循序渐进,进步是自然的事情。
四、总结
学习c语言,既是件有趣的事情,又是件艰苦的事情。说它有趣,是因为从中你能得到快乐,能使你的计算机整体水平上升一大步。说它艰苦,是因为学习它的过程比起学习其他计算机知识,要难得多
C语言只是一门计算机语言,说到底就是一种工具。它的用处就是可以让你用它编出能够运行的程序来,而这些程序可以实现某些人需要的功能。人通过学习c语言也可以更加深入的了解计算机,所以很多人都把c语言作为计算机入门的第一门语言来学习,因为他学习起来相对简单一些。至于实际的意义,无非是让你多学会一门技能,让你更加深入对计算机的了解,为学习其他计算机语言打下好的基础。
学习最好抱着一种踏踏实实的心态,老是想着有什么实际的好处并不会促进我们的学习,因为知识对人的影响是潜移默化的,静下心来学习吧,我相信我们会有收获的!而且如果你真的用心学习,会发现学起来越来越有意思,也会给你带来无穷的乐趣的!
学C语言有感
第7页
参考文献:
[1] 3 沈其益等编著,棉花病害——基础理论与防治,北京:科学出版社,1992.7 [2] 3 沈其益、张三等编著,棉花病害——基础理论与防治,北京:科学出版社,1992.7。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。参考文献(不少于10篇,中文参考文献不少于7篇,英文不少于3篇)
学C语言有感
第8页
学C语言有感
第9页
第三篇:C语言
1.算法(Algorithm)是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决
问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
2.算法具有以下特点:有穷性、确定性、有零个或多个输入、有一个或过个输出、可行
性。
3.结构化程序设计的三种基本结构:顺序结构、选择结构、循环结构。
4.结构化程序:自顶向下、逐步求精、模块化设计、结构化编码。
5.什么叫结构化算法,为什么要提倡结构化算法:结构化算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内。一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。跟结构化算法比较起来,非结构化算法有以下缺点。流程不受限制的随意转来转去,使流程图豪无规律.使人在阅读的时候难以理解算法的逻辑.难以阅读,也难以修改.从而使算法的可靠性和可维护性难以保证。
6.结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详
细设计的基本原则
第四篇:C语言
整形
字符型 单精度型基本类型双精度型枚举类型
数组类型
构造类型结构体类型
数据类型
共同体类型
指针类型(C语言的精华)
空类型
整形:int
字符型 char
单精度实型 float双精度实型 double
运算符
※ 乘法运算符
/ 除法运算符
﹪ 求余运算符
》 右移运算符
《 左移运算符
==等于运算符
!= 不等于运算符
第五篇:C语言
Home
Exam List
Notification
Problem
Ranklist
Message
User Information
HJP-2013学期作业
程序设计题
1.(10分)
一秒钟以后
题目描述
输入某时刻的时、分、秒数,输出一秒钟以后的新时刻。时间采用24小时制
输入描述
时、分、秒都是整数,输入时以空格分隔。
输出描述
时、分、秒以:分隔
输入样例 8 59
输出样例
14:9:0
用户代码
#include
printf(“0:0:0”);}
最后保存时间: 2013-10-30 16:11:42 本题得分:10分(4/4)
查看最新评判结果
2.(10分)
进制转换
题目描述
输入一个十进制正整数,输出对应的二进制数串
输入描述
输入一个正整数n,n大于零。
输出描述
对于每个测试实例,输出一行二进制码。
输入样例
输出样例
10010
用户代码
#include
if(n%2==0)
a[i]=0;
else
a[i]=1;
n=n/2;
k=k+1;} while(k>0)
printf(“%d”,a[--k]);
system(“pause”);}
最后保存时间: 2013-10-28 17:22:36 本题得分:10分(1/1)
查看最新评判结果
3.(10分)
简易计算器
题目描述
简易计算器:能完成整数的加、减、乘、除和模除运算。
输入描述
输入为一行: 一个整数a,一个字符c以及另一个整数b。
输出描述
输出为一行,内容是a和b进行整数运算c所得结果: 当c为+时,输出a+b;当c为-时,输出a-b;当c为*时,输出a*b;当c为/时,输出a/b;当c为%时,输出a%b;当c为其它字符或者a和b无法进行c所规定的整数运算时,输出NA。
输入样例
8+5 6/0-7%-4 3#9
输出样例NA-3 NA
用户代码
#include
sum=a/b;printf(“%d”,sum);}
else if(b==0)
printf(“NA”);break;case '%':if(b!=0){
sum=a%b;printf(“%d”,sum);}
else if(b==0)
printf(“NA”);break;default:printf(“NA”);break;} }
最后保存时间: 2013-10-30 16:17:52 本题得分:10分(5/5)
查看最新评判结果
4.(10分)
一元二次方程根的个数
题目描述
输入一元二次方程的系数a,b,c,输出方程的根的个数。
输入描述
三个实数
输出描述
输出方程的根的个数
输入样例3 2
输出样例
用户代码
#include
printf(“1”);else if(d>0)
printf(“2”);else
printf(“0”);}
最后保存时间: 2013-10-28 10:41:49 本题得分:10分(3/3)
查看最新评判结果
5.(10分)
多项式求和
题目描述
多项式的描述如下:
11/4 + 1/5-1/6 +...现在请你求出该多项式的前n项的和。
输入描述
每组输入数据是一个正整数n(n<1000)。
输出描述
对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。
输入样例
输出样例
0.50
用户代码
#include
y=j*1.0/i;
x+=y;
i++;
j=j*-1;} printf(“%.2f”,x);system(“pause”);}
最后保存时间: 2013-10-28 11:03:19 本题得分:10分(4/4)
查看最新评判结果
6.(10分)
青年歌手大奖赛_评委会打分
题目描述
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
输入描述
输入数据的第一个数是n(2 输出描述 对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。 输入样例 100 99 98 97 输出样例 98.50 用户代码 #include for(i=0;i scanf(“%lf”,&b); { if(i==0){ min=b;max=b; } if(b>max) max=b; if(b min=b;} sum=sum+b; }sum=sum-min-max; ave=sum/(n-2); printf(“%.2f”,ave);} 最后保存时间: 2013-10-30 22:32:09 本题得分:10分(5/5) 查看最新评判结果 7.(10分) 百钱买百鸡 题目描述 这是一个经典问题:话说某人用一百个铜钱刚好买了一百只鸡, 其中一只公鸡x个铜钱, 一只母鸡y个铜钱,一个铜钱z只小鸡,问一百只鸡中公鸡,母鸡,小鸡各有多少只呢? 输入描述 输入数据包含三个正整数x、y、z,其具体含义参见题目描述。 输出描述 如果给定的数据无解,请输出:“no solution!”.否则,请分别输出公鸡、母鸡和小鸡的个数,数据之间用一个空格隔开。 如果有多组答案,请用多行输出所有结果,并优先输出x较小的结果(x相同的,再比较y,y较小者优先输出),具体格式参见样例; 输入样例3 3 输出样例 18 78 8 11 81 12 4 84 用户代码 #include for(j=1;j<=100/y;j++) for(k=1;k<=100*z;k++){ if(i+j+k==100&&x*i+y*j+k/z==100&&k%z==0){ printf(“%d %d %dn”,i,j,k); a=1; } }if(a==0) printf(“no solution!”);} 最后保存时间: 2013-12-12 20:58:49 本题得分:10分(5/5) 查看最新评判结果 8.(10分) 丑数的个数 题目描述 如果一个正整数分解后的的所有素因子最多只有2,3,5,7四种,则这个数称为丑数,比如,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27就是前20个丑数。请编程判断一个数是否是丑数。 输入描述 输入数据首先包含一个整数N(1<=N<=10),表示给出的正整数的个数,然后是N个32位的正整数。 输出描述 请编程输出给出的这些数中丑数的个数。 输入样例 2 9 11 65 100 输出样例 用户代码 #include scanf(“%d”,&a[i]); for(i=0;i while(a[i]%2==0) a[i]=a[i]/2; while(a[i]%3==0) a[i]=a[i]/3; while(a[i]%5==0) a[i]=a[i]/5; while(a[i]%7==0) a[i]=a[i]/7; if(a[i]==1) k++;}printf(“%d”,k);} 最后保存时间: 2013-10-29 17:42:38 本题得分:10分(5/5) 查看最新评判结果 9.(10分) 哥德巴赫猜想 题目描述 德国数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个素数的和。但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对。输入N,判断它可以分解成多少种不同的素数对。(注: A+B与B+A认为是相同素数对) 输入描述 一个大于6的偶数 输出描述 可分解成的素数对的数目 输入样例 输出样例 用户代码 #include if(a%j==0){flag=0;k=0;break;} if(flag==1)k++;}if(k==0||a==1) return 0;else return 1;} void main(){ int n,i,t,x=0;scanf(“%d”,&n);for(i=2;i<=(n/2);i++){ t=han(i); if(t==1) if(han(n-i)==1) x++;} printf(“%d”,x);} 最后保存时间: 2013-11-11 13:11:49 本题得分:10分(2/2) 查看最新评判结果 10.(10分) 绝对素数 题目描述 编写方法static int prim(int k)判断一个数是否为素数。在主方法实现如下功能:输入一个10-99之间的两位整数,判断该数是否为绝对素数。所谓绝对素数是指本身是素数,其逆序数也是素数的数。例如:13绝对素数;23不是绝对素数。 输入描述 输入一个10-99之间的两位整数。 输出描述 判断该数是否为绝对素数,是则输出YES,否则输出NO。 输入样例 输出样例 YES 用户代码 #include if(n%i==0){ flag=0;break;} } if(flag==1) a=1;else a=0;b=n/10;c=n%10;x=c*10+b;if(a==1){ for(i=2,lead=1;i if(x%i==0){ lead=0;break;} } } if(lead==1) printf(“YES”); else printf(“NO”);} 最后保存时间: 2013-11-25 17:21:28 本题得分:10分(4/4) 查看最新评判结果 11.(10分) 最大公约数和最小公倍数 题目描述 输入两个正整数m和n,求其最大公约数和最小公倍数。 输入描述 输入一行,包含两个正整数,之间用空格分隔。 输出描述 输出一行,包含最大公约数和最小公倍数,之间用空格分隔。 输入样例 60 输出样例 180 用户代码 #include if(i%n==0&&i%m==0){ k=i;break;} }return k;} void main(){ int a,b,x,y;scanf(“%d%d”,&a,&b);x=han(a,b);y=(a*b)/x;printf(“%d %d”,y,x);} 最后保存时间: 2013-11-26 12:53:16 本题得分:10分(3/3) 查看最新评判结果 12.(10分) 数字计算 题目描述 给出一个不多于7位的正整数,要求(1)求出它是几位数;(2)分别打印出每一位数字;(3)按逆序打印出各位数字,例如原数为321,应输出123。 输入描述 输入一行,包含一个不多于7位的正整数。 输出描述 输出三行,第一行为几位数,第二行为每一位数字(用空格分开),第三行为逆序数字。 输入样例 12345 输出样例 5 1 2 3 4 5 54321 用户代码 #include n++;printf(“%dn”,n);for(i=0;c[i]!=' ';i++){ printf(“%c ”,c[i]);} printf(“n”);while(n>0) printf(“%c”,c[--n]);} 最后保存时间: 2013-11-26 18:05:45 本题得分:10分(3/3) 查看最新评判结果 13.(10分) 统计字符数 题目描述 判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多。 输入描述 一个由 a-z 这26个字符组成的字符串,长度不超过1000.输出描述 出现次数最多的字符和该字符出现的次数,中间用一个空格隔开。 输入样例 abbccc 输出样例 c 3 用户代码 #include int a[26],i,max=0;char c[1001];gets(c);for(i=0;i<26;i++) } a[i]=0;for(i=0;i max=i;} printf(“%c %d”,max+'a',a[max]);最后保存时间: 2013-11-27 10:22:57 本题得分:10分(3/3) 查看最新评判结果 14.(10分) 对称译码 题目描述 有一行电文,已按下面规律译成密码: A->Z a->z B->Y b->y C->X c->x …… 即第1个字母变成第26个字母, 第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编程将密码译回原文。 输入描述 输入一行电文。(电文字符数不超过100个字符,其中包含空格,电文以换行结束) 输出描述 输出译码后的原文,占一行。 输入样例 R zn z hgfwvmg.输出样例 I am a student.用户代码 #include for(i=0;i<=25;i++) { str1[i]='a'+i; str2[i]='A'+i; } gets(c);for(i=0;c[i]!=' ';i++){ for(j=0;j<26;j++){ if(c[i]<='z'&&c[i]>='a'&&c[i]==str1[j]){ c[i]='z'-j;break; } if(c[i]<='Z'&&c[i]>='A'&&c[i]==str2[j]){ c[i]='Z'-j;break; } } } printf(“%s”,c);} 最后保存时间: 2013-11-27 11:27:41 本题得分:10分(3/3) 查看最新评判结果 15.(10分) 最长单词 题目描述 找出一个英文字符串中第一个最长的英文单词,各英文单词间以一个或多个空格分隔.输入描述 输入一串字符串,长度不超过1000.输出描述 最长单词,占一行.输入样例 I am a student 输出样例 student 用户代码 #include j++; c[j]=' ';for(i=0;c[i]!=' ';i++){ n++; if(c[i]==' '){ if(n==i) max=n-1; m=n-1; n=0; if(m>max){ max=m;k=i; } } } for(i=k-max;i printf(“%c”,c[i]);} 最后保存时间: 2013-12-12 20:59:31 本题得分:3分(1/3) 查看最新评判结果 16.(10分) 百分制成绩转化为五级制成绩 题目描述 给出一个百分制成绩,要求输出成绩等级'A','B','C','D','E'。90分及以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下(不含60分)为'E'。 输入描述 输入百分制的成绩 输出描述 输出与百分制成绩对应的五级制成绩 输入样例 输出样例 A 用户代码 #include int iNum; scanf(“%d”, &iNum); switch(iNum / 10) { case 10: case 9 : printf(“A”);break; case 8 : printf(“B”);break; case 7 : printf(“C”);break; case 6 : printf(“D”);break; default: printf(“E”);break; } } 最后保存时间: 2013-12-10 21:51:57 本题得分:10分(3/3) 查看最新评判结果 17.(13分) 打印数字三角形 题目描述 输入一个非负整数n(1~100),打印出具有以下规律的图形。如输入n=4,时,打印出数字图形如下: 5 2 8 6 3 10 9 7 4 输入描述 输入一个非负整数n(1~100) 输出描述 输出一个数字三角形,数字之间空格隔开,每行数字换行。 输入样例 输出样例 2 7 3 11 8 4 14 12 9 5 用户代码 #include t=t+y; y--;}return t;} void main(){ } int a,n,i,j;scanf(“%d”,&n);for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ a=han(i,j,n); printf(“%d ”,a);}printf(“n”);} 最后保存时间: 2013-12-15 22:11:14 本题得分:10分(2/2) 查看最新评判结果 18.(10分) 求和 题目描述 求 a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字,n表示a的位数,例如: 2+22+222+2222+22222(此时n=5) 输入描述 输入a(1~9)和n(1~9),二者用空格分开.输出描述 输出计算得到的和.输入样例5 输出样例 24690 用户代码 #include e=e+q*pow(10,j);}return e;} void main(){ int m,n,i,a=0;scanf(“%d%d”,&m,&n);for(i=n-1;i>=0;i--){ a=a+han(m,i);}printf(“%d”,a);} 最后保存时间: 2013-12-04 16:08:31 本题得分:10分(3/3) 查看最新评判结果 19.(10分) 常给父母打电话 题目描述 小明是一个懂事的孩子,他经常给父母打电话。可是知道他不知道每次给父母打了多长时间,现在他请你这个编程高手帮他计算一下。 输入描述 输入起始和结束时间,格式是hh:mm:ss,即小时、分钟、秒。 输出描述 输出小明打电话的时间,以秒为单位。 输入样例 06:00:00 07:00:00 输出样例 3600 用户代码 #include 最后保存时间: 2013-12-04 16:20:18 本题得分:10分(3/3) 查看最新评判结果 20.(10分) I guess you can't pass it 题目描述 在2*n+1个数中,只有一个数只出现了1次,其他的数都出现了偶数次,现在请你找出这个只出现了1次的数。 输入描述 第一行一个整数n,n<=50000.第二行2*n+1个整数,整数之间用空格隔开。每个整数都在int范围内.输出描述 输出只出现了1次的那个数。 输入样例2 2 3 3 5 输出样例 用户代码 #include scanf(“%d”,&a[i]);for(i=0,flag=1;i t=0; for(j=0;j if(a[i]==a[j]) t++; }if(t==1) k=i;}printf(“%d”,a[k]);} 最后保存时间: 2013-12-15 21:10:16 本题得分:0分(0/2) 查看最新评判结果 21.(10分) 素数输出 题目描述 输出素数 输入描述 输出N以内的全部素数。输入N 输出描述 在一行内输出N以内的全部素数,不含N,数字之间以空格分隔。 输入样例 输出样例 3 5 7 用户代码 #include for(x=2,flag=1;x<=sqrt(i);x++) if(i%x==0){flag=0;break;} if(flag==1) printf(“%d ”,i);} } 最后保存时间: 2013-12-10 21:49:34 本题得分:10分(3/3) 查看最新评判结果 22.(10分) 三角形 题目描述 给定三条边,请你判断一下能不能组成一个三角形。 输入描述 输入只有一行,包含三个正数A,B,C。 输出描述 如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。 输入样例2 3 2 2 2 输出样例 NO YES 用户代码 #include printf(“YES”);else printf(“NO”);} 最后保存时间: 2013-12-10 21:53:26 本题得分:10分(3/3) 查看最新评判结果 23.(10分) 求奇数的乘积 题目描述 给你n个整数,求他们中所有奇数的乘积。 输入描述 第一行为n,整数的个数。第二行为n个整数。 输出描述 输出n个整数中奇数的个数.输入样例1 2 3 输出样例 用户代码 #include scanf(“%d”,&a[i]);for(i=0;i if(a[i]%2==1) q=q*a[i];}printf(“%d”,q);} 最后保存时间: 2013-12-15 21:29:32 本题得分:10分(3/3) 查看最新评判结果 24.(10分) 回文数猜想 题目描述 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。 输入描述 每行一个正整数。 特别说明:输入的数据保证中间结果小于2^31。 输出描述 输出两行,一行是变换的次数,一行是变换的过程。 输入样例 输出样例23--->55 用户代码 最后保存时间: 从未保存 25.(10分) 计算组合数 题目描述 计算从n个人中选k个人组成委员会的不同组合数。 输入描述 分别输入n和k。 输出描述 输出组合数,占一行。 输入样例2 输出样例 用户代码 #include k=k*q;}return k;} void main(){ int m,n,a,b,c,x,i;scanf(“%d%d”,&m,&n);a=han(m);b=han(n);i=m-n;c=han(i);x=a/(b*c);printf(“%d”,x);} 最后保存时间: 2013-12-11 13:02:11 本题得分:10分(3/3) 查看最新评判结果 26.(10分) 诸葛亮舌战群儒 题目描述 如果能穿越时空,zero真的好想去三国那个时期.所以zero很喜欢玩三国游戏,甚至还想开发一款三国游戏.言归正传,这次我们玩的游戏是舌战群儒。诸葛亮一个人开始与东吴的谋士一较高下,能否与东吴结盟,就看此时了。诸葛亮可以随便选择一个对手进行较量,只要诸葛亮的智力比他高,那么诸葛亮就赢了,否则就输了。 输入描述 首先输入一个整数M(0 接下来一行有N个整数,分别代表N个对手的智力(均小于等于1000000)。 输出描述 输出诸葛亮最多可以战胜几个对手。 输入样例 5 1 2 90 94 5 输出样例 用户代码 #include scanf(“%d”,&a); if(a k++;}printf(“%d”,k);} 最后保存时间: 2013-12-11 13:06:25 本题得分:10分(3/3) 查看最新评判结果 27.(10分) 数字根 题目描述 一个正整数的数字根是通过计算该整数的各位的和产生的。如果一个整数的各位和是一位整数,那么这个数字就是该整数的数字根。如果该整数的各位和是两位或多位整数,那么,就需要重复计算各位的和,直到获得一位整数。例如,考虑正整数24。把2与4相加得到6。由于6是一个一位整数,所以,6就是24的数字根。现在再来考虑正整数39。3与9相加等于12。因为 12不是一位整数,因而,需要重复处理。再把 1 加2得到3,现在3已是一个一位整数了,那么3就是39的数字根。 输入描述 输入只有一个整数n.输出描述 输出n的数字根。 输入样例39 输出样例 3 用户代码 #include b++; n=x%10; x=x/10; q[b]=n;}while(x>0);for(e=1;e<=b;e++){ w=w+q[e];}return w;} void main(){ int i,m;scanf(“%d”,&m);do{ if(han(m)>=10) m=han(m); else i=0;}while(i=0);printf(“%d”,han(m));} 最后保存时间: 2013-12-12 20:50:11 本题得分:10分(3/3)查看最新评判结果 28.(10分) 神奇的数字 题目描述 假设你有一个各位数字互不相同的四位数,把所有数字从大到小排序后得到a,从小到大排序后得到b,然后用a-b替换原来的数,并且继续操作。例如,从1234出发,依次可以得到 4321-1234=3087、8730-378=8352、8532-2358=6174.有趣的是,7641-1467=6174,回到了它自己。 输入一个n位数,输出操作序列,直到出现循环(即新得到的数曾经得到过).输入保证在循环之前最多只会产生1000个整数。 输入描述 输入只有一个整数n.输出描述 输出操作序列。 输入样例 1234 输出样例 1234->3087->8352->6174->6174 用户代码 最后保存时间: 从未保存 29.(10分) 2013年即将过去 题目描述 2013年即将过去,你需要求出N的阶乘对2013的求余结果。例如:3!(3的阶乘)等于6,6%2013等于6,所以3!%2013=6。注意:N<=60.输入描述 输入只有一个整数N.输出描述 输出N!%2013的结果。 输入样例 输出样例 用户代码 #include k=k*q;}return k;} void main(){ int n,m,a;scanf(“%d”,&n);m=han(n);a=m%2013;printf(“%d”,a);} 最后保存时间: 2013-12-23 17:18:52 本题得分:0分(0/3) 查看最新评判结果 30.(10分) 约瑟夫环 题目描述 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的 人退出圈子,问最后留下的是原来第几号的那位? 输入描述 正整数n 输出描述 正整数,表示留下者的号码 输入样例 输出样例 用户代码 #include a[i]=i+1;t=0;i=0;j=0;while(t if(a[i]){ k++; if(k%3==0){ t++; b[t]=a[i]; a[i]=0; } } i++; if(i==n) i=0;}printf(“%d”,b[10]);} 最后保存时间: 2013-12-11 13:46:12 本题得分:10分(1/1) 查看最新评判结果 返回题目列表.注销 Home|Top Hangzhou Dianzi University Online Judge 3.0 Copyright ? 2005-2013HDU ACM Team.All Rights Reserved.Designer & Developer : Wang Rongtao LinLe GaoJie GanLu Total 1,387,969,257.763429(s)query 0, Server time : 2013-12-25 19:00:57, Gzip enabled Administration