Blog Detail

  • 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

    #include

    #include

    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;

    /*用<

    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 <

    /*用其他符号填充*/

    cout << std::right <

    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

    2 #include

    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<

    11 return 0;

    12 }

    3.完善程序:已知a为15,b为3,输出a-b的竖式计算。

    1 #include

    2 /*头文件iomanip,用来声明一些“流操作符”,

    3 需要一定格式输入输出时,就需要用到它,

    4 比较常用的有设置域宽、设置左右对齐、

    5 设置实数的精确度等。*/

    6 #include

    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<

    15 cout<

    16 cout<<"------"<

    17 cout<<________<

    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

    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<<"总的棵数:"<

    15 return 0;

    16 }

    英汉小词典:

    cin:由c和in两个单词组成输入流。

    2、练习:

    (1)下面设备中,( )属于计算机的输入设备。

    A.显示器 B.绘图仪 C.打印机 D.鼠标

    (2)用cin语句重新编写交换两个变量的值的程序。

    (3)阅读程序写结果

    #include //包含输入输出流头文件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="<

    return 0;

    }

    输入:200 10 20 30 50

    输出:_________________

    (4)完善程序

    /*

    3.完善程序

    从键盘输入长方形的长和宽,输出长方形的周长。

    */

    #include //包含输入输出流头文件iostream

    using namespace std; //指明程序 使用命名空间std(标准)

    int main()

    {

    int a,b,c;

    ;

    c=(a+b)*2;

    cout<<"周长:"<< <

    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<

    printf("%lld\n",s);

    例3:温度转换

    已知:设施温度c,与华氏温度f的转换关系:9c=5(f-32).

    输入华氏温度f,输出设施温度c

    输入:98.6

    输出:37

    #include

    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

    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()