C++编程求助
请会C++的高手们帮我做几个题目,给出代码题目如下
1,
编写程序处理10个学生的信息,每个学生的信息包括:学号、姓名、三门成绩。要求从键盘输入学生的数据用一个函数实现,输出成绩表(包括每个学生的学号、姓名、三门成绩及平均分数)用一个函数,再用一个函数输出平均分在前3名的学生姓名及平均分。
2,
下列程序的功能是:选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CNT以及这些素数值的和SUM。请编写函数COUNTVALUE()实现程序要求,最后调用函数WRITEDAT()把结果CNT和SUM输出到文件OUT.DAT中.
3,
数学计算工具程序设计 难度系数1.3
功能要求:各计算功能单独编写成函数,在主函数中通过选项菜单调用函数。
(1)选项菜单集成各个计算功能函数
(2)求任意数的阶乘
(3)求组合数
(4)求任意两个整数的最大公约数和最小公倍数
(5)判断任意数是否是素数
(6)显示菲波拉契数列的前N项
4,
学生成绩管理程序设计 难度系数1.5
(1)选项菜单集成各功能函数模块
(2)录入学生成绩(姓名、学号、语文、数学成绩,总分自动计算)
(3)按总分排名次
(4)按姓名查找某学生成绩
(5)统计各课程的平均分、及格率、最高分、最低分
(6)打印成绩表
答案:#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
//1
#define sum(i) (p[i].ach[0]+p[i].ach[1]+p[i].ach[2])/3
struct Student{
string name; //姓名
int id; //学号
int ach[3]; //三门成绩
};
void input(Student *p,int n) //输入
{
for(int i=0;i<n;i++){
cout<<"第"<<i+1<<"个学生的信息:";
if(!(cin>>p[i].name>>p[i].id>>p[i].ach[0]>>p[i].ach[1]>>p[i].ach[2])){
cout<<"输入有误"<<endl;
break;
}
}
}
void print(const Student *p,int n)
{
cout<<"姓名 学号 成绩1 成绩2 成绩3 平均成绩"<<endl;
for(int i=0;i<n;i++){
cout<<setw(10)<<p[i].name<<setw(10)<<p[i].id;
cout<<setw(10)<<p[i].ach[0]<<setw(10)<<p[i].ach[1];
cout<<setw(10)<<p[i].ach[2];
cout<<setw(10)<<sum(i)<<endl;
}
}
void prntbth(Student *p,int n)
{
Student t;
for(int i=0;i<3;i++){ //只找出前三名即可
for(int j=i+1;j<n;j++){
if(sum(i)<sum(j)){
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
print(p,3);
}
///////////////////////////
//2-1
void COUNTVALUE(int &num,int &sum)
{
num=0;
sum=0;
for(int i=101;i<1000;i++){
if(isprimenum(i)) //如果是素数
if(i/100==(i%10+i/10%10)%10){ //i%10 个位 i/10%10 十位 i/100 百位
++num;
sum+=i;
}
}
}
//2-2
void WRITEDAT(int num,int sum)
{
ofstream wr("OUT.DAT",ofstream::ate);
if(!wr){
cout<<"打开文件失败!"<<endl;
return;
}
wr<<"素数个数:"<<num<<"素数和:"<<sum;
wr.close();
}
/////////////////////////////////////////
//3-1 界面略去
//3-2阶乘
int nn(int i)
{
int m=1;
if(i!=1)
m=nn(i-1)*i;
return m;
}
//3-3不明白 组合数 含意
//3-4求最大分约数和最小分倍数
void com(int a,int b)
{
int re=a%b;
while(re!=0)
{
a=b;
b=re;
re=a%b;
}
cout<<"最大公约数:"<<re<<endl;
cout<<"最小公倍数:"<<a*b/re<<endl;
}
//3-5一个数是不是素数
bool isprimenum(int n )
{
int i;
if(n==1) return 0;
for(i=2;i<n/2;i++)
if(n%i==0) return 0; //不是素数
return 1; //是素数
}
//3-6-2 显示菲波拉契数列的前N项
int f(int n)
{
if (n==1){
return 1;
}
else if (n==2){
return 1;
}
else if (n>2){
return f(n-1)+f(n-2);
}
else
return 0; // n 为非正数时函数没有定义
}
//3-6-1 显示菲波拉契数列的前N项
void ff(int n)
{
for(int i=1;i<=n;i++)
cout<<f(i)<<" ";
}
////////////////////////////
struct stinfor{
string name;
int id;
int chan; //语文成绩
int math; //数学成绩
int sum;
};
//4-1 界面略去
//4-2 录入学生成绩(姓名、学号、语文、数学成绩,总分自动计算)
stinfor* instudent(int &n) //返回学生信息地址,n为学生个数,是函数输入的实际人数
{
int size=10;
stinfor *p=(stinfor*)malloc(10*sizeof(stinfor));
for(int i=0;;i++){
if(i==9){
size*=5;
p=realloc(p,size);
}
if(!(cin>>p[i].name>>p[i].id>>p[i].chan>>p[i].math))
break;
if(!strcmp(p[i].name.c_str(),"ok")) //名字为OK 就不再输入了;
break;
p[i].sum=p[i].math+p[i].chan;
}
n=i;
return p;
}
//4-3 排名次 n为学生个数
void sort(stinfor *p,int n)
{
stinfor t;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++)
{
if(p[i].sum<p[j].sum)
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
&nbs
上一个:C++语言是什么?
下一个:帮忙解决c++问题