用C语言编写一程序,统计N个学生的成绩信息。

用C语言编写一程序,统计N个学生的成绩信息。,第1张

#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=1

t=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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12136867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存