📄 c++基础教程 c++.htm
字号:
'C':cout<<"60--69\n"; break;<BR>case
'D':cout<<"<60\n"; break;<BR>default:cout<<"error\n";
break;<BR>}</P>
<P>可改写为:<BR>? 例:char
grade;<BR>if(grade=='A')cout<<"85--100\n";<BR>else
if(grade=='B')cout<<"70--84\n";<BR>else
if(grade=='C')cout<<"60--69\n"; <BR>else
if(grade=='D')cout<<"<60\n"; <BR>else
cout<<"error\n";</P>
<P><FONT color=#ff0000><A name=a33></A>3.3 循环结构</FONT><FONT
color=#ffffff><BR></FONT>3.3.1
for循环<BR>1.格式:for(表达式1;表达式2;表达式3)<BR> 循环体<BR>执行过程:
先计算表达式1;求解表达式2,若为0(false),则结束循环,执行循环语句的下一语句;若表达式2为1(true),执行循环体,然后求解表达式3;
转回第二步。直到表达式2为0退出循环。</P>
<P> 注意:如果循环体有一个以上的语句,应该用花括号{
}括起来。<BR><BR>例:计算并输出从1至100的和。<BR>//ch415.cpp<BR>#include<iostream.h><BR>void
main()<BR>{ int sum=0;<BR>for(int
i=1;i<=100;i++)<BR>sum+=i;<BR>cout<<“the sum of 1 to 100 is
:”<<sum;<BR>}<BR><BR>2.格式中表达式1(e1)、表达式(e2)、表达式3(e3)均可省略,但相应的分号不可省。</P>
<P>(1)e1可省。<BR> int i=1;<BR> for(;i<=100;i++)<BR> sum+=i;</P>
<P>(2)e2可省,此时e2为真,且在循环体中应有跳出循环的控制语句。<BR> <BR> for(int
i=1;;i++)//e2值为1<BR> {<BR> sum+=i;<BR> if(i>100)
break;<BR> }?<BR><BR>(3)e3可省, 此时应在循环体中应让循环变量递进变化。<BR> <BR> for(int
i=1;i<=100;)<BR>sum+=i++;</P>
<P>(4)e1、e3可同时省。<BR> <BR> int
i=1;<BR> for(;i<=100;)<BR>sum+=i++;</P>
<P>(5)e1、e2、e3可同时省。</P>
<P> int i=1;<BR> for(;;)<BR> {<BR> sum+=i++;<BR> if(i>100)
break;<BR>}<BR><BR>(6)e1、e2、e3可为任意表达式。
<BR><BR>for(sum=0;i<=100;i++)<BR>sum+=i;<BR>?<BR>for(sum=0,i=1;i<=100;i++)//e1为逗号表达式<BR>sum+=i;</P>
<P>for(i=0,j=100,k=0;i<=j;i++,j--)//e1,e3逗号表达式<BR>k+=i*j;<BR>?<BR>for(i=1;i<=100;sum+=i++);//循环体为空语句<BR><BR>for(i=1;
sum+=i++,i<=100;);//循环体为空语句</P>
<P>(7)e1可为循环变量定义。</P>
<P>for(int
i=1;i<=100;i++)<BR>sum+=i;<BR><BR>4.举例:<BR>例3.9<BR>例3.10<BR>例3.11</P>
<P>3.3.2 while循环<BR><BR>1.格式:while (条件表达式)<BR> 循环体<BR>2.
执行过程:当条件表达式成立(true),执行循环体,否则退出循环。<BR>3. 特点:先判断条件,再执行循环体。</P>
<P>例:计算1至100的和。<BR>#include<iostream.h><BR>void main()<BR>{
int sum=0;<BR>int i=1;<BR>while(i<=100)<BR>{ sum=sum+i;
//sum+=i;<BR>i++;<BR>}<BR>cout<<“The sum of 1 to 100
is:”<<sum;<BR>}<BR><BR>其中: while(i<=100)<BR> {<BR>
sum=sum+i; <BR> i++;<BR> }<BR>可改写为:</P>
<P>while(i<=100)<BR>sum+=i++;
//循环体<BR><BR>4.举例:<BR>例3.12<BR>例3.13<BR>例3.14</P>
<P>3.3.3 do…while循环<BR><BR>1.格式<BR> do<BR> 循环体<BR> while
(条件表达式);<BR>2. 执行过程:当条件表达式成立(true),执行循环体,否则退出循环。</P>
<P>3. 特点:先执行循环体,再判断条件。 <BR>例:#include<iostream.h><BR>viod
main()<BR>{ int
i=1,sum0;<BR>do{<BR>sum+=i;<BR>i=i+1;<BR>}while(I<=100);<BR>cout<<“sum=”<<sum<<endl;<BR>}<BR><BR><BR>4.
举例<BR>例:3.15</P>
<P>3.3.4
循环结构的特殊控制:break语句和continue语句。<BR>1.break语句<BR>功能:用在switch语句中,使流程跳出switch语句。用在循环体中,使流程跳出最近的封闭循环体。</P>
<P>2.continue语句<BR>功能:结束本次循环,接着进行下一次是否执行循环的判定。
<BR>3.二者区别<BR>break跳出循环体,不再判定条件。<BR>continue结束本次循环,再判定条件。<BR><BR>例:把100至200之间的不能被3整除的数输出。<BR>for(int
n=100;n<=200;n++)<BR>{<BR> if(n%3==0)
continue;<BR> cout<<n<<endl;<BR> //……<BR> }</P>
<P>以上程序段等价于<BR>for(int n=100;n<=200;n++)<BR> {<BR> if(n%3==0)
<BR> {<BR>
cout<<n<<endl;<BR> //……<BR> }<BR> }<BR>注意:break语句和continue语句的区别。
第三章 C++程序的流程控制<BR><FONT color=#ffffff><FONT color=#ff0000><A
name=a34></A>3.4 其他流程控制</FONT><BR></FONT>3.4.1
goto语句<BR>功能:将程序的执行转移到标识符所标识的语句处。<BR>例:i=1;sum=0;<BR>loop:<BR>sum+=i++;<BR>if(i<=100)
goto loop;<BR>cout<<"sum is"<<sum<<endl;</P>
<P><BR>例: for(int i=1;i<10;i++)<BR>for(int
j=1;j<10;j++)<BR>if(i*j==50) goto
end;<BR>end:<BR>cout<<i<<"*"<<j<<"50\n";<BR>?<BR>3.4.2
return语句<BR><BR>格式1:return 表达式;<BR>格式2:return;<BR></P>
<P align=left> </P>
<P align=center><FONT color=#ffffff><B><FONT color=#00ff00 size=5><A
name=a4></A>第四章 程序结构</FONT></B></FONT></P>
<P align=left><FONT color=#ffffff><BR><FONT color=#ff0000>第一部分
本章知识点</FONT><BR></FONT>外部存储类型extern<BR>静态存储类型static<BR>标识符的作用域<BR>标识符的可见性与生命期<BR>头文件与多文件结构<BR>编译预处理<BR><FONT
color=#ffffff><FONT color=#ff0033>第二部分
内容精讲</FONT><BR></FONT>要编好C十十程序,就必须对C十十的程序结构有一个全面的了解。所有的C十十程序都是由一个或多个函数构成的。一个C十十程序可以由一个或多个包含若干函数定义的源文件组成。C十十的编译器和连接器把构成一个程序的若干源文件有机地联络在一起,最终产生可执行程序。<BR><FONT
color=#ffffff><FONT color=#ff0000><A
name=a41></A>4.1、外部存储类型</FONT><BR></FONT>构成一个程序的多个源文件之间,通过声明数据或函数为外部的(extern)来进行沟通。<BR>格式1:extern
数据类型 变量名; //声明数据为外部的<BR>格式2:extern 类型 函数名(参数)
//声明函数是外部的<BR>说明:<BR>(1) 带extern的变量说明是变量声明,不是变量定义。<BR>(2)
所有函数声明一般都放在源文件的开始位置。<BR>(3)
默认的函数声明或定义总是extern的。<BR>例如:下面两个文件构成了一个程序,该程序由一个工程文件ch6.prj定义,工程文件和源文件中的内容分别为:<BR>//ch6.prj<BR>ch6_1.cpp<BR>ch6_2.cpp<BR>//ch6_1.cpp<BR>#
include <iostream.h><BR>void fn1();<BR>void fn2();
//默认的函数声明或定义总是extern的。<BR>int n;<BR>void
main()<BR>{<BR>n=3;<BR>fn1();
//fn1()函数的定义在本文件中<BR>cout<<n<<endl;<BR>}<BR>void
fn1()<BR>{<BR>fn2();
//fn2()函数的定义不在本文件中,在下面的ch6_2.cpp中。<BR>}<BR>//ch6_2.cpp<BR>extern int
n; //n由另一个源文件(ch6_1.cpp)定义。<BR>Void fn2() //
fn2()函数在另一个源文件(ch6_1.cpp)中使用。<BR>{<BR>n=8;
//此处使用n,n已声明是外部的。<BR>}<BR>注意:如果共同的变量一次都没有定义,或在各个文件中分别定义,造成定义多次,或声明的类型不一致,都会造成直接或间接的错误。<BR>例如:
//file1.cpp<BR>int a=5 ;<BR>int b=6;<BR>extern int
c;<BR>//file2.cpp<BR>int a; // error:多次定义<BR>extern double b;
//error:类型不一致<BR>extern int c; //error:无定义<BR><FONT
color=#ffffff><FONT color=#ff0000><A
name=a42></A>4.2、静态存储类型</FONT><BR></FONT>1、 静态全局变量(又称全局静态变量):<BR>(1)
静态全局变量的定义:在全局变量前加一个static,使该变量只在这个源文件中可用。<BR>(2)全局变量与全局静态变量的区别:<BR>(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。<BR>(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。
<BR>(3)静态全局变量的作用:<BR>(a) 不必担心其它源文件使用相同变量名,彼此相互独立。<BR>(b)
在某源文件中定义的静态全局变量不能被其他源文件使用或修改。<BR>例如:一个程序由两个源文件组成,其中在一个源文件中定义了"int
n;",在另一个源文件中定义了"static int
n;"则程序给它们分别分配了不同的空间,两个值互不干扰。<BR>例如:下面在file1.cpp中声明全局变量n,在file2.cpp中定义全局静态变量n。文件file1.cpp和file2.cpp单独编译都能通过,但连接时,file1.cpp中的变量n找不到定义,产生连接错误。<BR>//
file1.cpp<BR># include <iostream.h><BR>void fn()<BR>extern int
n;<BR>void
main()<BR>{<BR>n=20;<BR>cout<<n<<endl;<BR>fn();<BR>}<BR>//
file2.cpp<BR># include <iostream.h><BR>static int n; //
默认初始化为0,注意此处定义的n 只能在file2.cpp中使用。<BR>void
fn()<BR>{<BR>n++;<BR>cout<<n<<endl;<BR>}<BR>2、
静态函数:使某个函数只在一个源文件中有效,不能被其他源文件所用。<BR>定义:在函数前面加上static。<BR>说明:函数的声明和定义默认情况下在整个程序中是extern的。<BR>静态函数的效果:<BR>(1)它允其他源文件建立并使用同名的函数,而不相互冲突。
<BR>(2) 声明为静态的函数不能被其他源文件所调用,因为它的名字不能得到。<BR><FONT color=#ffffff><FONT
color=#ff0000><A
name=a43></A>4.3、作用域:(从出现的位置看)</FONT><BR></FONT>作用域是标识符在程序中有效的范围,标识符的引入与声明有关,作用域开始于标识符的声明处。<BR>C++的作用域范围分为:局部作用域(块作用域),函数作用域,函数原型作用域,文件作用域和类作用域。<BR>1、
局部作用域(块作用域):当标识符的声明出现在一对花括号所括起来的一段程序(块:复合语句)内时,该标识符的作用域从声明点开始,到块结束处为止,该作用域的范围具有局部性。<BR>例如:下面的代码描述了局部作用域:<BR>#
include <iostream.h><BR>void fn ( int y ) //
y的作用域从此开始<BR>{<BR>int x=1; // x的作用域从此开始</P>
<P>if (x>y)<BR>cout << x << endl;<BR>else<BR>cout
<< y <<endl;<BR>//...<BR>} // x和y的作用域到此结束<BR>例如:<BR>#
include <iostream.h><BR>void fn()<BR>{<BR>if(int i =5)
//i的作用域从此开始<BR>i =2* i;<BR>Else<BR>i
=100;<BR>//i的作用域到此结束<BR>cout<< i <<endl; //error:
i无定义<BR>}<BR>2、 函数作用域<BR>3、
函数原型作用域:是C++程序中最小的作用域,是指在函数原型声明时形式参数的作用范围(开始于函数原型声明的左括号,结束于函数原型的右括号)。
<BR>说明:对于这种情况,形参可以省略,声明中加上形参目的是提高程序的可读性。<BR>4、
文件作用域:在所有函数定义之外说明的,其作用域开始于声明点,结束于文件尾。<BR>说明:<BR>(a)静态全局变量和全局变量是文件作用域的,静态函数是文件作用域的。<BR>(b)在头文件的文件作用域中所进行的声明,若该头文件被一个源文件嵌入,则声明的作用域扩展到该文件中,直到源文件结束。<BR><FONT
color=#ffffff><FONT color=#ff0000><A
name=a44></A>4.4、可见性(从标识符引用时是否可见的角度看)</FONT><BR></FONT>程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。<BR>可见性的一般规则是:
<BR>1、 标识符要声明在前,引用在后。<BR>2、 在同一作用域中,不能声明同名的标识符。<BR>3、
对于在不同的作用域声明的标识符,遵循的原则是:当存在两个或多个声明具有包含关系的作用域时,在外层声明了标识符后,如果内层中没有声明与之同名的标识符,则外层标识符在内层可见。如果内层中声明了与外层同名的标识符,则外层标识符在内层不可见。<BR>4、
如果被隐藏的是全局变量,则可用符号 :: 来引用该全局变量。<BR>例1、
下面的代码进一步说明可见性与作用域的关系。<BR>{<BR>int i ;<BR>char ch;<BR>i
=3;<BR>{<BR>double i;<BR>i =3.0e3; // int i 被隐藏,double
i可用。<BR>Ch='A'; //char ch 仍可见<BR>} //double I 的作用域结束,恢复int i
可见。<BR>i + = 1; //int i 可见。<BR>} //int i,char ch作用域结束。<BR>例2、
下面的代码定义了同名的全局变量和局部变量,但仍可在局部作用域中访问全局变量:<BR>int s=0;<BR>void
f()<BR>{<BR>float s=3.0;<BR>int a;<BR>{<BR>float a=2.0;<BR>::a=1;
//error:没有全局变量a<BR>::s=1; //ok全局变量s<BR>s=2.0; //ok指float
s<BR>}<BR>}<BR>作用域和可见性的关系:作用域讨论的是标识符的有效范围,可见性是标识符是否可以引用的问题,二者是相互联系又存在着相当差异的。
<BR><FONT color=#ffffff><FONT color=#ff0000><A
name=a45></A>4.5、生命期(从存储位置角度看)</FONT><BR></FONT>生命期也叫生存期。生命期与存储区域密切相关,存储区域主要有代码区、数据区、栈区和堆区,对应的生命期为静态生命期、局部生命期和动态生命期。<BR>1、
静态生命期:变量在固定的数据区中分配空间的,具有静态生命期。包括全局变量、静态全局变量、静态局部变量。具有文件作用域的变量具有静态生命期。这种生命期与程序的运行相同,只要程序一开始运行,这种生命期的变量就存在,当程序结束时,其生命期就结束。<BR>说明:<BR>(1)
静态生命期的变量,若无显式初始化,则自动初始化为0。<BR>(2)
函数驻在代码区,也具有静态生命期。在函数内?梢陨
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -