北理计算机学院2016年机试真题

北京理工大学计算机学院复试上机题目

  由于编者水平有限,如有错误,请多多包涵。欢迎各位指正,转载请注明,谢谢合作!

1.输入学生信息,姓名 成绩(成绩的数目不一定)

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

#include
#include
#include
using namespace std;

struct stu{
	string name;
	int score[100];
	int number;
	double avg;
	int unum;
};

// 定义学生按不及格科目数量的排序规则 
bool cmp(stu x,stu y){
	return x.unum>y.unum;
} 

int main()
{
	string str[100];	// 记录原始输入情况
	int n=0;			// 用于记录学生的数量
	// 读取原始数据
	while(getline(cin,str[n++]));
	n--;
	// 整理数据
	stu s[100];
	for(int i=0;i2){
			f=false;
			cout<

2.输入字符串,输出字符串中包含的数字,比如2.3ABC0-2.3  输出 2.3 0 -2.3。

注意一些特殊的情况如+004.500值为+4.5。

#include
#include
using namespace std;

void f(int &op,string &temp,int &t){
	if(temp==""){
		if(t==1)
			cout<<0<<" ";
		op=0;
		t=0;
		return;
	}
	// 之前有有效数字
	if(op==1){
		cout<<"+"<='0'&&str[k][i]<='9')||str[k][i]=='+'||str[k][i]=='-'||str[k][i]=='.'){
				/*
				* 第一部分处理数字中的特殊符号。
				*/
				if(str[k][i]=='+'){
					// 输出之前的数值
					f(op,temp,t);
					flag=0;
					zero="";
					op=1;
				}
				else if(str[k][i]=='-'){
					// 输出之前的数值
					f(op,temp,t);
					flag=0;
					zero="";
					op=-1;
				}
				else if(str[k][i]=='.'){
					// 处理+.123的特殊情况
					if(temp=="")
						op=0;
					// 有多余的小数点
					if(flag==1){
						f(op,temp,t);
						flag=0;
						zero="";
					}
					// 有效的小数点
					if(temp!=""){
						// 标记一下,之后到达了小数部分。小数点不知道是否有效,先暂存。
						flag=1;
					}
					if(temp==""&&t==1){
						temp+='0';
						flag=1;
					}
				}
				/*
				* 第二部分处理纯数字。
				*/
				else{
					// 首部的无效0
					if(temp==""&&str[k][i]=='0')
						t=1;
					// 小数点之后
					else if(flag){
						// 小数部分的0,不知道是否有效,先暂存
						if(str[k][i]=='0'){
							zero+='0';
						}
						// 小数点之后第一位非零数
						else if(flag==1){
							// 把之前暂存的小数点,0都加上
							temp+='.';
							temp+=zero;
							zero="";
							temp+=str[k][i];
							flag++;
						}
						// 小数点之后多位
						else{
							temp+=zero;
							zero="";
							temp+=str[k][i];
						}
					}
					// 整数部分
					else{
						temp+=str[k][i];
					}
				}
			}
			// 非字符忽略,并输出其前面的数字
			else{
				f(op,temp,t);
				flag=0;
				zero="";
			}
			// 向后检索
			i++;
		}
		// 输出最后一个数
		f(op,temp,t);
		// 处理下一个字符串
		k++;
		cout<

测试用例及运行结果:

北理计算机学院2016年机试真题_第1张图片

你可能感兴趣的:(北理计算机复试)