北理复试上机题2000年

1、输入任意 4 个字符(如:abcd),并按反序输出(如:dcba)。

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

int main(){
	string a;
	cout<<"请输入四个字符"<<endl;
	cin>>a;
	cout<<"结果是:"<<endl;
	for(int i=3;i>=0;i--){
		cout<<a[i];
	}
	return 0;
}

注意点:string在头文件#include<string>中 ,而不是异想天开的使用#include<cstring>,在上篇中谈过,使用C语言中的标准库的时候,我们可以不写.h,而采用前面加c的方式引入C语言的头文件。 

2、设 a、b、c 均是 0 到 9 之间的数字,abc、bcc 是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c 的值。

#include<iostream>
using namespace std;
 
int main()
{
    int a,b,c;
    cout<<"满足条件的 abc 为:"<<endl;
    for(a=0; a<10; a++)
        for(b=0; b<10; b++)
            for(c=0; c<10; c++)
                if(((a*100+b*10+c)+(b*100+c*10+c))==532)
                    cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;
 
    return 0;
}

3、一个数如果恰好等于它的各因子(该数本身除外)子和,如: 6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。求出 2 到 60 之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei 为完数) G: g1 g2 g3 ......(gi 为盈数) 。

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

int main(){
	int wan[60],yin[60],index1=0, index2=0;
	for(int i=2;i<=60;i++){
		int total=0;
		for(int j=i-1;j>0;j--){
			if(i%j==0)
				total+=j;
		}
		if(total==i){
			wan[index1]=i;
			index1++;
		}else if(total>i){//还有种情况total<i
			yin[index2]=i;
			index2++;
		}	
	}
	cout<<"E:";
	for(int i=0;i<index1;i++){
		cout<<wan[i]<<" ";
	}
	cout<<"G:";
	for(int i=0;i<index2;i++){
		cout<<yin[i]<<" ";
	}	
	return 0;
}

注意点:使用if-else情况要考虑全  

这里我用数组存储了,比较浪费空间,原文(地址)中没有浪费,可以参考看看。

4、从键盘输入 4 个学生的数据( 包括姓名、年龄和成绩),并存放在文件 sf1 上。从该文件读出这些数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。

这里涉及文件操作,我们可以学习一下:

首先,要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream>。

fstream,它定义了三个新的数据类型:

数据类型 描述
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream 该数据类型表示输入文件流,用于从文件读取信息。
fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

打开文件

ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。

下面是 open() 函数的标准语法,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。

void open(const char *filename, ios::openmode mode);

在这里,open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。

模式标志 描述
ios::app 追加模式。所有写入都追加到文件末尾。(append)
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。(标准流的输入,即读取)
ios::out 打开文件用于写入。(标准流的输出,即写入)
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

您可以把以上两种或两种以上的模式结合使用。例如,如果您想要以写入模式打开文件,并希望截断文件,以防文件已存在,那么您可以使用下面的语法:

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

类似地,您如果想要打开一个文件用于读写,可以使用下面的语法:

ifstream  afile;
afile.open("file.dat", ios::out | ios::in );

写入文件

在 C++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 cout 对象。

读取文件

在 C++ 编程中,我们使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstream 或 fstream 对象,而不是 cin 对象。

#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

typedef struct student{
	string name;
	int age;
	int grade;
}student;
bool cmp(student a, student b){
	if(a.grade==b.grade){
		return a.name>b.name;//降序 <是升序 
	}else return a.grade>b.grade;
}
int main(){
	vector<student> stu;
	student s;
	cout<<"请输入学生信息(姓名 年龄 成绩),'00 00 00'结束输入,如:\n'张三 24 67'\n'李四 34 98'"<<endl;
	ofstream out("sf1.txt");
	while(cin>>s.name>>s.age>>s.grade){
		if(s.name=="00" or s.age==00 or s.grade==00)
			break;
		out<<s.name<<" "<<s.age<<" "<<s.grade<<endl;
	}
	out.close();
	
	ifstream in("sf1.txt");
	while(!in.eof()){
		in>>s.name>>s.age>>s.grade;
		if(in.fail())   //不加入这个,会多取一次数据   fail()用来判断一个流是否“坏”掉了。
//如果failbit、badbit中任意一种或两种被设置,则fail()返回true,否则返回false。 
			break; 
		stu.push_back(s); 
	}
	cout<<"成绩排序如下:"<<endl;
	sort(stu.begin(), stu.end(), cmp);
	vector<student>::iterator i;//申请一个学生容器的迭代器
	for(i=stu.begin();i!=stu.end();i++)//写法i!=stu.end() 
		cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grade<<endl;//迭代器i,是地址,取数据是*i得到的是student对象 
	in.close(); 
	cout<<"成绩次高者的数据如下:"<<endl;
	i = stu.begin()+1;
	cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grade<<endl;
	return 0;
} 

原文:地址

参考:地址1  地址2

作者:无涯明月

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/88051052