任务1:
某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理:
(1) 录入每个学生的学号和考试成绩;
(2) 计算课程的总分和平均分;
(3) 按成绩由高到低排出名次表;
(4) 按学号由小到大排出成绩表;
(5) 按学号查询学生排名及其考试成绩;
(6) 按优秀(90~100)、良好(70~89)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数及其所占的百分比;
(7) 输出每个学生的学号、考试成绩,课程总分和平均分。
#include <stdio.h>
#define maxnum 30
void sort1(int student[maxnum][2],int num);
void sort2(int student[maxnum][2],int num);
void search(int student[maxnum][2],int num,int stuID);
void main()
{
int num,sum=0,i,stuID=0,stuScore=0;
printf("请输入学生数量:\n");
scanf("%d",&num);
printf("请输入学号和分数:\n");
int student[maxnum][2];
for(i=0;i<num;i++)
{
scanf("%d,%d",&stuID,&stuScore);
student[i][0]=stuID;
student[i][1]=stuScore;
}
for(i=0;i<num;i++)
{
sum+=student[i][1];
}
printf("总分为:%d\n",sum);
printf("平均分是:%d\n",sum/num);
printf("按成绩排名次表:\n");
sort1(student,num);
printf("按学号排名次表:\n");
sort2(student,num);
printf("请输入你想查询的学生学号:\n");
scanf("%d",&stuID);
search(student,num,stuID );
printf("优秀\t 良好\t 及格\t 不及格\n");
float y=0.0,l=0.0,j=0.0,b=0.0;
for(i=0;i<num+1;i++)
{
if(student[i][1]<=100&&student[i][1]>=90)
{
y++;
}
else
if(student[i][1]<=89&&student[i][1]>=70)
{
l++;
}
else
if(student[i][1]<=69&&student[i][1]>=60)
{
j++;
}
else
if(student[i][1]<=59&&student[i][1]>=0)
{
b++;
}
}
printf("%.0f\t %.0f\t %.0f\t %.0f\n",y,l,j,b);
printf("%.2f%%\t %.2f%%\t %.2f%%\t %.2f%%\n",y/num*100,l/num*100,j/num*100,b/num*100);
}
void sort1(int student[maxnum][2],int num)
{
int temp1,temp2,i,j;
for(i=0;i<num;i++)
{
for(j=0;j<num;j++)
{
if(student[j][1]<student[j+1][1])
{
//学号交换
temp1=student[j][0];
student[j][0]=student[j+1][0];
student[j+1][0]=temp1;
//成绩交换
temp2=student[j][1];
student[j][1]=student[j+1][1];
student[j+1][1]=temp2;
}
}
}
for(i=0;i<num;i++)
{
printf("%d\t%d\n",student[i][0],student[i][1]);
}
}
void sort2(int student[maxnum][2],int num)
{
int temp1,temp2,i,j;
for(i=0;i<num;i++)
{
for(j=0;j<num-1;j++)
{
if(student[j][0]>student[j+1][0])
{
//学号交换
temp1=student[j][0];
student[j][0]=student[j+1][0];
student[j+1][0]=temp1;
//成绩交换
temp2=student[j][1];
student[j][1]=student[j+1][1];
student[j+1][1]=temp2;
}
}
}
for(i=0;i<num;i++)
{
printf("%d\t%d\n",student[i][0],student[i][1]);
}
}
void search(int student[maxnum][2],int num,int stuID)//查询
{
for(int i=0;i<num;i++)
{
if(stuID==student[i][0])
{
printf("学号:%d 名次%d ,其考试成绩:%d\n",student[i][0],i+1,student[i][1]);
}
}
}
运行结果:
----------------------分割线----------------------
任务2:
从键盘输入5个整数存入一维数组中,输出最大的数,再按反序输出(要求用指针访问数组元素)
#include<stdio.h>
void F(int *a,int n)
{
int t,*p,*i,*j,m=(n-1)/2;
i=a;
j=a+n-1;
p=a+m;
for(;i<=p;i++,j--)
{
t=*i;
*i=*j;
*j=t;
}
}
int main()
{
int i,m=0,*p;
int x[5];
printf("请输入5个数字:\n");
for(i=0;i<5;i++)
scanf("%d",&x[i]);
for(p=x;p<x+5;p++)
{
if(m>*p)
{
m=m;
}
m=*p;
}
printf("其中,最大的数是:%d\n",m);
F(x,5);
for(i=0;i<5;i++)
printf("%d",x[i]);
printf("\n");
return 0;
}
运行结果: