sometext.txt 文件如下:
End of file reached
Input terminated by data mismatch
Input terminated for unknown reason
No data processed
contributions.txt 文件如下:
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000
1 /*********************************************************************
2 程序名: 6.11 编程练习
3 1. 编写一个程序, 读取键盘输入, 直到遇到@符号为止, 并回显
4 输入(数字除外) , 同时将大写字符转换为小写, 将小写字符转换为大
5 写(别忘了cctype函数系列) 。
6 版权:
7 作者: 大野狼
8 日期: 2022/4/15-星期五 10:43:04
9 说明:
10 *********************************************************************/
11 #include <iostream>
12 #include <cctype>
13 //const int Size 100;
14 int main(void) {
15 using namespace std;
16 char str1;
17 while((str1=cin.get())!='@')
18 {
19 if(isdigit(str1))
20 continue;
21 else if(isupper(str1))
22 cout<<char(tolower(str1));
23 else if(islower(str1))
24 cout<<char(toupper(str1));
25 }
26 return 0;
27 }
1 /*********************************************************************
2 程序名: 2. 编写一个程序, 最多将10个donation值读入到一个double数组中
3 (如果您愿意, 也可使用模板类array) 。 程序遇到非数字输入时将结束
4 输入, 并报告这些数字的平均值以及数组中有多少个数字大于平均值。
5 版权:
6 作者: 大野狼
7 日期: 2022/4/15-星期五 13:33:23
8 说明:
9 *********************************************************************/
10 #include <iostream>
11 #include <array>
12 #include <cstdlib> // support for exit()
13 int main(void) {
14 using namespace std;
15 const unsigned int SIZE = 10; //最大容量
16 double total=0,avg=0; //合计 平均值
17 unsigned int count=0,lagNum=0; //计数
18 // double donation[SIZE]; //方法1 数组容器
19 array<double, SIZE> donation; //方法2 array模板容器
20 cout<<"请依次输入10个数值,以空格或回车分隔(输入非数字时将结束输入):\n";
21 while(count<SIZE && (cin>>donation[count])) //小于最大值,并且输入有效
22 {
23 total += donation[count];
24 ++count;
25 }
26 if(count>0)
27 avg = total/count;
28 else
29 cout<<"没有有效的数据输入!",exit(EXIT_FAILURE);
30 //判断大于平均值的数量
31 for(int i=0;i<count;++i)
32 (donation[i] > avg)?lagNum++:1==1;
33 cout<<"共计:"<<count<<" 个数据。\n总计: "<<total<<" 平均值为: "<<avg;
34 cout<<"\n其中有 "<<lagNum<<" 个数据大于平均值。";
35 return 0;
36 }
1 /*********************************************************************
2 程序名: 3. 编写一个菜单驱动程序的雏形。 该程序显示一个提供4个选项的
3 菜单——每个选项用一个字母标记。 如果用户使用有效选项之外的字母
4 进行响应, 程序将提示用户输入一个有效的字母, 直到用户这样做为
5 止。 然后, 该程序使用一条switch语句,
6 根据用户的选择执行一个简单操作。 该程序的运行情况如下:
7 版权:
8 作者: 大野狼
9 日期: 2022/4/15-星期五 14:44:39
10 说明:
11 *********************************************************************/
12 #include <iostream>
13 #include <cstdlib> // exit()
14 int main(void) {
15 using namespace std;
16 char choice; //选项
17 bool flag = true;
18 cout<<"请选择菜单\n";
19 cout<<"****** 菜单 ******\n";
20 cout<<"A:奥迪 B:奔驰 \n";
21 cout<<"C:长城 D:大众 \n";
22 cout<<"Q:退出 \n";
23 while(flag && cin>>choice)
24 {
25 switch(choice)
26 {
27 case 'a':
28 case 'A':
29 cout << "奥迪就是传说中的‘灯厂’" << endl;
30 break;
31 case 'b':
32 case 'B':
33 cout << "奔驰是汽车的鼻祖" << endl;
34 break;
35 case 'c':
36 case 'C':
37 cout << "长城价廉物美" << endl;
38 break;
39 case 'd':
40 case 'D':
41 cout << "大众是德国品牌." << endl;
42 break;
43 case 'q':
44 case 'Q':
45 cout << "欢迎下次再来查询!" << endl;
46 flag = false;
47 break;
48 // exit(EXIT_FAILURE);
49 default:
50 cout << "输入有误,请重新输入!" << endl;
51 cin.clear(); // reset input
52 while (cin.get() != '\n')
53 continue;
54 }
55 }
56
57 return 0;
58 }
1 /*********************************************************************
2 程序名: 5. 在Neutronia王国, 货币单位是tvarp, 收入所得税的计算方式如下:
3 5000 tvarps: 不收税
4 5001~15000 tvarps: 10%
5 15001~35000 tvarps: 15%
6 35000 tvarps以上: 20%
7 例如, 收入为38000 tvarps时, 所得税为5000 0.00 + 10000 0.10 +
8 20000 0.15 + 3000 0.20, 即4600 tvarps。 请编写一个程序, 使用循环来
9 要求用户输入收入, 并报告所得税。 当用户输入负数或非数字时, 循环将结束。
10 版权:
11 作者: 大野狼
12 日期: 2022/4/15-星期五 15:45:17
13 说明:
14 *********************************************************************/
15 #include <iostream>
16 using namespace std;
17 double calc(double inc); //收入 返回税收
18 int main(void) {
19 double income,tax; //收入 税收
20 cout<<"请输入您的收入:(输入负数或非数字时退出):";
21 while((cin>>income) && (income >= 0))
22 {
23 tax = calc(income);
24 cout<<"您的收入为:"<<income<<"\n需要交税:"<<tax<<endl;
25 cout<<"再次输入您的收入:";
26 }
27 return 0;
28 }
29
30 double calc(double inc)
31 {
32 double result = 0.0;
33 if(inc <= 5000)
34 result = 0.0;
35 else if(inc > 5000 && inc <= 15000)
36 result = (inc-5000) * 0.1;
37 else if(inc > 15000 && inc <= 35000)
38 result = 10000 * 0.1 + (inc-15000) * 0.15;
39 else if(inc > 35000)
40 result = 10000 * 0.1 + 20000 * 0.15 + (inc-35000) * 0.2;
41 else
42 result = 0.00;
43 return result;
44 }
1 /*********************************************************************
2 程序名: 6. 编写一个程序, 记录捐助给“维护合法权利团体”的资金。 该程
3 序要求用户输入捐献者数目, 然后要求用户输入每一个捐献者的姓名和
4 款项。 这些信息被储存在一个动态分配的结构数组中。 每个结构有两个
5 成员: 用来储存姓名的字符数组(或string对象) 和用来存储款项的
6 double成员。 读取所有的数据后, 程序将显示所有捐款超过10000的捐
7 款者的姓名及其捐款数额。 该列表前应包含一个标题, 指出下面的捐款
8 者是重要捐款人(Grand Patrons) 。 然后, 程序将列出其他的捐款者,
9 该列表要以Patrons开头。 如果某种类别没有捐款者, 则程序将打印单
10 词“none”。 该程序只显示这两种类别, 而不进行排序。
11 版权:
12 作者: 大野狼
13 日期: 2022/4/15-星期五 17:35:59
14 说明:
15 *********************************************************************/
16 #include <iostream>
17 #include <string>
18 struct donation{
19 std::string name;
20 double money;
21 };
22 int main(void) {
23 using namespace std;
24 int num; // 捐助人数
25 cout<<"请输入捐助者的人数:";
26 cin>>num;
27 cin.get();
28 // 分配了空间
29 donation *strdon = new donation[num]; //全部捐款人
30 donation *strdonl = new donation[num]; //重要捐款人
31 donation *strdons = new donation[num]; //一般捐款人
32 // donation strdon[num]; //创建结构体数组
33 // donation strdonl[num]; //>10000 Grand Patrons
34 // donation strdons[num]; //Patrons
35 int l=0,s=0;
36 // 分批写入数据
37 for(int i=0;i<num;++i)
38 {
39 cout<<"请输入第"<<i+1<<"个人员的信息\n姓名:";
40 getline(cin,strdon[i].name);
41 cout<<"捐助额:";
42 cin>> strdon[i].money;
43 cin.get();
44 if(strdon[i].money>10000)
45 {
46 strdonl[l].money = strdon[i].money;
47 strdonl[l].name = strdon[i].name;
48 ++l;
49 }
50 else
51 {
52 strdons[s].money = strdon[i].money;
53 strdons[s].name = strdon[i].name;
54 ++s;
55 }
56 }
57 // 输出信息
58 cout<<"\n重要捐款人(Grand Patrons)\n";
59 if(l>0)
60 {
61 for(int i=0;i<l;++i)
62 cout<<strdonl[i].name<<" : "<<strdonl[i].money<<endl;
63 }
64 else
65 cout<<"none\n";
66
67 cout<<"\n其他捐款人(Patrons)\n";
68 if(s>0)
69 {
70 for(int i=0;i<s;++i)
71 cout<<strdons[i].name<<" : "<<strdons[i].money<<endl;
72 }
73 else
74 cout<<"none\n";
75 // 释放空间
76 delete [] strdon;
77 delete [] strdonl;
78 delete [] strdons;
79 return 0;
80 }
1 /*********************************************************************
2 程序名: 7. 编写一个程序, 它每次读取一个单词, 直到用户只输入q。 然
3 后, 该程序指出有多少个单词以元音打头, 有多少个单词以辅音打头,
4 还有多少个单词不属于这两类。 为此, 方法之一是, 使用isalpha( )来区
5 分以字母和其他字符打头的单词, 然后对于通过了isalpha( )测试的单
6 词, 使用if或switch语句来确定哪些以元音打头。 该程序的运行情况如
7 下:
8 版权:
9 作者: 大野狼
10 日期: 2022/4/16-星期六 10:00:02
11 说明:
12 *********************************************************************/
13 #include <iostream>
14 #include <cstring>
15 int main(void) {
16 using namespace std;
17 unsigned int y_word=0,f_word=0,n_word=0; // 元音 辅音 其他 单词的数量
18 char input[128];
19 cout<<"输入一段话,统计用户输入了多少个单词 (到q|Q为止) "<<endl;
20 while (cin >> input)
21 {
22 if (!(strcmp(input, "q")) || !(strcmp(input, "Q")))
23 {
24 break;
25 }
26 else
27 {
28 char temp = input[0];
29 if(isalpha(temp)) //如果首字符是字母则运行
30 {
31 switch(temp)
32 {
33 case 'a':
34 case 'e':
35 case 'i':
36 case 'o':
37 case 'u':
38 case 'A':
39 case 'E':
40 case 'I':
41 case 'O':
42 case 'U':
43 ++y_word;break; //元音单词
44 default:
45 ++f_word;
46 }
47 }
48 else //非字母开头单词统计
49 {
50 ++n_word;
51 }
52
53 }
54 }
55 cout << "元音 辅音 其他单词的数量分别是: " << y_word << " ; " << f_word << " ; " <<n_word << endl;
56 return 0;
57 }
1 /*********************************************************************
2 程序名: 8. 编写一个程序, 它打开一个文件文件, 逐个字符地读取该文
3 件, 直到到达文件末尾, 然后指出该文件中包含多少个字符。
4 版权:
5 作者: 大野狼
6 日期: 2022/4/16-星期六 10:52:36
7 说明:
8 *********************************************************************/
9 #include <iostream>
10 #include <fstream> // file I/O support
11 #include <cstdlib> // support for exit()
12 const int SIZE = 60;
13 int main()
14 {
15 using namespace std;
16 // cout << "Enter name of data file: ";
17 // char filename[SIZE];
18 // cin.getline(filename, SIZE);
19 char filename[] = "sometext.txt";
20 ifstream inFile; // 建立输出对象
21
22 inFile.open(filename); // 建立连接
23 if (!inFile.is_open()) // 判断是否路径有效
24 {
25 cout << "无法打开文件: " << filename << endl;
26 cout << "程序终止!\n";
27 exit(EXIT_FAILURE);
28 }
29 char str; //跳过非打印字符 每个字符
30 // char str[SIZE]; //跳过非打印字符 每个单词
31 int count = 0; // 记数
32
33 inFile >> str; // 获取第一个元素
34 while (inFile.good()) // while input good and not at EOF
35 //当输入良好且不在EOF时
36 {
37 ++count; // 自增
38 inFile >> str; // 获取下一个元素
39 }
40 if (inFile.eof())
41 cout << "已到达文件结尾.\n";
42 else if (inFile.fail())
43 cout << "输入因数据不匹配而终止.\n";
44 else
45 cout << "输入因未知原因终止.\n";
46 cout<<"*****************************\n";
47 if (count == 0)
48 cout << "没有数据处理.\n";
49 else
50 {
51 cout << "共计读取字符: " << count << endl;
52 }
53 inFile.close(); // 关闭文件对象
54 return 0;
55 }
1 /*********************************************************************
2 程序名: 完成编程练习6, 但从文件中读取所需的信息。 该文件的第一项
3 应为捐款人数, 余下的内容应为成对的行。 在每一对中, 第一行为捐款
4 人姓名, 第二行为捐款数额。 即该文件类似于下面:
5 版权:
6 作者: 大野狼
7 日期: 2022/4/16-星期六 13:33:14
8 说明:
9 *********************************************************************/
10 #include <iostream>
11 #include <string>
12 #include <fstream> // file I/O support
13 #include <cstdlib> // support for exit()
14 struct donation{
15 std::string name;
16 double money;
17 };
18
19 int main(void) {
20 using namespace std;
21 int num; // 捐助人数
22 string FileName = "contributions.txt" ;
23 ifstream inFile;
24 inFile.open(FileName.c_str());
25 inFile >> num; // 读取第一行 人数
26 inFile.get();
27 donation *strdon = new donation[num]; //全部捐款人
28 donation *strdonl = new donation[num]; //重要捐款人
29 donation *strdons = new donation[num]; //一般捐款人
30 // donation strdon[num]; //创建结构体数组
31 // donation strdonl[num]; //>10000 Grand Patrons
32 // donation strdons[num]; //Patrons
33 int l=0,s=0;
34 // 分批读取数据
35 for(int i=0;i<num;++i)
36 {
37 // cout<<"请输入第"<<i+1<<"个人员的信息\n姓名:";
38 getline(inFile,strdon[i].name);
39 // cout<<"捐助额:";
40 inFile>> strdon[i].money;
41 inFile.get();
42 if(strdon[i].money>10000)
43 {
44 strdonl[l].money = strdon[i].money;
45 strdonl[l].name = strdon[i].name;
46 ++l;
47 }
48 else
49 {
50 strdons[s].money = strdon[i].money;
51 strdons[s].name = strdon[i].name;
52 ++s;
53 }
54 }
55 // 输出信息
56 cout<<"\n重要捐款人(Grand Patrons)\n";
57 if(l>0)
58 {
59 for(int i=0;i<l;++i)
60 cout<<strdonl[i].name<<" : "<<strdonl[i].money<<endl;
61 }
62 else
63 cout<<"none\n";
64
65 cout<<"\n其他捐款人(Patrons)\n";
66 if(s>0)
67 {
68 for(int i=0;i<s;++i)
69 cout<<strdons[i].name<<" : "<<strdons[i].money<<endl;
70 }
71 else
72 cout<<"none\n";
73 // 释放空间
74 delete [] strdon;
75 delete [] strdonl;
76 delete [] strdons;
77 return 0;
78 }