C语言教学改革的探讨

时间:2025-02-16 03:56:14 作者:nmhmhmh 综合材料 收藏本文 下载本文

【导语】“nmhmhmh”通过精心收集,向本站投稿了16篇C语言教学改革的探讨,下面是小编为大家推荐的C语言教学改革的探讨,欢迎大家分享。

篇1:C语言教学改革的探讨

C语言教学改革的探讨

具有较强的综合性、实用性、应用范围.我们特科研中的实战经验用于教学,提高学生的`学习兴趣,改革教学内容和教学方法,优化实验和课程设计环节,以此改善教学效果.

作 者:李红军 黄少敏  作者单位:李红军(武汉科技学院机电学院,湖北,武汉,430073)

黄少敏(武汉水利水电科学研究所,湖北,武汉,430070)

刊 名:中国新技术新产品 英文刊名:CHINA NEW TECHNOLOGIES AND PRODUCTS 年,卷(期):2009 “”(12) 分类号:G71 关键词:教学方法   C语言   教学研究  

篇2:独立学院C语言程序设计教学改革与实践

独立学院C语言程序设计教学改革与实践

由于C语言程序设计课程内容比较抽象,加之传统的教学常以教师讲授为主,因此高校学生,特别是独立学院学生普遍反映C语言难学.文中笔者介绍了多年来在教学方法、教学内容和教学手段上所进行的'改革,即针对独立学院学生素质特征,运用现代教学理论和技术所进行的新型教学方法尝试.

作 者:唐杰桂  作者单位:林理工大学博文管理学院 刊 名:青年与社会・中外教育研究 英文刊名:CHINESE AND FOREIGN EDUCATION RESEARCH 年,卷(期):2009 “”(12) 分类号:G642 关键词:独立学院   C语言   程序设计   教学改革与实践  

篇3:谈高职C语言课程教学改革与实践

谈高职C语言课程教学改革与实践

C语言程序设计是计算机、数控维修及机电类专业的基础课程.本课程的教学目标是培养学生模块化程序设计的逻辑思维能力,掌握程序设计的.基本语法规则和程序调试方法,并具有初步的分析问题和解决问题的能力.通过对本课程在教学中积极进行教学模式改革,突破传统教学思路,发挥学生的主体作用,整合教学内容,采用实践一体化教学手段,以便培养学生解决实际问题能力.

作 者:周钦 王艳秋  作者单位:周钦(沈阳航空职业技术学院,辽宁,沈阳,110043)

王艳秋(抚顺职业技术学院,辽宁,抚顺,113006)

刊 名:辽宁高职学报 英文刊名:LIAONING HIGHER VOCATIONAL TECHNICAL INSTITUTE JOURNAL 年,卷(期):2009 11(3) 分类号:G712 关键词:C语言   课程   教改   实践  

篇4: c语言心得体会

c语言心得体会范文 1

在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为期一周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。在这里,我作为其中的参与者,感触良多。

在这次实训中,我对对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。这次的实训,使我对C语言的学习产生浓厚的兴趣。

还是这次实训,最令人激动的就是合作做项目,虽然那只是一个很小很小的项目。每天大家来得很早,大家在一起学习,取长补短,我们很好的在实训中长知识,提高我们的学习热情。实训中深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式,虽然对有些时候老师没给我们指出解决问题的方法有些小抱怨,但是到了结束时才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。更多是老师给的感动,每天在我们来之前就到了教室,在讲课中海给我们分享他在公司上班的一些心得和体会,还有那些我们应该注意的事项,这些是平时上课时无法学到的,是更深层次的巨大收获。

通过这次实训,也使我们发现了许多问题。

在实训中,我们认识到自己还有很多的知识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。

还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。

首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力。

总之,这一切都成为我记忆里面的一个 篇章,更是在C语言编程上的一个里程碑。

c语言心得体会范文 2

在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试自己编写一个比较复杂的程序系统。在为期两周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。在这里,我作为其中的参与者,自然感触良多。

刚开始接触到C的时候,我已经学过一些有关VB的内容,这个在算法和思维上稍微有点帮助。回想本学期的学习,首先,最基本的,是C的数据格式,让我们知道整数,浮点数以及字符常量在C中的运用。然后,在学会了数据转化,以及熟练的可以对各种数据处理之后,我开始进行有关数据结构,像数组,结构体等的学习,因为有的东西从现有的知识来看都是非常简单的,还没有联系到指针等等一些复杂的概念。可是,仅仅学会这些是远远不够的,C语言中,还有很多更加经典、重要、实用的知识。

说说函数。虽说很多程序语言都有函数这一内容,但我觉得C语言的函数是最有魅力的了。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,学习C语言的“高人”都说,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。比如,大家可以作一个比较字符串的实验,用C语言中的strcmp函数只要一句话,而自己编写的话,30句都很难实现,可想而知函数的实用和快捷。在我们C语言实训的代码中,函数更是得到了充分的应用,可以说,实训题目的复杂代码,就是用无数个函数的调用和嵌套积累出来的。

要注意的是,有的同学刚刚开始的时候,都是被一些大的程序激励的,所以当开始的时候看到繁琐的数据转化和简单的算法,都觉得很无聊,都想自己做几个自己满意的程序来看看,虽然这种想法很好,但是,我们说,没有基础,纯粹是搬照一些现成设计方法,是不足取的。要知道,程序设计讲究的是个人的思维的,假如刚开始就被一些现成的思想束缚住,以后就会觉得很无趣。

我们知道,指针其实是C语言的灵魂,许多的数据结构在我们学到这里之前都可以说是精通了。所以我们的任务就是,让数据结构在指针中运行。当然,刚刚开始接触到这些新的东西,是一件非常痛苦的事情,所以我们一定要用非常形象的思维去看待指针,不能太固化。所以,新的东西,比如结构体在指针中的表现方法,数组及多维数组在结构体中的运用,都一点一点的加了进来,同时丰满了我们对原来C的数据机构,数据表示的理解。当我们完成了这三步的学习,我们已经可以自豪的说,我们的基础都扎实了,可以进一步的学习有关算法,设计概念等等深层次的东西了。

但是,指针,结构体,这些太抽象的东西,在学习C语言的时候我们就有点“似懂非懂”,可是在眼下的C语言实训中,像这么重要的C语言知识,一定要达到能熟练掌握,实际运用的程度。在实训的大程序中,结构体在指针中的表现方法,数组及在结构体中的运用等具体的技术环节,都得到了体现,不会指针,我们的工作是没法展开的。所以,在实训期间,大家在巩固基本知识的基础上,逐块攻克实训课题,克服了困难,自信心得到了提高。

最后,谈谈我们组的程序软件。商店商品管理系统,是一个比较利于应用,解决实际问题,方便实际管理的程序。设计代码比较复杂,结构比较严谨。在程序编写的1周左右的时间里,组员们遇到了上述的困难,包括程序设计构思,甚至是指针等某些知识点的欠缺,导致的工作中出现的困难。但是,当大家一起团结协作,解决了这些困难之后,发现自己也可以编写复杂的、应用性的程序了,更发现自己对C语言这门学科的兴趣也提高了。

当然,我们编写的商店商品管理系统,还存在很多疏漏和不合理之处。比如,程序复杂冗长,如果时间充裕,我们将在不改变程序运行结果的基础上,简化程序,使每一句更加精辟,总体上更加简化。另外,在程序的外观上,我们由于时间问题,没有做更多的修饰,运行起来显得比较死板、枯燥乏味。如果增添一些色彩和其他效果,我们的程序也许会更加完美。

c语言心得体会范文 3

通过一学期对C语言的学习,我感觉学习C语言是有一定难度却又是非常有趣的科目。也是很有帮助的,特别是对将要面对的计算机二级考试。这段时间的学习我知道了C语言的基本特点有以下几点:

1.语言简洁,使用灵活方便。

2.运算符丰富,表达能力强。

3.数计类型丰富。

4.目标程序质量高,具有面向硬件系统的特点。

5.具有结构化的控制语句和模块化的程序结构。

6.具有编译预处理功能。

7.程序设计自由度大,可移植性好。

这段时间学习使我掌握了:

一、我学习了C语言的数据类型、常量与符号常量、变量、C语言的运

算符和表达式、赋值运算符和赋值表达式、自增自减运算符以及逗号表达式等。

二、这章介绍了结构化程序的三种基本结构、C语句概述、数据输出包

括字符输出函数putchar和格式输出函数printf、数据输入包括字符输入函数getchar和格式输入函数scanf,还有一些简单的C语程序设计举列等。

前几天一直在看C++语法,所以对一些比较实际的例子总感到比较抽象,但是那也是一个必需阶段,可能大家和我的学习方式不一样,但从刚接触程序到现在来看,发现这样学习语言的方法挺不错的。

经过第一阶段对语法的学习,我觉得实例阶段应该是一个过渡阶段吧,通过前一阶段对语法的学习之后,可能有很多概念我们都比较模糊,或者说很多东西太抽象了,这就为我们第二个阶段的学习做好了实例化的准备,可以这样说吧,第一个阶段就我们为我们的学习一样东西而构建的一个类,里面讲了我们应该在这里面要做什么?第二阶,也就是本阶段,我们就应该去把前一段的东西具体化(实例化先前创建的类),那怎么个具体化呢,呵呵!说白了,去练习一些小例子,从网上下载的电子书上有很多这方面的例子的,如果有自己去书店买书的话,里面也应该提供了不少,里面的例子,我是每次都打了一遍,也许有的人不会亲自去用手打一遍,什么copy等,当然这样也行,但我个人认为,对于初学者来说,最好还是自己动手打一遍比较好,毕竟这些东西对我们来说,都比较陌生,如果每个字都自己打完的话,有些代码你不想记住也难了,在这里,我们得弄懂练习的每一个例子,如果能把一些例子稍稍修改,弄懂里面精髓的东西,让自己知道为什么这样做,那么是最好不过的了,我平时练习时,这一步是少不了的,都习惯了,所以也就成了条件反射,想不这样都不行。最后,我们就应该汇一下总,把前面做过的例子里所用的技术理一下,再做一个比较大的例子,尽量把到目前为止所懂的知识全部应用到里面去,只是尽量,当然有些东西是不能集成到一起的,也是是代码之间的排斥性。

这是个人的一点学习心得,希望能更好的运用到学习中去。C语言是一门很有用的、对于我们的就业很实际的语言,学习好C语言是一项必须而实际的任务。我们必须要好好掌握。

c语言心得体会范文 4

在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。

在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理。简单界面程序。高级界面程序。程序的添加修改。用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:

1.加深对课堂讲授内容的理解

课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,

这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。

通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。

2.熟悉程序开发环境、学习计算机系统的操作方法

一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓“环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。

3.学习上机调试程序

完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的'调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。

通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难。

c语言心得体会范文 5

1、引言

《C语言程序设计》是各大高校理工类专业的一门重要的必修课程,由于C语言使用灵活,数据类型繁多,结构复杂,因此学生在学习该课程时都或多或少的感觉头疼,学习不得要领。这就要求教师在教学中需要贯穿先进的教学理念,采用适合的教学方法。本文针对C语言教学中存在的问题,结合多年的教学经验,提出几点教学方法和体会。

2、C语言教学中存在的问题

2.1学生学习热情不高

C语言课程的开设对象一般为大一学生,想让他们马上接受程序设计的思想几乎是不可能的。另外他们从高年级同学那里得知C语言学习难度大,就会产生学习C语言这门课程的惧怕心理。还有一部分学生认为学习C语言对自身的专业没有什么用处,因此产生了厌学的情绪。

2.2传统教学方式存在弊端

以教师为中心的灌输式教学方法忽视了学生的“学”,学生处于被动接受状态,缺少教师和学生的互动,学生学习的主动性、积极性难以发挥。虽然近年来C语言程序设计课程多媒体课件教学得到广泛普及,在某种程度上激发了学生的学习兴趣,但仍然没有脱离传统教学方式,缺少教学目标的针对性,由“照本宣科”变为“照片(幻灯片)宣科”,没有从根本上解决师生交互匮乏的现实[1]。

2.3学生学习方法不得当

由于大一学生还不是很适应大学的学习方式,很多时候还沿用高中时候学数学、英语等科目的方法来学习C语言,一些学生只重视理论知识,以为光靠背一背、做做题就能学好,忽视了实践环节的重要性,从而导致了一部分学生学不得法,效率极低。

3、几点教学体会

针对上述存在的问题,分别提出几点体会,可以归纳为:“一个目标”、“两个关键”、“三步实践”。

3.1树立一个目标

这是针对学生的学习态度提出的。做一件事情如果没有一个明确的目标。就很难提起兴趣,遇到困难也很容易放弃,当然也无法做好。学习C语言也不例外。如果想激发学生的学习兴趣,让学生喜欢学、主动学,就必须让学生明确为什么要学习C语言,明确一个学习的目标。事实上,学习C语言对于任何专业的学生都有莫大的好处,可以锻炼逻辑思维能力,对以后的专业课的学习有很好的辅助作用,也会对以后学习其他编程语言打下良好的基础,正所谓”万变不离其宗”,如果真正掌握精了程序设计思想,具备了真正解决实际问题的能力,语言再更新可程序设计的本质不会变[2]。当然,从更实用的角度来看,可以把“通过国家二级考试”作为一个为之努力实现的目标,不仅对以后就业很有帮助,让学习有了兴趣和动力,有了克服困难的决心,取得事半功倍的效果。

c语言心得体会范文 6

在初学C语言的一个学期后,我们进行了C语言阶段,尝试编写各种类型的程序。在为期一个周时间中,我的感受是:C语言实训和平时上课所接触的成有很多不同,所经受的考验和克服的困难和平时的相差不大,遇到不会做的题同学互相讨论,互相帮助,共同解决,攻克了C语言的复杂程序,我感触良多。

在这次实训中,我对C语言有了一个更深的认识了解,也对这学期的知识得到巩固,还尝试了运行编程,每次运行程序成功,让我对下面的项目充满了信心通过自己的努力最终把最初的理论知识转化成基本技能,这次的实训,是我对C语言的学习产生了农活的兴趣。

还是这次实训,最令人激动的就是同学遇到问题互相帮助虽然只是一个很小得实训,但同学们的满腔人情却是值得骄傲的,我们在实训中取长补短在实训中长知识,提高了我们学习,虽然对有些时候老师没给我们指出解决问题的方法有一些小抱怨,但到了结束是才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。更多的是老师的感动,每天在我们来之前家到了机房,给我们我分享他学C语言的感受,还提醒我们注意在编程时与遇到的事项,,这些是我们平时上课无发了解到的知识是我们更深层次的极大收获。

通过实训我们也发现了许多问题,在试训中我认识到自己还有很多知识没学好,最基本的知识点没有理清楚,而且许多东西要经过翻书,上网查阅,搜索,遇到一小点错误运行不出来,就会烦躁不安,觉得有些自暴自弃或这抱怨题目有些变态,以后要克服,尽量保持一颗蓝好的心态,学好C语言,用C语言来编写一个按要求的系统。

对于未来,近程下个学期,我觉得我还有许多方面需要提高。

首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。能写出一些程序,上网的时候多看一些优秀的教程和优秀的代码,遇到问题是多和同学讨论,并且多弄出几套方案,多练习自己结局问题的能力和与同学合作的能力。

总之,这一切都成为我记忆里面的一个 篇章,更是C语言编程上的一个里程碑。

c语言心得体会范文 7

三周的课程设计已经结束了。

回想学习C语言 的过程中,既有快乐又有烦恼。

从领到书的那一刻,我就很郁闷,《C 语言程序设计》到底事学什么的,有什么用。刚开始上课时,还在迷茫这门课程是用来做什么的。不过,这些感受都是在对这门课程不了解的情况下产生的。后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。通过半个学期的学习,我掌握了基本知识。

下学期开始时,被通知要进行三周的课程设计。当时有点懵,感觉学的东西很少,很零散,不知该怎么练到一起,就要课程设计,是不是太难为我们了。

第一天基本上都是在看书,把基本知识再熟悉一边。到了下午的时候,老师发过来三道练习题,从这几道练习题上我得到了不少启发,然后我们组把整个程序的思路理清了,开始着手写程序。

第一周结束的时候,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。但是,到了第二周,我们由不得不再次陷入困境。在整个程序的编写过程中。最难的就是修改和删除这两个模块,这也是我们第二周要解决的重点问题。

开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。困难之时,我们组的其他人,帮助了我,完成了修改和删除。这样的话,整个程序基本上全部完成了,就剩下完善工作了。我们组写了两个程序,最后,两个程序相互组合,互补,大功告成

虽然设计时完成了,但是我觉得其中还是由一些不足之处:

1. 警告句。程序中缺少一些警告句,例如:“是否真的删除(y/n)?”。

2. 重名的情况。由于考虑的不周全,没有设计遇到重名的情况该怎么处理。

3. 选择单一。我们设计的程序中,只设计了按名字选择,进行操作,忽略了重名的情况。

整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。

短短的三周课程设计结束了,但是这段时间里,我又学到了更多C 知识,如:对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。,也看到了团队精神和互帮互助的重要性。这一点会让我终生受益。通过三周的课程设计,我觉得自己肚子里的墨水多了,收获也挺大的,这三周过的挺充实!

篇5:c语言学习方法

c语言学习方法

1、工欲善其事,必先利其器

这里介绍几个学习C语言必备的东东:

一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。

一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编第二版清华大学出版社,此书编写的很适合初学者,并且内容也很精到。

除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。

2、葵花宝典

学习计算机语言最好的方法是什么?答曰:读程序。

没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。

3、登峰造极

写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。

是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的.人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的'人研读此书。

4、补充一些实际的

学习c,有一定的基础后,要强化学习c的函数库,试问,你连c的系统函数都不知道几个,怎么编程呢。

篇6:c语言心得体会

c语言心得体会

在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。

在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:

1.加深对课堂讲授内容的理解

课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。

通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。

2.熟悉程序开发环境、学习计算机系统的.操作方法

一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓“环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。

3.学习上机调试程序

完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。

通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难。

工作业绩:本人从事工作以来,除了日常设备维护与管理,保证生产线的正常运行外,主要负责了第三、四条dl线和openner2线的投产准备工作(主要是设备的安装与调试,投产新产品的试生产)并分别于XX年6月和12月顺利投产.

工作心得:本人从开始工作到现在已有一年半的时间,在这期间,我学到了许多,也悟到了许多。主要有以下几点:

1.扎实的专业知识是你提高工作水平的坚实基础.在学校学习专业知识时,可能感觉枯燥无味,但当你工作以后,你才会发现专业知识是多么的重要.如我学的机电一体化.机械原理,机械制图,电气知识这些是必须知道的,因为在日常工作中要处处用到.但我要想提高我的工作效率,工作质量,这些知识只是知道是远远不行的,而是要精通.做为生产技术,在我们公司来说就是设备方面的权威,若没有扎实的机械知识,在这方面你怎能服人那?遇到设备问题怎能快速有效的解决呢?

2.学好一门外语是你增加工资的资本.学我们机电这一行的,也就是理科生,不注重外语的学习,只要是考试能通过就可以了,而没有想到在以后的工作中会用到.你在一外资企业工作,不会一门外语是行不通的,不会外语,你就无法和老板交流,沟通.你只能闷着头的干(和一个哑巴没有什么区别).干了什么?干的怎么样?老板根本不知道,那他怎么认可你呢?你在这个公司又怎么发展那?

3.不但有良好的工作态度,而且要有很好的表现力.中国有句俗语:“踏踏实实做人,老老实实做事.”在今天,只是老老实实,勤勤恳恳做事是不够的,你还要学会适时地,恰当地表现自己.让老板知道你做了什么,让老板知道你的存在是必要的!这样你才有发展的的可能,别人才会认可你,承认你!

4.团结协作,善于沟通.团结协作指的是部门内部.你这个部门肯定不止你一个人,作为部门担当,你若想把本部门的事做的出色,那你必须把部门成员团结起来,发挥集体的力量,那样才能事半功倍!善于沟通是指部门之间.任何一个公司都是由众多部门组成的.部门之间的沟通是必要的也是必须的.像我们公司,工场包括制造课,生产技术课,质量课和生管课.我们生技课是为制造课提供技术指导和设备维护的服务的;我们做的初品(试生产品)又要经过质量课检验合格后才能量产;生管发行新产品看板时又要委托我们先做初品等等.和任何一个部门沟通不好都会遇到不必要的麻烦.所以,团结、沟通是非常必要的!总之,用知识武装起自己来,学会做人,学会做事。你才能成功!

时间过的真快,转眼间,在海规生物科技有限公司的实习马上要接近尾声了。在这半年多的时间,我学到了很多东西,不仅有学习方面的,更学到了很多做人的道理,对我来说受益非浅。做为一个刚踏入社会的年轻人来说,什么都不懂,没有任何社会经验。不过,在老师和师姐的帮助下,我很快融入了这个新的环境,这对我今后踏入新的工作岗位是非常有益的。除此以外,我还学会了如何更好地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。相信这些宝贵的经验会成为我今后成功的最重要的基石。实习是每一个大学毕业生必须拥有的一段经历,它使我们在实践中了解社会,让我们学到了很多在课堂上根本就学不到的知识,也打开了视野,增长了见识,为我们以后更好地服务社会打下了坚实的基矗s0100 这次在海规生物技术(上海)有限公司为期7个月的实习生活,对我而言有着十分重要的意义。它不仅使我在理论上对生物技术这个领域有了全新的认识,而且在实践能力上也得到了提高,真正地做到了学以致用。刚接触论文课题时,我对自己能否完成它曾表示怀疑,也为自己长期存在的惧怕动物的心理所左右。可是,现实的脚步声却是那么地清晰、有力。在一次次理论与实践相结合的过程中,在老师们悉心指导下,我不但对ELISA有了系统的理解,从无数次的失败中吸取了宝贵的经验教训,而且随着时间的推移,自己的意志也得到了磨练,恐惧心理也逐渐地消失了。我时刻提醒自己,唯有不断努力,才能与时俱进。总之,这次实习的意义,对我来说已不再是完成学分、完成毕业实习的任务,而是在开启“生命之旅”大门的过程中迈出了第一步。我一定会好好地珍惜这个机会,并为自己所喜爱的生物科技努力贡献自己的聪明才智。 我在海规生物科技(上海)有限公司做生产实习和毕业设计总共半年的时间。在这半年的时间里,我受益非浅。我在那里不仅学到了许多关于专业的知识,最重要的是进一步体会到了做人的原则。海规公司的宗旨是:规规矩矩做人、规规矩矩做事。在去公司的第一天,老师们就教导我们做人一定要正直、要实事求是,诚以待人,人品对一个人来说非常重要的。我充分的体验到了你如何待人,他人也会如是回报。总之,在海规公司的半年时间里,我们脱离了学校的庇护,开始接触社会、了解我们今后工作的性质。不但增长了专业知识,还学习到了不少为人处是的方法。 十几年的学生生活,即将划上一个句号。在海规公司实习的这段时间,我懂了不少东西。大人们都说刚毕业的学生身上总存在着许多让公司老板头痛的“特点”,现在我终于亲身体会到了。以前作为一名学生,主要的工作是学习;现在即将踏上社会,显然,自己的身份就有所变化,自然重心也随之而改变,现在我的主要任务应从学习逐步转移到工作上。这6个月,好比是一个过渡期――从学生过渡到上班族,是十分关键的阶段。回想自己在这期间的工作情况,不尽如意。对此我思考过,学习经验自然是一个因素,然而更重要的是心态的转变没有做到位。现在发现了这个不足之处,应该还算是及时吧,因为我明白了何谓工作。在接下来的日子里,我会朝这个方向努力,我相信自己能够把那些不该再存在的“特点”抹掉。感谢老师们在这段时间里对我的指导和教诲,我从中受益非浅。

篇7:c语言命令

c语言命令大全

一、#define

命令#define定义了一个标识符及一个串。

在源程序中每次遇到该标识符时,均以定义的串代换它。

ANSI标准将标识符定义为宏名,将替换过程称为宏替换。

命令的一般形式为:

#define identifier string

注意:

1、该语句没有分号。

在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束。

2、宏名定义后,即可成为其它宏名定义中的一部分。

3、宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换。

例如:

#define XYZ this is a tes

使用宏printf(“XYZ”);//该段不打印”this is a test”而打印”XYZ”。

因为预编译器识别出的是”XYZ”

4、如果串长于一行,可以在该行末尾用一反斜杠’ ’续行。

#defineLONG_STRING“this is a very long

string that is used as an example”

5、C语言程序普遍使用大写字母定义标识符。

6、用宏代换代替实在的函数的一大好处是宏替换增加了代码的速度,因为不存在函数调用的开销。

但增加速度也有代价:由于重复编码而增加了程序长度。

二、#error

命令#error强迫编译程序停止编译,主要用于程序调试。

#error指令使预处理器发出一条错误消息,该消息包含指令中的文本.这条指令的目的就是在程序崩溃之前能够给出一定的信息。

三、#include

命令#i nclude使编译程序将另一源文件嵌入带有#include的源文件,被读入的源文件必须用双引号或尖括号括起来。

例如:

#include”stdio.h”或者#include

这两行代码均使用C编译程序读入并编译用于处理磁盘文件库的子程序。

将文件嵌入#i nclude命令中的文件内是可行的,这种方式称为嵌套的嵌入文件,嵌套层次依赖于具体实现。

如果显式路径名为文件标识符的一部分,则仅在那些子目录中搜索被嵌入文件。

否则,如果文件名用双引号括起来,则首先检索当前工作目录。

如果未发现文件,则在命令行中说明的所有目录中搜索。

如果仍未发现文件,则搜索实现时定义的标准目录。

如果没有显式路径名且文件名被尖括号括起来,则首先在编译命令行中的目录内检索。

如果文件没找到,则检索标准目录,不检索当前工作目录。

四、条件编译命令

有几个命令可对程序源代码的各部分有选择地进行编译,该过程称为条件编译。

商业软件公司广泛应用条件编译来提供和维护某一程序的许多顾客版本。

#if、#else,#elif及#endif

#if的一般含义是如果#if后面的常量表达式为true,则编译它与#endif之间的代码,否则跳过这些代码。

命令#endif标识一个#if块的结束。

#define MAX 91

#include

using namespace std;

int main

{

#if MAX >99

cout<<“MAX is bigger than 99”<

#elif MAX >90

cout<<“MAX is bigger than 90”<

#else

cout<<“MAX is smaller than 90”<

#endif

return 0;

}

跟在#if后面的表达式在编译时求值,因此它必须仅含常量及已定义过的标识符,不可使用变量。

表达式不许含有操作符sizeof(sizeof也是编译时求值)。

#else命令的功能有点象C语言中的else;#else建立另一选择(在#if失败的情况下)。

注意,#else属于#if块。

#elif命令意义与ELSE IF 相同,它形成一个if else-if阶梯状语句,可进行多种编译选择。

#elif 后跟一个常量表达式。

如果表达式为true,则编译其后的代码块,不对其它#elif表达式进行测试。

否则,顺序测试下一块。

#if expression

statement sequence

#elif expression1

statement sequence

#endif

在嵌套的条件编译中#endif、#else或#elif与最近#if或#elif匹配。

# ifdef 和# ifndef

条件编译的另一种方法是用#ifdef与#ifndef命令,它们分别表示”如果有定义”及”如果无定义”。

# ifdef的一般形式是:

#define MAX 91

#include

using namespace std;

int main()

{

#ifdef MAX

cout<<“hello,MAX!”<

#else

cout<<“where is MAX?”<

#endif

#ifndef LEO

cout<<“LEO is not defined”<

#endif

return 0;

}

命令#undef 取消其后那个前面已定义过有宏名定义。

一般形式为:

#undef macroname

命令#line改变__LINE__与__FILE__的内容,它们是在编译程序中预先定义的标识符。

命令的'基本形式如下:

#line number[“filename”]

其中的数字为任何正整数,可选的文件名为任意有效文件标识符。

行号为源程序中当前行号,文件名为源文件的名字。

命令#line主要用于调试及其它特殊应用。

注意:在#line后面的数字标识从下一行开始的数字标识。

#line 100 “jia”

cout<<“#line change line and filename!”<

cout<<__LINE__<

cout<<__FILE__<

五、#pragma

命令#pragma 为实现时定义的命令,它允许向编译程序传送各种指令。

#pragma的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。

#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。

依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

其格式一般为: #Pragma Para

1、message 参数。

Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。

其使用方法为:

#pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。

当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。

假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法

#ifdef _X86

#pragma message(“_X86 macro activated!”)

#endif

当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_

X86 macro activated!”。

我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。

2、code_seg 参数。

格式如:

#pragma code_seg( [“section-name”[,“section-class”] ] )

它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

3、#pragma once (比较常用)

只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。

这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

4、#pragma hdrstop

表示预编译头文件到此为止,后面的头文件不进行预编译。

BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。

有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。

你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。

5、#pragma resource “*.dfm”

表示把*.dfm文件中的资源加入工程。

*.dfm中包括窗体外观的定义。

6、#pragma warning( disable : 4507 34; once : 4385; error : 164 )

等价于:

#pragma warning(disable:4507 34) /* 不显示4507和34号警告信息。

如果编译时总是出现4507号警告和34号警告, 而认为肯定不会有错误,可以使用这条指令。

*/

#pragma warning(once:4385) // 4385号警告信息仅报告一次

#pragma warning(error:164) // 把164号警告信息作为一个错误。

//同时这个pragma warning 也支持如下格式:

#pragma warning( push [ ,n ] )

#pragma warning( pop )

//这里n代表一个警告等级(1---4)。

#pragma warning( push )保存所有警告信息的现有的警告状态。

#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。

#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。

例如:

#pragma warning( push )

#pragma warning( disable : 4705 )

#pragma warning( disable : 4706 )

#pragma warning( disable : 4707 )

//.......

#pragma warning( pop )

在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。

7、pragma comment(…)

该指令将一个注释记录放入一个对象文件或可执行文件中。

常用的lib关键字,可以帮我们连入一个库文件。

8、progma pack(n)

指定结构体对齐方式。

#pragma pack(n)来设定变量以n字节对齐方式。

n 字节对齐就是说变量存放的起始地址的偏移量有两种情况:

第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,

第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。

结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数; 否则必须为n的倍数。

下面举例说明其用法。

#pragma pack(push) //保存对齐状态

#pragma pack(4)//设定为4字节对齐

struct test

{

char m1;

double m4;

int m3;

};

#pragma pack(pop)//恢复对齐状态

为测试该功能,可以使用sizeof()测试结构体的长度!

篇8:c语言逻辑思维

1.如何问问题?

有甲、乙两人,其中,甲只说假话,而不说真话;乙则是只说真话,不说假话。但是,他们两个人在回答别人的问题时,只通过点头与摇头来表示,不讲话。有一天,一个人面对两条路:A与B,其中一条路是通向京城的,而另一条路是通向一个小村庄的。这时,他面前站着甲与乙两人,但他不知道此人是甲还是乙,也不知道“点头”是表示“是”还是表示“否”。现在,他必须问一个问题,才可能断定出哪条路通向京城。那么,这个问题应该怎样问?

2.他们的职业是分别什么?

小王、小张、小赵三个人是好朋友,他们中间其中一个人下海经商,一个人考上了重点大学,一个人参军了。此外他们还知道以下条件:小赵的年龄比士兵的大;大学生的年龄比小张小;小王的年龄和大学生的年龄不一样。请推出这三个人中谁是商人?谁是大学生?谁是士兵?

3.谁做对了?

甲、乙、丙三个人在一起做作业,有一道数学题比较难,当他们三个人都把自己的解法说出来以后,甲说:“我做错了。”乙说:“甲做对了。”丙说:“我做错了。”在一旁的丁看到他们的答案并听了她们的意见后说:“你们三个人中有一个人做对了,有一个人说对了。”请问,他们三人中到底谁做对了?

4.鞋子的颜色

小丽买了一双漂亮的鞋子,她的同学都没有见过这双鞋了,于是大家就猜,小红说:“你买的鞋不会是红色的。”小彩说:“你买的鞋子不是黄的就是黑的。”小玲说:“你买的鞋子一定是黑色的。”这三个人的看法至少有一种是正确的,至少有一种是错误的。请问,小丽的鞋子到底是什么颜色的?

5.谁偷吃了水果和小食品?

赵女士买了一些水果和小食品准备去看望一个朋友,谁知,这些水果和小食品被他的儿子们偷吃了,但她不知道是哪个儿子。,为此,赵女士非常生气,就盘问4个儿子谁偷吃了水果和小食品。老大说道:“是老二吃的。”老二说道:“是老四偷吃的。”老三说道:“反正我没有偷吃。”老四说道:“老二在说谎。”这4个儿子中只有一个人说了实话,其他的3个都在撒谎。那么,到底是谁偷吃了这些水果和小食品?

6.谁在说谎,谁拿走了零钱?

姐姐上街买菜回来后,就随手把手里的一些零钱放在了抽屉里,可是,等姐姐下午再去拿钱买菜的时候发现抽屉里的零钱没有了,于是,她就把三个妹妹叫来,问她们是不是拿了抽屉里的零钱,甲说:“我拿了,中午去买零食了。”乙说:“我看到甲拿了。”丙说:“总之,我与乙都没有拿。”这三个人中有一个人在说谎,那么到底谁在说谎?谁把零钱拿走了?

7.夜明珠在哪里?

一个人的夜明珠丢了,于是他开始四处寻找。有一天,他来到了山上,看到有三个小屋,分别为1号、2号、3号。从这三个小屋里分别走出来一个女子,1号屋的女子说:“夜明珠不在此屋里。”2号屋的女子说:“夜明珠在1号屋内。”3号屋的女子说:“夜明珠不在此屋里。”这三个女子,其中只有一个人说了真话,那么,谁说了真话?夜明珠到底在哪个屋里面?

8.谁的成绩好

玲玲和芳芳经常在一起玩,有一次,有人问她们:“你们俩经常在一起玩,这次期末考试你们谁的成绩好呀?”玲玲说:“我的成绩比较好一点。”小红说芳芳说:“我的成绩比较差一些。”她们这两个人之中至少有一个人没有说实话。那么,到底她们谁的考试成绩好?

9.她们分别买了什么

小丽、小玲、小娟三个人一起去商场里买东西。她们都买了各自需要的东西,有帽子,发夹,裙子,手套等,而且每个人买的东西还不同。有一个人问她们三个都买了什么,小丽说:“小玲买的不是手套,小娟买的不是发夹。”小玲说:“小丽买的不是发夹,小娟买的不是裙子。”小娟说:“小丽买的不是帽子,小娟买的是裙子。”她们三个人,每个人说的话都是有一半是真的,一半是假的。那么,她们分别买了什么东西?

10.谁偷了奶酪

有四只小老鼠一块出去偷食物(它们都偷食物了),回来时族长问它们都偷了什么食物。老鼠A说:我们每个人都偷了奶酪。老鼠B说:我只偷了一颗樱桃。老鼠C说:我没偷奶酪。老鼠D说:有些人没偷奶酪。族长仔细观察了一下,发现它们当中只有一只老鼠说了实话。那么下列的评论正确的是:

a.所有老鼠都偷了奶酪;

b.所有的老鼠都没有偷奶酪;

c.有些老鼠没偷奶酪;

d.老鼠B偷了一颗樱桃。

11.一句问路的话

一个人站在岔道口,分别通向A国和B国,这两个国家的人非常奇怪,A国的人总是说实话,B国的人总是说谎话。路口站着一个A国人和一个B国人:甲和乙,但是不知道他们真正的身份,现在那个人要去B国,但不知道应该走哪条路,需要问这两个人。只许问一句。他是怎么判断该走那条路的?

中级题:

12.为什么小张是A队的

有一天,学校的学生在做游戏,A队只准说真话、B队只准说假话;A队在讲台西边,B队在讲台东边。这时,叫讲台下的一个学生上来判断一下,从A、B两队中选出的一个人——小张,看他是哪个队的。这个学生从A或B队中任意抽出了一个队员去问小张是在讲台的西边而是东边叫其中一个队员的人去问小张是在讲台西边还是东边。这个队员回来说,小张说他在讲台西边。这个学生马上判断出来小张是A队的,为什么?

13.凶手是谁

小阳的妹妹是小蒂和小红;他的女友叫小丽。小丽的哥哥是小刚和小温。他们的职业分别是:

小阳:医生

小刚:医生

小蒂:医生

小温:律师

小红:律师

小丽:律师

这6人中的一个杀了其余5人中的一个。

(1)假如这个凶手和受害者有一定的亲缘关系,那么说明凶手是男性;

(2)假如这个凶手和受害者没有一定的亲缘关系,那么说明凶手是个医生;

(3)假如这个凶手和受害者的职业一样,那么说明受害者是男性;

(4)假如这个凶手和受害者的职业不一样,那么说明受害者是女性;

(5)假如这个凶手和受害者的性别一样,那么说明凶手是个律师;

(6)假如这个凶手和受害者的性别不一样,那么说明受害者是个医生。

根据上面的条件,请问凶手是谁?

提示:根据以个陈述中的假设与结论,判定哪3个陈述组合在一起不会产生矛盾。

14.小王是怎么算出来的

某企业老板在对其员工的思维能力进行测试时出了这样一道题:某大型企业的员工人数在1700~1800之间,这些员工的人数如果被5除余3,如果被7除余4,如果被11除余6。那么,这个企业到底有多少员工?员工小王略想了一下便说出了答案,请问他是怎么算出来的?

15.幼儿园里有多少小朋友

老师让幼儿园的小朋友排成一行,然后开始发水果。老师分发水果的方法是这样的:从左面第一个人开始,每隔2人发一个梨;从右边第一个人开始,每隔4人发一个苹果。如果分发后的结果有10个小朋友既得到了梨,又得到了苹果,那么这个幼儿园有多少个小朋友?

16.桌子分别是什么价格

一个家具店里有三种桌子,其价格分别如下:

(1)他们的单价各不相同;

(2)它们的单价加起来共4000元;

(3)第二种桌子比第一种桌子便宜400元;

(4)第三种桌子的单价是第二种的2倍。

那么这三种桌子的单价各是多少?

17.打碎了多少个陶瓷瓶

一个陶瓷公司要给某地送2000个陶瓷花瓶,于是就找一个运输公司运陶瓷花瓶。运输协议中是这样规定的:

(1)每个花瓶的运费是1元;

(2)如果打碎1个,不但不给运费,还要赔偿5元。

最后,运输公司共得运费1760元。那么,这个运输公司在运送的过程中打碎了多少个陶瓷花瓶?

18.分苹果

妈妈要把72个苹果给分兄弟两人,她的分法是这样的:

(1)第一堆的2/3与第二堆的5/9分给了哥哥;

(2)两堆苹果余下的共39个苹果分给了弟弟。

那么,这两堆苹果分别有多少个呢?

高级题:

19.两对双胞胎。

在老北京的一个胡同的大杂院里,住着4户人家,巧合的是每家都有一对双胞胎女孩。这四对双胞胎中,姐姐分别是ABCD,妹妹分别是abcd。一天,一对外国游人夫妇来到这个大杂院里,看到她们8个,忍不住问:“你们谁和谁是一家的啊?”

B说:“C的妹妹是d。”

C说:“D的妹妹不是c。”

A说:“B的妹妹不是a。”

D说:“他们三个人中只有d的姐姐说的是事实。”

如果D的话是真话,你能猜出谁和谁是双胞胎吗?

20.奇怪的两姐妹。

有一个人在一个森林里迷路了,他想看一下时间,可是又发现自己没带表。恰好他看到前面有两个小女孩在玩耍,于是他决定过去打听一下。更不幸的是这两个小女孩有一个毛病,姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。但他还是走近去他问她们:“你们谁是姐姐?”胖的说:“我是。”瘦的也说:“我是。”他又问:现在是什么时候?胖的说:“上午。”“不对”,瘦的说:“应该是下午。”这下他迷糊了,到底他们说的话是真是假?

21.走哪条路?

有一个外地人路过一个小镇,此时天色已晚,于是他便去投宿。当他来到一个十字路口时,他知道肯定有一条路是通向宾馆的,可是路口却没有任何标记,只有三个小木牌。第一个木牌上写着:这条路上有宾馆。第二个木牌上写着:这条路上没有宾馆。第三个木牌上写着:那两个木牌有一个写的是事实,另一个是假的。相信我,我的话不会有错。假设你是这个投宿的人,按照第三个木牌的话为依据,你觉得你会找到宾馆吗?如果可以,那条路上有宾馆哪条路上有宾馆?

22.今天星期几?

有一富翁,为了确保自己的人身安全,雇了双胞胎兄弟两个作保镖。兄弟两个确实尽职尽责,为了保证主人的安全,他们做出如下行事准则:

a.每周一、二、三,哥哥说谎;

b.每逢四、五、六,弟弟说谎;

c.其他时间两人都说真话。

一天,富翁的一个朋友急着找富翁,他知道要想找到富翁只能问兄弟俩,并且他也知道兄弟俩个的做事准则,但不知道谁是哥哥,谁是弟弟。另外,如果要知道答案,就必须知道今天是星期几。于是他便问其中的一个人:昨天是谁说谎的日子?结果两人都说:是我说谎的日子。你能猜出今天是星期几吗?

23.玩扑克。

Jack夫妇请了Tom夫妇和Henrry夫妇来他们家玩扑克。这种扑克游戏有一种规则,夫妇两个不能一组。Jack跟Lily一组,Tom的队友是Henrry的妻子,Linda的丈夫和Sara一组。那么这三对夫妇分别为:

A.Jack一Sara,Tom一Linda,Henrry一Lily;

B.Jack一Sara,Tom~Lily,Henrry一Linda;

C.Jack一Linda,Tom一Lily,Henrry一Sara;

D.Jack一Lily,Tom一Sara,Henrry一Linda

24.谁是冠军?

电视上正在进行足球世界杯决赛的实况转播,参加决赛的国家有美国、德国、巴西、西班牙、英国、法国六个国家。足球迷的李锋、韩克、张乐对谁会获得此次世界杯的冠军进行了一番讨论:韩克认为,冠军不是美国就是德国;张乐坚定的认为冠军决不是巴西;李锋则认为,西班牙和法国都不可能取得冠军。比赛结束后,三人发现他们中只有一个人的看法是对的。那么哪个国家获得了冠军?

25.甲是哪个部落的人

有一个人到墨西哥探险,当他来到一片森林时,他彻底迷路了,即使他拿着地图也不知道该往哪走,因为地图上根本就没有标记出这一地区。无奈,他只好向当地的土著请求帮助。但是他想起来在曾有同事提醒他:这个地区有两个部落,而这两个部落的人说话却是相反的,即A部落的人说真话,B部落的人说假话。恰在这时,他遇到了一个懂英语的当地的土著甲,他问他:“你是哪个部落的人?”甲回答:“A部落。”于是他相信了他。但在途中,他们又遇到了土著乙,他就请甲去问乙是哪个部落的。甲回来说:“他说他是A部落的。”忽然间这个人想起来同事的提醒,于是他奇怪了,甲到底是哪个部落的人,A还是B?

26.猜城市。

对地理非常感兴趣的几个同学聚在一起研究地图。其中的一个同学在地图上标上了标号A、B、C、D、E,让其他的同学说出他所标的地方都是哪些城市。甲说:B是陕西。E是甘肃;乙说:B是湖北,D是山东;丙说:A是山东,E是吉林;丁说:C是湖北,D是吉林;戊说:B是甘肃,C是陕西。这五个人每人只答对了一个省,并且每个编号只有一个人答对。你知道ABCDE分别是哪几个省吗?

27.各有多少人民币?

爸爸为了考考儿子的智力,给儿子出了道题。爸爸说:“我手里有1元、2元、5元的人民币共60张,总值是200元,并且1元面值的人民币比2元的人民币多4张。儿子,给爸爸算算这三种面值的人民币各有多少张?”儿子眨了眨眼睛,摸摸脑袋,也不知道怎么算。你能算出来吗?

28.哪个正确

在一次地理考试结束后,有五个同学看了看彼此五个选择题的答案,其中:

同学甲:第三题是A,第二题是C。

同学乙:第四题是D,第二题是E。

同学丙:第一题是D,第五题是B。

同学丁:第四题是B,第三题是E。

同学戊:第二题是A,第五题是C。

结果他们各答对了一个答案 。根据这个条件猜猜哪个选项正确?

a.第一题是D,第二题是A;

b.第二题是E,第三题是B;

c.第三题是A,第四题是B;

d.第四题是C,第五题是B。

篇9:c语言逻辑思维

1.这个人只要站在A与B任何一条路上,然后,对着其中的一个人问:“如果我问他(甲、乙中的另外一个人)这条路通不通向京城,他会怎么回答?”

如果甲与乙两个人都摇头的话,就往这条路向前走去,如果都点头,就往另一外一条走去。

2.小张是商人,小赵是大学生,小王是士兵。假设小赵是士兵,那么就与题目中“小赵的年龄比士兵的大”这一条件矛盾了,因此,小赵不是士兵;假设小张是大学生,那就与题目中“大学生的年龄比小张小”矛盾了,因此,小张不是大学生;假设小王是大学生,那么,就与题目中“小王的年龄和大学生的年龄不一样”这一条件矛盾了,因此,小王也不是大学生。所以,小赵是大学生。由条件小赵的年龄比士兵的大,大学生的年龄比小张小得出小王是士兵,小张是商人。

3.假设丙做对了,那么甲、乙都做错了,这样,甲说的是正确的,乙、丙都说错了,符合条件,因此,丙做对了。

4.假设小丽的鞋子是黑色的,那么三种看法都是正确的,不符合题意;假设是黄色的,前两种看法是正确的,第三种看法是错误的;假设是红色的,那么三句话都是错误的。因此,小丽的裙子是黄色的。

5.是老三偷吃了水果和小食品,只有老四说了实话。用假设法分别假设老大、老二、老三、老四都说了实话,看是否与题意矛盾,就可以得出答案。

6.丙说谎,甲和丙都拿了一部分。假设甲说谎的话,那么乙也说谎,与题意不符;假设乙说谎,那么甲也说谎,与题意不符。那么,说谎的肯定是丙了,只有甲和丙都拿零钱了才符合题意。

7.1号屋的女子说的是真话,夜明珠在3号屋子内。假设夜明珠在1号屋内,那么2号屋和3号屋的女子说的都是真话,因此不在1号屋内;假设夜明珠在2号屋内,那么1号屋和3号屋的女子说的都是真话,因此不在2号屋内;假设夜明珠在3号屋内,那么只有1号屋的女子说的是真话,因此,夜明珠在3号屋里内。

8.芳芳。假设玲玲说的是实话,那么,芳芳说的也是实话了,与题意不符;假设芳芳说的是实话,那么玲玲说的也是实话了,与题意不符。因此,两个人都没有说实话,把她们两个人说的话反过来就会发现,芳芳的成绩好。

9.小丽买了帽子,小玲买了手套,小娟买了裙子。

10.假设老鼠A说的是真话,那么其他三只老鼠说的都是假话,这符合题中仅一只老鼠说实话的前提;假设老鼠B说的是真话,那么老鼠A说的就是假话,因为它们都偷食物了;假设老鼠C或D说的是实话,这两种假设只能推出老鼠A说假话,与前提不符。所以a选项正确,所有的老鼠都偷了奶酪。

11.如果甲是A国人,说的是真话,问甲:“如果我问乙哪条路是安全之路,他会指哪条路?”他指出的乙说的路就是错误的,另一条路就是正确的。

如果甲是B国人,说的是假话同样的问题问甲,因为乙说真话,甲会和乙的答案相反,那么另一条路就是正确的。

中级题:

12.若这个人是B队的,则找到的人是A队的,那人会说在讲台西,而这个人会说在东;若这个人是A队的,找到的是A队的,会说在西,若这个人是A队的,找到的是A队的,会说在西;若找到B队的,他会说在西,结果还是说西,所以只要说西,这人一定是讲真话那一队的。

13.根据上述中的假设,(1)和(2)中能适用于实际情况只有一个,同样,(3)和(4),(5)和(6),也是一样的情况。

根据上述中的结论,(2)和(5)适用于实际情况的可能不太大。因此,能适用于实际的情况,有以下几组中的一组或多组:

A.(1)、(4)和(5)

B.(1)、(3)和(5)

C.(1)、(4)和(6)

D.(1)、(3)和(6)

E.(2)、(4)和(6)

F.(2)、(3)和(6)

假如选项A能适用于实际情况,则根据(1)的结论,凶手是男性;根据(4)的结论,受害者是女性;可是根据(5)的假设,凶手与受害者性虽相同。因此A不适用。

假如选项B能适用于实际情况,由假设可知,凶手与受害者有亲缘关系而且职业与性别一样。这与每个家庭的组成情况不相符,因此B不适用。

假如选项C能适用于实际情况,则根据有关的结论,凶手是男性,受害者是个女性医生。又根据(1)和(4)的假设,凶手是律师,凶手与受害者有亲缘关系,这与各个家庭的组成情况不相符,因此C不适用。

假如选项D能适用于实际情况,则根据(1)的结论,凶手是男性,根据(3)的结论,受害者也同样是男的;又根据(6)的假设条件,凶手与受害者的性别不一样。因此D不适用。

假如选项E能适用于实际情况,则根据(2)的结论,凶手是医生;根据(6)的结论,受害者也是医生,又根据(4)的假设条件,凶手与受害者职业不一样。因此E不适用。

所以,根据以上的推论,只有F能适用于实际情况,凶手是医生,受害者是男性医生,根据组成的情况,凶手是女性。又根据各个家庭的组成情况,凶手必定是小蒂,(2)的假设则说明,受害者是小刚;而且,(3)的假设和(2)、(6)的论相符合。

14.小王是这样得出答案的:对题目中所给的条件进行分析,假如把全体员工的人数扩大2倍,则它被5除余1,被7除余1,被11除余1,那么,余数就相同了。假设这个企业员工的人数在34003600之间,满足被5除余1,被7除余1,被11除余1的数是5*7*11+1=386,386+385*8=3466,符合要求,所以这个企业共有1733个员工。

15.158个小朋友。10个小朋友拿到梨和苹果最少人数是(2+1)×(4+1)×(101)+1=136人,然后从左右两端开始向外延伸,假设梨和苹果都拿到的人为“1”,左右两边的延伸数分别为:3×5-3=12人,3×5-5=10人。所以,总人数为136+12+10=158。

16.第一种桌子的单价是1300,第二种桌子的单价是900元,第三种桌子的单价是1800元。假设第一种桌子的价格减少400元,那么,第一种桌子就与第二种桌子的价格相同了,这时,将总价格减少400元,就变以成3600元了,3600元是4个第二种桌子的总价格。3600/4=900元,900*2=1800元,900+400=1300元。

17.假设这些陶瓷花瓶都没有破,安全到达了目的地,那么,运输公司应该得到2000元的运费,但是运输公司实际得了1760元,少得了20001760=240元。说明运输公司在运送的过程中打碎的有花瓶,打碎一个共瓶,会少得运费1+5=6元,现在总共少得运费240元,从中可以得到一共打碎了240/6=40个花瓶。

18.第一堆苹果有45个,第二堆苹果有27个。假设第一堆苹果与第二堆苹果的5/9都分给了哥哥,那么哥哥所得的苹果就是总苹果数的5/9,这样哥哥就分到72*5/9=40个苹果,但实际哥哥分到了7239=33个苹果,由此推断分给哥哥的苹果,第一堆苹果少分的是第一堆苹果的5/92/3,正好与4033=7个相对应。因此,第一堆苹果有(4033)*(5/92/3)=45个,第二堆苹果有7245=27个。

高级题:

19.假设B说的是事实,则C就是d的姐姐,按D的依据就是C也为真,那么出现有两个人说的是事实,与题意矛盾,所以B说的不是事实,同时也知道C不是d的姐姐,则BC的话都是假的,所以只有A说的是真话,则A就是d的姐姐,A说B的妹妹不是a,又不可能是d,所以B的妹妹只可能是b或c,根据C的假话知道D的妹妹就是c,B的妹妹就是b,最后C的妹妹就是a。

20.假设是下午,那么瘦的说的就是真话,但是到底谁是姐姐就无法确定了。所以不可能是下午。那么就是上午,此时姐姐说真话,而胖的说是上午,所以胖的是姐姐,瘦的是妹妹。

21.假设第一个木牌是正确的,那么第一个小木牌所在的路上就有宾馆,第二条路上就没有宾馆,第二句话就该是真的,结果就有两句真话了;假设第二句话是正确的,那么第一句话就是假的,第一二条路上都没有宾馆,所以走第三条路,并且符合第三句所说,第一句是错误的,第二句是正确的。

22.首先分析,兄弟两个必定有一个人说真话,其次,如果两个人都说真话,那么今天就是星期日,但这是不可能的,因为如果是星期日,那么两个人都说真话,哥哥就说谎了。

假设哥哥说了真话,那么今天一定就是星期四,因为如果是星期四以前的任一天,他都得在今天再撒一次谎,如果今天星期三,那么昨天就是星期二,他昨天确实撒谎了,但今天也撒谎了,与假设不符,所以不可能是星期一、二、三。由此类推,今天也不会是星期五以后的日子,也不是星期日。

假设弟弟说了真话,弟弟是四五六说谎,那么先假设今天是星期一,昨天就是星期日,他说谎,与题设矛盾;今天星期二,昨天就是星期一,不合题意;用同样的方法可以去掉星期三的可能性。如果今天星期四,那么他今天就该撒谎了,他说昨天他撒谎,这是真话,符合题意。假设今天星期五,他原本应该撒谎但他却说真话,由“昨天我撒谎了”就知道不存在星期五、六、日的情况,综上所述,两个结论都是星期四,所以今天星期四。

23.B。因为游戏规则是“夫妇两个不能一组”,同样的,“没有一个女人同自己的丈夫一组”。对照以上原则,已知Jack跟Lily一组,所以Jack和Lily不能是夫妻,D选项不符合题意;再假设A正确,Jack跟Lily一组,那么剩下的两组只能是Tom和Sara,Henrry和Linda,对照题目已知“Tom的队友是Henrry的妻子”发现,Tom的队友Sara是Jack的妻子,于是假设不成立,A不符合题意;同样的道理,假设B正确,已知Jack跟Lily一组,剩下的两组就是Tom和Linda,Henrry和Sara,再对照已知“Tom的队友是Henrry的妻子”和“Linda的丈夫和Sara一组”发现完全吻合,因此假设成立。所以B符合题意;假设C成立,那么已知Jack跟Lily一组,剩下的两组就是Tom和Sara,Henrry和Linda,再对照已知条件“Tom的队友是Henrry的妻子”发现,Sara不是Henrry的妻子,因此,假设不成立,选项C不合题意。

24.先假设韩克正确,冠军不是美国就是德国;如果正确的话,不能否定张乐的看法,所以韩克的评论是错误的,因此冠军不是美国或者德国;如果冠军是巴西的话,韩克的评论就是错误的,张乐的评论也就是错误的。李锋的评论就是正确的。假设法国是冠军,那么韩克就说对了,同时张乐也说对了,而这与“只有一个人的看法是对的”相矛盾。所以英国不可能是冠军,巴西获得了冠军。

25.假设他是B部落的,则与他不认识的乙则为A部落的,则甲说假话,那么甲回来说的:“他说他是A部落的人”这句话应该反过来理解为:乙是B部落的,这就矛盾了;假定甲是A部落的,则他的话为真,并且与他不认识的乙应该是B部落的,那么乙说的就是假话。所以甲回来说:“他说他是A部落的人”,正好证明乙是B部落的,因此这个假设成立。所以甲是A部落的。

26.假设甲说的第一句话正确,那么B是陕西,戊的第一句话就是错误的,戊的第二句话就是正确的;C是陕西就不符合条件。甲说的第二句话正确。那么E就是甘肃。戊的第二句话就是正确的,C是陕西。同理便可推出A是山东,B是湖北,C是陕西,D是吉林,E是甘肃。

27.假设1元的人民减少4张,那么这三种人民币的总和就是604=54张,总面值就是2004=196元,这样1元和2元的人民币数量相等,再假设56张全是5元的,这时人民币的总面值就是5×56=280元,比先假设的多280196=84元,原因是把1元和2元都当成了5元,等于是多算了5×2(1+2)=7元,84÷7=12,由此就可以知道是把12张1元的和12张2元的假设成了5元,所以2元的有12张,1元的有12+4=16张,5元的就有32张。

28.选C。假设同学甲“第三题是A”的说法正确,那么第二题的答案就不是C。同时,第二题的答案也不是A,第五题的答案是C,再根据同学丙的答案知道第一题答案是D,然后根据同学乙的答案知道第二题的答案是E,最后根据同学丁的答案知道第四题的答案是B。所以以上四个选项第三个选项正确。

篇10:c语言读书笔记

《C 语言深度解剖》这本书是一本“解开程序员面试笔试的秘密”的好书。作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中常见的考点,并且很多都是我们平常不注意的点,对于我们深入理解C语言确实很有帮助。

第1章关键字

1.register

虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型。

意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register变量可能不存放在内存中,

所以不能用取址运算符“&”来获取register变量的地址。

2.static修饰符

(1)修饰变量

静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

(2)修饰函数

第二个作用:修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

关键字static有着不寻常的历史。起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。

3.if语句使用注意

先处理正常情况,再处理异常情况。

在编写代码是,要使得正常情况的执行代码清晰,确认那些不常发生的异常情况处理代码不会遮掩正常的执行路径。这样对于代码的可读性和性能都很重要。因为,if

语句总是需要做判断,而正常情况一般比异常情况发生的概率更大(否则就应该把异常正常调过来了),如果把执行概率更大的代码放到后面,也就意味着if语句将进行多次无谓的比较。

另外,非常重要的一点是,把正常情况的处理放在if后面,而不要放在else后面。当然这也符合把正常情况的处理放在前面的要求。

4.千万小心又小心使用void指针类型。

按照ANSI(AmericanNationalStandardsInstitute)标准,不能对void指针进行算法操作,即下列操作都是不合法的:

void*pvoid;

pvoid++;//ANSI:错误

pvoid+=1;//ANSI:错误

ANSI标准之所以这样认定,是因为它坚持:进行算法操作的指针必须是确定知道其指向数据类型大小的。也就是说必须知道内存目的地址的确切值。

例如:

int*pint;

pint++;//ANSI:正确

但是大名鼎鼎的GNU(GNU'sNotUnix的递归缩写)则不这么认定,它指定void*的算法操作与char*一致。因此下列语句在GNU编译器中皆正确:

pvoid++;//GNU:正确

pvoid+=1;//GNU:正确

在实际的程序设计中,为符合ANSI标准,并提高程序的可移植性,我们可以这样编写实现同样功能的代码:

void*pvoid;

(char*)pvoid++;//ANSI:正确;GNU:正确

(char*)pvoid+=1;//ANSI:错误;GNU:正确

GNU和ANSI还有一些区别,总体而言,GNU较ANSI更“开放”,提供了对更多语法的支持。但是我们在真实设计时,还是应该尽可能地符合ANSI标准。

5.const与宏

节省空间,避免不必要的内存分配,同时提高效率

编译器通常不为普通const只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高。

例如:

#define M 3//宏常量

const int N=5;//此时并未将N放入内存中

......

inti=N;//此时为N分配内存,以后不再分配!

intI=M;//预编译期间进行宏替换,分配内存

intj=N;//没有内存分配

intJ=M;//再进行宏替换,又一次分配内存!

const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。

#define宏没有类型,而const修饰的只读变量具有特定的类型。

6.最易变的关键字----volatile

volatile是易变的、不稳定的意思。很多人根本就没见过这个关键字,不知道它的存在。也有很多程序员知道它的存在,但从来没用过它。我对它有种“杨家有女初长成,养在深闺人未识”的感觉。volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

先看看下面的例子:

int i=10;

int j=i;//(1)语句

int k=i;//(2)语句

这时候编译器对代码进行优化,因为在(1)(2)两条语句中,i没有被用作左值。这时候编译器认为i的值没有发生改变,所以在(1)语句时从内存中取出i的值赋给j

之后,这个值并没有被丢掉,而是在(2)语句时继续用这个值给k赋值。编译器不会生成出汇编代码重新从内存里取i的值,这样提高了效率。但要注意:(1)(2)语句之间i没有被用作左值才行。

再看另一个例子:

volatile int i=10;

int j=i;//(3)语句

int k=i;//(4)语句

volatile关键字告诉编译器i是随时可能发生变化的,每次使用它的时候必须从内存中取出i的值,因而编译器生成的汇编代码会重新从i的地址处读取数据放在k中。

这样看来,如果i是一个寄存器变量或者表示一个端口数据或者是多个线程的共享数据,就容易出错,所以说volatile可以保证对特殊地址的稳定访问。

但是注意:在VC++6.0中,一般Debug模式没有进行代码优化,所以这个关键字的作用有可能看不出来。你可以同时生成Debug版和Release版的程序做个测试。

留一个问题:const volatile int i=10;这行代码有没有问题?如果没有,那i到底是什么属性?

这个可以同时使用。

7.空结构体是有大小的

structstudent

{

}stu;

sizeof(stu)的值是多少呢?在VisualC++6.0上测试一下。

很遗憾,不是0,而是1。为什么呢?你想想,如果我们把structstudent看成一个模子的话,你能造出一个没有任何容积的模子吗?显然不行。编译器也是如此认为。编译器认为任何一种数据类型都有其大小,用它来定义一个变量能够分配确定大小的空间。既然如此,编译器就理所当然的认为任何一个结构体都是有大小的,哪怕这个结构体为空。那万一结构体真的为空,它的大小为什么值比较合适呢?假设结构体内只有一个char型的数据成员,那其大小为1byte(这里先不考虑内存对齐的情况).也就是说非空结构体类型数据最少需要占一个字节的空间,而空结构体类型数据总不能比最小的非空结构体类型数据所占的空间大吧。这就麻烦了,空结构体的大小既不能为0,也不能大于1,怎么办?定义为0.5个byte?但是内存地址的最小单位是1个byte,0.5个byte怎么处理?解决这个问题的最好办法就是折中,编译器理所当然的认为你构造一个结构体数据类型是用来打包一些数据成员的,而最小的数据成员需要1个byte,编译器为每个结构体类型数据至少预留1个byte的空间。所以,空结构体的大小就定位1个byte。

8. 大端与小端

在x86 系统下,输出的值为多少?

#include

int main

{

int a[5]={1,2,3,4,5};

int *ptr1=(int *)(&a+1);

int *ptr2=(int *)((int)a+1);

printf(“%x,%x”,ptr1[-1],*ptr2);

return 0;

}

5和0x02000000

由于x86是小端方式,所以低位内容存放到了低位地址。图中每一种颜色代笔一个int型的内存分布。&a可以获得数组a的地址,也就是这儿的0xbfd46624, 所以&a+1的结果应该是0xbfd46638(即图中最下面红色部分)。对于代码中的ptr1由于其为int型指针,所以ptr[-1]的意思应该是取0xbfd46638地址之前的一个整型,即为a数组中的最后一个值5。而在计算ptr2的时候,(int)a是将整型地址a转换成了一个整型数,这样(int)a+1的结果就是0xbfd46625,然后再将其转化为int型指针,这样利用ptr2获得的数值就是从0xbfd46625开始的一个整型,即为0x02000000

10. 花括号

花括号每个人都见过,很简单吧。但曾经有一个学生问过我如下问题:

char a[10] = {“abcde”};

他不理解为什么这个表达式正确。我让他继续改一下这个例子:

char a[10] { = “abcde”};

问他这样行不行。那读者以为呢?为什么?

花括号的作用是什么呢?我们平时写函数,if、while、for、switch 语句等都用到了它,但有时又省略掉了它。简单来说花括号的作用就是打包。你想想以前用花括号是不是为了把一些语句或代码打个包包起来,使之形成一个整体,并与外界绝缘。这样理解的话,上面的问题就不是问题了。

11.再论 a 和&a 之间的区别

int main()

{

char a[5]={'A','B','C','D'};

char (*p3)[5] = &a;

char (*p4)[5] = a;

return 0;

}

int main()

{

char a[5]={'A','B','C','D'};

char (*p3)[3] = &a;

char (*p4)[3] = a;

return 0;

}

int main()

{

char a[5]={'A','B','C','D'};

char (*p3)[10] = &a;

char (*p4)[10] = a;

return 0;

}

int a[5][5];

int (*p)[4];

p = a;

问&p[4][2] - &a[4][2]的值为多少?

12. 用 malloc 函数申请 0 字节内存

另外还有一个问题:用 malloc 函数申请 0 字节内存会返回 NULL 指针吗?

可以测试一下,也可以去查找关于 malloc 函数的说明文档。申请 0 字节内存,函数并不返回 NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为 0

的内存。这好尺子上的某个刻度,刻度本身并没有长度,只有某两个刻度一起才能量出长度。对于这一点一定要小心,因为这时候 if(NULL != p)语句校验将不起作用。

13. 不使用任何变量编写 strlen 函数

看到这里,也许有人会说,strlen 函数这么简单,有什么好讨论的。是的,我相信你能 熟练应用这个函数,也相信你能轻易的写出这个函数。但是如果我把要求提高一些呢:

不允许调用库函数,也不允许使用任何全局或局部变量编写 int my_strlen (char *strDest); 似乎问题就没有那么简单了吧?这个问题曾经在网络上讨论的比较热烈,我几乎是全程“观战” ,差点也忍不住手痒了。不过因为我的解决办法在我看到帖子时已经有人提出了, 所以作罢。

解决这个问题的办法由好几种,比如嵌套有编语言。因为嵌套汇编一般只在嵌入式底 层开发中用到,所以本书就不打算讨论 C 语言嵌套汇编的知识了。 有兴趣的读者,可以查找相关资料。 也许有的读者想到了用递归函数来解决这个问题。是的,你应该想得到,因为我把这 个问题放在讲解函数递归的时候讨论。

既然已经有了思路, 这个问题就很简单了。

代码如下:

int my_strlen( const char* strDest )

{

assert(NULL != strDest);

if ('' == *strDest)

{

return 0;

}

else

{

return (1 + my_strlen(++strDest));

}

}

第一步:用 assert 宏做入口校验。

第二步:确定参数传递过来的地址上的内存存储的是否为''。如果是,表明这是一个 空字符串,或者是字符串的结束标志。

第三步:如果参数传递过来的地址上的内存不为'',则说明这个地址上的内存上存储 的是一个字符。既然这个地址上存储了一个字符,那就计数为 1,然后将地址加 1 个 char类型元素的大小,然后再调用函数本身。如此循环,当地址加到字符串的结束标志符''时, 递归停止。

当然,同样是利用递归,还有人写出了更加简洁的代码:

int my_strlen( const char* strDest )

{

return *strDest?1+strlen(strDest+1):0;

}

这里很巧妙的利用了问号表达式, 但是没有做参数入口校验, 同时用*strDest 来代替('' == *strDest)也不是很好。所以,这种写法虽然很简洁,但不符合我们前面所讲的编码规范。

可以改写一下:

int my_strlen( const char* strDest )

{

assert(NULL != strDest);

return ('' != *strDest)?(1+my_strlen(strDest+1)):0;

}

上面的问题利用函数递归的特性就轻易的搞定了, 也就是说每调用一遍 my_strlen 函数, 其实只判断了一个字节上的内容。但是,如果传入的字符串很长的话,就需要连续多次函数调用,而函数调用的开销比循环来说要大得多,所以,递归的效率很低,递归的深度太大甚 至可能出现错误(比如栈溢出) 。所以,平时写代码,不到万不得已,尽量不要用递归。即便是要用递归,也要注意递归的层次不要太深,防止出现栈溢出的错误;同时递归的停止条 件一定要正确,否则,递归可能没完没了。

篇11:c语言读书笔记

我有一本c语言程序设计书,已经静静的躺着好长时间了,前几天朋友说,你这本书有些发黄了,看来是好长时间没有翻过了。

其实这本书是我初学电脑时朋友给的,但只看了几页就放在那儿了,那时没有自己的电脑,看起来很吃力。在朋友的提醒下,现在可以找一点时间去翻一翻,虽然没有什么价值,但学习也是一种乐趣......

记录第二天:

昨天详细读了一下第一章,感觉写的很详细,但我不知道书上的知识点是否全正确。

一、数据类型的基本概念

(1)数据类型规定了一个以值为其元素的集合。

(2)数据类型定义了一个运算集

(3)数据类型定义了数据在计算机内的存储及书写中的表示方式。

二、c语言的数据类型

数据包含常量和变量,他们都属于某个数据类型。

三、常量

常量是程序中其值不发生变化的量,常量有数、字符和字符串。在c中常量不需要类型说明就可以直接使用,除此之后c中还有一种表示常量的形式,称为符号常量。

(一)数

1、c中数有整数和小数

(1)整数

整数有十进制,八进制,十六进制,八进制以数字0开头,十六进制以0x开头,十进制以1-9中的一个开头。

整数有正负之分,分别在前面加上+,-符号,正数的符号+可以省略。

整数有短整数,整数,长整数之分,一般短整数16位,在我的机器上是short(16),int(32),long(32),对于整数的取值范围有符号的(-2的n位次方至2的n位次方减1),无符号的0到2的n位次方-1

长型数的书写方法:在数后面加一个L,如:0xffL

(2)实数

又叫浮点数,只有十进制的,实数有单精度和双精度之分,实数有两种表示形式,一种是小数,一种是指数。

小数:由整数部分,小数点,小数部分。

指数:由尾数(必须有),e/E,指数(必须是整数)

(二)字符常量

字符常量是用一对''括起来的单一字符,一个字符常量在计算机中占一个字节(8位),字符常量的值就是这个字符在所属字符集中的编码(如:ASCII码)。

字符常量中的单引号用作定界符,所以对于单引号的表示方法就得用另外一种方法表示:''' 用一个斜杠加一个'来转义一个单引号,对于斜框用来转义。

字符常量在计算机中是以编码的方式存放,所以说他实际是一个字节的整数,可以参与各种运算,如+,-,*,/,比较等。

(三)字符串常量

字符串常量是用双引号护起来的一串字符,字符的个数称其长度,字符串常量简称为字符串。

长度为n的字符串在计算机的存储中占用n+1个字节,最后多出来的那个存放一个NULL字符,ASCII编码是0,我们可以用''来表示这个字符。

任何一个字符串在机器内都是以结尾。如:abc,其实是'a','b','c',''的存储格式。

对于“这个双引号,由于用作定界符了,所以只能转义表示:”。

注意: 'A' , “A”这是两个不同的存储方式,一个是65,一个是65,0

(四)

一般的字符可以直接写出,但对于NULL,回车,新行,退格等字符如何书写?

对于这些字符我们可以用其它的方式表示出来,常用的有:

新行

回车

水平制表

v 垂直制表

退格

f 换页

a 响铃

“ 双引号

' 单引号

NULL

ddd 1到3位八进制数表示一个字符

xdd 1到2位十六进制数表示一个字符

其实ddd,xdd就是字符的编码。

(五)符号常量

在c语言中可以对常量进行命名,即用符号代替常数值,该符号叫符号常量,符号常量一般用大写字母表示。

定义格式:

#define 符号常量名 常量

如:

#define NULL 0

#define EOF -1

#define PI 3.1415926

这里#define是预编译命令,每一个#define只能定义一个符号常量,且用一行书写,不用分号结尾。

例:

#include

#define PI 3.1415926

int main(void)

{

float area,r;

printf(”请输入圆的半径:“);

scanf(”%f“,&r);

area = PI*r*r;

printf(”这个圆的面积是:%f “, area);

return 0;

}

使用符号常量的好处:

(1)增强程序的可读性。

如用PI,代表数学中的PI,用EOF代表文件尾,很直观。

(2)增强程序的可维护性

如果多处用到同一个常量,可以定义符号常量,维护时只修改一处即可。对于扩充和可移植一个程序时大有好处。

四、变量

变量是他的值可以发生变化的一种量,每一个变量都对应计算机中相应长度的存储单元,以存放变量所取的值。

如:

#include

int main(void)

{

int x = 0; //x的初值为0

x = 5; //x的值发生了变化

x = 7*5;

x = x+1;

printf(”%d “,x);

return 0;

}

每一个变量都用一个名字(叫变量名)来表示,变量的名字实际上是内存单元的命名,变量的地址就是该内存单元的开始地址。变量的命名规则同用户自定义标识符。

任何一个变量都属于某一数据类型,如果他是整型量,则只能取整数值。

(一)基本数据类型

(1)、从长度上分有8位、16位、32位和64们珠。

(2)、从数据的符号来分,有无符号的,和有符号的。

(3)、按照数学性质来分,分为整型和实型。

c语言的基本数据类型表:

对于数的值域范围的算法:

有符号:[-2(位长度-1)次方到 2(位长度-1)次方-1]

无符号:[0到 2位长度次方]

-----------------------------------------------------------------

类型标识符 名字 长度 范围

char 字符型 8 ASCII字符代码

unsigned char 无符号字符型 8 0-255

signed char 有符号字符型 8 -127:127

int 整型 16(和环境有关) 范围算法

unsigned int 无符号整型 同上 同上

signed int 有符号整数 同上 同上

short int 短整型 16(和环境有关) 同上

unsigned short int 无符号短整型 同上 同上

signed short int 有符号短整型 同上 同上

long int 长整型 32位(和环境有关) 同上

unsigned long int 无符号长整型 同上 同上

signed long int 有符号长整型 同上 同上

float 单精度浮点型 32

double 双精度浮点型 64

void 空类型

-------------------------------------------------------------------

注:

(1)void类型有两种用法,一是指定函数的返回值的类型,一是用来设置类属指针。

(2)对于不同的环境,数据表示的范围不同,可以用sizeof(类型)来测试。

(二)变量的定义

变量的定义就是按照特定的方式为其指定标识,类型和长度等。程序中所用的每一个变量都必须先定义后引用,没有定义的变量是不能引用的。定义的目的是为编译程序提供所需的信息,以保证完成以下工作。

1、在编译时根据类型信息来检查程序中有无非法的数据结构。

2、根据类型信息来检查对变量施加的运算是否合理。如对两个浮点数不可以进行%运算。

3、编译时根据类型和长度信息对变量分配内存,确定数据在内存中的表示方式。

定义:

数据类型 变量或变量表;

如:

int year,date;

int x;

(三)变量的初始化

int x; 对于这样的变量只是指定了名字和数据类型,并没有给他初始值,但这并不表示变量没有值,他的值是当前内存单元中的数据,这个数据是没有意义的,引用时会产生莫名其妙的结果。

初始化:在定义时直接赋值,则称为初始化。

int x = 5;

double y = 3.4;

变量的初始化并不都是在编译阶段完成的,只有静态变量和外部变量是在编译阶段完成,而局部变量是在运行时初始化的。局部变量的初始化就是一个赋值语句。

int abc()

{

int a =3;

int b =4; //这是在运行时才初始化,而非编译时。

}

//补充

数据类型的转换

在c语言的表达式中,准许对不同类型的数值型数据进行某一操作,当不同类型的数据进行操作时,先将其转换成相同的数据类型,然后再进行操作。

有两种转换方式:隐式转换,显示转换。

一、隐式类型转换

隐式转换就是在编译时由编译程序按照一定规则自动完成。c语言规定的转换规则是由低级向高级转换,如果一个操作符带有两个不同类型的操作数,那么在操作之前先将较低的类型向高级转换,再进行运算。

注意:

1、所有的float类型都转换成double类型,提高运算精度。

2、在赋值语句中,如果=号左右两边的数据类型不同,则将赋值号右边的值转换为赋值号左边的数据类型。

3、在函数参数传递时,也发生数据类型转换。

4、char short自动转换成int再参与运算。

规则:

1、char short自动转换成int

2、float转换成double

3、低级到高级->char short ->int ->unsigned->long ->(float ->double)double

二、显式转换

显式转换又叫强制型转换,他不换默认规则,由程序员指定。

如:

int i;

i = i+3.124; //默认是i转成double,再运算,之后double转成int赋给i

显示转换: i = i+(int)3.124 //先把3.124转成int,再参与运算。

显示类型转换方法:(数据类型)表达式

如:(int) 3.14159; //把double ->int

[c语言读书笔记]

篇12:c语言学习心得

看了一段时间的《C和指针》,这样看的效果不是很好,看着书本当时是懂了,有点恍然大悟的感觉,但是发现并不能真正的把理解的内容加入到自己程序当中,不能很好的去运用它,所以对于C语言我认为理论加实践,是学习C语言的最好方法,看书并不能完全理解书中的内容,也较容易遗忘,学习效率比较低,所以现在学习《数据结构》,在看书的同时,会在Microsoft Visual C++ 6.0软件上实践,严蔚敏写的《数据结构》这本书,比较经典但是这本书是伪算法,并不能直接在计算机上运行,对于初学者上机实践比较困难,另外说一下,我认为学习应该是在模仿中理解,在模仿中创新,所以我选择结合高一凡写的书《数据结构算法实现及解析》,这本书严蔚敏写的伪算法全部用程序实现了,给我上机实践提供了很大的帮助,貌似说到数据结构了,呵呵,回到正题,下面继续说说C语言。

指针是C语言的精华,也是C语言的难点,它就像一把双刃剑,锋利无比但运用的不好也会给自己带来危害,后果比较严重,所以重点来说说指针。 很多初学者弄不清指针和数组到底有什么样的关系,为避免混淆不清,下面总结一下指针和数组的特性。指针是保存数据的地址,任何存入指针变量的数据都会被当作地址来处理,指针变量本身的地址由编译器另外存储,存储在哪里,我们并不知道,间接访问数据,首先取得指针变量的内容,把它作为地址,然后从这个地址读或写入数据。指针可以用间接访问操作符(_)访问,也可以用以下标的形式访问,指针一般用于动态数据结构。数组是用来保存数据的,数组名代表的是数组首元素的地址而不是数组的首地址,所以数组p与&p是有区别的,虽然内容相同,但意义却不同,&p才是整个数组的首地址,数组名是整个数组的名字,数组内每个元素并没有名字,不能把数组当一个整体来进行读写操作。当然数组在初始化时也有例外,如int p[]=“12345”是合法的。数组可以以指针的形式访问如_(p+i);也可以以下标的形式访问p[i],但其本质都是p所代表的数组首元素的地址加上i_sizeof(类型)个字节作为数据的真正地址来进行访问的。数组通常用于存储固定数目且数据类型相同的元素。刚开始的时候我

有点分不清指针数组和数组指针,现在也总结一下,指针数组,首先它是一个数组,数组的每个元素都是指针,可以理解为“存储指针的数组”的简称,数组指针,首先它是一个指针,它指向一个数组,在32位系统下永远只占4个字节,至于它指向的数组有多少个字节,并不知道,可以理解为“指向数组的指针”。举个例子,int _p1[10]与int (_p2) [10], 要理解这个问题,首先要清楚操作符的优先级,“[]” 的优先级比“_” 的优先级高,所以首先p1与“[10]”结合构成一个数组p1[10],int _为修饰数组的内容,所以数组元素是指向int类型的指针,所以这个是指针数组,“” 的优先级比“[]” 的优先级高,“_”与p2结合构成一个指针变量,int修饰数组的内容,即数组的每个元素,数组这里并没有名字,是个匿名数组,现在清楚了p2是一个指针,它指向一个包含10个int类型数据的数组,即为数组指针。下面再说说内存管理,内存分为三个部分:静态区、堆、栈。其实堆栈就是栈,而不是堆。静态区是保存自动全局变量和static变量。静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。堆是由malloc系统函数分配内存的。其生命周期由free和delete决定。栈保存局部变量。栈上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。再说说有关内存需要注意的地方,定义了指针变量,在使用之前一定要初始化使它指向一块合法的内存,不管什么时候,我们在使用指针之前一定要确保指针是有效的。使用malloc系列函数分配内存,使用完之后应及时释放内存,以防止内存泄露。

最后总结的说一下学习C语言的方法就是编程编程再编程,理论学习与上机操作同时进行,另外在编程序的过程中要养成良好的编程习惯。

篇13:c语言指针

一、数组的指针、指针数组以及指向指针的指针

考虑数组的指针的时候我们要同时考虑类型和维数这两个属性,换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。

A)一维数组

在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:

int a[10]; int *p;

p=&a[0]//和p=a是等价的:

因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。但是我们是不是就说一个数组名和该数组的第一个元素的&运算是一回事呢?在一维的时候当时是的,但是在高维的时候,我们要考虑到维数给数组带来的影响。

a[10]是一个数组,a是数组名,它是一个包含10个int类型的数组类型,不是一般的指针变量噢!(虽然标准文档规定在c++中从int[]到int*直接转换是可以的,在使用的时候似乎在函数的参数为指针的时候,我们将该数组名赋值没有任何异样),a代表数组的首地址,在数字层面和a[10]的地址一样。这样我们就可以使用指针变量以及a来操作这个数组了。

所以我们要注意以下问题:

(1) p[i]和a[i]都是代表该数组的第i+1个元素;

(2) p+i和a+i代表了第i+1个元素的地址,所以我们也可以使用 *(p+I)和*(a+I)来引用对象元素;

(3)p+1不是对于指针数量上加一,而是表示从当前的位置跳过当前指针指向类型长度的空间,对于win32的int为4byte;

B)多维数组

对于二维数组a[4][6];由于数组名代表数组的起始地址,所以a(第一层)和第一个元素a[0][0]地址的数字是相同的,但是意义却是不同的。对于该数组我们可以理解为:a的一维数组(第一层),它有四个元素a[0]、a[1]、a[2]、a[3](第二层),而每个元素又含有6个元素a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5](第三层),…到此我们终于访问到了每个元素了,这个过程我们经历了:a->a[0]->a[0][0];

整体来讲:a是一个4行5列的二维数组,a表示它指向的数组的首地址(第一个元素地址&a[0]),同时a[0]指向一行,它是这个行的名字(和该行的第一个元素的首地址相同(第一个元素为地址&a[0][0]))。所以从数字角度说:a、a[0]、&a[0][0]是相同的,但是他们所处的层次是不同的。

既然a代表二维数组,那么a+i就表示它的第i+1个元素*(a+i)的地址,而在二维数组中

*(a+i)又指向一个数组,*(a+i)+j表示这个数组的第j+1个元素的地址,所以要访问这个元素可以使用 *(*(a+i)+j)(也就是a[i][j])。

他们的示意图为(虚线代表不是实际存在的):

对照这个图,如下的一些说法都是正确的(对于a[4][6]):

a是一个数组类型,*a指向一个数组;

a+i指向一个数组;

a、*a和&a[0][0]数值相同;

a[i]+j和*(a+i)+j是同一个概念;

总结一下就是:我们对于二维指针a,他指向数组a[0,1,2,3],使用*,可以使他降级到第二层次,这样*a就指向了第一个真正的数组。对于其他的情况我们也可以采用相同的方式,对于其他维数和类型的数组我们可以采用相类似的思想,

说到指向数组的指针,我们还可以声明一个指针变量让它指向一个数组。例如:

int (*p)[5];

这时p就是一个指针,要指向一个含有5个int类型元素的数组,指向其他的就会出现问题。

这个时候我们可以使用上面的什么东西来初始化呢?

我们可以使用*a,*(a+1),a[2]等。

原因很简单:我们在一个二维的数组中,那么表达方式有上面的相互类似的意义呢?只有 *a,*(a+1),a[2]等,

C)指针数组

一个指针数组是指一个数组中的每个元素都是一个指针,例如:

int *p[10];//而不能是int (*p)[10]

或者

char *p[10];

此时p是一个指针(数值上和&p[0]一样);

在前面有int t[10];

int * pt=t;//使用pt指向t

那么这里我们用什么指向int *t[10]中的t呢?我们要使用一个指针的指针:

int **pt=t;

这是因为:在int *t[10]中,每个元素是指针,那么同时t又指向这个数组,数组上和&t[0]相同,也就是指向t[0],指向一个指针变量,可以说是一个指针的指针了,所以自然要用

int **pt;

D)指针的指针

一个指针变量内部可以存储一个值,这个值是另外一个对象的地址,所以我们说一个指针变量可以指向一个普通变量,同样这个指针变量也有一个地址,也就是说有一个东西可以指向这个指针变量,然后再通过这个指针变量指向这个对象。那么如何来指向这个指针变量呢?由于指针变量本身已经是一个指针了(右值),那么我们这里就不能用一般的指针了,需要在指针上体现出来这些特点,我们需要定义指针的指针(二重指针)。

int *p1=&i; int**p2=&p1;

综合以上的所有点,下面是我们常常看到一些匹配(也是经常出错的地方):

int a[3],b[2][3],c,*d[3]; void fun1(int *p); void fun2(int (*p)[3]); void fun3(int **p); void fun4(int p[3]); void fun5(int p[]); void fun6(int p[2][3]); void fun7(int (&p)[3]);

函数 不会产生编译时刻的可能值(但逻辑上不一定都对)

函数

不会产生编译时刻的可能值(但逻辑上不一定都对)

fun1

a, &a[i], *b ,b[i],&b[i][j] ,&c ,d[i]

fun2

b,b+i,

fun3

d

fun4

a, &a[i], *b ,b[i],&b[i][j] ,&c ,d[i]

fun5

a, &a[i], *b ,b[i],&b[i][j] ,&c ,d[i]

fun6

b

篇14:c语言实验报告

c语言实验报告 -实习报告

学号:__________    姓名:__________    班级:__________    日期:__________ 指导教师:__________    成绩:__________实验一  上机操作初步和简单的C程序设计一、 实验目的1、熟悉C语言运行环境Turbo C++3.02、会简单的`程序调试3、熟悉C语言各种类型数据的输入输出函数的使用方法4、掌握顺序结构程序设计二、 实验内容1、 上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题1.7)2、 编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题1.6)3、 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 3.0中不能输入汉字,只能输入英文或拼音。(习题4.8)4、 运行如下程序,写出运行结果。第一┆范文网www.diyiFANWEN.com整理该文章,版权归原作者、原出处所有...#include void main{int a=1,b=2;a=a+b; b=a-b; a=a-b;printf(%d,%d\\n,a,b);}三、 实验步骤与过程四、程序调试记录

篇15: c语言学习心得

经过了一段时间的学习,我觉得对c语言已经有了一个初步的认识。能够做到利用c语言编织出一些非常简单的程序,和读懂大部分的程序代码,明白程序要表达的意思。

下面是对C语言中有许多重要知识的总结:

1、一些基本的函数和基本数据类型的应用。其中,基本数据类型分为整型、浮点型、字符型、枚举类型。基本函数包括输入输出函数。

2、把运算符的优先顺序排列清楚,要分清楚哪个先运算,哪个后运算。

3、在编程之前要考虑好程序的算法,写出流程图,这样才能更加快速的、有效的编程。

4、要分清楚各个变量的生存期和作用域,不能发生混淆,以致发生错误。

5、数组和指针是c语言的经典之处,可以通用,并且互相转换,具有非常强大的功能,但是使用不当的话,会造成程序出错,打乱原有程序的规律,使可读性明显变差。

6、结构体也是常用的一种数据类型,它的功能也比较强大,相对于指针而言,结构体掌握起来比较容易理解和使用。

7、对于文件的操作是非常关键的,把输入的数据保存起来,下次还能够使用,这才是关键问题。所以对文件操作是否成功,使程序是否编制成功的重要因素。

我认为c语言是一门很基础的语言,所有的计算机语言都是相通的,只要一门学会了,其他语言就会很容易学会。但是c语言是基础中的基础,掌握好c语言对于今后别的语言的学习是非常有好处的。虽然学会了c语言的大部份基础知识,但是要掌握好c语言并不是一件简单的事情,大家要多加练习和敲代码才能够把C语言学好。

篇16: c语言学习心得

C语言是一种结构化语言,是大部分编程语言的基础,C语言学好了,以后的JAVA,C#以及更多的编程语言才有可能学好。下面就跟南宁达内小编一起,要学好C语言必须了解的四点:

1、课前认真预习,把下一节要上的内容先自己看一遍,把不懂的地方打个标记,等上课的时候可以请教老师。理解书上的例子,搞懂每个语句的含义,用法。看完后尝试着不看例子自己编写程序,编完以后再跟书上进行比较,看自己的程序还有哪方面的不足,再进行改正。想要真正学好C语言光看书是不够的,一定要自己多动手。

2、上课认真听讲积极思考,提高上课效率。老师上课讲述的都是课程的重点和难点,听好课程可以达到”事半功倍\"的目的。

3、课后复习。把每天的上课内容回家再温习一遍,独立完成课后的作业,如果有时间,最好能找点课外书籍、课外习题什么的来巩固所学的内容。

4、主动上机,多多实践,提高动手能力。通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机能力来促进理论学习,开阔编程思路,提高反映速度,提高分析问题解决问题的能力,锻炼心理素质,提高心理承受能力。

学习C语言的初期重点要放在掌握语言的语法和规定上,一定要养成良好的编程习惯,平时写程序注意语法规范格式控制,格式规范了,出了错误也容易找到出错的地方,这是C语言的基础;后期的重点要转移到掌握编程的思路和基本算法上来。课后多做习题,找一些经典例子尝试自己编写,写程序切忌半途而费,想到一个思路,就要按自己思路把它写完,就算错了,也可以让自己了解为什么这样做会错?错在哪里?会出什么结果?以后自己也很难在这个地 数组和指针是c语言的经典之处,可以通用,并且互相转换,具有非常强大的功能,但是使用不当的话,会造成程序出错,打乱原有程序的规律,使可读性明显变差。

6、结构体也是常用的一种数据类型,它的功能也比较强大,相对于指针而言,结构体掌握起来比较容易理解和使用。

7、对于文件的操作是非常关键的,把输入的数据保存起来,下次还能够使用,这才是关键问题。所以对文件操作是否成功,使程序是否编制成功的重要因素。

我认为c语言是一门很基础的语言,所有的计算机语言都是相通的,只要一门学会了,其他语言就会很容易学会。但是c语言是基础中的基础,掌握好c语言对于今后别的语言的学习是非常有好处的。

c语言学习心得

C语言练习题

C语言学习心得

c语言练习试题库

c语言课程设计心得体会

C语言常用笔试题

c语言学习方法有哪些

C语言面试题大13

c语言试题及答案

c语言程序设计实验报告

C语言教学改革的探讨(锦集16篇)

欢迎下载DOC格式的C语言教学改革的探讨,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档