C++ Primer Plus(第六版)编程练习答案 第6章 分支语句和逻辑运算符

本章所有编程练习的工程源码可在此处下载(点击打开下载链接),供大家参考交流!

 

1. 编写一个程序,读取键盘输入,直到遇到@符号为止,并回显输入(数字除外),同时将大写字符转换为小写,将小写字符转换为大写(别忘了cctype函数系列)。

本题主要需要完成3个功能,第一是对于输入控制,遇到特殊字符结束,第二是将所有输入除去数字之后显示出来,第三是大小写之间的转换。对于第一个功能,可以设计一个循环输入,判决条件就是输入不等于@符号,判决条件成立,才进行后续操作并要求继续输入,否则就不会进行任何操作。对于第二个功能,有很多种解决方案,这里我使用的是isdigit()函数,既然题目中要求使用cctype的函数系列,那么我们就可以使用isdigit()函数来判断是否是数字,如果不是才输出,这样是数字时就不会输出了。对于第三个功能,直接使用cctype中的islower()函数+toupper()函数和isupper()函数+tolower()函数就可以了。

代码如下:

// 6.1-c.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>  
#include <cctype>  
using namespace std;
int main()
{
    cout << "Enter your input, type @ to terminate input:\n";
    char ch;
    cin.get(ch);
    while (ch != '@')
    {
	if (islower(ch))
	{
	    ch = toupper(ch);
	}
	else if (isupper(ch))
	{
	    ch = tolower(ch);
	}
	if (isdigit(ch) == false)
	{
	    cout << ch;
	}
	cin.get(ch);
    }
    cout << endl;
    system("pause");
    return 0;
}

运行结果如下图所示:

由上图可以看出,输出会直到出现@符号才结束,但是每敲一次回车程序就会显示一次。

 

2. 编写一个程序,最多将10个donation值读入到一个double数组中(如果您愿意,也可使用模板类array)。程序遇到非数字输入时将结束输入,并报告这些数字的平均值以及数组中有多少个数字大于平均值。

本题要求我们提示输入10个double数据,然后计算这些数的平均值,并记录有多少个大于平均值,但是要能够探测非数字值,并在出现非数字值时立刻停止输入,计算当前数值的平均值和记录大于平均值的数目。对于探测非数字值,可以使用cin.fail()函数,该函数成立的条件就是输入的内容并不是待输入变量的类型,使用一个if判断来跳出输入循环,就可以完成上述功能了。

代码如下:

// 6.2-c.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>    
using namespace std;
int main()
{
    double donation[10];
    int len, i, j;
    double sum = 0.0;
    double average; 
    int num = 0;
    double line;
    cout << "Enter 10 donation:" << endl;
    for (i = 0; i < 10; i++)
    {
	cin >> donation[i];
	if (cin.fail())
	{
	    cout << "Not a digit!\n";
	    break;
	}
	sum += donation[i];
    }
    average = sum / i;
    for (i = 0; i < 10; i++)
    {
        if (donation[i] > average)
	{
	    num++;
	}
    }
    cout << "The average = " << average << endl;
    cout << "In this array has " << num << " value(s) larger than avearge" << endl;

    system("pause");
    return 0;
}

运行结果如下图所示:

以下是全部输入数字的时候,当输入到第10个数字之后,一点回车就会自动跳出平均值等内容,不可以再输入;

以下是输入了非数字值时的情况,一旦探测到非数字值,就会马上提示,然后停止输入弹出平均值等信息;

 

3. 编写一个菜单驱动程序的雏形。该程序显示一个提供4个选项的菜单——每个选项用一个字母标记。如果用户使用有效选项之外的字母进行响应,程序将提示用户输入一个有效的字母,直到用户这样做为止。然后,该程序使用一条switch语句,根据用户的选择执行一个简单操作。该程序的运行情况如下:

Please enter one of the following choices:

c) carnivore            p) pianist

t) tree                     g) game

f

Please enter a c, p, t, or g: q

Please enter a c, p, t, or g: t

A maple is a tree.

本题要求编写一个菜单程序,首先提示用户相应字母,如果用户输入的不是相应的字母,就会提示用户重新输入,直到输入正确为止;其次题目要求使用switch语句来根据用户的输入进行选择。在这里,我使用cctype的isalpha函数来判断输入的是否是字母,再使用switch语句来判断输入的是否是相应的字母。

代码如下:

// 6.3.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#includ
  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值