本章所有编程练习的工程源码可在此处下载(点击打开下载链接),供大家参考交流!
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"
#include <iostream>
#include <cctype>