C++学习基础笔记-输入&输出+科学记数法

C++基础-输入&输出+科学记数法

心血来潮,打算从今天开始写笔记

一.常见的头文件

  • 1.iostream
  • 2.iomanip
  • 3.cstdio

1. <iostream> 头文件

作用:

<iostream> 头文件包含了与输入输出(I/O)相关的功能,它定义了标准输入流(cin)、标准输出流(cout)、标准错误流(cerr)等对象。通过这些对象,可以与控制台进行数据的输入输出。

常见功能:

  • cin:用于从标准输入(通常是键盘)获取数据。
  • cout:用于向标准输出(通常是屏幕)打印数据。
  • cerr:用于输出错误信息,通常输出到屏幕。
  • clog:用于输出日志信息,通常输出到屏幕。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;

int main() {
int num;

// 从用户输入获取数据
cout << "Enter a number: ";
cin >> num; // 从标准输入读取数据

// 输出到屏幕
cout << "You entered: " << num << endl;
return 0;
}

输出:

1
2
Enter a number: 5
You entered: 5

在这个例子中:

  • cin >> num; 从键盘获取输入。
  • cout << "You entered: " << num << endl; 将用户输入的数据输出到控制台。

 

2. <iomanip> 头文件

作用:

<iomanip> 头文件定义了多种用于格式化输入输出的操控符,主要是为控制输出格式提供了更强的功能。常见的操控符有 setprecisionsetwfixedleftright 等。它通常与 <iostream> 一起使用,用于定制化输出格式,比如设置小数点后的位数、输出对齐方式等。

常见功能:

  • setprecision(n):设置浮点数的输出精度(即小数位数或总位数)。
  • fixed:控制浮点数输出为定点格式,避免使用科学计数法。
  • scientific:控制浮点数输出为科学计数法格式。
  • setw(n):设置输出字段的宽度,适用于数字、字符串等输出。
  • leftrightinternal:控制输出对齐方式,分别为左对齐、右对齐和内对齐。
  • setfill(c):设置输出宽度不足时填充的字符。
  • showpoint:强制显示浮点数的小数点。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iomanip> // 包含 iomanip 头文件,提供格式化功能
using namespace std;

int main() {
double pi = 3.141592653589793;

// 设置输出为定点格式并保留两位小数
cout << fixed << setprecision(2);
cout << "Pi: " << pi << endl; // 输出 Pi: 3.14

// 设置输出宽度为10,数字右对齐,左边填充'0'
cout << setw(10) << setfill('0') << 42 << endl; // 输出 000000042

// 设置输出为科学计数法
cout << scientific << setprecision(4);
cout << "Scientific: " << pi << endl; // 输出 Scientific: 3.1416e+00

return 0;
}

输出:

1
2
3
Pi: 3.14
000000042
Scientific: 3.1416e+00

在这个例子中:

  • fixed << setprecision(2) 强制将 pi 输出为定点格式,并保留两位小数。
  • setw(10) 设置输出字段的宽度为 10,setfill('0') 设置填充字符为 '0',所以数字 42 会右对齐,前面填充零。
  • scientific << setprecision(4) 将浮点数以科学计数法格式输出,并保留 4 位小数。

总结:

  1. <iostream> 头文件:包含了与标准输入输出相关的功能,提供了 cincoutcerr 等常用对象。
  2. <iomanip> 头文件:提供了用于格式化输入输出的操控符,能够控制浮点数的精度、输出的宽度、对齐方式等格式化选项。

这两个头文件通常是 C++ 输入输出操作的基础,<iostream> 主要负责数据流的输入输出,而 <iomanip> 使得输出结果可以更加精确和易于阅读。

 

3. <cstdio> 头文件

在 C++ 中,<cstdio> 头文件是 C 标准库的一部分,提供了用于输入输出操作的函数,尤其是格式化输入输出的函数。它是 C++ 中支持 C 风格的输入输出功能的标准头文件,允许你使用 printfscanf 等函数来进行数据的输出和输入。

1. <cstdio> 头文件的作用

<cstdio> 头文件的主要作用是提供与文件和标准输入输出设备(如终端、控制台)交互的函数。它定义了用于格式化输入输出的函数,文件操作函数等。

2. 常见的函数

<cstdio> 中包含的最常用的函数包括:

1) printf — 格式化输出

printf 是一个格式化输出函数,允许将数据打印到标准输出(通常是控制台)。它可以输出文本、整数、浮点数、字符等类型的数据。

1
2
3
4
5
6
7
#include <cstdio>

int main() {
int num = 42;
printf("Number: %d\n", num);
return 0;
}
2) scanf — 格式化输入

scanf 是一个格式化输入函数,允许从标准输入(通常是键盘)读取数据,并根据指定的格式存储到变量中。

1
2
3
4
5
6
7
8
9
#include <cstdio>

int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num);
printf("You entered: %d\n", num);
return 0;
}
3) fprintf — 格式化输出到文件

fprintf 类似于 printf,但是它将输出写入指定的文件,而不是标准输出。

1
2
3
4
5
6
7
8
9
10
#include <cstdio>

int main() {
FILE *file = fopen("output.txt", "w");
if (file != nullptr) {
fprintf(file, "Hello, file!\n");
fclose(file);
}
return 0;
}
4) fscanf — 格式化从文件输入

fscanf 类似于 scanf,但是它从指定的文件中读取数据。

1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>

int main() {
FILE *file = fopen("input.txt", "r");
int num;
if (file != nullptr) {
fscanf(file, "%d", &num);
printf("Read number from file: %d\n", num);
fclose(file);
}
return 0;
}
5) fputsfgets — 文件读写
  • fputs 用于将字符串写入文件。
  • fgets 用于从文件中读取一行字符串。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>

int main() {
FILE *file = fopen("test.txt", "w");
if (file != nullptr) {
fputs("This is a test line.\n", file);
fclose(file);
}

file = fopen("test.txt", "r");
char buffer[256];
if (file != nullptr) {
fgets(buffer, 256, file);
printf("Read from file: %s", buffer);
fclose(file);
}
return 0;
}
6) getcharputchar — 字符输入输出
  • getchar 用于从标准输入读取一个字符。
  • putchar 用于将一个字符输出到标准输出。
1
2
3
4
5
6
7
8
9
10
#include <cstdio>

int main() {
char ch;
printf("Enter a character: ");
ch = getchar(); // 从标准输入读取一个字符
printf("You entered: ");
putchar(ch); // 输出字符
return 0;
}
7) fgetcfputc — 文件字符读写
  • fgetc 用于从文件中读取一个字符。
  • fputc 用于将一个字符写入文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdio>

int main() {
FILE *file = fopen("test.txt", "w");
if (file != nullptr) {
fputc('A', file);
fclose(file);
}

file = fopen("test.txt", "r");
if (file != nullptr) {
char ch = fgetc(file);
printf("Read from file: %c\n", ch);
fclose(file);
}
return 0;
}

3. 文件操作

<cstdio> 头文件还包含了用于处理文件的函数:

  • fopen:打开文件
  • fclose:关闭文件
  • feof:判断文件指针是否到达文件末尾
  • ferror:检查文件操作是否出错
  • fseekftell:文件指针的定位操作
  • rewind:将文件指针重置到文件的开头
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>

int main() {
// 打开文件
FILE *file = fopen("example.txt", "w");
if (file != nullptr) {
fprintf(file, "This is a test file.\n");
fclose(file);
}

// 打开文件读取
file = fopen("example.txt", "r");
if (file != nullptr) {
char line[100];
fgets(line, 100, file);
printf("File content: %s", line);
fclose(file);
}
return 0;
}

4. 错误处理

<cstdio> 中有一些用于错误处理的函数,例如:

  • perror:输出最后一个错误的描述信息
  • clearerr:清除文件流的错误标志
1
2
3
4
5
6
7
8
9
#include <cstdio>

int main() {
FILE *file = fopen("nonexistent_file.txt", "r");
if (file == nullptr) {
perror("Error opening file"); // 输出错误信息
}
return 0;
}

5. <cstdio> 与 C++ 的 <iostream>

虽然 C++ 提供了更现代的输入输出方式,例如 std::coutstd::cin 来代替 C 语言的 printfscanf,但是有时候使用 <cstdio> 中的函数会更直接,尤其在需要进行格式化输出、控制输出精度、或进行文件操作时,C 风格的函数提供了更细粒度的控制。

C++ 中推荐使用 <iostream>流式输出输入,因为它们提供了类型安全、更好的可维护性和更简洁的语法。例如:

1
2
3
4
5
6
7
#include <iostream>

int main() {
int num = 42;
std::cout << "Number: " << num << std::endl;
return 0;
}

6. 小结

<cstdio> 是 C 和 C++ 中提供的标准输入输出库,包含了大量用于格式化输出、从键盘读取输入、与文件交互等功能的函数。虽然在 C++ 中,我们更常用 iostream 库来进行输入输出操作,但 <cstdio> 仍然非常有用,尤其在涉及到低级的、精确的输入输出需求时。

 

二.printf参数

在 C++ 中,printf 是一个用于格式化输出的标准库函数,通常用于打印文本和数值信息。它来自于 C 语言,并且仍然在 C++ 中广泛使用,特别是当你需要控制输出格式(如数字的精度、对齐、填充字符等)时,printf 会比 C++ 的流式输出(如 cout)提供更多的灵活性。

printf 的作用:

  • 用于将文本和变量打印到控制台。
  • 提供了丰富的格式控制功能,允许你指定输出的格式,例如指定小数点后几位、数值的对齐、使用固定宽度等。

printf 的语法:

printf 函数的基本语法如下:

1
2
3
#include <cstdio>  // 需要包含这个头文件

int printf(const char *format, ...);
  • format 是一个格式化字符串,包含普通字符和格式说明符。格式说明符是以 % 开头,后面跟随具体的格式标识符,用于指示如何输出对应的变量。
  • 后续的 ... 是可变参数,表示在格式字符串中占位符对应的变量。

常见的格式说明符:

  • %d:输出整数(十进制)。
  • %f:输出浮点数(默认小数点后6位)。
  • %.2f:输出浮点数,保留两位小数。
  • %s:输出字符串。
  • %c:输出字符。
  • %x:输出整数的十六进制表示。
  • %o:输出整数的八进制表示。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdio>  // 包含 printf 函数所需的头文件

int main() {
int age = 25;
double height = 1.75;

// 打印整数
printf("Age: %d\n", age);

// 打印浮点数,保留两位小数
printf("Height: %.2f\n", height);

// 打印字符串
printf("Name: %s\n", "John");

// 打印字符
printf("Initial: %c\n", 'J');

// 打印十六进制整数
int number = 255;
printf("Hexadecimal: %x\n", number);

return 0;
}

输出:

1
2
3
4
5
Age: 25
Height: 1.75
Name: John
Initial: J
Hexadecimal: ff

格式控制:

printf 支持许多格式控制选项,如指定输出的宽度、对齐、填充字符、精度等。

示例:指定宽度、对齐和填充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio>

int main() {
int num = 42;

// 指定最小宽度为 10,右对齐,空格填充
printf("|%10d|\n", num); // 输出: | 42|

// 指定最小宽度为 10,左对齐,空格填充
printf("|%-10d|\n", num); // 输出: |42 |

// 使用零填充,指定宽度为 10
printf("|%010d|\n", num); // 输出: |0000000042|

return 0;
}

输出:

1
2
3
|        42|
|42 |
|0000000042|

关于 print

在 C++ 标准库中没有 print 函数。虽然很多现代编程语言(如 Python、JavaScript)使用 print 来输出信息,但 C++ 中没有内置的 print 函数。你可以使用 printfcout 来实现输出功能。

1. 使用 printf

如前所述,printf 是 C 和 C++ 中常用的格式化输出函数,适用于需要精确控制输出格式的场景。

2. 使用 cout

C++ 更倾向于使用 cout 来进行输出,这个函数来自 C++ 标准库 <iostream> 头文件。它更加面向对象,且支持流式操作,适合大多数简单的输出需求。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

int main() {
int age = 25;
double height = 1.75;

// 使用 cout 打印输出
std::cout << "Age: " << age << std::endl;
std::cout << "Height: " << height << std::endl;

return 0;
}

输出:

1
2
Age: 25
Height: 1.75

总结:

  • printf 是一个 C 语言中的标准输出函数,也可以在 C++ 中使用,提供了格式化输出的强大功能。它通过格式化字符串来控制输出的精度、对齐、宽度等,适用于需要精确控制输出格式的场景。
  • C++ 标准库中没有直接的 print 函数,通常使用 printfcout 来输出信息。如果你不需要复杂的格式控制,cout 是 C++ 中的推荐方式。

 

三.补充PS:

科学记数法(Scientific Notation)通常用于表示非常大或非常小的数字,目的是将数字表示得更加简洁和易于处理。你提到的 e 符号其实就是科学记数法的一种表示方式,表示“乘以 10 的幂”。这种表示方法在计算机科学和数学中非常普遍。现在,我们来详细解释一下为什么会用 e 而不是传统的“数字的几次方”。

科学记数法的基本形式:

科学记数法的基本形式是:

$$ a \times 10^b $$

其中:

  • ( a ) 是一个有效数字(通常是一个在 1 到 10 之间的数字)。
  • ( b ) 是一个整数,表示 10 的幂次。

例如:

  • ( 3.14 \times 10^2 = 314 )
  • ( 1.23 \times 10^{-4} = 0.000123 )

这种表示法有效地将大数和小数缩写成简洁的形式,方便显示和计算。

为什么使用 e 符号?

在计算机系统中,尤其是在 C++ 中,科学记数法常常使用 e 来表示“乘以 10 的幂”,这种方式来源于数学中的“指数记法”。e 代表的是“乘以 10 的某个幂次”。所以,数字的科学记数法可以写成:

$$ a \times 10^b $$

在计算机中,通常使用 e 来表示这个关系。例如:

  • 1.23e2 等价于 ( 1.23 \times 10^2 )(即 123)
  • 4.56e-3 等价于 ( 4.56 \times 10^{-3} )(即 0.00456)

e 是如何产生的?

e 来自于数学中指数表示法,它是 exponent(指数)的简写。我们可以把它看作是表达 “10 的幂” 的一个标记。例如:

  • ( 3.14 \times 10^2 ) 在计算机表示中会写作 3.14e2
  • ( 1.23 \times 10^{-4} ) 会写作 1.23e-4

这使得科学记数法更简洁,不需要显示完整的 × 10^ 部分。

举例:

  1. 1.23e2:
    这表示 ( 1.23 \times 10^2 = 123 )。

  2. 1.23e-2:
    这表示 ( 1.23 \times 10^{-2} = 0.0123 )。

  3. 4.56e5:
    这表示 ( 4.56 \times 10^5 = 456000 )。

  4. 9.8e-3:
    这表示 ( 9.8 \times 10^{-3} = 0.0098 )。

为什么不直接使用 “数字的几次方”?

传统的数学表示中,我们可以写作 ( 1.23 \times 10^2 ),但在计算机中,尤其是在编程语言中,e 符号为简洁的表达方式。使用 e 而不是完全展开的形式,能够方便地处理非常大的数字或非常小的数字。由于计算机中的浮点数通常采用二进制表示,使用 e 来表示科学记数法符合计算机内部的存储与计算方式,使得它既简洁又能有效地表达指数。

小结:

  • e 是科学记数法中的标准符号,代表“乘以 10 的某个幂”。
  • 它是 exponent(指数)的缩写,在数学和计算机中广泛使用。
  • e 使得浮点数表示更加简洁,特别是在计算机程序中,避免了显示冗长的“乘以 10 的幂”部分。

 

注:以上内容仅供学习交流使用,禁止用于非法目的。请自觉遵守法律规定。本网站所有内容仅限于学习交流和娱乐,任何非法用途均由使用者个人承担责任。

鸣心/Write

C++学习基础笔记-输入&输出+科学记数法
https://b.wihi.top/posts/e0f10f69.html
作者
鸣心
发布于
2024年11月10日
许可协议
本站全部文章除在文章开头特别声明外,均采用:BY-NC许可协议。转载请标明出处!