C++笔记

C++源程序打印Hello World

假设你已经装好了Mingw编译器,没有安装的话,请自行移步网络上找教程

第1步:为了方便教学,我们在桌面创建一个文件夹,名为cpp-tutor

第2步:cpp-tutor文件夹里创建一个txt文件,文件名为hello,后缀名由txt改为cpp,将以下内容输入进文件内容

#include <iostream>
using namespace std;

int main() {
cout << "Hello, world!" << endl;
return 0;
}

第3步:使用Win键 + R打开运行窗口,输入cmd打开命令控制符

第4步:在命令控制符里输入

cd %USERPROFILE%/Desktop/cpp-tutor

打开刚刚创建好的文件夹

默认情况下,打开控制台的默认路径就已经是C:\Users\用户名了,这时候只需要输入cd Desktop/cpp-tutor即可

第5步:然后输入

g++ ./hello.cpp -o helloworld

此程序用于编译刚才写好的hello.cppC++源程序,并将其输出的可执行文件.exe命名为helloworld

接下来,如果没有出现报错(控制台没有出现任何东西,视为编译通过。也可以通过检查刚刚创建的文件夹里有没有helloworld.exe来判断是否编译成功)

或者可以通过在控制台输入dir,输出文件列表查看列表中是否出现helloworld.exe

第6步:然后输入

helloworld.exe

执行刚才编译好的可执行文件。接下来你应该会在控制台上发现Hello, world!被打印输出了。

我们可以将第5步和第6步合并为一句:

g++ hello.cpp -o helloworld && helloworld.exe

用了&&号,意思是:当编译成功,则直接执行exe文件。

代码解释

#include <iostream> // <iostream> 头文件定义了标准数据输入输出流,使程序能够将文字输出到控制台上。
using namespace std; // std 命名空间包含C++标准库的而功能(cout、endl)

// 每个C系程序有且仅有一个main函数,是整个程序的入口。返回值必须是int类型,代表程序运行的异常代码。
int main() {
cout << "Hello, world!" << endl; // C++的输出语句的语法,`endl`表示换行,可以用`\n`来代替`endl`。
return 0; // 0表示此程序正常退出。
}

这就是最简单的输出语句了。

输出语句

输出语句的其他用法:

#include <iostream>
using namespace std;

int main() {
cout << "其实可以分很多行来写"
<< "比如这一句包含很多句子,"
<< "这么写就能提高代码可读性" << endl; // 这一个将会被当作一句输出
cout << "我们也可以通过\n"
<< "来实现换行\n"; // 用 \n 取代endl,达成换行效果
}

变量

#include <iostream>
using namespace std;

int main() {
int myVariable = 10; // 声明一个整型变量myVariable,并赋值10给它
int a = 30, b = 15; // 同时声明两个整数型变量,并分别赋值30, 15给它们
int sum = a + b; // 将上面声明的a, b变量相加,并赋值给新声明的sum变量

// 我们可以通过cout输出每个变量的值
cout << "myVariable = " << myVariable << endl;
cout << "a = " << a
<< ", b = " << b << endl;
cout << "sum = " << sum << endl;
return 0;
}

输入语句

我们可以通过输入语句获取用户的输入

#include <iostream>
using namespace std;

int main() {
int userInput; // 声明变量,可以不赋值。
// C++没有默认值,当下分配到的地址值原先是多少,就是它的默认值(MSVC)

cout << "请输入一个整数值:"; // 输入提示
cin >> userInput; // 获取用户输入(注意箭头朝右)
cout << "所输入的值是:" << userInput << endl;
return 0;
}

数据类型

#include <iostream>
using namespace std;

int main()
{
unsigned long int x = 100; // unsigned 只能保存正数,long 占用默认两倍的字节
short int y = 16; // short 是只占用默认一半的字节
float pi = 3.14; // float 占用4个字节
double temp = 36.8; // double 占用8个字节
string txt = "Hello world"; // string 是一个字符串,是C++标准库里的。
char ch = 'A'; // char 字符
bool isLearning = true; // bool 只有两个值:true 和 false
bool isPlaying = 0; // 也可以用数值0、1代替,将其输出,将会输出0和1,而不是true和false
cout << isLearning << endl;
return 0;
}

对char型的一些研究

char型变量用于保存一个字符,如A,b等等。用一段程序来进行研究,研究目的是创建一个“令白嫖党看不懂的”版权信息

#include <iostream>
#include <ctime>
using namespace std;

int main() {
// char 叫多字节字符,一个 char 占一个字节
char ch = 'A';
int ascii_A = (int)ch; // 将字符转换成ASCII码
cout << ch << " : " << ascii_A << endl; // A : 65

// 每一个英文字符都能转换成对应的ASCII(美国信息交换标准代码)
// 所以:
char copyright[] = "Made by Xiaomai"; // 这是版权信息
cout << copyright << endl; // Made by Xiaomai

// 找到它的长度
int len = sizeof(copyright) / sizeof(copyright[0]);
cout << len << endl; // 16(包括结束标识符\0)

// 遍历转换成ASCII码
int i, temp;
for (i = 0; i < len; i++) {
temp = (int)copyright[i];
cout << temp << ", "; // 将每一个字符的ASCII码输出出来
}
cout << endl; // 换行

// 到这里先运行一遍,获取每个字符的ASCII码
// 复制控制台中的这一段:77, 97, 100, 101, 32, 98, 121, 32, 88, 105, 97, 111, 109, 97, 105, 0
// 最后一个逗号不需要

// 创建新的字符数组,数组元素为上面的这一串ASCII码
char a[] = {77, 97, 100, 101, 32, 98, 121, 32, 88, 105, 97, 111, 109, 97, 105, 0};
cout << a << endl; // Made by Xiaomai
// 就可以得到一个记录版权信息的字符串了。

// 接下来是让这组信息在特定时间点之后才出现
// 注意:time函数需要引用头文件<ctime>
if (time(0) > 1621094400) {
// 2021年5月16日之后才会显示
// 至于UNIX时间戳,自行谷歌计算
cout << a << endl;
}
return 0;
}

把过程简化,最后我们只需要这么几行:

#include <iostream>
#include <ctime>
using namespace std;

int main() {
char a[] = {77, 97, 100, 101, 32, 98, 121, 32, 88, 105, 97, 111, 109, 97, 105, 0};
if (time(0) > 1621094400) {
cout << a << endl;
}
return 0;
}

这个嘛,你把它藏在你的程序中间,可以防止有人白嫖你的作业去交。比较适合坑新手~

汉字引发的惨案

不说了,看半成品……毫无头绪

#include <iostream>
using namespace std;

int main() {
char str[4] = "我"; //前三个字节存放汉字'我',最后一个字节存放字符串结束符\0
cout << str << endl; // 我

char ni = '你';

// wchar_t 被称为宽字符,一个 wchar_t 占 2 个字节。
wchar_t hans = L'我'; // 等价于 L'\x6211'
int ascii_hans = (int)hans;
cout << hans << " : " << ascii_hans << endl; // 我 :

wchar_t wstr[2] = L"中"; // 前两个字节(前一个 wchar_t)存放汉字'中',最后两个字节(后一个 wchar_t)存放字符串结束符\0
wchar_t wstr2[3] = L"中国";
cout << wstr << endl; // 这里会输出地址,我还要研究怎么输出文字
cout << wstr2 << endl;

return 0;
}

数组

#include <iostream>
using namespace std;

int main() {
int a[5] = {11, 45, 62, 70, 88}; // 声明一个长度为5的数组,然后赋值
cout << a << endl; // 打印的是地址值

// 数组下标从0开始,所以要打印第n个元素时,下标需为n-1:
cout << "第2个元素为:" << a[1] << endl;
return 0;
}