北京理工大学计算机考研复试上机题目及代码——2016

  • Post author:
  • Post category:其他


记:全部题目连接

https://blog.csdn.net/u014552756/article/details/78505845

,题目来源于博主“我还在路上呢”,我根据个人对题目的理解写了一下题解代码,分享在博客上,如代码写的有问题希望大家指正,后期会不定时更新。

1、输入学生信息,姓名 成绩 输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。

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

struct Info{
	char name[20];
	string num;//学号 
	float score[100];
	int count;//不及格课程数
	float ave;//平均成绩
	int n;//科目分数个数
		
};

bool cmp(Info a,Info b)
{
	return a.count>b.count;
}

int main()
{
	cout<<"请输入学生个数:";
	int t;
	cin>>t;
	Info stu[t];
	for(int q=0;q<t;q++)
	{
		stu[q].count=0;//此处如果不进行初始化会出现值无法控制的情况
	}
	cout<<"请分别输入每个学生的姓名,学号,科目数,每门课的分数"<<endl; 
	for(int i=0;i<t;i++)
	{
		int sum=0;
		cin>>stu[i].name>>stu[i].num>>stu[i].n;
		for(int j=0;j<stu[i].n;j++)
		{
			cin>>stu[i].score[j];
			if(stu[i].score[j]<60) 
				stu[i].count++;
			sum=sum+stu[i].score[j];
		} 
		stu[i].ave=sum/stu[i].n;
	}
	cout<<"不及格科目数超过2的学生为:";
	for(int k=0;k<t;k++)
	{
		if(stu[k].count>2) 
			cout<<stu[k].name<<" ";	
	} 
	cout<<endl;
	sort(stu,stu+t,cmp);
	for(int k=0;k<t;k++)
	{
		cout<<stu[k].name
		    <<"  学号为:"<<stu[k].num
			<<"  平均成绩为:"<< stu[k].ave
			<<"  不及格的科目数:"<<stu[k].count<<endl; 
	}
	return 0;	
} 

2、输入字符串,输出字符串中包含的数字,比如 2.3ABC0-2.3  输出 2.3 0 -2.3。注意一些特殊的情况如+004.500值为+4.5。


记:此题看了别人的解题思路,用到了string字符串的常用处理函数,erase和insert,我总结了下其具体用法如下:


(1)erase有两种用法:删除单个元素和删除一个区间内的所有元素。


删除单个元素时的语法为:str.erase(it);it为需要删除的元素的迭代器,例如:str.erase(str.begin()+i);其中i为要删除的元素的下标,可以用变量值来灵活代替使用。


删除一个区间内的所有元素:str.erase(first,last);first为所要删除区间的起始迭代器,last为索要删除区间的末尾迭代器。例如:str.erase(str.begin()+1,str.end()-1)。    另一种写法为str.erase(pos,length);pos为要删除元素的起始位置,length为删除的字符个数,例如:str.erase(2,3);即从2号位开始删除3个元素。


(2)insert的常用写法为:str.insert(pos,string);在pos位置插入字符串string。例如:string s=”123″; string str=”456″;s.insert(3,str);结果为:123456

#include <iostream>
#include <string.h>
using namespace std;

void shuchu(string &s)
{
	//处理0 
	if(s.length()==1)
	{
		cout<<s<<endl;
		s="";
		return;
	} 
	//处理前缀0
	int i=0;
	if(s[0]=='+'||s[0]=='-')
		i=1;
	while(s[i]=='0')
	{
		s.erase(s.begin()+i);
	} 

	if(s[0]=='.')
		s.insert(s.begin(),'0');
		
	//处理后缀0,为小数的情况才存在后缀0
	bool flag=0;
	for(int j=0;j<s.length();j++)
	{
		if(s[j]=='.')
		{
			flag=1;
			break;	
		}	
	} 
	if(flag)
	{
		i=s.length()-1;
		while(s[i]=='0')
		{
			s.erase(s.begin()+i);
			i--;
		}
		if(s[s.length()-1]=='.')//当为0.00000的情况 
		{
			s.erase(s.end()-1);
		}
	}
	
	cout<<s<<endl; 
	s="";
	return;
}

int main()
{
	string str,temp;
	cin>>str;
	int len=str.length();
	for(int k=0;k<len;k++)
	{ 
		if(str[k]=='+'||str[k]=='-'||(str[k]>='0'&&str[k]<='9'))
		{
			temp+=str[k++];
			while(str[k]=='.'||(str[k]>='0'&&str[k]<='9'))
			{
				temp+=str[k++];
			}
		//	cout<<temp<<"**"<<endl;
			shuchu(temp);
		}
	}
	return 0;
}
 



版权声明:本文为qq_38938670原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。