C++学习之路(五),C++primer plus 第六章 分支语句和逻辑运算符-编程练习

本文介绍了C++编程中使用分支语句和逻辑运算符解决实际问题的四个练习,包括读取用户输入并转换字符、计算数字平均值、创建菜单驱动程序以及处理不同类型捐赠的情况。在实践中,作者详细讨论了如何处理非数字输入、循环结构、switch语句和结构体的使用,以及动态分配的结构数组。文章还探讨了在遇到问题时的思考和解决方案,如使用cin的类型检查和break语句的正确使用。
摘要由CSDN通过智能技术生成

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

#include<iostream>
#include<cctype>
using namespace std;

int main()
{
	char ch;
	cout << "Enter the characters: ";
    // 曾经想过这里要完善题目要求这里 while可不可以加上 && !isdigit(ch),发觉不可行,这样输入字符 @ 或者输入数字程序就终止了
	while ((ch = cin.get()) != '@')
	{
		if (islower(ch))            // 小写字母
			ch -= 32;
		else if (isupper(ch))        // 大写字母
			ch += 32;
        // 于是只有在这里再加上一个 if 判断语句,来判断是不是数字
        else if (isdigit(ch))
            continue;                // 如果是数字跳过循环体余下部分直接跳到 while语句
		else
			ch;                     // 其实我并不知道这最后一个else怎么写来着
		cout << ch;
	}
	return 0;
}

   这段代码只完成了上述两项要求,还有关于数字的不显示未达到,现要去车站买票回蕲春
         
   2. 编写一个程序,最多将10个 donation 值读入到一个 double 数组中(如果愿意可以使用模板类 array)。程序遇到非数字输入时将结束输入,并报告这些数字的平均值以及数组中有多少个数字大于平均值。(把第二题留在上面,回家没事想想代码如何写)。应该是先声明一个变量 i ,取值范围0-8,读取到 double 数组中;吃点东西再写代码

#include<iostream>
using namespace std;

const int Max = 10;

int main()
{
    int i, j;
    double arr[ Max], total = 0.0, results = 0.0
    cout << "输入数字,你最多可以将10个数值保留备用: ";
    
    for (i = 0; i < Max; i++)
    {
        while (!(cin >> arr[ i ]))
        {
            cin.clear();
            while (cin.get() != '\n')
                 continue;
                cout << "输入类型错误,请重新输入: ";
        }
    }
    cout << "你输入的" << Max << "个数分别是: ";

    for (i = 0; i < Max; i++)
    {
        cout << arr[ i ] << " ";
        total += arr[ i ];
    }
    cout << "你输入的" << Max << "个数的和是: " << total << endl;
    cout << Max << "个数的平均值是: " << total / Max << endl;

    cout << Max << "个数其中大于平均数值的数分别是: ";
    for(i = 0; i < Max; i++)
    {
        if (arr[ i ] > (total / Max))
        {
            cout << arr [ i ] << " ";
            j++;
        }
    }
    cout << "总共有" << j << "个数大于平均值" << endl;
    return 0;
}

   程序运行的结果
   其中在几个地方花费的了一些功夫,第一就是如何在输入非数字的时候终止程序,一开始我还以为是可以用!isdigit(),后来发现这个函数只能代表0-9,大于9的数也会出问题,而且小数也不在其范围内;看到网友写的代码,我貌似有点误解了题目的意思,网上的代码是输入非数字时终止程序,但还会计算输入错误之前的和和平均值,而我的意思以为是输入非数字直接终止程序,看来是有些问题,这个就再想想。在网上查了下代码,有的人提到 cin 这个标准的输入输出流对象,>>是数据析取运算符(将流中的数据送往变量中)——就是在这个过程对流中的数据进行类型检查 。 
   早上又完善了下代码:

#include<iostream>
using namespace std;

const int Max = 10;

int main()
{
	int i = 0, j = 0, count = 0;
	double donation[ Max ];
	double total = 0.0, results = 0.0;

	cout << "输入最少10个数: ";
	while (i < Max && cin >> donation[ i ])
	{
		cout << "donation[ " << i << " ] = " << donation[ i ] << endl;
				++i;
		if (!(cin))        //注意这里不能写成!(cin >> donation[ i ]),
			break;
	}
	for (j = 0; j < i; j++)
	{
		total += donation[ j ];
	}
	results = total / Max;
	cout << total << ", " << results << endl;
	cout << "输入了" << j << "个数在列, 其中和为: " << total << ", 平均值是: " << results << endl;

	cout << "输入了" << j << "个数在列, 其中大于平均值的数分别是: " << endl;
	for (j = 0; j < i; j++)
	{
		if (results < donation[ j ])
		{
			cout << "donation[ " << j << " ] = " << donation[ j ] << " " << endl;
			count++;
		}
	}
	cout << "你输入的数字共有 " << count << " 数字大于平均值: "<< endl;

	return 0;
}

   下面是全部输入数字的结果

   再就是输入中间有非数字的结果
   说明下:上面代码中的 if(!cin),不能写成 if(!(cin >> donation[ i ])),不然会隔一个数字读取一个数字,具体是什么原因暂时还没弄清楚;还有一点就是最后一个 for 循环,这里变量 j 一定要要小于等于 i ,由于上一个循环已经决定了 i 的次数,因为不确定输入会不会有非数字,因此不能用 j < Max。
   3. 编写一个菜单驱动程序的雏形。该程序显示一个提供4个选项的菜单-------每个选项用一个字母标记。如果用户使用有效选项之外的字母进行响应,程序将提示用户输入一个有效的字母,直到用户这样做为止。然后,该程序使用一条 switch 语句,根据用户的选择执行一个简单的操作。该程序的运行情况如下:
   Please enter one of following choices:
   c)    carnivore      p)    pianist
    t)    tree                           g)    game
    f
    Please enter a c,p,t,or   g:  
    Please enter a c,p,t,or   g:    
    A maple is a tree.

#include<iostream>
using namespace std;

void ShowMenu();

int main()
{
    ShowMenu();
    char choice;
    cin >> choice;
    while (cin)
    {
        switch (choice)
        {
            case 'c' : cout << "carnivore.\n";break;
            case 'p' : cout << "pianist.\n";break;
            case 't' : cout << "A maple is a tree.\n";break;
            case 'g' : cout << "game.\n";break;
            default  : cout << "Please enter a c, p, t, or g: ";
        }
            cin >> choice;
    }
    return 0;
}

void ShowMenu()
{
    cout << "Please enter one of the following choices:\n"
            "c) carnivore            p) pianist\n"
            &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值