04C++顺序结构(3)
一、设置域宽setw()
教学视频1
输出的内容所占的总宽度成为域宽,有些高级语言中称为场宽。使用setw()前,必须包含头文件iomanip,即#include。头文件iomanip,用来声明一些“流操作符”,需要一定格式输入输出时,就需要用到它,比较常用的有设置域宽、设置左右对齐、设置实数的精确度等。
setw(n)的作用是设置输出宽度为n,默认为右对齐,并且用空格填充。例如:cout << std::setw(5) << "0" << "1" << endl,该语句就是设置字符串"0"的输出宽度为5,默认为右对齐,空格填充。若想使用其他符号填充(例如用''填充),则可以用cout << std::setw(5) << setfill('') << "0" << "1" << endl;如果想修改成左对齐,则只需要在std::setw(n)之前加上std::left即可。
setw()只对直接跟在后面的输出数据起作用。
当要输出的字符串宽度大于setw设置的宽度n时,直接输出想要输出的字符串即可(此时忽视setw设置的宽度)。
通过运行如下测试代码即可了解setw()的规则:
#include <iomanip>
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
/*默认为右对齐,此时加不加std::right都可以 */
cout << std::setw(5) << "0" << "1" << endl;
cout << std::setw(5) << "00" << "1" << endl;
cout << std::setw(5) << "000" << "1" << endl;
/*用<<left或者std::left改成左对齐*/
cout << std::left << std::setw(5) << "0" << "1" << endl;
cout << std::left << std::setw(5) << "00" << "1" << endl;
cout << std::left << std::setw(5) << "000" << "1" << endl;
/*当要输出的字符串宽度大于setw设置的宽度时,直接输出想要输出的字符串即可*/
cout << std::right <<std::setw(5) << "0000000" << "1" << endl;
/*用其他符号填充*/
cout << std::right <<std::setw(5) << setfill('*') << "0" << "1" << endl;
cout << std::left << std::setw(5) << setfill('*') << "0" << "1" << endl;
return 0;
}
英汉小词典:
iomanip:io是输入输出的缩写;
manip:是manipulator(操纵器)的缩写;
setw:set width的缩写,设置域宽;
练习:
(1)为了让计算机完成一个完整的任务而编写的一系列指令序列称为( )
A.命令 B.口令 C.程序 D.软件
(2)阅读程序写结果。
1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4 int main()
5 {
6 int a,b,c;
7 a=3;
8 b=4;
9 c=a*a+b*b;
10 cout<<a<<'*'<<a<<'+'<<b<<'*'<<b<<'='<<setw(2)<<c<<endl;
11 return 0;
12 }
3.完善程序:已知a为15,b为3,输出a-b的竖式计算。
1 #include <iostream>
2 /*头文件iomanip,用来声明一些“流操作符”,
3 需要一定格式输入输出时,就需要用到它,
4 比较常用的有设置域宽、设置左右对齐、
5 设置实数的精确度等。*/
6 #include <iomanip>
7 using namespace std;
8 int main()
9 {
10 int a,b,c;
11 a=15;
12 b=3;
13 c=a-b;
14 cout<<setw(5)<<a<<endl;
15 cout<<setw(2)<<'-'<<setw(3)<<____<<endl;
16 cout<<"------"<<endl;
17 cout<<________<<c<<endl;
18 return 0;
19 }
二、cin语句
教学视频1
cin>>a;输入一个数并赋值给变量a。
习惯上,将"cin"和流提取运算符">>"实现的输入语句简称为cin语句。
C++编程语言I/O流中的标准输入流,需要包含iostream头文件,即#include ,cin 分为两个音节 读为 "c in",音标 "/si:ɪn/"。
cin代表标准输入设备,使用右移运算符 ">>" 从设备键盘取得数据,送到输入流对象cin中,然后送到内存。
使用cin可以获得多个从键盘的输入值,其具体使用格式如下:
cin >> 变量1 >>变量2...>>变量n
示例:风之巅小学向全校师生发出“植树造林,还我绿色”的倡议,鼓励大家多植树,创造绿色家园,同学们都积极响应。向日葵班有43人,平均每人种2棵树;苹果班42人,平均每人种3棵树;草莓班45人,平均每人种2棵树。
当程序运行时,每班人数和平均每人种的颗数由客户输入,程序算出该班种的总颗数。
每个班的学生人数是不一样的,平均每人种树的棵数也会不一样,每次运行时都要更改程序,很不方便。能不能实现这样的功能:当程序运行时,每个班的人数和平均每人种的棵数由我们自己输入,程序能根据输入的数值计算出总的棵数?
由cin来实现,如cin>a的作用是输入一个数并赋值给变量a。
1 /*
2 试编一程序,分别计算出每个班总棵树。
3 */
4
5 #include <iostream> //包含输入输出流头文件iostream
6 using namespace std; //指明程序 使用命名空间std(标准)
7 int main()
8 {
9 int a,b,s;
10 cout<<"请输入人数和平均每人种的棵数:";
11 cin>>a;
12 cin>>b;
13 s=a*b;
14 cout<<"总的棵数:"<<s<<endl;
15 return 0;
16 }
英汉小词典:
cin:由c和in两个单词组成输入流。
2、练习:
(1)下面设备中,( )属于计算机的输入设备。
A.显示器 B.绘图仪 C.打印机 D.鼠标
(2)用cin语句重新编写交换两个变量的值的程序。
(3)阅读程序写结果
#include <iostream> //包含输入输出流头文件iostream
using namespace std; //指明程序 使用命名空间std(标准)
int main()
{
int s,a,b,c;
cin>>s>>a>>b>>c;
s-=a;
s-=b;
s-=c;
cout<<"ans="<<s<<endl;
return 0;
}
输入:200 10 20 30 50
输出:_________________
(4)完善程序
/*
3.完善程序
从键盘输入长方形的长和宽,输出长方形的周长。
*/
#include <iostream> //包含输入输出流头文件iostream
using namespace std; //指明程序 使用命名空间std(标准)
int main()
{
int a,b,c;
;
c=(a+b)*2;
cout<<"周长:"<< <<endl;
return 0;
}
三、输入输出.格式化
1. 输出
对于格式化输出,本节课将学习两个函数 scanf() 、 printf() 来取代之前的cin和cout方法;
- 假如,我们要输出一组运算等式:1 + 2 = 3,而1是变量a,2是变量b,3是a+b的运算结果;
int a = 1, b = 2;
// cout
cout << a << " + " << b << " = " << a + b;
cout << endl;
// printf
printf("%d + %d = %d", a, b, a + b);
printf() 函数极其方便的原因,它可以先按照自己的输出格式,先写出来,不需要头脑翻译;
然后把需要替换成变量的部分,用 %d 来表示即可,而后续对应的位置换成变量或表达式运算即可;
%d 这里表示占位的内容 是 整型,也有各种其它的占位符,这里罗列出常用的几个:
占位控制符 说明 %d 整数 %f 浮点数(float) %c 字符 %s 字符串 最终的语法结构如下:
printf(格式控制符, 占位替换列表)
2. 输入
从上面例子中,我们使用 scanf() 函数来控制输入:
int a, b;
// scanf
scanf("%d %d", &a, &b); // printf
printf("%d + %d = %d", a, b, a + b);
先了解下输入参数的格式需求:
scanf(格式控制符, 地址集)
暂时没有办法解释这个地址是什么意思?举个并不恰当但好理解的说明:
- 快递员给张三寄快递,直接送到张三手上;这是 cin
- 快递员给张三家地址寄快递,不管是凤巢、门卫代收还是家人收件,最终会交给张三;这是 scanf()
- 所以,a表示张三,&a表示张三家的地址;而sacanf() 参数要求是地址,故在变量前加&;
- 而这个知识点叫做 引用,是比较靠后的知识点,暂时不用理解;
- 后续,自然也会有 变量本身就是引用,反而参数不需要 & 符号;
3. 格式化
在使用 printf() 时,我们需要输出各种特殊字符,比如百分号,换行,以及场宽精度问题等:
符号 说明和示例 \\ 输出一个斜杠,printf("\\"); \n 换行,printf("\n"); %% 百分号,printf("%"); 数字 场宽,printf("%3d%5d"); 小数 精度,printf("%.2f", 3.1415926);
例程:
// 格式化
printf("%%\\\n");
// 场宽
printf("%3d%5d\n", a, b);
// 精度
printf("%.2f\n", 3.1415926);
// 场宽+精度
printf("%8.2f", 3.1415926);
参考阅读:
一、格式化输出函数:
格式化输入函数和格式化输出函数是C语言标准库函数.
printf()函数的一般语法格式如下:
printf("<格式化字符串>",<输出列表>);
1.格式化字符串:
用双引号括起来的字符串,字符串包含的普通字符,printf()函数将其原样输出到屏幕上;
以"%"开头的格式字符,printf()函数将数据转换为指定的格式输出到屏幕上。
输出列表:需要输出到屏幕的数据,数据可以是常量、变量或者表达式。
二、格式化输入函数:
scanf()函数的一般语法格式如下:
scanf("<格式化字符串>",<地址列表>);
格式化字符串:
1.用双引号括起来的字符串,一般只有"%"开头的格式字符。
2.地址列表:各个变量的地址,变量的地址通过取地址符号"&",数组名本身就是地址。
scanf()函数也可以和printf()函数一样可以接受多个值,变量之间需要用逗号隔开,需要一一对应。
三、常见格式控制字符
格式控制符以%开头
格式控制字符 作用
%d 输入或输出int变量数据
%u 输入或输出unsigned int变量数据
%lld 输入或输出long long变量数据
%llu 输入或输出unsigned long long变量数据
%f 输入或输出float变量数据
%lf 输入或输出double变量数据
%c 输入或输出char变量数据
%s 输入或输出字符串变量或字符数组数据
%nd 以n字符宽度输出整数,宽度不足时用空格补充
%0nd 以n字符宽度输出整数,宽度不足时用0补充
%.nlf 输出浮点数,精确到小数点后n位
......
例1:hello world
//C:格式化输出
printf("hello world\n");
例2:a+b 问题
//C:格式化输入输出
int a,b;
long long s;
//cin>>a>>b;
scanf("%d%d",&a,&b);
s=a+b;
//cout<<s<<endl;
printf("%lld\n",s);
例3:温度转换
已知:设施温度c,与华氏温度f的转换关系:9c=5(f-32).
输入华氏温度f,输出设施温度c
输入:98.6
输出:37
#include<iostream>
using namespace std;
int main ()
{
double c,f;
scanf("%lf",&f);
c=(f-32)*5/9;
printf("%lf",c);
return 0;
}
例4:输入任意的两个整数,两个整数之间用+、-、*、/四种符号之一表示,根据符号计算结果。
输入:8+2 输出:10
输入:8/5 输出:1.6
提示:字符类型%c
#include<iostream>
using namespace std;
int main()
{
int a,b;
double s;
char x;
scanf("%d%c%d",&a,&x,&b);
if(x=='+')
s=a+b;
else if(x=='-')
s=a-b;
else if(x=='*')
s=a*b;
else if(x=='/')
s=(double)(a)/b;
printf("%lf",s);
return 0;
}
在C++中,cstdio和stdio.h这两个标准输入输出头文件里面都有printf函数。
-[C/C++入门][printf输出]5、详解C语言和C++中的printf输出
-【C语言】scanf()
04C++顺序结构(3)的更多相关文章
- java里的分支语句--程序运行流程的分类(顺序结构,分支结构,循环结构)
JAVA里面的程序运行流程分三大类: 1,顺序结构:顺序结构就是依次执行每一行代码 2,分支结构:分支结构就是按不同的条件进行分支 3,循环结构:一段代码依条件进行循环执行. 其中,分支结构有两大类: ...
- C语言 串 顺序结构 实现
一个能够自动扩容的顺序结构的串 ArrString (GCC编译). /** * @brief C语言 串 顺序结构 实现 * @author wid * @date 2013-11-01 * * @ ...
- C语言 队列 顺序结构 实现
一个能够自动扩容的顺序结构的队列 ArrQueue (GCC编译). /** * @brief C语言顺序结构队列的实现 * @author wid * @date 2013-10-30 * * @n ...
- C语言 栈 顺序结构 实现
一个能够自动扩容的顺序结构的栈 ArrStack 实例 (GCC编译). /** * @brief C语言实现的顺序结构类型的栈 * @author wid * @date 2013-10-29 * ...
- C#学习笔记11:C#中的顺序结构、分支结构、循环结构
顺序结构: 代码从Main()函数开始运行,从上到下,一行一行的执行,不漏掉代码. Int a=6; int b=5; int c=a+b; Console.Write(c); 分支结构: 代码有可能 ...
- C语言程序设计第二次作业——顺序结构
(一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1: 错误原因:i和d位置错误 改正方法:i和d位置互换 错误信息2: 错误原因:\n后缺了一个" 改正方法:\n后加一个 ...
- C语言第二次作业-----顺序结构
一:改错题 (1)输出指定信息: 将给定源代码输入编译器: 执行编译命令,发现编译器报错,错误信息如下: 经检查,发现源程序将"stdio.h"误拼为"stido.h&q ...
- C语言程序设计第二次作业--顺序结构
C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...
- C语言第二次作业——顺序结构
一.改错题 1.输出带框文字:在屏幕上输出以下3行信息. (1)源程序 对程序进行编译,发现错误信息1 错误原因:stdio拼写错误 改正方法:将stdio正确拼写 对程序进行编译,发现错误信息2 错 ...
- C语言程序设计第二次作业—————顺序结构改
1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido.h> int mian() { ...
随机推荐
- 嵌入式Linux ubi文件系统制作、分区设置、只读文件系统,uboot启动参数root
当前平台, 基于君正的X10000平台的嵌入式Linux 系统 0 目的 我要设置根文件系统为可读写, 设置data分区上的文件系统为只读 1 设置各文件系统的读写属性 /bin/mount -o ...
- Python版Mysql爆破小脚本
本文给大家分享的是使用Python制作的MySQL在线用户密码的暴力破解脚本,非常的好用,有需要的小伙伴可以参考下 Mysql Python版本爆破小脚本,需要安装Python插件MySQL-py ...
- [Tkey] [IOI 2018] werewolf
注意看,我耗时五个小时 AK 了 IOI 题意 给你一个图,每次给定若干询问 \((s,t,l,r)\),请你完成下述要求: 定义 \(S\) 为到 \(s\) 的最短路径不小于 \(l\) 的点构成 ...
- 视频剪辑过于卡顿,让Pr更流畅的技巧 ( 待测试 )
事件起因: 项目组某后期同事,使用Pr剪辑视频非常卡顿,但是机器配置是完全满足他的办公需求的 解决办法: 1. 降低回放分辨率 如果你的视频预览卡顿,首先应该考虑的,就是当前回放分辨率是否过高.通常在 ...
- 《Vue.js 设计与实现》读书笔记 - 第12章、组件的实现原理
第12章.组件的实现原理 12.1 渲染组件 在渲染器内部的实现看,一个组件是一个特殊类型的虚拟 DOM 节点.之前在 patch 我们判断了 VNode 的 type 值来处理,现在来处理类型为对象 ...
- 解决 Vue 项目打包上线后客户端缓存的问题
由于重新打包后会导致对应的 js 和 css 文件 hash 值发生变化,客户端不刷新的话就会存在之前的文件找不到,导致报错的问题. 通过 build.sh 定义打包命令 #!/usr/bin/env ...
- CMake 属性之目录属性
[写在前面] CMake 的目录属性是指在特定目录(及其子目录)范围内有效的设置. 这些属性不同于全局变量或目标(Target)属性,它们提供了一种机制,允许开发者为项目中的不同部分定义不同的构建行为 ...
- 10月《中国数据库行业分析报告》已发布,深度剖析甲骨文大会Oracle技术新趋势
为了帮助大家及时了解中国数据库行业发展现状.梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新<中国数据库行业分析报告>,持 ...
- 什么是Streamlit
最近,我在数据分析的一些任务中尝试了闻名已久的Streamlit,再一次感受到Python的强大之处. 于是,准备根据自己的掌握情况,写一个介绍Streamlit的系列. 本文作为第一篇, 先介绍介绍 ...
- NJU ICS2024 PA 作业心得(一)
NJU ICS2024 PA 作业心得(一) 由于自己并不是NJU 2024的学生,因此"堂而皇之"的把这份心得发在了网上,并且只是仅供非以此课程作为自己当前学年保研课的同学参考. ...