一个学生的三门成绩
A. 有五个学生,每个学生有三门课程的成绩,从键盘输入学生数据(包括学号,姓名,3门课程成绩),计算出平均成绩
经测试,程序正确运行,并把输入结果保存在stud文件中。
源代码如下:
#include <stdio.h>
#define ID 11
typedef struct _stu
{
char id[ID];
int sco1;
int sco2;
int sco3;
}stu;
int main()
{
int i;
stu s[5];
FILE *fp;
float ave;
printf("请输入五个学生的学号和三门成绩:\n");
for(i=0;i<5;i++)
{
scanf("%s%d%d%d",s[i].id,&s[i].sco1,&s[i].sco2,&s[i].sco3);
}
if((fp=fopen("stud","w"))==NULL)
{
printf("文件打开失败\n");
return ;
}
for(i=0;i<5;i++)
{
ave=(s[i].sco1+s[i].sco2+s[i].sco3)/3.0;
fprintf(fp,"%s %d %d %d %.2f\n",s[i].id,s[i].sco1,s[i].sco2,s[i].sco3,ave);
}
fclose(fp);
return 0;
}
B. 定义一个结构体类型的结构体数组stud,输入学生三门课成绩,然后按总分成绩排序后输出学生成绩。
#include"stdio.h"
#include"string.h"
struct student
{ int num;
char name[20];
float yingyu;
float shuxue;
float cc;
float sum;
};
struct student stud[100];
int main()
{ int i,n,k,j,z=1;
float t;
char m[20];
printf("输入有N个学生数");
scanf("%d",&n);
printf("学号 姓名 英语 数学 c++\n");
for(i=0;i<n;i++)
{
scanf("%d%s%f%f%f",&stud[i].num,&stud[i].name,&stud[i].yingyu,&stud[i].shuxue,&stud[i].cc);
stud[i].sum=stud[i].yingyu+stud[i].shuxue+stud[i].cc;
}
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(stud[i].sum>stud[i+1].sum)
{ t=stud[i].sum;
stud[i].sum=stud[i+1].sum;
stud[i+1].sum=t;
strcpy(m,stud[i].name);
strcpy(stud[i].name,stud[i+1].name);
strcpy(stud[i+1].name,m);
k=stud[i].num;
stud[i].num=stud[i+1].num;
stud[i+1].num=k;
}
printf("学号 姓名 总分 名次 \n");
for(i=0;i<n;i++)
{
printf(" %d %s %.2f %d\n",stud[i].num,stud[i].name,stud[i].sum,z);
z++;}
return 0;
}
C. 有20个学生记录(学号、姓名、3门课成绩)的文件student.dat,学生以学号从小到大排列。
#include<iostream>
#include<string>
using namespace std;
int n=20;
class student
{
long int num;//学号
char name[20];//姓名
int grade;
public:
student(){}
student(long nu,char na[],int gr){num=nu;strcpy(name,na);grade=gr;}
void put_student(long nu,char na[],int Chinese,int math,int English){num=nu;strcpy(name,na);grade=Chinese+math+English;}
int get_grade(){return grade; }
void get_student(){cout<<num<<" "<<name<<" "<<grade<<" "<<endl;}
long int get_num(){return num;}
char* get_name(){return name;}
student::operator=(class student a){num=a.num;strcpy(name,a.name);grade=a.grade;}
};
void taxis(class student a[]) //按总成绩由大到小排序
{
class student b;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(a[i].get_grade()<a[j].get_grade())
{
b=a[i];
a[i]=a[j];
a[j]=b;
}
}
void insert(class student a[]) //将一个新学生总成绩插入已排好序数组中
{
long int num;//学号
char name[20];//姓名
int grade;
cout<<"请输入学号,姓名,总分,";
cin>>num>>name>>grade;
class student c(num,name,grade);
for(int i=0;i<n;i++)
{
if(a[i].get_grade()<c.get_grade())
break;
}
n++;
for(int j=n;j>i;j--)
a[j]=a[j-1];
a[j]=c;
}
void del(class student a[]) //将不及格学生记录删除
{
int j=0;
for(int i=0;i<n;i++)
if(a[i].get_grade()>=(60*3))
a[j++]=a[i];
n=j;
}
void save(class student a[]) //排序的结果用文件形式存放磁盘
{
FILE *fp;
if((fp=fopen("save_student.dat","w"))==NULL)
{cout<<"ERROR"<<endl;exit(0);}
for(int i=0;i<n;i++)
{
fprintf(fp,"%-10d%-10s%-5d\n",a[i].get_num(),a[i].get_name(),a[i].get_grade());
}
if(fp!=NULL)
fclose(fp);
}
void main(void)
{
long int num;//学号
char name[20];//姓名
int Chinese,math,English;//3门课成绩
FILE *fp;
class student a[30];
if((fp=fopen("student.dat","r"))==NULL)
{cout<<"ERROR"<<endl;exit(0);}
for(int i=0;i<n;i++)
{
fscanf(fp,"%d%s%d%d%d",&num,&name,&Chinese,&math,&English);
a[i].put_student(num,name,Chinese,math,English);
}
taxis(a);
for(i=0;i<n;i++)
a[i].get_student();
insert(a);
for(i=0;i<n;i++)
a[i].get_student();
cout<<"del(a)"<<endl;
del(a);
for(i=0;i<n;i++)
a[i].get_student();
save(a);
if(fp!=NULL)
fclose(fp);;
}
B.按总成绩由大到小排序(同组采用不同排序方法)
同组 是什么意思..
==
student.dat格式
学号 姓名 3门课成绩
1 Adaam 8 90 50
D. 学生有三门课程:A、B、C,3名学生的成绩,要求用结构体输出三个学生平均值等,下面代码哪里错了
代码的关键错误是下面两个for语句后面都多加了一个分号,错误如下注释:
for(i=0;i<=n-1;i++);//多加了回一个分号
s[i].aver=(s[i].a+s[i].b+s[i].c)%3;//平均值计答算应该是除以3即s[i].aver=(s[i].a+s[i].b+s[i].c)/3.0;除以3.0是为了将aver的结果转换为float
for(i=0;i<=n-1;i++);//多加了一个分号
cout<<"姓名:"<<s[i].name<<","<<"A课程成绩:"<<s[i].a<<","<<"B课程成绩:"<<s[i].b<<","<<"C课程成绩:"<<s[i].c<<","<<"平均分:"<<s[i].aver<<"."<<endl;
E. 编程统计全班学生成绩。要求每次键盘输入一个学生的3门课程分数,计算并输出每个学生的总分和平均分
我再TC上试过的,绝对正确!可以自己把班里同学的人数改一改~~
#include<stdio.h>
#define NUM 5 //(班里的人数)
typedef struct{
int score1;
int score2;
char name[10];
int final;
int ave;
}Student;
void input(Student stu[]);
void output(Student stu[]);
int main(){
Student stu[NUM];
int i;
input(stu);
output(stu);
}
void input(Student stu[]){
int i;
int better=0,good=0;
printf("Please enter students'name and scores:\n");
for(i=0;i<NUM;i++){
scanf("%s%d%d",&stu[i].name,&stu[i].score1,&stu[i].score2);
stu[i].final=stu[i].score1+stu[i].score2;
stu[i].ave=stu[i].final/2;
if(stu[i].ave>=85) better ++;
if(stu[i].ave>=60&&stu[i].ave<85) good++;
}
printf("the number of better and good is%5d %5d\n",better,good);
}
void output(Student stu[]){
int i;
printf("The final and average of every student is :\n");
printf("NAME FINAL AVE\n");
for(i=0;i<NUM;i++)
printf("%s%5d%5d\n",stu[i].name,stu[i].final,stu[i].ave);
}
另外,站长团上有产品团购,便宜有保证
F. 有3个学生,每个学生的数据包括学号、姓名和3门课程的成绩,要求输出各学生学号、姓名和平均分。
#include <stdio.h>
int main()
{
struct student // 声明一个结构体类型struct student
{
int num;
char name[10];
float score[3];//3门课程成绩
float avg; //平均分
};
struct student stu[3];//定义含3个元素结构体数组
int i,j;
for (j=0;j<3;j++){
scanf("%d%s",&stu[j].num,stu[j].name);
for (i=0;i<3;i++)
scanf("%f",&stu[j].score[i]);
}
//*********************************************************
float totle=0;//totle的初始化位置不对,应该在每一次进行下面的外层循环时就进行初始化,否则totle会累积的。顺便说一下,你的单词拼错了。
for(j=0;j<3;j++){
for(i=0;i<3;i++)
totle=totle+stu[j].score[i];
}
stu[j].avg=totle/3;//这里,这条语句 应该放在第一个循环的内部
for(j=0;j<3;j++)
printf("%d %-5s %2.1f\n",stu[j].num,stu[j].name,stu[j].avg);
//============================================================
return 0;
}
这是我改好的:
#include <stdio.h>
int main()
{
struct student // 声明一个结构体类型struct student
{
int num;
char name[10];
float score[3];//3门课程成绩
float avg; //平均分
};
struct student stu[3];//定义含3个元素结构体数组
int i,j;
for (j=0; j<3; j++)
{
scanf("%d%s",&stu[j].num,stu[j].name);
for (i=0; i<3; i++)
scanf("%f",&stu[j].score[i]);
}
//*********************************************************
float totle;
for(j=0; j<3; j++)
{
totle=0;
for(i=0; i<3; i++)
totle=totle+stu[j].score[i];
stu[j].avg=totle/3;
}
for(j=0; j<3; j++)
printf("%d %-5s %2.1f\n",stu[j].num,stu[j].name,stu[j].avg);
//============================================================
return 0;
}
/*
输入:
1 liming 70 70 70
2 wangming 80 80 80
3 zhengming 90 90 90
*/
G. 3.C语言 用结构体类型编一程序,输入一个学生的学号,姓名及三门课的成绩,计算并输出平均成绩
#include<stdio.h>
structstud{
intnum;
charname[30];
floatscore[3];
};
intmain()
{
structstudstu;
inti;
floatavg;
printf("inputnumber:");scanf("%d",&stu.num);
printf("inputname:");scanf("%s",stu.name);
printf("input3score: ");
avg=0;
for(i=0;i<3;i++)
{
scanf("%f",&stu.score[i]);
avg+=stu.score[i];
}
avg/=3;
printf("averagescore:%f ",avg);
return0;
}
H. c++ 定义一个学生类,有学号、姓名、三门课程的成绩,求平均分 怎么破
现在这样就可以啊 虽然不是太好
只不过统计的时候 需要分别调不同的函数 你调用一样的了
#include<iostream>
usingnamespacestd;
classStudent
{
intnum;
charname;
inta,b,c;
staticfloatsum1,sum2,sum3;
staticintcount;
public:
voidget()
{
>>num>>name>>a>>b>>c;
}
voidtotal1()
{
sum1+=a;
count++;
}
staticfloataverage1()
{
return(sum1/count);
}
voidtotal2()
{
sum2+=b;
}
staticfloataverage2()
{
return(sum2/count);
}
voidtotal3()
{
sum3+=c;
}
staticfloataverage3()
{
return(sum3/count);
}
};
floatStudent::sum1=0;
floatStudent::sum2=0;
floatStudent::sum3=0;
intStudent::count=0;
intmain()
{intn;
cout<<"请输入学生人数:";
cin>>n;
Studentt[60];
for(inti=0;i<n;i++)
t[i].get();
for(intj=0;j<n;j++)
{
t[j].total1();
t[j].total2();//分别三个函数
t[j].total3();
}
cout<<Student::average1()<<""<<Student::average2()<<""<<Student::average3()<<endl;
}
I. 有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩)
括号的位置不对 ,如下:版
for(i = 0; i < 4; i++)
for(j = i + 1; j < 4; j++) {
if(stu[i].avr < stu[j].avr)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
printf("\n排序后权:");
J. 有n个学生,每个学生的数据包括学号,姓名,三门课成绩,平均成绩。编写一个程序,完成以下功能:
#include<stdio.h>
#include<stdlib.h>
typedefstruct
{
charnum[10];
charname[10];
floatscore[3];
floatavg;
}stu;
voidinput(intn,stu*s)
{
for(inti=0;i<n;i++)
{
scanf("%s",&s[i].num);
scanf("%s",&s[i].name);
scanf("%f%f%f",&s[i].score[0],&s[i].score[1],&s[i].score[2]);
s[i].avg=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3;
}
}
voidoutput1(intn,stu*s)
{
printf("学号 姓名 成绩1 成绩2 成绩3 平均成绩 ");
for(intindex=0;index<n;index++)
printf("%s %s %f %f %f %f ",s[index].num,s[index].name,s[index].score[0],
s[index].score[1],s[index].score[2],s[index].avg);
}
voidoutput2(intn,stu*s)
{
intindex=0;
floatmax=s[0].avg;
for(inti=1;i<n;i++)
if(max<s[i].avg)
{
max=s[i].avg;
index=i;
}
printf("%s %s %f %f %f %f ",s[index].num,s[index].name,s[index].score[0],
s[index].score[1],s[index].score[2],s[index].avg);
}
voidoutput3(intn,stu*s)
{
stutmp;
for(inti=0;i<n-1;i++)
for(intj=0;j<n-1-i;j++)
{
if(s[j].avg<s[j+1].avg)
{
tmp=s[j];
s[j]=s[j+1];
s[j+1]=tmp;
}
}
output1(n,s);
}
voidmain()
{
intn;
printf("输入学生数目: ");
scanf("%d",&n);
stu*s=(stu*)malloc(n*sizeof(stu));
input(n,s);
printf("所有学生数据: ");
output1(n,s);
printf("平均分最高学生数据: ");
output2(n,s);
printf("排序学生数据: ");
output3(n,s);
}
运行实例如下: