复习题

目录

1. 基本语法题——水仙花数

2. 数组、字符串、结构体、指针题-student_score

3. 函数题——加密

4. 类与对象题——Employee

5. 文件读写题


1. 基本语法题——水仙花数

编写程序,求三位正整数中的所有水仙花数(如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数),并计算它们的m次方之和。其中,m是正整数,由用户输入。

评分标准:

(1)程序框架完整,代码规范(20%)

(2)数据类型的定义和使用方法正确 (20%)

(3)程序控制结构使用正确(20%)

(4)算法正确,清晰合理(20%)

(5)运行结果正确,输入和输出格式如下所示(20%)

样例输入:2

样例输出:463599

c++中atoi函数介绍

 https://blog.csdn.net/hou09tian/article/details/85230898?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160973280916780273657237%252522%25252C%252522scm%252522%25253A%25252220140713.130102334..%252522%25257D&request_id=160973280916780273657237&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-85230898.pc_search_result_no_baidu_js&utm_term=c++atoi%E5%87%BD%E6%95%B0%E6%80%8E%E4%B9%88%E7%94%A8

#include<iostream>
#include<cmath> 
#include<string>
//编写程序,求三位正整数中的所有水仙花数
//(如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数)
//并计算它们的m次方之和。其中,m是正整数,由用户输入。
using namespace std;
bool isDaffodil(int n)
{
	int x,y,z,s;
	x=n%10;
	y=n%100/10;
	z=n/100;
	s=pow(x,3)+pow(y,3)+pow(z,3);
	bool flag=false;
	if(s==n)
	{
		flag=true;
	}
	return flag;
}
int main()
{
	int m;
	long sum=0;
	cout<<"请输入m:"<<endl;
	cin>>m;
	int num[100];
	int n=0;
	for(int i=100;i<1000;i++)
	{
		if(isDaffodil(i))
		{
			cout<<i<<endl;
			num[n]=i;
			n++;
		}
    }
    for(int i=0;i<n;i++)
    {
    	sum+=pow(num[i],m);
	}
	cout<<"sum:"<<sum; 
	return 0;
 } 

2. 数组、字符串、结构体、指针题-student_score

用户输入n个学生5门课程的成绩(每行是一个学生的5门课程的成绩,double),程序输出每门课程的平均成绩、最高分、最低分和不及格人数(每项是一列,每行对应一门课程,即第i行是第i门课程的平均成绩、最高分、最低分和不及格人数,用空格隔开)。成绩取值在[0,100]内,成绩超出范围输出“error score”。其中,n是正整数,由用户输入。

(1)程序框架完整,代码规范(20%)

(2)数据类型的定义和使用方法正确 (20%)

(3)程序控制结构使用正确(20%)

(4)算法正确,清晰合理(20%)

(5)运行结果正确,输入和输出格式如下所示(20%)

样例输入1

50.5 60.5 70.5 80.5 90.5

55 65 75 85 95

60.5 70.5 80.5 90.5 100

样例输出1

55.3333 60.5 50.5 2

65.3333 70.5 60.5 0

75.3333 80.5 70.5 0

85.3333 90.5 80.5 0

95.1667 100 90.5 0

 

样例输入2

50.5 60.5 70.5 80.5 90.5

55 65 75 85 95

60.5 70.5 80.5 90.5 101

样例输出2

error score

#include<iostream>
#include<cstring>
using namespace std;
//用户输入n个学生5门课程的成绩
//(每行是一个学生的5门课程的成绩,double),程序输出每门课程的平均成绩、最高分、最低分和不及格人数
//(每项是一列,每行对应一门课程,即第i行是第i门课程的平均成绩、最高分、最低分和不及格人数,用空格隔开)。
//成绩取值在[0,100]内,成绩超出范围输出“error score”。
//其中,n是正整数,由用户输入。
//二维数组 
int main()
{
	int n;
	cout<<"请输入n:"<<endl;
	cin>>n;
	const int m =n;
	double score[m][5];
	double calculate[5][4];
	//输入 
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<5;j++)
		{
			cin>>score[i][j];
		}
	}
	//运行 
	for(int i=0;i<5;i++)
	{
		double max=score[0][i];
		double min=score[0][i];
		double fail=0;
		double aver=0;
		for(int j=0;j<m;j++) 
		{
			if(score[j][i]>100||score[j][i]<0)
			{
				cout<<"error score"<<endl;
				return 0;
			}
			if(score[j][i]>max)
			{
				max=score[j][i];
			}
			if(score[j][i]<min)
			{
				min=score[j][i];
			}
			aver+=score[j][i];
			if(score[j][i]<60)
			{
				fail++;
			}
		}
		//平均成绩、最高分、最低分和不及格人数
		calculate[i][0]=aver/m;
		calculate[i][1]=max;
		calculate[i][2]=min;
		calculate[i][3]=fail;	
	}
	//输出 
	cout<<"平均成绩"<<' '<<"最高分"<<'\t'<<"最低分"<<'\t'<<"不及格人数"<<endl;
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<4;j++)
		{
			cout<<calculate[i][j]<<'\t';
		}
		cout<<endl;
	}
	return 0;
}

3. 函数题——加密

函数char encode(char *p,int m)表示加密算法,即将字母用字母表中其后第m个字母替换,函数char decode(char *p,int m)表示解密算法,即将字母用字母表中其前第m个字母替换,将字母表看成是首尾衔接的。例如对于字符串为“Study”,m=3,加密后的字符串为“Vwxgb”;对于字符串“Vwxgb”,m=3,解密后的字符串为“Study”,m表示密钥。

编写程序,通过键盘输入单词,密钥和算法标志(1表示解密,0表示加密),调用上述函数输出加密或解密的结果。

评分标准:

(1) 程序框架完整,代码规范(20%)

(2) 数据类型的定义和使用方法正确 (20%)

(3) 函数使用正确(20%)

(4) 算法正确,清晰合理(20%)

(5) 运行结果正确,输入和输出格式如下所示(20%)

样例输入1

Study

3

0

样例输出1

Vwxgb

 

样例输入2

Vwxgb

3

1

样例输出2

Study

 

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
//函数char encode(char *p,int m)表示加密算法,即将字母用字母表中其后第m个字母替换,
//函数char decode(char *p,int m)表示解密算法,即将字母用字母表中其前第m个字母替换,将字母表看成是首尾衔接的。
//例如对于字符串为“Study”,m=3,加密后的字符串为“Vwxgb”;对于字符串“Vwxgb”,m=3,解密后的字符串为“Study”,m表示密钥。
//编写程序,通过键盘输入单词,密钥和算法标志(1表示解密,0表示加密),调用上述函数输出加密或解密的结果。


int main()
{
	char s[100];
	int k;
	int flag;
	cout<<"请输入单词:"<<endl; 
	cin>>s;
	cout<<"请输入密匙:"<<endl;
	cin>>k;
	cout<<"请输入算法标志:"<<endl;
	cin>>flag;
	int len=strlen(s);
	if(flag==0)
	{
	char new_s[100];
	int n=strlen(s);
	for(int i=0;i<n;i++)
	{
		if(s[i]>='a'&&s[i]<='z')
		{
			new_s[i]=abs((s[i]-'a'+k)%26)+'a';
		}
		else if(s[i]>='A'&&s[i]<='Z')
		{
			new_s[i]=abs((s[i]-'A'+k)%26)+'A';
		}
	}
	new_s[n]='\0';
	cout<<new_s<<endl;	
	}
	else if(flag==1)
	{
	char new_s[100];
	int n=strlen(s);
	for(int i=0;i<n;i++)
	{
		if(s[i]>='a'&&s[i]<='z')
		{
			new_s[i]=abs((s[i]-'a'-k))%26+'a';
		}
		else if(s[i]>='A'&&s[i]<='Z')
		{
			new_s[i]=abs((s[i]-'A'-k))%26+'A';
		}
	}
	new_s[n]='\0';
	cout<<new_s;	
	}
	else
	{
		cout<<"您输入的flag有误,请重新输入:";
	}
	return 0;
}

 compare:

#include <iostream>
#include <cmath>
#include <cstring>
#include <fstream>
using namespace std;
char encode(char *p,int m);
char decode(char *p,int m);
int main() 
{
char str[100];
int m;
int flag;
cin>>str>>m>>flag;
if(flag==0)
{
encode(str,m);
}
else
{
decode(str,m);
}
cout<<str<<endl;
return 1;
}
char encode(char *p,int m){
for(;*p!='\0';p++)
{
*p=*p+m;
} 
}
char decode(char *p,int m)
{
for(;*p!='\0';p++)
{
*p=*p-m;
} 
}

 

4. 类与对象题——Employee

 (1)、定义一个工资类(EmployeeSalary),其成员包括:

    私有成员变量:工号(id),姓名(name),以及基本工资(salary,double);

    公有成员函数:构造函数(EmployeeSalary),析构函数(~EmployeeSalary),修改基本工资的函数(setSalary),返回基本工资的函数(getSalary),以及显示工号、姓名和基本工资的函数(print)。其中print函数为虚函数。

(2)、继承以上的工资类,再定义一个奖金类(EmployeeBonus),其成员包括:

    私有成员变量:奖金(bonus,double);

    公有成员变量:构造函数(EmployeeBonus),析构函数(~EmployeeBonus),修改奖金的函数(setBonus),返回奖金的函数(getBonus),以及显示工号、姓名、基本工资、奖金和总工资的函数(print)。总工资=基本工资+奖金。

(3)、编写主函数

    输入工号、姓名和基本工资之值;

 并以此值定义一个工资类的对象(e1),调用print函数;

    输入工号、姓名、基本工资和奖金之值;

    并以此值定义一个奖金类的对象(e2),调用print函数。

    提示:字符串赋值可以使用系统库函数。

样例输入:

1 zhang 6700

2 li 7800 2300

样例输出:

1 zhang 6700

2 li 7800 2300 10100

 

#include<iostream>
#include<cstring>
using namespace std;
class EmployeeSalary
{
	protected:
		char id[10];
		char name[10];
		double salary;
	public:
		EmployeeSalary(){
			strcpy(id,"XXX");
			strcpy(name,"XXX");
			salary=0;
		} 
		EmployeeSalary(char*I,char*N,double S)
		{
			strcpy(id,I);
			strcpy(name,N);
			salary=S;			
		}
		void set(char*I,char*N,double S)
		{
			strcpy(id,I);
			strcpy(name,N);
			salary=S;	
		}
		void setSalary(double S)
		{
			salary=S;
		}
		double getSalary()
		{
			return salary;
		}
		virtual void print()
		{
			cout<<"工号:"<<id<<endl;
			cout<<"姓名:"<<name<<endl;
			cout<<"工资:"<<salary<<endl;
		}
		~EmployeeSalary(){
			cout<<"destory"<<endl;
		}
};
class EmployeeBonus:public EmployeeSalary
{
	private:
		double bonus;
	public:
		EmployeeBonus()
		{
			bonus=0;
		}
		EmployeeBonus(char*I,char*N,double S,double B)
		{
			EmployeeSalary::set(I,N,S);
			bonus=B;
		}
		void setEmployeeBonus(double B)
		{
			
			bonus=B;
		}
		double getBonus()
		{
			return bonus;
		}
		void print()
		{
			EmployeeSalary::print();
			cout<<"奖金:"<<bonus<<endl; 
			cout<<"总工资:"<<bonus+EmployeeSalary::getSalary()<<endl;
		}
};
int main()
{	

	char Id[10];
	char Name[10];
	double Salary;
	double Bonus;
	cout<<"请输入Id:"<<endl;
	cin>>Id;
	cout<<"请输入Name:"<<endl;
	cin>>Name;
	cout<<"请输入Salary:" <<endl;
	cin>>Salary;
	EmployeeSalary e1(Id,Name,Salary);
	e1.print();	
	cout<<"请输入Id:"<<endl;
	cin>>Id;
	cout<<"请输入Name:"<<endl;
	cin>>Name;
	cout<<"请输入Salary:" <<endl;
	cin>>Salary;
	cout<<"请输入Bonus:"<<endl;
	cin>>Bonus;	
	EmployeeBonus e2(Id,Name,Salary,Bonus);
	e2.print();
	return 0;
}

5. 文件读写题

读取文本文件input.txt中的内容,将偶数行(开始为第1行)中的空格去掉,奇数行不变,结果写到output.txt文本文件中,同时将结果显示在屏幕上。文本中只有英文文字而没有汉字,每行不超过128个字符。输入文件内容和行数是不确定的。

评分标准:

(1)程序框架完整,代码规范(20%)

(2)文件的打开与关闭方法正确,能处理打开文件失败的情形(20%)

(3)数据类型、程序控制结构使用正确(20%)

(4)算法正确,清晰合理(20%)

(5)程序执行结果正确,包括文件output.txt和屏幕显示的内容(20%)

样例输入(input.txt的内容):

Beijing   has    170 museums  

second only to  London

in its number of museums

5311    0221    4102

 

样例输出(文件output.txt和屏幕显示的内容):

Beijing   has    170 museums

secondonlytoLondon

in its number of museums

531102214102

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int main()
{
	ofstream f2;
	f2.open("output.txt");
	ifstream f1("input.txt");
	if(f2==NULL||f1==NULL)
	{
		cout<<"文件打开失败"<<endl;
		return 0;
	}
	int count=1;

	while(f1)
	{
		if(f1)
		{
			char x[128];
			f1.getline(x,128);
			if(count%2!=0)//奇数行 
			{
				f2<<x<<endl;
				cout<<x<<endl;		
			}
			else//偶数行 
			{
				int n=strlen(x);
				int cal=0;
				char x_1[128];
				for(int i=0;i<n;i++ )
				{
					if(x[i]!=' '&&x[i]!='?')
					{
						x_1[cal]=x[i];
						cal++;
					}
				}
				x_1[cal]='\0';
				f2<<x_1<<endl;
				cout<<x_1<<endl;
			}
			count++;
		}
	}
	
 } 

这里有乱码,对于空格

换一种显示方式就会换一种状态,就离谱

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值