蓝桥杯之c++入门(二)【输入输出(上)】

目录

  • 前言
    • 1.getchar和 putchar
      • 1.1 getchar()
      • 1.2 putchar()
    • 2.scanf和 printf
      • 2.1 printf
        • 2.1.1基本用法
        • 2.1.2占位符
        • 2.1.3格式化输出
          • 2.1.3.1 限定宽度
          • 2.1.3.2 限定小数位数
      • 2.2 scanf
        • 2.2.1基本用法
        • 2.2.2 占位符
        • 2.2.3 scanf的返回值
      • 2.3练习
        • 练习1:浮点除法
        • 练习2:甲流疫情死亡率
        • 练习3:温度表达转化
        • 练习4:计算并联电阻的阻值
        • 练习5:与圆相关的计算
        • 练习6:对齐输出
        • 练习7:糖果游戏
    • 3.cin和 cout
      • 3.1基本用法
      • 3.2 连续输入输出
      • 3.3 cout的格式输出(加餐)
        • 3.3.1 控制宽度和填充(加餐)
        • 3.3.2 控制数值格式 (加餐)
        • 3.3.3 控制整数格式(加餐)
        • 3.3.4 控制对齐方式(加餐)
      • 3.4 练习
        • 练习1:数字反转
        • 练习2:三⻆形⾯积
  • 总结


前言

编程的世界里,输入与输出是程序与用户交互的桥梁。无论是简单的数据处理,还是复杂的算法实现,输入输出始终是不可或缺的环节。本章将深入探讨C/C++语言中输入输出的多种方式,从基础的getchar和putchar函数,到功能强大的scanf和printf,再到C++特有的cin和cout流对象,我们将逐步剖析它们的使用方法、特点以及适用场景。


正文开始

1.getchar和 putchar

getchar()getchar()和 putchar() 是属于C语言的库函数,C++是兼容C语言的,所以C++中只要正确包含头文件也可以正常使用这两个函数。

1.1 getchar()

函数原型如下:

int getchar ( void);

在这里插入图片描述

**getchar()**函数返回用户从键盘输入的一个字符,使用时不带有任何参数。

程序运行到这个命令就会暂停,等待用户从键盘输入,等同于使用cin或scanf() 方法读取一个字符。

它的原型定义在头文件<cstdio>

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{int ch;ch = getchar();cout << ch << endl;cout << (char)ch << endl;return 0;
}

getchar()不会忽略起首的空白字符,总是返回当前读取的第一个字符,无论是否为空格。

换行算不算字符呢?答案是肯定的;

我们来看下面的代码:

#include <iostream>
using namespace std;
int main()
{int ch = getchar();cout << (char)ch << endl;cout << ch << endl;ch = getchar();cout << (char)ch;cout << ch << endl;cout << "xxxxx" << endl;return 0;
}

运行结果:
在这里插入图片描述
上面的代码我们输入了一个a回车,getchar先读取一个字符a打印a和其的ASCII码值97,再读取换行,打印换行,和其ASCII码值10;

如果读取失败,返回常量EOF,由于EOF通常是-1,所以返回值的类型要设为int,而不是char。

如何让getchar()函数读取失败,返回-1呢?其实需要在输入字符之前,直接按Ctrl+z就可以。

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{int ch;ch = getchar();cout << ch << endl;return 0;
}

getchar() 通常和 putchar() 是一对儿,配合使用的

1.2 putchar()

函数原型如下:

int putchar( int character );

putchar()函数将它的参数字符输出到屏幕,它的原型定义在头文件<cstdio>

#include <cstdio>
int main()
{int ch = 0;ch = getchar();putchar(ch);return 0;
}

操作成功时, putchar()返回输出的字符,否则返回常量 EOF。

小提示:

当用到快速读写,就会用到这两个函数。

2.scanf和 printf

scanf() 和 printf()是属于C语言的库函数,C++是兼容C语言的,所以C++中只要正确包含头文件也可以正常使用这两个函数。而且这两个函数在算法竞赛题目中使用的非常频繁,尤其是在输出格式控制中,所以接下来我们这里认真学习一下。

对printf和scanf有更深入的了解可以看看小编的这篇文章:
C语言的 printf 与 scanf

2.1 printf

printf() 函数原型如下:

int printf ( const char * format, ... );
2.1.1基本用法

printf()的作用是将参数文本输出到屏幕。

它名字里面的f代表format(格式化),表示可以定制输出文本的格式。

#include <cstdio>
int main() 
{printf("Hello World");return 0;
}

上面命令会在屏幕上输出一行文字“Hello World”。

printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。

为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n。

#include <cstdio>
int main() 
{printf("Hello World\n");return 0;
}

如果文本内部有换行,也是通过插入换行符来实现,如下方代码:

#include <cstdio>
int main() 
{printf("Hello\nWorld");return 0;
}
2.1.2占位符

printf() 可以在输出文本中指定占位符。

所谓“占位符”,就是这个位置可以用其他值代入。

#include <cstdio>
// 输出 There are 3 apples
int main()
{printf("There are %d apples\n", 3);return 0;
}

上面示例中,There are %d apples\n是输出文本,里面的%d就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律为百分号%,第二个字符表示占位符的类型,%d表示这里代入的值必须是一个整数。

printf() 的第二个参数就是替换占位符的值,上面的例子是整数3替换%d。执行后的输出结果就是 There are 3 apples。

常用的占位符除了%d,还有%s表示代入的是字符串。

#include <cstdio>
int main()
{printf("%s will come tonight\n", "zhangsan");return 0;
}

上面示例中,%s表示代入的是一个字符串,所以printf() 的第二个参数就必须是字符串,这个例子是zhangsan。执行后的输出就是zhangsan will come tonight。

输出文本里面可以使用多个占位符。

#include <cstdio>
int main()
{printf("%s says it is %d o'clock\n", "lisi", 21);return 0;
}

上面示例中,输出文本%s says it is %d o'clock 有两个占位符,第一个是字符串占位符%s,第二个是整数占位符%d,分别对应printf()的第二个参数(lisi)和第三个参数(21)。执行后的输出就是lisi says it is 21 o'clock。

printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个。如果参数个数少于对应的占位符,printf() 可能会输出内存中的任意值。

占位符列举:

printf() 的占位符有许多种类,与数据类型相对应。

下面列出常用的占位符,方便查找,具体含义在后面章节介绍。

占位符介绍
%d十进制整数。
%lld十进制long long int类型。
%f小数(包含float类型和double类型)。
%Lflong double 类型浮点数。
%c字符。
%S字符串。
%a十六进制浮点数,字母输出为小写。
%A十六进制浮点数,字母输出为大写。
%e使用科学计数法的浮点数,指数部分的e为小写。
%E使用科学计数法的浮点数,指数部分的E为大写。
%i整数,基本等同于%d。
%g6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e 为小写。
%G等同于%g,唯一的区别是指数部分的E为大写。
%hd十进制short int类型。
%ho八进制short int类型。
%hx十六进制short int类型。
%huunsigned short int类型。
%ld十进制 long int类型。
%lo八进制long int类型。
%lx十六进制long int类型。
%luunsigned long int 类型。
%llo八进制long long int类型。
%llx十六进制 long long int类型。
%lluunsigned long long int 类型。
%Le科学计数法表示的long double类型浮点数。
%n已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。
八进制整数。
%p指针。
%u无符号整数(unsigned int)。
%x十六进制整数。
%zdsize_t类型。
%%输出一个百分号。
2.1.3格式化输出

printf() 可以定制占位符的输出格式。

2.1.3.1 限定宽度

printf()允许限定占位符的最小宽度。

#include <cstdio>
int main()
{printf("%5d\n", 123); // 输出为 " 123"return 0;
}

上面示例中,%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐,即输出内容前面会有空格
在这里插入图片描述

如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的%的后面插入一个’-'号。

int main()
{printf("%-5d\n", 123); // 输出为 " 123"return 0;
}

在这里插入图片描述

上面示例中,输出内容123的后面添加了空格。

对于小数,这个限定符会限制所有数字的最小显示宽度。

#include <cstdio>
// 输出 " 123.450000"
int main()
{printf("%12f\n", 123.45);return 0;
}

上面示例中,%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45输出结果的头部会添加2个空格。

2.1.3.2 限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成%.2f。

#include <cstdio>
// 输出 Number is 0.50
int main()
{printf("Number is %.2f\n", 0.5);return 0;}

上面示例中,如果希望小数点后面输出3位(0.500),占位符就要写成%.3f。

这种写法可以与限定宽度占位符,结合使用。


// 输出为 "  0.50"
int main()
{printf("%6.2f\n", 0.5);return 0;
}

上面示例中,%6.2f表示输出字符串最小宽度为6,小数位数为2。所以,输出字符串的头部有两个空格。

最小宽度和小数位数这两个限定值,都可以用*代替,通过printf() 的参数传入。

#include <cstdio>
int main()
{printf("%*.*f\n", 6, 2, 0.5);return 0;
}
// 等同于printf("%6.2f\n", 0.5);

在这里插入图片描述

上面示例中, %★.★f的两个星号通过printf() 的两个参数6和2传入。

2.2 scanf

scanf() 函数原型如下:

int scanf ( const char * format,...);
2.2.1基本用法

scanf() 函数用于读取用户的键盘输入。

程序运行到scanf() 这个语句时,会停下来,等待用户从键盘输入。

用户输入数据、按下回车键后,scanf() 就会处理用户的输入,将其存入变量。

scanf()的语法跟printf() 类似。

请看下面的代码:

#include <cstdio>
int main()
{int i = 0;scanf("%d", &i);printf("%d\n", i);return 0;
}

小提示:

特别注意,scanf函数的占位符后面一般不会加\n,\n是换行,一般在输出的时候才使用

它的第一个参数是一个格式字符串,里面会放置占位符(与printf()的占位符基本一致),告诉编译器如何解读用户的输入,需要提取的数据是什么类型。这是因为C语言的数据都是有类型的,scanf() 必须提前知道用户输入的数据类型,才能处理数据。

它的其余参数就是存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。

上面示例中,scanf()的第一个参数%d,表示用户输入的应该是一个整数。%d就是一个占位符,%是占位符的标志,d表示整数。第二个参数&i表示,将用户从键盘输入的整数存入变量i。

小提示:

scanf函数中存储数据的变量前面必须加上&运算符(指针变量除外),因为scanf()需要的是地址,必须将变量i的地址取出来传给scanf函数。

如果这里的变量i是数组,那就不用加&运算符。(后期慢慢介绍)

下面是一次从键盘读取多个变量的例子:

先来一个简单的:

#include <cstdio>
int main()
{int a, b, c, d;scanf("%d%d%d%d", &a, &b, &c, &d);printf("%d %d %d %d\n", a, b, c, d);return 0;
}

小提示:

scanf 函数中指定的格式和给程序输入的数据格式要严格的匹配,否则可能不能得到想要的值。

再换一个例子:

#include <cstdio>
int main()
{int i = 0;int j = 0;float x = 0;float y = 0;scanf("%d%d%f%f", &i, &j, &x, &y);printf("i = %d\n", i);printf("j = %d\n", j);printf("x = %f\n", x);printf("y = %f\n", y);return 0;
}

上面示例中,格式字符串%d%d%f%f,表示用户输入的前两个是整数,后两个是浮点数。

比如键盘输入1-20 3.4-4.0e3,这四个值依次放入i、j、x、y四个变量。

scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。

所以,用户输入的数据之间,有一个或多个空格不影响scanf()解读数据。另外,用户使用回车键,将输入分成几行,也不影响解读。

1
-20
3.4
-4.0e3

上面示例中,用户分成四行输入,得到的结果与一行输入是完全一样的。每次按下回车键以后,scanf()就会开始解读,如果第一行匹配第一个占位符,那么下次按下回车键时,就会从第二个占位符开始解读。

scanf() 处理用户输入的原理是:

用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。

#include <cstdio>
int main()
{int x = 0;float y = 0;// 用户输入 " -13.45e12# 0"scanf("%d", &x);printf("%d\n", x);scanf("%f", &y);printf("%f\n", y);return 0;
}

上面示例中,scanf() 读取用户输入时,%d占位符会忽略起首的空格,从-处开始获取数据,读取到-13停下来,因为后面的.不属于整数的有效字符。这就是说,占位符%d会读到-13。

第二次调用scanf() 时,就会从上一次停止解读的地方,继续往下读取。这一次读取的首字符是.,由于对应的占位符是%f,会读取到.45e12,这是采用科学计数法的浮点数格式。后面的#不属于浮点数的有效字符,所以会停在这里。

由于scanf() 可以连续处理多个占位符,所以上面的例子也可以写成下面这样。

#include <stdio.h>
int main()
{int x = 0;float y = 0;// ⽤⼾输⼊ " -13.45e12# 0"scanf("%d%f", &x, &y);printf("%d %f\n", x, y);return 0;
}
2.2.2 占位符

scanf() 常用的占位符如下,与 printf()的占位符基本一致。

占位符介绍
%c字符。
%d整数。
%ffloat类型浮点数。
%lfdouble类型浮点数。
%Lflong double类型浮点数。
%s字符串。
%[]在方括号中指定一组匹配的字符(比如%[0-9]),遇到不在集合之中的字符,匹配将会停止。

上面所有占位符之中,除了%c以外,都会自动忽略起首的空白字符。%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。

如果要强制跳过字符前的空白字符,可以写成scanf(" %c", &ch) ,即%c前加上一个空格,表示跳过零个或多个空白字符。

#include <cstdio>
int main()
{char ch = 0;scanf("%c", &ch);printf("--%c--\n", ch);return 0; 
}

结果演示:

在这里插入图片描述

为了避免在读取这些空⽩字符,可以换⼀种⽅式:

 #include <cstdio>
int main()
{char ch = 0;scanf(" %c", &ch);//%c前的空格会让scanf强制跳过空白字符,去读取非空白字符printf("--%c--\n", ch);return 0; 
}

结果演⽰:
在这里插入图片描述

了解这一点后,当‰c和%d等占位符连续使用的时候,也要注意,%c默认不会跳过空白字符的,所以在输入的时候,要非常小心,比如:

#include <cstdio>
int main() 
{ int a;char ch;scanf("%d%c", &a, &ch);printf("%d %c\n", a, ch);return 0; 
}

在这里插入图片描述

如果在输入的时候,就是想在整数和字符之间加上空格,那么scanf中的格式串中%c的前面就要加上空格。

#include <cstdio>
int main() 
{ int a;char ch;scanf("%d %c", &a, &ch);printf("%d %c\n", a, ch);return 0; 
}

正确的输入:

在这里插入图片描述

总之要注意,scanf中规定的输入格式和控制台输入数据的格式要保持一致才可能得到正确的结果。

2.2.3 scanf的返回值

scanf() 的返回值是一个整数,表示成功读取的变量个数。

如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)。

#include <cstdio>
int main()
{int a = 0;int b = 0;float f = 0.0f;int r = scanf("%d %d %f", &a, &b, &f);printf("a=%d b=%d f=%f\n", a, b, f);printf("r = %d\n", r);return 0;
}

输入输出测试:
在这里插入图片描述
如果输⼊2个数后,按 ctrl+z ,提前结束输⼊:
在这里插入图片描述

在Dev-C++中按下ctrl+z,才结束了输入,我们可以看到r是2,表示正确读取了2个数值。

如果输入的数据一个都不能匹配成功的话,则输出的r是0.

在这里插入图片描述

如果一个数字都不输入,直接按ctrl+z ,输出的r是-1,也就是EOF.

在这里插入图片描述

掌握了scanf的返回值,我们一般会通过scanf的返回值来处理多组数据输入的竞赛题目,在后期的课程中大家都会一一见到的。

2.3练习

练习1:浮点除法

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{int a,b;cin >> a >> b;float  c = (float)a/b;printf("%.3f",c);return 0;
}
练习2:甲流疫情死亡率

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{int a,b;cin >> a >> b;float c = b*1.0/a*100.0;printf("%.3f%%", c);return 0;
}

小提示:

1.百分号%可以这样输出:printf("%%");

2.注意a和b的取值范围

3.百分比不是直接b/a,是需要乘以100.0的,因为需要得到小数,所以要是小数除法

4.有时候:先乘100再除a,还是先除a再乘100是有差异的。

比如:4/8*100和4*100/8的结果就有差异的。

练习3:温度表达转化

在这里插入图片描述

#include <cstdio>
int main()
{double f = 0;scanf("%lf", &f);double c = 5 * (f - 32) / 9.0;printf("%.5lf\n", c);return 0;
}
练习4:计算并联电阻的阻值

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{double r1,r2;cin >> r1 >> r2;printf("%.2lf", 1/((1/r1)+(1/r2)));return 0;
}
练习5:与圆相关的计算

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{double r = 0;double p = 3.14159;cin >> r;printf("%.4lf %.4lf %.4lf",2*r,2*p*r,r*r*p);return 0;
}
练习6:对齐输出

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{int a, b, c;cin >> a >> b >> c;printf("%8d %8d %8d",a,b,c);return 0;
}
练习7:糖果游戏

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{int a, b, c, d, e;cin >> a >> b >> c >> d >> e;//1号a /= 3;b += a;e += a;//2号b /= 3;c += b;a += b;//3号c /= 3;b += c;d += c;//4号d /= 3;c += d;e += d;//5号e /= 3;d += e;a += e;printf("%5d%5d%5d%5d%5d\n", a, b, c, d, e);return 0;} 

3.cin和 cout

前面我们已经提到过在C++中提供了:cin和cout两个流对象。

cin是C++中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用cin来进行数据的提取,cin一般是和>>(流提取运算符)配合使用的。cin的功能和scanf 是类似的。

cout是C++中提供的标准输出流对象,一般针对的控制台的窗口,也就是将数据以字符流的形式输出到控制台窗口上显示。cout 一般是和<<(流插入运算符)配合使用。cout的功能和printf|是类似的。

我们在写程序的时候,经常需要处理数据,不管什么类型的数据都是以字符流的形式输入和输出的,也就是不管在键盘上输入什么类型的数据,还是将程序中的各种类型的数据输出显示到控制台屏幕上,都是以字符流的形式处理的。

cin和cout的输入输出非常的方便,不需要手动控制格式,能够自动识别变量类型。

3.1基本用法

#include <iostream>
using namespace std;
int main()
{int a;char c;float f;cin >> a; // 读取⼀个整数cin >> c; // 读取⼀个字符cin >> f; // 读取取⼀个浮点数cout << "打印结果:"<<endl;cout << a << endl;cout << c << endl;cout << f << endl;return 0;
}

在这里插入图片描述

当我们在键盘输入数据的时候,输入的数据不能被cin解读为对应类型的数据,那么读取也就结束了。

比如:

在这里插入图片描述

cin 使用细节:

  • cin 在读取的时候是根据用户的输入,从前往后,从上往下依次扫描。

  • cin在读取的过程中遇到空格,自动会跳过,所以不要担心在想要的字符前输入空白字符。

  • 当一行读取结束的时候,会自动换行,读取下一行的内容。

  • cin后面不可以跟换行endl

3.2 连续输入输出

如果我们一次要输入/输出多个数据,那cin和cout能做到吗?可以!

在上面的代码中,使用cout 进行变量的输出,实质上是将变量插入到cout 对象里,并以cout 对象作为返回值返回,因此我们还可以用<<在后面连续输出多个内容,通过连续输入输出的方式对代码进行编写,效果如下:

cin举例:

#include <iostream>
using namespace std;
int main()
{int a = 0;int b = 0;//同类型变量连续输⼊cin >> a >> b; //以最后⼀次输⼊为准//添加换⾏endlcin >> a >> endl; //代码编译报错return 0;
}
#include <iostream>
using namespace std;
int main()
{//不同类型变量的连续输⼊int a = 0;char ch = 0;float f = 0;cin >> a >> ch >> f;return 0;
}

cout举例:

#include <iostream>
using namespace std;
int main()
{//对同⼀类型变量连续输出int a = 10;int b = 20cout << a << " " << b << endl;return 0;
}
#include <iostream>
using namespace std;
int main()
{//⽀持相同/不同类型变量的连续输⼊char ch = 0;float f = 0.1;cout << ch << f << endl;//格式化输出:添加(任意)空格和字符串cout << "ch:" << ch << " f:" << f << endl;//格式化输出:多次换⾏cout << ch << endl << endl;return 0;
}

cin 的好处:

当输入若干个变量(也就是数据量很少)的时候,我们就可以通过>>把所有的数据用一行代码完成接收,而且无需关心数据的类型,和scanf函数比起来代码的书写非常简洁明了。

cout的好处:

cout 也可以用来连续输出多个数值,而且无需考虑数值的类型,因为它本身会做类型处理,和printf比起来比较方便。

3.3 cout的格式输出(加餐)

printf 函数在输出数据的时候,可以指定格式来输出,比如:指定宽度,比如指定小数点后的位数,对齐方式等等。那么cout 在数据的时候能否指定格式呢?答案是可以的!cout 结合<iomanip>(I0 manipulators)头文件中的操纵符,可以灵活控制输出格式,从而满足各种格式化需求。

3.3.1 控制宽度和填充(加餐)
  • setw:设置字段宽度(只对紧接着的输出项有效)。

  • setfill:设置填充字符。

#include <iostream>
using namespace std;
#include <iomanip>
int main()
{int a = 123;cout << "默认宽度: " << a << endl;cout << "宽度设置为10: " << setw(10) << a << endl;cout << "宽度为10,不够时填充*: " << setw(10) << setfill('*') << a << endl;return 0;
}

结果演示:
在这里插入图片描述

3.3.2 控制数值格式 (加餐)
  • fixed :以固定⼩数点表⽰浮点数,设置后就不会以科学计数法展示了。
  • scientific :以科学计数法表⽰浮点数。
  • setprecision :设置浮点数的精度,以控制⼩数点后的数字位数,⼀般先固定⼩数点,再设置精度。
#include <iomanip>
int main()
{float a = 12.349584521314;cout << "默认:" << a << endl;cout << "固定小数点方式: " <<fixed << a << endl;cout << "科学计数法方式: " << scientific << a << endl;cout << "固定小数点,小数点后2位有效数字: " << fixed << setprecision(2) << a << endl;return 0;
}

在这里插入图片描述

3.3.3 控制整数格式(加餐)
  • dec :以⼗进制格式显示整数(默认)。
  • hex :以⼗六进制格式显示整数。
  • oct :以⼋进制格式显示整数。
#include <iostream>
using namespace std; 
#include <iomanip>
int main() {int n = 255;cout << "十进制 : " << dec << n << endl;cout << "十六进制: " << hex << n << endl;cout << "十进制 : " << oct << n << endl;return 0;
}

在这里插入图片描述

3.3.4 控制对齐方式(加餐)
  • left :左对⻬。
  • right :右对⻬(默认)。
#include <iostream>
using namespace std; 
#include <iomanip>
int main() 
{int n = 123;cout << "右对齐: " << setw(10) << right << n << endl;cout << "左对齐: " << setw(10) << left << n << endl;return 0;
}

在这里插入图片描述

3.4 练习

练习1:数字反转

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{char a,b,c,d,e;cin >> a >> b >> c >> d >> e;cout << e << d << c << b << a << endl;return 0;
}

⼩提⽰:

从题⽬的中可以看出,想要输⼊⼩数,然后反转输出,如果真按照这样的思路往下⾛,也能解决问题,但是可能就复杂了。其实在不管什么类型的数据都是以字符流的形式输⼊和输出的,那我们就可以把输⼊的这个⼩数和⼩数点,都当做字符依次读取,然后再按照想要的顺 序输出就⾏。
如果使⽤ scanf 和 printf函数要指定好占位符,如果使⽤ cin/cout 要指定好变量的类型;

练习2:三⻆形⾯积

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
#include <cmath>
#include <iomanip>
int main()
{double a, b, c;cin >> a >> b >> c;double p = (a + b + c)/2;double s = sqrt(p*(p - a)*(p - b)*(p - c));cout << fixed << setprecision(1) << s << endl;return 0;
}

总结

本章对C/C++中的输入输出进行了全面而深入的讲解。从基础的字符输入输出函数getchar和putchar,到功能强大的格式化输入输出函数scanf和printf,再到C++中灵活的流对象cin和cout,我们不仅学习了它们的使用方法,还通过大量实例展示了如何在实际编程中灵活运用这些工具。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker数据卷管理及优化

一、基础概念 1.docker数据卷是一个可供容器使用的特殊目录&#xff0c;它绕过了容器的文件系统&#xff0c;直接将数据存在宿主机上。 2.docker数据卷的作用&#xff1a; 数据持久化&#xff1a;即使容器被删除或重建数据卷中的数据仍然存在 数据共享&#xff1a;多个容器可以…

java:mysql切换达梦数据库(五分钟适配完成)

背景 因为项目需要国产数据库的支持&#xff0c;选择了达梦数据库&#xff0c;由于我们之前使用的是MySQL今天我们就来说一说&#xff0c;如何快速的切换到达梦数据库&#xff0c;原本这一章我打算写VIP章节的后续想想&#xff0c;就纯分享。毕竟是国产数据库迁移数据库 这里…

在游戏本(6G显存)上本地部署Deepseek,运行一个14B大语言模型,并使用API访问

在游戏本6G显存上本地部署Deepseek&#xff0c;运行一个14B大语言模型&#xff0c;并使用API访问 环境说明环境准备下载lmstudio运行lmstudio 下载模型从huggingface.co下载模型 配置模型加载模型测试模型API启动API服务代码测试 deepseek在大语言模型上的进步确实不错&#xf…

[leetcode]两数之和等于target

源代码 #include <iostream> #include <list> #include <iterator> // for std::prev using namespace std; int main() { int target 9; list<int> l{ 2, 3, 4, 6, 8 }; l.sort(); // 确保列表是排序的&#xff0c;因为双指针法要求输入是…

C# OpenCV机器视觉:学生注意力监测

小王是一位充满活力的年轻教师&#xff0c;刚接手了一个新班级。他满心欢喜地准备在课堂上大显身手&#xff0c;把自己的知识毫无保留地传授给学生。可没上几节课&#xff0c;他就发现了一个让人头疼的问题&#xff1a;课堂上总有那么几个学生注意力不集中&#xff0c;要么偷偷…

【嵌入式】C语言多文件编程与内联函数

文章目录 0 前言1 从C语言编译说起2 重复定义错误&#xff08;ODR violation&#xff09;和条件编译3 内联函数inline和static inline4 总结 0 前言 最近在研究ARM内核代码时&#xff0c;看到core_cm3.h中有大量的内联函数&#xff0c;为此查阅了很多资料&#xff0c;也和朋友讨…

10分钟本地部署Deepseek-R1

10分钟本地部署DeepSeek-R1 什么是DeepSeek-R1快速本地部署DeepSeek-R1Ollama下载Ollama安装检查是否安装成功 安装DeepSeek-R1模型模型使用测试 什么是DeepSeek-R1 DeepSeek-R1是中国的深度求索&#xff08;DeepSeek&#xff09;公司开发的智能助手。其具有极佳的语义理解和生…

Office / WPS 公式、Mathtype 公式输入花体字、空心字

注&#xff1a;引文主要看注意事项。 1、Office / WPS 公式中字体转换 花体字 字体选择 “Eulid Math One” 空心字 字体选择 “Eulid Math Two” 2、Mathtype 公式输入花体字、空心字 2.1 直接输入 花体字 在 mathtype 中直接输入 \mathcal{L} L \Large \mathcal{L} L…

【C++】STL——vector底层实现

目录 &#x1f495; 1.vector三个核心 &#x1f495;2.begin函数&#xff0c;end函数的实现&#xff08;简单略讲&#xff09; &#x1f495;3.size函数&#xff0c;capacity函数的实现 &#xff08;简单略讲&#xff09; &#x1f495;4.reserve函数实现 &#xff08;细节…

7、怎么定义一个简单的自动化测试框架?

定义一个简单的自动化测试框架可以从需求理解、框架设计、核心模块实现、测试用例编写和集成执行等方面入手&#xff0c;以下为你详细介绍&#xff1a; 1. 明确框架需求和范围 确定测试类型&#xff1a;明确框架要支持的测试类型&#xff0c;如单元测试、接口测试、UI 测试等…

AI取代人类?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

C语言-----数据结构从门到精通

1.数据结构基本概念 数据结构是计算机中存储、组织数据的方式&#xff0c;旨在提高数据的访问和操作效率。它是实现高效算法和程序设计的基石。 目标:通过思维导图了解数据结构的知识点,并掌握。 1.1逻辑结构 逻辑结构主要四种类型: 集合&#xff1a;结构中的数据元素之…

华为小米vivo向上,苹果荣耀OPPO向下

日前&#xff0c;Counterpoint发布的手机销量月度报告显示&#xff0c;中国智能手机销量在2024年第四季度同比下降3.2%&#xff0c;成为2024年唯一出现同比下滑的季度。而对于各大智能手机品牌来说&#xff0c;他们的市场份额和格局也在悄然发生变化。 华为逆势向上 在2024年第…

每日一博 - 三高系统架构设计:高性能、高并发、高可用性解析

文章目录 引言一、高性能篇1.1 高性能的核心意义1.2 影响系统性能的因素1.3 高性能优化方法论1.3.1 读优化&#xff1a;缓存与数据库的结合1.3.2 写优化&#xff1a;异步化处理 1.4 高性能优化实践1.4.1 本地缓存 vs 分布式缓存1.4.2 数据库优化 二、高并发篇2.1 高并发的核心意…

吴恩达深度学习——有效运作神经网络

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 训练集、验证集、测试集偏差、方差正则化正则化参数为什么正则化可以减少过拟合Dropout正则化Inverted Dropout其他的正则化方法数据增广Early stopping 归一化梯度消失与梯度爆…

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现

伴随近年来新型储能技术的高质量规模化发展&#xff0c;储能电站作为新能源领域的重要载体&#xff0c; 旨在配合逐步迈进智能电网时代&#xff0c;满足电力系统能源结构与分布的创新升级&#xff0c;给予相应规模 电池管理系统的设计与实现以新的挑战。同时&#xff0c;电子系…

K8s 分布式存储后端(K8s Distributed Storage Backend)

K8s 分布式存储后端 在 K8s 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 K8s 环境中&#xff0c;应用程序通常被容器化并跨多个节点部署。虽然 K8s 可以有效处理无状态应用程序&#xff0c;但有状态应用程序需要持久存储来维护…

FFmpeg:多媒体处理的瑞士军刀

FFmpeg&#xff1a;多媒体处理的瑞士军刀 前言 FFmpeg 是一个功能强大且跨平台的开源多媒体框架&#xff0c;广泛应用于音视频处理领域。 它由多个库和工具组成&#xff0c;能够处理各种音视频格式&#xff0c;涵盖编码、解码、转码、流处理等多种操作。 无论是专业视频编辑…

unordered_map/set的哈希封装

【C笔记】unordered_map/set的哈希封装 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…

编程AI深度实战:大模型哪个好? Mistral vs Qwen vs Deepseek vs Llama

​​ 系列文章&#xff1a; 编程AI深度实战&#xff1a;私有模型deep seek r1&#xff0c;必会ollama-CSDN博客 编程AI深度实战&#xff1a;自己的AI&#xff0c;必会LangChain-CSDN博客 编程AI深度实战&#xff1a;给vim装上AI-CSDN博客 编程AI深度实战&#xff1a;火的编…