Z1_上_1_输出与变量
一、程序的主体框架
示例
请将下列程序输入,并且按下“运行”,看一下会发生什么?
# include <iostream>
using namespace std;
int main ()
{
cout << "Hello world!"; //此行控制输出Hello World !
return 0;
}
这是一个非常经典的程序,我们逐一认识一下其中每个部分及其作用。
(1)“#include < iostream>”这个部分称为头文件。
头文件可以理解为是一个工具包,当我们需要使用具体的工具时,就需要提前告诉计算机,我们需要调用相应的工具包。
iostream,i是in的简写,表示输入;o是out的简写,表示输出;stream表示流;所以这个头文件表示是输入输出流,其包含的工具我们用得比较多的就是cin和cout。
(2)using namespace std; 这个部分称为名空间。
因为程序内部有很多名空间,有些词可能会出现重复,如果不加以说明,计算器就不知道我们所说的到底是哪个名空间,然后就会报错。
【试】尝试删掉这句话,看看会发生什么?
程序会报错,提示cout有误,可以在cout前面加上std::,也能达到相同的目的。
但此时每个特殊名词都需要加上这个前缀,不是很方便,所以还是推荐在最开始直接写上using namespace std;这句话。
(3)int main () {} 这个部分称为主函数,是整个程序的主体。
第一个词int表示程序的返回结果的数据类型,这个我们暂时不用深究,主函数一般都是int,并且在程序内部一般会跟一个return 0;匹配,看作固定搭配即可。
易错点:main单词拼错,括号忘记打。
大括号内部就是程序的代码语句了,也就是计算机执行的各项指令。
不同的语句使用分号分割,千万不要忘记打分号!
cout << " Hello world !";就表示计算机应该输出" Hello world !"这句话。
(4)后面的//此行控制输出Hello World !是注释,这个部分不是给计算机读的,而是给人看的。目的是为了方便自己或者其他人理解代码的含义,特别是在一些复杂的代码中,恰当的代码是很有必要的。
那如果写的代码非常长,需要换行怎么办呢?
此时可以可以使用/* */的组合来写代码。
#include <iostream> using namespace std; int main () { cout << " Hello world !"; /*此行控制输出Hello World ! 这行只是一个单纯的注释, 这行也是*/ return 0; }
【例】查错:代码模块
【分析】
头文件少写了一个“#”;文件名拼写错误,应该是iostream。
namespace拼写错误,应该是namespace;std后面没写分号。
主函数名称写错,是main,后面有一对括号。
主函数主体花括号没有成对,最后要补一个花括号。
输出的字符串中h和w要大写,感叹号后不用空格;换行符是endl;
分号使用的是中文分号,要切换成英文分号。
return 0后面分号没写。
【参考代码】

#include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; return 0; }
二、cout语句
cout语句的一般格式为:
cout << 项目1 << 项目2 << …… <<项目n;
(1)字符串输出
如果项目加了双引号,那么程序就会把双印号内部的内容输出。
【试一试】如果输出的语句为:cout << "Hello" << "World";输出结果是什么?
如果希望输出的语句换行,那么需要使用endl。
cout << 项目1 << endl;
cout << 项目2 << endl;
【例】香蕉之歌
【参考代码】

#include <iostream> using namespace std; int main() { cout << "ba ba ba ba ba na na" << endl; cout << "ba ba ba ba ba na na" << endl; cout << "bananaaaaaaah!" << endl; return 0; }
当然,只用一个cout也能实现这个目的,如下所示。

#include <iostream> using namespace std; int main() { cout << "ba ba ba ba ba na na" << endl << "ba ba ba ba ba na na" << endl << "bananaaaaaaah!" << endl; return 0; }
但是从阅读美观性来说,一般选择上面那个,因为它会更符合人类的阅读习惯。
(2)表达式输出
如果项目本身是个表达式,那么cout会直接输出表达式的计算结果。
C++语言的基本算术符号主要有5种:加(+),减(-),乘(*),除(/),模(%)。
前4个和数学的算术符号基本一致,第5个其实就是取余数,比如14÷5=2……4,那么14%5=4。
示例
运行下列程序,体会编程算术运算符和数学运算符的联系与区别。
#include <iostream> using namespace std; int main () { cout << 7 + 2 << endl; cout << 7 - 2 << endl; cout << 7 * 2 << endl; cout << 7 / 2 << endl; cout << 7 % 2 << endl; return 0; }
可以注意到,第4个运算符的结果不是我们预想中的3.5,而是3。
原因在于,如果被除数和除数都是整数,那么“/”其实是一个取商符号。
那么如果想输出实际的小数结果应该怎么办呢?
此时只要把被除数或者除数写成小数的形式,比如7.0/2或7/2.0,那么结果都是正常的3.5。
这些运算符的运算顺序和数学一致:先乘除模,后加减,有括号先算括号内的。
【例】算术运算式
【分析】
将×换成*,将÷换成/。注意,程序语言中没有中括号,全都是小括号。
【参考代码】

#include <iostream> using namespace std; int main() { cout << 123 * 3145 - 2015 / 5 << endl; cout << 1.23 * 4.34 / 2.5 - 0.1234 << endl; cout << (2348 * (1345 + 114) - 116) / 8 << endl; cout << 123456789 % 123 << endl; return 0; }
【例】单位转换
【分析】
8000÷60=130……200,130÷60=2……10。
【参考代码】

#include <iostream> using namespace std; int main() { cout << 8000 / 3600 << ' ' << 8000 / 60 % 60 << ' ' << 8000 % 60 << endl; return 0; }
三、变量与赋值
如果一个量有不同的值,或者有不同的变化,此时我们需要一个“容器”来储存这个变化的量,这个量就叫做变量。
不同的数据所使用的储存空间是不一样的,那么所需要使用的“容器”大小也不相同,所以在使用变量之前,需要声明变量的数据类型。
布尔型其实就是真假型的意思,0为假,1为真,这个后续学习分支结构的时候再细说。
字符型是用来表示字母和符号的。
在数据计算阶段,我们常用的是后面几种。初级阶段,暂时可以按照下面这个规则来理解:
如果是整数,那么就用int,如果是个很大的整数,那么就得用long long。
如果是小数,低精度用float,高精度用double,但一般直接用double。
变量命名规则:
(1)变量名中只能出现字母(A~Z,a~z)、数字(0~9)和下划线(_),反例:UsD$
(2)第一个字符不能是数字,反例:2PAC
(3)不能是C++关键字,反例:int。
(4)区分大小写,A和a是两个不同的变量。
将变量赋予一个具体的值的过程,称为赋值。
示例
观察下列赋值程序,理解变量与赋值的关系。
#include <iostream> using namespace std; int main () { int a; a = 10; cout << a << endl; a = 20; cout << a << endl; int b = 30; a = b; cout << a << endl; int c = 40; c = a; cout << a << endl; return 0; }
如果右边也是一个变量,那么会把这个变量的值传递给左边。区别于数学中的“=”,程序中的“=”表示的是赋值,即将“=”右边的值赋予左边的变量。
赋值过程具有很强的“喜新厌旧”的特点,即新的值会把原来的值直接替换。
任何变量都需要提前进行声明,告诉计算机这个变量的类型和大小。
变量的声明和赋值可以同时进行,但是仅限一个变量的赋值,如果出现连等式的赋值,那么不能和声明同时进行,比如下面这种情况是不行的。
int a=b=c=0;
如果变量的赋值过程以自身为基础,那么可以进行简化。
比如a=a+2可以简写为a+=2,a-=2表示a=a-2。
示例
观察下列赋值程序,理解变量在自身基础上再赋值的特点。
#include <iostream> using namespace std; int main () { int a = 10; a += 1; cout << a << endl; a -= 2; cout << a << endl; a *= 3; cout << a << endl; a /= 4; cout << a << endl; a %= 5; cout << a << endl; a++; cout << a << endl; a--; cout << a << endl; return 0; }
需要注意的是最后两个,a++是a+=1的简写,即a自增1;而a--是a自减1的意思。
自增和自减还有另外一种写法:++a和--b,它们和之前两个的区别在于赋值与计算的先后问题。
示例
观察下列程序,理解赋值与计算的先后关系。
#include <iostream> using namespace std; int main () { int a, b; a = 10; b = a++; cout << b << endl; b = ++a; cout << b << endl; b = a--; cout << b << endl; b = --a; cout << b << endl; return 0; }
【例】查错:变量定义
【分析】
$a变量定义不合法,不能出现特殊符号;
1b变量定义不合法,变量第1个字符不能是数字;
C0,Co,co变量定义不统一,要区分大小写,注意0和o的区别;
___变量定义不统一,第2个只有2个字符,应该统一为____;
int关键字不能定义为变量;
sum变量没有定义;
2=1b赋值过程错误,变量要写在左边。
【参考代码】

#include <iostream> using namespace std; int main() { int a, b, C, ___, in; a = 1; b = 2; C = 3; ___ = 4; in = 0; int sum = a + b + C + ___ + in; cout << sum <<endl; return 0; }
如果一个量在程序中需要反复调用,并且需要保持值恒定不变的话,那么可以定义一个常量。
常量的定义格式为:int const a=2,或const int a=2。
四、cmath头文件与常用函数
1.精度与估算
需要需要对计算的结果进行近似取值,常用的函数有如下三个:
(1)floor(a),将浮点数a向下取整
(2)ceil(a),将浮点数a向上取整
(3)round(a),将浮点数a四舍五入取整
【思考】如果希望将结果四舍五入保留1位小数应该怎么办?
答案:先乘10,然后round取整,然后结果再除以10。
【例】取整
【参考代码】

#include <iostream> #include <cmath> using namespace std; int main() { double a = 314.15926; cout << ceil(a) << endl; cout << floor(a) << endl; cout << round(a) << endl; cout << round(a * 100) / 100 << endl; return 0; }
【练】杯子的数量
【分析】
用12857.63÷214,最后的结果要用ceil函数向上取整。
【参考代码】

#include <iostream> #include <cmath> using namespace std; int main() { cout << ceil(12857.63 / 214) << endl; return 0; }
2.次方与开方
x的y次方,即xy,在C++语言中表示为pow(x,y),比如a的3次方,可以表示为pow(a,3)。
如果想对x进行开方,即,在C++语言中表示为sqrt(x)。
【选】次方与开方
【参考代码】

#include <iostream> #include <cmath> using namespace std; int main() { cout << pow(2, 16) << endl; cout << sqrt(1522756) << endl; return 0; }
【选】公式转换![]()
【分析】
2x要写成2*x
【参考代码】

#include <iostream> #include <cmath> using namespace std; int main() { double a, x, y; x = 1.2; y = 1.3; a = (2*x+pow(y,3))/(pow(x,2)+3*y); cout << a << endl; return 0; }
课后测
【1】输出“Hello World!”
【参考代码】

#include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; cout << "Hello World!" << endl; cout << "Hello World!" << endl; return 0; }
【2】三角形面积
【分析】
23×51÷2,结果是小数,注意将数据写成小数的形式。
【参考代码】

#include <iostream> using namespace std; int main() { cout << 23.0 * 51 / 2; return 0; }
【练】静夜思
【参考代码】

#include <iostream> using namespace std; int main() { cout << "床前明月光" << endl; cout << "疑是地上霜" << endl; cout << "举头望明月" << endl; cout << "低头思故乡" << endl; return 0; }
【练】字符爱心
【参考代码】

#include <iostream> using namespace std; int main() { cout << " ** ** " << endl; cout << "*******" << endl; cout << "*******" << endl; cout << " ***** " << endl; cout << " *** " << endl; cout << " * " << endl; return 0; }
【练】数值运算
【参考代码】

#include <iostream> using namespace std; int main() { cout << 123321 * 456 + 5678910 << endl; cout << 245645345 / 1233 << endl; cout << 245645345 % 1233 << endl; cout << 11 * 12 + 12 * 13 + 13 * 14 + 14 * 15 + 15 * 16 << endl; cout << 1.23 * 5.67 << endl; return 0; }
【练】铺地砖
【分析】
注意90÷4÷3结果是小数,需要把90写成90.0。
【参考代码】

#include <iostream> using namespace std; int main() { cout << 90.0 / 4 / 3 * 5 * 6 << endl; return 0; }
【练】聚餐
【分析】
结果要向上取整,要使用ceil函数。
n和m都是整数,要保证结果是小数,需要把n*1.0。
本题需要使用到cin语句,建议学完第二讲后再做。
【参考代码】

#include <iostream> #include <cmath> using namespace std; int main() { int n, m; cin >> n >> m; cout << ceil(n * 1.0 / m); return 0; }