#include<stdio.h>
#include<stdlib.h>
#define sm 50
struct Stu
{
int mc
int number
char name[10]
double math
double English
double computer
}
void px(struct Stu [],int)
void census(struct Stu [],int)
void found(struct Stu [],int)
int main(int argc,char * argv[])
{
int n,i
struct Stu stud[sm]
printf("请输入学生人数:\n")
scanf("%d",&n)
printf("请输入每个学生的信息:\n")
for(i=0i<ni++)
{
printf("第%d个学生:\n",i+1)
stud[i].mc=i+1
printf("输入学号:")
scanf("%d",&stud[i].number)
printf("输入姓名:")
scanf("%s",stud[i].name)
printf("输入数学成绩:")
scanf("%lf",&stud[i].math)
printf("输入英语成绩:")
scanf("%lf",&stud[i].English)
printf("输入计算机成绩:")
scanf("%lf",&stud[i].computer)
printf("\n")
}
px(stud,n)
census(stud,n)
found(stud,n)
system("pause")
return 0
}
void px(struct Stu a[],int n)
{
int i,j,temporary,mpm[sm],epm[sm],cpm[sm]
double zf[sm]
for(i=0i<ni++)
{
mpm[i]=i+1
epm[i]=i+1
cpm[i]=i+1
}
for(i=0i<ni++)
{
zf[i]=a[i].math+a[i].English+a[i].computer
}
for(i=0i<n-1i++)
{
for(j=i+1j<nj++)
{
if(zf[i]<zf[j])
{
temporary=a[j].mc
a[j].mc=a[i].mc
a[i].mc=temporary
}
}
}
printf("\n根据总分情况排名如下:\n")
for(i=0i<ni++)
{
for(j=0j<nj++)
{
if(a[i].mc==j+1)
{
printf("第%d:\n",i+1)
printf("名字:%s 学号:%d\n",a[j].name,a[j].number)
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer)
break
}
}
}
printf("根据数学情况排名如下:\n")
for(i=0i<n-1i++)
{
for(j=i+1j<nj++)
{
if(a[i].math<a[j].math)
{
temporary=mpm[j]
mpm[j]=mpm[i]
mpm[i]=temporary
}
}
}
for(i=0i<ni++)
{
for(j=0j<nj++)
{
if(mpm[i]==j+1)
{
printf("第%d:\n",i+1)
printf("名字:%s 学号:%d\n",a[j].name,a[j].number)
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer)
break
}
}
}
printf("根据英语情况排名如下:\n")
for(i=0i<n-1i++)
{
for(j=i+1j<nj++)
{
if(a[i].English<a[j].English)
{
temporary=epm[j]
epm[j]=epm[i]
epm[i]=temporary
}
}
}
for(i=0i<ni++)
{
for(j=0j<nj++)
{
if(epm[i]==j+1)
{
printf("第%d:\n",i+1)
printf("名字:%s 学号:%d\n",a[j].name,a[j].number)
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer)
break
}
}
}
printf("根据计算机情况排名如下:\n")
for(i=0i<n-1i++)
{
for(j=i+1j<nj++)
{
if(a[i].computer<a[j].computer)
{
temporary=cpm[j]
cpm[j]=cpm[i]
cpm[i]=temporary
}
}
}
for(i=0i<ni++)
{
for(j=0j<nj++)
{
if(cpm[i]==j+1)
{
printf("第%d:\n",i+1)
printf("名字:%s 学号:%d\n",a[j].name,a[j].number)
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer)
break
}
}
}
}
void census(struct Stu a[],int n)
{
int i,count=0
printf("\n数学中不及格的人数有:\n")
for(i=0i<ni++)
{
if(a[i].math<60)
{
count++
printf("学号:%d 姓名:%s 数学:%lf\n",a[i].number,a[i].name,a[i].math)
}
}
printf("共有%d人\n\n",count)
count=0
printf("英语中不及格的人数有:\n")
for(i=0i<ni++)
{
if(a[i].English<60)
{
count++
printf("学号:%d 姓名:%s 英语:%lf\n",a[i].number,a[i].name,a[i].English)
}
}
printf("共有%d人\n\n",count)
count=0
printf("计算机中不及格的人数有:\n")
for(i=0i<ni++)
{
if(a[i].computer<60)
{
count++
printf("学号:%d 姓名:%s 计算机:%lf\n",a[i].number,a[i].name,a[i].computer)
}
}
printf("共有%d人\n\n",count)
count=0
}
void found(struct Stu a[],int n)
{
int i,c
printf("请输入你要查找的学号:\n")
scanf("%d",&c)
for(i=0i<ni++)
{
if(c==a[i].number)
{
printf("姓名:%s 学号:%d\n",a[i].name,a[i].number)
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[i].math,a[i].English,a[i].computer)
}
}
}
i=1t=0
n=0
DO
PRINT "输入第i个成绩,i="; i
INPUT “数学成绩”; X
IF X>=60 THEN t=t+1
END IF
n=n+X
i=i+1
LOOP UNTIL i>50
n=n/50
PRINT "及格人数"; t
PRINT "平均分数"; n
END
说明:每循环一次,输入一个成绩,循环程序中输出的 i 提示输入第几个成绩。i、t 、n为三个独立的记数变量。 i记录输入的成绩个数;t记录超过60分的人数;n记录各个同学的总分之和。
这应该是高中必修3的题,我也忘的差不多了……
另外,上面那个求的是所有同学的总平均分,如果是只求及格同学的平均分的话,程序如下:
i=1
t=0
n=0
DO
PRINT "输入第i个成绩,i="; i
INPUT “数学成绩”; X
IF X>=60 THEN t=t+1 n=n+X
END IF
i=i+1
LOOP UNTIL i>50
n=n/t
PRINT "及格人数"; t
PRINT "平均分数"; n
END
这里的n就是记录及格同学的分数之和了。
#include <iostream>#include <string>
using namespace std#define max 20typedef struct _Student{
string name
string id
float math, com, eng, total//对应为数学,计算机,英语,总分
}Studentvoid search(Student data[]){ //找人并显示
string id
cout<<"\n输入学生学号: "
cin>>id
for (int i=0i<maxi++){
if (id == data[i].id){
cout<<endl
<<"姓名 : "<<data[i].name<<endl
<<"学号 : "<<data[i].id<<endl
<<"数学 : "<<data[i].math<<endl
<<"英语 : "<<data[i].eng<<endl
<<"计算机: "<<data[i].com<<endl
<<"总分 : "<<data[i].total<<endl<<endl
return
}
}
cout<<endl
<<"没有找到学号为: "<<id<<" 的学生"<<endl
}void copyStudent(Student* a, Student* b){//把B复制给A
a->name = b->name
a->id = b->id
a->math = b->math
a->eng = b->eng
a->com = b->com
a->total = b->total
}
void sort(Student data[]){//排序
for(int i=0i<max-1i++){
for (int j=0j<max-1j++){
if (data[j].total <data[j+1].total){
Student temp
copyStudent(&temp, &data[j])
copyStudent(&data[j],&data[j+1])
copyStudent(&data[j+1],&temp)
}
}
}
}void statistics(Student data[]){//统计
int fMath=0, fEng=0, fCom=0
for (int i=0i<maxi++){
if (data[i].math <60.f)
fMath++
if (data[i].eng <60.f)
fEng++
if (data[i].com <60.f)
fCom++
}
cout<<endl
<<"数学不及格 : "<<fMath<<endl
<<"英语不及格 : "<<fEng<<endl
<<"计算机不及格: "<<fCom<<endl<<endl
}void input(Student data[]){//输入数据
int i=0
char c
do{
cout<<endl
<<"输入姓名: "
cin>>data[i].name
cout<<"输入学号: "
cin>>data[i].id
cout<<"输入数学课成绩: "
cin>>data[i].math
cout<<"输入英语课成绩: "
cin>>data[i].eng
cout<<"输入计算机课成绩: "
cin>>data[i].com
data[i].total = (data[i].math + data[i].eng + data[i].com)/3.f
i++
cout<<"继续? (y/n): "
cin>>c
}while (i<max &&( c== 'y' || c== 'Y'))
}void displayAll(Student data[]){//显示全部
for (int i=0i<maxi++){
if (data[i].total != -1){
cout<<endl
<<"#"<<i+1<<endl
<<"姓名 :"<<data[i].name<<endl
<<"学号 :"<<data[i].id<<endl
<<"数学 :"<<data[i].math<<endl
<<"英语 :"<<data[i].eng<<endl
<<"计算机:"<<data[i].com<<endl
<<"总分 :"<<data[i].name<<endl<<endl
}
}
}void init(Student data[]){
for (int i=0i<maxi++){
data[i].name = " "
data[i].id = " "
data[i].math = 100.f
data[i].eng = 100.f
data[i].com = 100.f
data[i].total = -1.f
}
}int main(){
Student data[max]
init(data)
input(data)
sort(data)
displayAll(data)
statistics(data)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)