我跟爸爸学编程:从Python到C++
上QQ阅读APP看书,第一时间看更新

第1章 Hello World

本章,我们将从最简单的实例开始学习程序的基本结构。

几乎所有的编程语言都喜欢将“Hello World”作为第一个实例,那么我们也先从这里开始。

例1.1 输出文字“Hello World!”

任务描述

在输出窗口中显示一行文字:“Hello World!”。

我们先来看程序代码。

Python

源程序

程序只有一句,但是这一句的格式不能写错,既不能写成print 'Hello World!',也不能写成print(Hello World!),更不能随意增减标点符号。

计算机语言首先要求的就是严格,马马虎虎可是不行的!

程序注解

· print( ):是Python中的输出函数,其功能是将( )中的参数值输出到Shell窗口中。

本例中,其参数是一个字符串:'Hello World!'。注意,单引号'不可以省略,否则会显示程序出错。

在Python中,也可以用双引号(" ")来代替单引号(' '),但必须成对使用。如果字符串中含有双引号(" "),则外面就用单引号(' ')来引示,反之亦然。

· #:表示此后为注释内容,这一部分文字程序运行时会自动忽略。

运行结果
     Hello World!

C/C++

源程序

程序比Python多出好几行,但核心的执行语句也只有一行,其他都是C语言的固定格式。同样需要注意,格式不能写错。

程序注解

· main( ){ }:主函数,是C/C++程序的入口。

程序所执行的是main()函数后{ }中的语句,在此之外的语句,只有被main中的语句调用才会执行。

· printf( ):格式输出函数,此处将字符串"Hello World!"输出到输出窗口。

注意:printf()函数比Python中的print()函数名结尾多了一个f。

双引号(")不可省略,也不可以用单引号(')代替,这一点与Python不同。

C/C++中的语句以分号(;)结尾,且不可省略。

· 注释:

C语言中的注释用/*……*/包括起来,可跨越多行。在C/C++语法中,可使用双斜杠(//)表示本行此后的内容均为注释,程序编译及运行时将自动忽略。

· #include <cstdio>:表示本程序要引用stdio(标准输入输出)库函数。

因为printf()函数是在stdio函数库中定义的,程序开头必须写上这一句,否则会在编译时显示“printf标识符未定义”。

运行结果

与Python相同。

Dev C++和VS都会将运行结果输出到Windows操作系统的DOS窗口,这是从20世纪的DOS时代延续下来的。

     C++

在C++中,还有另一种输出方法。

源程序
程序注解

· cout: 为C++中的输出命令,此处将字符串"Hello World!"输出到输出窗口。

· <<:此处为输出运算符,该符号在别的地方还有别的含义。

· #include <iostream>:表示cout命令在iostream库中定义。

· using namespace std :使用std命名空间。

因为cout命令在std命名空间中定义,所以,如果此处不声明这一句,程序中就需要写成std::cout。

运行结果

与Python相同。

例1.2 求和

任务描述

在程序中设定a=5、b=3,在窗口中输出a+b的值。

程序代码如下。

Python

源程序
     a=5
     b=3
     c=a+b
     print('a+b=',c)
程序注解

· a=5:含义是将常量5赋值给变量a

=称为赋值运算符,与数学中的等式含义不同。在计算机程序中,它代表执行这一句之后,a的值变为5,而不代表之前的数值。

大家看懂上面这句话了吗?如果暂时看不懂也没有关系,只需先记住它与数学中的等式不同就行了。

· print('a+b=',c):输出字符串'a+b='和变量c的数值。

很多小朋友往往搞不清print('a')和print(a)的区别,在要求输出a的时候直接写上print(a),这样当然不会得到想要的结果。

这里再重申一下,'a'表示一个字符串,它会作为数据存储在内存中。

a在这里代表一个变量名,这只是为了方便编程人员操作而已,只在源代码中存在。在程序编译并执行的时候,它会转化为内存中的一个存储地址,而这个变量名本身已经不存在了。

而你想要输出字母a,就必须在数据中有这个字母才行,因此只能写成print('a')。

运行结果
     a+b= 8

在上面的运行结果中,在=和8之间有一个空格,因为print()函数默认使用空格来隔开各输出项。如果想取消这个空格,可将输出语句改成:

     print('a+b=',c,sep='')

参数sep=' '表示以一个空字符串来隔开各输出项。

运行结果
     a+b=8

C++

源程序
程序注解

· int a,b,c:设置abc为整型变量,即均为整数。

在C/C++中,变量必须先声明数据类型后才能使用,这一点与Python不同。

· a=5:将常量5赋值给变量a

参考本例Python源程序后的说明。

运行结果
     a+b=8

如果数值为小数,则需要设置变量为浮点型(float)。

可以在定义变量的同时,给变量赋初始值,相应语句如下:

运行结果
     a+b=8.7

变量的定义

Python和C/C++的变量都遵循“先定义后引用”的原则,但在Python和C/C++中,变量定义的概念有所不同。

Python的变量定义在赋值时完成,如果变量未赋值就引用,在执行时编程环境会提示:程序出错,该变量未定义。

C/C++的变量定义是在声明变量数据类型时完成的,如果变量未声明数据类型就赋值或引用,在编译时会提示出错:该变量未定义。如果变量已声明数据类型但未赋值,在编译时会提出警示,但程序仍然可以执行。

学到这里,大家可能会问:写这么一大段程序来算这么简单的一道题,有意义吗?有那个工夫,按两下计算器不就解决了吗?其实,我在初学计算机编程的时候也有这个疑问,编程究竟能做什么?

请不要着急,让我们逐个例子看下去。

以上的示例程序都是只有输出,没有输入的。而在实际的软件应用中,多数都要针对一定的输入进行处理。

例1.3 对输入求和

任务描述

在窗口中输出“请输入a:”并输入a值,

输出“请输入b:”并输入b值,

输出a+b的值。

先看程序代码。

Python

源程序
程序注解

· a=input('提示语'):是Python中的输入语句,功能是显示提示语并等待用户输入一段字符(按Enter键结束),并将输入值赋给变量a

运行结果(粗斜体字为输入)
     请输入a:12
     请输入b:13
     a+b=1213

大家看一下这个结果是不是有什么地方不对?12+13怎么能得1213呢?

这是因为Python 3默认input()函数的返回值数据类型是字符串,而在Python中,字符串之间是可以“相加”的,就是将字符串合并在一起。

字符串不仅可以“相加”,字符串和整数还可以“相乘”,请看下面的语句:

     print('abc'*3)
运行结果
     abcabcabc

如果想将输入数据转换为数值,则需要数据类型转换函数。如果想转换为整型数,则使用int()函数,如要想转换为浮点数(小数),则使用float()。

源程序修改如下:

运行结果(粗斜体字为输入)
     请输入a:12
     请输入b:13
     a+b=25.0

结果中的25.0代表结果为浮点数。

C/C++

源程序
程序注解

· scanf("%f",&a):C/C++中的格式输入函数。%f为格式符号,表示从输入中扫描一个浮点数赋值给下一个参数a。

&a表示变量a的存储地址(第12章详解),&不可省略。

scanf()函数不能输出提示语,所以提示语需要提前用printf()函数输出。

· printf("a+b=%f",c):输出a+b=(c的值),%f为格式符号,表示将下一个参数c的值转换成浮点数输出。

%f代表输入/输出格式为浮点数,格式符号与变量的对应关系见下表。

数据类型
运行结果(粗斜体字为输入)
     请输入a:12
     请输入b:13
     a+b=25.000000

如果将%f换成%g,使用VS C++输出则不会显示后面多余的0,使用Dev C++输出没有什么不同。

既然%已经被用作格式输出符号,那么,如果想输出一个%该怎么办?例如90%,该怎么写?

其实好办,多写一个%,写成90%%就可以了。

C++

源程序
程序注解

· cin>>a:C++中的输入命令,此处输入一个数值赋值给变量a

· >>:此处为输入运算符,注意与输出运算符方向相反。

该符号仅在此处用于输入、输出,在别处有其他含义。

运行结果(粗斜体字为输入)
     请输入a:12
     请输入b:13
     a+b=25

本章要点

· 本章学习了Python和C/C++基本的输入/输出函数和语句,其使用方法对比如下表所示。

· Python 中的变量必须先赋值后再引用;C/C++中的变量必须先声明数据类型后再引用。

练习1 简单人机对话(1)

任务描述

在窗口中输出“请问你今年多少岁?”

输入一个数。

输出“再问一下,你妈妈今年多少岁?”

输入一个数。

输出“哦!我知道了,你妈妈比你大(输出差值)岁。”