目录
2. 数组、字符串、结构体、指针题-student_score
1. 基本语法题——水仙花数
编写程序,求三位正整数中的所有水仙花数(如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数),并计算它们的m次方之和。其中,m是正整数,由用户输入。
评分标准:
(1)程序框架完整,代码规范(20%)
(2)数据类型的定义和使用方法正确 (20%)
(3)程序控制结构使用正确(20%)
(4)算法正确,清晰合理(20%)
(5)运行结果正确,输入和输出格式如下所示(20%)
样例输入:2
样例输出:463599
c++中atoi函数介绍
#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++;
}
}
}
这里有乱码,对于空格
换一种显示方式就会换一种状态,就离谱