c语言学习报告doc.docx

上传人:b****1 文档编号:2894406 上传时间:2023-05-04 格式:DOCX 页数:10 大小:21.89KB
下载 相关 举报
c语言学习报告doc.docx_第1页
第1页 / 共10页
c语言学习报告doc.docx_第2页
第2页 / 共10页
c语言学习报告doc.docx_第3页
第3页 / 共10页
c语言学习报告doc.docx_第4页
第4页 / 共10页
c语言学习报告doc.docx_第5页
第5页 / 共10页
c语言学习报告doc.docx_第6页
第6页 / 共10页
c语言学习报告doc.docx_第7页
第7页 / 共10页
c语言学习报告doc.docx_第8页
第8页 / 共10页
c语言学习报告doc.docx_第9页
第9页 / 共10页
c语言学习报告doc.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c语言学习报告doc.docx

《c语言学习报告doc.docx》由会员分享,可在线阅读,更多相关《c语言学习报告doc.docx(10页珍藏版)》请在冰点文库上搜索。

c语言学习报告doc.docx

c语言学习报告doc

篇一:

《C语言学习心得报告》

C语言学习心得报告

看了一段时间的《C和指针》,这样看的效果不是很好,看着书本当时是懂了,有点恍然大悟的感觉,但是发现并不能真正的把理解的内容加入到自己程序当中,不能很好的去运用它,所以对于C语言我认为理论加实践,是学习C语言的最好方法,看书并不能完全理解书中的内容,也较容易遗忘,学习效率比较低,所以现在学习《数据结构》,在看书的同时,会在MicrosoftVisualC++0软件上实

践,严蔚敏写的《数据结构》这本书,比较经典但是这本书是伪算法,并不能直接在计算机上运行,对于初学者上机实践比较困难,另外说一下,我认为学习应该是在模仿中理解,在模仿中创新,所以我选择结合高一凡写的书《数据结构算法实现及解析》,这本书严蔚敏写的伪算法全部用程序实现了,给我上机实践提供了很大的帮助,貌似说到数据结构了,呵呵,回到正题,下面继续说说C语言。

指针是C语言的精华,也是C语言的难点,它就像一把双刃剑,锋利无比但运用的不好也会给自己带来危害,后果比较严重,所以重点来说说指针。

很多初学者弄不清指针和数组到底有什么样的关系,为避免混淆不清,下面总结一下指针和数组的特性。

指针是保存数据的地址,任何存入指针变量的数据都会被当作地址来处理,指针变量本身的地址由编译器另外存储,存储在哪里,我们并不知

道,间接访问数据,首先取得指针变量的内容,把它作为地址,然后从这个地址读或写入数据。

指针可以用间接访问操作符(*)访问,也可以用以下标的形式访问,指针一般用于动态数据结构。

数组是用来保存数据的,数组名代表的是数组首元素的地址而不是数组的首地址,所以数组p与&P是有区别的,虽然内容相同,但意义却不同,&p才是整个数组的首地址,数组名是整个数组的名字,数组内每个元素并没有名字,不能把数组当一个整体来进行读写操作。

当然数组在初始化时也有例外,如intp[]=“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语言的方法就是编程编程再编程,理论学习与上机

操作同时进行,另外在编程序的过程中要养成良好的编程习惯。

篇二:

《C语言学习心得及报告》

学校西安航空学院

系别电气系

班级过控1409

姓名兰敏

学号1130306140913

、,、-

前言

两个原因促使我写下这篇文章,第一就是作为过来人根据我自己的经验我知

道编程的初学者一般都很兴奋也都有种困惑,一方面对运行在计算机(注不特

别指明都指个人微型计算机)的五花八门如精彩的游戏程序,多姿多彩的网站等等漂亮的视窗程序所着迷,另一方面大部分的初学者(如计算机专业的低年级学生)都是从简单命令行程序“Helloworld!

”开始入手而且很长一段时间都无法接触到日常经常使用的视窗程序,由此好奇者有之,迷惑者有之等等,更遗憾的是也有少部分人因为困惑对编程逐渐失去兴趣。

第二就是今天妹妹看C程序设计语言的人读碰到一个例题没有看懂,而作为计算机专业毕业的老哥自然义不容辞地承担起了讲解的任务,在噼里啪啦的大说之后,老妹终于弄懂了例题程序的意思,但仍然不过瘾,竟然问起我如何学好C语言,弄得我心一惊,这里我还是有点自知之明的,因为我知道我并不是什么大师,甚至自己对计算机世界也经常是一片茫然,不过看着她那“崇拜”的眼神,不说点什么似乎有点不大好,只好硬着头皮把自己以前的一些理解讲了一番。

所以既然知道有这个需要,尽管自己见识浅薄,也抱着“区区陋见假如能够对后学者能够有所帮助那是再好不过了,即使有所偏颇当当笑话看看能有助于大家饭后生活也是美德一件”的心情就写下了这篇文章。

简介

我是很乐意将计算机(程序设计)语言跟人类语言做类比的,在我看来学习程序设计语言就想学习外语一样,通过计算机语言与计算机交流就如同在使用

外语与老外交流一样。

通常学习语言比如英语有单词,语法,语义三个部分组成,单词是构成语言的最基本的要素,语法告诉我们单词如何构成语句,语义则告诉我们单词构成的语句的意思,类似的程序设计语言中也是有[1]“单词”,“语法”,“语义”三部分组成,其中跟人类语言一样,“单词”“语法”是基础,而为达到交流的目的“语义”是整个程序设计语言的重点。

当然相对人类语言(以英语为例)而言程序设计语言(以C语言为例)显然要有简单得多的组成,所以这里我们要首先确立自己对学好程序设计语言的信心。

下面试加以说明,其中可能有些类比不太适当,不过好像也差不多吧,你自己也可以试着举出更好的例子以使自己更容易明白,我这里就抛砖引玉吧。

先从“单词”谈起,在英语中就是由26个英文字母以及26个英文字母构成的单词组成,学习语言我们首先应该记忆的就是“单词”,26个英文字母A,B,C,然后就是令人头痛的英文单词,记忆的过程是痛苦的至少我学英语时最恼火的地方就是反复记忆老是忘记的单词,类似的在C语言中我们可以作这样的类比,C语言的单词是由26个英文字母、数字(0,1,29)、运算符以及其他特殊符号组成,所以相比而言学习C语言是多么的幸福。

“语法”,在英语中是如常见构词法、时态、常用句型、特殊用法、固定用法等等(呵呵,不是语言专家如有兴趣可以参考英语语法书籍),仅拿构词法来说动词后面加er就变成名词(work-worker),名词后面加y就变成形容词(wind-windy)等十多种变换还要记忆些特殊变换,复杂且繁琐,假如算上时态、句型等那就更复杂了。

在C语言中也同样也存在有语法,比如标识符、常量、表达式、数据定义、函数定义、变量初始化、语句构成、预处理命令等大致8种语法,如标识符[2]可由字母、数字以及下划线组成,且必须以字母或下划线

开头,区分大小写,另外在不同的编译器中字符数目有不同的规定,一般为

7个字符。

不过这里有些可能会被忽略的就是书写格式,在C语言中书写格式也是需要被注意的,因为格式也可以当作C语言的语法项目,如语句是以分号‘;作为结束的标志的而不是以换行作为结束标志,其实英语也有要求比如什么时候该使用句号什么时候该使用逗号等等只不过我们日常要求并不注意,而且也可以看的懂所以不太较真。

总结

综上所述我们要学好一门程序设计语言首先就要像学习英语一样先熟记至少要熟悉这门语言的“单词”和“语法”然后才能谈得上使用,俗话说“万丈高楼平地起”,学好C语言的必要前提就是先打下坚实的C语言基础,所以潭先生的书作为一本很好的教材,我建议是不能丢的,而且还要反复看,至少刚开始我学习的时候上机机会不多,就是反复看懂看明白这本书,有些东西该记的还是要记尤其是一些重要的语法比如标识符、数据类型、语句的特点、函数的占式结构,指针的意义等等。

最后始终记住这点在没有实践之前,先打下坚实的理论基础吧,毕竟理论是实践的先行,理论可以更好的指导实践。

即使再低点的要求至少要先熟悉理论吧,毕竟“摸着石头过河”感觉还是盲目以及痛苦的

“语义”即语句的意思、含义。

同人类语言一样,程序设计语言最重要的目的还是“交流”,所以写一段没有任何作用的代码就如同说一句没有任何意思的话是没有意义的,在这一点上两者是共同的,至于在其他某些方面两者也有惊人的相似之处,试举一例吧,比如说可以有不同的表达表示同一个意思,如微型计算机同个人计算机就是同一个意思,在C语言中比如要让变量i自增1,可以有i=i+1或者i+=1等等。

不过与人类语言相比,程序设计语言毕竟是与计算机交流,交流对象计算机与人类的不同也决定了程序设计语言与人类语言还是有所区别,甚至可以说是存在巨大的“鸿沟”,这也就是学习程序设计语言的重点。

与人类相区别,计算机最大的不同之处在于没有“自己”的“思维”,没有像人类那样丰富的感情,所以在交流过程中对于人类的跳跃性的思维,对于人类的“幽默”无法理解也没有丝毫的兴趣。

比如说对与同样一句话“Doit”,在不同的场景不同的说话语气,对10个人来说就会有10种不同的回答,有的人可能会认为这是合理的要求,有的人可能会认为这可能是个玩笑而不与理睬,有的人则可能认为语气要求有些过分而感到非常愤怒,但对所有的计算机来说则是严格执行。

不过也正是由于计算机“机械”“笨着”的可爱而深得人们的喜爱并被广泛使用,因为对我们来说,计算机就像一个忠实的士兵一样在执行我们的命令并且作为指挥者,当然我们希望计算机在合适的时间干切当的事情。

而要达到这个目的,很凑巧有点类似于社会的“权利与义务”法则一样,我们也有自己的义务那就是下达明确而又正确的“命令”。

首先明确,即我们要在与计算机交流时“语义”必须明确,否则计算机将无所适从,因此作为交流工具的程序设计语言的“语义”也必须是能够明确无二义的。

当然程序设计语言的设计者已经注意到这一点,在设计时就回避了这个问题,所以我们——程序设计语言的使用者——程序员也就无须过多关注这点,也就是说使用何种程序设计语言(C,Basic,Pascal等)并不是我们要关注的重点。

其次正确,包括正确的输入以及正确的逻辑。

由于计算机“忠实”得有点“盲目”以至于对事情的对错毫无判断力,就像一把枪一样,在警察手里它就是正义的化身,而在土匪手里就成了恶魔的代言人,因此要时刻记住计算机是没有错的,“错误”掌握在我们自己手里,这也就决定了我们在编程时是不是应该投入更多的精力来纠正我们自己所犯下的错误上面来?

除此之外,我们智慧的结晶——程序,在我们的上帝——顾客,在程序的使用者看来就像个黑匣子,他们只管输入哪怕是错误的输入却同样期待能得到正确的结果,而对于上帝我们除了祈祷和期望之外还能有什么选择?

因此对于输入的不可预期的程序源数据,我们是不是也应该花更多的时间进行处理呢?

先小结下,由于我们在编程时需要对于输入的不可预期的程序源数据以及

篇三:

《C语言学习报告》

C语言迷宫问题代码如下

#include

#include

#defineLENsizeof(SEAT)

#defineMAXSIZE100#defineLENGTH30

typedefstruct{

intx;//横坐标

inty;//纵坐标

intdi;//表示方向,0-3分别表示东南西北。

}SEAT;

structStackList

SEATstack[MAXSIZE];

inttop;}*Stack;

intEmptyStack(StackList*Stack)//判断是否为空栈

{

if(Stack->top==0)

return0;

else

return1;

}

intMove[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//分别表示向东、西、南、北需要

加上的坐标

intMase[LENGTH][LENGTH]={0};//初始化为0

intlength,width;

voidInitMase()//在迷宫的外围添加一层“墙壁”(赋值为1),使得迷宫的

任意一点都有四个方向

inti,j;

for(i=0;i

for(j=0;j

Mase[i][j]=1;}

for(i=0;i

for(j=0;j

Mase[j][i]=1;

 

 

voidInitStack(StackList*Stack)//初始化

Stack->top=0;

进栈

returnintPushStack(StackList*Stack,SEATCurSeat)//

{if(Stack->top==MAXSIZE-1)

returnfalse;

else

Stack->stack[Stack->top].x=CurSeat.x;

Stack->stack[Stack->top].y=CurSeat.y;

Stack->stack[Stack->top].di=CurSeat.di;

Stack->top++;

returntrue;

intPopStack(StackList*Stack)//出栈

if(Stack->top==0)returnfalse;

else

{{c语言学习报告}.

Stack->top--;

returntrue;

intPass(SEATp)//判断当前是否可行

if(Mase[p.x][p.y]==0)

returntrue;

 

elsereturnfalse;

SEATNextSeat(SEATCurSeat)//查找下一个点,并返回

SEATtemp;

temp.x=CurSeat.x+Move[CurSeat.di][0];

temp.y=CurSeat.y+Move[CurSeat.di][1];

returntemp;

voidMark(SEATp)//标记已经走过的点,避免重复

Mase[p.x][p.y]=-1;

intPathWay(SEATstart,SEATend)//找路线

Stack=(structStackList*)malloc(sizeof(structStackList));

InitStack(Stack);

SEATCurSeat;

CurSeat.x=start.x+1;//由于多加了一层墙壁,因此坐标的值要加1

CurSeat.y=start.y+1;//

CurSeat.di=start.di;//doif(Pass(CurSeat))

PushStack(Stack,CurSeat);

如果找到出口,返回

Mark(CurSeat);

if(CurSeat.x==end.x+1&&CurSeat.y==end.y+1)//

{

returntrue;

else

intfind=0;

while(CurSeat.di<3&&find==0)//找下一个结点的方向

CurSeat.di++;

SEATtemp;

temp=NextSeat(CurSeat);

if(Mase[temp.x][temp.y]==0)

{temp.di=-1;

CurSeat=temp;

find=1;

elseif(EmptyStack(Stack))//当前的点不能走,出栈

PopStack(Stack);

if(EmptyStack(Stack))//当前的点变为前一个点

CurSeat=Stack->stack[Stack->top-1];

while(CurSeat.di==3&&EmptyStack(Stack))////当前的点找不到下一个

点,出栈

PopStack(Stack);

CurSeat=Stack->stack[Stack->top-1];//当前的点变为前一个点}

if(EmptyStack(Stack))

intfind=0;

while(CurSeat.di<3&&find==0)////找下一个结点的方向

CurSeat.di++;

SEATtemp;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2