c入门经典学习笔记

2024-05-01

c入门经典学习笔记(共4篇)

篇1:c入门经典学习笔记

学习C++从入门到精通的的十本最经典书籍.txt不要为旧的悲伤而浪费新的眼泪!现在干什么事都要有经验的,除了老婆。没有100分的另一半,只有50分的两个人。[C语言] 学习C++从入门到精通的的十本最经典书籍 Post By:2008-9-19 14:33:33

1.《C++Primer》

有“C++的百科全书”,C++程序员人手必备。对语法、语义的描述非常细致和严谨,适合有一定经验的C、C++程序员作为工具书和理论指导书使用,但由于其有一定深度,而没有进阶顺序的章节安排,所以不适合初学者做为教材使用,价格略高。难度:★★☆ 质量:★★★★★ 广度:★★★★★ 深度:★★★★ 性价:★★★☆

2.《C++Primer Plus》

初学C++不错的书,覆盖面较全,章节安排比较合理,由浅入深,也很容易,故因此失去了一些深度。价格比较便宜,但翻译质量略有不足。难度:☆

质量:★★★☆ 广度:★★★★ 深度:★★★ 性价:★★★☆

3.《Essential C++》

lippman 的一部面向初学者的作品。在他写了那么后一本primer之后,为何还要写这么薄这么浅的书呢?其实primer对于初学者来说太笨重了,而这本书却是从不同的方面——C++的本质和组织结构对语言进行阐释,可以帮助初学者对这门语言有一个大致的了解,但知识范围不很全面,不适合系统学习,读者需要一定的编程知识。难度:★☆ 质量:★★★★ 广度:★★★☆ 深度:★★★ 性价:★★☆

4.《Effective C++》、《More Effective C++》

C++真牛人大手笔,之以条款的形式回答了程序员在使用C++时经常提出的“因该注意些什么?”,“因该避免什么?”,“因该怎样去解决?”,“为什么?”等问题。C++程序员想要让自己的水平上更高的档次,此二书必看。价格稍贵,有一定难度,不适合初学者。难度:★★★☆ 质量:★★★★★ 广度:★★★ 深度:★★★★★ 性价:★★

5.《C++编程思想》

除了讲述语言之外,有一定的工程性,从设计者的角度来描述C++怎样应用在实际的项目中。语言描述的全面性欠佳,但还是有一定精度的,尤其是在一些小技巧方面。本书还引入了大量的战例,通过一个个的真实项目来引导你使用C++的思想去思考问题。翻译很差,有一定难度。

难度:★★☆ 质量:★★★ 广度:★★★☆ 深度:★★★★ 性价:★★★

6.《C++大学教程》

正如其名,真正的大学教程,非常适合初学者学习,内容由浅入深,对C++各项特性的描述都很到位,章节的安排很有条理性,但深度略显不足,翻译质量不能称之为很好,有一定的疏漏,但对于厚度来讲,价格还算比较便宜。难度:★

质量:★★★☆ 广度:★★★★★ 深度:★★★★ 性价:★★★★☆

7.《C++语言的设计和演化》

对于热爱C++的朋友来说,确实好书一本,可以当做小说来读,可以放在厕所或床头上以供消遣。本书对语言本身描述很少,并有一定难度。读者需要对C++有一定了解,不适合初学者阅读。难度:★★★ 质量:★★★ 广度:★★☆ 深度:★★★★ 性价:★★★

8.《C++程序设计语言》

C++之父所作,被称之为“C++圣经”。不仅对语言,而且对语言周边的一些如发展史、语义哲学都有比较详细的描述。对语言的描述较为全面,同时包含一部分和程序库相关联的知识,并有一定深度,适合有一定语言基础的初学者,翻译质量不错,价格适中。难度:★☆

质量:★★★★☆ 广度:★★★★☆ 深度:★★★★ 性价:★★★☆

9.《深度探索C++对象模型》

第一代C++编译器开发主管所写。如果你想成为真正的C++高手,看这本书,他为你讲述了编译器在处理各种语法时在“后台”所做的事。对C++有较深入了解的读者会在读后有恍然大悟之感。候杰翻译,质量相当不错,但内容太深,只适合对C++有较深了解的读者,价格偏贵。

难度:★★★★☆ 质量:★★★★★ 广度:★★★ 深度:★★★★★ 性价:★★

10.《C++程序设计教程》(钱能-清华版)

国人所著,国人水平实在有限,深度和广度欠佳,放在这十大里实在是因为再挑不出好书了。可圈可点之处有讲解较为清析、简单,符合中国学生思路,价格便宜。难度:☆ 质量:★★★ 广度:★★★☆ 深度:★★★ 性价:★★★★★

学习C++的话,看你目前的水平,我说一下从完全不懂到最后高手的专家推荐路线吧: 1.《C++ Primer》Lippman写的,经典中的经典,C++入门的宝典,读完这本书,基本语法过关,部分技巧掌握。

2.《The C++ programming language》C++的创始人Bjarne Stroustrup写的,这本书的权威性毋庸置疑,而且这里面讲到了一些比较底层的东西,如果你看过了《C++ Primer》的话,这本书可以跳着看,懂的就跳过。

3.《Effective C++》 Scott Meyers顶级大师用活泼幽默的语言写的书,这本书中讲到了许多应该注意的问题,这是十分值得购买的书。(Lippman曾把程序员分为看过effective c++的和没看过的两类。由此可见此书的重要性)

4.《More Effective C++》上书的姊妹篇,这本书里讲到了许多关键性的技术,对提高程序的效率是非常有帮助的。

5.《Advanced C++》这是一本神奇的书,里面讲到了许多连C++设计者都没想到的妙法,解决了许多看似不可能解决的问题。Scott Meyers曾隆重推荐过的书。

6.《Inside the C++ Objects Model》又是Lippman的大作!这本书讲到了他在开发第一个C++编译器时的许多想法,彻底解析了C++底层机制是如何实现对象模型的,看过这本书,你对C++的了解会有质的飞跃!从这刻起,你有权力说你是一个C++程序员了!

光学C++语言基本上看完上述的书就是高手了,其他经验要在实践中累积,你在看这些书的同时就应该多做一些小程序,小项目,提高水平的速度是飞快的.这是我个人的经验。另外,你学了C++还要开发程序,开发软件,无疑要使用MFC之类的东西 《API Programming》和《MFC Windows 程序设计》两书值得一看。这两本书能迅速提高你的实践水平。

篇2:c入门经典学习笔记

个人感觉这个程序最不好的地方是,不管回答正确还是回答错误,程都会立即结束,所以我用了do„while实现一个回答错误之后获得再次回答机会的循环,则程序修改如下: #include void main(){ int a,b,c;printf(“请输入一个加数:n”);scanf(“%d”,&a);printf(“请输入一个被加数:n”);scanf(“%d”,&b);do { printf(“请回答:a+b=”);scanf(“%d”,&c);if(a+b!=c)printf(“请再想一想n”);} while(a+b==c)printf(“回答正确!”);}

2、判闰年程序:判断某一年是否闰年? 要求:程序首先提示用户从键盘输入4位数年份,程序能显示“XXXX年是闰年”或“XXXX年不闰年”的输出信息。

算法:year 是闰年,即year能被4整除但不能被100整除,或 year 能被 400 整除。其对应的C逻辑表达式为:(year % 4 = = 0 && year % 100!= 0)||(year % 400 = = 0)或:(!(year % 4)&& year % 100)||!(year % 400)程序中可设置1个变量leap来代表是否闰年的信息,闰年:leap=1;不闰年:leap=0。#include void main()int year;printf(“请输入4位数年份:”);scanf(“%d”,&year);if(year%4==0&&year%100!=0||year%400==0)//闰年就是能被4整除但不能被100整除及能被400整除的 printf(“%d是闰年”,year); else printf(“%d不是闰年”,year);}

3、三角形九九表程序:要求选择C实现循环的4种方法(if+go, for语句,while语句,do…while语句)中的一种,比如,最好选择for语句来实现如下形式的“九九表”输出。

#include void main()int a,b,c;for(a=1;a<=9;a++)//纵列表数每循环完一次换行 {for(b=1;b<=9;b++)if(b<=a)printf(“ %d”,a*b);printf(“n”);}}

4、平面等腰三角形: 要求利用C的for循环实现如下平面图形输出。

如图,等腰三角形有6层,则 #include viod main()int a,b,c;//a,b,c分别是层数变量,变量,*变量 for(a=1;a<=6;a++){for(b=6-a;b>=1;b--)printf(“ ”);for(c=1;c<=2*a-1;c++)printf(“*”);printf(“n”);}}

5、平面倒立等腰三角形: 要求利用C的for循环实现如下平面图形输出。

#include viod main()int a,b,c;//a,b,c分别是层数变量,变量,*变量 for(a=6;a>=1;a--){for(b=6-a;b>=1;b++)printf(“ ”);for(c=11;c<=2*a-1;c--)printf(“*”)printf(“n”);}}

6、判素数:要求由用户从键盘输入任一正整数m, 程序输出m是否素数的信息。#include viod main()int m,n;printf(“请输入任一正整数m:”);scanf(“%d”,&m);If(m==0||m==1);printf(“%d不是素数”,m);//0和1既不是素数也不是合数 for(n=2;n

7、计算:1!+2!+3!+...+9!

#include void main(){ int i;long p=1;double s=0.0;for(i=1;i<=9;i++){p*=i;S+=p;} printf(“1!+2!+3!+„+9!=%fn”,s);}

8、计算:1!+3!+5!+...+15!

#include void main()int i;long p=1;double s=0.0;for(i=1;i<=15;i++){p*=i;if(i%2!=0)s+=p;} printf(“1!+3!+5!+„15!=%tn”,s);}

9、计算:2!+4!+6!+...+16!

#include void main()int i;long p=1;double s=0.0;for(i=1;i<=16;i++){p*=i;if(i%2==0)s=s+p;} printf(“2!+4!+6!+„16!=%tn”,s);}

10、利用“比较交换法”对由用户从键盘输入的任意10个整数升序排序。要求:利用C的数组和循环,程序能分别输出排序前后的数组。#include void main(){ int i,s,a[10],t;//数组下标变量i printf(“请输入10个整数:n”);for(i=0;i<=9;i++)scanf(“%d”,&a[i]);//将10个整数分别存入该数组的下标0到9这10个位置中去 for(i=0;i<9;i++){for(s=i+1;s<=9;s++)//a[s]为a[i]的后一位 if(a[i]>a[s]){t=a[i];a[i]=a[s];a[s]=t;}//将数组中的数两两逐个比较换位,实现升序 printf(“排序后的数组为:n”);for(i=0;i<=9;i++)printf(“%d ”,a[i]);}

11、统计:由用户从键盘输入任意10个数,统计其中最大数,最小数及平均值。

#include void main(){ int i,s,a[10],t,sum;double n;printf(“输入任意10个整数:n”);for(i=0;i<=9;i++)scanf(“%d ”,&a[i]);for(i=0;i<=9;i++)printf(“%d ”,a[i]);for(i=0;i<=9;i++){for(s=i+1;s<9;s++)if(a[i]>a[s]){t=a[i];a[i]=a[s];a[s]=t;}//实现10数升序排列 for(i=0,1<=9,i++)sum+=a[i];n=sum/10;printf(“10个数的最大是:%dn 10个数的最小是:%dn 10个数的平均是:%tn”,a[9],a[0],n);}

篇3:c入门经典学习笔记

1、linux系统是完全免费的,而windows或者mac系统无论是个人版还是服务器版都是收费的。

如果光是有“内核”是实现不了什么具体的功能的,它只是一组核心的代码。而用户如果想要linux做事就必须要通过shell告诉linux要执行什么,然后linux执行完后再把结果通过shell返回给用户。

2、linux有两种界面模式:

1、字符界面;

2、图形界面。而字符界面的优点是可操作性强,而且占用硬件资源少(如果是图形界面需要占用cpu、内存和显卡等的资源很大,而如果是字符型界面的话可能64M的内存还运行的速度挺快的呢)。

3、linux有两种版本:

1、内核版本(没有任何的第三方软件或者第三方类库,可以理解为是一堆的c代码或者c++代码,它只是把核心操作系统的功能用c程序的方式表现出来,然后我们把它编译出来再去使用),要注意如下图中内核版本的版本号如果都是偶数说明这是一个经过修补和改进的稳定版本,如果都是基数说明这是一个测试版本,也就是可能会存在不确定的错误的地方,所以我们下载时要注意无论是内核版还是发行版都要下载稳定的版本。而“n”编号是某个人对内核进行的某个功能的修改然后用这个最小版本级别的“n”进行标示一下;

2、发行版本(就是直接把linux内核拿来然后集成进去常用的软件和配置然后再发行,其实我们自己也是可以这么做的)。

4、redhat是linux发行版的老大,centos觉得redhat违背了开源应当是免费的精神所以把redhat的源代码经过编译然后加入自己的东西就成了新的操作系统,其实redhat收费指的是对于需要安装第三方软件还有技术支持这类服务才收费的,如果你不需要这样的服务redhat系统下载下来还是可以免费使用的。Suse linux系统和redhat一样也是某些需要收费的,虽然也有一个它的免费的类似于centos公司的系统open suse,但是目前使用最多的发行版还是centos。要记住redhat和centos是两家公司。

而debian和ubuntu也是有渊源的,debian的稳定性是非常好的可是升级太慢了,而ubuntu每年4月份和10月份都是有升级的,而且ubuntu主要针对的是客户端的系统所以界面非常友好。

5、如何选择linux发行版:

1、稳定性;

2、硬件兼容性(就是对于硬件的兼容性,驱动程序的更新等等,其实这些发行版已经及时做到,就不用用户自己去考虑这些了);

3、高效率;

4、可持续性(也就是说这个厂商不会今天还发型新版本呢,明天就倒闭了)。

6、我们之所以选择linux系统用在服务器上是因为:

1、linux是自由软件;

2、linux是开源的,所以不会涉及到版权和费用问题的,如果选择windows肯定会涉及到版权和费用的;

3、windows在性能、管理、安全方面都要低于linux操作系统。

而且linux下面的所用到的网络软件如上图也都是开源免费的,而windows下面的这些类似于linux网络功能的软件就不是每个都免费的了,比如exchange就需要大价钱来购买的,sql server也是需要购买的。

【02 Linux系统安装(上)】

1、我们如果想要下载centos的linux版本可以直接去官方网站下载,但是这个官方网站是英文的而且安装的linux系统也是英文的,所以不方便。这时我们可以去国内的有些镜像网站去下载(国内有些大网站有针对于国外的镜像开源下载站),比如mirrors.163.com是网易的开源镜像站点,当然搜狐也有。2、32位操作系统和64位操作系统最大的不同就体现在内存上,由于寻址方式的不同,32位操作系统最大只能支持到3G多或者4G的内存,即使你的内存再大,但多于4G也是不能被32位的操作系统识别的,而64位操作系统就不会存在这样的问题。如下图是在安装centos版本linux系统时选择安装32位的还是64位的,i386是32位的,x86_64是64位的,而两者安装时是没有任何区别的,只不过是在安装完成后对于内存支持的不同还有文件的扩展名显示方式不同。

3、如下图是比如说你选择了i386后出现的目录,由下图可知如果你要是把iso文件刻录到cd上面得需要7张cd盘,而如果是用dvd光盘只需要2张就够了(其实只需要第一张dvd关盘DVD-1of2.ISO就够了,因为第二张是一些比如office软件什么的了一些扩展功能了),所以为了节省成本还是用dvd方式刻盘吧。

注意上图是5.9版本的,所以如果是把系统安装盘刻成cd需要的是8张光盘,如果是刻成dvd的需要两张光盘。上面所说的需要7张cd光盘是针对5.8版本而说的。

4、如果是在虚拟机上安装不论是linux还是windows最好是直接通过你硬盘的镜像文件安装,因为这样要比用光盘的安装方式速度快而且也不容易出错,不过如果是在一台真正的电脑上安装系统的话就只能是通过光盘或者U盘的方式了。

【03 Linux系统安装(下)】

1、在安装linux时选择语言最好就选择英文的,因为即使你选择了中文的以后再安装其它软件时这个软件的界面也是全部英文的界面。

然后键盘也选择美国的标准键盘布局:

2、下图是linux自动给一个新硬盘分的区,linux中把一块硬盘称作sda,如果还有第二块硬盘就是sdb,如果还有第三块硬盘就是sdc。那么sda1就是第一块硬盘的第一个分区,sda2就是第一块硬盘的第二个分区。Ext3和physical都是文件系统格式,就相当于windows里面的ntfs或者fat32。“/boot”就说明这个分区是启动分区,如下图所示:

3、linux一般都用GRUB启动加载器(可以给这个加载器设置密码)来启动linux系统,因为linux默认的启动器会有一些bug。

4、配置网卡时可以不选择ipv6这个参数,因为国内大多数还是用的ipv4的ip地址(虽然现有的ipv4的ip地址快用完了),而且启动了ipv6就会多占用一个服务的。

5、如下图是设置linux的管理员root的密码的:

5、如下图是给linux系统选择需要安装的软件:

【04 Linux字符界面基本操作】

1、下图是本节课需要掌握的知识:

2、使用字符界面的好处如下图所示:

录和远程登录,putty的使用:、本地登

34、系统的启动级别:

5、本地登录linux可以在出现提示符“login:”后输入用户名然后回车,然后会提示输入密码“password:”(此时输入密码时不会像windows那样出现星号的,而是什么都不会出现。如果密码输入正确会直接进入,如果输入错误会出现错误信息的),然后输入此用户名的密码然后回车。本地注销时只需要输入命令“logout”就可以了,系统就会重新回到登陆窗口了。

6、远程登录linux需要用到第三方软件putty,而下载putty可以在google上面搜索区putty的官方网站去下载。Putty是一个免费、开源、绿色的软件。在putty软件里面的session里面输入要登录的linux的ip地址然后点击“open”,然后在出现的窗口中输入linux的用户名和密码后就能登录远程的linux了(第一次登录远程linux时会出现警告信息,此时直接点击确定就可以了)。

7、如果在putty里面不想每次都要输入session中远程linux的ip地址的话,可以给要经常远程登录的linux保存一个session,这样就不用每次都要输入远程linux的ip地址了。必须要启动linux系统后才能用putty登录linux系统,也就是形成一个session。而不能没有启动linux就直接用putty来登录,这样是登录不进去的(也就是服务器都没开机你登录谁去啊)。

8、关机和重启命令的使用:

【05 Linux基本命令使用】

1、linux系统中的命令都遵循下图中所示的格式:

2、下图是通配符的使用:

3、在一个命令后加上选项的时候如果是每一个选项都是一个一个列出来太麻烦了,这时就可以用一个横杠“-”然后把所有需要加上的选项都加上就可以了。比如“ls –a –l”就可以写成“ls –al”,后者就比较简便了。

4、在windows里面文件类型有很多种,比如有.exe、.txt、.doc、.xls等等,但是在linux里面就没有这么多的讲究了,在linux里面用的最多的就是普通文件、目录和符号链接了,如下图:

如下图中小横线“-”开头的文件都是普通文件,这类普通的文件我们都是可以进行编辑、删除等操作的。

如下图最后面是蓝色字体,而且最前面是用“d”开头的是目录:

如下图开头是以“l”开头的是符号链接文件(目录和文件都可以进行链接):

6、用“cd..”可以退到当前目录的父目录,用“cd /”可以直接退到根目录下了。

7、文件的操作命令:

8、文本文件查看命令:

9、linux中的文件操作:

【06 Linux文件权限设置】

1、这节课的学习目的:

2、我们在输入一个命令的时候只要输入这个命令的前几个字母然后按两下“tab”键,linux系统就会把包括这前几个字母的所有命令给你列出来(当你忘了一个命令的完整写法时这种方法是比较有用的),这个就叫命令补全。如果你输入的前几个字母只可能会成为一个命令的时候,你只需要按一下tab键这个命令就会自动补全了。

3、“rmdir”只能删除空的文件夹(这个命令可能不能删除文件),而“rm”可以删除不是空的文件夹当然也可以删除文件,而且只要加上参数“-rf”就连提示信息都不会有就给删除了。命令补全也适用于目录,比如在输入命令“cd etc/sys”然后按“tab”键后linux系统就会自动列出包括“sys”开头的所有目录,这就是目录补全。文件补全和目录补全或者命令补全也是一个道理的。

4、在linux里面的文件可以有扩展名也可以没有扩展名,那么我们怎么来区分用目录补全的方式列出的是文件还是目录呢。在linux里面用目录补全的方法列出的目录和文件的清单里面,目录后面肯定有一个正斜杠的“/”,而文件是不会有的,如下图所示。

5、命令行补全,命令历史:

上图中的双感叹号“!”是执行上一次已经执行的命令(等于是重复执行上一次的命令),单感叹号“!”是加上一个已经执行过的命令的开头字母来实现功能的,比如“!c”(当然也可以多加上几个字母的)就是从执行过的所有命令中从后往前算,如果找到了一个比如是“cat hd1.txt”的命令那么就执行它,如果这个“cat hd1.txt”命令之前还有类似的命令比如“cat hd2.txt”就不会被执行了,因为单感叹号“!”只会从已经执行过的所有命令中找到最后一次执行的一个命令然后执行就完成了它的使命了,如果比这个找到的命令再早的还有首字母也是“c”的命令也不会执行了,因为单感叹号“!”只会执行一次命令的。当然单感叹号也可以加上用命令历史(history)显示出来的命令行号来执行如下图所示:

6、标准输入输出:

【07 Linux重定向和管道】

1、系统重定向:

输出重定向的单大于号“>”是会把先前输出重定向到一个文件的内容给覆盖掉的,比如用命令“ls >houdun”就是已经把“ls”的结果重定向到“houdun”这个文件里面去了,而现在又执行了另一个命令“uname –a >houdun”,那么文件“houdun”里面的内容就应该是“uname –a >houdun”的执行后结果内容了而不是“ls >houdun”的执行结果内容了(因为先前的结果被覆盖掉了)。单大于号“>”是覆盖,而双大于号“>>”就是追加了(也就是原来的内容还存在,新加的内容会在原来的基础上继续追加的)。其实重定向就是把信息不显示在屏幕上,而是把信息写到一个指定的文件里面去。

2、使用重定向的例子:

3、管道:

4、ctrl+l是清屏。

【08 Linux文件权限及设置命令(上)】

1、本节课的学习目的:

2、什么是文件权限:

当用“ls-l”查看文件或者目录的详细信息时,看到信息列表最前面的有“rw”的就表示当前用户可以对于这个文件进行读和写的操作:

3、如下图所示一个文件的权限分为3组,如红色方框处的第一组权限是对于当前用户具有可读可写的操作,第二组权限是用户组只对于该文件只具有可读的权限,第三组权限是其它用户针对这个文件只具有可读的权限。这是一个默认的权限(也就是当我们新建一个文件或者目录时,这个文件或者目录的权限就是自动设置成这样的)。

可以通过命令“ls-l”或者“ll”命令来查看文件或者目录的权限,但是要注意不是所有的linux系统都支持“ll”命令的,但是centOS是肯定支持的。如果其他发行版的linux不支持“ll”命令的话那么就乖乖的用命令“ls-l”吧。“ls-l”是linux的标准命令,而“ll”是某些发行版的linux系统为了方便使用才加上去的。

4、对于“其他用户”只有一个执行权限的目录,用“其他用户”登录后只能进入这个目录或者进入这个目录更深层的目录,但是不能进行新建文件和删除文件的操作,甚至连命令“ls”都是不可以用的。如果想要访问这个对于“其他用户”只有执行权限的目录下面的具有可读属性的文件的话,必须要知道这个文件名才可以访问此文件(因为此时无法用ls命令列出文件来,所以你就看不见文件名列表)。一个目录具有执行权限表示这个目录可以用“cd”命令进入,如果一个目录具有可读权限那么就可以用“ls”命令列出文件或者目录来,如果一个目录同时具有可执行权限和可读权限说明这个目录可以进入并且可以列出目录列表来。

5、三种权限的分配:

【09 Linux文件权限及设置命令(下)】

1、由上图可知如果你想要给当前用户加上写权限就可以用命令“chmod u+w”,如果是给用户组加上写权限可以用命令“chmod g+w”,如果是给其他用户加上写权限可以用命令“chmod o+w”。但要注意我们可以给当前用户或者用户组或者其他用户这三者其中的任意一个同时加上或者去掉读、写、执行权限,但是我们并不可以在一条命令里同时把当前用户、用户组和其他用户这三个组加上或者去掉权限,比如这个命令“chmod u+rwx g+rwx o+rwx”是不可以的。增加权限用加号“+”,减去权限用减号“-”,比如去除当前目录中的文件“houndun”的当前用户的所有权限的命令是“chmod u-rwx houdun”。如果用数字表示法来设置权限的话就可以在一条命令里把当前用户、用户组和其他用户这三者同时加上或者去掉权限了。因为读、写、执行对应的权限分别用八进制的4、2、1来表示,而同时具有读、写、执行权限就等于是把4、2、1给加上,那么就等于7了,所以在一条命令里把当前目录中的文件“houdun”的当前用户、用户组和其他用户这三个组同时加上所有的权限的命令是“chmod 777 houdun”。现在又想把文件“houdun”的当前用户、用户组和其他用户这三个组的写权限同时去掉的话,就可以用命令“chmod 555 houdun”(因为写权限的数字表示是2,用7减去2剩下的就是4和1了,也就是剩下读权限和执行权限了)。当然用数字表示法也可以同时针对当前用户、用户组和其他用户这三者分别设置成不同的权限,比如命令“chmod 745 houdun”(表示当前用户设置成读、写、执行权限,用户组是读权限,其他用户是读和执行权限)。

2、如下图所示,第一个root代表用户,第二个root代表此root用户所属的用户组。如果我们是通过root用户创建的文件或者目录,那么此文件或者目录一定是属于root这个用户的(此文件或者目录的属主是root),也一定是属于root这个组的。

3、用命令“chown zhangsan:zhangsan test/”可以把目录“test”的属主和所属用户组改成zhangsan和zhangsan(因为在创建zhangsan这个账号时就默认的创建了一个用户组zhangsan了,而且把用户zhangsan隶属于用户组zhangsan里面去了)。比如一个目录的当前用户是读、写、执行权限而其他用户权限只有读的权限,而现在这个目录是属于root的,所以这个目录的当前用户就是root,所以root可以对这个目录具有所有权限,而其他用户(比如zhangsan)只对这个目录具有读的权限。而现在如果把这个目录的属主改成zhangsan,那么zhangsan这个用户就可以对这个目录具有读、写、执行的权限了,因为这个目录的当前用户变成zhangsan了,而root用户变成了这个目录的“其他用户”了。所以用命令“chown”通过改变文件或者目录的属主也就可以间接的改变用户对于这个目录或者文件的权限了。

4、特殊权限位:

SUID:就比如只有管理员才能执行的命令现在给它设置SUID权限,那么现在普通用户也可以执行这个命令了,而普通用户并不是用普通用户的身份执行的这个命令,而是借助管理员的用户执行的,当普通用户执行完这个命令后还会回到普通用户的状态的。

UGID:比如把一个目录的属主的用户组改成group,并且这个group组对于这个目录具有rwx的权限,并且这个目录的权限设置成SGID,然后新建两个账号test1和test2都加入到同一个用户组group里面去,这样就可以实现用test1创建的文件用test2用户登录也可以修改,用test2创建的文件用test1用户登录也可以修改了,如果不把这个目录的权限设置成SGID的话就不会有这个功能了(也就是用test1创建的文件用test2用户登录也可以修改,用test2创建的文件用test1用户登录也可以修改的功能)。当然特殊权限用的时候不是很多。

sticky-bit:就是一个设置了sticky-bit权限的目录下面的文件或者目录必须由此文件或者目录的属主来删除,其它的用户根本没有权限删除(即使其它用户对这个文件或者目录具有写权限)。

【10 Linux系统查找(上)】

1、本课学习目标:

2、windows里面进行查找文件的操作很方便,但是windows需要对整个硬盘分区进行扫描看看有没有匹配的文件,所以速度会很慢。而linux里面的查找方式和windows就有所不同了。

3、which只能查找在指定目录的可执行文件,对于不是可执行的文件which是查不到的。即使我们把一个文件的权限改成可执行的也是查不到的,因为which只能查找linux系统的环境变量设置的路径里面的文件(因为linux的可执行文件都存放到如下图所示的目录里面)。通过命令“env”可以查看当前的管理员账号的linux的环境变量的路径。

当然可以通过用命令“vim /root/.bash_profile”修改这个文件“.bash_profile” 来给这个环境变量增加内容,如下图中“$PATH”和“$HOME/bin”都是linux默认的环境变量,我们可以在它们的后面加上一个冒号然后添加上我们自己设定的环境变量路径。但是要注意刚给root用户添加好自己的环境变量后不会马上生效的(用命令“env”不会查到刚刚添加的环境变量路径),而是要用root用户重新登陆后才能使刚刚添加的环境变量生效的:

所以总结而言which是用来查找linux中可执行文件的(如果我们要查找可执行文件,比如命令什么的首先要选择which),which只能查找linux环境变量路径里面的文件,which是查找不了不在linux环境变量路径里面的文件的,which查找不了不可执行文件。所以which查找的速度是非常快的。

4、在linux安装软件的时候是要遵循严格的规矩的,比如软件的可执行文件必须安装在哪里,软件的配置文件必须安装在哪里,软件的帮助文件必须安装在哪里等等。而用命令“whereis”查找是不像“which”那样只能基于环境变量路径来查找的,“whereis”不但能够查找出和你输入文件名相同的可执行文件,也能够查找出和你输入文件名相同的配置文件、帮助文件等等。但是“whereis”有一个问题是:它只能查找自己的数据库里面的信息(当我们安装软件的时候相关的信息就会写到whereis相应的数据库里面了),所以它的速度也是相当快的。

5、命令“locate”可以把包含你要搜索的字母或者词的所有文件都显示出来,而不是必须要精确到你所输入的内容(指的是字符不能多也不能少),所以“locate”相当于模糊查找,比如你要搜索pass,那么“whereis”和“which”都会只找和pass名字一模一样的文件,而“locate”就会把比如“llpasse、passtedd、mlocapass”等文件都会列出来的。所以用“locate”查找出来的内容很多,这时我们可以把列出来的内容用输出重定向来重定向到一个文件里,这样方便我们以后查看,而不是列在屏幕上造成看起来很麻烦的结果。“locate”也是查找自己的数据库的。

6、总结一下:“which”只能查找程序的可执行文件,“whereis”不但能查找程序的可执行文件还能查找配置文件还有帮助文件等等,“locate”不但能查找程序的可执行文件、配置文件还有帮助文件等,还能模糊查找出好多其它的文件。在linux系统中用“which、whereis、locate”基本上已经能满足大多数人(70%)的需求了。

7、用“find”命令来查找就相当于windows里面的查找了,它是针对整个硬盘或者整个分区进行查找的,如果你的linux电脑是web服务器或者文件服务器那么数据量可能有几百GB,那么你要是用“find”查找一个文件是非常耗时耗力的。所以不推荐使用“find”进行查找,但是我们如果不是想要查找可执行文件,或者是安装软件时的一些文件,而是想要查找我们自己创建的文件就需要用到“find”了。

8、如果直接输入“find”的话,它会把你当前目录的所有文件、目录、甚至隐藏文件都给你列出来。

上图中“find /-mtime 0”表示查找24小时内修改过的文件(mtime代表修改过的文件),“find /-mtime 3”代表前三天的那一天(而不是指这三天)修改过的文件,“find /-mtime 100”代表前100天的那一天(而不是指这100天)修改过的文件。“find /-mtime +5”代表5天前所有被修改过的文件(这些被修改的文件不仅包括你自己修改的文件,也包括系统调用程序时修改过的文件)。“find /-mtime-5”代表5天以内所有被修改过的文件。上图中“-atime”代表被读取过的文件。上图中“find /-name passwd”代表要查找和passwd全匹配的文件(只是包含passwd字符的不算,必须要全字匹配才成),注意此时是区分大小写的(也就是passwd和Passwd是不同的),如果你不想要区分大小写就用命令“find /-iname passwd”。

上图中“find /-size +1000k”是表示在根目录下查找文件大小大于1000k的文件,“find /etc –name ‘*pass*’”表示etc目录下面的所有包括“pass”的文件名或者目录名的都给列出来,其中星号“*”代表通配符。

【12 Linux系统文本编辑器VI操作(上)】

1、windows里面的记事本和写字板都属于文本编辑器,linux系统中的文本编辑器也有很多,VI就是其中最优秀和使用最频繁的一种。文本编辑器和办公软件的不同之处在于:文本编辑器就是用来记录文字的,它的功能非常简单。而办公软件可以对于文字有更多的操作功能,比如对于文字的排版、美化等等,这些都是文本编辑器所不具备的。文本编辑器是基于ascii码的,所以运行起来特别快。但是如果想要进行更多的操作,比如插入图片,文本编辑器就爱莫能助了。

2、vi和vim都是文本编辑器,它们的内核是相同的,vim相当于是vi的升级版(vi的功能没有vim多)。但是要注意vi是可以编辑任何文本的,但是vim必须在你的linux系统中已经安装了后才能使用。在好多的linux发行版中默认的就安装了vi了,而且linux中许多的程序默认也是通过vi来进行编辑的,所以我们要很好的掌握vi。

3、各种文本编辑器的特点:

4、vi的三种状态模式:

需要掌握的vi技术:

5、用vi新建一个文本文件的命令是“vi houdunwang”(其中新建的文本文件的文件名是houdunwang)。如果想要保存这个文本文件那么在vi编辑器中输入“:w”就可以了。如果想从vi编辑器模式退出输入“:q”再回车就可以了,不过要注意如果你在一个新建的文本文件里面没有输入任何的内容也没有保存你就退出了的话,那么这个文件是不会被创建的(因为这个文件里面什么内容都没有,它只是在内存缓冲区存在过而已)。如果你把一个什么内容都没有输入的文本文件保存了,那么这个文件是会被创建的,不过这就是一个空白的文本文件了。比如你执行命令“vi houdunwang”,如果此时houdunwang这个文件在当前目录中不存在那么就会新建这个文件的,并且文件名是houdunwang,如果这个文件已经存在了那么vi就会打开这个文件的。如果想要在vi编辑器中保存并且退出vi编辑器的话就输入命令“:wq”(当然也可以先执行“:w”然后再执行“:q”)。用vi打开这个文件和用vim打开一个文件是一样的,不过如果你发现用vim不能打开一个文件的话那么你就乖乖的用vi打开吧(因为vi是linux集成好的一个编辑器,而vim不是,但是vim的功能要比vi多)。

6、vi普通模式的光标移动和翻页操作:

我们在vi中只能用键盘来进行操作,而不能像图形化界面似的用鼠标来进行复制粘贴等操作。

7、我们用vi新建或者打开一个文件时默认的模式就是普通模式,在普通模式中我们可以进行文本的复制和粘贴,光标的移动等等操作:

8、用命令“set nu”可以把vi编辑器中的行号显示出来。

9、如果要输入命令的话就需要在vi的命令模式下才可以,vi的插入模式其实就相当于对于文件内容的编辑模式,在插入模式中所有的字母和数字都可以正常的输入了,当然也可以进行文字的添加和删除或者修改了。Vi的普通模式中的每个字母或者每个数字都有它特定的含义(比如光标移动、上下翻页等等),在vi的普通模式中是输入不了内容的。其实普通模式基本上是在进行文字的查找,而插入模式是对文字进行编辑、删除的。普通模式可以直接转换到插入模式或者命令模式,而命令模式和插入模式是没有办法直接相互转换的,而是都需要先转换成普通模式然后再转换到插入模式或者命令模式。按“esc”键可以从插入模式或者命令模式转换到普通模式。【13 Linux系统文本编辑器VI操作(下)】

1、通过不同的方法进入插入模式:

2、下图所示表示在普通模式下进行的删除操作:

3、下图是撤销的操作:

4、复制与粘贴操作:

5、字符串查找、替换操作:

6、使用vi打开多个文件的命令是“vi file1 file2 file3”。

【14 Linux系统进程管理与作业控制】

1、程序是一组代码的集合,然后经过编译后就可以形成可执行程序。而程序在运行过程中才会产生进程,而一个程序可能产生一个进程也可能产生多个进程的(究竟产生几个进程要根据软件自身的编写情况而定),而当一个程序结束时它相应的一个或者多个进程也会动态的跟着结束的。程序员在设计程序时就会考虑到这个程序需要几个进程,每个进程的名字会不会和其它软件的进程名字相冲突等等这些要注意的事项。

2、下图是用命令“ps-ef”显示详细的进程信息的,其中UID指的是这个进程是基于那个用户的。PID指的是子进程号,PPID是父进程号(子进程是由父进程派生出来的)。

3、软件可以分为系统软件和应用软件,而应用软件又可以分为视频软件、办公软件、下载软件、安全软件等等,系统软件可以分为windows、linux、unix、mac等等。进程也是有很多种类的{

1、后台进程(守护进程):就是在系统启动时就跟着一起启动的,比如邮件服务进程sendmail,但是我们也可以对它进行操作,比如用命令“service sendmail stop”把它给停掉;

2、交互进程:也就是可以手动启动也可以设置成随着系统启动一起启动的进程。

4、比如我们写一个程序,这个程序的功能就是向屏幕输出一句话,那么当我们执行这个程序时就会产生一个进程,但是因为这个程序的作用只是输出一句话就结束了,那么这个程序相应的进程也就马上结束了(这个就是进程生命周期的体现),所以你用“ps”命令是查不出来这个进程的,如果想要查出来这个软件的进程的话就需要让这个程序总是在执行着才行。如果要结束一个进程我们可以用命令“killall”把进程给杀掉,不过我们在关闭软件的时候还是要通过正常的方法关掉而不要采用这种杀进程的方法关软件(不然软件可能会出现不能用或者数据丢失的现象的),除非当我们用正常的方法关闭软件时却发现这个软件相应的进程还存在,这时我们就可以用杀进程的方法把这个软件的进程给杀掉了。

5、命令“killall –u apache”的意思是把进程的用户是apache的所有进程都给杀掉。但是我们发现把apache的所有进程杀掉后过了10秒后刚才被杀掉的进程又重新出现了,但是杀之前的子进程号和杀之后的子进程号不同了,但是父进程号还是一样的,这是因为软件为了维持它自己的正常工作会自动派生出它自己的子进程的。如果想要彻底的杀掉apache这个进程就直接杀掉它的父进程,比如命令“kill 3957”就是直接把apache的父进程号找到然后杀掉了。如下图所示:

如果按照进程号杀进程的话建议用命令“kill 进程号”,如果是按照用户来杀进程的话建议用命令“killall 用户名”(用这种方法要注意它的父进程是否存在<因为如果光是杀了子进程而没有杀掉子进程的父进程的话,父进程还是会派生出新的子进程的>,因为杀掉子进程后父进程还是会派生出新的子进程的。有的软件是没有父进程和子进程一说的,也就不会存在父进程又会派生出新的子进程的概念了,所以用这种killall的方法就可以把一群进程都给杀掉)。

6、在一个进程执行时可以用“ctrl+z”来暂时的停止它。可以把一个进程放到前台来执行,这样屏幕会有显示,但也可能你就做不了其它的操作了。也可以把一个进程放到后台去执行,这样你在前台还可以做别的操作。有时比如我们想要执行的程序需要工作很长时间,如果这样我们就做不了别的操作了,这时我们就可以把这个进程放到后台去执行,然后我们就可以在前台做其它的操作了。用命令“jobs”可以查看我们自定义程序(也就是不包括系统服务进程、守护进程等等)的作业状态。用命令“fg”就是让程序在前台运行,用命令“bg”就是让程序在后台运行。一般我们最好让一个程序在后台执行,因为这样做这个程序有什么信息输出或者错误信息输出也不会显示在前台了,也就不会影响我们在前台进行别的操作了,不然的话我们就只能乖乖的等着这个程序执行完毕后才能进行别的操作了。

【15 Linux系统shell脚本编程

(一)】

1、本章学习目标:

2、什么是shell脚本:

shell是命令解释器的意思,也就是我们在终端(比如黑底白字的命令行窗口,或者我们用putty登录远程linux后的命令行窗口)输入的命令,shell负责帮我们传递给linux系统,然后linux系统执行完再把结果给shell,然后shell再传递给我们,所以shell是用户和linux之间的一个接口,我们如果想要和linux对话就只能通过shell了。

一般情况下我们写的如果不是太复杂的shell脚本的话都不会用到结构控制语句的。

3、shell脚本的建立与执行:

如果对一个shell脚本程序没有执行权限的话可以用“sh”的方式执行,如果用“./”方式是执行不了的,除非把这个程序的权限设置成可执行的。

4、shell脚本的编码规范:

注意“#!/bin/bash”是最好要加上的,因为加上linux就会用/bin/bash里面的shell了,不然可能用的不是/bin/bash里面的shell。如果linux默认的就是/bin/bash里面的shell可以不用加上这句,但是为了养成好习惯还是要加上的。【16 Linux系统shell脚本编程

(二)】

1、shell变量名一般情况下都是用小写的字符,如果用大写的字母会给人看起来不方便的:

2、注意如果想要shell做加减乘除的运算就需要严格遵守shell的语法规则,比如先定义变量a=20和b=30,如果想要输出a+b的值就要用命令echo $(($a+$b)),这个意思也就是把变量a和变量b的值相加后的值再赋给一个变量(也就是最外面的小括号就是这个被赋值的新变量,这个理解起来有点抽象),然后再通过echo命令把这个被赋值的变量的值给输出出来,也就是要用到两个小括号。

3、shell字符串操作:

【17 Linux系统shell脚本编程

(三)】

1、shell中的判断:

要注意的是判断文件是否有读、写、执行权限时,即使是把一个文件的读、写、执行权限都去掉的话,如果这个文件是root创建的,那么对于root用户来讲也是对这个文件具有读、写、执行权限的,而对于其它用户就不会有这种特殊情况了(比如如果是用zhangsan这个用户创建的文件,如果这个文件的读、写、执行权限都被去掉的话,那么zhangsan这个用户此时就对这个文件不具有任何权限了;这个和上面说的root用户的情况就不同了)。所以当用test判断当前用户对文件是否有权限的时候还要考虑到这个文件的属主问题。

上图中要注意中括号内(中括号的两边最边上)和变量或者常量间要有空格,“==”两边也要有空格,不然执行此命令时会报错的。

2、条件判断:

【18 Linux系统shell脚本编程

(四)】

1、多分支除了if形式还有case的形式,如下图所示read命令是读取用户从终端输入的值然后赋值到变量number中,case下面的1、2、3、*代表变量number的各种可能的值,如果满足就执行随后的语句。注意每个条件后面要有两个分号:

case多分支和if多分支在功能是一样的,只是语法形式不同,你想用哪个就用哪个。

2、我们在写一个shell程序后然后执行,但是如果报错了,比如报的是13行有错误,此时在检查shell程序时发现不一定是13行的错误,有可能是12行的错误,但是报错的时候报的却是13行的错误。

3、???我们在写shell程序时判断结构用的比较多,而循环和分支结构用的比较少。

【19 Linux系统shell脚本编程

(五)】

1、循环语句:

应注意的是上图中while后面如果是双小括号那么里面的比较符号可以用“<、<=、!=、>、>=”等等,可如果while后面的是中括号那么里面的比较符号必须用“-eq、-no、-gt、-qe、-lt、-le”代替“<、>、>=”了,还要注意如果是用中括号那么别忘了比较符号两边和中括号里面要加上空格进行隔开。为了标准化linux建议大家不论是分支结构还是循环结构都要使用中括号的方式,双小括号的方式一般是用来进行整数运算的。

在循环结构里面“大于、小于、大于等于、小于等于”用的比较多,而分支结构里面“等于”用的比较多,比如上图中如果“$i”和“5”之间的比较符号是等于的话那么这个循环结构根本就不会执行的。

2、如下图是until循环,它和while循环最不同的地方就是while是当条件满足时就执行循环体内的语句,而until是一直执行循环体内的语句直到条件满足时才结束。也就是while是条件满足时执行循环体,而until是条件不满足时执行循环体。

【20 Linux系统shell脚本编程

(六)】

1、for循环小例子:

For循环要用这种双小括号的形式而不用中括号的形式,因为for循环的双小括号里面涉及到了变量赋值,变量递增等操作,而while或者until条件里面只涉及到条件判断、条件比较等操作。

2、function其实就是一个分支程序,也就是把一个重复性的操作写成一个function,然后主程序需要时就直接调用这个function了,这样做的目的是为了避免每次写程序时都要写重复性的操作。如下图中,为了避免每次输出内容时都要写上“your input is”这句话,所以就把这句话写成了一个function(这个function的名字是print),然后主程序需要时就直接调用这个function了。下图中所示的程序写的不是很完美,但是能够表达出function的意思来:

【21 Linux系统yum安装软件(上)】

1、本章学习目的:

几乎所有的linux发行版都支持上图中的3种安装软件的方法。

2、yum是一个应用软件,如果只安装了linux内核是没有yum这个应用软件的,yum是集成到发行版linux系统中去的。

3、linux应用程序和命令的关系:

4、应用程序和第三方应用程序:

5、linux应用程序组成:

6、为什么使用yum:

Linux系统在用yum方式安装软件的时候必须是联网状态,如果不是联网状态那必须在本地配置一个软件池,这个软件池可以在你公司内部专门存放软件的服务器上,也可以在自己的电脑上,但是利用这种本地软件池的方法却很少用,因为本地存放软件不论是在容量、更新程度等等都比不上互联网上的软件。

因为centos的linux系统的软件仓库在centos的官方网站上,所以在国内下载安装软件时速度会比较慢。

【22 Linux系统yum安装软件(下)】

1、如下图所示画红色横线的文件就是配置linux软件仓库的。因为centos默认的是centos官网上的软件仓库,因为centos是国外的,所以国内下载软件时速度会很慢。而国内的很多网站也是支持开源的软件仓库的,比如网易、搜狐、教育网的,所以我们可以把yum的软件仓库改成国内的。

2、如果想要修改软件仓库的源的话,首先要把原先默认的配置软件仓库的文件备份一下,因为如果哪一天你可能还想使用默认的呢。首先我们可以把默认的配置软件仓库的源文件改名(因为改了名字yum在下载或者更新软件的时候就不会到这个文件里面去找软件仓库的配置文件了,因为不认识这个文件了),比如把源配置文件“CentOS-Base.repo” 改名成“CentOS-Base.repo.backup”,可以用命令“mv CentOS-Base.repo CentOS-Base.repo.backup”。然后去网易的开源软件网站“mirrors.163.com”,根据出现网页的centos后面的帮助文件操作。先把网易的软件仓库配置文件下载下来(网易的软件仓库配置文件应该是CentOS5-Base-163.repo),然后再进行更新缓存操作可以用命令“yum makecache”,然后在执行搜索软件或者下载软件时就是用的网易的软件仓库了。

篇4:C语言学习笔记6

1.循环控制

a)程序中常用到顺序结构和选择结构,但只有这两种结构是不够的,还需要用到循环结构(重复结构)

b)对于某些问题,通过原始的方法需要分别编写若干个相同或相似的语句或程序段进行处理,工作量大、程序冗长、重复、难以阅读和维护,因而C语言提供了循环控制来处理需要进行的重复操作

c)循环结构、顺序结构、选择结构是结构化程序设计的3种基本结构,它们是各种复杂程序的基本构成单元

2.用while语句实现循环

while语句的一般形式为:

while(表达式)语句

a)“语句”就是循环体,循环体只能是一个语句,可以是一个简单语句,也可以是复合语句。循环体如果包含一个以上的语句,应该用花括号括起来作为复合语句出现,否则while语句的范围只到while后面的第1个分号处

b)在循环体中应当有使循环趋向于结束的语句,如果无此语句,则循环条件始终不变,循环永远无法结束

c)执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,它也称为循环条件表达式

d)while语句的循环控制:当循环条件表达式为“真”(非0)时就立即执行循环体语句,当循环条件表达式为“假”(0)时就不再执行循环体语句

e)while语句的过程特点:先判断循环条件表达式,后执行循环体语句

3.用do…while语句实现循环

a)do „ while语句的一般形式 do 语句 while(表达式)a.1.为了使程序清晰、易读,建议把循环体用花括号括起来,以防看到第2行语句就误以为整个语句结束了

a.2.do „while语句的循环控制:先执行一次循环体语句,然后判断循环条件表达式,当循环条件表达式为“真”(非0)时返回再次执行循环体语句,如此反复,直到循环条件表达式的值为“假”(0)为止,此时本次循环结束

a.3.do „while语句的过程特点:先无条件执行循环体语句,再判断循环条件表达式

b)while语句与do „while语句的比较

b.1.对同一个问题,可以用while语句处理,也可以用do „while语句处理,while语句与do „while语句的结构可以互相转换

b.2.while语句可以一次也不执行循环体语句,而do „while语句至少执行一次循环体语句。因此当用while语句与do „while语句处理同一问题(循环体部分相同)时,若循环条件表达式的初始值为“真”(非0)时,则两种循环得到的结果相同,若循环条件表达式的初始值为“假”(0),则两种循环得到的结果不同

4.用for语句实现循环

a)for语句的一般形式

for(表达式1;表达式2;表达式3)语句

a.1.表达式1:设置初始条件,只执行一次,可以为0个、一个或多个变量设置初值。允许在表达式1中定义变量并赋初值,这样使程序简练、灵活方便,但所定义变量的有效范围只限于for循环中,在循环之外不能使用此变量

a.2.表达式2:是循环条件表达式,用来判定是否继续循环,在每次执行循环体之前先执行此表达式来决定是否继续执行循环体

a.3.表达式3:作为循环的调整使循环趋向于结束,例如使循环变量增值,它是在执行完循环体后才进行的

a.4.由上所述,for语句可以理解为:

for(循环变量赋初值;循环条件;循环变量增值)语句

b)关于for语句的一些说明 b.1.表达式1可以省略,即不设置初值,但表达式1后面的分号不能省略。由于for语句省略了表达式1,没有对循环变量赋初值,因而为了能正常执行循环,应当在for语句之前先给循环变量赋初值

b.2.表达式2可以省略,即不用表达式2来作为循环条件表达式,不设置和检查循环的条件。此时循环将无终止地进行下去,也就是认为表达式2始终为“真”(非0)

b.3.表达式3可以省略,但此时程序设计者应当另外设法保证循环能够正常结束,即使循环趋向于结束的操作不放在表达式3的位置,而是作为循环体的一部分,如果在循环体中没有这种语句,则循环体将无止境地执行下去

b.4.表达式1和表达式3可以都省略,只有表达式2,即只给定循环条件,但如c.1和c.3所述,应当在for语句之前先给循环变量赋初值,且在循环体中设置使循环趋向于结束的语句

b.5.表达式

1、表达式

2、表达式3可以都省略,即不设初值,不判断条件(此时认为表达式2始终为“真”),循环变量不增值,将无终止地执行循环体语句

b.6.可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样使程序短小简洁,但过分利用这一特点会使for语句显得杂乱、可读性降低,因而最好不要把与循环控制无关的内容放到for语句中。

表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量初值无关的其他表达式。

表达式3可以是与循环控制无关的任意表达式,for语句可以在表达式中完成本来应该在循环体内完成的操作,即for语句的循环体为空语句,把本来应该在循环体内处理的内容放到表达式3中,作用也是一样的

b.7.表达式1和表达式3可以是一个简单表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。在逗号表达式中按自左至右的顺序求解,整个逗号表达式的值为最右边的表达式的值

b.8.表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非0(“真”)就执行循环体

b.9.for语句可以与while语句互相转换,二者无条件等价 即for(表达式1;表达式2;表达式3)语句 可以改写为 表达式1;while(表达式2){ 语句 表达式3;} c)for语句的执行过程 c.1.求解表达式1 c.2.求解表达式2,若此条件表达式的值为“真”(非0)则执行for语句中的循环体,然后执行第b.3步,若此条件表达式的值为“假”(0)则结束循环,转到第b5步

c.3.求解表达式3 c.4.转回第b.2步继续执行

c.5.循环结束,执行for语句下面的一个语句

5.循环的嵌套

a)一个循环体内又包含另一个完整的循环结构,称为循环的嵌套 b)内嵌的循环中还可以嵌套循环,这就是多层循环

c)3种循环(while循环、do „while循环、for循环)可以互相嵌套

6.3种循环方式的比较

a)3种循环都可以用来处理同一问题,一般情况下(循环条件表达式的初始值为“真”)它们可以互相代替

b)在while循环和do „ while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋向于结束的语句。for循环可以在表达式3中包含使循环趋向于结束的操作,甚至可以将循环体中的操作全部放到表达式3中,因此for语句功能更强,凡是while循环能完成的,用for循环都能实现

c)用while和do „ while循环时,循环变量初始化的操作应当在while和do „ while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化

d)while循环、do „ while循环和for循环都可以用break语句跳出循环,用continue语句结束本次循环 7.改变循环执行的状态

一般情况下,都是根据事先指定的循环条件正常执行和终止循环,但当出现某种情况需要提早结束正在执行的循环操作时,可以用break语句和continue语句来实现提前结束循环

7.1.用break语句提前终止循环

a)break语句可以使流程跳出switch结构而继续执行switch语句下面的一个语句,还可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句,但break语句只能用于循环语句和switch语句而不能单独使用

b)break语句的一般形式为: break;c)执行break语句,流程跳转到循环体结束的花括号之外,即不再继续执行其余的几次循环而提前结束循环

7.2.用continue语句提前结束本次循环

a)有时不希望终止整个循环的操作,而只希望提前结束本次循环,而接着执行下一次循环,这时可以用continue语句

b)continue语句的一般形式为 continue;c)执行continue语句,流程跳转到循环体结束的花括号之前(不是花括号之外),即跳过循环体中continue语句下面尚未执行的语句而结束本次循环,然后接着执行后面的循环过程

7.3.break语句和continue语句的区别

a)continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环过程,不再判断循环条件是否成立

上一篇:十破十立学习心得体会下一篇:始得西山宴游记原文以及翻译