// 第六章.cpp : 定义控制台应用程序的入口点。
//
//
//
#include "stdafx.h"
#include <iostream>//预编译,使用iostream文件在编译前替代这行代码
#include <array>
#include <string>
#include <iomanip>
const int SIZE = 101;
using namespace std;//将使用std命名空间中的定义
/* 编写一个程序,读取键盘输入,直到遇到@符号为止,并回显输入(数字除外),
同时将大写字符转换为小写,将小写字符转换为大写(别忘了cctype函数系列)。*/
void Xiti1()//
{
char duru;
while (cin>>duru&&'@'!=duru)
{
if (islower(duru))
{
duru=toupper(duru);
cout << duru;
}
else if(isupper(duru))
{
duru=tolower(duru);
cout << duru;
}
}
return;
}
/* 编写一个程序,最多将10个donation值读入到一个double数组中(如果您愿意,也可以使用模板类array)。
程序遇到非数字输入时将结束输入,并报告这些数字的平均值以及数组中有多少个数字大于平均值。*/
void Xiti2()//
{
const int SIZE=10;
double donation[SIZE];
double sum=0;
double avg = 0;
int i=0;
int j = 0;
int jishu=0;
cout << "请输入数字,最多10个,按非数字退出\n";
while (i<SIZE&&cin>>donation[i])
{
sum = sum + donation[i];
i++;
}
avg = sum / i;
for ( j = 0; j < i; j++)
{
if (donation[j]>avg)
{
jishu++;
}
}
cout << "一共输入" << i << "个数据,平均值为:" << avg << "其中有" << jishu << "个数据大于平局值。\n";
return;
}
/*编写一个菜单驱动程序的雏形。该程序显示一个提供4个选项的菜单————每一个选项用一个字母标记。
如果用户使用有效选项之外的字母进行响应,程序将提示用户输入一个有效的字母,直到用户这样做为止。
然后,该程序使用一条switch语句,根据用户的选择执行一个简单的操作。
该程序的运行情况如下:
Please enter one of the following choices:
c) carnivore p) pianist
t) tree g) game
*/
void Xiti3()//简述:
{
cout << "Please enter one of the following choices:\n";
cout << "c)carnivore\t\tp)pianist\nt)tree\t\t\tg)game\n";
char shuru;
while (cin>>shuru&&'@'!=shuru)
{
switch (shuru)
{
case 'c':
cout << "选择的是carnivore\n";
break;
case 'p':
cout << "选择的是pianist\n";
break;
case 't':
cout << "选择的是tree\n";
break;
case 'g':
cout << "选择的是game\n";
break;
default:
cout << "输入不合法\n";
break;
}
cout << "Please enter one of the following choices:\n";
cout << "c)carnivore\t\tp)pianist\nt)tree\t\t\tg)game\n";
}
return;
}
/*.加入Benevolent Order of Programmer后,在BOP大会上,人们可通过加入者的真实姓名、头衔或秘密BOP来了解他(她)。
请编写一个程序,可以使用真实姓名、头衔、秘密姓名或成员preference(书中翻译为偏好,个人认为应该翻译为优先权)来 列出成员。编写该程序时,请使用下面的结构:
//Benevolent Order of Programmers name structure
struct bop{
char fullname[strsize];
char title[strsize];
char bopname[strsize];
int preference; // 0 = fullname, 1 = title, 2 = bopname
};
该程序创建一个由上述结构组成的小型数组,并将其初始化为适当的值。
另外,该程序是用一个循环,让用户在下面的选项中进行选择:
a. display by name b. display by title
c. display by bopname d. display by preference
q. quit
注意,“display by preference”,并不意味着显示成员的preference,而是意味着根据成员的preference来列出成员。
例如:如果preference为1,则选择d将显示程序员的头衔。该程序运行情况如下:
Benevolent Order of Programmers Report
a. display by name b. display by title
c. display by bopname d. display by preference
q. quit
Enter your choice: a
Wimp Macho
Raki Rhodes
Celia Laiter
Hoppy Hipman
Pat Hand
Next choice: d
Wimp Macho
Junior Programmer
MIPS
Analyst Trainee
LOOPY
Next choice: q
Bye!
*/
const int strsize = 30;
const int num=5;
struct bop
{
char fullname[strsize];
char title[strsize];
char bopname[strsize];
int prefernce;//0=fullname,1=title,2=bopname
};
void Xiti4()//
{
bop programmer[num] =
{
{ "wang hua","zongjian","flower",0},
{ "xu hai","zongjingli","sun",1 },
{ "cheng cheng","dongshi","lli",2 },
{ "liu jian","zhuren","sisi",1 },
{ "wenjie","fuzong","hah",0 }
};
cout << "Benevolent Order of Programmers Report\n";
cout << "a.display by name\t\tb.display by title\nc.display by bopname\t\td.display by preference\nq.quit\n";
cout << "Enter your choice:";
char choose;
int i;
while (cin>>choose&&'q'!=choose)
{
switch (choose)
{
case 'a':
{
for ( i = 0; i < num; i++)
{
cout << programmer[i].fullname << endl;
}
}break;
case 'b':
{
for (i = 0; i < num; i++)
{
cout << programmer[i].title << endl;
}
}break;
case 'c':
{
for (i = 0; i < num; i++)
{
cout << programmer[i].bopname << endl;
}
}break;
case 'd':
{
for (i = 0; i < num; i++)
{
switch (programmer[i].prefernce)
{
case 0:
{
cout << programmer[i].fullname << endl;
}break;
case 1:
{
cout << programmer[i].title << endl;
}break;
case 2:
{
cout << programmer[i].bopname << endl;
}break;
default:
break;
}
}
}break;
default:cout << "输入不合法,请输入abcdq";
break;
}
cout << "Next choice:";
}
cout << "Bye!\n";
return;
}
/*.在Neutronia王国,货币单位是tvarp,收入所得税的计算方式如下:
5000 tvarp:不收税
5001~15000 tvarps: 10%
15001~35000 tvarps: 15%
35000 tvarps以上: 20%
*/
void Xiti5()//
{
cout << "输入一个数\n";
double money;
double shui;
while (cin>>money)
{
if (money<=5000)
{
shui = 0;
}
else if (money<=15000)
{
shui = (money-5000)*0.1;
}
else if (money<=35000)
{
shui = 10000 * 0.1 + (money - 15000)*0.15;
}
else
{
shui= 10000 * 0.1 + 20000*0.15+ (money - 35000)*0.2;
}
cout << "所得税为:" << shui << endl;
}
return;
}
/* 编写一个程序,记录捐助给“维护合法权益团体”的资金。该程序要求用户输入捐献者的数目,
然后要求用户输入每一个捐献者的姓名和款项。这些信息被存储在一个动态分配的数组里。
每一个结构有两个成员:用来存储姓名的字符数组(或string对象)和用来存储款项的double成员。
读取所有数据后,程序将显示所有捐款超过10000的捐款者的姓名即捐款数额。
该列表应包含一个标题,指出下面的捐款者是重要捐款人(Grand Patrons)。
然后,程序将列出其他的捐款者,该列表要以Patrons开头。
如果某种类别没有捐献者,则程序打印单词“none”。
给程序只显示这两种类别,而不进行排序。
。*/
struct monney
{
char name[30];
double zijin;
};
void Xiti6()//简述:
{
cout << "捐献者数目:";
int num,i,j=0,m=0;
cin >> num;
cin.get();
monney *juankuan = new monney[num];
for ( i = 0; i < num; i++)
{
cout << "输入第"<<i+1<<"个人的名字:";
cin.getline(juankuan[i].name,30);
cout << "输入捐款金额:";
cin >> juankuan[i].zijin;
cin.get();
}
cout << "Grand Patrons:\n";
for ( i = 0; i < num; i++)
{
if (juankuan[i].zijin>10000)
{
cout << setw(30) << setiosflags(ios::left) <<juankuan[i].name << "\t" << juankuan[i].zijin << endl;
j++;
}
}
if (j=0)
{
cout << "None.\n";
}
cout << "Patrons:\n";
for (i = 0; i < num; i++)
{
if (juankuan[i].zijin<=10000)
{
cout << setw(30) <<setiosflags(ios::left)<< juankuan[i].name << "\t" << juankuan[i].zijin << endl;
m++;
}
}
if (m= 0)
{
cout << "None.\n";
}
return;
}
/*编写一个程序,每次读取一个单词,直到用户只输入q。然后,给程序指出有多少个单词以元音打头。
有多少个单词以辅音打头,还有多少个单词不属于这两类。
为此,方法之一是,使用isalpha()来区分以字母和其他字符打头的单词,
然后对于通过了isalpha()测试的单词,使用if或switch语句来确定哪些以元音打头。
该程序运行情况如下:
Enter words (q to quit):
The 12 awesome oxen ambles
quietly across 15 meters of lawn. q
5 words beginning with vowels
4 words beginning with consonants
2 others
*/
void Xiti7()//
{
cout << "Enter words (q to quit):\n";
string str;
int i=0,j=0,k=0;
while (cin>>str&&"q"!=str)
{
if (isalpha(str[0]))
{
if (str[0] == 'a' || str[0] == 'e' || str[0] == 'i' || str[0] == 'o' || str[0] == 'u' || str[0] == 'A' || str[0] == 'E' || str[0] == 'I' || str[0] == 'O' || str[0] == 'U')
{
i++;
}
else j++;
}
else
{
k++;
}
}
cout << i << "个元音\n";
cout << j << "个辅音\n";
cout << k << "个其他\n";
return;
}
/* 编写一个程序,它打开一个文件,逐字符地读取该文件,直到达到文件末尾,然后指出该文件中包含多少字符。
*/
#include <fstream>
#include <cstdlib>
void Xiti8()//
{
ifstream inFile;
inFile.open("123.txt");//文件要放在cpp文件同目录下
if (!inFile.is_open())
{
cout << "文件打开错误";
exit(EXIT_FAILURE);
}
char ch;
int n=0;
while ((ch = inFile.get())!=EOF)
{
cout << ch;
n += 1;
}
cout <<"一共"<< n<<"个字符.\n";
inFile.close();
return;
}
/* 完成编程练习6,但从文件中读取所需的信息。该文件的第一项应为捐款人数,余下的内容应为成对的行。
在每一对中,第一行为捐款人姓名。第二行为捐款数额。即该文件类似于下面:
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubba
5000
Rich Raptor
55000
。*/
void Xiti9()//
{
cout << "导入文件的名字:\n";
string wenjian;
cin >> wenjian;
ifstream inFile;
inFile.open(wenjian);
if (!inFile.is_open()) exit(EXIT_FAILURE);
//cout << "捐献者数目:";
int num, i, j = 0, m = 0;
inFile >> num;
inFile.get();
monney *juankuan = new monney[num];
for (i = 0; i < num; i++)
{
//cout << "输入第" << i + 1 << "个人的名字:";
inFile.getline(juankuan[i].name, 30);
//cout << "输入捐款金额:";
inFile >> juankuan[i].zijin;
inFile.get();
}
cout << "文件信息如下:\n";
for (i = 0; i < num; i++)
{
cout << setw(30) << setiosflags(ios::left) << juankuan[i].name << "\t" << juankuan[i].zijin << endl;
}
cout << "其中Grand Patrons:\n";
for (i = 0; i < num; i++)
{
if (juankuan[i].zijin>10000)
{
cout << setw(30) << setiosflags(ios::left) << juankuan[i].name << "\t" << juankuan[i].zijin << endl;
j++;
}
}
if (j = 0)
{
cout << "None.\n";
}
cout << "Patrons:\n";
for (i = 0; i < num; i++)
{
if (juankuan[i].zijin <= 10000)
{
cout << setw(30) << setiosflags(ios::left) << juankuan[i].name << "\t" << juankuan[i].zijin << endl;
m++;
}
}
if (m = 0)
{
cout << "None.\n";
}
return;
}
/*
*/
void Xiti10()//
{
return;
}
int main()
{
int XitiNo = 1;//输入习题编号
cout << "第四章编程练习答案:\n";
cout << "请输入习题编号或按(0)退出:\n";
cin >> XitiNo;
while (XitiNo != 0)
{
if (cin)//输入合法则执行
{
if (XitiNo >= 0 && XitiNo <= 10)
{
switch (XitiNo)
{
case 0:
{
cout << "即将退出程序啦!\n";
}break;
case 1:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti1();
}break;
case 2:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti2();
}break;
case 3:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti3();
}break;
case 4:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti4();
}break;
case 5:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti5();
}break;
case 6:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti6();
}break;
case 7:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti7();
}break;
case 8:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti8();
}break;
case 9:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti9();
}break;
case 10:
{
cout << "第" << XitiNo << "题如下:\n";
Xiti10();
}break;
default:
{
cout << "即将退出程序啦\n";
XitiNo = 0;
}
break;
}
cout << "继续查看请输入习题编号或按(0)退出:\n";
cin >> XitiNo;
}
else
{
cout << "没有这样的编号\n继续查看请输入习题编号或按(0)退出:\n";
cin >> XitiNo;
}
}
else//输入不合法则重新输入
{
XitiNo = 0;
}
}
system("pause");//为了程序能够停下看看。
return 0;
}
C++ primer Plus(第六版)第六章 分支和逻辑 编程答案
最新推荐文章于 2024-07-22 09:38:37 发布