C++就要这样学2--最简单的C++程序1.2

我是K,我致力于网络安全。

在上一篇博客当中,我们已经基本介绍了C++。那今天,我们继续学习C++的知识。

第一个C++程序

为了是大家了解什么是C++程序,下面就先介绍几个简单的C++程序。

例1:输出一行字符:“Hello World.”

#include 
using namespace std;
int main()
{
    cout<<"Hello World."<

运行结果:Hello World

程序分析:先看程序中的第三行,其中用main代表“主函数”的名字。每一个C++程序都必须有一main函数。main前面的int的作用是声明函数的类型为整型(标准C++规定main函数必须声明为int型,即此主函数返回一个整型的函数值)。程序的第六行(return 0;)的作用是想操作系统返回一个零值。如果程序不能正常执行,则会自动向操作系统返回一个非零值,一般为-1.

函数体是由大括号{}括起来的。本例中主函数内有一个以cout开头的语句。cout是由c和out两个单词组成,顾名思义,它是C++用于输出的语句。cout实际上是C++系统定义的对象名,称为输出流对象。关于对象和输出流对象的概念将在第八部分和第十三部分中进行详细讲解。在没有学习对象和输出流对象以前,为了便于理解和使用,我们把用”cout”和“<<”实现输出的语句简称为cout语句。“<<”是“插入运算符”,与cout配合使用,在本例中它的作用是将运算符“<<”右侧双撇号内的字符串“Hello World”插入到输出的队列cout中(输出的队列也称为“输出流”),C++系统将输出流cout的内容输出到系统指定的设备(一般为显示器中)中,注意C++所有的语句最后都应当有一个分号。

在看程序的第一行“#include ”,这不是C++语句,而是C++的一个预定义指令(以后第四部分会详细介绍),它以“#”开头以与C++语句相区别,行的末尾没有分号。“#include ”是一个“包含指令”,它的作用是将文件“iostream”的内容包含到该命令所在的程序文件中,代替该指令。文件iostream的作用是向程序提供输入或输出时所需要的一些信息。iostream是i-o-stream3个词的组合,从它的形式就可以知道它代表“输入输出流”的意思,由于这类文件都放在程序单元的开头,所以称为“头文件”(header file)。在程序进行编译时,先对所有的预处理命令进行处理,将头文件的具体内容代替#include指令,然后再对该程序单元进行整体编译。

程序的第二行“using namespace std;”的意思是“使用命名空间std”.。C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库(此时需要用#include指令),就需要用“using namespace std;”作声明,表示要用到命名空间std中的内容。

初学C++时,对本程序中的1,2行可以不必追究,只需知道:如果程序有输入或输出时,必须使用“#include ”指令以提供必要的信息,同时要用“using namespace std;”使程序能够使用这些信息,否则程序编译时将出错。大家以后将会看到,在以后的程序中几乎都在开头包含此两行。请大家先接受这个现实,在写C++程序时如法炮制,在程序的开头包含此两行,在以后的学习中将会逐步加深理解。

例2:求a和b两个数之和。

//求两数之和                           (本行是注释行)
#include                     //预处理指令
using namespace std;                   //使用命名空间std
int main()                             //主函数首部
{                                      //函数体开始
   int a,b,sum;                        //定义变量
   cin>>a>>b;                          //输入变量a和b的值
   sum=a+b;                            //赋值语句
   cout<<"a+b="<

程序分析:

本程序的作用是求两个整数a和b之和sum。第1行“//求两数之和”是一个注释行,C++规定在一行中如果出现“//”,则从它开始到本行末尾之间的全部内容都作为注释。注释只是给人看的,而不是让计算机操作的。注释是源程序的一部分,在输出源程序清单时全部注释按原样输出,以便看程序者更好地理解程序。但是在对程序编译时将忽略注释部分,这部分内容不转换成目标代码,因此对运行不起作用。注释可以加在程序中任何行的右侧。为便大家理解,在博客中用汉字表示注释,当然也可以用英语或汉语拼音作注释。

在一个可供实际应用的程序中,为了提高程序的可读性,常常在程序中加了许多注释行,在有的程序中,注释行可能只占程序篇幅的三分之一。在博客当中为了节省篇幅,不写太多的独立的注释行,而只在语句的右侧用“//”作简短的注释。

第6行是声明部分,定义变量a,b和sum为整型(int)变量。第7行是输入语句,cin是c和in两单词的组合,与cout类似,cin是C++系统定义的输入流对象。“>>”是“提取运算符”,与cin配合使用,其作用是从输入设备中(如键盘)提取数据送到数据流cin中,我们把用cin和“>>”实现输入的语句简称为cin语句。在执行程序中的cin语句时,从键盘输入的第1个数据赋值给整型变量a,输入的第2个数据赋值给整型变量b。第8行将a+b的值赋给整型变量sum。第9行先输出字符串“a+b=”,然后输出变量sum的值,cout语句中的endl是C++输出时的控制符,作用是换行(endl是end line的缩写,表示本行结束)。因此在输出变量sum的值之后换行。

运行结果:

输入:123     456

输出:a+b=579

大家可能注意到本程序的第6-10行的末尾都有一个分号,因为它们都是C++语句。

例3:输入两个数x和y,求两数中的大者。

本例中将包含两个函数。

#include                //预处理指令
using namespace std;              
int max(int x,int y)              //定义max函数,函数值为整型,形式参数x,y为整型
{                                 //max函数体开始
   int z;                         //声明变量,定义本函数中用到的变量z为整型
   if(x>y) z=x;                   //if语句,如果x>y,则将x的值赋给z
      else z=y;                   //否则,将y的值赋给z
   return (z);                    //将z的值返回结束,通过max带回调用处
}
      
int main()                        //主函数
{                                 //主函数体开始
   int a,b,m;                     //声明变量
   cin>>a>>b;                     //输入变量a和b的值
   m=max(a,b);                    //调用max函数,将得到的值赋给m
   cout<<"max="<

本程序包含两个函数:主函数main和被调用的函数max。程序中第3-9行是max函数,它的作用是将x和y中的较大者的值赋给变量z。return语句将z的值返回给主调函数main。返回值是通过函数名max带回到main函数的调用处。主函数中cin语句的作用时输入a和b的值。main函数中第5行为调用max函数,在调用时将实际参数a和b的值分别传送给max函数中的形式参数x和y,经过执行max函数得到一个返回值(即max函数中变量z的值),把这个值赋给变量m。然后通过cout语句输出m的值。

运行结果:

输入:18     25

输出:max=25

注意输入的两个数间用一个或多个空格间隔,不能以逗号或其他符号间隔。如:

输入:18,25 或 18;25

是错误的,它不能正确输入第2个变量的值,使第2个变量有不可预见的值。

在上面的程序中,max出现在main函数中调用max函数时,编译系统能识别max是已定义的函数名。如果把两个函数的位置对换一下,即先写main函数,后写max函数,这时在编译main函数遇到max时,编译系统无法知道max代表什么含义,因而无法编译,按出错处理。

为了解决这个问题,在主函数中需要对被调用函数作出声明。对上面的程序进行改写。

#include 
using namespace std;
int main()
{
   int max(int x,int y);
   int a,b,c;
   cin>>a>>b;
   c=max(a,b);
   cout<<"max="<y) z=x;
   else z=y;
   return (z);
}

程序分析:

程序第4行就是对max函数作声明,它的作用是通知C++编译系统:max是一个函数,函数值是整型,函数有两个参数,都是整型。这样,在编译程序到第7行时,编译系统会知道max是已声明的函数,系统就会根据函数声明时给定的信息对函数调用的合法性进行检查,如果二者不匹配(例如参数的个数或参数的类型与声明时所指定的不符),编译就会出错。

细心的小伙伴可能会发现程序第4行的函数声明与程序第11行max函数的第1行(称为函数首部)基本相同。很容易写出函数声明,只要在被调用函数首部的末尾加一个分号,就成为对该函数的函数声明语句。函数声明的位置应当在函数调用之前(不能把程序第4行的内容放在第7行“c=max(a,b);”之后)。

本例用到了函数调用,实际参数和形式参数等概念,这里只做了很简单的解释。大家如对此不太理解,可以暂时不予追究,在学到第4部分时,问题自然迎刃而解。在此介绍此例子,目的是使大家对C++函数的形式和使用有一个初步的了解。

接下来我们将举一个包括类(class)和对象(object)的C++程序,目的是使大家初步了解C++是怎样体现面向对象程序设计方法的。由于还未系统的介绍面向对象程序设计的概念,大家可能对程序理解不深,现在只需有一个初步印象即可,在第8部分会详细介绍的。

例4:包含类的C++程序

#include 
using namespace std;
class Student
{ private:
     int num;
     int score;
  pubilc:
     void setdata()
     { cin>>num;
       cin>>score;
     }
     void display()
     { cout<<"num="<表1.1 引用对象的成员

对象名 num(学号) score(成绩) setdata函数 display函数
stud1 stud1.num(如1001) stud1.num(如98.5) stud1.setdata() stud1.display()
stud2 stud2.num(如1002) stud2.num(如76.5) stud2.setdata() stud2.display()

其中,“.”是一个“成员运算符”,把对象和成员连接起来。stud1.setdata()表示调用对象stud1的setdata成员函数,在执行此函数中的cin语句时,从键盘输入的值(假设为1001和98.5)送给stud1对象的num和score,作为学生1(stud1)的学号和成绩。stud2.setdata()表示调用对象stud2中的setdata成员函数,在执行此函数中的cin语句时,从键盘输入的值(假设1002号和76.5)送给stud2对象num和score,作为学生2(stud2)学号和成绩。

程序中主函数中第1个语句用来输入学生1的学号和成绩。第2个语句用来输入学生2的学号和成绩。第3个语句用来输出学生1的学号和成绩。第4个语句用来输出学生2的学号和成绩

运行结果:

输入:1001     98.5

           1002     76.5

输出:num=1001

           score=98.5

           num=1002

           score=76.5

如果对以上的说明不甚理解,没有关系,将在第八部分中详细介绍。

通过这个例子,大家可以初步了解包含类的C++程序的形势和含义。

说明:以上几个程序时按照ANSI C++规定的语法编写的。由于C++是从C语言发展而来的,为了与C兼容,C++保留了C语言中的一些规定。其中之一是头文件的形式,在C语言中头文件用.h作为后缀,如stdio.h,math.h,string.h等。在C++发展初期,为了和C语言兼容,许多C++编译系统保留头文件以.h为后缀的用法,如iostream.h,但后来ANSI C++建议头文件不带后缀.h。近年推出的C++编译系统新版本采用了C++的新方法,提供了一批不带后缀名的头文件,如用iostream,string,cmath等作为头文件名。但为了使原来编写的C++程序能够运行,仍允许使用原有的后缀名.h的头文件,即二者同时并存,由用户选用。

例如:

#include 

可以改写成

#include 

由于C语言无“命名空间”,因此使用带后缀.h的头文件时不必用“using namespace std;”作声明。

有了以上的基础,在以后的章节中将由简到繁、由易到难、循序渐进地介绍C++编程。

King

你可能感兴趣的:(C++学习,c++)