第 1 课:程序入门

预计阅读时间2 分钟 256 views

摘要 在正式写程序之前,我们先了解下什么是程序。程序是指一组按照特定顺序和逻辑编写的计算机指令,用来完成某些特定任务或解决某个问题。

在正式写程序之前,我们先了解下什么是程序。程序是指一组按照特定顺序和逻辑编写的计算机指令,用来完成某些特定任务或解决某个问题。

举个简单的例子,比如蛙蛙想买包子吃,他首先来到早餐店,然后告诉老板给他来两个香菇青菜馅的包子,这里的“两个”“香菇青菜馅包子”就可以看作给老板下达的“指令”。老板接收到“指令”,递给了蛙蛙两个香菇青菜馅包子,就解决了蛙蛙买包子这个问题。

而我们现在处于计算机的世界当中,程序需要通过编程语言来编写,然后由计算机去执行。编程语言有很多,比如 Python、Java、C++等,由于信息学奥赛的官方比赛语言目前仅支持 C++,所以本书的语法、算法及数据结构均通过 C++来实现。

什么是 C++呢?又有哪些产品是通过 C++开发的呢?让我们一起来了解一下。

1.1.1 C++简介

C++于 1983 年由比雅尼·斯特劳斯特卢普(Bjarne Stroustrup)在 C 语言的基础上开发出来,由于性能优越、灵活性强,被广泛应用于各个领域。在操作系统方面,大家常用的 Windows 操作系统,其内核、文件系统等部分大量使用了 C++。信息学奥赛考试用的 Linux 系统,其内核和驱动也使用了 C++。

在游戏开发方面,国产西游主题大型游戏《黑神话:悟空》所使用的游戏引擎——UnrealEngine,它的主要开发语言就是 C++。

有些同学可能接触过 Photoshop 这款图片处理软件,也有些同学可能接触过 3D 建模软件Blender,这些软件的核心部分均由 C++编写。甚至我们常用的谷歌浏览器,也有 C++语言的参与。

从这里我们便能看出,C++不仅仅是信息学奥赛官方比赛语言,它还能支撑各行各业的应用。它也许会从你现在这个阶段陪伴你到未来很长一段时间,或许能伴随你的一生。

听到这里,蛙蛙已经迫不及待想学习 C++这门语言了,让我们跟随蛙蛙进入 C++的世界吧!

1.1.2 软件使用

工欲善其事,必先利其器,想要学 C++,必须要先有一个编写 C++ 的开发环境。开发环境DEV-CPP 的安装教程已经放到我的博客 bigbigli.com/rjxz.html 了,若你还未安装环境,请移步到bigbigli.com/rjxz.html,安装好后再继续往下进行。

1. 新建源程序

步骤一:从主菜单中依次选择“文件”→“新建”→“源代码”菜单。新建完成之后,屏幕右下侧出现一片白色区域,称为“源程序编辑区域”,可以在此输入程序,如图 1-1 所示。

图1-1 新建源程序

步骤二:创建C++程序基本框架。把下面这几行代码写进“源程序编辑区域”,写完之后再解释这几行代码的意思:

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

需要注意,这里所有的符号,比如<>、;、()、{}均为英文状态下的符号。写完之后,再来了解下每一行究竟表示什么?

假设将整个程序比作买菜做饭的场景,现在蛙蛙饿了,他告诉妈妈想吃西红柿炒鸡蛋,但是家里没有食材,于是妈妈先去了一趟菜市场,然后回家给蛙蛙做饭……

#include <iostream>

include是包括、包含的意思,这里包含了一个头文件iostream。我们可以把头文件比作菜市场,蛙蛙想吃A婆婆卖的西红柿,所以妈妈必须要去A婆婆所在的菜市场才能买到这个菜,而这里的iostream就是那个有这个菜的菜市场。

iostream中的i表示的是input,是输入的意思;o表示的是output,是输出的意思;stream是流,流出的意思。一个程序,基本都会有输入和输出,这个头文件的功能就是用于处理标准输入、标准输出和标准错误等。

using namespace std;

注:有了这么一句话,后续在程序中就可以直接使用cout(输出)、cin(输入)、vector(动态数组)、string(字符串)等标准库中的类型和函数等内容,而无须在每次使用时都加上std::前缀(如果没有这一行,则需要加上std::前缀)。

int main(){}

int main()是主函数的声明,也就是通知计算机该干活了。

就像妈妈买完菜回来后,去厨房给蛙蛙做西红柿炒鸡蛋一样。后面紧跟着的一对大括号,我们可以暂且把它比作厨房,那么无论是做饭还是刷锅洗碗,都是在这个厨房里面进行的。

return 0;

表示这个程序已经执行完毕,正常终止了。就像妈妈做完饭后,大家也都吃完饭了,正常收拾下厨房,这顿饭就圆满结束了一样。

如果不收拾厨房,会影响大家吃这顿饭吗?自然是不影响整个吃饭流程的,也就是说如果没有return 0,通常不会影响程序主体的执行。但这会使代码看起来不够完整和规范,所以大家最好还是加上return 0,这样能确保程序完全符合C++标准对于主函数返回值的定义。

2. 保存源程序

写完基本框架后,程序还未保存。若想保存程序,只需从主菜单中选择“文件”→“保存”就可以将文件保存到指定的硬盘目录下,如图1-2所示。

图1-2 保存源程序

3. 编译

计算机的语言能力有限,它只认识机器语言(即由0和1组成的二进制指令),所以它需要有个翻译官(编译器)帮它将C++语言翻译成机器语言,这样计算机就能理解程序啦。

怎么将我们所写的程序进行编译呢?从主菜单中选择“运行”→“编译”或者点击快捷键“F9”。等待编译日志中出现编译结果,则编译完成,如图1-3所示。

图1-3 编译完成

4. 运行

编译完成之后,可以看到程序没有错误(如果出现错误,则需要对照着上面的程序再修改一遍,看看是不是把英文字符写成中文字符了),然后还需要运行程序,才能达到解决实际问题的目的。

从主菜单中选择“运行”→“运行”或直接点击快捷键“F10”。

此时会跳出如图1-4所示的黑色框,表示运行成功。黑色框是控制台,以后程序运行结果均在此控制台上显示。

图1-4 控制台

  • 提示:编译和运行这两个步骤在编程环境中可合二为一,即直接点击“运行”→“编译运行”或快捷键“F11”,计算机会依次进行编译和运行操作。

1.1.3 标准输出语句

今天是蛙蛙学习C++编程的第一天,为了庆祝这一天,他希望在控制台上打印“Hello C++”。

氪町博士了解了蛙蛙想做什么之后,告诉他要想在控制台上打印文字,需要掌握下面的编程指令。

  • 标准输出指令:cout
  • 标准使用格式:cout <<

指令功能:在控制台(也就是图1-4)输出结果,如果想要原样输出我们想让它显示的内容,就需要将原样输出的内容用双引号引起来。

于是,蛙蛙迫不及待地在编程软件中写上如下所示的程序:

cout << "Hello C++"

然后点击“编译运行”菜单,结果发现报错了,这是为什么呢?

氪町博士告诉他有两方面的原因,一是没有写在基本框架里面,就相当于你现在准备去做饭,但是没有进厨房,那自然是不妥的;二是结尾没有加分号——“;”,分号在编程中就相当于作文中的句号,一句话写完后一定要加上,所以完整的程序如下:

#include <iostream>
using namespace std;
int main()
{
	cout << "Hello C++"; 
	return 0;
}

写完之后,别忘了点击“编译运行”,观察是否出现如图1-5所示的结果。

图1-5 运行结果

蛙蛙编译运行后,发现他运行后出现如图1-6所示的情况,你知道这是为什么吗?

图1-6 编译结果

蛙蛙检查了下,终于发现了错误,原来在第5行不小心把英文的“;”打成了中文的“;”,改完后再运行就没有问题了。

聪明的你,运行后有没有像蛙蛙一样出现错误呢?如果有些许错误的话请耐心检查哦。

1.1.4 实例讲解

为了巩固蛙蛙今天所学的新知识,氪町博士准备了一些测试题目,帮助蛙蛙检测他学的如何,你也跟着一起做一下吧。

例1:蛙蛙的心情

蛙蛙掌握了输出语句之后,他成功利用自己所学的知识在控制台上打印出了今天的心情,你能像蛙蛙一样,在控制台中打印出你此时此刻的心情吗?

【输出样例】蛙蛙今天学了新知识,很开心!

解析

输出语句是cout,要写在基本框架里面,还记得基本框架是什么吗?如果忘记的话,记得再回顾下,希望本章学完后,大家都能把基本框架默写下来。

参考代码

#include <iostream>
using namespace std;
int main()
{
    cout << "蛙蛙今天学了新知识,很开心!";
    return 0;
}

例2:超市购物

蛙蛙随妈妈来到超市购买商品,妈妈买了一些水果,一共是24元,又买了3盒牛奶,每盒牛奶的价格是5元,请问妈妈此次一共花了多少钱呢?请使用编程软件计算,并将结果打印在控制台上。

【输出样例】39

  • 注意:输出样例仅用于对比你在控制台中输出的结果,并非样例输出的实际内容。

解析

蛙蛙觉得这题太简单了,认为这个题目与上面那个题目一样。于是他写下了如下的程序,你觉得他写的对不对呢?

#include <iostream>
using namespace std;
int main()
{
	cout << "24 + 3 * 5"; 
	return 0;
}

蛙蛙非常自信地点击“编译运行”,结果出现了如图1-7所示的情况。图1-7所展现的结果跟样例输出的内容不一致,所以这个问题并没有被正确的解决。

图1-7 运行结果

那你知道该如何修改吗?

氪町博士提醒蛙蛙一句话,带双引号输出的内容是原样输出,双引号里面的内容是什么就输出什么,因此并不会计算这个式子的值。

所以只需要把双引号去掉就可以了。蛙蛙拍了拍脑袋,觉得这准没错,于是把双引号去掉了,写出了如下的程序:

#include <iostream>
using namespace std;
int main()
{
    cout << 24 + 3 * 5;
    return 0;
}

运行后,果然发现结果是39,这样写计算机才会自动计算这个算术表达式。

通过刚才的试错,蛙蛙认为学编程是需要多去尝试的,没准多尝试几下就得到了正确的结果,印象也更加深刻了。你觉得蛙蛙的想法对吗?

  • 总结:双引号里面写的内容会原封不动地显示在控制台上,这种输出叫作原样输出,如果我们想要输出一个算式的结果,直接去掉双引号即可。

例3:香蕉和苹果各多少钱

上次去超市买的水果很快就被蛙蛙吃完了,妈妈准备再去水果店购买一些。来到水果店后,妈妈发现这里只有香蕉和苹果比较新鲜,于是只买了这两种水果,其中香蕉买了5斤,苹果买了3斤,香蕉的价格是每斤4元,苹果的价格是每斤7元。

请分别在控制台打印出香蕉的总价格和苹果的总价格。

【输出描述】分别输出香蕉的总价格和苹果的总价格,中间用空格隔开。

【输出样例】20 21

解析

蛙蛙看完题目后有些疑惑,他不知道该如何输出两个结果,氪町博士告诉他,可以直接使用“<<”进行连接,比如要输出22和33,那么只需要这样写即可:

cout << 22 << 33;

这样就可以输出两个结果,对于这题来说,便需要分别计算香蕉和苹果的总价格。

听罢,蛙蛙便在基本框架里面写下了:

cout << 5*4 << 3*7;

然后点击“编译运行”,发现结果是2021。仔细观察这个结果,发现香蕉的总价和苹果的总价虽然都打印在控制台上了,但是两个结果连在一起了,这是为什么呢?

原来是没有将两个结果用空格隔开,但是蛙蛙现在并没有学习如何将两个结果分开,于是又去请教了氪町博士。

氪町博士告诉了他常见的分隔方方,这样以后遇到相似的问题,全都能解决了。

常用的分隔方法一般有两种,分别是利用空格隔开以及使用换行隔开。

  • 如果题目要求利用空格分开,那么只需在两个结果中间加上双引号,然后在双引号里面加上空格即可。因为双引号里面的内容是原样输出的,所以加上空格后,空格会原样打印出来,比如要打印22和33,中间用空格隔开,具体的写法为:
cout << 22 << " " << 33;
  • 第二种常见的分隔方法是利用换行分开,比如现在依然打印22和33,两个数字中间用换行隔开,具体的写法为:
cout << 22 << endl << 33;

运行后,我们会发现这个22和33是换行打印在控制台上的。这里的endl是end of line的缩写,意为行结束。

参考代码

#include <iostream>
using namespace std;
int main()
{
    cout << 5*4 << " " << 3*7; // 分别计算香蕉和苹果的总价,并用空格隔开
    return 0;
}

例4:购物详细清单

妈妈在超市卖完东西之后,想清楚地知道每种物品花费了多少钱,比如她买了6盒原味牛奶,每盒原味牛奶的价格是12元,她想清楚地知道牛奶一共花了XX元。

蛙蛙思索了一会,还是决定使用编程为妈妈解决这个问题,他希望在控制台上清楚地打印出:牛奶的总价为:XX(注:这里的冒号是中文状态下的冒号,XX为商品的价格)。

【输出样例】牛奶的总价为:72

解析

在价格前面,要求原样输出“牛奶的总价为:”,所以这些内容应该写在双引号里面。

即:cout << "牛奶的总价为:",这里的双引号是英文状态下的双引号,冒号要按照要求写出中文状态下的冒号。

再通过连接符连接牛奶的总价即可,即:cout << "牛奶的总价为:" << 6*12;。

参考代码

#include <iostream>
using namespace std;
int main()
{
    cout << "牛奶的总价为:" << 6*12;
    return 0;
}
CONTENTS
Copyright © 2024 - 2026 bigbigli网站 保留所有权利