MOOC C++ 期末试题

1字典编码

题目内容:

编写程序,给一段文本中的每个单词一个整数编码,输出文本的整数编码序列。要求(1)编码从1开始,按单词出现的先后顺序依次编码;(2)重复单词不重复编码;(3)输出的每个编码占3位,不足的前面补0。

输入:一段英文文本,一行,其中只有单词,单词由一个或多个空格分隔末尾可能有多于的空格,文本中没有标点和数字。文本长度不超过1000,单词数不超过300,每个单词的字符个数不超过20,字母均小写。

输出:整数编码序列。

样例1输入:

hello hello how are you

样例1输出:

001001002003004

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
    string s, base[300], code[300];
    getline(cin, s);
    int i = 0, count = 0, start;
    while(i < s.length())
    {
        start = i;
        while(i < s.length() && s[i] != ' ')
        {
            i ++;
        }
        if(i != start)
        {
            base[count ++] = s.substr(start, i - start);
        }
        i ++;
    }
    int countCode = 0, j;
    bool b;
    for(i = 0; i < count; i ++)
    {
        b = false;
        for(j = 0; j < countCode; j ++)
        {
            if(code[j].compare(base[i]) == 0)
            {
                b = true;
                break;
            }
        }
        if(b)
        {
            cout<<setw(3)<<setfill('0')<<j + 1;
        }
        else
        {
            code[countCode] = base[i];
            countCode ++;
            cout<<setw(3)<<setfill('0')<<countCode;
        }
    }
    return 0;
}

 

2成绩统计

题目内容:

输入若干学生的成绩,统计各班的成绩的平均值,并按班级名称的机内码从小到大排序输出。

学生成绩信息包括:班级,学号和成绩。班级名称是"000"'时表示成绩输入结束。

班级名称不超过20字符,学号不超过10个字符,成绩为整数,平均成绩为双精度实数,保留三位小数。班级数不超过10个,总人数不超过100个。

 

输入格式:

若干行,每行信息包括班级,学号和成绩,用空格隔开,

最后一行为:000 000 000

 

输出格式:

若干行,每行信息包括:班级和平均成绩,中间用一个空格隔开。行数由输入中的班级数确定。

 

输入样例:

航天  001 80

信计  001 90

航天  002 70

航天  003 80

信计  002 91

000 000 000

 

输出样例:

航天 76.667

信计 90.500

#include<iostream>
#include<cstring>
using namespace std;
class su{
	public :
		string name;
		string nub;
		double sum;
		int nuber;
		su()
		{
		    nuber=0;
		    sum =0;
		}
};
int main()
{
	su *chu=new su[10];
	string name;
	string nub;
	int fenshu;
	int j = 0, t = 0, i, flag = 0;
	while(1){
		flag=0;
		cin>>name>>nub>>fenshu;
		if(name=="000")
		{
			break;
		}
		for(i=0;i<j;i++)
		{
			if(name==chu[i].name)    //如果找到,归类
			{
			   flag=1;
			   chu[i].sum+=fenshu;
			   chu[i].nuber++;	
			}
		}
		if(flag==0)          //如果没找到就创建新的
		{
		    chu[j].name=name;
			chu[j].sum+=fenshu;
		    chu[j].nuber++;
		    j++;
		}
	} 
	for(i=0;i<j;i++)  //排序
	{
		for(t=0;t<j-i-1;t++)
		{
	 	   if(chu[t].name>chu[t+1].name)
		   {
			    su tt;
		    	    tt=chu[t];
                            chu[t] = chu[t+1];
                            chu[t+1]=tt;
	      	}
	   }
	}
	for(i=0;i<j;i++)
	{
		cout<<chu[i].name<<" ";
		cout.setf(ios::fixed);
		cout.precision(3);
		cout<<1.0*chu[i].sum/chu[i].nuber<<endl;
	}
	delete []chu;
	return 0;
}

3矩形类

题目内容:

定义一个矩形类,数据成员有宽度、高度和组成矩形的字符,类型分别为整型、整型和字符型,成员函数有void set(int,int,char)设置数据成员的值,void show()显示矩形。若宽度为7,高度为4,字符为“*”,则show()显示的矩形如下(四周为*,中间是空格):

*******

*     *

*     *

*******

编写主程序,声明矩形类的对象,输入矩形的宽度、高度和组成字符,调用成员函数set()设置矩形参数,调用成员函数show()显示矩形。

 

输入格式:

两个正整数和一个字符,用空格隔开。

 

输出格式:

由字符组成的空心矩形。

 

输入样例:

7 4 *

 

输出样例:

*******

*     *

*     *

*******

 

注意:(1)需考虑一些极端情况,(2)要用类实现。(3)可能由于显示格式的问题,题目页面的矩形会错位。只要按格式要求输出。如对样例来说,第2行,两头是“*”,中间是5个空格。

#include<iostream>
using namespace std;
class Rectangle
{
    int width,length;
    char a;
public:
    Rectangle(int width,int length,char a)
    {
        this->width=width;
        this->length=length;
        this->a=a;
    }
    void set(int width,int length,char a)
    {
        this->width=width;
        this->length=length;
        this->a=a;
    }
    void show()
    {
        for(int i=0; i<length; i++)
        {
            if(i==0||i==length-1)
            {
                for(int j=0; j<width; j++)
                    cout<<a;
            }
            else
                for(int x=0; x<width; x++)
                    if(x==0||x==width-1)cout<<a;
                    else cout<<" ";
            cout<<endl;
        }
    }
};
int main()
{
    int width,length;
    char a;
    cin>>width>>length>>a;
    Rectangle b(width,length,a);
    b.show();
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值