程序语句认识初步

来源:互联网 发布:国产垃圾 知乎 编辑:程序博客网 时间:2024/06/03 15:14

声明:文中内容收集自《C++程序设计(第3版)》本文仅作学习交流使用。

一、何为程序?简单讲就是:程序=数据结构+算法;由此看来程序包含两方面:
1、对数据的描述;在程序中要指定数据的类型和数据的组织形式,即数据结构;
2、对操作的描述,即算法;
一句话,好的程序就是好的数据结构+好的算法。

二、程序结构和语句。
1、每个程序单位由 {(1)预处理语句 (2)全局声明 (3)函数} 组成

#include <iostream>        //预处理指令#include <cmath>            using namespace std;       //在函数外的全局声明int main(){    float a,b, c;          //函数内的声明    cin >>a>>b;    c=sqrt (a*a + b*b);    cout << c << endl;    system("pause");    return 0;}

2、执行语句包括:
(1)控制语句。C++有9种,常用有:
a、if()~else~
b、for()~
c、while()~
d、switch
e、return
注: ()表示其中包括一个判断语句,~表示内嵌语句。
(2)函数和流对象调用语句。

sort(x,y,z);   cout<<x<<endl;  //流对象调用语句

(3)表达式语句。格式:变量=确定的值或表达式

a*a=b*b+c*c   //错误的写法

3、赋值操作,对一个变量的赋值是通过运算符“=”来实现的。

a=b=c=e  //此种赋值要从右到左看,即e赋值给c,依次类推

注意“=”与“==”的区别,下面我们通过一段代码来感受下

#include <iostream>using namespace std;int main(){    long fac(int);    int i;    long a, sum = 0;    for (i = 1; i <= 20; ++i)    {        a = fac(i);        sum = sum + a;    }    cout << sum << endl;    system("pause");    return 0;}long fac(int n){    long c;    if (n = 1) c = 1;    else c = fac(n - 1)*n;    return c;}

该段代码是用于求1!+2!+…+20! ,我们可以运行下试试,结果是错误的,那么到底是什么问题呢?读者们可以去探索调试下。^_^
4、输入与输出
(1)第一课的时候,我们就已经提及到了cin和cout,要说明的是它们并不是C++的正式组成成分,所以才需要 #include <iostream> // iostream代表输入输出流,只有引入才能进行后续的cin和cout
(2)在输入输出中使用控制符;需要注意的是,如果使用了控制符,在程序开头处要同时加<iostream><iomanip> 头文件 ,详细资料可到《C++程序设计(第3版)》 P50 查看。
5、用getchar和putchar函数进行字符的输入和输出(注意,它们只输出一个字符)
(1)、getchar没有参数,其一般形式为: getchar()
(2)、运用getchar可以得到字符是ASCII码

#include <iostream>using namespace std;int main(){    cout << getchar()<<endl;    return 0;}   

输入A可得到65
下面的代码,读者可以输入试试,会有意想不到的结果<_>

#include <iostream>using namespace std;int main(){   getchar();    cout << getchar()<<endl;    return 0;}   

6、关系运算与关系表达式
C++关系运算符有:

(1)<(2)<=(3)>(4)>=(5)==      //(5)(6)优先级相同且低于上面四个(6)!=

关系表达式一般形式为:表达式 关系运算符 表达式
7、(1)逻辑常量和逻辑变量(又称布尔常量与变量)

bool found,flag=false;      //定义逻辑变量found和flag   found=true;                 //将逻辑常量true赋予逻辑变量found  

(2)逻辑运算与逻辑表达式
C++提供三种逻辑运算符:

&&   与(and)||   或(or)!   非(not

优先级:!>&&>|| 即!为最高,在此我们可以总结出一张运算符级序表:

   !             (高)算术运算符         关系运算符         &&和||            赋值运算符         (低)//由上到下递减

接下来我给读者留下一个运用逻辑表达式来判断是否为闰年的作业;闰年的条件是符合下面二者之一:a、能被4整除,但不能被100整除;b、能被100整除,但不能被400整除。例如2004是闰年。

三、认识if、switch以及循环语句
1、(1)if语句的一般形式:

if(语句) 语句1[else 语句2]     //方括号中的内容是可选的,也可以没有

如果需要还可以增加else if语句,例如:

if (a > 10) cost = 0.8;else if (a > 5) cost = 0.4;else cost = 0;

在if和else后面可以有多个语句,此时应用{} 将其括起来成为一个复合语句,eg:

if(a+b>c&&a+c>b&&b+c>a){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));   //海伦公式cout<<area;}else cout<<"wrong";

上面的代码是用海伦公式求三角形面积的一段,至于完整的代码,有兴趣的同学可以去摸索下。
(2)if的嵌套

if()   if() 语句1   else 语句2else   if() 语句3   else 语句4

注意if与else的配对关系,else总是与它上面最近、且未配对的if配对。如果if与else的数目不一样,可以加 {} 来确定配对关系。
2、条件运算符与条件表达式。 条件表达式:a>b?a:b;
例如大小写字母的转换:

#include <iostream>using namespace std;int main(){   char ch;  cin>>ch;  ch=(ch>='A'&&ch<='Z')?(ch+32):ch;  cout<<ch<<endl;  return 0; }

3、多分支选择结构switch语句我们用学生成绩分类来学习下:

switch (grade)    {    case'A':cout << "85-100\n";    case'B':cout << "70-84\n";    default:cout << "wrong";    }    //每个case表达式必须互不相同,否则就会自相矛盾

可以看到switch语句的一般形式,需要注意的是case常量表达式:语句 代码中的‘A’是grade找寻的对象,如果匹配就会执行语句(case常量表达式只是起语句标号作用,并不是在该处进行条件判断),当然如果按照上面代码将‘A’赋予grade,输出的结果是85-100 70-84 wrong 为什么会这样?因为在执行switch语句时,根据switch表达式的值找到与之匹配的case子句,就从此case子句开始执行下去,不再进行判断。只需在子句后面添加break就可以解决。
&多个case可以共用一组执行语句;例如:

switch (grade)    {    case'A':    case'B':    case'C':cout << "60-100\n"; break;    default:cout << "wrong";    }

对于switch语句的运用可以参考本书P68的运输计费习题。
4、循环语句
(1)while循环:while(表达式) 语句
下面是1+…+100的求和代码

#include <iostream>using namespace std;int main(){int i=1,sum=0;  while(i<=100)    {sum=sum+i;   i++;           //趋向于结束的语句,无此类型的语句,循环永不结束   }   cout<<"sum"<<sum;   return 0;}

(2)do-while语句:

do   语句while(表达式);   

其特点是先执行循环体(即do中的语句),再执行表达式的值是否为真。其本质与while语句无区别。

#include <iostream>using namespace std;int main(){int i=1,sum=0;  do   {sum=sum+i;   i++;             }  while(i<=100)  cout<<"sum"<<sum;  return 0;}

(3)for循环语句:for(表达式1;表达式2;表达式3) 语句
eg:for(i=0;i<=100;i++) sum=sum+i; 注意是分号
for语句中,表达式1和表达式3都可以省略,但要在其他地方补充。
(4)最后,我们用多个for循环的嵌套使用顺序 来结束本课。题目要求做出下图效果:

00000000010001000011.....   //此处省略好多行#_#11111

通过观察我们可以知道它是二进制的不断叠加,表面看起来很复杂,但其实很简单,只需5个for的嵌套就可以轻松解决,不废话,直接上代码。

for (a = 0; a < 2; a++)                       //1        for (b = 0; b < 2; b++)               //2             for (c = 0; c < 2; c++)           //3                for (d = 0; d < 2; d++)       //4                    for (e = 0; e< 2; e++)    //5cout << a << b << c << d << e<< '\n' << endl;

上面所应用的就是多个for循环的嵌套使用,它的运行过程是这样的:
a、先执行1,判断a<2是否为真,显然为真,然后直接跳过a++来到2;
b、重复1的过程,依次跳转到5,显然e<2也为真,输出00000;
c、循环还没有结束,继续执行5,e变成1,依旧小于2,输出00001;
d、继续执行5,此时e变成2,显然不满足e<2,所以就返回4;
e、在4中,此时d=1,满足d<2,跳转到5,5中的e就要重新从0开始进行运算,所以就输出00010;
f、依次类推,由内到外,一层一层判断运算。

以上便是本节课的全部内容,有不当的地方还望雅正^_^

2 0
原创粉丝点击