C++ Primer Plus第十七章复习题

1、iostream文件在C++I/O中扮演这种角色?

答: iostream文件定义了用于管理输入和输出的类、常量和操纵符,这些对象管理用于处理I/O的流和缓冲区。该文件还创建了一些标准对象(cin、cout、cerr和 clog以及对应的宽字符对象),用于处理与每个程序相连的标准输入和输出流。

2、为什么键入数字作为输入要求程序进行转换?

答:键盘输入生成一系列字符。输入121将生成3个字符,每个字符都由一个1字节的二进制码表示。要将这个值存储为int类型,则必须将这3个字符转换为121值的二进制表示。

3、标准输入与标准错误之间有什么区别?

答:在默认情况下,标准输出和标准错误都将输出发送给标准输出设备(通常为显示器)。然而,如果要求操作系统将输出重定向到文件,则标准输出将与文件(而不是显示器)相连,但标准错误仍与显示器相连。

4、为什么在不为每个类型提供明确指示的情况下,cout仍能够显示不同的C++类型?

答:

ostream类为每种C++基本类型定义了一个operator<<()函数的版本。编译器将下面的表达式:
cout<< spot
解释为:
cout.operator<< (spot)
这样,它便能够将该方法调用与具有相同参数类型的函数原型匹配。

5、输出方法 定义的哪一特征让您能够拼接输出?

答:

可以将返回ostream &类型的输出方法拼接。这样,通过一个对象调用方法时,将返回该对象。然后,返回对象将可以调用序列中的下一个方法。

6、编写一个程序,要求用户输入一个整数,然后以十进制,八进制和十六进制显示该整数。在宽度为15个字符的字段中显示每种形式,并将它们显示在同一行上,同时使用C++数基前缀。

答:

#include <iostream>
#include <iomanip>
int main()
{
using namespace std;
    cout << "Enter an integer:";
    int n;
    cin >> n;
    cout << setw(15) << "base ten" << setw (15) <<"base sixteen" << setw (15)<< "base eight" << "\n" ;
    cout.setf (ios::showbase);
    cout << setw(15)<< n << hex << setw (15)<< n << oct << setw(15) << n << "\n";
    return 0;
}

7、编写一个程序,请求用户输入下面的信息,并按下面的格式显示它们。

Enter your name :Billy Gruff
Enter your hourly wages : 12
Enter nhumber of hours worked: 7.5
First format:
                Billy Gruff: $ 12.00:  7.5
Second format: 
Billy Gruff              : $12.00  :7.5

答:

#include <iostream>
#include <iomanip>
int main ()
{
    using namespace std;
    char name [20] ;
    float hourly;
    float hours;
    cout<< "Enter your name: ";
    cin.get (name,20).get();
    cout << "Enter your hourly wages: ";
    cin >> hourly;
    cout << "Enter number of hours worked: ";
    cin >> hours;
    cout.setf(ios::showpoint);
    cout.setf (ios::fixed, ios:: floatfield);
    cout.setf (ios : :right,ios: :adjustfield);// or cout<< showpoint<c fixed <c right;
    cout << "First format : \n" ;
    cout << setw(30)<< name << ":$" << setprecision(2)<< setw(10)<< hourly << ":" <<          setprecision (1)<< setw(5)<< hours << " \n" ;
    cout << "Second format : \n" ;
    cout.setf(ios: :left, ios: :adjustfield);
    cout <c setw (30)<< name<< ":$"<< setprecision(2) << setw(10)<< hourly << ":" << setprecision (1)<<setw(5)<< hours << "\n";
    return 0;
}

8、对于下面的程序,如果输入

I see a q<Enter>
I see a q<Enter>

 将打印什么内容?

程序:

#include <iostream>
int main()
{
    using namespace std;
    char ch;
    int ct1 = 0;

    cin >> ch;
    while(ch != 'q')
    {
        ct1++;
        cin >> ch;
    }

    int ct2 = 0;

    cin.get(ch);
    while(ch != 'q')
    {
        ct2++;
        cin.get(ch);
    }
    cout << "ct1 = " << ct1 << "; ct2 =: << ct2 << "\n";
    return 0;

}

答:

ct1 = 5;ct2 = 9
该程序的前半部分忽略空格和换行符,而后半部分没有。注意,程序的后半部分从第一个q后面的换行符开始读取,将换行符计算在内。

9、下面的两条语句都读取并丢弃行尾之前的所有字符(包括行尾)。这两条语句的行为在哪些方面不同?

while(cin.get() != '\n')
    continue;
cin.ignore(80.'\n');

答:
如果输入行超过80个字符,ignore()将不能正常工作。在这种情况下,它将跳过前80个字符。

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值